From de59656b2a09cf9a25bd0c82438c7eb72bb1af5b Mon Sep 17 00:00:00 2001 From: Chenjianyu Date: Tue, 15 Aug 2023 14:01:55 +0800 Subject: [PATCH] * allow making AI request through azure. --- module/ai/config.php | 16 ++++++++++++---- module/ai/model.php | 11 +++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/module/ai/config.php b/module/ai/config.php index a6b2359abd..264e048e53 100644 --- a/module/ai/config.php +++ b/module/ai/config.php @@ -5,10 +5,18 @@ $config->ai->vendorList['azure']['requiredFields'] = array('key', 'resource', ' $config->ai->openai = new stdclass(); $config->ai->openai->api = new stdclass(); -$config->ai->openai->api->version = 'v1'; // OpenAI API version, required. -$config->ai->openai->api->format = 'https://api.openai.com/%s/%s'; // OpenAI API format, args: API version, API name. -$config->ai->openai->api->authFormat = 'Authorization: Bearer %s'; // OpenAI API auth header format. -$config->ai->openai->api->methods = array('function' => 'chat/completions', 'chat' => 'chat/completions', 'completion' => 'completions', 'edit' => 'edits'); +$config->ai->openai->api->vendor = array('openai', 'azure'); +$config->ai->openai->api->openai = new stdclass(); +$config->ai->openai->api->openai->version = 'v1'; // OpenAI API version, required. +$config->ai->openai->api->openai->format = 'https://api.openai.com/%s/%s'; // OpenAI API format, args: API version, API name. +$config->ai->openai->api->openai->authFormat = 'Authorization: Bearer %s'; // OpenAI API auth header format. +$config->ai->openai->api->azure = new stdclass(); +$config->ai->openai->api->azure->resource = 'openai-at-zentao'; // your Azure OpenAI resource name, required. +$config->ai->openai->api->azure->deployment = 'the-first-gpt'; // your Azure OpenAI deployment name, required. +$config->ai->openai->api->azure->apiVersion = '2023-07-01-preview'; // Azure OpenAI API version, required. +$config->ai->openai->api->azure->format = 'https://%s.openai.azure.com/openai/deployments/%s/%s?api-version=%s'; // Azure API format, args: resource name, deployment name, API name, API version. +$config->ai->openai->api->azure->authFormat = 'api-key: %s'; // Azure API auth header format. +$config->ai->openai->api->methods = array('function' => 'chat/completions', 'chat' => 'chat/completions', 'completion' => 'completions', 'edit' => 'edits'); $config->ai->openai->params = new stdclass(); $config->ai->openai->params->chat = new stdclass(); diff --git a/module/ai/model.php b/module/ai/model.php index 15c674894e..afe28d7764 100644 --- a/module/ai/model.php +++ b/module/ai/model.php @@ -70,11 +70,18 @@ class aiModel extends model if(json_last_error()) $postData = $data; /* Set auth and content-type headers. */ - $requestHeaders = array(sprintf($this->config->ai->openai->api->authFormat, $this->modelConfig->key)); + $requestHeaders = array(sprintf($this->config->ai->openai->api->{$this->modelConfig->vendor}->authFormat, $this->modelConfig->key)); $requestHeaders[] = isset($this->config->ai->openai->contentType[$type]) ? $this->config->ai->openai->contentType[$type] : $this->config->ai->openai->contentType['']; /* Assemble request url. */ - $url = sprintf($this->config->ai->openai->api->format, $this->config->ai->openai->api->version, $this->config->ai->openai->api->methods[$type]); + if($this->modelConfig->vendor == 'azure') + { + $url = sprintf($this->config->ai->openai->api->azure->format, $this->config->ai->openai->api->azure->resource, $this->config->ai->openai->api->azure->deployment, $this->config->ai->openai->api->methods[$type], $this->config->ai->openai->api->azure->apiVersion); + } + else + { + $url = sprintf($this->config->ai->openai->api->openai->format, $this->config->ai->openai->api->openai->version, $this->config->ai->openai->api->methods[$type]); + } /* Set up requestor. */ $ch = curl_init();