Ë
    µŒj�  ã                  ó²  — d dl mZ d dlZd dl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mZmZmZmZmZmZ d dlZd dl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 dl m!Z!  ejD                  e#«      Z$dZ%dZ&dZ'e G d„ d«      «       Z(e G d„ d«      «       Z)e G d„ d«      «       Z*e G d„ d«      «       Z+ G d„ de«      Z, G d„ de«      Z- G d„ de«      Z.y)é    )ÚannotationsN)Ú	dataclassÚfield)Úmd5)ÚAnyÚIterableÚIteratorÚListÚOptionalÚTupleÚType)ÚCallbackManagerForRetrieverRun)ÚDocument)Ú
Embeddings)ÚRunnableÚRunnableConfig)ÚVectorStoreÚVectorStoreRetriever)Ú
ConfigDictiÖvAi×vAiÚvAc                  óX   — 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<   y)ÚSummaryConfigaj  Configuration for summary generation.

    is_enabled: True if summary is enabled, False otherwise
    max_results: maximum number of results to summarize
    response_lang: requested language for the summary
    prompt_name: name of the prompt to use for summarization
      (see https://docs.vectara.com/docs/learn/grounded-generation/select-a-summarizer)
    FÚboolÚ
is_enabledé   ÚintÚmax_resultsÚengÚstrÚresponse_langz"vectara-summary-ext-24-05-med-omniÚprompt_nameÚstreamN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r    r!   © ó    úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/vectara.pyr   r      s;   … ñð €J�ÓØ€K�ÓØ€M�3ÓØ;€K�Ó;Ø€FˆDÔr(   r   c                  ó<   — e Zd ZU dZdZded<   dZded<   dZd	ed
<   y)Ú	MMRConfiga£  Configuration for Maximal Marginal Relevance (MMR) search.
       This will soon be deprated in favor of RerankConfig.

    is_enabled: True if MMR is enabled, False otherwise
    mmr_k: number of results to fetch for MMR, defaults to 50
    diversity_bias: number between 0 and 1 that determines the degree
        of diversity among the results with 0 corresponding
        to minimum diversity and 1 to maximum diversity.
        Defaults to 0.3.
        Note: diversity_bias is equivalent 1-lambda_mult
        where lambda_mult is the value often used in max_marginal_relevance_search()
        We chose to use that since we believe it's more intuitive to the user.
    Fr   r   é2   r   Úmmr_kç333333Ó?ÚfloatÚdiversity_biasN)r"   r#   r$   r%   r   r&   r-   r0   r'   r(   r)   r+   r+   .   s&   … ñð €J�ÓØ€Eˆ3ƒOØ€N�EÔr(   r+   c                  óJ   — 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<   y)ÚRerankConfiga¾  Configuration for Reranker.

    reranker: "mmr", "rerank_multilingual_v1", "udf" or "none"
    rerank_k: number of results to fetch before reranking, defaults to 50
    mmr_diversity_bias: for MMR only - a number between 0 and 1 that determines
        the degree of diversity among the results with 0 corresponding
        to minimum diversity and 1 to maximum diversity.
        Defaults to 0.3.
        Note: mmr_diversity_bias is equivalent 1-lambda_mult
        where lambda_mult is the value often used in max_marginal_relevance_search()
        We chose to use that since we believe it's more intuitive to the user.
    user_function: for UDF only - the user function to use for reranking.
    Únoner   Úrerankerr,   r   Úrerank_kr.   r/   Úmmr_diversity_biasÚ Úuser_functionN)	r"   r#   r$   r%   r4   r&   r5   r6   r8   r'   r(   r)   r2   r2   C   s2   … ñð €HˆcÓØ€HˆcÓØ #Ð˜Ó#Ø€M�3Ôr(   r2   c                  óâ   — 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<    ee¬«      Zded<    ee¬«      Zded<   	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚVectaraQueryConfigaW  Configuration for Vectara query.

    k: Number of Documents to return. Defaults to 10.
    lambda_val: lexical match parameter for hybrid search.
    filter Dictionary of argument(s) to filter on metadata. For example a
        filter can be "doc.rating > 3.0 and part.lang = 'deu'"} see
        https://docs.vectara.com/docs/search-apis/sql/filter-overview
        for more details.
    score_threshold: minimal score threshold for the result.
        If defined, results with score less than this value will be
        filtered out.
    n_sentence_before: number of sentences before the matching segment
        to add, defaults to 2
    n_sentence_after: number of sentences before the matching segment
        to add, defaults to 2
    rerank_config: RerankConfig configuration dataclass
    summary_config: SummaryConfig configuration dataclass
    é
   r   Úkç        r/   Ú
lambda_valr7   r   ÚfilterNúOptional[float]Úscore_thresholdé   Ún_sentence_beforeÚn_sentence_after)Údefault_factoryr2   Úrerank_configr   Úsummary_configc                óš  — || _         || _        || _        || _        |	r|	| _        nt        «       | _        |r)|| _        || _        t        j                  dt        «       n|| _        || _        |
r|
| _        y |rBt        d|j                  |j                  ¬«      | _        t        j                  dt        «       y t        «       | _        y )Nz[n_sentence_context is deprecated. Please use n_sentence_before and n_sentence_after insteadÚmmr©r4   r5   r6   z9MMRConfig is deprecated. Please use RerankConfig instead.)r<   r>   r?   rA   rG   r   rC   rD   ÚwarningsÚwarnÚDeprecationWarningrF   r2   r-   r0   )Úselfr<   r>   r?   rA   rC   rD   Ún_sentence_contextÚ
mmr_configrG   rF   s              r)   Ú__init__zVectaraQueryConfig.__init__w   sÄ   € ð ˆŒØ$ˆŒØˆŒØ.ˆÔáØ"0ˆDÕä"/£/ˆDÔñ Ø%7ˆDÔ"Ø$6ˆDÔ!Ü�M‰MðLä"õð &7ˆDÔ"Ø$4ˆDÔ!ñ Ø!.ˆDÕÙÜ!-ØØ#×)Ñ)Ø#-×#<Ñ#<ô"ˆDÔô
 �M‰MØKÜ"õô
 ".£ˆDÕr(   )
r;   r=   r7   NrB   rB   NNNN)r<   r   r>   r/   r?   r   rA   r@   rC   r   rD   r   rO   zOptional[int]rP   zOptional[MMRConfig]rG   zOptional[SummaryConfig]rF   zOptional[RerankConfig])r"   r#   r$   r%   r<   r&   r>   r?   rA   rC   rD   r   r2   rF   r   rG   rQ   r'   r(   r)   r:   r:   Y   së   … ñð& €A€sƒKØ€J�ÓØ€FˆCÓØ'+€O�_Ó+ØÐ�sÓØÐ�cÓÙ"'¸Ô"E€M�<ÓEÙ$)¸-Ô$H€N�MÓHð ØØØ+/Ø!"Ø !Ø,0Ø*.Ø26Ø04ð20àð20ð ð20ð ð	20ð
 )ð20ð ð20ð ð20ð *ð20ð (ð20ð 0ð20ð .ô20r(   r:   c                  óž  — e Zd ZdZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zdd„Zdd„Zddd„Z	ddd„Z
	 d	 	 	 	 	 	 	 dd	„Z	 	 d	 	 	 	 	 	 	 	 	 d d
„Z	 	 d!	 	 	 	 	 	 	 	 	 	 	 d"d„Z	 	 	 	 	 	 	 	 d#d„Z	 	 	 	 	 	 d$d„Z	 	 	 	 	 	 d%d„Z	 	 d&	 	 	 	 	 	 	 	 	 d'd„Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 d(d„«       Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 d)d„«       Zd*d„Zd*d„Zd+d„Zy),ÚVectaraa€  `Vectara API` vector store.

     See (https://vectara.com).

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import Vectara

            vectorstore = Vectara(
                vectara_customer_id=vectara_customer_id,
                vectara_corpus_id=vectara_corpus_id,
                vectara_api_key=vectara_api_key
            )
    Nc                ór  — |xs t         j                  j                  d«      | _        |xs t         j                  j                  d«      | _        |xs t         j                  j                  d«      | _        | j                  �| j                  �| j
                  €t        j                  d«       n"t        j                  d| j                  › �«       || _	        t        j                  «       | _        t        j                  j                  d¬«      }| j                  j                  d	|«       || _        y)
zInitialize with Vectara API.ÚVECTARA_CUSTOMER_IDÚVECTARA_CORPUS_IDÚVECTARA_API_KEYNzHCan't find Vectara credentials, customer_id or corpus_id in environment.zUsing corpus id é   )Úmax_retrieszhttp://)ÚosÚenvironÚgetÚ_vectara_customer_idÚ_vectara_corpus_idÚ_vectara_api_keyÚloggerÚwarningÚdebugÚ_sourceÚrequestsÚSessionÚ_sessionÚadaptersÚHTTPAdapterÚmountÚvectara_api_timeout)rN   Úvectara_customer_idÚvectara_corpus_idÚvectara_api_keyrj   ÚsourceÚadapters          r)   rQ   zVectara.__init__½   sÿ   € ð %8ò %
¼2¿:¹:¿>¹>Ø!ó<
ˆÔ!ð #4ò #
´r·z±z·~±~Øó8
ˆÔð !0Ò T´2·:±:·>±>ÐBSÓ3TˆÔà×%Ñ%Ð-Ø×&Ñ&Ð.Ø×$Ñ$Ð,ä�N‰Nðõô
 �L‰LÐ+¨D×,CÑ,CÐ+DÐEÔFØˆŒä ×(Ñ(Ó*ˆŒÜ×#Ñ#×/Ñ/¸AÐ/Ó>ˆØ�‰×Ñ˜I wÔ/Ø#6ˆÕ r(   c                 ó   — y ©Nr'   ©rN   s    r)   Ú
embeddingszVectara.embeddingsß   s   € àr(   c                óL   — | j                   | j                  d| j                  dœS )z=Returns headers that should be attached to each post request.zapplication/json)z	x-api-keyzcustomer-idúContent-TypezX-Source)r_   r]   rc   rr   s    r)   Ú_get_post_headerszVectara._get_post_headersã   s*   € ð ×.Ñ.Ø×4Ñ4Ø.ØŸ™ñ	
ð 	
r(   c           
     ól  — | j                   | j                  |dœ}| j                  j                  dt	        j
                  |«      d| j                  «       | j                  ¬«      }|j                  dk7  r@t        j                  d|› d|j                  › d|j                  › d	|j                  › �«       y
y)zØ
        Delete a document from the Vectara corpus.

        Args:
            doc_id (str): ID of the document to delete.
        Returns:
            bool: True if deletion was successful, False otherwise.
        )Úcustomer_idÚ	corpus_idÚdocument_idz$https://api.vectara.io/v1/delete-docT)ÚdataÚverifyÚheadersÚtimeoutéÈ   z#Delete request failed for doc_id = z with status code ú	, reason z, text F)r]   r^   rf   ÚpostÚjsonÚdumpsrv   rj   Ústatus_coder`   ÚerrorÚreasonÚtext)rN   Údoc_idÚbodyÚresponses       r)   Ú_delete_doczVectara._delete_docì   s·   € ð  ×4Ñ4Ø×0Ñ0Ø!ñ
ˆð
 —=‘=×%Ñ%Ø2Ü—‘˜DÓ!ØØ×*Ñ*Ó,Ø×,Ñ,ð &ó 
ˆð ×Ñ 3Ò&Ü�L‰LØ5°f°XÐ=OØ×'Ñ'Ð(¨	°(·/±/Ð1BÀ'Ø—=‘=�/ð#ôð
 Ør(   c                ón  — i }| j                   |d<   | j                  |d<   ||d<   |rdnd}| j                  j                  | j	                  «       |t        j                  |«      | j                  d¬«      }|j                  }|j                  «       }d|v r|d   d	   nd }|d
k(  s|r|dk(  ry|r|dk(  ryy)Nrx   ry   Údocumentz$https://api.vectara.io/v1/core/indexzhttps://api.vectara.io/v1/indexT)r}   Úurlr{   r~   r|   ÚstatusÚcodeé™  ÚALREADY_EXISTSÚE_ALREADY_EXISTSÚ	FORBIDDENÚE_NO_PERMISSIONSÚE_SUCCEEDED)	r]   r^   rf   r�   rv   r‚   rƒ   rj   r„   )	rN   ÚdocÚuse_core_apiÚrequestÚapi_endpointrŠ   r„   ÚresultÚ
status_strs	            r)   Ú
_index_doczVectara._index_doc
  sÚ   € Ø"$ˆØ!%×!:Ñ!:ˆ�ÑØ#×6Ñ6ˆ�ÑØ!ˆ�
Ññ ñ 3à2ð 	ð
 —=‘=×%Ñ%Ø×*Ñ*Ó,ØÜ—‘˜GÓ$Ø×,Ñ,Øð &ó 
ˆð ×*Ñ*ˆà—‘“ˆØ19¸VÑ1C�V˜HÑ% fÒ-Èˆ
Ø˜#Ò¡°Ð?OÒ1OØ%Ù˜Z¨;Ò6Ø%à r(   c                ód   — |r)|D �cg c]  }| j                  |«      ‘Œ }}t        |«      S yc c}w )zéDelete by vector ID or other criteria.
        Args:
            ids: List of ids to delete.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        T)r‹   Úall)rN   ÚidsÚkwargsÚidÚsuccesss        r)   ÚdeletezVectara.delete(  s8   € ñ Ù69Ó:±c°�t×'Ñ'¨Õ+°cˆGÐ:Ü�w“<Ðàùò ;s   ‡-c                ó  — g }t        |«      D �]v  \  }}t        j                  j                  |«      st        j                  d|› d�«       Œ@|r||   ni }|t        |d«      ft        j                  |«      dœ}| j                  «       }	|	j                  d«       | j                  j                  d| j                  › d| j                  › d�|d	|	| j                  ¬
«      }
|
j                   dk(  r4|
j                  «       d   d   }t        j#                  d|› d|› d�«       �Œ|
j                   dk(  r)|
j                  «       d   d   }|j%                  |«       �ŒNt        j#                  d|› d|
j                  «       › �«       �Œy |S )ac  
        Vectara provides a way to add documents directly via our API where
        pre-processing and chunking occurs internally in an optimal way
        This method provides a way to use that API in LangChain

        Args:
            files_list: Iterable of strings, each representing a local file path.
                    Files could be text, HTML, PDF, markdown, doc/docx, ppt/pptx, etc.
                    see API docs for full list
            metadatas: Optional list of metadatas associated with each file

        Returns:
            List of ids associated with each of the files indexed
        zFile z does not exist, skippingÚrb)ÚfileÚdoc_metadataru   z https://api.vectara.io/upload?c=z&o=z&d=TrueT)Úfilesr|   r}   r~   r‘   r�   Ú
documentIdz# already exists on Vectara (doc_id=z), skippingr   zError indexing file z: )Ú	enumeraterZ   ÚpathÚexistsr`   r…   Úopenr‚   rƒ   rv   Úpoprf   r�   r]   r^   rj   r„   ÚinfoÚappend)rN   Ú
files_listÚ	metadatasr¡   Údoc_idsÚinxr§   Úmdr©   r}   rŠ   rˆ   s               r)   Ú	add_fileszVectara.add_files7  sy  € ð( ˆÜ" :×.‰IˆC�Ü—7‘7—>‘> $Ô'Ü—‘˜u T FÐ*CÐDÔEØÙ#,�˜3’°"ˆBàœt D¨$Ó/Ð0Ü $§
¡
¨2£ñˆEð ×,Ñ,Ó.ˆGØ�K‰K˜Ô'Ø—}‘}×)Ñ)Ø2°4×3LÑ3LÐ2MÈSÐQU×QhÑQhÐPiÐipÐqØØØØ×0Ñ0ð *ó ˆHð ×#Ñ# sÒ*Ø!Ÿ™›¨Ñ4°\ÑB�Ü—‘Ø˜D˜6Ð!DÀVÀHÈKÐXöð ×%Ñ%¨Ò,Ø!Ÿ™›¨Ñ4°\ÑB�Ø—‘˜vÖ&ä—‘Ð2°4°&¸¸8¿=¹=»?Ð:KÐLÖMð9 /ð< ˆr(   c                ó>  — t        «       }|D ]!  }|j                  |j                  «       «       Œ# |j                  «       }|€|D �cg c]  }i ‘Œ }}|rd|d<   nddi}|j	                  dd«      }	|	rdnd}
d|dt        j                  |«      |
t        ||«      D ��cg c]  \  }}|t        j                  |«      d	œ‘Œ c}}i}| j                  ||	¬
«      }|dk(  r%| j                  |«       | j                  |«       |gS |dk(  rt        d«       |gS c c}w c c}}w )aš  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            doc_metadata: optional metadata for the document

        This function indexes all the input text strings in the Vectara corpus as a
        single Vectara document, where each input text is considered a "section" and the
        metadata are associated with each section.
        if 'doc_metadata' is provided, it is associated with the Vectara document.

        Returns:
            document ID of the document added

        Ú	langchainrn   r˜   FÚpartsÚsectionrz   ÚmetadataJson)r‡   r¼   )r˜   r“   r•   ziNo permissions to add document to Vectara. 
                Check your corpus ID, customer ID and API key)r   ÚupdateÚencodeÚ	hexdigestr\   r‚   rƒ   Úzipr�   r‹   Úprint)rN   Útextsr³   r¨   r¡   Údoc_hashÚtrˆ   Ú_r˜   Úsection_keyr‡   r¶   r—   Úsuccess_strs                  r)   Ú	add_textszVectara.add_textsl  s;  € ô. “5ˆÛˆAØ�O‰O˜AŸH™H›JÕ'ð à×#Ñ#Ó%ˆØÐÙ%*Ó+¡U š UˆIÐ+ÙØ%0ˆL˜Ò"à$ kÐ2ˆLà—z‘z .°%Ó8ˆÙ!-‘g°9ˆà˜6ØœDŸJ™J |Ó4Øä # E¨9Ô 5ôá 5‘H�D˜"ð ¬t¯z©z¸"«~Ó>Ø 5òð
ˆð —o‘o c¸�oÓEˆàÐ,Ò,Ø×Ñ˜VÔ$Ø�O‰O˜CÔ ð ˆxˆð Ð.Ò.ÜðAôð ˆxˆùò7 ,ùós   Á	DÂ"Dc                óZ  — t        |j                  t        «      rt        di |j                  ¤Ž|_        t        |j                  t        «      rt        di |j                  ¤Ž|_        d|d|j                  j                  dv r|j                  j                  n|j                  |j                  |j                  dœ| j                  |j                  dœgdœgi}|j                  dkD  rd|j                  i|d   d   d   d   d	<   |j                  j                  d
k(  r)t        d|j                  j                  idœ|d   d   d<   nj|j                  j                  dk(  r't         |j                  j"                  dœ|d   d   d<   n*|j                  j                  dk(  rdt$        i|d   d   d<   |j                  j&                  rb|j                  j(                  |j                  j*                  |j                  j,                  dœg|d   d   d<   |rd|dœ|d   d   d   d   d<   |S )zÞBuild the body for the API

        Args:
            query: Text to look up documents similar to.
            config: VectaraQueryConfig object
        Returns:
            A dictionary with the body of the query
        Úqueryr   )rI   ÚudfÚrerank_multilingual_v1)ÚsentencesBeforeÚsentencesAfter)ÚcorpusIdÚmetadataFilter)rÊ   ÚstartÚ
numResultsÚcontextConfigÚ	corpusKeyÚlambdarÔ   ÚlexicalInterpolationConfigrI   ÚdiversityBias)Ú
rerankerIdÚ	mmrConfigÚrerankingConfigrË   )rØ   ÚuserFunctionrÌ   rØ   )ÚmaxSummarizedResultsÚresponseLangÚsummarizerPromptNameÚsummaryT)ÚstoreÚconversationIdÚchatr'   )Ú
isinstancerF   Údictr2   rG   r   r4   r5   r<   rC   rD   r^   r?   r>   ÚMMR_RERANKER_IDr6   ÚUDF_RERANKER_IDr8   ÚRERANKER_MULTILINGUAL_V1_IDr   r   r   r    )rN   rÊ   Úconfigrâ   Úchat_conv_idr¡   r‰   s          r)   Ú_get_query_bodyzVectara._get_query_body¥  sP  € ô  �f×*Ñ*¬DÔ1Ü#/Ñ#G°&×2FÑ2FÑ#GˆFÔ Ü�f×+Ñ+¬TÔ2Ü$1Ñ$J°F×4IÑ4IÑ$JˆFÔ!ð à"Øð #×0Ñ0×9Ñ9ØGñHð ×,Ñ,×5Ò5ð
 $ŸX™Xð ,2×+CÑ+CØ*0×*AÑ*Añ&ð )-×(?Ñ(?Ø.4¯m©mñð"ñðð
ˆð6 ×Ñ˜qÒ à˜&×+Ñ+ðNˆD�‰M˜!Ñ˜[Ñ)¨!Ñ,Ð-IÑJð ×Ñ×(Ñ(¨EÒ1ä-Ø-¨v×/CÑ/C×/VÑ/VÐWñ3ˆD�‰M˜!ÑÐ.Ò/ð ×!Ñ!×*Ñ*¨eÒ3ä-Ø &× 4Ñ 4× BÑ Bñ3ˆD�‰M˜!ÑÐ.Ò/ð ×!Ñ!×*Ñ*Ð.FÒFàÔ9ð3ˆD�‰M˜!ÑÐ.Ñ/ð × Ñ ×+Ò+ð -3×,AÑ,A×,MÑ,MØ$*×$9Ñ$9×$GÑ$GØ,2×,AÑ,A×,MÑ,Mñð+ˆD�‰M˜!Ñ˜YÑ'ñ à!Ø&2ñ:��W‘˜aÑ  Ñ+¨AÑ.¨vÑ6ð ˆr(   c           
     óˆ  —  | j                   ||fi |¤Ž}| j                  j                  | j                  «       dt	        j
                  |«      | j                  ¬«      }|j                  dk7  r@t        j                  dd|j                  › d|j                  › d|j                  › d�«       g S |j	                  «       }|j                  r+|d	   d
   d   D �cg c]  }|d   |j                  kD  r|‘Œ }}n|d	   d
   d   }|d	   d
   d   }	g }
|D ]g  }|d   D �ci c]  }|d   |d   “Œ }}|d   }|	|   d   D �ci c]  }|d   |d   “Œ }}d|vrd|d<   |j                  |«       |
j                  |«       Œi t        ||
«      D ��cg c]  \  }}t!        |d   |¬«      |d   f‘Œ }}}|j"                  j$                  dv r|d|j&                   }|j(                  j*                  rF|d	   d
   d   d
   d   }|d	   d
   d   d
   d   d   }|j                  t!        |d|dœ¬«      df«       |S c c}w c c}w c c}w c c}}w )a7  Run a Vectara query

        Args:
            query: Text to look up documents similar to.
            config: VectaraQueryConfig object
        Returns:
            A list of k Documents matching the given query
            If summary is enabled, last document is the summary text with 'summary'=True
        zhttps://api.vectara.io/v1/query)r}   rŽ   r{   r~   r   úQuery failed %sú(code r€   ú
, details Ú)ÚresponseSetr   rŠ   Úscorer�   ÚmetadataÚnameÚvalueÚdocumentIndexrn   Úvectarar‡   ©Úpage_contentrò   ©rI   rÌ   Nrß   ÚfactualConsistencyT)rß   Úfcsr=   )rê   rf   r�   rv   r‚   rƒ   rj   r„   r`   r…   r†   r‡   rA   r½   r±   rÀ   r   rF   r4   r<   rG   r   )rN   rÊ   rè   r¡   r‰   rŠ   r›   ÚrÚ	responsesÚ	documentsr³   ÚxÚmr¶   Údoc_numÚdoc_mdÚresrß   rû   s                      r)   Úvectara_queryzVectara.vectara_queryø  sÌ  € ð $ˆt×#Ñ# E¨6Ñ<°VÑ<ˆØ—=‘=×%Ñ%Ø×*Ñ*Ó,Ø1Ü—‘˜DÓ!Ø×,Ñ,ð	 &ó 
ˆð ×Ñ 3Ò&Ü�L‰LØ!Ø˜×-Ñ-Ð.¨i¸¿¹Ð7HÈ
Ø—=‘=�/ ð$ôð
 ˆIà—‘“ˆà×!Ò!ð   Ñ.¨qÑ1°*Ò=óá=�AØ�W‘: × 6Ñ 6Ò6ò Ø=ð ñ ð ˜}Ñ-¨aÑ0°Ñ<ˆIØ˜=Ñ)¨!Ñ,¨ZÑ8ˆ	àˆ	ÛˆAØ12°:²Ó?±¨A�!�F‘)˜Q˜w™ZÑ'°ˆBÐ?Ø˜Ñ(ˆGØ5>¸wÑ5GÈ
Ò5SÓTÑ5S°�a˜‘i  7¡Ñ+Ð5SˆFÐTØ˜vÑ%Ø#,��xÑ Ø�I‰I�fÔØ×Ñ˜RÕ ð ô" ˜Y¨	Ô2ô	
ñ 3‘��2ô Ø!" 6¡Øôð �'‘
òð 3ð 	ñ 	
ð ×Ñ×(Ñ(Ð,MÑMØ�j˜Ÿ™�/ˆCØ× Ñ ×+Ò+Ø˜]Ñ+¨AÑ.¨yÑ9¸!Ñ<¸VÑDˆGØ˜Ñ'¨Ñ*¨9Ñ5°aÑ8Ð9MÑNÈwÑWˆCØ�J‰JäØ%,À4ÐPSÑ7Tôð ð	ôð ˆ
ùòWùò @ùâTùó	
s   ÃH/ÄH4Ä:H9ÆH>c                ó@   — t        di |¤Ž}| j                  ||«      }|S )a�  Return Vectara documents most similar to query, along with scores.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 10.

            any other querying variable in VectaraQueryConfig like:
            - lambda_val: lexical match parameter for hybrid search.
            - filter: filter string
            - score_threshold: minimal score threshold for the result.
            - n_sentence_before: number of sentences before the matching segment
            - n_sentence_after: number of sentences after the matching segment
            - rerank_config: optional configuration for Reranking
              (see RerankConfig dataclass)
            - summary_config: optional configuration for summary
              (see SummaryConfig dataclass)
        Returns:
            List of Documents most similar to the query and score for each.
        r'   )r:   r  )rN   rÊ   r¡   rè   Údocss        r)   Úsimilarity_search_with_scorez$Vectara.similarity_search_with_scoreG  s(   € ô0 $Ñ- fÑ-ˆØ×!Ñ! %¨Ó0ˆØˆr(   c                ó^   —  | j                   |fi |¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )a  Return Vectara documents most similar to query, along with scores.

        Args:
            query: Text to look up documents similar to.
            any other querying variable in VectaraQueryConfig

        Returns:
            List of Documents most similar to the query
        )r  )rN   rÊ   r¡   Údocs_and_scoresr—   rÅ   s         r)   Úsimilarity_searchzVectara.similarity_searchc  s?   € ð <˜$×;Ñ;Øñ
àñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   ™)c                óP   — t        d|d|z
  ¬«      |d<    | j                  |fi |¤ŽS )aS  Return docs selected using the maximal marginal relevance.
        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 5.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
                     Defaults to 50
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
            kwargs: any other querying variable in VectaraQueryConfig
        Returns:
            List of Documents selected by maximal marginal relevance.
        rI   é   rJ   rF   )r2   r
  )rN   rÊ   Úfetch_kÚlambda_multr¡   s        r)   Úmax_marginal_relevance_searchz%Vectara.max_marginal_relevance_searchw  s8   € ô0 #/Ø WÀÀ[Áô#
ˆˆÑð &ˆt×%Ñ% eÑ6¨vÑ6Ð6r(   c                óf   — |j                  di «      } | di |¤Ž} |j                  ||fd|i|¤Ž |S )aÙ  Construct Vectara wrapper from raw documents.
        This is intended to be a quick way to get started.
        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Vectara
                vectara = Vectara.from_texts(
                    texts,
                    vectara_customer_id=customer_id,
                    vectara_corpus_id=corpus_id,
                    vectara_api_key=api_key,
                )
        r¨   r'   )r¯   rÈ   )ÚclsrÂ   Ú	embeddingr³   r¡   r¨   rö   s          r)   Ú
from_textszVectara.from_texts”  s@   € ð6 —z‘z .°"Ó5ˆÙ‘-˜‘-ˆØˆ×Ñ˜% ÑP¸ÐPÈÒPØˆr(   c                ó:   —  | di |¤Ž}|j                  ||«       |S )aÞ  Construct Vectara wrapper from raw documents.
        This is intended to be a quick way to get started.
        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Vectara
                vectara = Vectara.from_files(
                    files_list,
                    vectara_customer_id=customer_id,
                    vectara_corpus_id=corpus_id,
                    vectara_api_key=api_key,
                )
        r'   )r·   )r  r©   r  r³   r¡   rö   s         r)   Ú
from_fileszVectara.from_files´  s$   € ñ. ‘-˜‘-ˆØ×Ñ˜% Ô+Øˆr(   c                ó   — t        | |«      S )zReturn a Vectara RAG runnable.©Ú
VectaraRAG©rN   rè   s     r)   Úas_ragzVectara.as_ragÏ  s   € ä˜$ Ó'Ð'r(   c                ó   — t        | |d¬«      S )z'Return a Vectara RAG runnable for chat.T)râ   r  r  s     r)   Úas_chatzVectara.as_chatÓ  s   € ä˜$ ¨TÔ2Ð2r(   c                óL   — t        | |j                  dt        «       «      ¬«      S )zreturn a retriever object.rè   )Úvectorstorerè   )ÚVectaraRetrieverr\   r:   )rN   r¡   s     r)   Úas_retrieverzVectara.as_retriever×  s#   € äØ V§Z¡Z°Ô:LÓ:NÓ%Oô
ð 	
r(   )NNNéx   r¹   )
rk   úOptional[str]rl   r"  rm   r"  rj   r   rn   r   )ÚreturnúOptional[Embeddings])r#  rä   )rˆ   r   r#  r   ©F)r—   rä   r˜   r   r#  r   rq   )r    zOptional[List[str]]r¡   r   r#  úOptional[bool])r²   úIterable[str]r³   úOptional[List[dict]]r¡   r   r#  ú	List[str])NN)
rÂ   r'  r³   r(  r¨   zOptional[dict]r¡   r   r#  r)  )FN)rÊ   r   rè   r:   râ   r&  ré   r"  r¡   r   r#  rä   )rÊ   r   rè   r:   r¡   r   r#  úList[Tuple[Document, float]])rÊ   r   r¡   r   r#  r*  )rÊ   r   r¡   r   r#  úList[Document])r,   g      à?)
rÊ   r   r  r   r  r/   r¡   r   r#  r+  )r  úType[Vectara]rÂ   r)  r  r$  r³   r(  r¡   r   r#  rS   )r  r,  r©   r)  r  r$  r³   r(  r¡   r   r#  rS   )rè   r:   r#  r  )r¡   r   r#  r  )r"   r#   r$   r%   rQ   Úpropertyrs   rv   r‹   r�   r¤   r·   rÈ   rê   r  r  r
  r  Úclassmethodr  r  r  r  r   r'   r(   r)   rS   rS   ¬   s›  „ ñð$ .2Ø+/Ø)-Ø#&Ø!ð 7à*ð 7ð )ð 7ð 'ð	 7ð
 !ð 7ð ó 7ðD òó ðó
óô<!ô<ð$ +/ð3à!ð3ð (ð3ð ð	3ð
 
ó3ðp +/Ø'+ð	7àð7ð (ð7ð %ð	7ð
 ð7ð 
ó7ðz  %Ø&*ðQàðQð #ðQð ð	Qð
 $ðQð ðQð 
óQðfMàðMð #ðMð ð	Mð
 
&óMð^àðð ðð 
&ó	ð83àð3ð ð3ð 
ó	3ð. Ø ð	7àð7ð ð7ð ð	7ð
 ð7ð 
ó7ð: ð +/Ø*.ð	Øðàðð (ðð (ð	ð
 ðð 
òó ðð> ð +/Ø*.ð	Øðàðð (ðð (ð	ð
 ðð 
òó ðó4(ó3ô
r(   rS   c                  ó\   — e Zd ZU dZded<   	 ded<   	  ed¬«      Z	 	 	 	 	 	 	 	 dd„Zdd	„Zy
)r  zVectara Retriever class.rS   r  r:   rè   T)Úarbitrary_types_allowedc               óˆ   —  | j                   j                  || j                  fi |¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w rq   )r  r  rè   )rN   rÊ   Úrun_managerr¡   r	  r—   rÅ   s          r)   Ú_get_relevant_documentsz(VectaraRetriever._get_relevant_documentsë  sC   € ð 9˜$×*Ñ*×8Ñ8¸ÀÇÁÑVÈvÑVˆÙ"1Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   ®>c                ó<   —  | j                   j                  |fi |¤ŽS )zAdd documents to vectorstore.)r  Úadd_documents)rN   rþ   r¡   s      r)   r5  zVectaraRetriever.add_documentsñ  s    € à-ˆt×Ñ×-Ñ-¨iÑB¸6ÑBÐBr(   N)rÊ   r   r2  r   r¡   r   r#  r+  )rþ   r+  r¡   r   r#  r)  )	r"   r#   r$   r%   r&   r   Úmodel_configr3  r5  r'   r(   r)   r  r  Þ  sO   … Ù"àÓØ+àÓØ+áØ $ô€Lð3Øð3Ø*Hð3ØTWð3à	ó3ôCr(   r  c                  óZ   — e Zd ZdZ	 d	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 d	d„Z	 d	 	 	 	 	 	 	 d
d„Zy)r  z—Vectara RAG runnable.

    Parameters:
        vectara: Vectara object
        config: VectaraQueryConfig object
        chat: bool, default False
    c                ó<   — || _         || _        || _        d | _        y rq   )rö   rè   râ   Úconv_id)rN   rö   rè   râ   s       r)   rQ   zVectaraRAG.__init__ÿ  s    € ð ˆŒØˆŒØˆŒ	Øˆ�r(   Nc           
   +  óª  K  — | j                   j                  || j                  | j                  | j                  «      }| j                   j
                  j                  | j                   j                  «       dt        j                  |«      | j                   j                  d¬«      }|j                  dk7  r?t        j                  dd|j                  › d|j                  › d|j                  › d	�«       y
g }g }d|i–— |j!                  «       D �]©  }|sŒt        j"                  |j%                  d«      «      }	|	d   }
|
d   }|�€C|
j'                  dd
«      }|€ŒMt)        |j'                  d«      «      dkD  r:t        j                  d|j'                  d«      d   j'                  d«      › �«       Œ¤|j'                  dd
«      }|rR|j'                  dd
«      r@|d   }t        j+                  d|› �«       |dk(  rd
| _        t        j                  d«       �Œ
|r|j'                  dd
«      nd
}|r|| _        |j'                  dd
«      r*|j'                  di «      j'                  dd
«      }d|i–— �Œet-        |d   «      }d|i–— �Œ{| j                  j.                  r/|d   D �cg c]   }|d   | j                  j.                  kD  r|‘Œ" }}n|d   }|d   }g }|D ]g  }|d    D �ci c]  }|d!   |d"   “Œ }}|d#   }||   d    D �ci c]  }|d!   |d"   “Œ }}d$|vrd%|d$<   |j1                  |«       |j3                  |«       Œi t5        ||«      D ��cg c]  \  }}t7        |d   |¬&«      |d   f‘Œ }}}| j                  j8                  j:                  d'v r|d
| j                  j<                   }d(|i–— �Œ¬ y
c c}w c c}w c c}w c c}}w ­w))a  Get streaming output from Vectara RAG.

        Args:
            input: The input query
            config: RunnableConfig object
            kwargs: Any additional arguments

        Returns:
            The output dictionary with question, answer and context
        z&https://api.vectara.io/v1/stream-queryT)r}   rŽ   r{   r~   r!   r   rì   rí   r€   rî   rï   NÚquestionzutf-8r›   rð   rß   r�   r   z&Summary generation failed with status ÚstatusDetailrâ   zChat query failed with code ÚRESOURCE_EXHAUSTEDz-Sorry, Vectara chat turns exceeds plan limit.rá   rú   rñ   rû   r‡   ÚanswerrŠ   r�   rò   ró   rô   rõ   rn   rö   r÷   rù   Úcontext)rö   rê   rè   râ   r9  rf   r�   rv   r‚   rƒ   rj   r„   r`   r…   r†   r‡   Ú
iter_linesÚloadsÚdecoder\   Úlenr°   r   rA   r½   r±   rÀ   r   rF   r4   r<   )rN   Úinputrè   r¡   r‰   rŠ   rý   rþ   Úliner{   r›   Úresponse_setrß   râ   Úst_coder9  rû   Úchunkrü   r³   rÿ   r   r¶   r  r  r  s                             r)   r!   zVectaraRAG.stream  s  è ø€ ð  �|‰|×+Ñ+¨E°4·;±;ÀÇ	Á	È4Ï<É<ÓXˆà—<‘<×(Ñ(×-Ñ-Ø—L‘L×2Ñ2Ó4Ø8Ü—‘˜DÓ!Ø—L‘L×4Ñ4Øð .ó 
ˆð ×Ñ 3Ò&Ü�L‰LØ!Ø˜×-Ñ-Ð.¨i¸¿¹Ð7HÈ
Ø—=‘=�/ ð$ôð
 àˆ	Øˆ	à˜5Ð!Ò!à×'Ñ'×)ˆDÚÜ—z‘z $§+¡+¨gÓ"6Ó7�Ø˜h™�Ø% mÑ4�ØÑ'Ø$Ÿj™j¨°DÓ9�GØ�Ø Ü˜7Ÿ;™; xÓ0Ó1°AÒ5ÜŸ™ØDØ&Ÿ{™{¨8Ó4°QÑ7×;Ñ;¸NÓKÐLðNôð !ð #Ÿ;™; v¨tÓ4�DÙ §¡¨°4Ô 8Ø"& x¡.˜ÜŸ™Ð&BÀ7À)Ð$LÔMØ"Ð&:Ò:Ø+/˜DœLÜ"ŸL™LØ Oôñ %áBF˜dŸh™hÐ'7¸Ô>ÈD�GÙØ'.˜œð —{‘{Ð#7¸Ô>Ø%Ÿk™kÐ*>ÀÓC×GÑGÈÐQUÓV˜Ø$ c˜lÒ*Ù ô   ¨¡Ó0�EØ# UÐ+Ô+à—{‘{×2Ò2ð &2°*Ò%=ó%á%= Ø  ™z¨D¯K©K×,GÑ,GÒGò Ø%=ð "ñ %ð %1°Ñ$<˜	Ø ,¨ZÑ 8�IØ "�IÛ&˜Ø=>¸zº]ÓK¹]¸˜a ™i¨¨7©Ñ3¸]˜ÐKØ"# OÑ"4˜ð &/¨wÑ%7¸
Ò%Có"á%C ð ˜f™I q¨¡zÑ1Ø%Cð ð "ð $¨6Ñ1Ø/8˜F 8Ñ,ØŸ	™	 &Ô)Ø!×(Ñ(¨Õ,ð 'ô& &)¨°IÔ%>ô	ñ &?™E˜A˜rô %Ø-.¨v©YØ)+ôð ˜g™Jòð &?ð ñ 	ð —{‘{×0Ñ0×9Ñ9ð >ñ ð " / D§K¡K§M¡MÐ2˜Ø$ cÐ*Ô*ð] *ð^ 	ùòI%ùò Lùò"ùó	ùs>   ‚DOÄFOÊ(%N>ËOË(OË8OÌ	OÌ>OÍOÍ6AOc                óâ   — ddi}| j                  |«      D ]V  }d|v r	|d   |d<   Œd|v r	|d   |d<   Œd|v r|dxx   |d   z  cc<   Œ2d|v r	|d   |d<   Œ?t        j                  d|› �«       ŒX |S )Nr>  r7   r?  r;  rû   zUnknown chunk type: )r!   r`   r…   )rN   rD  rè   r¡   r  rH  s         r)   ÚinvokezVectaraRAG.invoke  s•   € ð ˜ˆnˆØ—[‘[ Ö'ˆEØ˜EÑ!Ø!& yÑ!1��I’Ø˜uÑ$Ø"'¨
Ñ"3��J’Ø˜UÑ"Ø�H“  x¡Ñ0”Ø˜%‘Ø" 5™\��E’
ä—‘Ð3°E°7Ð;Õ<ð (ð ˆ
r(   r%  )rö   rS   rè   r:   râ   r   rq   )rD  r   rè   úOptional[RunnableConfig]r¡   r   r#  zIterator[dict])rD  r   rè   rK  r¡   r   r#  rä   )r"   r#   r$   r%   rQ   r!   rJ  r'   r(   r)   r  r  ö  s‘   „ ñð JOðØðØ(:ðØBFóð ,0ðvàðvð )ðvð ð	vð
 
óvðv ,0ðàðð )ðð ð	ð
 
ôr(   r  )/Ú
__future__r   r‚   ÚloggingrZ   rK   Údataclassesr   r   Úhashlibr   Útypingr   r   r	   r
   r   r   r   rd   Ú langchain_core.callbacks.managerr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.runnablesr   r   Úlangchain_core.vectorstoresr   r   Úpydanticr   Ú	getLoggerr"   r`   rå   rç   ræ   r   r+   r2   r:   rS   r  r  r'   r(   r)   Ú<module>rX     sò   ðÝ "ã Û Û 	Û ß (Ý ß G× GÑ Gã õõ .Ý 0ß =ß IÝ à	ˆ×	Ñ	˜8Ó	$€à€Ø'Ð Ø€ð ÷ð ó ðð" ÷ ð  ó ð ð( ÷ð ó ðð* ÷O0ð O0ó ðO0ôdo
ˆkô o
ôdCÐ+ô Cô0[�õ [r(   