§
    šŠtj�   ã                  óÈ   — d dl mZ d dlZd dlmZmZmZmZ d dlZd dl	Z	d dl
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mZ d	Z	  G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú#AsyncCallbackManagerForRetrieverRunÚCallbackManagerForRetrieverRun)ÚDocument)ÚBaseRetriever)Úget_from_dict_or_envÚget_from_env)Ú
ConfigDictÚmodel_validatorzsearch.windows.netc                  ó:  — e Zd ZU dZdZded<   	 dZded<   	 dZded<   	 dZded<   	 d	Z	d
ed<   	 dZ
ded<   	 dZded<   	 d	Zded<   	 d	Zded<   	  edd¬¦  «        Z ed¬¦  «        ed*d„¦   «         ¦   «         Zd+d„Zed,d „¦   «         Zd-d"„Zd-d#„Zd.d'„Zd/d)„Zd	S )0ÚAzureAISearchRetrievera9  `Azure AI Search` service retriever.

    Setup:
        See here for more detail: https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/

        We will need to install the below dependencies and set the required
        environment variables:

        .. code-block:: bash

            pip install -U langchain-community azure-identity azure-search-documents
            export AZURE_AI_SEARCH_SERVICE_NAME="<YOUR_SEARCH_SERVICE_NAME>"
            export AZURE_AI_SEARCH_INDEX_NAME="<YOUR_SEARCH_INDEX_NAME>"

            export AZURE_AI_SEARCH_API_KEY="<YOUR_API_KEY>"
            or
            export AZURE_AI_SEARCH_BEARER_TOKEN="<YOUR_BEARER_TOKEN>"

    Key init args:
        content_key: str
        top_k: int
        index_name: str

    Instantiate:
        .. code-block:: python

            from langchain_community.retrievers import AzureAISearchRetriever

            retriever = AzureAISearchRetriever(
                content_key="content", top_k=1, index_name="langchain-vector-demo"
            )

    Usage:
        .. code-block:: python

            retriever.invoke("here is my unstructured query string")

    Use within a chain:
        .. code-block:: python

            from langchain_core.output_parsers import StrOutputParser
            from langchain_core.prompts import ChatPromptTemplate
            from langchain_core.runnables import RunnablePassthrough
            from langchain_openai import AzureChatOpenAI

            prompt = ChatPromptTemplate.from_template(
                """Answer the question based only on the context provided.

            Context: {context}

            Question: {question}"""
            )

            llm = AzureChatOpenAI(azure_deployment="gpt-35-turbo")

            def format_docs(docs):
                return "\n\n".join(doc.page_content for doc in docs)

            chain = (
                {"context": retriever | format_docs, "question": RunnablePassthrough()}
                | prompt
                | llm
                | StrOutputParser()
            )

            chain.invoke("...")

    Ú ÚstrÚservice_nameÚ
index_nameÚapi_keyz
2023-11-01Úapi_versionNzOptional[aiohttp.ClientSession]Ú
aiosessionÚazure_ad_tokenÚcontentÚcontent_keyzOptional[int]Útop_kzOptional[str]ÚfilterTÚforbid)Úarbitrary_types_allowedÚextraÚbefore)ÚmodeÚvaluesr   Úreturnr   c                óü   — t          |dd¦  «        |d<   t          |dd¦  «        |d<   t          |ddd¬¦  «        |d<   t          |d	d
d¬¦  «        |d	<   |d         dk    r|d	         dk    rt          d¦  «        ‚|S )zIValidate that service name, index name and api key exists in environment.r   ÚAZURE_AI_SEARCH_SERVICE_NAMEr   ÚAZURE_AI_SEARCH_INDEX_NAMEr   ÚAZURE_AI_SEARCH_AD_TOKENr   )Údefaultr   ÚAZURE_AI_SEARCH_API_KEYzšMissing credentials. Please pass one of `api_key`, `azure_ad_token`, or the `AZURE_AI_SEARCH_API_KEY` or `AZURE_AI_SEARCH_AD_TOKEN` environment variables.)r   Ú
ValueError)Úclsr#   s     úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/retrievers/azure_ai_search.pyÚvalidate_environmentz+AzureAISearchRetriever.validate_environmentz   sÊ   € õ "6Ø�NÐ$Bñ"
ô "
ˆˆ~Ñõ  4Ø�LÐ">ñ 
ô  
ˆˆ|Ñõ $8ØÐ$Ð&@È"ð$
ñ $
ô $
ˆÐÑ õ 1Ø�IÐ8À"ð
ñ 
ô 
ˆˆyÑð Ð"Ô# rÒ)Ð)¨f°YÔ.?À2Ò.EÐ.EÝð)ñô ð ð ˆó    Úqueryc                óÆ  — t          ddt          ¦  «        }|| j        v rd| j        v r| j        › d�}nf|| j        v rd| j        vrd| j        › d�}nH|| j        vrd| j        v r| j        › d|› d�}n(|| j        vrd| j        vrd| j        › d|› d�}n| j        }d| j        › d| j        › �}| j        r
d| j        › �nd}| j        r
d	| j        › �nd}||z   d
|› �z   |z   |z   S )Nr   ÚAZURE_AI_SEARCH_URL_SUFFIXzhttps://ú/ú.zindexes/z/docs?api-version=z&$top=z	&$filter=z&search=)r   ÚDEFAULT_URL_SUFFIXr   r   r   r   r   )Úselfr0   Ú
url_suffixÚbase_urlÚendpoint_pathÚ	top_paramÚfilter_params          r-   Ú_build_search_urlz(AzureAISearchRetriever._build_search_url“   s`  € Ý! "Ð&BÕDVÑWÔWˆ
Ø˜Ô*Ð*Ð*¨z¸TÔ=NÐ/NÐ/NØÔ+Ð.Ð.Ð.ˆHˆHØ˜4Ô,Ð,Ð,°À4ÔCTÐ1TÐ1TØ6 $Ô"3Ð6Ð6Ð6ˆHˆHØ˜tÔ0Ð0Ð0°ZÀ4ÔCTÐ5TÐ5TØÔ+Ð;Ð;¨jÐ;Ð;Ð;ˆHˆHà˜dÔ/Ð/Ð/°JÀdÔFWÐ4WÐ4WàC $Ô"3ÐCÐC°jÐCÐCÐCˆHˆHð Ô(ˆHØX 4¤?ÐXÐXÀdÔFVÐXÐXˆØ-1¬ZÐ?Ð)˜TœZÐ)Ð)Ð)¸Rˆ	Ø48´KÐGÐ0 4¤;Ð0Ð0Ð0ÀRˆØ˜-Ñ'Ð*<°UÐ*<Ð*<Ñ<¸yÑHÈ<ÑWÐWr/   úDict[str, str]c                ó\   — ddi}| j         rd| j         › �|d<   n| j        r| j        › |d<   |S )NzContent-Typezapplication/jsonzBearer ÚAuthorizationzapi-key)r   r   )r6   Úheaderss     r-   Ú_headerszAzureAISearchRetriever._headers§   sT   € ð Ð.ð
ˆð Ôð 	3Ø'F°Ô1DÐ'FÐ'FˆG�OÑ$Ð$ØŒ\ð 	3Ø$(¤LÐ!2ˆG�IÑØˆr/   ú
List[dict]c                óÚ   — |                       |¦  «        }t          j        || j        ¬¦  «        }|j        dk    rt          d|› �¦  «        ‚t          j        |j        ¦  «        d         S )N©r@   éÈ   zError in search request: Úvalue)	r<   ÚrequestsÚgetrA   Ústatus_codeÚ	ExceptionÚjsonÚloadsÚtext)r6   r0   Ú
search_urlÚresponses       r-   Ú_searchzAzureAISearchRetriever._search²   sg   € Ø×+Ò+¨EÑ2Ô2ˆ
Ý”< 
°D´MÐBÑBÔBˆØÔ 3Ò&Ð&ÝÐB¸ÐBÐBÑCÔCÐCåŒz˜(œ-Ñ(Ô(¨Ô1Ð1r/   c              ƒ  óV  K  — |                       |¦  «        }| j        sžt          j        ¦   «         4 ƒd {V —†}|                     || j        ¬¦  «        4 ƒd {V —†}|                     ¦   «         ƒ d {V —†}d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   nf| j                             || j        ¬¦  «        4 ƒd {V —†	 }|                     ¦   «         ƒ d {V —†}d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |d         S )NrD   rF   )r<   r   ÚaiohttpÚClientSessionrH   rA   rK   )r6   r0   rN   ÚsessionrO   Úresponse_jsons         r-   Ú_asearchzAzureAISearchRetriever._asearchº   sÆ  è è € Ø×+Ò+¨EÑ2Ô2ˆ
ØŒð 	6ÝÔ,Ñ.Ô.ð :ð :ð :ð :ð :ð :ð :°'Ø"Ÿ;š; z¸4¼=˜;ÑIÔIð :ð :ð :ð :ð :ð :ð :ÈXØ*2¯-ª-©/¬/Ð$9Ð$9Ð$9Ð$9Ð$9Ð$9�Mð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :øð ”×*Ò*Ø D¤Mð +ñ ô ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6àØ&.§m¢m¡o¤oÐ 5Ð 5Ð 5Ð 5Ð 5Ð 5�ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð
 ˜WÔ%Ð%sG   ¸#B+ÁBÁ6B+Â
B	ÂB+ÂB	ÂB+Â+
B5Â8B5Ã%DÄ
DÄDÚrun_managerr	   úList[Document]c               óJ   ‡ — ‰                       |¦  «        }ˆ fd„|D ¦   «         S )Nc                ób   •— g | ]+}t          |                     ‰j        ¦  «        |¬ ¦  «        ‘Œ,S ©)Úpage_contentÚmetadata©r
   Úpopr   ©Ú.0Úresultr6   s     €r-   ú
<listcomp>zBAzureAISearchRetriever._get_relevant_documents.<locals>.<listcomp>Í   óE   ø€ ð 
ð 
ð 
àõ  &§*¢*¨TÔ-=Ñ">Ô">ÈÐPÑPÔPð
ð 
ð 
r/   )rP   ©r6   r0   rW   Úsearch_resultss   `   r-   Ú_get_relevant_documentsz.AzureAISearchRetriever._get_relevant_documentsÈ   sA   ø€ ð Ÿš eÑ,Ô,ˆð
ð 
ð 
ð 
à(ð
ñ 
ô 
ð 	
r/   r   c             ƒ  óZ   ‡ K  — ‰                       |¦  «        ƒ d {V —†}ˆ fd„|D ¦   «         S )Nc                ób   •— g | ]+}t          |                     ‰j        ¦  «        |¬ ¦  «        ‘Œ,S r[   r^   r`   s     €r-   rc   zCAzureAISearchRetriever._aget_relevant_documents.<locals>.<listcomp>×   rd   r/   )rV   re   s   `   r-   Ú_aget_relevant_documentsz/AzureAISearchRetriever._aget_relevant_documentsÒ   sW   øè è € ð  $Ÿ}š}¨UÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3ˆð
ð 
ð 
ð 
à(ð
ñ 
ô 
ð 	
r/   )r#   r   r$   r   )r0   r   r$   r   )r$   r=   )r0   r   r$   rB   )r0   r   rW   r	   r$   rX   )r0   r   rW   r   r$   rX   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   r   r   r   r   Úmodel_configr   Úclassmethodr.   r<   ÚpropertyrA   rP   rV   rg   rj   © r/   r-   r   r      s»  € € € € € € ðCð CðJ €LÐÐÐÑØ)Ø€JÐÐÐÑØ6Ø€GÐÐÐÑð'à#€KÐ#Ð#Ð#Ñ#ØØ26€JÐ6Ð6Ð6Ñ6ØTØ€NÐÐÐÑðð !€KÐ Ð Ð Ñ ØHØ€EÐÐÐÑØMØ €FÐ Ð Ð Ñ Ø@à�:Ø $Øðñ ô €Lð
 €_˜(Ð#Ñ#Ô#Øðð ð ñ „[ñ $Ô#ðð.Xð Xð Xð Xð( ðð ð ñ „Xðð2ð 2ð 2ð 2ð&ð &ð &ð &ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r/   r   c                  ó   — e Zd ZdZdS )ÚAzureCognitiveSearchRetrieverz˜`Azure Cognitive Search` service retriever.
    This version of the retriever will soon be
    depreciated. Please switch to AzureAISearchRetriever
    N)rk   rl   rm   rn   rs   r/   r-   ru   ru   Þ   s   € € € € € ðð ð ð r/   ru   )Ú
__future__r   rK   Útypingr   r   r   r   rR   rG   Úlangchain_core.callbacksr   r	   Úlangchain_core.documentsr
   Úlangchain_core.retrieversr   Úlangchain_core.utilsr   r   Úpydanticr   r   r5   r   ru   rs   r/   r-   ú<module>r}      sE  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø €€€ðð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à)Ð Ø CðE
ð E
ð E
ð E
ð E
˜]ñ E
ô E
ð E
ðRð ð ð ð Ð$:ñ ô ð ð ð r/   