
    7|h                    v    d dl mZ d dlZd dl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  G d de      Zy)	    )annotationsN)AnyDictListLiteralOptionalSequenceUnion)CallbackManagerForRetrieverRun)Document)BaseRetrieverc                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 dd
Z	 	 	 	 	 	 ddZdd	 	 	 	 	 ddZedddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	y)VespaRetrieverz`Vespa` retriever.r   appr   bodystrcontent_fieldzSequence[str]metadata_fieldsc                l   | j                   j                  |      }t        |j                        j	                  d      s$t        dj                  |j                              |j                  d   }d|v r!t        t        j                  |d               g }|j                  D ]  }|d   j                  | j                  d      }| j                  dk(  r|d   }n,| j                  D ci c]  }||d   j                  |       }}|d   |d<   |j                  t        ||	              |S c c}w )
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	            m/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/retrievers/vespa_retriever.py_queryzVespaRetriever._query   s(   88>>$'8''(33C8DKK((  }}V$ttzz$x.9::]] 	PE ?..t/A/A2FL##s* ?BFBVBVWBBh 3 3B 77WW"4[HTNKKlXNO	P  Xs   +D1c               b    | j                   j                         }||d<   | j                  |      S )Nr   r   copyr0   )r*   r   run_managerr   s       r/   _get_relevant_documentsz&VespaRetriever._get_relevant_documents0   s,     yy~~W{{4      N)_filterc                   | j                   j                         }|rd| nd}|d   |z   |d<   ||d<   | j                  |      S )N and r   yqlr   r2   )r*   r   r7   r   s       r/   "get_relevant_documents_with_filterz1VespaRetriever.get_relevant_documents_with_filter7   sN     yy~~'.E'#B5kG+UW{{4  r6    )kr   sourcesr7   r:   c                  	 ddl m}	  |	|      }
|j                         }|r|s|rt	        d      |dk(  rd}d|d<   n"dj                  |gt        |xs g       z         }t        |t              rdj                  |      nd}|rd	| nd
}d| d| d| }||d<   |r||d<    | |
|||      S # t        $ r t        d      w xY w)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, r9   r   zselect z from sources z where userQuery()r:   r&   )r   r   r   r   )	vespa.applicationr@   ImportErrorr3   
ValueErrorjoinlist
isinstancer	   )clsurlr   r=   r   r>   r7   r:   kwargsr@   r   r   _fields_sourcess                 r/   from_paramszVespaRetriever.from_params@   s   @	/
 Cj{{}Gw 
 #%")Y))]Od?;Pb6Q$QR-7-Jtyy)PSH+2gY'GG9N8*<NwiXCUDL'+	
 	
/  	U 	s   B/ /C)r   r   returnList[Document])r   r   r4   r   rO   rP   )r   r   r7   Optional[str]rO   rP   )rJ   r   r   r   r=   zOptional[int]r   z"Union[Sequence[str], Literal['*']]r>   z(Union[Sequence[str], Literal['*'], None]r7   rQ   r:   rQ   rK   r   rO   r   )
__name__
__module____qualname____doc____annotations__r0   r5   r;   classmethodrN   r<   r6   r/   r   r      s    	H%
J$""'2!!*H!	! 7;!!&3!	!   >@<@!%!=
=
 =

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