ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
from openai import AsyncAzureOpenAI as AsyncAzureOpenAIClient
|
||||
from openai.types.shared import ChatModel
|
||||
|
||||
from browser_use.llm.openai.like import ChatOpenAILike
|
||||
|
||||
|
||||
@dataclass
|
||||
class ChatAzureOpenAI(ChatOpenAILike):
|
||||
"""
|
||||
A class for to interact with any provider using the OpenAI API schema.
|
||||
|
||||
Args:
|
||||
model (str): The name of the OpenAI model to use. Defaults to "not-provided".
|
||||
api_key (Optional[str]): The API key to use. Defaults to "not-provided".
|
||||
"""
|
||||
|
||||
# Model configuration
|
||||
model: str | ChatModel
|
||||
|
||||
# Client initialization parameters
|
||||
api_key: str | None = None
|
||||
api_version: str | None = '2024-12-01-preview'
|
||||
azure_endpoint: str | None = None
|
||||
azure_deployment: str | None = None
|
||||
base_url: str | None = None
|
||||
azure_ad_token: str | None = None
|
||||
azure_ad_token_provider: Any | None = None
|
||||
|
||||
default_headers: dict[str, str] | None = None
|
||||
default_query: dict[str, Any] | None = None
|
||||
|
||||
client: AsyncAzureOpenAIClient | None = None
|
||||
|
||||
@property
|
||||
def provider(self) -> str:
|
||||
return 'azure'
|
||||
|
||||
def _get_client_params(self) -> dict[str, Any]:
|
||||
_client_params: dict[str, Any] = {}
|
||||
|
||||
self.api_key = self.api_key or os.getenv('AZURE_OPENAI_API_KEY')
|
||||
self.azure_endpoint = self.azure_endpoint or os.getenv('AZURE_OPENAI_ENDPOINT')
|
||||
self.azure_deployment = self.azure_deployment or os.getenv('AZURE_OPENAI_DEPLOYMENT')
|
||||
params_mapping = {
|
||||
'api_key': self.api_key,
|
||||
'api_version': self.api_version,
|
||||
'organization': self.organization,
|
||||
'azure_endpoint': self.azure_endpoint,
|
||||
'azure_deployment': self.azure_deployment,
|
||||
'base_url': self.base_url,
|
||||
'azure_ad_token': self.azure_ad_token,
|
||||
'azure_ad_token_provider': self.azure_ad_token_provider,
|
||||
'http_client': self.http_client,
|
||||
}
|
||||
if self.default_headers is not None:
|
||||
_client_params['default_headers'] = self.default_headers
|
||||
if self.default_query is not None:
|
||||
_client_params['default_query'] = self.default_query
|
||||
|
||||
_client_params.update({k: v for k, v in params_mapping.items() if v is not None})
|
||||
|
||||
return _client_params
|
||||
|
||||
def get_client(self) -> AsyncAzureOpenAIClient:
|
||||
"""
|
||||
Returns an asynchronous OpenAI client.
|
||||
|
||||
Returns:
|
||||
AsyncAzureOpenAIClient: An instance of the asynchronous OpenAI client.
|
||||
"""
|
||||
if self.client:
|
||||
return self.client
|
||||
|
||||
_client_params: dict[str, Any] = self._get_client_params()
|
||||
|
||||
if self.http_client:
|
||||
_client_params['http_client'] = self.http_client
|
||||
else:
|
||||
# Create a new async HTTP client with custom limits
|
||||
_client_params['http_client'] = httpx.AsyncClient(
|
||||
limits=httpx.Limits(max_connections=20, max_keepalive_connections=6)
|
||||
)
|
||||
|
||||
self.client = AsyncAzureOpenAIClient(**_client_params)
|
||||
|
||||
return self.client
|
||||
Reference in New Issue
Block a user