
    Ng                     v    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e          ZdS )    N)AnyDictListLiteralOptional)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseRetrieverc                   |   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Zdededee         fdZdedee         f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                   	 ddl m} n# t          $ r t          d          w xY w || j        pt          j        d         | j        pt          j        d         dg          } |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_type )asknews_sdkr/   ImportErrorr)   osenvironr*   r3   search_newsr   r   r   r   r%   r&   r'   r   r(   _extract_documents)selfr+   r,   r/   	an_clientresponses         b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/retrievers/asknews.py_get_relevant_documentsz(AskNewsRetriever._get_relevant_documents.   s   	....... 	 	 	@  	
 JnG
3F(G,S
;R0S8
 
 
	
 .9>- 
v 0,;'+'F; '&
 
 k
 
  &&x000s   	 #c                  K   	 ddl m} n# t          $ r t          d          w xY w || j        pt          j        d         | j        pt          j        d         dg          } |j        j        d|| j	        | j
        | j        | j        | j        | j        | j        | j        dd	d
d| j         d{V }|                     |          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   )AsyncAskNewsSDKr0   r1   r2   r3   r4   r8   r6   r7   )r+   r9   r   r   r   r%   r&   r'   r   r<   r:   r;   Nr=   )r>   rJ   r?   r)   r@   rA   r*   r3   rB   r   r   r   r   r%   r&   r'   r   r(   rC   )rD   r+   r,   rJ   rE   rF   s         rG   _aget_relevant_documentsz)AskNewsRetriever._aget_relevant_documentsV   s.     	3333333 	 	 	@  	
 $OnG
3F(G,S
;R0S8
 
 
	
 43 
v 0,;'+'F; '&
 
 k
 
 
 
 
 
 
 
  &&x000s    %rF   c                     ddl m} |t          j        dj        t          j                  fdt          t                              D             }|S )z'Extract documents from an api response.r   )SearchResponsez<doc>(.*?)</doc>c           
         g | ]}t          |                                         j        |         j        j        |         j        rt          j        |         j                  nd j        |         j        d          S )N)titlesourceimages)page_contentmetadata)r
   stripas_dictsrO   article_urlstr	image_url).0imatchessrs     rG   
<listcomp>z7AskNewsRetriever._extract_documents.<locals>.<listcomp>   s     
 
 
  $QZ--//[^1{1~1c"+a."<=== k!n6 	 	 	
 
 
    )asknews_sdk.dto.newsrM   refindall	as_stringDOTALLrangelen)rD   rF   rM   docsr[   r\   s       @@rG   rC   z#AskNewsRetriever._extract_documents~   sy     	877777%*0",	JJ
 
 
 
 
 3w<<((
 
 
 r^   )__name__
__module____qualname____doc__r   int__annotations__r   r   r   r   r   r   r%   r   r&   boolr'   floatr(   r   rW   r   r)   r*   r	   r
   rH   r   rK   rC   r=   r^   rG   r   r      s        AsKKKFCOOO%)OXc])))#'M8C='''"&FGJ&&&& 
% 	
   & J(++++')FHT#s(^$)))#Ix}####'M8C='''&1&1*H&1	h&1 &1 &1 &1P&1&1*M&1	h&1 &1 &1 &1P3 4>      r^   r   )r@   r`   typingr   r   r   r   r   langchain_core.callbacksr   r	   langchain_core.documentsr
   langchain_core.retrieversr   r   r=   r^   rG   <module>rs      s    				 				 5 5 5 5 5 5 5 5 5 5 5 5 5 5        . - - - - - 3 3 3 3 3 3E E E E E} E E E E Er^   