o
    Zh                      @  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	m
Z
mZ ddl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)Any	AwaitableCallableDictOptionalUnion)
deprecated)get_from_dict_or_env)Fieldmodel_validator)Self)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< 	 dZded< 	 edddZded< 	 dZded< edded$ddZeddd%dd Ze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_providerz)Union[Callable[[], Awaitable[str]], None]azure_ad_async_token_providerapi_versionopenai_api_versionTboolvalidate_base_urlbefore)modevaluesr   returnr   c                 C  s  | dptdptd|d< | dptd|d< | dp(tjddd	|d< t|d
ddd	|d
< | dpCtdpCtd|d< t|dddd	|d< | dpYtd|d< | dpetd|d< t|d d|d< zddl}W n ty   tdw t r|d }|r|d rd|vr|d  d7  < t	d| d|d  d  |d! rt	d" |d! |d v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#    r1   b/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/azure_openai.pyvalidate_environment@   s   





z*AzureOpenAIEmbeddings.validate_environmentafterr   c                 C  s   ddl }t rJ| j| j| j| j| j| j| j| j	| j
| ji | jp i ddi| j| jd}|jdi |j| _| jr>| j|d< |jdi |j| _| S |j| _| S )z"Validate that the base url is set.r   Nz
User-Agentz"langchain-comm-python-azure-openai)r   r   r   r   r   r   Zorganizationbase_urltimeoutmax_retriesdefault_headersdefault_queryhttp_clientr   r1   )r,   r   r   r   r   r   r   r   r$   r#   request_timeoutr7   r8   r9   r:   ZAzureOpenAIZ
embeddingsclientr   ZAsyncAzureOpenAIZasync_clientZ	Embedding)selfr,   Zclient_paramsr1   r1   r2   post_init_validator   s8   z)AzureOpenAIEmbeddings.post_init_validatorstrc                 C  s   dS )Nzazure-openai-chatr1   )r=   r1   r1   r2   	_llm_type   s   zAzureOpenAIEmbeddings._llm_type)r!   r   r"   r   )r"   r   )r"   r?   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r   r   r   classmethodr3   r>   propertyr@   r1   r1   r1   r2   r      s0   
 S#r   )rD   
__future__r   r)   r.   typingr   r   r   r   r   r   Zlangchain_core._api.deprecationr	   Zlangchain_core.utilsr
   Zpydanticr   r   Ztyping_extensionsr   Z%langchain_community.embeddings.openair   Z langchain_community.utils.openair   r   r1   r1   r1   r2   <module>   s"     