
    dh                    v    S SK Jr  S SKrS SK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   " S S\5      rg)	    )annotationsN)AnyDictListLiteralOptionalSequenceUnion)CallbackManagerForRetrieverRun)Document)BaseRetrieverc                      \ rS rSr% SrS\S'    S\S'    S\S'    S	\S
'    SS jr      SS jrSS.     SS jjr\	SSSSSS.                 SS jj5       r
Srg)VespaRetriever   z`Vespa` retriever.r   appr   bodystrcontent_fieldzSequence[str]metadata_fieldsc                |   U R                   R                  U5      n[        UR                  5      R	                  S5      (       d$  [        SR                  UR                  5      5      eUR                  S   nSU;   a"  [        [        R                  " US   5      5      e/ nUR                   H  nUS   R                  U R                  S5      nU R                  S:X  a  US   nO-U R                   Vs0 sH  oUS   R                  U5      _M     nnUS   US'   UR                  [        XgS	95        M     U$ s  snf )
N2z2Could not retrieve data from Vespa. Error code: {}rooterrorsfields *id)page_contentmetadata)r   queryr   status_code
startswithRuntimeErrorformatjsondumpshitspopr   r   getappendr   )	selfr   responser   docschildr   r   mfs	            f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/retrievers/vespa_retriever.py_queryVespaRetriever._query   s#   88>>$'8''(33C88DKK((  }}V$ttzz$x.9::]]E ?..t/A/A2FL##s* ?BFBVBVWBVBh 3 3B 77BVW"4[HTNKKlNO #  Xs   4D9c               `    U R                   R                  5       nXS'   U R                  U5      $ )Nr    r   copyr1   )r+   r    run_managerr   s       r0   _get_relevant_documents&VespaRetriever._get_relevant_documents0   s*     yy~~W{{4      N)_filterc                   U R                   R                  5       nU(       a  SU 3OSnUS   U-   US'   XS'   U R                  U5      $ )N and r   yqlr    r4   )r+   r    r:   r   s       r0   "get_relevant_documents_with_filter1VespaRetriever.get_relevant_documents_with_filter7   sL     yy~~'.E'#B5kG+UW{{4  r9    )kr   sourcesr:   r=   c                   SSK Jn	  U	" U5      n
UR                  5       nU(       a  U(       d  U(       a  [	        S5      eUS:X  a  SnSUS'   O'SR                  U/[        U=(       d    / 5      -   5      n[        U[        5      (       a  SR                  U5      OSnU(       a  S	U 3OS
nSU SU SU 3nX{S'   U(       a  X;S'   U " U
UUUS9$ ! [         a    [        S5      ef = f)a"  Instantiate retriever from params.

Args:
    url (str): Vespa app URL.
    content_field (str): Field in results to return as Document page_content.
    k (Optional[int]): Number of Documents to return. Defaults to None.
    metadata_fields(Sequence[str] or "*"): Fields in results to include in
        document metadata. Defaults to empty tuple ().
    sources (Sequence[str] or "*" or None): Sources to retrieve
        from. Defaults to None.
    _filter (Optional[str]): Document filter condition expressed in YQL.
        Defaults to None.
    yql (Optional[str]): Full YQL query to be used. Should not be specified
        if _filter or sources are specified. Defaults to None.
    kwargs (Any): Keyword arguments added to query body.

Returns:
    VespaRetriever: Instantiated VespaRetriever.
r   )VespazCpyvespa is not installed, please install with `pip install pyvespa`zKyql should only be specified if both sources and _filter are not specified.r   shortsummaryz, r<   r   zselect z from sources z where userQuery()r=   r'   )r   r   r   r   )	vespa.applicationrD   ImportErrorr5   
ValueErrorjoinlist
isinstancer	   )clsurlr   rA   r   rB   r:   r=   kwargsrD   r   r   _fields_sourcess                 r0   from_paramsVespaRetriever.from_params@   s   @	/
 Cj{{}Gw 
 #%")Y))]Od?;Pb6Q$QR-7-J-Jtyy)PSH+2gY'GG9N8*<NwiXCUL'+	
 	
/  	U 	s   C C$)r   r   returnList[Document])r    r   r6   r   rT   rU   )r    r   r:   Optional[str]rT   rU   )rN   r   r   r   rA   zOptional[int]r   z"Union[Sequence[str], Literal['*']]rB   z(Union[Sequence[str], Literal['*'], None]r:   rV   r=   rV   rO   r   rT   r   )__name__
__module____qualname____firstlineno____doc____annotations__r1   r7   r>   classmethodrR   __static_attributes__r@   r9   r0   r   r      s    	H%
J$""'2!!*H!	! 7;!!&3!	!   >@<@!%!=
=
 =

 =
 <=
 :=
 =
 =
 =
 
=
 =
r9   r   )
__future__r   r%   typingr   r   r   r   r   r	   r
   langchain_core.callbacksr   langchain_core.documentsr   langchain_core.retrieversr   r   r@   r9   r0   <module>rd      s+    "  F F F C - 3s
] s
r9   