o
    Zh                     @   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   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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   Z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   r#   search_newsr   r   r   r   r   r   r   r   r   _extract_documents)selfr   r   r   	an_clientresponser,   r,   ]/var/www/html/lang_env/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"   r#   r$   r'   r%   r&   )r   r(   r   r   r   r   r   r   r   r+   r)   r*   Nr,   )r-   r8   r.   r   r/   r0   r   r#   r1   r   r   r   r   r   r   r   r   r   r2   )r3   r   r   r8   r4   r5   r,   r,   r6   _aget_relevant_documentsV   s<   

z)AskNewsRetriever._aget_relevant_documentsr5   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sourceZimages)Zpage_contentmetadata)r	   stripZas_dictsr;   Zarticle_urlstrZ	image_url).0imatchessrr,   r6   
<listcomp>   s    



z7AskNewsRetriever._extract_documents.<locals>.<listcomp>)Zasknews_sdk.dto.newsr:   refindall	as_stringDOTALLrangelen)r3   r5   r:   docsr,   rB   r6   r2   ~   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   r2   r,   r,   r,   r6   r      sB   
 
(
(r   )r/   rF   typingr   r   r   r   r   Zlangchain_core.callbacksr   r   Zlangchain_core.documentsr	   Zlangchain_core.retrieversr
   r   r,   r,   r,   r6   <module>   s    