Ë
    âß²j  ã                  ó    — d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	m
Z
mZmZmZmZ  ej                  e«      Z G d„ de«      ZddlZdd	iZd
„ Zy)u¿   SearXNG search via a user-hosted instance (``/search?format=json``).

Search-only â€” SearXNG aggregates upstream engines but does not fetch URLs.
Env: ``SEARXNG_URL=http://localhost:8080``.
é    )ÚannotationsN)ÚAnyÚDict)ÚBaseWebSearchProviderÚhttp_get_jsonÚprovider_envÚsearch_failÚ	search_okÚsetup_schemaÚtitled_rowsc                  ó.   — e Zd ZdZdZdZdZdd	d„Zd
d„Zy)ÚSearXNGWebSearchProviderz*Search via a user-hosted SearXNG instance.ÚsearxngÚSearXNGÚSEARXNG_URLc           
     ón  — t        d«      j                  d«      }|st        d«      S t        d|› d�|dddœd	d
idt        d|› �¬«      \  }}|�|S |j                  dg «      }t        |d„ d¬«      d | }t        |d«      }t        j                  d|t        |«      t        |«      |«       t        |«      S )Nr   ú/zSEARXNG_URL is not setr   z/searchÚjsoné   )ÚqÚformatÚpagenoÚAcceptzapplication/jsoné   zSearXNG at )ÚparamsÚheadersÚtimeoutÚloggerÚreach_targetÚresultsc                ó8   — t        | j                  dd«      «      S )NÚscorer   )ÚfloatÚget)Úrs    úA/home/ubuntu/.hermes/hermes-agent/plugins/web/searxng/provider.pyú<lambda>z1SearXNGWebSearchProvider.search.<locals>.<lambda>$   s   € ¼5ÀÇÁÀwÐPQÓARÓ;S€ ó    T)ÚkeyÚreverseÚcontentz7SearXNG search '%s': %d results (from %d raw, limit %d))r   Úrstripr	   r   r   r$   Úsortedr   ÚinfoÚlenr
   )	ÚselfÚqueryÚlimitÚbase_urlÚdataÚfailureÚraw_resultsÚsorted_resultsÚweb_resultss	            r&   ÚsearchzSearXNGWebSearchProvider.search   s×   € Ü Ó.×5Ñ5°cÓ:ˆÙÜÐ7Ó8Ð8Ü%Ø˜(˜ 7Ð+¸%È6Ð]^Ñ4_ØÐ1Ð2¸BÄvÐ^iÐjrÐisÐ\tô
‰ˆˆgð ÐØˆNØ—h‘h˜y¨"Ó-ˆä Ñ1SÐ]aÔbÐciÐdiÐjˆÜ! .°)Ó<ˆÜ�‰ÐMÈuÔVYÐZeÓVfÔhkÐlwÓhxÐzô  	AÜ˜Ó%Ð%r(   c                ó"   — t        dddddd«      S )Nr   u   free Â· self-hostedzHFree, privacy-respecting metasearch. Point SEARXNG_URL at your instance.r   z1SearXNG instance URL (e.g. http://localhost:8080)zhttps://searx.space/)r   )r0   s    r&   Úget_setup_schemaz)SearXNGWebSearchProvider.get_setup_schema)   s!   € ÜØÐ,Ð.xØÐNÐPfó
ð 	
r(   N)é   )r1   Ústrr2   ÚintÚreturnúDict[str, Any])r?   r@   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚNAMEÚDISPLAY_NAMEÚKEY_ENVr9   r;   © r(   r&   r   r      s   „ Ù4à€DØ€LØ€Gô&ô"
r(   r   ÚWebSearchProvider)zagent.web_search_providerrI   c                óÌ   — t         j                  | «      }|€t        dt        ›d| ›�«      ‚dd l}ddlm}  |t        | g|¢­Ž  t        |j                  |d   «      |d   «      S )Nzmodule z has no attribute r   )Ú	warn_oncer   )	Ú_PLUGIN_COMPAT_LAZYr$   ÚAttributeErrorrA   Ú	importlibÚhermes_cli.plugin_compatrK   ÚgetattrÚimport_module)ÚnameÚtargetrN   rK   s       r&   Ú__getattr__rT   <   se   € Ü ×$Ñ$ TÓ*€FØ€~Ü˜w¤x lÐ2DÀTÀHÐMÓNÐNÛÝ2ÙŒh˜Ð&˜vÓ&Ü�9×*Ñ*¨6°!©9Ó5°v¸a±yÓAÐAr(   )rD   Ú
__future__r   ÚloggingÚtypingr   r   Úplugins.web._commonr   r   r   r	   r
   r   r   Ú	getLoggerrA   r   r   ÚosrL   rT   rH   r(   r&   ú<module>r[      sb   ðñõ #ã ß ÷ F÷  Fñ  Fà	ˆ×	Ñ	˜8Ó	$€ô
Ð4ô 
óF 
ð ÐKðÐ ó
Br(   