Ë
    µŒj�   ã                  óº   — 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y)é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú#AsyncCallbackManagerForRetrieverRunÚCallbackManagerForRetrieverRun)ÚDocument)ÚBaseRetriever)Úget_from_dict_or_envÚget_from_env)Ú
ConfigDictÚmodel_validatorzsearch.windows.netc                  ó2  — 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y	)%Ú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)Úmodec                óÄ   — 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)ÚclsÚvaluess     úx/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/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Üð)óð ð ˆó    c                óz  — t        ddt        «      }|| j                  v rd| j                  v r| j                  › d�}n˜|| j                  v rd| j                  vrd| j                  › d�}nk|| 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   )ÚselfÚqueryÚ
url_suffixÚbase_urlÚendpoint_pathÚ	top_paramÚfilter_params          r,   Ú_build_search_urlz(AzureAISearchRetriever._build_search_url“   sW  € Ü! "Ð&BÔDVÓWˆ
Ø˜×*Ñ*Ñ*¨z¸T×=NÑ=NÑ/NØ×+Ñ+Ð,¨AÐ.‰HØ˜4×,Ñ,Ñ,°À4×CTÑCTÑ1TØ! $×"3Ñ"3Ð!4°AÐ6‰HØ˜t×0Ñ0Ñ0°ZÀ4×CTÑCTÑ5TØ×+Ñ+Ð,¨A¨j¨\¸Ð;‰Hà˜d×/Ñ/Ñ/°JÀd×FWÑFWÑ4Wà! $×"3Ñ"3Ð!4°A°j°\ÀÐC‰Hð ×(Ñ(ˆHØ" 4§?¡?Ð"3Ð3EÀd×FVÑFVÐEWÐXˆØ-1¯ZªZ�f˜TŸZ™Z˜LÑ)¸Rˆ	Ø48·K²K˜ 4§;¡; -Ñ0ÀRˆØ˜-Ñ'¨H°U°GÐ*<Ñ<¸yÑHÈ<ÑWÐWr.   c                ó†   — ddi}| j                   rd| j                   › �|d<   |S | j                  r| j                  › |d<   |S )NzContent-Typezapplication/jsonzBearer ÚAuthorizationzapi-key)r   r   )r4   Úheaderss     r,   Ú_headerszAzureAISearchRetriever._headers§   sY   € ð Ð.ð
ˆð ×ÒØ)0°×1DÑ1DÐ0EÐ'FˆG�OÑ$ð ˆð �\Š\Ø$(§L¡L >ˆG�IÑØˆr.   c                óä   — | j                  |«      }t        j                  || j                  ¬«      }|j                  dk7  rt        d|› �«      ‚t        j                  |j                  «      d   S )N©r>   éÈ   zError in search request: Úvalue)	r;   ÚrequestsÚgetr?   Ústatus_codeÚ	ExceptionÚjsonÚloadsÚtext)r4   r5   Ú
search_urlÚresponses       r,   Ú_searchzAzureAISearchRetriever._search²   s_   € Ø×+Ñ+¨EÓ2ˆ
Ü—<‘< 
°D·M±MÔBˆØ×Ñ 3Ò&ÜÐ7¸°zÐBÓCÐCä�z‰z˜(Ÿ-™-Ó(¨Ñ1Ð1r.   c              ƒ  ó¬  K  — | j                  |«      }| j                  s€t        j                  «       4 ƒd {  –—† }|j	                  || j
                  ¬«      4 ƒd {  –—† }|j                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  d d d «      ƒd {  –—†  d   S | j                  j	                  || j
                  ¬«      4 ƒd {  –—† }|j                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  |d   S 7 ŒÄ7 Œ 7 ŒŠ7 Œ|# 1 ƒd {  –—†7  sw Y   ŒŒxY w7 Œƒ# 1 ƒd {  –—†7  sw Y   d   S xY w7 Œi7 ŒS7 ŒE# 1 ƒd {  –—†7  sw Y   d   S xY w­w)NrA   rC   )r;   r   ÚaiohttpÚClientSessionrE   r?   rH   )r4   r5   rK   ÚsessionrL   Úresponse_jsons         r,   Ú_asearchzAzureAISearchRetriever._asearchº   s,  è ø€ Ø×+Ñ+¨EÓ2ˆ
Ø�ŠÜ×,Ñ,×.Ô.°'Ø"Ÿ;™; z¸4¿=¹=˜;×IÔIÈXØ*2¯-©-«/×$9�M÷ J×I÷ /×.ð ˜WÑ%Ð%ð —‘×*Ñ*Ø D§M¡Mð +÷ ô àØ&.§m¡m£o× 5�÷÷ ð
 ˜WÑ%Ð%ð /øØIøØ$9øð Jø×I×IÑIúð /ø×.×.Ð.ð ˜WÑ%Ð%úðøð !6øðø÷ ÷ ð ð
 ˜WÑ%Ð%üsò   ‚6E¸C=¹E¼"DÁC?ÁDÁ"DÁ6DÁ7DÁ;DÂDÂDÂEÂDÂ4EÃD5ÃEÃD;Ã#D7Ã$D;Ã(EÃ3D9Ã4
EÃ?DÄDÄDÄD	ÄDÄD	ÄDÄEÄD2Ä"D%Ä#D2Ä*EÄ7D;Ä9EÄ;EÅEÅEÅ	Ec               ó–   — | j                  |«      }|D �cg c](  }t        |j                  | j                  «      |¬«      ‘Œ* c}S c c}w ©N)Úpage_contentÚmetadata)rM   r
   Úpopr   ©r4   r5   Úrun_managerÚsearch_resultsÚresults        r,   Ú_get_relevant_documentsz.AzureAISearchRetriever._get_relevant_documentsÈ   sO   € ð Ÿ™ eÓ,ˆñ )ó
á(�ô  &§*¡*¨T×-=Ñ-=Ó">ÈÖPØ(ñ
ð 	
ùò 
s   –-Ac             ƒ  ó²   K  — | j                  |«      ƒ d {  –—† }|D �cg c](  }t        |j                  | j                  «      |¬«      ‘Œ* c}S 7 Œ8c c}w ­wrU   )rS   r
   rX   r   rY   s        r,   Ú_aget_relevant_documentsz/AzureAISearchRetriever._aget_relevant_documentsÒ   s[   è ø€ ð  $Ÿ}™}¨UÓ3×3ˆñ )ó
á(�ô  &§*¡*¨T×-=Ñ-=Ó">ÈÖPØ(ñ
ð 	
ð 4úò
ùs    ‚A—A˜A -AÁAÁA)r+   r   Úreturnr   )r5   r   r`   r   )r`   zDict[str, str])r5   r   r`   z
List[dict])r5   r   rZ   r	   r`   úList[Document])r5   r   rZ   r   r`   ra   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   r   r   r   r   Úmodel_configr   Úclassmethodr-   r;   Úpropertyr?   rM   rS   r]   r_   © r.   r,   r   r      s  … ñCðJ €L�#ÓØ)Ø€J�ÓØ6Ø€GˆSÓð'à#€K�Ó#ØØ26€JÐ/Ó6ØTØ€N�CÓðð !€K�Ó ØHØ€Eˆ=ÓØMØ €FˆMÓ Ø@áØ $Øô€Lñ
 ˜(Ô#Øòó ó $ðó.Xð( òó ðó2ó&ð
Øð
Ø*Hð
à	ó
ð
Øð
Ø*Mð
à	ô
r.   r   c                  ó   — e Zd ZdZy)ÚAzureCognitiveSearchRetrieverz˜`Azure Cognitive Search` service retriever.
    This version of the retriever will soon be
    depreciated. Please switch to AzureAISearchRetriever
    N)rb   rc   rd   re   rj   r.   r,   rl   rl   Þ   s   „ òr.   rl   )Ú
__future__r   rH   Útypingr   r   r   r   rO   rD   Úlangchain_core.callbacksr   r	   Úlangchain_core.documentsr
   Úlangchain_core.retrieversr   Úlangchain_core.utilsr   r   Úpydanticr   r   r3   r   rl   rj   r.   r,   Ú<module>rt      sO   ðÝ "ã ß ,Ó ,ã Û ÷õ .Ý 3ß Cß 0à)Ð Ø CôE
˜]ô E
ôRÐ$:õ r.   