
    dh;&                    v    S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJrJr   " S S\5      rg)	    )annotations)AnyDictIterableListOptionalTupleTypeUnion)Document)
Embeddings)VectorStoreVectorStoreRetrieverc                    ^  \ rS rSrSr     S             SS jjr  S         SS jjrSSS jjr S       SS jjr S       SS jjr	 S       SS jjr
 S       SS	 jjr S       SS
 jjr   S           SS jjr   S           SS jjr\  S             SS jj5       rS U 4S jjrSrU =r$ )!
VespaStore
   a+  
`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)

c                     SSK Jn  [        X5      (       d  [	        S[        U5       35      eXl        X l        X0l        X@l	        XPl
        X`l        g! [         a    [        S5      ef = f)z#
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)selfappembedding_functionpage_content_fieldembedding_fieldinput_fieldmetadata_fieldsr   s           ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/vespa.py__init__VespaStore.__init__+   s|    	/ #%%LTRUYKX  #5 #5  /' /  	@ 	s   A A*c                   SnU R                   b$  U R                   R                  [        U5      5      nUc+  [        U5       VVs/ sH  u  pg[	        US-    5      PM     nnn/ n[        U5       H  u  pi0 n
U R
                  b  XU R
                  '   U R                  b  Ub  XV   XR                  '   Ub3  U R                  b&  U R                   H  nXU   ;   d  M  X&   U   X'   M     UR                  X6   U
S.5        M     U R                  R                  U5      nU HT  n[	        UR                  5      R                  S5      (       a  M.  [        SUR                   SUR                  S    35      e   U$ s  snnf )aP  
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.
N   )idfields2z-Could not add document to Vespa. Error code: . Message: message)r   embed_documentslist	enumeratestrr   r   r   appendr   
feed_batchstatus_code
startswithRuntimeErrorjson)r    texts	metadatasidskwargs
embeddingsi_batchtextr-   metadata_fieldresultsresults                 r'   	add_textsVespaStore.add_textsJ   s   ( 
##/11AA$u+NJ;/8/?@/?tq3!a%?/?C@ 'GA9;F''337t//0$$0Z5K0:,,-$)>)>)J&*&;&;N%151:n1M. '< LL&9: ( //,,U3F**+66s;;"##)#5#5"6 7  &I 679   
/ As   E8c                    Uc  gU Vs/ sH  nSU0PM	     nnU R                   R                  U5      n[        U Vs/ sH  ofR                  S:X  a  SOSPM     sn5      S:H  $ s  snf s  snf )NFr,      r   r+   )r   delete_batchsumr7   )r    r=   r>   r,   rB   rF   rs          r'   deleteVespaStore.delete|   sk    ;&)*c$c*--e4fEf#-A14fEF!KK +Es
   A"A'c                   UnU R                   nU R                  nSU;   a  US   OSnSU;   a  US   OS nSU;   a  US   OSn	U	(       a  SOSn	Sn
U
S	U S
U	 S3-  n
U
SU SU S3-  n
Ub  U
SU 3-  n
SU
SU S3USUSU0nU$ )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    query_embeddingkr>   rZ   doc_embedding_fieldinput_embedding_fieldranking_functionrS   rT   rY   querys               r'   _create_queryVespaStore._create_query   s     "33 $ 1 109V0C6),%-%7!T/</Ff]+E +f.v_[MDD!"5!6b9N8OqQQU6(##C 3013_'D	
     c                D   SU;   a  US   nOU R                   " X40 UD6n U R                  R                  US9n[        UR                  5      R                  S	5      (       d(  [	        S
UR                   SUR                  S    35      eUR                  S   nSU;   a!  SSK	n[	        UR                  US   5      5      eUb  UR                  c  / $ / n	UR                   Hr  n
U
S   U R                     nU
S   nSU
S   0nU R                  b)  U R                   H  nU
S   R                  U5      X'   M     [        XS9nU	R!                  X45        Mt     U	$ ! [         a<  n[	        SUR
                  S   S   S    SUR
                  S   S   S    35      eSnAff = f)aW  
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: r0   Nr.   z0Could not retrieve data from Vespa. Error code: r/   rooterrorsr-   	relevancer,   )page_contentmetadata)ra   r   r`   	Exceptionr9   argsr4   r7   r8   r:   dumpsrZ   r   r   getr   r5   )r    r[   r\   r>   r`   responseerh   r:   docschildrk   scorerl   fielddocs                   r'   &similarity_search_by_vector_with_score1VespaStore.similarity_search_by_vector_with_score   s    V#>*E&&DVDE	,,%,8H 8''(33C88'334 5$MM)457  }}V$ttzz$x.9::x}}4I]]E ?4+C+CDL+&EeDk*H$$0!22E&+Ho&9&9%&@HO 3HCKK% # A  	666!9Q<	*+ ,&&)A,y124 	s   E 
F#7FFc                Z    U R                   " X40 UD6nU Vs/ sH  oUS   PM	     sn$ s  snf Nr   )rx   )r    	embeddingr\   r>   rE   rM   s         r'   similarity_search_by_vector&VespaStore.similarity_search_by_vector   s3     ==iUfU%&g!g&&&   (c                |    / nU R                   b  U R                   R                  U5      nU R                  " XB40 UD6$ N)r   embed_queryrx   )r    r`   r\   r>   	query_embs        r'   similarity_search_with_score'VespaStore.similarity_search_with_score   sA     	##/00<<UCI::9R6RRrc   c                Z    U R                   " X40 UD6nU Vs/ sH  oUS   PM	     sn$ s  snf r{   )r   )r    r`   r\   r>   rE   rM   s         r'   similarity_searchVespaStore.similarity_search   s3     33EGG%&g!g&&&r   c                    [        S5      e)NzMMR search not implementedNotImplementedError)r    r`   r\   fetch_klambda_multr>   s         r'   max_marginal_relevance_search(VespaStore.max_marginal_relevance_search   s     "">??rc   c                    [        S5      e)Nz$MMR search by vector not implementedr   )r    r|   r\   r   r   r>   s         r'   'max_marginal_relevance_search_by_vector2VespaStore.max_marginal_relevance_search_by_vector   s     ""HIIrc   c                :    U " SSU0UD6nUR                  XUS9  U$ )Nr"   )r;   r<   r=    )rG   )clsr;   r|   r<   r=   r>   vespas          r'   
from_textsVespaStore.from_texts   s+     ;y;F;ecBrc   c                $   > [         TU ]  " S0 UD6$ )Nr   )superas_retriever)r    r>   	__class__s     r'   r   VespaStore.as_retriever
  s    w#-f--rc   )r   r   r   r   r   r   )NNNNN)r!   r   r"   zOptional[Embeddings]r#   Optional[str]r$   r   r%   r   r&   Optional[List[str]]returnNone)NN)
r;   zIterable[str]r<   Optional[List[dict]]r=   r   r>   r   r   	List[str]r   )r=   r   r>   r   r   zOptional[bool])   )r[   List[float]r\   intr>   r   r   r   )r[   r   r\   r   r>   r   r   List[Tuple[Document, float]])r|   r   r\   r   r>   r   r   List[Document])r`   r4   r\   r   r>   r   r   r   )r`   r4   r\   r   r>   r   r   r   )r      g      ?)r`   r4   r\   r   r   r   r   floatr>   r   r   r   )r|   r   r\   r   r   r   r   r   r>   r   r   r   )r   zType[VespaStore]r;   r   r|   r   r<   r   r=   r   r>   r   r   r   )r>   r   r   r   )__name__
__module____qualname____firstlineno____doc__r(   rG   rN   ra   rx   r}   r   r   r   r   classmethodr   r   __static_attributes____classcell__)r   s   @r'   r   r   
   s   F 48,0)-%)/300 10 *	0
 '0 #0 -0 
0D +/#'	00 (0 !	0
 0 
0dL 67*/2BE	6 676*6/26BE6	%6r 01'$'),'<?'	' $%SS S03S	%S $%'' '03'	'  @@ @ 	@
 @ @ 
@  JJ J 	J
 J J 
J 
 +/#'


 
 (	

 !
 
 

 
. .rc   r   N)
__future__r   typingr   r   r   r   r   r	   r
   r   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   r   r   r   rc   r'   <module>r      s(    " J J J - 0 IA. A.rc   