Ë
    âß²j  ã                  ó  — U d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZmZmZ  ej6                  e«      ZdZd	Zd
Z dZ!dd„Z"dd„Z#ddddddœiZ$de%d<   dZ&ddd„Z' G d„ de«      Z(dd„Z)y)uG  Meta Model API (``muse-image``): OpenAI-compatible (https://api.meta.ai/v1), so the OpenAI SDK
is pointed at Meta's base URL with ``META_MODEL_API_KEY``. Output is base64 WebP â†’ image cache.
Selection: ``model`` kwarg â†’ ``META_IMAGE_MODEL`` â†’ ``image_gen.meta-ai.model`` â†’ ``image_gen.model``
â†’ :data:`DEFAULT_MODEL`.é    )ÚannotationsN)ÚAnyÚDictÚListÚOptionalÚTuple)Ú
get_secret)ÚDEFAULT_ASPECT_RATIOÚresolve_aspect_ratioÚsave_b64_imageÚsave_url_imageÚsuccess_response)ÚStaticImageGenProviderÚerror_factoryÚimport_openaiÚopenai_importableÚprompt_required_errorÚresolve_static_modelÚsize_forzhttps://api.meta.ai/v1)ÚMODEL_API_KEYÚMETA_API_KEYÚMETA_MODEL_API_KEYr   ÚMETA_BASE_URLc                 óL   — t        d„ t        t        t        «      D «       d«      S )z0First non-empty auth env var, in priority order.c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­w©N© )Ú.0Úvals     úG/home/ubuntu/.hermes/hermes-agent/plugins/image_gen/meta-ai/__init__.pyú	<genexpr>z#_resolve_api_key.<locals>.<genexpr>   s   è ø€ ÒE˜Â”ÑEùs   ‚ŠN)ÚnextÚmapr	   ÚAPI_KEY_ENVSr   ó    r    Ú_resolve_api_keyr&      s   € äÑE¤¤J´Ó =ÔEÀtÓLÐLr%   c                 ó|   — t         j                  j                  t        «      xs dj	                  «       xs t
        S )NÚ )ÚosÚenvironÚgetÚBASE_URL_ENVÚstripÚDEFAULT_BASE_URLr   r%   r    Ú_resolve_base_urlr/   "   s)   € Ü�J‰J�N‰Nœ<Ó(Ò.¨B×5Ñ5Ó7ÒKÔ;KÐKr%   zmuse-image-1.0zMuse Image 1.0z~10szMeta Model API image generationz$0.01/image)ÚdisplayÚspeedÚ	strengthsÚpricezDict[str, Dict[str, Any]]Ú_MODELSc                ó2   — t        t        t        dd| ¬«      S )NÚMETA_IMAGE_MODELúmeta-ai)Úenv_varÚ
config_keyÚexplicit)r   r4   ÚDEFAULT_MODEL)Úcaller_models    r    Ú_resolve_modelr=   2   s   € ÜÜ”Ð(:ÀyÐ[gôð r%   c                  óv   — e Zd ZdZdZdZeZeZ	 e
dddedd¬«      Zdd	„Zdd
„Zefdddœ	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚMetaImageGenProviderz8Meta Model API ``images.generate`` backend (muse-image).r7   zMeta Model APIÚpaidz+Muse Image via Meta Model API (api.meta.ai)z"Meta Model API key (LLM|... token)zhttps://api.meta.ai)ÚnameÚbadgeÚtagÚkeyÚpromptÚurlc                ó@   — t        t        «       «      xr
 t        «       S r   )Úboolr&   r   ©Úselfs    r    Úis_availablez!MetaImageGenProvider.is_availableC   s   € ÜÔ$Ó&Ó'Ò?Ô,=Ó,?Ð?r%   c                ó   — dgddœS )NÚtextr   )Ú
modalitiesÚmax_reference_imagesr   rI   s    r    Úcapabilitiesz!MetaImageGenProvider.capabilitiesF   s   € à%˜hÀÑBÐBr%   N)Ú	image_urlÚreference_image_urlsc          	     óà  — |xs dj                  «       }t        |«      }|st        d|«      S t        «       }|s t	        d|«      t
        › d�d«      S t        d|«      \  }}	|	r|	S t        |j                  d«      «      \  }
}t        |«      }t	        d||
|¬«      }|j                  |t        «       ¬«      }	 |j                  j                  |
||d¬	«      }	 |j"                  d   }t+        |dd «      }t+        |dd «      }	 |rt-        t/        |dd¬«      «      }n"|rt-        t1        |d¬«      «      }n	 |dd«      S d|i}t+        |dd «      r|j2                  |d<   t5        ||
||dd|¬«      S # t        $ r-}t        j!                  d
d¬«        |d|› �d«      cY d }~S d }~ww xY w# t$        t&        t(        f$ r  |dd«      cY S w xY w# t        $ r} |d|› �d«      cY d }~S d }~ww xY w)Nr(   r7   zP not set. Run `hermes tools` -> Image Generation -> Meta Model API to configure.Úauth_requiredÚmodel)rU   rE   )Úapi_keyÚbase_urlé   )rU   rE   ÚsizeÚnzMeta image generation failedT)Úexc_infozMeta image generation failed: Ú	api_errorr   z%Meta response contained no image dataÚempty_responseÚb64_jsonrF   ÚmetaÚwebp)ÚprefixÚ	extension)ra   z0Meta response contained neither b64_json nor URLzFailed to save Meta image: Úio_errorrY   Úrevised_promptrM   )ÚimagerU   rE   Úaspect_ratioÚproviderÚmodalityÚextra)r-   r   r   r&   r   ÚAPI_KEY_ENVr   r=   r+   r   ÚOpenAIr/   ÚimagesÚgenerateÚ	ExceptionÚloggerÚdebugÚdataÚAttributeErrorÚ
IndexErrorÚ	TypeErrorÚgetattrÚstrr   r   rd   r   )rJ   rE   rf   rQ   rR   ÚkwargsÚaspectrV   ÚopenaiÚerrÚmodel_idÚ_metarY   ÚfailÚclientÚresponseÚexcÚfirstÚb64rF   Ú	image_refri   s                         r    rm   zMetaImageGenProvider.generateJ   s+  € ð
 ’,˜B×%Ñ%Ó'ˆÜ% lÓ3ˆÙÜ(¨°FÓ;Ð;Ü"Ó$ˆÙØ3”= ¨FÓ3Ü�-ð  =ð =àó!ð !ô
 $ I¨vÓ6‰ˆ�ÙØˆJÜ(¨¯©°GÓ)<Ó=‰ˆ�%Ü˜ÓˆÜ˜Y¨°hÀvÔNˆØ—‘ wÔ9JÓ9L�ÓMˆð	MØ—}‘}×-Ñ-°HÀVÐRVÐZ[Ð-Ó\ˆHð
	SØ—M‘M !Ñ$ˆEô �e˜Z¨Ó.ˆÜ�e˜U DÓ)ˆð	IÙÜ¤¨s¸6ÈVÔ TÓU‘	ÙÜ¤¨s¸6Ô BÓC‘	áÐNÐP`ÓaÐað "(¨ ˆÜ�5Ð*¨DÔ1Ø&+×&:Ñ&:ˆEÐ"Ñ#ÜØ 8°FÈÐZcØ 5ô*ð 	*øô/ ò 	MÜ�L‰LÐ7À$ˆLÔGÙÐ8¸¸Ð>ÀÓLÕLûð	Mûô ¤
¬IÐ6ò 	SÙÐ?ÐAQÓRÒRð	Sûô ò 	IÙÐ5°c°UÐ;¸ZÓHÕHûð	IúsN   Â:E2 ÃF+ Ä;G Å2	F(Å;"F#ÆF(Æ#F(Æ+GÇ
GÇ	G-ÇG(Ç"G-Ç(G-)ÚreturnrH   )r„   úDict[str, Any])rE   rv   rf   rv   rQ   úOptional[str]rR   zOptional[List[str]]rw   r   r„   r…   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úprovider_idÚlabelr4   Úmodelsr;   Údefault_model_idÚdictrj   ÚsetuprK   rP   r
   rm   r   r%   r    r?   r?   8   sŒ   „ ÙBà€KØ€EØ€FØ$ÐÙØ VÐ1^ØÐ DÐJ_ôa€Eó@óCð
 0Dð2*à#'ÐUYñ2*Øð2*Ø),ð2*à ð2*à?Rð2*ð ð2*ð 
ô	2*r%   r?   c                ó6   — | j                  t        «       «       y)zFPlugin entry point -- wire ``MetaImageGenProvider`` into the registry.N)Úregister_image_gen_providerr?   )Úctxs    r    Úregisterr”      s   € à×#Ñ#Ô$8Ó$:Õ;r%   )r„   r†   )r„   rv   r   )r<   r†   r„   zTuple[str, Dict[str, Any]])r„   ÚNone)*rŠ   Ú
__future__r   Úloggingr)   Útypingr   r   r   r   r   Úagent.secret_scoper	   Úagent.image_gen_providerr
   r   r   r   r   Úplugins.image_gen._commonr   r   r   r   r   r   r   Ú	getLoggerr‡   ro   r.   r$   rj   r,   r&   r/   r4   Ú__annotations__r;   r=   r?   r”   r   r%   r    ú<module>rž      s·   ðòõ
 #ã Û 	ß 3Õ 3å )÷bõ b÷$÷ $ñ $ð 
ˆ×	Ñ	˜8Ó	$€à+Ð ð G€Ø"€Ø€óMó
Lð Ø#ØØ6Øñ	ð&€Ð	"ó ð !€ôôD*Ð1ô D*ôN<r%   