PlanOpticon
| 0981a08… | noreply | 1 | """Azure OpenAI provider implementation.""" |
| 0981a08… | noreply | 2 | |
| 0981a08… | noreply | 3 | import os |
| 0981a08… | noreply | 4 | |
| 0981a08… | noreply | 5 | from video_processor.providers.base import OpenAICompatibleProvider, ProviderRegistry |
| 0981a08… | noreply | 6 | |
| 0981a08… | noreply | 7 | |
| 0981a08… | noreply | 8 | class AzureOpenAIProvider(OpenAICompatibleProvider): |
| 0981a08… | noreply | 9 | """Azure OpenAI API provider. |
| 0981a08… | noreply | 10 | |
| 0981a08… | noreply | 11 | Uses the AzureOpenAI client which requires an endpoint and API version |
| 0981a08… | noreply | 12 | in addition to the API key. |
| 0981a08… | noreply | 13 | """ |
| 0981a08… | noreply | 14 | |
| 0981a08… | noreply | 15 | provider_name = "azure" |
| 0981a08… | noreply | 16 | env_var = "AZURE_OPENAI_API_KEY" |
| 0981a08… | noreply | 17 | |
| 0981a08… | noreply | 18 | def __init__(self, api_key=None, endpoint=None, api_version=None): |
| 0981a08… | noreply | 19 | from openai import AzureOpenAI |
| 0981a08… | noreply | 20 | |
| 0981a08… | noreply | 21 | self._api_key = api_key or os.getenv("AZURE_OPENAI_API_KEY", "") |
| 0981a08… | noreply | 22 | endpoint = endpoint or os.getenv("AZURE_OPENAI_ENDPOINT", "") |
| 0981a08… | noreply | 23 | api_version = api_version or os.getenv("AZURE_OPENAI_API_VERSION", "2024-02-15-preview") |
| 0981a08… | noreply | 24 | self._client = AzureOpenAI( |
| 0981a08… | noreply | 25 | api_key=self._api_key, |
| 0981a08… | noreply | 26 | azure_endpoint=endpoint, |
| 0981a08… | noreply | 27 | api_version=api_version, |
| 0981a08… | noreply | 28 | ) |
| 0981a08… | noreply | 29 | self._last_usage = None |
| 0981a08… | noreply | 30 | |
| 0981a08… | noreply | 31 | |
| 0981a08… | noreply | 32 | ProviderRegistry.register( |
| 0981a08… | noreply | 33 | name="azure", |
| 0981a08… | noreply | 34 | provider_class=AzureOpenAIProvider, |
| 0981a08… | noreply | 35 | env_var="AZURE_OPENAI_API_KEY", |
| 0981a08… | noreply | 36 | model_prefixes=[], # Azure uses deployment names, not standard prefixes |
| 0981a08… | noreply | 37 | default_models={"chat": "", "vision": "", "audio": ""}, |
| 0981a08… | noreply | 38 | ) |