Ë
    âß²joA  ã                  ó  — U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZ ddlZddlmZmZmZ ddlmZmZ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!  ejD                  e#«      Z$d	d
ddœddddœddddœdœZ%de&d<   dZ'dZ(da)de&d<   i Z*de&d<   dZ+dZ,dddd d!d"d#d$œZ-d%d&hZ.d%Z/d'Z0d(Z1d)Z2d*Z3d@d+„Z4dAdBd,„Z5dCd-„Z6dBd.„Z7dCd/„Z8dDd0„Z9dAdEd1„Z:dAdFd2„Z;dGd3„Z<dHd4„Z=	 	 	 	 	 	 	 	 dId5„Z> G d6„ d7e«      Z?dJd8„Z@d9d:d;d<d=d>œZAd?„ ZBy)Kuú   xAI ``grok-imagine-image`` backend: text-to-image (``/v1/images/generations``) and editing
(``/v1/images/edits``), base64 output saved to cache. Selection: ``model`` kwarg â†’
``XAI_IMAGE_MODEL`` â†’ ``image_gen.xai.model`` â†’ :data:`DEFAULT_MODEL`.é    )ÚannotationsN)ÚPath)ÚAnyÚDictÚListÚOptionalÚTuple)ÚDEFAULT_ASPECT_RATIOÚresolve_aspect_ratioÚsuccess_response)ÚStaticImageGenProviderÚcatalog_rowsÚcollect_source_imagesÚerror_factoryÚload_image_gen_configÚmaterialize_imageÚ	post_json)Úbuild_xai_storage_optionsÚhermes_xai_user_agentÚ"maybe_mark_xai_storage_notice_seenÚread_xai_imagine_storage_configÚresolve_xai_http_credentialsÚxai_storage_notice_textzGrok Imagine Imagez~5-10szFast, high-quality©ÚdisplayÚspeedÚ	strengthszGrok Imagine Image 2.0z~10-20sz?Typography/layout-aware; legible small text; strongest quality.zGrok Imagine Image (Quality)z9Higher fidelity / detail; slower than the standard model.)úgrok-imagine-imagezgrok-imagine-image-2.0úgrok-imagine-image-qualityúDict[str, Dict[str, Any]]Ú_MODELSr   r   z1Optional[Tuple[Dict[str, Dict[str, Any]], float]]Ú_LIVE_CACHEzHDict[Tuple[str, Optional[str]], Tuple[Dict[str, Dict[str, Any]], float]]Ú_LIVE_CACHE_BY_CREDENTIALg     Àr@g      $@z16:9ú1:1z9:16ú4:3ú3:4ú3:2ú2:3)Ú	landscapeÚsquareÚportraitr%   r&   r'   r(   Ú1kÚ2ké   éx   )zhttp://zhttps://zdata:)ÚfilenameÚ
expires_atÚpublic_url_expires_atÚpublic_url_errorÚstorage_errorc                óx   — t        | j                  d«      xs d«      j                  «       j                  d«      S )NÚbase_urlzhttps://api.x.ai/v1ú/)ÚstrÚgetÚstripÚrstrip)Úcredss    úC/home/ubuntu/.hermes/hermes-agent/plugins/image_gen/xai/__init__.pyÚ	_base_urlr>   B   s0   € Üˆu�y‰y˜Ó$Ò=Ð(=Ó>×DÑDÓF×MÑMÈcÓRÐRó    c                óÂ  — | €
t        «       } t        | j                  d«      xs d«      j                  «       }|st	        d«      ‚t        j                  t        | «      › d�d|› �t        «       dœt        ¬«      }|j                  «        |j                  «       }i }|j                  d	«      xs |j                  d
«      xs g D ]–  }t        |t        «      r$|j                  d«      xs |j                  d«      nd}t        |t        «      sŒJ|j                  «       sŒ[|j                  d«      xs g |j                  d«      xs g dœ||j                  «       <   Œ˜ |S )zZ``{model_id: {"input_modalities", "aliases"}}`` from the live endpoint; raises on failure.NÚapi_keyÚ zno xAI credentialsz/image-generation-modelsúBearer )ÚAuthorizationú
User-Agent)ÚheadersÚtimeoutÚmodelsÚdataÚidÚnameÚinput_modalitiesÚaliases)rL   rM   )r   r8   r9   r:   ÚRuntimeErrorÚrequestsr>   r   Ú_LIVE_TIMEOUTÚraise_for_statusÚjsonÚ
isinstanceÚdict)r<   rA   ÚresponseÚpayloadÚoutÚentryÚmodel_ids          r=   Ú_fetch_live_modelsrZ   F   s8  € à€}Ü,Ó.ˆÜ�%—)‘)˜IÓ&Ò,¨"Ó-×3Ñ3Ó5€GÙÜÐ/Ó0Ð0Ü�|‰|Ü�UÓÐ
Ð4Ð5Ø$+¨G¨9Ð"5ÔEZÓE\Ñ]Üô€Hð ×ÑÔØ�m‰m‹o€GØ%'€CØ—‘˜XÓ&ÒC¨'¯+©+°fÓ*=ÒCÀò ˆÜ;EÀeÌTÔ;R�5—9‘9˜T“?Ò7 e§i¡i°Ô&7ÐX\ˆÜ�h¤Õ$¨¯©Õ)9à$)§I¡IÐ.@Ó$AÒ$GÀRÐTY×T]ÑT]Ð^gÓThÒTnÐlnñ%ˆC�—‘Ó Ò!ðð €Jr?   c                 ód  — ddl m}   | «       €\t        �.t        j                  «       t        d   z
  t
        k  r	t        d   S t        d«      t        j                  «       fat        d   S ddlm} 	 t        «       }t        |«       ||j                  d«      «      f}t        j                  |«      }|�&t        j                  «       |d   z
  t
        k  r|d   S t        |«      }|t        j                  «       ft        |<   |S # t        $ r"}t        j                  d|«       i }Y d}~Œ¯d}~ww xY w)z.Cached live catalog (``{}`` when unreachable).r   )Úget_hermes_home_overrideNé   )Úfingerprint_secret_valueú,xAI live image model catalog unavailable: %srA   )Úhermes_constantsr\   r"   ÚtimeÚ	monotonicÚ_LIVE_CACHE_TTLÚ_fetch_live_models_or_emptyÚagent.credential_persistencer^   r   Ú	ExceptionÚloggerÚdebugr>   r9   r#   )r\   r^   r<   ÚexcÚkeyÚcachedÚlives          r=   Ú_live_modelsrm   ]   s
  € õ :áÓ!Ð)ÜÐ"¤t§~¡~Ó'7¼+Àa¹.Ñ'HÌ?Ò'ZÜ˜q‘>Ð!Ü2°4Ó8¼$¿.¹.Ó:JÐKˆÜ˜1‰~ÐåEðÜ,Ó.ˆô �UÓÑ5°e·i±iÀ	Ó6JÓKÐ
L€CÜ&×*Ñ*¨3Ó/€FØÐœdŸn™nÓ.°¸±Ñ:¼_ÒLØ�a‰yÐÜ& uÓ-€DØ&*¬D¯N©NÓ,<Ð%=Ô˜cÑ"Ø€Køô ò Ü�‰ÐCÀSÔIØ�ûðús   Á1
D Ä	D/ÄD*Ä*D/c                óŽ   — 	 | €
t        «       S t        | «      S # t        $ r"}t        j                  d|«       i cY d }~S d }~ww xY w)Nr_   )rZ   rf   rg   rh   )r<   ri   s     r=   rd   rd   x   sD   € ðØ', }Ô!Ó#ÐSÔ:LÈUÓ:SÐSøÜò Ü�‰ÐCÀSÔIØ�	ûðús   ‚ Ž
 ™	A¢?¹A¿Ac                 ó8  — t        «       } | st        t        «      S i }| D ]@  }t        j                  |«      xs |dddœ}i |¥d| |   j                  d«      xs g i¥||<   ŒB t        j	                  «       D ]   \  }}|j                  |t        |«      «       Œ" |S )z©Live ids + curated metadata (unknown live models get generic text; curated entries the live
    list omits are kept); the static table alone when the API is unreachable.rB   z-New xAI Imagine model (from live xAI catalog)r   rL   )rm   rT   r!   r9   ÚitemsÚ
setdefault)rl   ÚmergedrY   Úmetas       r=   Ú_catalogrt   €   s²   € ô ‹>€DÙÜ”G‹}ÐØ(*€FØò fˆÜ�{‰{˜8Ó$ò 
Ø¨"Ð;jñ)
ˆð f˜dÐeÐ$6¸¸X¹×8JÑ8JÐK]Ó8^Ò8dÐbdÑeˆˆxÒð	fô
 "Ÿ-™-›/ò 0‰ˆ�$Ø×Ñ˜(¤D¨£JÕ/ð0à€Mr?   c                 ó^   — t        d«      j                  d«      } t        | t        «      r| S d S )NÚxaiÚmodel)r   r9   rS   r8   )Úvalues    r=   Ú_configured_modelry   ‘   s+   € Ü! %Ó(×,Ñ,¨WÓ5€EÜ˜u¤cÔ*ˆ5Ð4°Ð4r?   c                óâ   — t        «       }| t        j                  j                  d«      t	        «       fD ]  }|sŒ||v sŒ|||   fc S  t
        |j                  t
        t        t
           «      fS )ub   caller kwarg â†’ ``XAI_IMAGE_MODEL`` â†’ config â†’ default, validated against the merged catalog.ÚXAI_IMAGE_MODEL)rt   ÚosÚenvironr9   ry   ÚDEFAULT_MODELr!   )Úcaller_modelÚcatalogÚ	candidates      r=   Ú_resolve_modelr‚   –   sh   € ä‹j€GØ"¤B§J¡J§N¡NÐ3DÓ$EÔGXÓGZÐ[ò 1ˆ	Ú˜ gÒ-Ø˜g iÑ0Ð0Ò0ð1ô ˜'Ÿ+™+¤m´W¼]Ñ5KÓLÐLÐLr?   c                óÄ   — t        «       }| xs+ t        j                  j                  d«      xs
 t	        «       }|r ||v rd||   j                  d«      xs g v r|S t
        S )zaEdit model: an explicit selection that accepts image input, else the documented quality baseline.r{   ÚimagerL   )rt   r|   r}   r9   ry   Ú_EDIT_FALLBACK_MODEL)r   r€   Úexplicits      r=   Ú_resolve_edit_modelr‡   Ÿ   s]   € ä‹j€GØÒWœrŸz™zŸ~™~Ð.?Ó@ÒWÔDUÓDW€HÙ�H Ñ'¨G¸ÀÑ8I×8MÑ8MÐN`Ó8aÒ8gÐegÑ,hØˆÜÐr?   c                 óv   — t        d«      j                  d«      } t        | t        «      r
| t        v r| S t
        S )Nrv   Ú
resolution)r   r9   rS   r8   Ú_XAI_RESOLUTIONSÚDEFAULT_RESOLUTION)Úress    r=   Ú_resolve_resolutionr�   ¨   s4   € Ü
 Ó
&×
*Ñ
*¨<Ó
8€CÜ˜S¤#Ô&¨3Ô2BÑ+Bˆ3ÐZÔHZÐZr?   c                ó  — | j                  «       } | j                  «       j                  t        «      r| ddœS ddl}ddlm}  || «       t        t        j                  j                  | «      d«      5 }|j                  «       }ddd«       t        j                  j                  | «      d   j                  d«      xs d	j                  «       }|d
k(  rd}d|› d|j                  «      j                  d«      › �ddœS # 1 sw Y   Œ|xY w)z]Edit ``image`` field: URL / data URI pass through; local paths are inlined as ``data:`` URIs.Ú	image_url)ÚurlÚtyper   N)Úraise_if_read_blockedÚrbr]   ú.ÚpngÚjpgÚjpegzdata:image/z;base64,zutf-8)r:   ÚlowerÚ
startswithÚ_REMOTE_PREFIXESÚbase64Úagent.file_safetyr’   Úopenr|   ÚpathÚ
expanduserÚreadÚsplitextÚlstripÚ	b64encodeÚdecode)Úsourcer›   r’   ÚfhÚrawÚexts         r=   Ú_xai_image_fieldr©   ­   sä   € à�\‰\‹^€FØ‡|�|ƒ~× Ñ Ô!1Ô2Ø {Ñ3Ð3Ûå7á˜&Ô!Ü	Œb�g‰g× Ñ  Ó(¨$Ó	/ð °2Ø�g‰g‹iˆ÷ä�7‰7×Ñ˜FÓ# AÑ&×-Ñ-¨cÓ2Ò;°e×
BÑ
BÓ
D€CØ
ˆe‚|ØˆØ    X¨f×.>Ñ.>¸sÓ.C×.JÑ.JÈ7Ó.SÐ-TÐUÐ_jÑkÐk÷ð ús   Á4D Ä D	c                óh  — t        | «      t        kD  r |dt        › d�d«      S t        | «      D ]�  \  }}|j                  «       j	                  t
        «      s't        |«      j                  «       j                  «       rŒQ|dk(  xr |xr |j                  «       |k(  }|rdnd} ||› d�d«      c S  y	)
z\Edit-request guard: at most 3 sources, each a remote URL/data URI or an existing local file.z#xAI image editing supports at most z source imagesÚtoo_many_referencesr   r�   Úreference_image_urlszc must be a public HTTPS URL or data URI (e.g. the `image`/`public_url` from a prior Imagine result)Úinvalid_image_urlN)
ÚlenÚ_MAX_SOURCE_IMAGESÚ	enumerater˜   r™   rš   r   rŸ   Úis_filer:   )Úsource_imagesr�   ÚfailÚindexr¥   Ú
is_primaryÚfields          r=   Ú_check_source_imagesr·   ¿   sÉ   € ô ˆ=ÓÔ.Ò.ÙØ1Ô2DÐ1EÀ^ÐTÐVkó
ð 	
ô # =Ó1ò !‰ˆˆvØ�<‰<‹>×$Ñ$Ô%5Ô6¼$¸v»,×:QÑ:QÓ:S×:[Ñ:[Ô:]ØØ˜a‘ZÒM IÒM°)·/±/Ó2CÀvÑ2Mˆ
Ù)‘Ð/EˆÙØˆgð Jð Jàó!ò 	!ð!ð r?   c                  ój   — e Zd ZdZdZdZdd„Zdd„Zdd„Zdd„Z	dd„Z
efd	d	d
œ	 	 	 	 	 	 	 	 	 	 	 dd„Zy	)ÚXAIImageGenProviderz#xAI ``grok-imagine-image`` backend.rv   z
xAI (Grok)c                óF   — t        t        «       j                  d«      «      S )NrA   )Úboolr   r9   ©Úselfs    r=   Úis_availablez XAIImageGenProvider.is_availableÙ   s   € ÜÔ0Ó2×6Ñ6°yÓAÓBÐBr?   c                ó*   — t        t        «       d«      S )Nr   )r   rt   r¼   s    r=   Úlist_modelszXAIImageGenProvider.list_modelsÜ   s   € ÜœH›JÐ(IÓJÐJr?   c                ó<   — t        t        t        «       «      d «      S ©N)ÚnextÚiterrt   r¼   s    r=   Údefault_modelz!XAIImageGenProvider.default_modelß   s   € ä”Dœ›Ó$ dÓ+Ð+r?   c                ó@   — t        d«      }d}|r|d|› �z  }dd|g ddœS )NÚ	image_genzVgrok-imagine-image - text-to-image & image editing; uses xAI Grok OAuth or XAI_API_KEYz. zxAI Grok Imagine (image)ÚpaidÚxai_grok)rK   ÚbadgeÚtagÚenv_varsÚ
post_setup)r   )r½   Ústorage_noticerË   s      r=   Úget_setup_schemaz$XAIImageGenProvider.get_setup_schemaã   s=   € ä0°Ó=ˆØfˆÙØ�R˜Ð'Ð(Ñ(ˆCà.¸ÈÐY[Ø$ñ
ð 	
r?   c                ó   — ddgdt         dœS )NÚtextr„   é   )Ú
modalitiesÚmax_reference_imagesÚmax_source_images)r¯   r¼   s    r=   Úcapabilitiesz XAIImageGenProvider.capabilitiesî   s   € ð " 7Ð+ÀQÜ!3ñ
ð 	
r?   N)r�   r¬   c               óD  — t        «       }t        |j                  d«      xs d«      j                  «       }t        |j                  d«      xs d«      j                  «       xs d}|s t	        ||«      dd«      S t        |j                  d«      «      \  }	}
t        |«      }t        «       }t        ||«      }t	        ||t        |¬«      }t        |||«      }|r|S t        |«      }d	|› �d
t        «       dœ}t        |«      }t        ddd¬«      }t        d«      }t!        d«      }|rZt#        |j                  d«      «      }		 |D �cg c]  }t%        |«      ‘Œ }}|	|dœ}t)        |«      dk(  r	|d   |d<   n||d<   |› d�}n |	|t*        j                  |d«      |dœ}|› d�}|�||d<   t	        |||	|¬«      }t-        |||t.        d¬«      \  }}|rW|j0                  dk(  r+t2        j5                  d |j6                  |j8                  «        ||j4                  |j:                  «      S |j                  d!g «      }|s	 |d"d#«      S |d   }t=        |t>        «      r|j                  d$«      nd} t=        | t>        «      r| ni } | j                  d%«      }!t=        |!t        «      r|!nd}!|!r|!}"n@tA        |j                  d&«      |j                  d'«      d(|	› �dd|	||t2        ¬)«	      \  }"}|r|S d*t        |d+   «      i}#|s||#d,<   |r||#d-<   |!r|!|#d%<   |#jC                  tD        D �$ci c]  }$|$| v sŒ|$| |$   “Œ c}$«       |j                  d.«      r|d.   |#d.<   tG        |"|	||d|rd|#¬0«      S d/|#¬0«      S c c}w # t&        $ r} |d|› �d|	¬«      cY d}~S d}~ww xY wc c}$w )1u¦   Text-to-image, or editing via ``/v1/images/edits`` (JSON body â€” xAI does not support the
        SDK's multipart ``images.edit()``) when source images are supplied.rA   rB   Úproviderrv   zSNo xAI credentials found. Configure xAI OAuth in `hermes model` or set XAI_API_KEY.Úmissing_api_keyrw   )rw   ÚpromptrC   zapplication/json)rD   zContent-TyperE   rÇ   zhermes-xai-imager•   )Úfilename_prefixÚ	extensionz)Could not load source image for editing: Úio_error)rw   Nr]   r   r„   Úimagesz/images/editsr$   )rw   rÚ   Úaspect_ratior‰   z/images/generationsÚstorage_optionsÚxAI)rF   rV   rG   ÚlabelÚhttpzxAI image gen failed (%d): %srI   zxAI returned no image dataÚempty_responseÚfile_outputÚ
public_urlÚb64_jsonr�   Úxai_)Úprefixrâ   rØ   rw   rÚ   ÚaspectÚlogÚstorage_enabledÚenabledr‰   rÎ   ÚusagerÑ   )r„   rw   rÚ   rß   rØ   ÚmodalityÚextra)$r   r8   r9   r:   r   r‚   r   r�   r   r…   r·   r»   r   r>   r   r   r   r‡   r©   rf   r®   Ú_XAI_ASPECT_RATIOSr   Ú_REQUEST_TIMEOUTÚkindrg   ÚerrorÚstatusÚmessageÚ
error_typerS   rT   r   ÚupdateÚ_FILE_OUTPUT_EXTRA_KEYSr   )%r½   rÚ   rß   r�   r¬   Úkwargsr<   rA   Úprovider_namerY   rs   rê   Úxai_resr²   Ú	edit_failÚerrÚis_editrF   r6   rà   rÎ   Ústorage_cfgr¥   Úimage_fieldsri   rV   Úendpoint_urlr³   ÚresultÚfailurerI   Úfirstrå   ræ   Ú	image_refrð   rj   s%                                        r=   ÚgeneratezXAIImageGenProvider.generateõ   sü  € ô -Ó.ˆÜ�e—i‘i 	Ó*Ò0¨bÓ1×7Ñ7Ó9ˆÜ˜EŸI™I jÓ1Ò:°UÓ;×AÑAÓCÒLÀuˆÙØ=”= °Ó=ØeØ!ó#ð #ô (¨¯
©
°7Ó(;Ó<‰ˆ�$Ü% lÓ3ˆÜ%Ó'ˆÜ-¨iÐ9MÓNˆÜ! -°Ô?SÐ\bÔcˆ	Ü" =°)¸YÓGˆÙØˆJÜ�}Ó%ˆð  ' w iÐ0ÐBTÜ/Ó1ñ
ˆô ˜UÓ#ˆÜ3ØÐ);ÀuôNˆä;¸KÓHˆÜ5°kÓBˆáÜ*¨6¯:©:°gÓ+>Ó?ˆHðpØGTÖU¸VÔ 0°Õ 8ÐU�ÐUð 19ÀFÑ&KˆGÜ�<Ó  AÒ%Ø#/°¡?�˜Ò à$0�˜Ñ!Ø&˜Z }Ð5‰Lð "¨VÔEW×E[ÑE[Ð\bÐdiÓEjØ%ñˆGð '˜ZÐ':Ð;ˆLØÐ&Ø)8ˆGÐ%Ñ&ä˜]¨F¸(È6ÔRˆÜ#Ø '°7ÔDTÐ\aôc‰ˆ�áØ�|‰|˜vÒ%Ü—‘Ð<¸g¿n¹nÈgÏoÉoÔ^Ù˜Ÿ™ w×'9Ñ'9Ó:Ð:ð �z‰z˜& "Ó%ˆÙÙÐ4Ð6FÓGÐGØ�Q‘ˆÜ2<¸UÄDÔ2I�e—i‘i Ô.ÈtˆÜ%/°¼TÔ%B‘kÈˆØ —_‘_ \Ó2ˆ
Ü#-¨j¼#Ô#>‘ZÀDˆ
ÙØ"‰Iô /Ø—	‘	˜*Ó% u§y¡y°Ó'7À$ÀxÀjÐ@QÐY^ÐinØ v°fÄ&ôJ‰NˆI�sñ Ø�
à!2´D¸ÀYÑ9OÓ4PÐ QˆÙØ")ˆE�,ÑÙØ&4ˆEÐ"Ñ#ÙØ",ˆE�,ÑØ�‰Ô7NÖe°ÐRUÐYdÒRd�c˜; sÑ+Ñ+ÒeÔfØ�:‰:�gÔØ# G™_ˆE�'‰NÜØ 8°FÈÐZ_Ù '�W¸5ôBð 	Bà-3¸5ôBð 	Bùòo  VøÜò pÙ Ð#LÈSÈEÐ!RÐT^ÐfnÔoÕoûðpüòf fs<   ÅM9 Å
M4ÅM9 Ì&	NÌ0NÍ4M9 Í9	NÎNÎNÎN)Úreturnr»   )r  zList[Dict[str, Any]]©r  úOptional[str])r  úDict[str, Any])rÚ   r8   rß   r8   r�   r
  r¬   zOptional[List[str]]rú   r   r  r  )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úprovider_idrâ   r¾   rÀ   rÅ   rÏ   rÖ   r
   r  © r?   r=   r¹   r¹   Ó   s„   „ Ù-à€KØ€EóCóKó,ó	
ó
ð 0Dð_Bà#'ÐUYñ_BØð_BØ),ð_Bà ð_Bà?Rð_Bð ð_Bð 
ô	_Br?   r¹   c                ó6   — | j                  t        «       «       y)z3Register this provider with the image gen registry.N)Úregister_image_gen_providerr¹   )Úctxs    r=   Úregisterr  W  s   € à×#Ñ#Ô$7Ó$9Õ:r?   )úagent.image_gen_providerÚImageGenProvider)r  Úerror_response)r  Únormalize_reference_images)r  Úsave_b64_image)r  Úsave_url_image)r  r  r  r  r  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_LAZYr9   ÚAttributeErrorr  Ú	importlibÚhermes_cli.plugin_compatr  ÚgetattrÚimport_module)rK   Útargetr   r  s       r=   Ú__getattr__r%  k  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<   r  r  r8   rÂ   )r<   úOptional[Dict[str, Any]]r  r    )r  r    r	  )r   r
  r  zTuple[str, Dict[str, Any]])r   r
  r  r8   )r  r8   )r¥   r8   r  zDict[str, str])r²   z	List[str]r�   r
  r³   r   r  r&  )r  r   r  ÚNone)Cr  Ú
__future__r   Úloggingr|   ra   Úpathlibr   Útypingr   r   r   r   r	   rO   Úagent.image_gen_providerr
   r   r   Úplugins.image_gen._commonr   r   r   r   r   r   r   Útools.xai_httpr   r   r   r   r   r   Ú	getLoggerr  rg   r!   Ú__annotations__r~   r…   r"   r#   rc   rP   rñ   rŠ   r‹   r¯   rò   rš   rù   r>   rZ   rm   rd   rt   ry   r‚   r‡   r�   r©   r·   r¹   r  r  r%  r  r?   r=   ú<module>r1     s¥  ðòNõ #ã Û 	Û Ý ß 3Õ 3ã ç aÑ a÷9÷ 9ñ 9÷\÷ \ð 
ˆ×	Ñ	˜8Ó	$€ð (°(ÐI]ñð ,°iØVñð
 2¸IØPñ#ñ&€Ð	"ó ð %€à3Ð ð BF€Ð>Ó Eð giÐ ÐcÓ hØ€Ø€ð  5°fØ˜ u°UñÐ ð ˜$�<Ð ØÐ ØÐ ØÐ Ø3Ð ð\Ð óSôó.ó6óó"5ô
Mô ó[ó
lð$ØðØ)6ðØ>Aðàóô(ABÐ0ô ABóH;ð IØDØ"\ØDØDñÐ óBr?   