§
    šŠtj;&  ã                  ó~   — d dl mZ d dlmZmZ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  G d„ de¦  «        ZdS )	é    )Úannotations)ÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚTypeÚUnion)ÚDocument)Ú
Embeddings)ÚVectorStoreÚVectorStoreRetrieverc                  óÊ   ‡ — e Zd ZdZ	 	 	 	 	 d7d8d„Z	 	 d9d:d„Zd;d<d„Z	 d=d>d „Z	 d=d?d"„Z	 d=d@d%„Z		 d=dAd(„Z
	 d=dBd)„Z	 	 	 dCdDd/„Z	 	 	 dCdEd0„Ze	 	 d9dFd4„¦   «         ZdGˆ fd6„Zˆ xZS )HÚ
VespaStoreaƒ  
    `Vespa` vector store.

    To use, you should have the python client library ``pyvespa`` installed.

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import VespaStore
            from langchain_community.embeddings.openai import OpenAIEmbeddings
            from vespa.application import Vespa

            # Create a vespa client dependent upon your application,
            # e.g. either connecting to Vespa Cloud or a local deployment
            # such as Docker. Please refer to the PyVespa documentation on
            # how to initialize the client.

            vespa_app = Vespa(url="...", port=..., application_package=...)

            # You need to instruct LangChain on which fields to use for embeddings
            vespa_config = dict(
                page_content_field="text",
                embedding_field="embedding",
                input_field="query_embedding",
                metadata_fields=["date", "rating", "author"]
            )

            embedding_function = OpenAIEmbeddings()
            vectorstore = VespaStore(vespa_app, embedding_function, **vespa_config)

    NÚappr   Úembedding_functionúOptional[Embeddings]Úpage_content_fieldúOptional[str]Úembedding_fieldÚinput_fieldÚmetadata_fieldsúOptional[List[str]]ÚreturnÚNonec                ó  — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          ||¦  «        st	          dt          |¦  «        › �¦  «        ‚|| _        || _        || _        || _	        || _
        || _        dS )z3
        Initialize with a PyVespa client.
        r   )ÚVespazTCould not import Vespa python package. Please install it with `pip install pyvespa`.z:app should be an instance of vespa.application.Vespa, got N)Úvespa.applicationr   ÚImportErrorÚ
isinstanceÚ
ValueErrorÚtypeÚ
_vespa_appÚ_embedding_functionÚ_page_content_fieldÚ_embedding_fieldÚ_input_fieldÚ_metadata_fields)Úselfr   r   r   r   r   r   r   s           úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/vespa.pyÚ__init__zVespaStore.__init__+   s¾   € ð	Ø/Ð/Ð/Ð/Ð/Ð/Ð/øÝð 	ð 	ð 	Ýð@ñô ð ð	øøøõ
 ˜#˜uÑ%Ô%ð 	ÝØXÍTÐRUÉYÌYÐXÐXñô ð ð ˆŒØ#5ˆÔ Ø#5ˆÔ Ø /ˆÔØ'ˆÔØ /ˆÔÐÐs   ‚	 ‰#ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsÚkwargsú	List[str]c                ó�  — d}| j         �'| j                              t          |¦  «        ¦  «        }|€d„ t          |¦  «        D ¦   «         }g }t          |¦  «        D ]}\  }}i }	| j        �
||	| j        <   | j        �|�||         |	| j        <   |�,| j        �%| j        D ]}
|
||         v r||         |
         |	|
<   Œ|                     ||         |	dœ¦  «         Œ~| j         	                    |¦  «        }|D ]N}t          |j        ¦  «                             d¦  «        s%t          d|j        › d|j        d         › �¦  «        ‚ŒO|S )a˜  
        Add texts to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            ids: Optional list of ids associated with the texts.
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        Nc                ó:   — g | ]\  }}t          |d z   › ¦  «        ‘ŒS )é   )Ústr)Ú.0ÚiÚ_s      r+   ú
<listcomp>z(VespaStore.add_texts.<locals>.<listcomp>c   s(   € Ð@Ð@Ð@¡t q¨!•3˜!˜a™%�z‘?”?Ð@Ð@Ð@ó    )ÚidÚfieldsÚ2z-Could not add document to Vespa. Error code: ú. Message: Úmessage)r%   Úembed_documentsÚlistÚ	enumerater&   r'   r)   Úappendr$   Ú
feed_batchr7   Ústatus_codeÚ
startswithÚRuntimeErrorÚjson)r*   r-   r/   r1   r2   Ú
embeddingsÚbatchr9   Útextr>   Úmetadata_fieldÚresultsÚresults                r+   Ú	add_textszVespaStore.add_textsJ   sš  € ð( ˆ
ØÔ#Ð/ØÔ1×AÒAÅ$ÀuÁ+Ä+ÑNÔNˆJàˆ;Ø@Ð@­y¸Ñ/?Ô/?Ð@Ñ@Ô@ˆCàˆÝ  Ñ'Ô'ð 
	;ð 
	;‰GˆAˆtØ9;ˆFØÔ'Ð3Ø37��tÔ/Ñ0ØÔ$Ð0°ZÐ5KØ0:¸1´��tÔ,Ñ-ØÐ$¨Ô)>Ð)JØ&*Ô&;ð Nð N�NØ%¨°1¬Ð5Ð5Ø1:¸1´¸nÔ1M˜˜~Ñ.øØ�LŠL  A¤°&Ð9Ð9Ñ:Ô:Ð:Ð:à”/×,Ò,¨UÑ3Ô3ˆØð 	ð 	ˆFÝ˜Ô*Ñ+Ô+×6Ò6°sÑ;Ô;ð Ý"ð9Ø#)Ô#5ð9ð 9à &¤¨IÔ 6ð9ð 9ñô ð ðð ˆ
r<   úOptional[bool]c                ó�   — |€dS d„ |D ¦   «         }| j                              |¦  «        }t          d„ |D ¦   «         ¦  «        dk    S )NFc                ó   — g | ]}d |i‘ŒS )r=   © )r8   r=   s     r+   r;   z%VespaStore.delete.<locals>.<listcomp>   s   € Ð*Ð*Ð* �$˜�Ð*Ð*Ð*r<   c                ó,   — g | ]}|j         d k    rdnd‘ŒS )éÈ   r   r6   )rG   ©r8   Úrs     r+   r;   z%VespaStore.delete.<locals>.<listcomp>�   s(   € ÐEÐEÐE¸˜œ¨#Ò-Ð-�A�A°1ÐEÐEÐEr<   r   )r$   Údelete_batchÚsum)r*   r1   r2   rL   rP   s        r+   ÚdeletezVespaStore.delete|   sV   € Øˆ;Ø�5Ø*Ð* cÐ*Ñ*Ô*ˆØ”×-Ò-¨eÑ4Ô4ˆÝÐEÐE¸fÐEÑEÔEÑFÔFÈ!ÒKÐKr<   é   Úquery_embeddingúList[float]ÚkÚintr   c                óê   — |}| j         }| j        }d|v r|d         nd}d|v r|d         nd }d|v r|d         nd}	|	rdnd}	d}
|
d	|› d
|	› d�z  }
|
d|› d|› d�z  }
|�|
d|› �z  }
d|
d|› d�|d|d|i}|S )NÚrankingÚdefaultÚfilterÚapproximateFÚtrueÚfalsezselect * from sources * where z{targetHits: z, approximate: Ú}znearestNeighbor(z, ú)z and Úyqlzinput.query(Úhits)r'   r(   )r*   r^   r`   r2   rl   Údoc_embedding_fieldÚinput_embedding_fieldÚranking_functionre   rf   rk   Úquerys               r+   Ú_create_queryzVespaStore._create_queryƒ   s  € ð ˆØ"Ô3ÐØ $Ô 1ÐØ09¸VÐ0CÐ0C˜6 )Ô,Ð,ÈÐØ%-°Ð%7Ð%7�˜Ô!Ð!¸Tˆà/<ÀÐ/FÐ/F�f˜]Ô+Ð+ÈEˆØ +Ð8�f�f°ˆà.ˆØÐD ÐDÐD°[ÐDÐDÐDÑDˆØÐQÐ"5ÐQÐQÐ9NÐQÐQÐQÑQˆØÐØÐ#˜6Ð#Ð#Ñ#ˆCð �3Ø3Ð0Ð3Ð3Ð3°_ØÐ'Ø�Dð	
ˆð ˆr<   úList[Tuple[Document, float]]c                óZ  — d|v r	|d         }n | j         ||fi |¤Ž}	 | j                             |¬¦  «        }nU# t          $ rH}t	          d|j        d         d         d         › d|j        d         d         d         › �¦  «        ‚d}~ww xY wt          |j        ¦  «                             d	¦  «        s%t	          d
|j        › d|j	        d         › �¦  «        ‚|j	        d         }d|v r,ddl	}t	          | 
                    |d         ¦  «        ¦  «        ‚|�|j        €g S g }	|j        D ]~}
|
d         | j                 }|
d         }d|
d         i}| j        �(| j        D ] }|
d                              |¦  «        ||<   Œ!t          ||¬¦  «        }|	                     ||f¦  «         Œ|	S )aŸ  
        Performs similarity search from a embeddings vector.

        Args:
            query_embedding: Embeddings vector to search for.
            k: Number of results to return.
            custom_query: Use this custom query instead default query (kwargs)
            kwargs: other vector store specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        Úcustom_query)Úbodyz$Could not retrieve data from Vespa: r   Úsummaryz	. Error: rA   Nr?   z0Could not retrieve data from Vespa. Error code: r@   ÚrootÚerrorsr>   Ú	relevancer=   )Úpage_contentÚmetadata)rq   r$   rp   Ú	ExceptionrI   Úargsr7   rG   rH   rJ   Údumpsrl   r&   r)   Úgetr   rE   )r*   r^   r`   r2   rp   ÚresponseÚerw   rJ   ÚdocsÚchildrz   Úscorer{   ÚfieldÚdocs                   r+   Ú&similarity_search_by_vector_with_scorez1VespaStore.similarity_search_by_vector_with_score�   s  € ð ˜VÐ#Ð#Ø˜>Ô*ˆEˆEà&�DÔ& ¸ÐDÐD¸VÐDÐDˆEð	Ø”×,Ò,°%Ð,Ñ8Ô8ˆHˆHøÝð 	ð 	ð 	Ýð4Ø”6˜!”9˜Q”< 	Ô*ð4ð 4àœ& œ) Aœ, yÔ1ð4ð 4ñô ð øøøøð	øøøõ �8Ô'Ñ(Ô(×3Ò3°CÑ8Ô8ð 	Ýð7Ø'Ô3ð7ð 7à$œM¨)Ô4ð7ð 7ñô ð ð Œ}˜VÔ$ˆØ�tÐÐØˆKˆKˆKå˜tŸzšz¨$¨x¬.Ñ9Ô9Ñ:Ô:Ð:àÐ˜xœ}Ð4ØˆIàˆØ”]ð 	&ð 	&ˆEØ  œ?¨4Ô+CÔDˆLØ˜+Ô&ˆEØ˜e DœkÐ*ˆHØÔ$Ð0Ø!Ô2ð Að A�EØ&+¨H¤o×&9Ò&9¸%Ñ&@Ô&@�H˜U‘O�OÝ¨¸xÐHÑHÔHˆCØ�KŠK˜˜e˜Ñ%Ô%Ð%Ð%Øˆs   ž: º
BÁABÂBÚ	embeddingúList[Document]c                ó8   —  | j         ||fi |¤Ž}d„ |D ¦   «         S )Nc                ó   — g | ]
}|d          ‘ŒS ©r   rU   rX   s     r+   r;   z:VespaStore.similarity_search_by_vector.<locals>.<listcomp>Ù   ó   € Ð&Ð&Ð&˜��!”Ð&Ð&Ð&r<   )r‡   )r*   rˆ   r`   r2   rO   s        r+   Úsimilarity_search_by_vectorz&VespaStore.similarity_search_by_vectorÕ   s4   € ð >�$Ô=¸iÈÐUÐUÈfÐUÐUˆØ&Ð&˜gÐ&Ñ&Ô&Ð&r<   rp   r7   c                óf   — g }| j         �| j                              |¦  «        } | j        ||fi |¤ŽS ©N)r%   Úembed_queryr‡   )r*   rp   r`   r2   Ú	query_embs        r+   Úsimilarity_search_with_scorez'VespaStore.similarity_search_with_scoreÛ   sE   € ð ˆ	ØÔ#Ð/ØÔ0×<Ò<¸UÑCÔCˆIØ:ˆtÔ:¸9ÀaÐRÐRÈ6ÐRÐRÐRr<   c                ó8   —  | j         ||fi |¤Ž}d„ |D ¦   «         S )Nc                ó   — g | ]
}|d          ‘ŒS rŒ   rU   rX   s     r+   r;   z0VespaStore.similarity_search.<locals>.<listcomp>ç   r�   r<   )r“   )r*   rp   r`   r2   rO   s        r+   Úsimilarity_searchzVespaStore.similarity_searchã   s4   € ð 4�$Ô3°E¸1ÐGÐGÀÐGÐGˆØ&Ð&˜gÐ&Ñ&Ô&Ð&r<   é   ç      à?Úfetch_kÚlambda_multÚfloatc                ó    — t          d¦  «        ‚)NzMMR search not implemented©ÚNotImplementedError)r*   rp   r`   r™   rš   r2   s         r+   Úmax_marginal_relevance_searchz(VespaStore.max_marginal_relevance_searché   s   € õ "Ð">Ñ?Ô?Ð?r<   c                ó    — t          d¦  «        ‚)Nz$MMR search by vector not implementedr�   )r*   rˆ   r`   r™   rš   r2   s         r+   Ú'max_marginal_relevance_search_by_vectorz2VespaStore.max_marginal_relevance_search_by_vectoró   s   € õ "Ð"HÑIÔIÐIr<   ÚclsúType[VespaStore]r   c                óJ   —  | dd|i|¤Ž}|                      |||¬¦  «         |S )Nr   )r-   r/   r1   rU   )rQ   )r¢   r-   rˆ   r/   r1   r2   Úvespas          r+   Ú
from_textszVespaStore.from_textsý   s;   € ð �Ð;Ð; yÐ;°FÐ;Ð;ˆØ�Š˜e¨y¸cˆÑBÔBÐBØˆr<   r   c                ó6   •—  t          ¦   «         j        di |¤ŽS )NrU   )ÚsuperÚas_retriever)r*   r2   Ú	__class__s     €r+   r©   zVespaStore.as_retriever
  s    ø€ Ø#�u‰wŒwÔ#Ð-Ð- fÐ-Ð-Ð-r<   )NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NN)
r-   r.   r/   r0   r1   r   r2   r   r   r3   r�   )r1   r   r2   r   r   rR   )r]   )r^   r_   r`   ra   r2   r   r   r   )r^   r_   r`   ra   r2   r   r   rr   )rˆ   r_   r`   ra   r2   r   r   r‰   )rp   r7   r`   ra   r2   r   r   rr   )rp   r7   r`   ra   r2   r   r   r‰   )r]   r—   r˜   )rp   r7   r`   ra   r™   ra   rš   r›   r2   r   r   r‰   )rˆ   r_   r`   ra   r™   ra   rš   r›   r2   r   r   r‰   )r¢   r£   r-   r3   rˆ   r   r/   r0   r1   r   r2   r   r   r   )r2   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   rQ   r\   rq   r‡   rŽ   r“   r–   rŸ   r¡   Úclassmethodr¦   r©   Ú__classcell__)rª   s   @r+   r   r   
   sÎ  ø€ € € € € ðð ðF 48Ø,0Ø)-Ø%)Ø/3ð0ð 0ð 0ð 0ð 0ðD +/Ø#'ð	0ð 0ð 0ð 0ð 0ðdLð Lð Lð Lð Lð 67ðð ð ð ð ð6 67ð6ð 6ð 6ð 6ð 6ðr 01ð'ð 'ð 'ð 'ð 'ð $%ðSð Sð Sð Sð Sð $%ð'ð 'ð 'ð 'ð 'ð ØØ ð@ð @ð @ð @ð @ð ØØ ðJð Jð Jð Jð Jð ð
 +/Ø#'ð
ð 
ð 
ð 
ñ „[ð
ð.ð .ð .ð .ð .ð .ð .ð .ð .ð .r<   r   N)Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   r   r   rU   r<   r+   ú<module>r¶      sÍ   ðØ "Ð "Ð "Ð "Ð "Ð "à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IðA.ð A.ð A.ð A.ð A.�ñ A.ô A.ð A.ð A.ð A.r<   