U
    hO                     @  s   d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ ed
dddG dd deZdS )z Azure OpenAI embeddings wrapper.    )annotationsN)CallableDictOptionalUnion)
deprecated)Fieldroot_validator)get_from_dict_or_env)OpenAIEmbeddings)is_openai_v1z0.0.9z1.0z&langchain_openai.AzureOpenAIEmbeddings)ZsinceZremovalZalternative_importc                   @  s   e Zd ZU dZdZded< edddZded< edd	dZded
< dZ	ded< dZ
ded< edddZded< dZded< edddddddZeddddddddZeddddZdS ) AzureOpenAIEmbeddingsz`Azure OpenAI` Embeddings API.NzUnion[str, None]azure_endpointazure_deployment)defaultaliaszOptional[str]
deploymentapi_keyopenai_api_keyazure_ad_tokenzUnion[Callable[[], str], None]azure_ad_token_providerapi_versionopenai_api_versionTboolvalidate_base_url)prer   )valuesreturnc                 C  s  | dptdptd|d< | dp4td|d< | dpPtjddd	|d< t|d
ddd	|d
< | dptdptd|d< t|dddd	|d< | dptd|d< | dptd|d< t|d d|d< zddl}W n tk
r   tdY nX t r|d }|r|d rd|krd|d  d7  < t	d| d|d  d  |d! rt	d" |d! |d krt	d#| d|d  d  |d  d$|d!  7  < d|d!< |S )%z?Validate that api key and python package exists in environment.r   ZAZURE_OPENAI_API_KEYZOPENAI_API_KEYopenai_api_baseZOPENAI_API_BASEr   ZOPENAI_API_VERSIONz
2023-05-15)r   Zopenai_api_typeZOPENAI_API_TYPEZazureopenai_organizationZOPENAI_ORG_IDZOPENAI_ORGANIZATIONZopenai_proxyZOPENAI_PROXY r   ZAZURE_OPENAI_ENDPOINTr   ZAZURE_OPENAI_AD_TOKEN
chunk_sizei   r   NzTCould not import openai python package. Please install it with `pip install openai`.r   z/openaizAs of openai>=1.0.0, Azure endpoints should be specified via the `azure_endpoint` param not `openai_api_base` (or alias `base_url`). Updating `openai_api_base` from z to .r   zAs of openai>=1.0.0, if `deployment` (or alias `azure_deployment`) is specified then `openai_api_base` (or alias `base_url`) should not be. Instead use `deployment` (or alias `azure_deployment`) and `azure_endpoint`.zAs of openai>=1.0.0, if `openai_api_base` (or alias `base_url`) is specified it is expected to be of the form https://example-resource.azure.openai.com/openai/deployments/example-deployment. Updating z/deployments/)
getosgetenvr
   minopenaiImportErrorr   warningswarn)clsr   r'   r    r,   O/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/azure_openai.pyvalidate_environment9   s~    
 
   






z*AzureOpenAIEmbeddings.validate_environmentF)r   Zskip_on_failurec                 C  s   ddl }t r|d |d |d |d |d |d |d	 |d
 |d |d |d |d |d d}|jf |j|d< |jf |j|d< n
|j|d< |S )z"Validate that the base url is set.r   Nr   r   r   r   r   r   r   r   request_timeoutmax_retriesdefault_headersdefault_queryhttp_client)r   r   r   r   r   r   Zorganizationbase_urltimeoutr0   r1   r2   r3   clientZasync_client)r'   r   ZAzureOpenAIZ
embeddingsZAsyncAzureOpenAIZ	Embedding)r+   r   r'   Zclient_paramsr,   r,   r-   post_init_validator   s(    
z)AzureOpenAIEmbeddings.post_init_validatorstr)r   c                 C  s   dS )Nzazure-openai-chatr,   )selfr,   r,   r-   	_llm_type   s    zAzureOpenAIEmbeddings._llm_type)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r   r	   r.   r7   propertyr:   r,   r,   r,   r-   r      s   
S
r   )r>   
__future__r   r$   r)   typingr   r   r   r   Zlangchain_core._api.deprecationr   Zlangchain_core.pydantic_v1r   r	   Zlangchain_core.utilsr
   Z%langchain_community.embeddings.openair   Z langchain_community.utils.openair   r   r,   r,   r,   r-   <module>   s   