+
    kHàj2  ã                  ó´   € R t ^ RIHt ^ RIt^ RIHtHtHt ^ RIH	t	H
t
HtHtHtHtHtHtHtHtHtHt ]P*                  ! ]4      tRtR R lt ! R R	]	4      tR# )
uà   Exa web search + content extraction via the ``exa-py`` SDK (lazy-installed).

Env: ``EXA_API_KEY`` (https://exa.ai). Both methods are sync â€” Exa's SDK is
sync-only; the dispatcher threads extract when the caller is async.
)ÚannotationsN)ÚAnyÚDictÚList)ÚBaseWebSearchProviderÚcached_sdk_clientÚdocumentÚkeyless_extractÚkeyless_searchÚkeyless_variant_schemaÚprovider_envÚrun_extractÚ
run_searchÚ	search_okÚuse_keylessÚweb_hitzLEXA_API_KEY environment variable not set. Get your API key at https://exa.aic               ó   € V ^8„  d   QhRR/# )é   Úreturnr   © )Úformats   "Ú=/home/ubuntu/.hermes/hermes-agent/plugins/web/exa/provider.pyÚ__annotate__r      s   € ÷ Zñ Z˜ñ Zó    c                 ó4   € R  R lp \        RR\        RV 4      # )c               ó    € V ^8„  d   QhRRRR/# )r   Úapi_keyÚstrr   r   r   )r   s   "r   r   Ú%_get_exa_client.<locals>.__annotate__   s   € ÷ ñ ˜#ð  #ñ r   c                óB   € ^ RI Hp V! V R7      pRVP                  R&   V# )é    )ÚExa)r   zhermes-agentzx-exa-integration)Úexa_pyr!   Úheaders)r   r!   Úclients   &  r   Ú_factoryÚ!_get_exa_client.<locals>._factory   s#   € ÝÙ˜WÔ%ˆØ.<ˆ�‰Ð*Ñ+Øˆr   Ú_exa_clientÚEXA_API_KEYÚexa)r   Ú_MISSING_KEY)r%   s    r   Ú_get_exa_clientr+      s   € õô ˜]¨M¼<ÈÐPXÓYÐYr   c                  óV   € ] tR t^ tRtRtRtRtRtRt	RR R llt
R R	 ltR
 R ltRtR# )ÚExaWebSearchProviderzExa search + extract provider.r)   r!   r(   Tc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úqueryr   ÚlimitÚintr   údict[str, Any]r   )r   s   "r   r   Ú!ExaWebSearchProvider.__annotate__)   s!   € ÷ :ñ :˜Cð :¨ð :°Nñ :r   c                	ó@   aa€ R  VV3R llp\        R\        VRR7      # )c               ó   € V ^8„  d   QhRR/# ©r   r   r2   r   )r   s   "r   r   Ú1ExaWebSearchProvider.search.<locals>.__annotate__*   s   € ÷ 	ñ 	�~ñ 	r   c                 ó
  <€ \        R \        R4      4      '       d   \        RR SS\        4      # \        P	                  RSS4       \        4       P                  SSRR/R7      p \        \        V P                  ;'       g    . 4       UUu. uFe  w  r\        VP                  ;'       g    RVP                  ;'       g    RRP                  VP                  ;'       g    . 4      V^,           4      NKg  	  upp4      # u uppi )	r)   r(   r!   zExa search: '%s' (limit=%d)Ú
highlightsT)Únum_resultsÚcontentsÚ Ú )r   r   r
   ÚloggerÚinfor+   Úsearchr   Ú	enumerateÚresultsr   ÚurlÚtitleÚjoinr9   )ÚresponseÚiÚrr0   r/   s      €€r   Ú_bodyÚ*ExaWebSearchProvider.search.<locals>._body*   s×   ø€ Ü˜5¤,¨}Ó"=×>Ò>Ü% e¨U°E¸5Ä&ÓIÐIÜ�K‰KÐ5°u¸eÔDÜ&Ó(×/Ñ/°À5ÐT`ÐbfÐSgÐ/ÓhˆHÜä% h×&6Ñ&6×&<Ð&<¸"Ô=ôá=‘D�Aô ˜Ÿ™Ÿ˜  Q§W¡W§] ]°°C·H±H¸Q¿\¹\×=OÐ=OÈRÓ4PÐRSÐVWÕRWÖXÙ=òó ð ùó s   ÂC?
Â+C?
Ã C?
Ã C?
r!   T©Úsdk)r   r>   )Úselfr/   r0   rI   s   &ff r   r@   ÚExaWebSearchProvider.search)   s    ù€ ÷	ñ 	ô ˜%¤¨°DÔ9Ð9r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úurlsz	list[str]Úkwargsr   r   úlist[dict[str, Any]]r   )r   s   "r   r   r3   6   s'   € ÷ Añ A˜Ið A°ð AÐ9Mñ Ar   c                	ó>   a€ R  V3R llp\        R\        SVRR7      # )c               ó   € V ^8„  d   QhRR/# )r   r   rR   r   )r   s   "r   r   Ú2ExaWebSearchProvider.extract.<locals>.__annotate__7   s   € ÷ 	hñ 	hÐ+ñ 	hr   c            	     ó¶  <€ \        R \        R4      4      '       d   \        RR S\        4      # \        P	                  R\        S4      4       \        4       P                  SRR7      p V P                  ;'       g    .  Uu. uFL  p\        VP                  ;'       g    RVP                  ;'       g    RVP                  ;'       g    R4      NKN  	  up# u upi )r)   r(   r!   zExa extract: %d URL(s)T)Útextr<   )r   r   r	   r>   r?   Úlenr+   Úget_contentsrB   r   rC   rD   rW   )rF   rH   rP   s     €r   rI   Ú+ExaWebSearchProvider.extract.<locals>._body7   s¤   ø€ Ü˜5¤,¨}Ó"=×>Ò>Ü& u¨e°T¼6ÓBÐBÜ�K‰KÐ0´#°d³)Ô<Ü&Ó(×5Ñ5°dÀÐ5ÓFˆHØPX×P`ÑP`×PfÐPfÐdfÐPfÓgÑPfÈ1”H˜QŸU™UŸ[˜[ b¨!¯'©'¯-¨-°R¸¿¹¿¸À2ÖFÑPfÑgÐgùÒgs   ÂCÂCÂ3CÃCr!   TrK   )r   r>   )rM   rP   rQ   rI   s   &f, r   ÚextractÚExaWebSearchProvider.extract6   s$   ø€ ÷	hð 	hô ˜5¤&¨$°¸4Ô@Ð@r   c               ó   € V ^8„  d   QhRR/# r6   r   )r   s   "r   r   r3   @   s   € ÷ 
ñ 
 .ñ 
r   c                	ó"   € \        R RRRRR7      # )r!   r(   zhttps://exa.aizqSemantic + neural web search with content extraction on Exa's anonymous free tier. Rate-limited under burst load.zfSemantic + neural web search with content extraction via the Exa SDK. Unthrottled, guaranteed service.)Úfree_tagÚpaid_tag)r   )rM   s   &r   Úget_setup_schemaÚ%ExaWebSearchProvider.get_setup_schema@   s    € Ü%Ø�=Ð"2ð IØ}ô
ð 	
r   r   N)é   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚNAMEÚDISPLAY_NAMEÚKEY_ENVÚEXTRACTÚKEYLESSr@   r[   ra   Ú__static_attributes__r   r   r   r-   r-       s3   † Ù(à€DØ€LØ€GØ€GØ€G÷:õA÷
ñ 
r   r-   )rh   Ú
__future__r   ÚloggingÚtypingr   r   r   Úplugins.web._commonr   r   r   r	   r
   r   r   r   r   r   r   r   Ú	getLoggerrd   r>   r*   r+   r-   r   r   r   Ú<module>rt      sV   ðñõ #ã ß "Ñ "÷÷ ÷ ó ð
 
×	Ò	˜8Ó	$€à]€õZô%
Ð0ö %
r   