Skip to content

Commit 89ff6ec

Browse files
authored
Merge pull request #56 from Misakar-0v0/main
support openai azure api
2 parents a11e179 + 84bf6da commit 89ff6ec

3 files changed

Lines changed: 49 additions & 12 deletions

File tree

ghostos/app/configs/llms_conf.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
# from class: ghostos.framework.llms.providers:LLMsYamlConfig
22
default: gpt-4o
33
models:
4+
gpt-4o-2024-08-06:
5+
kwargs: { }
6+
max_tokens: 2000
7+
message_types: null
8+
model: gpt-4o-2024-08-06
9+
n: 1
10+
request_timeout: 40
11+
service: azure
12+
temperature: 0.7
13+
timeout: 30
14+
use_tools: true
415
claude-3-5-sonnet:
516
kwargs: { }
617
max_tokens: 2000
@@ -151,3 +162,9 @@ services:
151162
driver: openai_driver
152163
name: deepseek
153164
token: $DEEPSEEK_API_KEY
165+
- base_url: $AZURE_ENDPOINT
166+
name: azure
167+
driver: openai_driver
168+
azure:
169+
api_key: $AZURE_API_KEY
170+
api_version: 2023-07-01-preview

ghostos/core/llms/configs.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,18 @@ class Compatible(BaseModel):
6969
allow_system_in_messages: bool = Field(default=True, description="allow system messages in history")
7070

7171

72+
class Azure(BaseModel):
73+
api_key: str = Field(default="", description="azure api key. if start with `$`, will read environment variable of it")
74+
api_version: str = Field(default="", description="azure api version")
75+
76+
7277
class ServiceConf(BaseModel):
7378
"""
7479
The model api service configuration
7580
"""
7681

7782
name: str = Field(description="Service name")
78-
base_url: str = Field(description="LLM service url")
83+
base_url: str = Field(description="LLM service url. if start with `$`, will read environment variable of it")
7984
token: str = Field(default="", description="access token. if start with `$`, will read environment variable of it")
8085
proxy: Optional[str] = Field(
8186
default=None,
@@ -92,10 +97,17 @@ class ServiceConf(BaseModel):
9297
description="the model api compatible configuration",
9398
)
9499

100+
azure: Azure = Field(
101+
default_factory=Azure,
102+
description="azure service configuration",
103+
)
104+
95105
def load(self, environ: Optional[Dict] = None) -> None:
96-
self.token = self._load_env(self.token, environ=environ)
97-
if self.proxy is not None:
98-
self.proxy = self._load_env(self.proxy, environ=environ)
106+
attributes = [(self, 'base_url'), (self, 'token'), (self, 'proxy'), (self.azure, 'api_key')]
107+
for obj, attr in attributes:
108+
value = getattr(obj, attr)
109+
if value is not None:
110+
setattr(obj, attr, self._load_env(value, environ=environ))
99111

100112
@staticmethod
101113
def _load_env(value: str, environ: Optional[Dict] = None) -> str:

ghostos/framework/llms/openai_driver.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from typing import List, Iterable, Union, Optional
2-
from openai import OpenAI
2+
from openai import OpenAI, AzureOpenAI
33
from httpx import Client
44
from httpx_socks import SyncProxyTransport
55
from openai import NOT_GIVEN
@@ -89,13 +89,21 @@ def __init__(
8989
if service_conf.proxy:
9090
transport = SyncProxyTransport.from_url(service_conf.proxy)
9191
http_client = Client(transport=transport)
92-
self._client = OpenAI(
93-
api_key=service_conf.token,
94-
base_url=service_conf.base_url,
95-
# todo: 未来再做更多细节.
96-
max_retries=0,
97-
http_client=http_client,
98-
)
92+
self._logger.error(f"\n[service_conf] {service_conf.azure.api_key}")
93+
if service_conf.azure.api_key:
94+
self._client = AzureOpenAI(
95+
azure_endpoint=service_conf.base_url,
96+
api_version=service_conf.azure.api_version,
97+
api_key=service_conf.azure.api_key,
98+
)
99+
else:
100+
self._client = OpenAI(
101+
api_key=service_conf.token,
102+
base_url=service_conf.base_url,
103+
# todo: 未来再做更多细节.
104+
max_retries=0,
105+
http_client=http_client,
106+
)
99107
self._parser = parser
100108
if not functional_token_prompt:
101109
functional_token_prompt = DEFAULT_FUNCTIONAL_TOKEN_PROMPT

0 commit comments

Comments
 (0)