
    7|h                     n    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y)    N)AnyDictListLiteralOptional)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseRetrieverc                   2   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y)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}  || j                  xs t        j
                  d   | j                  xs t        j
                  d   dg      } |j                  j                  d|| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   dd	d
d| j"                  }| j%                  |      S # t        $ r t        d      w xY w)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         e/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/retrievers/asknews.py_get_relevant_documentsz(AskNewsRetriever._get_relevant_documents.   s    	. nnG

3F(G,,S

;R0S8
	
 .9>>-- 
vv 00,,;;'+'F'F;; '&
 kk
  &&x005  	@ 	s   C& &C;c                  K   	 ddl m}  || j                  xs t        j
                  d   | j                  xs t        j
                  d   dg      } |j                  j                  d|| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   dd	d
d| j"                   d{   }| j%                  |      S # t        $ r t        d      w xY w7 -w)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 $nnG

3F(G,,S

;R0S8
	
 433 
vv 00,,;;'+'F'F;; '&
 kk
 
  &&x005  	@ 	
s(   D
C0 CD
DD
0DD
rF   c                    ddl m} |}t        j                  d|j                  t        j
                        }t        t        |            D cg c]  }t        ||   j                         |j                  |   j                  |j                  |   j                  r"t        |j                  |   j                        nd|j                  |   j                  d       }}|S c c}w )z'Extract documents from an api response.r   )SearchResponsez<doc>(.*?)</doc>N)titlesourceimages)page_contentmetadata)asknews_sdk.dto.newsrM   refindall	as_stringDOTALLrangelenr
   stripas_dictsrN   article_urlstr	image_url)rD   rF   rM   srmatchesidocss          rG   rC   z#AskNewsRetriever._extract_documents~   s     	8%**0",,		J 3w<(
  $QZ--/[[^11{{1~11 ""++a."<"<= kk!n66	
 
 
s   BC$)__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
   rH   r   rK   rC   r=       rG   r   r      s   AsKFCO%)OXc])#'M8C='"&FGJ&& 
% 	
 & J(++')FHT#s(^$)#Ix}##'M8C='&1&1*H&1	h&1P&1&1*M&1	h&1P3 4> rk   r   )r@   rT   typingr   r   r   r   r   langchain_core.callbacksr   r	   langchain_core.documentsr
   langchain_core.retrieversr   r   r=   rk   rG   <module>rp      s,    	 	 5 5 . 3E} Erk   