
    :jD                         d Z ddlZddlmZ ddlmZ  ed      ZddlmZm	Z	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  G d de      Z ede       y)z'
Azure OpenAI provider implementation.
    N)	Condition)
get_loggerprovider)DictListOptional)ErrorReason)CheckResult)get_user_agent)trim   )OpenAILikeProvider)register_providerc                        e Zd ZdZdee   f fdZddedee	   dee	   fdZ
ded	edef fd
ZddedededefdZddededededef
 fdZddedededee   fdZ xZS )AzureOpenAIProviderz%Azure OpenAI provider implementation.
conditionsc                    | j                  |dddd       d|d<   t        |j                  dd            sd	|d<   |D ]`  }|r|j                  s|j                  j                  sd
|j                  _        |j                  j
                  rPd|j                  _        b t        |j                  dd            }t        |   dd|i| |xs d| _        y )Nazurez/modelszgpt-4o)name
model_pathdefault_modelz/chat/completionscompletion_pathbase_url zhttps://fake.openai.azure.comz2https://[a-zA-Z0-9_\-\.]+.openai.azure.com/openai/z#/deployments/([a-zA-Z0-9_\-]+)/chatapi_versionr   z
2024-10-21 )	defaultsr   getpatternsaddress_patternendpoint_patternsuper__init__r   )selfr   kwargs	conditionr   	__class__s        </root/.openclaw/workspace/harvester/search/provider/azure.pyr#   zAzureOpenAIProvider.__init__   s    '!)	
 %8 !FJJz2./!@F:# 	]II$6$6%%555j	""2%%666\	""3	] 6::mR899J9&9&6,    token
additionalreturnc                 `    t        |      }|syd|dt               d}| j                  ||      S )z*Get headers for Azure OpenAI API requests.Nzapplication/json)acceptzapi-keyzcontent-typez
user-agent)r   r   _merge_headers)r$   r*   r+   headerss       r(   _get_headersz AzureOpenAIProvider._get_headers:   s>    U ).(*	
 ""7J77r)   codemessagec                    |dk(  rwt        |      }t        j                  d|t        j                        r#t	        j
                  t        j                        S t	        j
                  t        j                        S t        | )  ||      S )z Judge Azure OpenAI API response.i  z3The API deployment for this resource does not existflags)r   refinditerIr
   failr	   NO_MODELINVALID_KEYr"   _judge)r$   r2   r3   r'   s      r(   r=   zAzureOpenAIProvider._judgeH   sk    3;7mG{{QSZbdbfbfg"''(<(<==##K$;$;<<w~dG,,r)   addressendpointmodelc                 `   t        |      j                  d      }t        j                  d|t        j                        syt        j
                  d|t        j                        ryt        |      xs t        |      xs | j                  }| d| d| j                   d| j                   S )z"Generate Azure OpenAI API address./^https?://([\w\-_]+\.[\w\-_]+)+r5   r   a  (xxx|YOUR_RESOURCE_NAME|your_service|YOUR_AZURE_OPENAI_NAME|YOUR-INSTANCE|YOUR_ENDPOINT_NAME|RESOURCE_NAME|YOURAOAIINSTANCE|yourname|YOUR_NAME|YOUR_AOAI_SERVICE|COMPANY|your-deployment-name|YOUR_AOI_SERVICE_NAME|YOUR_AI_ENDPOINT_NAME|YOUR-APP|YOUR-RESOURCE-NAME).openai.azure.comz/deployments/?api-version=)	r   removesuffixr7   matchr9   findall_default_modelr   r   )r$   r>   r?   r@   s       r(   __generate_addressz&AzureOpenAIProvider.__generate_addressS   s    w-,,S1xx:G244P:: g$$

 XD$u+D1D1D-wa0D0D/E]SWScScRdeer)   c                    t        |      }|s#t        j                  t        j                        S | j                  |||      }|s#t        j                  t        j                        S |st        |      }t        |   ||||      S )z"Check Azure OpenAI token validity.)r>   r?   r@   )r*   r>   r?   r@   )r   r
   r:   r	   r<   &_AzureOpenAIProvider__generate_addressr"   check)r$   r*   r>   r?   r@   urlr'   s         r(   rL   zAzureOpenAIProvider.checkc   s|    U##K$;$;<<%%gPU%V##K$;$;<<NEw}5#PU}VVr)   c                 ^   t        |      j                  d      }t        j                  d|t        j                        st
        j                  d| d       g S | j                  |      }|r| j                  sg S | d| j                   d| j                   }| j                  ||      S )	z#List available Azure OpenAI models.rB   rC   r5   zInvalid domain: z, skipping model listing)r*   rD   )rM   r0   )r   rE   r7   rF   r9   loggererrorr1   r   r   _fetch_models)r$   r*   r>   r?   domainr0   rM   s          r(   inspectzAzureOpenAIProvider.inspectr   s    g++C0xx:F"$$OLL+F83KLMI##%#0dooI$//*-8H8H7IJ!!c7!;;r)   )N)r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   r#   strr   r   r1   intr
   r=   rK   rL   rS   __classcell__)r'   s   @r(   r   r      s    /74	? 7>8# 88D> 8XVZ^ 8	-3 	- 	- 	-f# fc fs f\_ f W3 W WS Wc W[f W<S <3 <s <DQTI <r)   r   r   )rW   r7   core.modelsr   tools.loggerr   rO   typingr   r   r   
core.enumsr	   r
   tools.coordinatorr   tools.utilsr   openai_liker   registryr   r   r   r)   r(   <module>rc      sT    
 ! #	J	 ' ' " # ,  + 'f<, f<R '. /r)   