Skip to content

Commit aa8a969

Browse files
authored
feat: add support for Azure OpenAI deployment (#293)
1 parent 0e93095 commit aa8a969

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ Custom OpenAI API host with the configuration option `api_host_cmd` or
3232
environment variable called `$OPENAI_API_HOST`. It's useful if you can't access
3333
OpenAI directly
3434

35+
For Azure deployments, you also need to set environment variables
36+
`$OPENAI_API_TYPE` to `azure`, `$OPENAI_API_BASE` to your own resource URL,
37+
e.g. `https://{your-resource-name}.openai.azure.com`, and `$OPENAI_API_AZURE_ENGINE`
38+
to your deployment ID. Optionally, if you need a different API version,
39+
set `$OPENAI_API_AZURE_VERSION` as well. Note that edit models have been deprecated
40+
so they might not work.
41+
3542
```lua
3643
-- Packer
3744
use({

lua/chatgpt/api.lua

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function Api.chat_completions(custom_params, cb, should_stop)
2828
"-H",
2929
"Content-Type: application/json",
3030
"-H",
31-
"Authorization: Bearer " .. Api.OPENAI_API_KEY,
31+
Api.AUTHORIZATION_HEADER,
3232
"-d",
3333
vim.json.encode(params),
3434
},
@@ -103,7 +103,7 @@ function Api.make_call(url, params, cb)
103103
"-H",
104104
"Content-Type: application/json",
105105
"-H",
106-
"Authorization: Bearer " .. Api.OPENAI_API_KEY,
106+
Api.AUTHORIZATION_HEADER,
107107
"-d",
108108
"@" .. TMP_MSG_FILENAME,
109109
},
@@ -222,6 +222,31 @@ local function loadApiKey(envName, configName, optionName, callback, defaultValu
222222
end
223223
end
224224

225+
local function loadAzureConfigs()
226+
loadApiKey("OPENAI_API_BASE", "OPENAI_API_BASE", "azure_api_base_cmd", function(value)
227+
Api.OPENAI_API_BASE = value
228+
end)
229+
loadApiKey("OPENAI_API_AZURE_ENGINE", "OPENAI_API_AZURE_ENGINE", "azure_api_engine_cmd", function(value)
230+
Api.OPENAI_API_AZURE_ENGINE = value
231+
end)
232+
loadApiHost("OPENAI_API_AZURE_VERSION", "OPENAI_API_AZURE_VERSION", "azure_api_version_cmd", function(value)
233+
Api.OPENAI_API_AZURE_VERSION = value
234+
end, "2023-05-15")
235+
236+
if Api["OPENAI_API_BASE"] and Api["OPENAI_API_AZURE_ENGINE"] then
237+
Api.COMPLETIONS_URL = Api.OPENAI_API_BASE
238+
.. "/openai/deployments/"
239+
.. Api.OPENAI_API_AZURE_ENGINE
240+
.. "/completions?api-version="
241+
.. Api.OPENAI_API_AZURE_VERSION
242+
Api.CHAT_COMPLETIONS_URL = Api.OPENAI_API_BASE
243+
.. "/openai/deployments/"
244+
.. Api.OPENAI_API_AZURE_ENGINE
245+
.. "/chat/completions?api-version="
246+
.. Api.OPENAI_API_AZURE_VERSION
247+
end
248+
end
249+
225250
function Api.setup()
226251
loadApiHost("OPENAI_API_HOST", "OPENAI_API_HOST", "api_host_cmd", function(value)
227252
Api.OPENAI_API_HOST = value
@@ -233,6 +258,14 @@ function Api.setup()
233258
loadApiKey("OPENAI_API_KEY", "OPENAI_API_KEY", "api_key_cmd", function(value)
234259
Api.OPENAI_API_KEY = value
235260
end)
261+
262+
loadConfigFromEnv("OPENAI_API_TYPE", "OPENAI_API_TYPE")
263+
if Api["OPENAI_API_TYPE"] == "azure" then
264+
loadAzureConfigs()
265+
Api.AUTHORIZATION_HEADER = "api-key: " .. Api.OPENAI_API_KEY
266+
else
267+
Api.AUTHORIZATION_HEADER = "Authorization: Bearer " .. Api.OPENAI_API_KEY
268+
end
236269
end
237270

238271
function Api.exec(cmd, args, on_stdout_chunk, on_complete, should_stop, on_stop)

0 commit comments

Comments
 (0)