
    dh^                     ^    S SK JrJrJr  S SKrS SKrS SKJr  S SKJ	r	J
r
Jr   " S S\	5      rg)    )AnyDictOptionalNget_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc                   T   \ rS rSr% SrSr\\S'   Sr\	\   \S'   Sr
\	\R                     \S'   \" SS	9r\" S
S9\S\S\4S j5       5       rS\S\S\4S jrS\S\S\4S jrS\S\S\4S jrS\S\S\4S jrS\S\S\4S jrS\S\S\4S jrS\S\S\4S jr\S\S\4S j5       rSrg)SearchApiAPIWrapper	   aY  
Wrapper around SearchApi API.

To use, you should have the environment variable ``SEARCHAPI_API_KEY``
set with your API key, or pass `searchapi_api_key`
as a named parameter to the constructor.

Example:
    .. code-block:: python

        from langchain_community.utilities import SearchApiAPIWrapper
        searchapi = SearchApiAPIWrapper()
googleengineNsearchapi_api_key
aiosessionT)arbitrary_types_allowedbefore)modevaluesreturnc                 (    [        USS5      nX!S'   U$ )z,Validate that API key exists in environment.r   SEARCHAPI_API_KEYr   )clsr   r   s      _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/searchapi.pyvalidate_environment(SearchApiAPIWrapper.validate_environment"   s(     1')<
 '8"#    querykwargsc                 J    U R                   " U40 UD6nU R                  U5      $ N)results_result_as_stringselfr   r   r"   s       r   runSearchApiAPIWrapper.run,   s&    ,,u//%%g..r   c                 f   #    U R                   " U40 UD6I S h  vN nU R                  U5      $  N7fr!   )aresultsr#   r$   s       r   arunSearchApiAPIWrapper.arun0   s1     e6v66%%g.. 7s   1/1c                 ,    U R                   " U40 UD6nU$ r!   )_search_api_resultsr$   s       r   r"   SearchApiAPIWrapper.results4   s    **5;F;r   c                 H   #    U R                   " U40 UD6I S h  vN nU$  N7fr!   )_async_search_api_resultsr$   s       r   r)   SearchApiAPIWrapper.aresults8   s(     66uGGG Hs   " "c           	          SSSU R                    30U R                  US.UR                  5        VVs0 sH  u  p4Uc  M
  X4_M     snnES.$ s  snnf )Nz&https://www.searchapi.io/api/v1/searchAuthorizationzBearer )r   q)urlheadersparams)r   r   items)r%   r   r   keyvalues        r   _prepare_request$SearchApiAPIWrapper._prepare_request<   se    ;74+A+A*B!C ++ 17T*#%:3:T

 
	
 Us
   AAc                     U R                   " U40 UD6n[        R                  " US   US   US   S9nUR                  5         UR	                  5       $ )Nr5   r7   r6   )r5   r7   r6   )r;   requestsgetraise_for_statusjson)r%   r   r   request_detailsresponses        r   r-   'SearchApiAPIWrapper._search_api_resultsI   sW    //@@<<&"8,#I.

 	!!#}}r   c                   #    U R                   " U40 UD6nU R                  (       d|  [        R                  " 5        ISh  vN nUR	                  US   US   US   SS9 ISh  vN nUR                  5       I Sh  vN nSSS5      ISh  vN   SSS5      ISh  vN   W$ U R                  R	                  US   US   US   SS9 ISh  vN nUR                  5       I Sh  vN nSSS5      ISh  vN   U$  N N N Nt! , ISh  vN  (       d  f       N= f N! , ISh  vN  (       d  f       W$ = f Nm NW NI! , ISh  vN  (       d  f       W$ = f7f)zFUse aiohttp to send request to SearchApi API and return results async.Nr5   r6   r7   T)r5   r6   r7   r@   )r;   r   aiohttpClientSessionr?   rA   )r%   r   r   rB   sessionrC   r"   s          r   r0   -SearchApiAPIWrapper._async_search_api_resultsS   sC    //@@,,..'";;'.+I6*84%)	 '  
 $,MMO3G  /.   **#E*'	2&x0!%	 +  
  (/  ! / 4    /..   0   s   >E C;E D$C=%D(D<C?=DDDDED/ED:EE $D<%E )E4D>5E=D?DDD		D
D	DED7%D(&D72	E<E >E EE	EEresultc                    SnSU R                  5       ;   a!  SU S   R                  5       ;   a
  U S   S   nU$ SU R                  5       ;   a!  SU S   R                  5       ;   a
  U S   S   nU$ SU R                  5       ;   a
  U S   S   nU$ SU R                  5       ;   a@  U S    Vs/ sH  nSUR                  5       ;   d  M  US   PM      nnSR                  U5      nU$ S	U R                  5       ;   a@  U S	    Vs/ sH  nSUR                  5       ;   d  M  US   PM      nnSR                  U5      nU$ S
U R                  5       ;   aI  U S
    Vs/ sH'  nSUR                  5       ;   d  M  SUS    SUS    3PM)     nnSR                  U5      nU$ SU R                  5       ;   aJ  U S    Vs/ sH*  nSUR                  5       ;   d  M  SUS    SUS   S    3PM,     nnSR                  U5      nU$ s  snf s  snf s  snf s  snf )NzNo good search result found
answer_boxanswersnippetknowledge_graphdescriptionorganic_results
jobsvideostitlezTitle: "z" Link: linkimagesoriginal)keysjoin)rJ   toretrsnippetsrS   rT   rW   s          r   r#   %SearchApiAPIWrapper._result_as_stringi   s]   -6;;=(X9M9R9R9T-T<(2E: 9 V[[]*yF<<P<U<U<W/W<(3E6 5 &++-/,-m<E2 1 &++-/&,->&?&?9PQPVPVPXCX)&?   IIh'E( ' v{{}$*0.*8QMQVVX<U - .   IIdOE  &  ))Aaffh& ?HQwZL6>)  
 IIf%E  &  ))A) KHQwZL:v1F0GJ)  
 IIf%E/

s0   &G0	G0:G5	G5G:)G:+G?G? )__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   r   r   rF   rG   r	   model_configr
   classmethodr   r   r   r&   r*   dictr"   r)   r;   r-   r0   staticmethodr#   __static_attributes__r_   r   r   r   r   	   sK     FC'+x}+26J../6 $L (#$ 3   $/ / / // /s /s /S C D C 3 4 
c 
S 
T 
   S C D ,  $  3    r   r   )typingr   r   r   rF   r>   langchain_core.utilsr   pydanticr   r	   r
   r   r_   r   r   <module>ro      s(    & &   5 ; ;A) Ar   