a
    bg                     @   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< eeee dddZeeee dddZeee dddZdS )AskNewsRetrieverzAskNews retriever.
   kr   offsetNstart_timestampend_timestampnl)r   kwmethodAll)r   ZBusinessZCrimeZPoliticsZScienceZSportsZ
TechnologyZMilitaryZHealthZEntertainmentZFinanceZCultureZClimateEnvironmentZ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Y n0 || jp<tjd | jpJtjd dgd}|jjf || 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   Zscopes<doc></doc>both)r   
n_articlesr   r   r   r   r   r   r   doc_start_delimiterdoc_end_delimiterreturn_type)asknews_sdkr   ImportErrorr   osenvironr   r#   search_newsr   r   r   r   r   r   r   r   r   _extract_documents)selfr   r   r   	an_clientresponse r5   t/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/retrievers/asknews.py_get_relevant_documents.   s8    

z(AskNewsRetriever._get_relevant_documentsc                   s   zddl m} W n ty*   tdY n0 || jp<tjd | jpJtjd dgd}|jjf || 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"   r#   r$   r'   r%   r&   )r   r(   r   r   r   r   r   r   r   r+   r)   r*   N)r,   r8   r-   r   r.   r/   r   r#   r0   r   r   r   r   r   r   r   r   r   r1   )r2   r   r   r8   r3   r4   r5   r5   r6   _aget_relevant_documentsV   s8    

z)AskNewsRetriever._aget_relevant_documents)r4   r   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 | ]L}t  |  j| jj| jr:tj| jnd j| jddqS )N)titlesourceZimages)Zpage_contentmetadata)r	   stripZas_dictsr;   Zarticle_urlstrZ	image_url).0imatchessrr5   r6   
<listcomp>   s   



z7AskNewsRetriever._extract_documents.<locals>.<listcomp>)Zasknews_sdk.dto.newsr:   refindall	as_stringDOTALLrangelen)r2   r4   r:   docsr5   rB   r6   r1   ~   s    
z#AskNewsRetriever._extract_documents)__name__
__module____qualname____doc__r   int__annotations__r   r   r   r   r   r   r   r   r   boolr   floatr   r   r?   r   r   r   r   r	   r7   r   r9   r1   r5   r5   r5   r6   r      s0   
)(r   )r.   rF   typingr   r   r   r   r   Zlangchain_core.callbacksr   r   Zlangchain_core.documentsr	   Zlangchain_core.retrieversr
   r   r5   r5   r5   r6   <module>   s   