+
    jHàjü  ã                  óì   € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHtH	t	 ^ RI
H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 ]P0                  ! ]4      tR R ltR	 R
 ltR R lt ! R R]4      tR R ltR# )u¦  DeepInfra image generation (FLUX, Qwen-Image-Edit, â€¦) via the OpenAI-compatible
``/v1/openai/images/generations`` endpoint. The catalog is fully dynamic (``image-gen``-tagged
models from :func:`hermes_cli.models._fetch_deepinfra_models_by_tag`; no ids hardcoded).
Selection: ``DEEPINFRA_IMAGE_MODEL`` â†’ ``image_gen.deepinfra.model`` â†’ first live model;
when all are absent ``generate()`` errors rather than guessing.)ÚannotationsN)ÚAnyÚDictÚListÚOptional)Ú
get_secret)ÚDEFAULT_ASPECT_RATIOÚresolve_aspect_ratioÚsuccess_response)ÚStaticImageGenProviderÚerror_factoryÚimport_openaiÚload_image_gen_configÚmaterialize_imageÚprompt_required_errorÚsize_forc               ó   € V ^8„  d   QhRR/# )é   ÚreturnzOptional[list[dict[str, Any]]]© )Úformats   "ÚI/home/ubuntu/.hermes/hermes-agent/plugins/image_gen/deepinfra/__init__.pyÚ__annotate__r      s   € ÷ 7ñ 7Ð4ñ 7ó    c                 ó~   €  ^ RI Hp  T ! R4      #   \         d"   p\        P	                  RT4        Rp?R# Rp?ii ; i)z=Fetch ``image-gen``-tagged models from the DeepInfra catalog.)Ú_fetch_deepinfra_models_by_tagz0Cannot import _fetch_deepinfra_models_by_tag: %sNz	image-gen)Úhermes_cli.modelsr   Ú	ExceptionÚloggerÚdebug)r   Úexcs     r   Ú_live_modelsr!      s;   € ðÝDñ *¨+Ó6Ð6øô ô Ü�‰ÐGÈÔMÝûðús   ‚ �<›7·<c               ó    € V ^8„  d   QhRRRR/# )r   Úitemúdict[str, Any]r   r   )r   s   "r   r   r       s   € ÷ ñ ˜nð °ñ r   c           	     ó  € V P                  RR4      pV P                  R4      p\        V\        4      '       d   TM/ pRVRVP                  R^4      R,          RVP                  RR4      /pVP                  R4      p\        V\        4      '       d/   VP                  R	4      e    R
\	        VR	,          4      R R2VR&   R F"  pVP                  V4      f   K  W%,          W5&   K$  	  V#   \
        \        3 d     L=i ; i)zPicker row for a catalog item.ÚidÚ ÚmetadataÚdisplayÚ/Ú	strengthsÚdescriptionÚpricingÚper_image_unitÚ$z.4fz/imageÚpriceéÿÿÿÿ)Údefault_widthÚdefault_heightÚdefault_iterations)ÚgetÚ
isinstanceÚdictÚsplitÚfloatÚ	TypeErrorÚ
ValueError)r#   Úmidr(   Úrowr-   Úkeys   &     r   Ú_format_catalog_rowr?       sú   € à
�(‰(�4˜Ó
€CØ�x‰x˜
Ó#€HÜ% h´×5Ò5‰x¸2€Hàˆc�9˜cŸi™i¨¨QÓ/°Õ3°[À(Ç,Á,È}Ð^`ÓBað€Cð �l‰l˜9Ó%€GÜ�'œ4× Ò  W§[¡[Ð1AÓ%BÒ%Nð	Øœu WÐ-=Õ%>Ó?ÀÐDÀFÐKˆC�‰Ló IˆØ�<‰<˜ÓÔ(Ø•}ˆC‹Hñ Ið €Jøô œ:Ð&ô 	Ùð	ús   Â(C, Ã,D Ã?D c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úcatalogúlist[dict[str, Any]]Úcfgr$   r   úOptional[str]r   )r   s   "r   r   r   4   s"   € ÷ 	?ñ 	?Ð0ð 	?°~ð 	?È-ñ 	?r   c                óÄ  € \         P                  P                  RR4      P                  4       pV'       d   V# \	        V\
        4      '       d   VP                  R4      MRp\	        V\        4      '       d'   VP                  4       '       d   VP                  4       # V '       d   V ^ ,          P                  R4      MRp\	        V\        4      '       d   V'       d   V# R# )zWenv > config > first live result, else None (``cfg`` = loaded ``image_gen.deepinfra``).ÚDEEPINFRA_IMAGE_MODELr'   ÚmodelNr&   )ÚosÚenvironr5   Ústripr6   r7   Ústr)rA   rC   Úenv_overrideÚ	cfg_modelÚfirsts   &&   r   Ú_resolve_modelrO   4   sš   € ä—:‘:—>‘>Ð"9¸2Ó>×DÑDÓF€LßØÐÜ$.¨s´D×$9Ò$9�—‘˜Ô ¸t€IÜ�)œS×!Ò! i§o¡o×&7Ò&7Ø�‰Ó Ð ß$+ˆG�A�J�N‰N˜4Ô °€EÜ˜u¤c×*Ò*¯uˆ5Ð>¸$Ð>r   c            	      ó€   € ] tR t^@tRtRtRt]! RRRRRRR	7      tR
 R lt	R R lt
R R ltR R lt]3R R lltRtR# )ÚDeepInfraImageGenProviderz[DeepInfra ``images.generations`` backend; catalog discovered live by the ``image-gen`` tag.Ú	deepinfraÚ	DeepInfraÚpaidu=   FLUX, Qwen-Image, â€¦ â€” live catalog from api.deepinfra.comÚDEEPINFRA_API_KEYzDeepInfra API keyz#https://deepinfra.com/dash/api_keys)ÚnameÚbadgeÚtagr>   ÚpromptÚurlc               ó   € V ^8„  d   QhRR/# )r   r   Úboolr   )r   s   "r   r   Ú&DeepInfraImageGenProvider.__annotate__J   s   € ÷ Iñ I˜dñ Ir   c                	ó\   € \        \        R R4      ;'       g    RP                  4       4      # )rU   r'   )r\   r   rJ   ©Úselfs   &r   Úis_availableÚ&DeepInfraImageGenProvider.is_availableJ   s&   € Ü”ZÐ 3°RÓ8×>Ð>¸B×EÑEÓGÓHÐHr   c               ó   € V ^8„  d   QhRR/# )r   r   rB   r   )r   s   "r   r   r]   M   s   € ÷ Lñ LÐ1ñ Lr   c                	óf   € \        4       ;'       g    .  Uu. uF  p\        V4      NK  	  up# u upi )N)r!   r?   )r`   r#   s   & r   Úlist_modelsÚ%DeepInfraImageGenProvider.list_modelsM   s/   € Ü6B³n×6JÐ6JÈÐ6JÓKÑ6J¨dÔ# DÖ)Ñ6JÑKÐKùÒKs   —.c               ó   € V ^8„  d   QhRR/# )r   r   rD   r   )r   s   "r   r   r]   P   s   € ÷ 3ñ 3˜}ñ 3r   c                	óf   € V P                  4       pV'       d   V^ ,          P                  R4      # R# )é    r&   N)re   r5   )r`   Úrowss   & r   Údefault_modelÚ'DeepInfraImageGenProvider.default_modelP   s*   € Ø×ÑÓ!ˆß$(ˆt�A�w�{‰{˜4Ó Ð2¨dÐ2r   c               ó   € V ^8„  d   QhRR/# )r   r   r$   r   )r   s   "r   r   r]   T   s   € ÷ Cñ C˜nñ Cr   c                ó   € RR.R^ /# )z>DeepInfra's OpenAI-compatible generation surface is text-only.Ú
modalitiesÚtextÚmax_reference_imagesr   r_   s   &r   ÚcapabilitiesÚ&DeepInfraImageGenProvider.capabilitiesT   s   € à˜v˜hÐ(>ÀÐBÐBr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rY   rK   Úaspect_ratioÚkwargsr   r   r$   r   )r   s   "r   r   r]   X   s*   € ÷ >"ñ >"˜sð >"°#ð >"ÐX[ð >"Ð`nñ >"r   c                	óh  € T;'       g    R P                  4       p\        V4      p\        RV4      pVP                  R4      '       g   VP                  R4      '       d   V! RRVR7      # V'       g   \	        RV4      # \        RR 4      ;'       g    R P                  4       pV'       g
   V! RR	4      # \        R4      p\        \        4       ;'       g    . V4      pV'       g   V! R
RVR7      # \        V4      p	^ RI
Hp
 \        RV4      w  r¼V'       d   V# \        RWHVR7      pVP                  Wj! V4      R7      p VP                  P                  W�V	^R7      p \'        TRR4      p\)        T4      '       d   T! 4        \'        TRR4      ;'       g    . pT'       g
   T! RR4      # T^ ,          p\+        \'        TRR4      \'        TRR4      RTP-                  R^4      R%,          P/                  RR4       2R RY�TR! R"7	      w  ppT'       d   T# \1        TY�TRR#T	/R$7      #   \          dT   p\"        P%                  RRR7       T! RT 2R4      u Rp?\'        TRR4      p\)        T4      '       d	   T! 4        # # Rp?ii ; i  \'        TRR4      p\)        T4      '       d	   T! 4        i i ; i)&r'   rR   Ú	image_urlÚreference_image_urlszuDeepInfra image generation is text-to-image only in this backend; image_url and reference_image_urls are unsupported.Úmodality_unsupported)rY   rU   u€   DEEPINFRA_API_KEY not set. Run `hermes tools` â†’ Image Generation â†’ DeepInfra to configure, or `hermes setup` to add the key.Úauth_requiredzÉNo DeepInfra image-gen model available. Pin one in config.yaml under image_gen.deepinfra.model, set DEEPINFRA_IMAGE_MODEL, or check connectivity to api.deepinfra.com so the live catalog can be fetched.Úno_model_available)Údeepinfra_base_url)rG   rY   )Úapi_keyÚbase_url)rG   rY   ÚsizeÚnz!DeepInfra image generation failedT)Úexc_infoz#DeepInfra image generation failed: Ú	api_errorNÚcloseÚdataz DeepInfra returned no image dataÚempty_responseÚb64_jsonrZ   Ú
deepinfra_r*   Ú:Ú_rS   c                ó.   € \         P                  R V 4      # )z:DeepInfra: caching delivery URL failed (%s); returning URL)r   r   )r    s   &r   Ú<lambda>Ú4DeepInfraImageGenProvider.generate.<locals>.<lambda>�   s   € ¤F§L¡LØLÈcô%Sr   )ÚprefixÚlabelÚproviderrG   rY   ÚaspectÚon_url_failr€   )ÚimagerG   rY   ru   r�   Úextrar1   )rJ   r	   r   r5   r   r   r   rO   r!   r   r   r}   r   ÚOpenAIÚimagesÚgenerater   r   r   ÚgetattrÚcallabler   r8   Úreplacer
   )r`   rY   ru   rv   r‘   Úfailr~   Údi_cfgÚmodel_idr€   r}   ÚopenaiÚerrÚclientÚresponser    r„   r…   rN   Ú	image_refs   &&&,                r   r—   Ú"DeepInfraImageGenProvider.generateX   s°  € Ø—,�,˜B×%Ñ%Ó'ˆÜ% lÓ3ˆÜ˜[¨&Ó1ˆØ�:‰:�k×"Ò" f§j¡jÐ1G×&HÒ&HÙðOà&¨vô7ð 7÷ Ü(¨°fÓ=Ð=ÜÐ1°2Ó6×<Ð<¸"×CÑCÓEˆßÙð"ð  ó	!ð !ô
 ' {Ó3ˆÜ!¤,£.×"6Ð"6°B¸Ó?ˆßÙðHð %¨Vô5ð 5ô ˜ÓˆÝ8ô $ K°Ó8‰ˆßØˆJÜ˜[¨&ÈÔPˆØ—‘ wÐ9KÈFÓ9S�ÓTˆð	Ø—}‘}×-Ñ-°HÐRVÐZ[Ð-Ó\‰Hô
 ˜F G¨TÓ2ˆEÜ˜�ŠÙ”ä�x ¨Ó.×4Ð4°"ˆßÙÐ:Ð<LÓMÐMØ�Q•ˆô +Ü�E˜: tÓ,¬g°e¸UÀDÓ.IØ §¡¨s°AÓ 6°rÕ :× BÑ BÀ3ÈÓ LÐMÐNÐVaØ ¨ÈñSô	T‰ˆ	�3÷ ØˆJÜØ 8ÈÐZeØ˜4�.ô"ð 	"øô- ô 	RÜ�L‰LÐ<ÀtˆLÔLÙÐ=¸c¸UÐCÀ[ÓQÔQä˜F G¨TÓ2ˆEÜ˜�ŠÙ•ð ûð	Rûô ˜F G¨TÓ2ˆEÜ˜�ŠÙ•ð ús0   Å H( È(JÈ3"JÉJÉJ	 ÊJÊJ	 Ê	(J1r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úprovider_idr�   r7   Úsetupra   re   rk   rr   r   r—   Ú__static_attributes__r   r   r   rQ   rQ   @   sQ   † Ùeà€KØ€EÙØ Ð,kØÐ(;ÐAfô€Eõ
IõLõ3õCð 9M÷ >"ó >"r   rQ   c               ó   € V ^8„  d   QhRR/# )r   r   ÚNoner   )r   s   "r   r   r   ™   s   € ÷ Añ A�Tñ Ar   c                ó8   € V P                  \        4       4       R# )uL   Plugin entry point â€” wire ``DeepInfraImageGenProvider`` into the registry.N)Úregister_image_gen_providerrQ   )Úctxs   &r   Úregisterr±   ™   s   € à×#Ñ#Ô$=Ó$?Ö@r   ) r¨   Ú
__future__r   ÚloggingrH   Útypingr   r   r   r   Úagent.secret_scoper   Úagent.image_gen_providerr   r	   r
   Úplugins.image_gen._commonr   r   r   r   r   r   r   Ú	getLoggerr¤   r   r!   r?   rO   rQ   r±   r   r   r   Ú<module>r¹      sk   ðñCõ #ã Û 	ß ,Ó ,å )ß aÑ a÷%÷ %ñ %ð 
×	Ò	˜8Ó	$€õ7õõ(	?ôV"Ð 6ô V"÷rAr   