o
    Zh                     @  sp   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 deZdS )	    )annotationsN)AnyDictListLiteralOptionalSequenceUnion)CallbackManagerForRetrieverRun)Document)BaseRetrieverc                   @  sz   e Zd ZU dZded< 	 ded< 	 ded< 	 ded	< 	 d%ddZd&ddZddd'ddZeddddddd(d#d$Z	dS ))VespaRetrieverz`Vespa` retriever.r   appr   bodystrcontent_fieldzSequence[str]metadata_fieldsreturnList[Document]c                   s   | j |}t|jdstd|j|jd }d|v r(tt|d g }|j	D ].  d 
| jd}| jdkrB d }n
 fdd	| jD } d
 |d
< |t||d q-|S )N2z2Could not retrieve data from Vespa. Error code: {}rooterrorsfields *c                   s   i | ]
}| d   |qS )r   )get).0mfchild e/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/retrievers/vespa_retriever.py
<dictcomp>+   s    z)VespaRetriever._query.<locals>.<dictcomp>id)page_contentmetadata)r   queryr   status_code
startswithRuntimeErrorformatjsondumpshitspopr   r   appendr   )selfr   responser   docsr$   r%   r    r   r!   _query   s&   



zVespaRetriever._queryr&   run_managerr
   c                C  s   | j  }||d< | |S )Nr&   r   copyr3   )r0   r&   r4   r   r    r    r!   _get_relevant_documents0   s   

z&VespaRetriever._get_relevant_documentsN)_filterr8   Optional[str]c                C  s>   | j  }|rd| nd}|d | |d< ||d< | |S )N and r   yqlr&   r5   )r0   r&   r8   r   r    r    r!   "get_relevant_documents_with_filter7   s
   

z1VespaRetriever.get_relevant_documents_with_filterr    )kr   sourcesr8   r;   urlr=   Optional[int]"Union[Sequence[str], Literal['*']]r>   (Union[Sequence[str], Literal['*'], None]r;   kwargsc                K  s   zddl m}	 W n ty   tdw |	|}
| }|r&|s"|r&td|dkr1d}d|d< nd|gt|p9g  }t|trGd|nd}|rPd	| nd
}d| d| d| }||d< |rg||d< | |
|||dS )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   Zshortsummaryz, r:   r   zselect z from sources z where userQuery()r;   r-   )r   r   r   r   )	Zvespa.applicationrD   ImportErrorr6   
ValueErrorjoinlist
isinstancer   )clsr?   r   r=   r   r>   r8   r;   rC   rD   r   r   _fieldsZ_sourcesr    r    r!   from_params@   s:    
zVespaRetriever.from_params)r   r   r   r   )r&   r   r4   r
   r   r   )r&   r   r8   r9   r   r   )r?   r   r   r   r=   r@   r   rA   r>   rB   r8   r9   r;   r9   rC   r   r   r   )
__name__
__module____qualname____doc____annotations__r3   r7   r<   classmethodrM   r    r    r    r!   r      s*   
 

	r   )
__future__r   r+   typingr   r   r   r   r   r   r	   Zlangchain_core.callbacksr
   Zlangchain_core.documentsr   Zlangchain_core.retrieversr   r   r    r    r    r!   <module>   s    $