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
92 lines
2.7 KiB
Python
92 lines
2.7 KiB
Python
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
|