+
    jHàjž  ã                  ó�  a € 0 t $ R t^ RIHt ^ RIt^ RIHt ^ RIHt ^ RI	H
t
HtHtHt RtRtRR	R
RRRR/RR	R
RRRR/RR	R
RRRR/RR	R
RRRR/RR	R
RRRR/RR	R
RRRR/RR	R
RRRR/RR	RRRRR//tR]R&   ]! RR7       ! R R4      4       tR R ltR R ltR  R! ltR" R# lt]! RR7       ! R$ R%4      4       tR& R' ltR*R( R) lltR# )+zMDetect xAI models retired on May 15, 2026 and migrate config.yaml references.)ÚannotationsN)Ú	dataclass)ÚPath)ÚAnyÚDictÚListÚOptionalz8https://docs.x.ai/developers/migration/may-15-retirementzMay 15, 2026zgrok-4-0709Úreplacementzgrok-4.3Úreasoning_effortÚnotezgrok-4-fast-reasoningzgrok-4-fast-non-reasoningÚnonezgrok-4-1-fast-reasoningzgrok-4-1-fast-non-reasoningzgrok-code-fast-1zgrok-3zgrok-imagine-image-prozgrok-imagine-image-qualityz#dict[str, dict[str, Optional[str]]]Ú_RETIRED_MODELST)Úfrozenc                  óV   € ] tR t^t$ RtR]R&   R]R&   R]R&   RtR]R&   RtR]R	&   R
tR# )ÚRetirementIssuez<A reference to a retired xAI model found in a Hermes config.ÚstrÚconfig_pathÚcurrent_modelr	   NúOptional[str]r
   r   © )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r
   r   Ú__static_attributes__r   ó    Ú>/home/ubuntu/.hermes/hermes-agent/hermes_cli/xai_retirement.pyr   r      s,   ‡ áFàÓØÓØÓØ&*Ð�mÓ*Ø€Dˆ-×r   r   c               ó    € V ^8„  d   QhRRRR/# )é   Úmodel_idr   Úreturnr   )Úformats   "r   Ú__annotate__r$   '   s   € ÷ ñ ˜ð  ñ r   c                ó¢   € V P                  4       P                  4       pR F*  pVP                  V4      '       g   K  V\        V4      R u # 	  V# )uE   Strip provider prefix (``x-ai/grok-4`` â†’ ``grok-4``) and lowercase.N)zx-ai/zxai/)ÚstripÚlowerÚ
startswithÚlen)r!   ÚmÚprefixs   &  r   Ú
_normalizer,   '   sG   € à�‰Ó×ÑÓ €AÛ#ˆØ�<‰<˜×ÔØ”S˜“[�\�?Ò"ñ $ð €Hr   c               ó    € V ^8„  d   QhRRRR/# )r    r!   r   r"   Úboolr   )r#   s   "r   r$   r$   0   s   € ÷ Rñ R˜mð R°ñ Rr   c                óf   € \        V \        4      ;'       d    \        V 4      P                  R 4      # )zgrok-)Ú
isinstancer   r,   r(   )r!   s   &r   Ú_looks_like_xair1   0   s'   € Ü�h¤Ó$×QÐQ¬°HÓ)=×)HÑ)HÈÓ)QÐQr   c               ó    € V ^8„  d   QhRRRR/# )r    Úconfigzdict[str, Any]r"   úlist[RetirementIssue]r   )r#   s   "r   r$   r$   4   s   € ÷ 'ñ ' .ð 'Ð5Jñ 'r   c                ób  a aaa€ . o\        S \        4      '       g   S# R V3R lloR V 3R lloR VV3R llpV! R4       S! R4      ;'       g    / P                  4        F9  w  r#\        V\        4      '       g   K  S! R	V R
2VP                  R4      4       K;  	  R F	  pV! V!   K  	  S# )zùWalk all model slots in a Hermes config and return retirement issues.

Slots scanned: ``principal.model``, ``auxiliary.<any>.model`` (introspective, covers future
aux slots), ``delegation.model``, ``tts.xai.model``, ``plugins.image_gen.xai.model``.
c               ó$   € V ^8„  d   QhRRRRRR/# )r    Úpathr   Úmodelr   r"   ÚNoner   )r#   s   "r   r$   Ú+find_retired_xai_refs.<locals>.__annotate__>   s!   € ÷ )ñ )�Sð ) ð )¨ñ )r   c                óþ   <€ \        V4      '       d   \        P                  \        V4      4      MR pVeG   SP	                  \        V VVR,          VP                  R4      VP                  R4      R7      4       R # R # )Nr	   r
   r   )r   r   r	   r
   r   )r1   r   Úgetr,   Úappendr   )r7   r8   ÚentryÚissuess   && €r   Ú_checkÚ%find_retired_xai_refs.<locals>._check>   sj   ø€ Ü:IÈ%×:PÒ:P”×#Ñ#¤J¨uÓ$5Ô6ÐVZˆØÒØ�M‰Mœ/Ø Ø#Ø! -Õ0Ø!&§¡Ð+=Ó!>Ø—Y‘Y˜vÓ&ô(ö )ñ r   c               ó    € V ^8„  d   QhRRRR/# )r    Úkeysr   r"   zOptional[dict[str, Any]]r   )r#   s   "r   r$   r:   H   s   € ÷ 8ñ 8˜ð 8Ð 8ñ 8r   c                 ó¢   <€ SpV  F-  p\        V\        4      '       g    R # VP                  V4      pK/  	  \        V\        4      '       d   V# R # )N)r0   Údictr<   )rC   ÚnodeÚkeyr3   s   *  €r   Ú_sectionÚ'find_retired_xai_refs.<locals>._sectionH   sH   ø€ ØˆÛˆCÜ˜d¤D×)Ò)ÚØ—8‘8˜C“=ŠDñ ô " $¬×-Ò-ˆtÐ7°4Ð7r   c               ó    € V ^8„  d   QhRRRR/# )r    r7   r   r"   r9   r   )r#   s   "r   r$   r:   P   s   € ÷ Dñ D˜cð D dñ Dr   c                 ó|   <€ S! V !  pVe1   S! RP                  V 4      R,           VP                  R4      4       R # R # )NÚ.ú.modelr8   )Újoinr<   )r7   Úsectionr@   rH   s   * €€r   Ú_check_sectionÚ-find_retired_xai_refs.<locals>._check_sectionP   s7   ø€ Ù˜D‘/ˆØÒÙ�3—8‘8˜D“> HÕ,¨g¯k©k¸'Ó.BÖCñ r   Ú	principalÚ	auxiliaryz
auxiliary.rM   r8   ))Ú
delegation)ÚttsÚxai)ÚpluginsÚ	image_genrV   )r0   rE   Úitemsr<   )r3   rP   Ú	slot_nameÚslot_cfgr7   r@   rH   r?   s   f    @@@r   Úfind_retired_xai_refsr\   4   s®   û€ ð %'€FÜ�fœd×#Ò#Øˆ÷)ð )÷8ð 8÷Dñ Dñ
 �;ÔÙ (¨Ó 5× ;Ð ;¸×BÑBÖDÑˆ	Ü�h¤×%Ô%Ù�Z 	˜{¨&Ð1°8·<±<ÀÓ3HÖIñ  Eó SˆÙ˜Ôñ Sà€Mr   c               ó    € V ^8„  d   QhRRRR/# )r    Úissuer   r"   r   r   )r#   s   "r   r$   r$   ^   s   € ÷ ñ ˜ð ¨Cñ r   c                ó>  € V P                    RV P                  : RV P                  : 2.pV P                  '       d    VP	                  RV P                   R24       V P
                  '       d    VP	                  RV P
                   R24       RP                  V4      # )z8One-line human-readable rendering of a retirement issue.z: u	    â†’ use z(set reasoning_effort: "z")z[note: Ú]Ú )r   r   r	   r
   r=   r   rN   )r^   Úpartss   & r   Úformat_issuerc   ^   s‰   € à×!Ñ!Ð" " U×%8Ñ%8Ñ$;¸9ÀU×EVÑEVÑDYÐZÐ[€EØ××ÐØ�‰Ð/°×0FÑ0FÐ/GÀrÐJÔKØ‡z‡z€zØ�‰�w˜uŸz™z˜l¨!Ð,Ô-Ø�8‰8�E‹?Ðr   c                  óD   € ] tR t^ht$ RtR]R&   R]R&   R]R&   R]R	&   R
tR# )ÚApplyResultz#Outcome of an apply_migration call.r   Ú	file_pathzOptional[Path]Úbackup_pathr4   Úissues_resolvedr.   Úconfig_changedr   N)r   r   r   r   r   r   r   r   r   r   re   re   h   s   ‡ á-àƒOØÓØ*Ó*Ø×r   re   c               ó$   € V ^8„  d   QhRRRRRR/# )r    Úyaml_docr   Údotted_pathr   r"   ztuple[Any, str]r   )r#   s   "r   r$   r$   r   s!   € ÷ 
ñ 
˜cð 
°ð 
¸ñ 
r   c                óà   € VP                  R4      Ev r#V'       g   \        RV: 24      hT pV F:  p\        V\        4      '       d   WT9  d   \	        RV: RV: 24      hWE,          pK<  	  WC3# )z9Resolve a dotted slot path to (parent_mapping, leaf_key).rL   z$Path must have at least one parent: zPath segment z missing in )ÚsplitÚ
ValueErrorr0   rE   ÚKeyError)rk   rl   ÚparentsÚleafrF   Úsegments   &&    r   Ú_walk_to_parentrt   r   st   € à ×&Ñ& sÓ+�N€WßÜÐ?À¹ÐOÓPÐPØ€DÛˆÜ˜$¤×%Ò%¨Ô)<Ü˜]¨7©+°\À+ÁÐQÓRÐRØ�}Šñ ð ˆ:Ðr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r    r   r   r?   r4   Úbackupr.   r"   re   r   )r#   s   "r   r$   r$      s2   € ÷ 4vñ 4vØð4vØ4ð4vØ>Bð4vØNYñ4vr   c                ób  € ^ RI Hp \        V 4      p V P                  4       '       g   \	        V 4      h\        V R. RR7      pV'       g   V# ^ RIHp V! RR7      pWVn        RVn	        V P                  R	R
R7      ;_uu_ 4       pVP                  V4      pRRR4       Xf   V# . p	V F[  p
 \        WŠP                  4      w  r¼T
P                  Y¼&   T
P                   '       d   T
P                   TR&   T	P#                  T
4       K]  	  V	'       g   V# RpV'       d   ^ RIHp V! V R4      p^ RIHp ^ RIHp V! V 4       \0        P2                  ! 4       pVP5                  VV4       V! V VP7                  4       RR7       \        WV	RR7      #   + '       g   i     Lþ; i  \         d     EK  i ; i)zµRewrite ``config_path`` in place (ruamel round-trip: comments, order, type literals kept).

Unless ``backup=False`` a copy goes to ``backups/config/`` (reason ``pre-migrate-xai``).
)ÚYAMLNF)rf   rg   rh   ri   )ÚROUNDTRIP_YAML_WIDTHÚrt)ÚtypTÚrz	utf-8-sig)Úencodingr
   )Úbackup_configzpre-migrate-xai)Ú$require_readable_config_before_write)Úatomic_write_text)Úpreserve_mode)Úruamel.yamlrx   r   ÚexistsÚFileNotFoundErrorre   Úhermes_yamlry   ÚwidthÚpreserve_quotesÚopenÚloadrt   r   rp   r	   r
   r=   Úhermes_cli.config_backupsr~   Úhermes_cli.configr   Úutilsr€   ÚioÚStringIOÚdumpÚgetvalue)r   r?   rv   rx   Ú	unchangedry   ÚyamlÚfhÚdocÚresolvedr^   Úparentrr   rg   r~   r   r€   Úbufs   &&&               r   Úapply_migrationr˜      s~  € õ !Ü�{Ó#€KØ×Ñ×ÒÜ Ó,Ð,Ü k¸tÐUWÐhmÔn€IßØÐå0Ù�DŒ>€DØ%„JØ€DÔØ	×	Ñ	˜#¨Ð	×	4Ô	4¸Ø�i‰i˜‹mˆ÷ 
5à
‚{ØÐà&(€HÛˆð	Ü*¨3×0AÑ0AÓB‰LˆFð ×(Ñ(ˆ‰Ø×!×!Ð!Ø).×)?Ñ)?ˆFÐ%Ñ&Ø�‰˜Öñ ÷ ØÐà"&€KßÝ;Ù# KÐ1BÓCˆåFÝ'Ù(¨Ô5ô �+Š+‹-€CØ‡I�Iˆc�3ÔÙ�k 3§<¡<£>ÀÕFÜ ÐW_ÐptÔuÐu÷E 
5×	4ûô ô 	Ûð	ús   ÂFÂ+FÆF	ÆF.Æ-F.)T)Ú__conditional_annotations__r   Ú
__future__r   r�   Údataclassesr   Úpathlibr   Útypingr   r   r   r   ÚMIGRATION_GUIDE_URLÚRETIREMENT_DATEr   r   r   r,   r1   r\   rc   re   rt   r˜   )r™   s   @r   Ú<module>r       sN  øðÜ SÝ "ã 	Ý !Ý ß ,Ó ,ð QÐ Ø €ð  ]°JÐ@RÐTXÐ[aÐcgÐ$hØ ]°JÐ@RÐTXÐ[aÐcgÐ$hØ ]°JÐ@RÐTZÐ\bÐdhÐ$iØ ]°JÐ@RÐTXÐ[aÐcgÐ$hØ! ]°JÐ@RÐTZÐ\bÐdhÐ$iØ ]°JÐ@RÐTXÐ[aÐcgÐ$hØ ]°JÐ@RÐTXÐ[aÐcgÐ$hØ ]Ð4PÐRdÐfjÐlrÐtxÐ$yð	8€Ð4ó 	ñ �$Ô÷ð ó ðõõRõ'õTñ �$Ô÷ð ó ðõ
÷4vñ 4vr   