+
    lHàjÕ  ã                   óz   € R t ^RIHtHt ]! 4       t]P
                  tR R lt]! R4      R R l4       tR R ltR	# )
a]  Image-generation JSON-RPC handler (ws twin of the image_generate tool) for UI surfaces
(avatar pickers, artifact panes). The result is a data URL: a remote desktop can't read a
gateway file path and hosted URLs are often CORS-opaque to a renderer canvas. Bodies are
rebound onto server.py's globals (method_ctx.bind_module) and reference them bare.
)ÚHandlerRegistryÚbind_modulec                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚrefÚcap)ÚstrÚint)Úformats   "Ú?/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_images.pyÚ__annotate__r      s   € ÷ &ñ &œCð &¤cñ &ó    c           	     ó¦  € ^ RI p^ RIp^ RIp V P                  R4      '       Edr   ^ RIHpHp V! V 4      '       g   R# V! ^<RR7      ;_uu_ 4       pVP                  RV RR/R7      ;_uu_ 4       pVP                  4        VP                  P                  R	4      '       d5   \        VP                  R	,          4      V8”  d    RRR4       RRR4       R# . ^ r©VP                  4        F?  pV
\        V4      ,          p
W¡8”  d    RRR4       RRR4       R# V	P                  V4       KA  	  R
P                  V	4      pVP                  P                  R4      ;'       g    RP!                  R^4      ^ ,          P#                  4       pRRR4       RRR4       M�VP$                  P'                  V 4      '       d{   VP$                  P)                  V 4      V8”  d   R# \+        V R4      ;_uu_ 4       pVP-                  V^,           4      pRRR4       VP/                  V 4      ^ ,          ;'       g    RpMR# \        X4      V8”  d   R# XP                  R4      '       d   TMRpRV RVP1                  V4      P3                  R4       2#   + '       g   i     EL
; i  + '       g   i     Lw; i  + '       g   i     L¯; i  \4         d     R# i ; i)z\Fetch a URL or read a local path into a data URL; None when missing, over *cap*, or failing.N)Úcreate_ssrf_safe_clientÚis_safe_urlT)ÚtimeoutÚfollow_redirectsÚGETz
User-Agentzhermes-agent)Úheaderszcontent-lengthr   zcontent-typez	image/pngÚ;Úrbzimage/zdata:z;base64,Úascii)zhttp://zhttps://)Úbase64Ú	mimetypesÚosÚ
startswithÚtools.url_safetyr   r   ÚstreamÚraise_for_statusr   Úgetr	   Ú
iter_bytesÚlenÚappendÚjoinÚsplitÚstripÚpathÚisfileÚgetsizeÚopenÚreadÚ
guess_typeÚ	b64encodeÚdecodeÚ	Exception)r   r   r   r   r   r   r   ÚclientÚrespÚchunksÚtotalÚchunkÚdataÚmimeÚfhs   &&             r   Ú_image_to_data_urlr7      s@  € ãÛÛð!Ø�>‰>Ð1×2Ó2÷ NÙ˜s×#Ò#ÙÙ(°Àd×KÕKÈvØ—M‘M %¨°|À^Ð6T�M×UÔUÐY]Ø×%Ñ%Ô'Ø—<‘<×#Ñ#Ð$4×5Ò5¼#¸d¿l¹lÐK[Õ>\Ó:]Ð`cÔ:cØ÷ V÷ LÑKð
 !# A˜Ø!Ÿ_™_Ö.�EØœS ›ZÕ'�EØ”{Ø#÷ V÷ LÑKð —M‘M %Ö(ñ	 /ð
 —x‘x Ó'�ØŸ™×(Ñ(¨Ó8×GÐG¸K×NÑNÈsÐTUÓVÐWXÕY×_Ñ_Óa�÷ V÷ LÐKð �W‰W�^‰^˜C× Ò Ø�w‰w�‰˜sÓ# cÔ)ÙÜ�c˜4—” BØ—w‘w˜s Q�wÓ'�÷ !à×'Ñ'¨Ó,¨QÕ/×>Ð>°;‰DáÜˆt‹9�sŒ?ÙØ—‘ x×0Ò0‰t°kˆØ�t�f˜H V×%5Ñ%5°dÓ%;×%BÑ%BÀ7Ó%KÐ$LÐMÐM÷/ V×UÐUú÷ L×Kú÷  !—ûô ô Úðús®   Ž-K ¾K ÁJÁ/AJ	ÃJÃK Ã/J	ÄJÄK ÄAJ	Å(J	ÆJÆ)K Æ8 K ÇK Ç.J.È&K È.K È4K ÉK É)K ÊJÊ	JÊJ+	Ê&K Ê.J>	Ê9K ËKËKzimage.generatec                ó0   € V ^8„  d   QhR\         R\         /# )r   ÚparamsÚreturn)Údict)r
   s   "r   r   r   7   s   € ÷ &Hñ &H”4ð &HœDñ &Hr   c                ó„  €  ^ RI Hp \        V! 4       4      p\	        VP                  RR4      4      '       d   \        V RV/4      # V'       g   \        V RRRRRR/4      # \        VP                  R4      ;'       g    R	4      P                  4       pV'       g   \        V R
R4      # \        VP                  R4      ;'       g    R4      P                  4       P                  4       p \        \        VP                  RR4      ;'       g    R4      R4      p ^ RI Hp \         P#                  V! RVRV/4      4      pTP                  R4      '       g5   \        T RRRRR\        TP                  R4      ;'       g    R4      /4      # \        TP                  R4      ;'       g    R	4      p
T
'       d   \%        Y¦4      MRp\        T RRRRRT
/T'       d
   RT/C4      # / C4      #   \         d    Rp ELßi ; i  \        \        3 d    Rp Løi ; i  \         d!   p	\        T R\        T	4      4      u Rp	?	# Rp	?	ii ; i)uf  Params: ``prompt`` (required unless ``probe``), ``aspect_ratio``
(landscape|square|portrait), ``probe`` (availability only), ``max_bytes`` (cap
on the data URL, default 8MB, max 16MB). Result: ``{available, success, image,
image_data, error}`` â€” ``image_data`` is omitted when the download fails, so
callers fall back to ``image`` (the backend's URL/path).)Ú#check_image_generation_requirementsFÚprobeÚ	availableÚsuccessÚerrorzJNo image generation backend configured (run `hermes tools` to enable one).ÚpromptÚ iç  zprompt requiredÚaspect_ratioÚsquareÚ	max_bytesi z i $ô )Ú_handle_image_generateiÏ  NTzgeneration failedÚimageÚ
image_data)Útools.image_generation_toolr=   Úboolr.   Úis_truthy_valuer   Ú_okr   r%   Ú_errÚlowerÚminr	   Ú	TypeErrorÚ
ValueErrorrG   ÚjsonÚloadsr7   )Úridr9   r=   r?   rB   Úaspectr   rG   ÚresultÚeÚ	image_refÚdata_urls   &&          r   Ú_r[   6   s5  € ðÝSÜÑ<Ó>Ó?ˆ	ô �v—z‘z '¨5Ó1×2Ò2Ü�3˜ iÐ0Ó1Ð1ßÜ�3Ø˜ 	¨5ØÐaðcó dð 	dô �—‘˜HÓ%×+Ð+¨Ó,×2Ñ2Ó4€FßÜ�C˜Ð0Ó1Ð1Ü�—‘˜NÓ+×7Ð7¨xÓ8×>Ñ>Ó@×FÑFÓH€FðÜ”#�f—j‘j ¨iÓ8×EÐE¸IÓFÈ
ÓSˆð'õ 	GÜ—‘Ñ2°H¸fÀnÐV\Ð3]Ó^Ó_ˆð �:‰:�i× Ò Ü�3˜ d¨I°uØ ¤# f§j¡j°Ó&9×&PÐ&PÐ=PÓ"QðSó Tð 	Tä�F—J‘J˜wÓ'×-Ð-¨2Ó.€Iß5>Ô! )Ô1ÀD€HÜˆs�[ $¨	°4¸À)ð Gß4<˜ xÐ0ðGó Hð HØBDðGó Hð Høô9 ô Ø‹	ðûô ”zÐ"ô ØŠðûô ô 'Ü�C˜œs 1›vÓ&Õ&ûð'úsG   ‚G' Ã)"G; ÄG; Ä%H Ç'G8Ç7G8Ç;HÈHÈH?ÈH:È4H?È:H?c                ó   € V ^8„  d   QhRR/# )r   r:   N© )r
   s   "r   r   r   `   s   € ÷ 0ñ 0˜ñ 0r   c                 ó2   € \        \        4       V RR7       R# )r[   )ÚskipN)r[   )r   Úglobals)Úservers   &r   Úregisterrb   `   s   € Ü”“	˜6¨×/r   N)	Ú__doc__Ú
method_ctxr   r   Ú	_registryÚmethodr7   r[   rb   r]   r   r   Ú<module>rg      sJ   ðñ÷ 5áÓ€	Ø	×	Ñ	€õ&ñR ÐÓô&Hó ð&H÷R0r   