
    dh                     n    S SK r S SKrS SKJrJrJrJrJr  S SKJ	r	J
r
  S SKJr  S SKJr   " S S\5      rg)    N)AnyDictListLiteralOptional)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)BaseRetrieverc                   @   \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\
\   \S'   Sr\
\   \S	'   S
r\S   \S'   S/r\\S      \S'   Sr\\S'   Sr\\S'   0 r\
\\\4      \S'   Sr\
\   \S'   Sr\
\   \S'   S\S\S\\   4S jrS\S\S\\   4S jrS\S\\   4S jrSr g)AskNewsRetriever   z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                    SSK Jn  U" U R                  =(       d    [        R
                  S   U R                  =(       d    [        R
                  S   S/S9nUR                  R                  " SUU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   SS	S
S.U R"                  D6nU R%                  U5      $ ! [         a    [        S5      ef = f)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_sdkr0   ImportErrorr*   osenvironr+   r4   search_newsr   r   r   r   r&   r'   r(   r   r)   _extract_documents)selfr,   r-   r0   	an_clientresponses         ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/retrievers/asknews.py_get_relevant_documents(AskNewsRetriever._get_relevant_documents.   s    	. nnG

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

;R0S8
	
 >>-- 
vv 00,,;;'+'F'F;; '&
 kk
  &&x005  	@ 	s   C- -Dc                (  #     SSK Jn  U" U R                  =(       d    [        R
                  S   U R                  =(       d    [        R
                  S   S/S9nUR                  R                  " SUU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   SS	S
S.U R"                  D6I Sh  vN nU R%                  U5      $ ! [         a    [        S5      ef = f N.7f)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   )AsyncAskNewsSDKr1   r2   r3   r4   r5   r9   r7   r8   )r,   r:   r   r   r   r&   r'   r(   r   r=   r;   r<   Nr>   )r?   rL   r@   r*   rA   rB   r+   r4   rC   r   r   r   r   r&   r'   r(   r   r)   rD   )rE   r,   r-   rL   rF   rG   s         rH   _aget_relevant_documents)AskNewsRetriever._aget_relevant_documentsV   s     	3 $nnG

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

;R0S8
	
 #33 
vv 00,,;;'+'F'F;; '&
 kk
 
  &&x005  	@ 	
s(   DC7 CD!D"D7DDrG   c                    SSK Jn  Un[        R                  " SUR                  [        R
                  5      n[        [        U5      5       Vs/ sH  n[        XE   R                  5       UR                  U   R                  UR                  U   R                  (       a"  [        UR                  U   R                  5      OSUR                  U   R                  S.S9PM     nnU$ s  snf )z'Extract documents from an api response.r   )SearchResponsez<doc>(.*?)</doc>N)titlesourceimages)page_contentmetadata)asknews_sdk.dto.newsrP   refindall	as_stringDOTALLrangelenr
   stripas_dictsrQ   article_urlstr	image_url)rE   rG   rP   srmatchesidocss          rH   rD   #AskNewsRetriever._extract_documents~   s     	8%**0",,		J 3w<(
 ) $Z--/[[^11{{1~11 ""++a."<"<= kk!n66	 ) 	 
 
s   BC(r>   )!__name__
__module____qualname____firstlineno____doc__r   int__annotations__r   r   r   r   r   r   r&   r   r'   boolr(   floatr)   r   r`   r   r*   r+   r	   r
   rI   r   rM   rD   __static_attributes__r>       rH   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> rq   r   )rA   rW   typingr   r   r   r   r   langchain_core.callbacksr   r	   langchain_core.documentsr
   langchain_core.retrieversr   r   r>   rq   rH   <module>rv      s,    	 	 5 5 . 3E} Erq   