Ë
    áß²jn  ã                  óð   — U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ  ej                  e«      Z e	dee¬«      Zd	ed
<   ej#                   e«       «       dd„ZddlmZ ddlmZ ddlZddiZd„ Zy)aŸ  Image generation provider registry.

Populated by plugins at import-time via ``PluginContext.register_image_gen_provider()``;
the ``image_generate`` tool dispatches to :func:`get_active_provider`. Selection is
``image_gen.provider`` in config.yaml; when unset: the single *available* provider,
else ``fal`` if registered and available (legacy default), else ``None`` (the tool
points the user at ``hermes tools``).
é    )ÚannotationsN)ÚOptional)ÚImageGenProvider)ÚProviderRegistryÚconfigured_provider_nameÚis_available_safez	Image gen)ÚlabelÚprovider_clsÚloggerz"ProviderRegistry[ImageGenProvider]Ú	_registryc                 óh  — t        dt        «      } t        j                  «       }| r,|j	                  | «      �||    S t        j                  d| «       dd„}|j                  «       D �cg c]  } ||«      sŒ|‘Œ }}t        |«      dk(  r|d   S |j	                  d«      }|�
 ||«      r|S dS c c}w )	aw  Resolve the currently-active provider. Availability semantics (mirrors
    :mod:`agent.web_search_registry`): an explicitly configured provider is returned
    even if ``is_available()`` is False, so the dispatcher surfaces a precise
    "X_API_KEY is not set" error instead of silently switching backends; only the
    unconfigured fallback path is filtered by availability.Ú	image_genNzCimage_gen.provider='%s' configured but not registered; falling backc                ó$   — t        | t        d«      S )Nz.image_gen provider %s.is_available() raised %s)r   r   )Úps    ú=/home/ubuntu/.hermes/hermes-agent/agent/image_gen_registry.pyÚ
_availablez'get_active_provider.<locals>._available(   s   € Ü  ¤FÐ,\Ó]Ð]ó    é   r   Úfal)r   r   ÚreturnÚbool)r   r   r   ÚmergedÚgetÚdebugÚvaluesÚlen)Ú
configuredÚsnapshotr   r   Ú	availabler   s         r   Úget_active_providerr       s²   € ô *¨+´vÓ>€JÜ×ÑÓ!€HÙØ�<‰<˜
Ó#Ð/Ø˜JÑ'Ð'Ü�‰ÐZÐ\fÔgó^ð %ŸO™OÓ-Ö?�q±¸Aµ’Ð?€IÐ?Ü
ˆ9ƒ~˜ÒØ˜‰|ÐØ
�,‰,�uÓ
€CØ�/¡j°¤oˆ3Ð?¸4Ð?ùò	 @s   Á)B/Á7B/)ÚDict)ÚListÚhermes_home_key)Úhermes_constantsr#   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   ÚAttributeErrorÚ__name__Ú	importlibÚhermes_cli.plugin_compatr&   ÚgetattrÚimport_module)ÚnameÚtargetr*   r&   s       r   Ú__getattr__r0   @   se   € Ü ×$Ñ$ TÓ*€FØ€~Ü˜w¤x lÐ2DÀTÀHÐMÓNÐNÛÝ2ÙŒh˜Ð&˜vÓ&Ü�9×*Ñ*¨6°!©9Ó5°v¸a±yÓAÐAr   )r   zOptional[ImageGenProvider])Ú__doc__Ú
__future__r   ÚloggingÚtypingr   Úagent.image_gen_providerr   Úagent.provider_registryr   r   r   Ú	getLoggerr)   r   r   Ú__annotations__ÚexportÚglobalsr    r!   r"   Ú	threadingr'   r0   © r   r   ú<module>r=      s†   ðòõ #ã Ý å 5ß aÑ aà	ˆ×	Ñ	˜8Ó	$€ñ 1AØ
Ð$4¸Vô1€	Ð-ó ð 
× Ñ ‘“Ô ó@õ6 Ý Û ð Ð>ðÐ ó
Br   