o
    Ag                     @   sh   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ G dd deZdS )    N)AnyDictListLiteralOptional)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseRetrieverc                   @   s
  e Zd ZU dZdZeed< dZeed< dZe	e ed< dZ
e	e ed< d	Zed
 ed< dgZeed  ed< dZeed< dZeed< i Ze	eeef  ed< dZe	e ed< dZe	e ed< dededee fddZdededee fddZdedee fddZdS ) AskNewsRetrieverzAskNews retriever.
   kr   offsetNstart_timestampend_timestampnl)r   kwmethodAll)r   BusinessCrimePoliticsScienceSports
TechnologyMilitaryHealthEntertainmentFinanceCultureClimateEnvironmentWorld
categoriesF
historicalg      ?similarity_score_thresholdkwargs	client_idclient_secretqueryrun_managerreturnc                C   s   zddl m} W n ty   tdw || jptjd | jp#tjd dgd}|jjd|| j	| j
| j| j| j| j| j| jdd	d
d| j}| |S )zGet documents relevant to a query.
        Args:
            query: String to find relevant documents for
            run_manager: The callbacks handler to use
        Returns:
            List of relevant documents
        r   )
AskNewsSDKOAskNews python package not found. Please install it with `pip install asknews`.ASKNEWS_CLIENT_IDASKNEWS_CLIENT_SECRETnewsr'   r(   scopes<doc></doc>both)r)   
n_articlesr   r   r   r#   r$   r%   r   doc_start_delimiterdoc_end_delimiterreturn_typeN )asknews_sdkr,   ImportErrorr'   osenvironr(   r0   search_newsr   r   r   r   r#   r$   r%   r   r&   _extract_documents)selfr)   r*   r,   	an_clientresponser:   r:   m/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/langchain_community/retrievers/asknews.py_get_relevant_documents.   s:   

z(AskNewsRetriever._get_relevant_documentsc                   s   zddl m} W n ty   tdw || jptjd | jp$tjd dgd}|jjd|| j	| j
| j| j| j| j| j| jdd	d
d| jI dH }| |S )zAsynchronously get documents relevant to a query.
        Args:
            query: String to find relevant documents for
            run_manager: The callbacks handler to use
        Returns:
            List of relevant documents
        r   )AsyncAskNewsSDKr-   r.   r/   r0   r1   r5   r3   r4   )r)   r6   r   r   r   r#   r$   r%   r   r9   r7   r8   Nr:   )r;   rF   r<   r'   r=   r>   r(   r0   r?   r   r   r   r   r#   r$   r%   r   r&   r@   )rA   r)   r*   rF   rB   rC   r:   r:   rD   _aget_relevant_documentsV   s<   

z)AskNewsRetriever._aget_relevant_documentsrC   c                    sB   ddl m} |tdjtj  fddtt D }|S )z'Extract documents from an api response.r   )SearchResponsez<doc>(.*?)</doc>c                    sT   g | ]&}t  |  j| jj| jrtj| jnd j| jddqS )N)titlesourceimages)page_contentmetadata)r	   stripas_dictsrI   article_urlstr	image_url).0imatchessrr:   rD   
<listcomp>   s    



z7AskNewsRetriever._extract_documents.<locals>.<listcomp>)asknews_sdk.dto.newsrH   refindall	as_stringDOTALLrangelen)rA   rC   rH   docsr:   rU   rD   r@   ~   s   
z#AskNewsRetriever._extract_documents)__name__
__module____qualname____doc__r   int__annotations__r   r   r   r   r   r   r#   r   r$   boolr%   floatr&   r   rQ   r   r'   r(   r   r	   rE   r   rG   r@   r:   r:   r:   rD   r      sB   
 
(
(r   )r=   rZ   typingr   r   r   r   r   langchain_core.callbacksr   r   langchain_core.documentsr	   langchain_core.retrieversr
   r   r:   r:   r:   rD   <module>   s    