+
    iHàjØ ã                  óœ  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIHtHtHtHtHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHt ]P8                  ! ]4      tRR	R
R	RR	RR/R R lltR R lt R	s!R R lt"RÅt#R R lt$R R lt%R R lt&R R lt']PP                  ! R]PR                  4      t*]PP                  ! R4      t+Rt,]PP                  ! R], R2]PR                  4      t-R  R! lt.]PP                  ! R"4      t/R#t00 RÆmt1R&R'0t20 RÇmt3R%R$0t4R(t50 RÈmt60 RÉmt7^@t80 RÊmt90 RËmt:R* R+ lt;R, R- lt<R. R/ lt=R0 R1 lt>R2 R3 lt?RÌR4 R5 llt@R6 R7 ltAR8 R9 ltBR: R; ltCR< R= ltDR> R? ltER@ RA ltFRÍRC RD lltGRERB/RF RG lltHRHRI/RJ RK lltIRL RM ltJRN RO ltKRP RQ ltLRR RS ltMRÌRT RU lltNRÌRV RW lltORXR)/RY RZ lltPR[RR\R/R] R^ lltQ]R! R_R`04      tSRÌRa Rb lltTRcR/Rd Re lltURfR/Rg Rh lltVRcR/Ri Rj lltW ! Rk Rl4      tXRmR/Rn Ro lltYRmR/Rp Rq lltZRR	R
R	RrRsRcRRfRRtR	/Ru Rv llt[ ! Rw Rx]4      t\Ry Rz lt]R{ R| lt^R} R~ lt_RR€R�R/R‚ Rƒ llt` ! R„ R…]4      taR† R‡ ltbRˆ R‰ ltcRŠ R‹ ltdRŒ R� lteRŽ R� ltfR�]bR‘]cR’]dR“]dR”]e/tgR•]hR–&   R
R	R—R	/R˜ R™ lltiRš R› ltjR’Rœ R3R�Rž R3RŸ];]kPØ                  3R$R  R3R¡R¢ ]m3R£R¤ ]n3R¥R¦ ]n3.R§ RÎ 4       OR¨R© R3N5toRª]hR«&   0 RÏmR¬ ]o 4       mtpR­ R® ltqR¯R	R
R	R—R	/R° R± lltrRÌR² R³ lltsR´ Rµ lttR¶ R· ltuR¸ R¹ ltvRº R» ltwRÌR¼ R½ lltx ! R¾ R¿4      tyRÀRRÁRRÂRs/RÃ RÄ lltzR# )ÐzªCodex Responses API adapter: stateless format conversion and normalization for the
OpenAI Responses API (OpenAI Codex, xAI, GitHub Models and other compatible endpoints).)ÚannotationsN)ÚSimpleNamespace)ÚAnyÚCallableÚDictÚIteratorÚListÚ
NamedTupleÚOptionalÚ	TypeGuard)Úcoerce_tool_nameÚdeterministic_call_id)ÚDEFAULT_AGENT_IDENTITY)Únormalize_route_base_urlÚis_xai_responsesFÚis_github_responsesÚis_codex_backendÚbase_urlc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	é   r   Úboolr   r   r   úOptional[str]ÚreturnÚstr© )Úformats   "ÚB/home/ubuntu/.hermes/hermes-agent/agent/codex_responses_adapter.pyÚ__annotate__r      s=   € ÷ Fñ FØðFØ<@ðFØ\`ðFàðFð 	ñFó    c                ó    € V R3VR3VR33 F  w  rEV'       g   K  Vu # 	  V'       g   R# R\        \        V4      P                  4       4       2# )zÚStable identifier for the endpoint that mints ``reasoning.encrypted_content``. Blobs are sealed to their
issuer (HTTP 400 ``invalid_encrypted_content``), so stamping lets replay drop foreign blobs after a model switch.Úxai_responsesÚgithub_responsesÚcodex_backendÚotherúother:)r   r   Ústrip)r   r   r   r   ÚflagÚkinds   $$$$  r   Ú_classify_responses_issuerr(      sk   € ð )¨/Ð:Ð=PÐRdÐ<eÐhxð  {Jð  hKó  L‰
ˆß‰4ØŠKñ L÷ Ùð Ô,¬S°«]×-@Ñ-@Ó-BÓCÐDÐEÐEr   c               ó    € V ^8„  d   QhRRRR/# )r   r'   r   r   r   )r   s   "r   r   r   '   s   € ÷ ñ  ð ¨ñ r   c                ó�   € \        V \        4      '       d0   V P                  R4      '       d   \        V \	        R4      R R7      # V # )zÆCanonicalise a persisted ``other:<url>`` issuer stamp. Items stamped before canonicalisation carry the raw
``agent.base_url`` (trailing slash / host case) and must still replay on the same endpoint.r$   N)r   )Ú
isinstancer   Ú
startswithr(   Úlen)r'   s   &r   Ú_canonical_issuer_kindr.   '   s:   € ô �$œ×Ò §¡°×!:Ò!:Ü)°4¼¸H»¸Ð3GÔHÐHØ€Kr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úmodelr   r   r   r   )r   s   "r   r   r   3   s   € ÷ Pñ P ð P¨ñ Pr   c                ót   € ^ RI Hp \        T! T ;'       g    R4      4      P                  4       ;'       g    R# )zªCanonical Responses wire model stamped on encrypted reasoning: blobs are sealed to the issuing
model too, so a same-endpoint model switch must not replay them (HTTP 400).)Ú"strip_codex_context_variant_suffixÚ N)Úagent.model_metadatar3   r   r%   )r1   r3   s   & r   Ú_wire_model_identityr6   3   s0   € õ HäÑ1°%·+°+¸2Ó>Ó?×EÑEÓG×OÐOÈ4ÐOr   c               ó    € V ^8„  d   QhRRRR/# r0   r   )r   s   "r   r   r   C   s   € ÷ sñ s 3ð s¨=ñ sr   c                óš   a€ \        T ;'       g    R4      P                  4       P                  4       o\        V3R l\         4       R4      # )zd``_OPENAI_ALL_TURNS_FAMILIES`` entry ``model`` belongs to (``gpt-6.1-sol`` -> ``gpt-6``), else None.r4   c              3  óˆ   <"  € T F7  pSV8X  g*   SP                  VR ,           VR,           34      '       g   K3  Vx € K9  	  R# 5i)Ú-Ú.N)r,   )Ú.0ÚfÚnames   & €r   Ú	<genexpr>Ú*openai_reasoning_family.<locals>.<genexpr>F   s9   øé € ÐkÑ6�q¸$À!¼)ÀtÇÁÐXYÐ\_ÕX_ÐabÐehÕahÐWi×Gj—’Ó6ùs
   ƒ0A¸
AN)r   r%   ÚlowerÚnextÚ_OPENAI_ALL_TURNS_FAMILIES)r1   r>   s   &@r   Úopenai_reasoning_familyrD   C   s:   ø€ äˆu�{ˆ{˜Ó×!Ñ!Ó#×)Ñ)Ó+€DÜÔkÕ6ÓkÐmqÓrÐrr   c               ó    € V ^8„  d   QhRRRR/# )r   Úissuer_kindr   r   r   r   )r   s   "r   r   r   I   s   € ÷ ñ  sð ¨tñ r   c                óº   € ^ RI Hp \        V \        4      ;'       d?    V P	                  R4      ;'       d&    V! V \        R4      R 4      P                  4       R8H  # )é    ©Úbase_url_hostnamer$   Nzapi.openai.com)ÚutilsrJ   r+   r   r,   r-   rA   )rF   rJ   s   & r   Ú_is_openai_api_issuerrL   I   sW   € Ý'ä�k¤3Ó'÷ ð ¨K×,BÑ,BÀ8Ó,L÷ ð Ù˜+¤c¨(£m nÐ5Ó6×<Ñ<Ó>ÐBRÑRðr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rF   r   Ú
item_modelr   Úcurrent_modelr   r   r   )r   s   "r   r   r   Q   s0   € ÷ wñ w mð wÀð wÐUbð wÐgkñ wr   c                ó’   € Ve   Ve   W8X  d   R# \        V4      pVRJ;'       d"    V\        V4      8H  ;'       d    \        V 4      # )zeExact model everywhere; same all_turns family on api.openai.com, which accepts sibling-variant blobs.NT)rD   rL   )rF   rN   rO   Úfamilys   &&& r   Ú_model_can_read_blobrR   Q   sL   € àÒ 
Ò 2°jÔ6QÙÜ$ ]Ó3€FØ˜Ð×vÐv &Ô,CÀJÓ,OÑ"O×vÐvÔTiÐjuÓTvÐvr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úmessagesr   rF   r   Úissuer_modelr   Úintr   )r   s   "r   r   r   Y   s,   € ÷ ñ ØðØ#0ðØ@Mðàñr   c               óî  aa€ R VV3R llp^ p\        V \        4      '       d   T M.  FÃ  p\        V\        4      '       d(   VP                  R4      R8X  d   VP                  R4      MRp\        V\        4      '       d	   V'       g   Kb  V Uu. uF  qs! V4      '       d   K  VNK  	  ppV\	        V4      \	        V4      ,
          ,          pV'       d   W…R&   K²  VP                  R4       KÅ  	  V# u upi )aã  First ``invalid_encrypted_content`` rung: drop the items the failing request REPLAYED without an exact
issuer+model stamp (unstamped legacy blobs, sibling-variant blobs). Items another issuer or model minted
were never sent (``_replay_reasoning_items`` skips them) and stay in history for a switch back.
Consumes its own precondition (a second call removes nothing), so recovery cannot loop.
Rebinds the filtered list, never mutates a shared one; returns the number of items removed.c               ó    € V ^8„  d   QhRRRR/# )r   Úitemr   r   r   r   )r   s   "r   r   Ú6strip_unverified_reasoning_items.<locals>.__annotate__a   s   € ÷ pñ p #ð p¨$ñ pr   c                ó   <€ \        V \        4      '       d   V P                  R 4      R8X  d   R# \        V P                  R4      4      V P                  R4      r!VS8X  d
   VS8X  d   R# VRJ ;'       g    VS8H  ;'       d    \	        SVS4      # )ÚtypeÚ
compactionFÚ_issuer_kindÚ_issuer_modelN)r+   ÚdictÚgetr.   rR   )rY   r'   r1   rF   rU   s   &  €€r   Úunverified_but_sentÚ=strip_unverified_reasoning_items.<locals>.unverified_but_senta   s   ø€ Ü˜$¤×%Ò%¨¯©°&Ó)9¸\Ô)IÙÜ,¨T¯X©X°nÓ-EÓFÈÏÉÐQ`ÓHaˆeØ�;Ô 5¨LÔ#8ÙØ˜�×3Ð3 ¨Ñ 3×oÐoÔ9MÈkÐ[`ÐbnÓ9oÐor   ÚroleÚ	assistantÚcodex_reasoning_itemsN)r+   Úlistr`   ra   r-   Úpop)	rT   rF   rU   rb   ÚremovedÚmsgÚitemsÚiÚkepts	   &dd      r   Ú strip_unverified_reasoning_itemsrn   Y   sÍ   ù€ ÷pñ pð €GÜ% h´×5Ò5‰x¸2Ò=ˆÜ4>¸sÄD×4IÒ4IÈcÏgÉgÐV\ËoÐalÔNl�—‘Ð/Ô0ÐrvˆÜ˜%¤×&Ò&¯eÙÙ Ó?™5�aÐ(;¸A×(>—�™5ˆÐ?Ø”3�u“:¤ D£	Õ)Õ)ˆßØ+/Ð'Ó(à�G‰GÐ+Ö,ñ >ð €Nùò @s   ÂC2Â#C2z)(?:^|[\s>|])to=functions\.[A-Za-z_][\w.]*z�(?:^|\n)\s*\{\s*"cmd"\s*:\s*"(?:\\.|[^"\\])*"(?:\s*,\s*"[A-Za-z_][\w-]*"\s*:\s*(?:"(?:\\.|[^"\\])*"|true|false|null|-?\d+(?:\.\d+)?))*\s*\}\s*$z‘creat(?:e|ing)|writ(?:e|ing)|runn?(?:ing)?|execut(?:e|ing)|check(?:ing)?|verif(?:y|ying)|updat(?:e|ing)|install(?:ing)?|edit(?:ing)?|mak(?:e|ing)uš   ^(?:(?:next|first|then|okay|ok|alright)\b[\s,â€”â€“-]*)?(?:sure,\s*)?(?:now\s+)?(?:let\s+me\s+|i(?:'|â€™)?ll\s+|i\s+will\s+|i(?:'|â€™)?m\s+|i\s+am\s+)?(?:z)\bc               ó    € V ^8„  d   QhRRRR/# )r   Útextr   r   r   r   )r   s   "r   r   r   ˆ   s   € ÷ _ñ _ ð _¨ñ _r   c                ód  € \         P                  V 4      '       d   R# \        P                  V 4      pV'       g   R# V RVP                  4        P	                  4       P                  4       p\        V4      ;'       d4    \        \        P                  VR,          P	                  4       4      4      # )zhTrue when assistant text carries a tool call the model failed to emit as a structured ``function_call``.TFNéÿÿÿÿ)Ú_TOOL_CALL_LEAK_PATTERNÚsearchÚ_SHELL_JSON_LEAK_PATTERNÚstartr%   Ú
splitlinesr   Ú_SHELL_JSON_LEAK_LEADIN_PATTERN)rp   ÚmatchÚlead_ins   &  r   Ú_leaked_tool_call_textr{   ˆ   s�   € ä×%Ñ% d×+Ò+ÙÜ$×+Ñ+¨DÓ1€EßÙØ�>�E—K‘K“MÐ"×(Ñ(Ó*×5Ñ5Ó7€GÜ�‹=×^Ð^œTÔ"A×"HÑ"HÈÐQSÍ×IZÑIZÓI\Ó"]Ó^Ð^r   z7<\|(start|end|channel|message|constrain|return|call)\|>u   ï½œrp   Úoutput_textÚ	image_urlÚinput_imagez'[Assistant image omitted during replay]Ú	completedc               ó    € V ^8„  d   QhRRRR/# ©r   Úvaluer   r   zTypeGuard[str]r   )r   s   "r   r   r   ¶   s   € ÷ :ñ :�Sð :˜^ñ :r   c                ód   € \        V \        4      ;'       d    \        V P                  4       4      # ©N)r+   r   r   r%   ©r‚   s   &r   Ú	_nonblankr†   ¶   s"   € Ü�eœSÓ!×9Ð9¤d¨5¯;©;«=Ó&9Ð9r   c               ó    € V ^8„  d   QhRRRR/# r�   r   )r   s   "r   r   r   º   s   € ÷ 2ñ 2˜ð 2 ñ 2r   c                óH   € \        V \        4      ;'       d    \        V 4      # r„   )r+   r   r   r…   s   &r   Ú_nonempty_strr‰   º   s   € Ü�eœSÓ!×1Ð1¤d¨5£kÐ1r   c               ó    € V ^8„  d   QhRRRR/# )r   r‚   r   r   r   r   )r   s   "r   r   r   ¾   s   € ÷ /ñ /˜ð / ñ /r   c                ó$   € V f   R# \        V 4      # )Nr4   ©r   r…   s   &r   Ú_str_or_emptyr�   ¾   s   € Ø’ˆ2Ð.¤C¨£JÐ.r   c               ó    € V ^8„  d   QhRRRR/# )r   r‚   r   r   r   r   )r   s   "r   r   r   Â   s   € ÷ Eñ E˜#ð E -ñ Er   c                ón   € \        V \        4      '       d   V P                  4       P                  4       # R # r„   )r+   r   r%   rA   r…   s   &r   Ú_lower_or_noner�   Â   s(   € Ü$.¨u´c×$:Ò$:ˆ5�;‰;‹=×ÑÓ ÐDÀÐDr   c               ó    € V ^8„  d   QhRRRR/# )r   r‚   r   r   rg   r   )r   s   "r   r   r   Æ   s   € ÷ 4ñ 4�Cð 4˜Dñ 4r   c                ó6   € \        V \        4      '       d   V # . # r„   ©r+   rg   r…   s   &r   Ú_as_listr”   Æ   s   € Ü˜u¤d×+Ò+ˆ5Ð3°Ð3r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úobjr   r>   r   Údefaultr   r   )r   s   "r   r   r   Ê   s.   € ÷ Sñ S�ð S˜3ð S¨ð S¸ñ Sr   c                óh   € \        V \        4      '       d   V P                  V4      # \        WV4      # )zMRead ``name`` from a dict or an attribute-style (SDK/SimpleNamespace) object.)r+   r`   ra   Úgetattr)r–   r>   r—   s   &&&r   Ú_fieldrš   Ê   s(   € ä& s¬D×1Ò1ˆ3�7‰7�4‹=ÐR´w¸sÈ'Ó7RÐRr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpartúdict[str, Any]r   r   r   )r   s   "r   r   r   Ï   s   € ÷ 7ñ 7�^ð 7¨ñ 7r   c                ó‚   € \        V P                  R 4      ;'       g    R4      P                  4       P                  4       # )r\   r4   )r   ra   r%   rA   )rœ   s   &r   Ú
_part_typerŸ   Ï   s0   € Üˆt�x‰x˜Ó×%Ð% 2Ó&×,Ñ,Ó.×4Ñ4Ó6Ð6r   c               ó    € V ^8„  d   QhRRRR/# )r   rd   r   r   r   )r   s   "r   r   r   Ó   s   € ÷ Bñ B˜ð B ñ Br   c                ó   € V R 8X  d   R# R# )re   r|   Ú
input_textr   ©rd   s   &r   Ú_text_type_forr¤   Ó   s   € Ø  KÔ/ˆ=ÐA°\ÐAr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	argumentsr   r   r   r   )r   s   "r   r   r   ×   s   € ÷ %ñ % ð %¨ñ %r   c                óÖ   € \        V \        4      '       d   \        P                  ! V RR7      p M!\        V \        4      '       g   \	        V 4      p V P                  4       ;'       g    R# )zBNormalize replayed tool-call arguments to a non-empty JSON string.F©Úensure_asciiú{})r+   r`   ÚjsonÚdumpsr   r%   )r¦   s   &r   Ú_coerce_argumentsr­   ×   sJ   € ä�)œT×"Ò"Ü—J’J˜y°uÔ=‰	Ü˜	¤3×'Ò'Ü˜	“Nˆ	Ø�?‰?Ó×$Ð$ Ð$r   c               ó    € V ^8„  d   QhRRRR/# )r   rp   r   r   r   )r   s   "r   r   r   à   s   € ÷ +ñ + Sð +¨Sñ +r   c                ó<  a € S '       d   RS 9  g   RS 9  d   S # S P                  4       '       gM   \        ;QJ d%    R \        S 4       4       F  '       g   K   RM	  RM! R \        S 4       4       4      '       g&   \        P	                  R\
         R\
         R2S 4      # \        S 4       UUu. uF$  w  r\        P                  ! V4      R8w  g   K"  VNK&  	  pppR	P                  V 3R
 lV 4       4      p. ^ re\        P                  V4       Fj  pW7P                  4       ,          W7P                  4       ^,
          ,          ^,           r˜VS Wh R\
         VP                  ^4       \
         R2.,          pT	pKl  	  R	P                  V4      S VR ,           # u uppi )zCKeep Harmony source readable without emitting reserved wire tokens.Ú<Ú|c              3  ód   "  € T F&  qR 8”  g   K  \         P                  ! V4      R8H  x € K(  	  R# 5i)ÚÚCfN)ÚunicodedataÚcategory)r<   Úchars   & r   r?   Ú-_neutralize_harmony_tokens.<locals>.<genexpr>æ   s*   é € ð !Ù7@¨tÈ6ÁMÔ*Œ×Ò˜TÓ" dÖ*³yùs   ‚0�!0TFz\1Ú>r´   r4   c              3  ó6   <"  € T F  pSV,          x € K  	  R # 5ir„   r   )r<   rl   rp   s   & €r   r?   r¸   í   s   øé € Ð?Ñ,> q˜4 Ÿ7š7Ó,>ùs   ƒN)ÚisasciiÚanyÚsetÚ_HARMONY_CONTROL_TOKEN_REÚsubÚ_FULLWIDTH_PIPEÚ	enumeraterµ   r¶   ÚjoinÚfinditerrv   ÚendÚgroup)
rp   rl   r·   Úoriginal_positionsÚvisible_textÚresultÚcursorry   rv   rÄ   s
   f         r   Ú_neutralize_harmony_tokensrÊ   à   sc  ø€ ç�3˜d”? c°¤oØˆð ‡|�|‡~‚~ŸS›Sñ !Ü7:¸4´yó!ŸSŸSšSñ !Ü7:¸4´yó!÷ ò ô )×,Ñ,°´/Ð1BÀ"Ä_ÐDUÐUVÐ-WÐY]Ó^Ð^ô ,5°T¬?Ôa©?¡ ¼k×>RÒ>RÐSWÓ>XÐ\`Ñ>`Ÿ!˜!©?ÐÑaØ—7‘7Ô?Ñ,>Ó?Ó?€LØ˜ˆFÜ*×3Ñ3°LÖAˆØ'¯©«Õ6Ð8JÏ9É9Ë;ÐYZÍ?Õ8[Ð^_Õ8_ˆsØ�4˜Ð%¨¬?Ð*;¸E¿K¹KÈ»NÐ;KÌOÐK\Ð\]Ð'^Ð_Õ_ˆØŠñ Bð �7‰7�6‹?˜T & '˜]Õ*Ð*ùó bs   Â/FÃFc               ó    € V ^8„  d   QhRRRR/# ©r   r‚   r   r   r   )r   s   "r   r   r   ö   s   € ÷ ñ ¨ð °ñ r   c                óÞ  € \        V \        4      '       d   \        V 4      # \        V \        \        34      '       d   V  Uu. uF  p\        V4      NK  	  up# \        V \        4      '       dt   \        ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       d   \        R4      hV P                  4        UUu/ uF  w  r!V\        V4      bK  	  upp# V # u upi u uppi )u²   Neutralize JSON-like values (tuples â†’ lists). A reserved token in an object *key* is
rejected, not rewritten â€” renaming could desync a tool schema from the executor contract.c              3  ón   "  € T F+  p\        V\        4      ;'       d    \        V4      V8g  x € K-  	  R # 5ir„   )r+   r   rÊ   ©r<   Úkeys   & r   r?   Ú0_neutralize_harmony_structure.<locals>.<genexpr>þ   s0   é € Ð`ÑZ_ÐSVŒz˜#œsÓ#×NÐNÔ(BÀ3Ó(GÈ3Ñ(NÔNÓZ_ùs   ‚5ž5TFzaReserved Harmony tokens in a JSON object key cannot be neutralized without changing its contract.)
r+   r   rÊ   rg   ÚtupleÚ_neutralize_harmony_structurer`   r¼   Ú
ValueErrorrk   )r‚   rY   rÐ   s   &  r   rÓ   rÓ   ö   sÇ   € ô �%œ×ÒÜ)¨%Ó0Ð0Ü�%œ$¤˜×'Ò'Ù@EÓFÁ¸Ô-¨dÖ3ÁÑFÐFÜ�%œ×Òß‹3Ñ`ÑZ_Ó`�3�3Š3Ñ`ÑZ_Ó`×`Ò`Üð=óð ð KPÏ+É+Ì-ÔXÉ-¹Y¸S�Ô2°4Ó8Ò8É-ÒXÐXØ€Lùò Gùó Ys   ÁC$ÃC)c               ó    € V ^8„  d   QhRRRR/# )r   Úcontentrg   r   zIterator[tuple[str, Any]]r   )r   s   "r   r   r   	  s   € ÷ 
$ñ 
$ ð 
$Ð*Cñ 
$r   c              #  óL  "  € V  F™  p\        V\        4      '       d   V'       d	   RV3x € K)  \        V\        4      '       g   KA  \        V4      pV\        9   d0   \        VP                  R4      4      '       d   RVR,          3x € K†  V\        9   g   K“  RV3x € K›  	  R# 5i)zHYield ``("text", str)`` / ``("image", part)`` for recognized chat parts.rp   ÚimageN)r+   r   r`   rŸ   Ú_TEXT_PART_TYPESr‰   ra   Ú_IMAGE_PART_TYPES)rÖ   rœ   Úptypes   &  r   Ú_iter_content_partsrÜ   	  s}   é € ãˆÜ�dœC× Ò §TØ˜$�,ÔÜ˜œd×#Ô#Ü˜tÓ$ˆEØÔ(Ô(¬]¸4¿8¹8ÀFÓ;K×-LÒ-LØ˜d 6�lÐ*Ô*ØÔ+Ö+Ø˜t�mÔ#ó ùs   ‚#B$¦B$ÁAB$ÂB$Úuserc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rœ   r�   rd   r   Úkeep_empty_urlr   r   úOptional[dict[str, Any]]r   )r   s   "r   r   r     s*   € ÷ ñ ˜Nð °#ð ÐSWð Ð\tñ r   c               óö  € VR8X  d   RRR\         /# V P                  R4      V P                  R4      rC\        V\        4      '       d#   VP                  R4      VP                  RV4      rC\	        V4      '       g   V'       g   R# \        T;'       g    R	4      p^ R
IHpHp V! V4      pVR8X  d   V! V4      pVe   TRrsVe   RRRRV R2/# RRRV/p	\        V4      '       d   VP                  4       V	R&   V	# )u¡  Responses image part from a chat/Responses image part (``image_url`` may be a str or
``{url, detail}``). Assistant â†’ text placeholder (an assistant ``input_image`` 400s every
replay); user â†’ ``input_image``, None for an empty url unless ``keep_empty_url``; an inline
SVG is rasterized to PNG when a rasterizer is installed, any other unsupported inline
subtype (or an SVG with no rasterizer) â†’ text placeholder.re   r\   r|   rp   r}   ÚdetailÚurlNr4   )Úrasterize_svg_data_urlÚ#unsupported_inline_image_media_typezimage/svg+xmlr¢   z[image omitted: z! is not a supported image format]r~   )Ú_ASSISTANT_IMAGE_PLACEHOLDERra   r+   r`   r‰   r   Útools.vision_tools_image_preprä   rå   r†   r%   )
rœ   rd   rß   rã   râ   rä   rå   ÚmimeÚpng_urlÚ
image_parts
   &&$       r   Ú_input_image_partrë     sø   € ð ˆ{ÔØ˜ vÔ/KÐLÐLØ—(‘(˜;Ó'¨¯©°(Ó);ˆÜ�#”t×ÒØ—g‘g˜e“n c§g¡g¨h¸Ó&?ˆVÜ˜×Ò§nÙÜ
ˆc�iˆi�R‹.€CçiÙ.¨sÓ3€DØˆÔñ )¨Ó-ˆØÒØ �ØÒØ˜ fÐ0@ÀÀÐFgÐ.hÐiÐiØ"(¨-¸ÀcÐ!J€JÜ�×ÒØ%Ÿ|™|›~ˆ
�8ÑØÐr   rd   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÖ   r   rd   r   r   úlist[dict[str, Any]]r   )r   s   "r   r   r   5  s"   € ÷ ñ ¨cð ¸Cð ÐMañ r   c               ó|  € \        V 4       F@  p\        V\        4      '       g   K  \        V4      ;p\        9   g   K3  \        RV R24      h	  \        V4      p. p\        \        V 4      4       FG  w  rgVR8X  d   VP                  RVRV/4       K#  \        WqRR7      ;pf   K6  VP                  V4       KI  	  V# )ur  Chat-style multimodal content â†’ Responses API input parts ([] if not a list). Text is
``input_text`` (user) / ``output_text`` (assistant) â€” the API rejects the wrong type per role;
``input_image`` is only legal on user messages (see :func:`_input_image_part`). Unsupported
video parts fail closed instead of silently turning a video request into a text-only request.z!Codex Responses does not support z% input; use a video-capable provider.rp   r\   F©rß   )
r”   r+   r`   rŸ   Ú_VIDEO_PART_TYPESrÔ   r¤   rÜ   Úappendrë   )rÖ   rd   rœ   rÛ   Ú	text_typeÚ	convertedr'   Úpayloads   &$      r   Ú _chat_content_to_responses_partsrõ   5  sº   € ô
 ˜Ö!ˆÜ�dœD×!Ô!´
¸4Ó0@Ð'@ uÔEVÖ&VÜØ3°E°7Ð:_Ð`óð ñ "ô
 ˜tÓ$€IØ&(€IÜ,¬X°gÓ->Ö?‰ˆØ�6Œ>Ø×Ñ˜f i°¸ÐAÖBÜ'¨ÀeÔLÐLˆdÔYØ×Ñ˜TÖ"ñ	 @ð
 Ðr   ÚsepÚ c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÖ   r   rö   r   r   r   )r   s   "r   r   r   I  s&   € ÷ Oñ O¨Sð O¸#ð OÈñ Or   c               ó´  € \        V \        4      '       g    \        V 4      # \        \	        V 4      4      pV UUu. uF  w  r4VR8X  g   K  VNK  	  ppp\        V4      \        V4      ,
          pV'       d   RT RV^8w  d   RMR R2MRpRP                  R WqP                  V4      P                  4       3 4       4      #   \         d     R# i ; iu uppi )	uá   Flatten message content to plain text: text parts joined with ``sep`` (``" "`` for logs; ``"\n"`` for memory
providers feeding regexes), images â†’ ``[N image(s)]`` marker, ``""`` for None, ``str(content)`` for other scalars.r4   rp   Ú[z imageÚsÚ]r÷   c              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir„   r   )r<   Úbits   & r   r?   Ú2_summarize_user_message_for_log.<locals>.<genexpr>U  s   é € ÐNÑ#F˜CË#—C’CÓ#Fùs   ‚	�
)r+   rg   r�   Ú	ExceptionrÜ   r-   rÂ   r%   )rÖ   rö   Úpartsr'   rô   Ú	text_bitsÚimage_countÚnotes   &$      r   Ú_summarize_user_message_for_logr  I  sÉ   € ô �gœt×$Ò$ð	Ü  Ó)Ð)ô Ô$ WÓ-Ó.€EÙ.3ÔF©e™]˜T°t¸v±~—�©e€IÑFÜ�e“*œs 9›~Õ-€KßHSˆQˆ{ˆm˜6¨¸Ô)9¡#¸rÐ!BÀ!ÑDÐY[€DØ�8‰8ÑN D¯(©(°9Ó*=×*CÑ*CÓ*EÑ#FÓNÓNÐNøô ô 	Úð	üó Gs   ˜
C ¼CÁCÃCÃCc               ó    € V ^8„  d   QhRRRR/# ©r   Úcall_idr   r   r   )r   s   "r   r   r   Z  s   € ÷ `ñ ` cð `¨cñ `r   c                ó¬   € \        V 4      \        8:  d   V # R\        P                  ! V P	                  RRR7      4      P                  4       R,           2# )zÕKeep ``call_id`` within the API's 64-char cap (the codex app-server namespaces MCP call ids past it). The
surrogate is a pure function of the original so a ``function_call`` and its ``function_call_output`` agree.Úcall_úutf-8Úreplace)Úerrors:Né    N)r-   Ú_MAX_RESPONSES_ITEM_ID_LENGTHÚhashlibÚsha256ÚencodeÚ	hexdigest)r  s   &r   Ú_clamp_responses_call_idr  Z  sI   € ô ˆ7ƒ|Ô4Ô4ØˆØ”7—>’> '§.¡.°À .Ó"KÓL×VÑVÓXÐY\Õ]Ð^Ð_Ð_r   c               ó    € V ^8„  d   QhRRRR/# )r   Úresponse_item_idr   r   r   r   )r   s   "r   r   r   b  s   € ÷ ñ °ð ¸ñ r   c                ó˜   € \        V \        4      '       d4   V P                  R4      '       d   \        V 4      ^8”  d   RV R,           2# R# )u¨   Map an ``fc_â€¦`` item id to its canonical ``call_<suffix>``. Both sides of a replayed
pair must derive the SAME call_id, or an oversized pair clamps to two surrogates.Úfc_r
  :é   NNN)r+   r   r,   r-   )r  s   &r   Ú_canonical_call_id_from_fcr  b  sI   € ô Ð"¤C×(Ò(Ð-=×-HÑ-HÈ×-OÒ-OÔTWÐXhÓTiÐlmÔTmØÐ'¨Õ+Ð,Ð-Ð-Ùr   c               ó    € V ^8„  d   QhRRRR/# )r   Úraw_idr   r   z#tuple[Optional[str], Optional[str]]r   )r   s   "r   r   r   j  s   € ÷ Gñ G Sð GÐ-Pñ Gr   c                óB  € \        V \        4      '       d   V P                  4       MRpRV9   dI   VP                  R^4      w  r#VP                  4       ;'       g    RVP                  4       ;'       g    R3# V'       g   R# VP	                  R4      '       d   RV3# VR3# )z8Split a stored tool id into (call_id, response_item_id).r4   r±   Nr  )NN)r+   r   r%   Úsplitr,   )r  r‚   r  r  s   &   r   Ú_split_responses_tool_idr  j  sŒ   € ä(¨´×5Ò5ˆF�L‰LŒN¸2€EØ
ˆe„|Ø$)§K¡K°°QÓ$7Ñ!ˆØ�}‰}‹×&Ð& $Ð(8×(>Ñ(>Ó(@×(HÐ(HÀDÐHÐHßØÐØ!×,Ñ,¨U×3Ò3ˆD�%ˆ=ÐF¸%À¸ÐFr   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )r   Úraw_call_idr   Úraw_item_idÚfn_namer   r¦   ÚindexrV   Úcanonicalize_fcr   r   r   )r   s   "r   r   r   u  sD   € ÷ ñ ØðØ#&ðØ14ðØADðØMPðØfjðàñr   c               óè   € \        V4      w  rg\        V 4      '       d   T MTp\        V4      '       g   V'       d   \        V4      p\        V4      '       g   \        W#V4      pVP	                  4       # )zŸPick a non-blank call_id: explicit -> embedded in ``call|fc`` id -> (replay only)
canonical ``call_<fc suffix>`` -> deterministic hash of name/arguments/index.)r  r†   r  r   r%   )	r!  r"  r#  r¦   r$  r%  Úembedded_call_idÚembedded_response_item_idr  s	   &&&&&$   r   Ú_resolve_call_idr)  u  s`   € ô
 3KÈ;Ó2WÑ/ÐÜ& {×3Ò3‰kÐ9I€GÜ�W×Ò§/Ü,Ð-FÓGˆÜ�W×ÒÜ'¨¸EÓBˆØ�=‰=‹?Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r   r  r   r   r   )r   s   "r   r   r   ƒ  s'   € ÷ Gñ G°ð GÀ}ð GÐ`cñ Gr   c                ó,  € \        V\        4      '       d6   VP                  4       P                  R4      '       d   VP                  4       # T ;'       g    RP                  4       p\        P
                  ! RRV4      pW#3 Fz  pVP                  R4      '       g5   VP                  R4      '       g   K3  \        V4      \        R4      8”  g   KN  VP                  R4      '       d   Vu # RV\        R4      R  2u # 	  V'       d   RVR,           2# T;'       g=    \        T;'       g    R4      ;'       g     \        P                  ! 4       P                  pR\        P                  ! VP                  R4      4      P                  4       R,           2# )	zCBuild a valid Responses `function_call.id` (must start with `fc_`).r  r4   z[^A-Za-z0-9_-]r
  N:Né0   Nr  :Né   N)r+   r   r%   r,   Úrer¿   r-   ÚuuidÚuuid4Úhexr  Úsha1r  r  )r  r  ÚsourceÚ	sanitizedÚ	candidateÚseeds   &&    r   Ú"_derive_responses_function_call_idr7  ƒ  sH  € äÐ"¤C×(Ò(Ð-=×-CÑ-CÓ-E×-PÑ-PÐQV×-WÒ-WØ×%Ñ%Ó'Ð'Ø�mˆm˜×"Ñ"Ó$€FÜ—’Ð(¨"¨fÓ5€IØÓ(ˆ	Ø×Ñ ×&Ò&¨9×+?Ñ+?À×+HÔ+HÌSÐQZË^Ô^aÐbiÓ^jÖMjØ )× 4Ñ 4°U× ;Ò ;�9ÒaÀ3ÀyÔQTÐU\ÓQ]ÐQ^ÐG_ÐF`ÐAaÒañ )÷ Ø�Y˜s•^Ð$Ð%Ð%Ø×DÐD”SÐ)×/Ð/¨RÓ0×DÐD´D·J²J³L×4DÑ4D€DØ”—’˜dŸk™k¨'Ó2Ó3×=Ñ=Ó?ÀÕDÐEÐFÐFr   c               ó    € V ^8„  d   QhRRRR/# )r   ÚtoolsúOptional[list[dict[str, Any]]]r   r   )r   s   "r   r   r   ”  s   € ÷ ñ Ð:ð ÐFdñ r   c                óð  € T ;'       g    .  Uu. uF-  p\        V\        4      '       d   VP                  R/ 4      M/ NK/  	  ppV Uu. uF’  p\        VP                  R4      4      '       g   K%  RRRVR,          RVP                  RR4      R\        VP                  R4      \        4      '       d   VP                  R4      MRRVP                  RRR	R
/ /4      /NK”  	  ppT;'       g    R# u upi u upi )zIConvert chat-completions tool schemas to Responses function-tool schemas.Úfunctionr>   r\   Údescriptionr4   ÚstrictFÚ
parametersÚobjectÚ
propertiesN)r+   r`   ra   r†   r   )r9  rY   ÚfnsÚfnró   s   &    r   Ú_responses_toolsrD  ”  sò   € àRW×R]ÐR]Ð[]ÐR]Ó
^ÑR]È$¤z°$¼×'=Ò'=ˆ4�8‰8�J Ô#À2ÒEÑR]€CÐ
^ñ óñ ˆBœ 2§6¡6¨&£>×2ô	
Ø�J ¨¨6­
°MÀ2Ç6Á6È-ÐY[ÓC\Ø¬*°R·V±V¸HÓ5EÄt×*LÒ*L�b—f‘f˜XÔ&ÐRWØ˜"Ÿ&™& °¸À,ÐPRÐ/SÓTó	
ñ
 ð ð ð ×Ð˜Ðùò _ùòs   �3C.Á"C3Á/A1C3r—   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r‚   r   r—   r   r   r   )r   s   "r   r   r   ¤  s'   € ÷ Gñ G¨sð GÀð GÐVYñ Gr   c               óÌ   € \        V \        4      '       d?   V P                  4       P                  4       P	                  RR4      P	                  RR4      MRpV\
        9   d   V# T# )z”Normalize a replayed assistant message status, modulo case/hyphen spelling, so incomplete Codex
continuation turns are not falsely marked completed.r:   Ú_r÷   N)r+   r   r%   rA   r  Ú_RESPONSE_MESSAGE_STATUSES)r‚   r—   Ústatuss   &$ r   Ú#_normalize_responses_message_statusrJ  ¤  sX   € ô KUÐUZÔ\_×J`ÒJ`ˆU�[‰[‹]× Ñ Ó"×*Ñ*¨3°Ó4×<Ñ<¸SÀ#ÔFÐfj€FØÔ9Ô9ˆ6ÐF¸wÐFr   Úitem_idÚphasec          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   rÖ   rí   rI  r   rK  r   rL  r   r�   r   )r   s   "r   r   r   «  s4   € ÷ ñ Ø!ðØ.1ðØ<IðØYfðàñr   c               ó�   € RRRRRVRV /pTP                  RV3RV33 UUu/ uF  w  rVV'       g   K  WVbK  	  upp4       V# u uppi )	zKAssistant ``message`` item; ``id``/``phase`` are added only when non-empty.r\   Úmessagerd   re   rI  rÖ   ÚidrL  )Úupdate)rÖ   rI  rK  rL  rY   ÚkÚvs   &$$$   r   Ú_message_itemrT  «  sZ   € ð # I¨v°{ÀHÈfÐV_ÐahÐi€DØ‡K�K D¨' ?°W¸eÐ4DÑ"EÔKÑ"E™$˜!Ì”�’Ñ"EÒKÔLØ€Kùó Ls
   ¡A
²A
Ú
commentaryÚfinal_answerc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rd   r   rÖ   r   rL  r   r�   r   )r   s   "r   r   r   ·  s(   € ÷ ñ ˜Sð ¨3ð °sð Ànñ r   c                óX   € RRRV RV/pV R8X  d   \        V4      ;p\        9   d   WCR&   V# )a  Plain ``message`` input item for ``role``. ``type`` is required: llama.cpp's ``/v1/responses``
parser rejects a typeless assistant item ("Cannot determine type of 'item'"). Assistant ``phase``
is forwarded only for values the API accepts on input messages; others would 400.r\   rO  rd   rÖ   re   rL  )r�   Ú_ROLE_MESSAGE_PHASES)rd   rÖ   rL  rY   Úcleaneds   &&&  r   Ú_role_message_itemr[  ·  s<   € ð �I˜v t¨Y¸Ð@€DØˆ{Ô¬>¸%Ó+@Ð @ ÔEYÔYØˆW‰Ø€Kr   Úcurrent_issuer_kindc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r   Úrawr�   rÖ   rí   r   r   r\  r   r   r   )r   s   "r   r   r   Á  s6   € ÷ ñ Ø	ðØ"6ðØPTðà&ðð ñr   c               óþ  € V P                  R4      V P                  R4      rTV'       * ;'       d4    \        V4      ;'       d!    \        VP                  4       4      \        8*  pV'       d/   VR8X  d(   VP                  4       P                  R4      '       g   Rp\        T\        V P                  R4      4      V'       d   VP                  4       MR\        V4      '       d   VP                  4       R7      # RR7      # )	uª  Replayable assistant ``message`` item from a stored one. ``id`` is kept only when short enough and never for
GitHub Copilot (ids bind to a backend connection; stale â†’ 401); ``phase`` is preserved per OpenAI's cache guidance.
The ChatGPT Codex backend additionally rejects ids that do not begin with ``msg`` (foreign Responses issuers
mint short UUIDs), so those are dropped there while other issuers' policies are unchanged.rP  rL  r"   rj   FrI  N©rI  rK  rL  )ra   r†   r-   r%   r  r,   rT  rJ  )r^  rÖ   r   r\  rK  rL  Úkeep_ids   &&$$   r   Ú_assistant_message_itemrb  Á  s¿   € ð —W‘W˜T“] C§G¡G¨GÓ$4ˆUØ%Ô%×vÐv¬)°GÓ*<×vÐvÄÀWÇ]Á]Ã_ÓAUÔYvÑAv€GßÐ&¨/Ô9À'Ç-Á-Ã/×B\ÑB\Ð]b×BcÒBcØˆÜØÔ;¸C¿G¹GÀHÓ<MÓNß#*�—‘”°ÌYÐW\×M]ÒM]¸E¿K¹K»Môð àcgôð r   Úcurrent_issuer_modelc               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r   rj   r�   Úseen_item_idsr½   r\  r   rc  Únative_compaction_eligibler   r   rí   r   )r   s   "r   r   r   Ó  s>   € ÷ %ñ %Ø	ð%Ø+.ð%ØERð%à'ð%àLPð%ð ñ%r   c          	     ó  € . p\        V P                  R4      4       EFZ  p\        V\        4      '       d   VP                  R4      '       g   K3  VP                  R4      pV'       d   Wq9   g   VP                  R4      R8X  d   V'       g   Kr  \	        VP                  R4      4      pVP                  R4      p	VRJ;'       d    VRJ;'       d    W‚8g  p
\        W)V4      '       * pV
'       g	   V'       d)   \        '       g   \        P                  R	W‰W#4       R
sEK  TP                  VP                  4        UUu/ uF  w  rÍVR9  g   K  WÍbK  	  upp4       V'       g   EKI  VP                  V4       EK]  	  V# u uppi )aç  Replay persisted encrypted reasoning/compaction items for one assistant turn. Skips duplicate
ids, ``compaction`` checkpoints unless THIS request carries ``context_management`` (else a persisted
checkpoint erases pre-checkpoint history on a model that cannot decrypt it), and items stamped by
another issuer or model (HTTP 400). Items without a model stamp (legacy or unstamped) replay on a
matching issuer. ``id`` (store=False lookups 404) and the Hermes provenance fields are stripped.rf   Úencrypted_contentrP  r\   r]   r^   r_   Nu±   Dropping reasoning item minted by %s/%s while calling %s/%s â€” encrypted_content is sealed to its issuer and model. This happens when a session switches model mid-conversation.T)rP  r^   r_   )r”   ra   r+   r`   r.   rR   Ú_CROSS_ISSUER_WARN_EMITTEDÚloggerÚwarningrñ   rk   Úadd)rj   re  r\  rc  rf  ÚreplayedÚrirK  Úitem_issuerrN   Úforeign_issuerÚforeign_modelrR  rS  s   &$$$$         r   Ú_replay_reasoning_itemsrr  Ó  s@  € ð &(€HÜ�s—w‘wÐ6Ó7×8ˆÜ˜2œt×$Ò$¨¯©Ð0C×)DÒ)DÙØ—&‘&˜“,ˆß˜Ô0°b·f±f¸V³nÈÔ6T×]wÙÜ,¨R¯V©V°NÓ-CÓDˆØ—V‘V˜OÓ,ˆ
Ø,°DÐ8×{Ð{¸[ÐPTÐ=T×{Ð{ÐYdÑY{ˆô
 1Ð1DÐRfÓgÔgˆßŸ]ß-Ó-Ü—‘ðsàÐ-@ôð
 .2Ð*ÚØ�‰¨"¯(©(¬*Ôi©*¡$ !¸ÐAhÑ8hœ˜š©*ÒiÔjßŠ7Ø×Ñ˜g×&ñ3 9ð4 €Oùó js   Ä=E>ÅE>c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rj   r�   r   r   r\  r   r   rí   r   )r   s   "r   r   r   û  s,   € ÷ ñ Ø	ðØ15ðØLYðàñr   c               ó  € . p\        V P                  R4      4      ;'       ge    \        ;QJ d4    R \        V P                  R4      4       4       F  '       g   K   RM)	  RM%! R \        V P                  R4      4       4       4      p\        V P                  R4      4       EFT  p\	        V\
        4      '       d-   VP                  R4      R8X  d   VP                  R	4      R
8X  g   KH  \        VP                  R4      4       Uu. uFw  p\	        V\
        4      '       g   K  \        VP                  R4      ;'       g    R4      P                  4       \        9   g   KX  RRR\        VP                  RR4      4      /NKy  	  ppV'       g   Kí  V'       dD   VP                  R4      '       d-   VP                  4        UU	u/ uF  w  r‰VR8w  g   K  W‰bK  	  ppp	VP                  \        WWWR7      4       EKW  	  V# u upi u up	pi )uz  Replay exact assistant message items (id/phase) for prefix-cache hits.

A ``msg_*`` id minted in the same response as a ``reasoning`` item is bound to that item's ``rs_*`` id,
which ``_replay_reasoning_items`` always strips (store=False). Replaying the message id alone is a
deterministic HTTP 400 ("provided without its required 'reasoning' item", #97427/#97442), so the message
id is dropped whenever its turn carried encrypted reasoning â€” replayed, suppressed, foreign-issuer or
trimmed by the transport (``codex_reasoning_trimmed``) â€” and the message goes out as content/status/phase
only. Reasoning-free turns keep their id.
Úcodex_reasoning_trimmedc              3  ót   "  € T F.  p\        V\        4      ;'       d    VP                  R 4      x € K0  	  R# 5i)rh  N)r+   r`   ra   )r<   rn  s   & r   r?   Ú(_replay_message_items.<locals>.<genexpr>  s1   é € ð JÙGqÀŒ
�2”tÓ×<Ð< §¡Ð(;Ó!<Ô<ÓGqùs   ‚8ž8rf   TFÚcodex_message_itemsr\   rO  rd   re   rÖ   r4   r|   rp   rP  ©r   r\  )r   ra   r¼   r”   r+   r`   r   r%   Ú_OUTPUT_TEXT_TYPESr�   rk   rñ   rb  )
rj   r   r\  rm  Úlinked_to_reasoningÚraw_itemrœ   rÖ   rR  rS  s
   &$$       r   Ú_replay_message_itemsr}  û  s»  € ð &(€HÜ˜sŸw™wÐ'@ÓAÓB÷ ð ÇcÃcñ JÜGOÐPS×PWÑPWÐXoÓPpÔGqóJÇcÇcÂcñ JÜGOÐPS×PWÑPWÐXoÓPpÔGqóJó GÐô ˜SŸW™WÐ%:Ó;×<ˆÜ˜8¤T×*Ò*¨x¯|©|¸FÓ/CÀyÔ/PÐU]×UaÑUaÐbhÓUiÐmxÔUxÙô ! §¡¨iÓ!8Ô9ó
á9�Ü˜$¤×%ô Qä*-¨d¯h©h°vÓ.>×.DÐ.DÀ"Ó*E×*KÑ*KÓ*MÔQcÑ*cô QˆV�] F¬M¸$¿(¹(À6È2Ó:NÓ,OÓPÙ9ð 	ð 
÷
 ‰7ß" x§|¡|°D×'9Ò'9Ø-5¯^©^Ô-=ÔKÑ-=¡T QÀÀdÁœD˜AšDÑ-=�ÑKØ�O‰OÔ3ØÐ7Jô÷ ñ =ð €Oùò
ùó Ls$   ÄG>Ä$G>ÅG>Å!#G>ÇHÇHc                  ó>   € ] tR tRtRtR R ltR R ltR R ltR	tR
# )Ú_WireCallIdsi  u8  Per-request wire ids for replayed tool pairs.

Stored call ids are minted per turn (``terminal:0``, ``terminal:1``â€¦), so the same id recurs on
later turns of one session. Replayed verbatim, strict Responses validators reject the whole
request with 400 "Duplicate function_call_output for call_id" and every retry of the turn fails
identically (#102629, #111231). Every occurrence past the first gets a ``_dup<n>`` wire id; the
matching tool output pops the id its ``function_call`` was given, in call order, so pairs stay
intact and the stored history is untouched.
c               ó   € V ^8„  d   QhRR/# )r   r   ÚNoner   )r   s   "r   r   Ú_WireCallIds.__annotate__'  s   € ÷ /ñ /˜$ñ /r   c                	ó"   € / V n         / V n        R # r„   )Ú_seenÚ_queue)Úselfs   &r   Ú__init__Ú_WireCallIds.__init__'  s   € Ø%'ˆŒ
Ø,.ˆŽr   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   r‚  +  s   € ÷ ñ  ð ¨ñ r   c                	ó  € \        V4      pV P                  P                  V^ 4      pV^,           V P                  V&   V^ 8X  d   TM\        V RV 24      pV P                  P	                  V. 4      P                  V4       V# )rH   Ú_dup)r  r„  ra   r…  Ú
setdefaultrñ   )r†  r  ÚbaseÚnÚwires   &&   r   Úfor_callÚ_WireCallIds.for_call+  st   € Ü'¨Ó0ˆØ�J‰J�N‰N˜4 Ó#ˆØ˜q�5ˆ�
‰
�4ÑØ˜A”v‰tÔ#;¸t¸fÀDÈÈÐ<LÓ#MˆØ�‰×Ñ˜t RÓ(×/Ñ/°Ô5Øˆr   c               ó    € V ^8„  d   QhRRRR/# r  r   )r   s   "r   r   r‚  3  s   € ÷ /ñ / #ð /¨#ñ /r   c                	ó„   € \        V4      pV P                  P                  V4      pV'       d   VP                  ^ 4      # T# ©rH   )r  r…  ra   rh   )r†  r  r�  Úqueues   &&  r   Ú
for_outputÚ_WireCallIds.for_output3  s3   € Ü'¨Ó0ˆØ—‘—‘ Ó%ˆß$ˆu�y‰y˜‹|Ð.¨$Ð.r   )r…  r„  N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r‡  r�  r–  Ú__static_attributes__r   r   r   r  r    s   † ñõ/õ÷/ñ /r   r  Úwire_idsc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rj   r�   Ústart_indexrV   rž  úOptional[_WireCallIds]r   rí   r   )r   s   "r   r   r   9  s,   € ÷ ñ Ø	ðØ),ðØ8Nðàñr   c               ó<  € . p\        V P                  R4      4       Fû  p\        V\        4      '       g   K  VP                  R/ 4      pVP                  R4      VP                  RR4      rv\	        V4      '       g   Kb  V\        V4      ,           p\        VP                  R4      VP                  R4      V\        V4      VRR	7      p	TP                  R
RRV'       d   VP                  V	4      M
\        V	4      R\        VRR7      R\        V4      /4       Ký  	  V# )zKConvert an assistant message's ``tool_calls`` into ``function_call`` items.Ú
tool_callsr<  r>   r¦   rª   r  rP  T©r%  r\   Úfunction_callrC  ©Úfallback)r”   ra   r+   r`   r†   r-   r)  r   rñ   r�  r  r   r­   )
rj   r   rž  rm  ÚtcrC  r#  r¦   r$  r  s
   &$$       r   Ú_replay_tool_call_itemsr©  9  só   € ð &(€HÜ�s—w‘w˜|Ó,Ö-ˆÜ˜"œd×#Ò#ÙØ�V‰V�J Ó#ˆØŸV™V F›^¨R¯V©V°KÀÓ-F�Ü˜×!Ò!ÙØœc (›mÕ+ˆÜ" 2§6¡6¨)Ó#4°b·f±f¸T³lÀGÌSÐQZË^Ð]bÐtxÔyˆØ�‰Ø�OØ·X�x×(Ñ(¨Ô1ÔC[Ð\cÓCdØÔ$ W°tÔ<¸kÔK\Ð]fÓKgð
ö 	ñ .ð €Or   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rj   r�   rž  r¡  r   rí   r   )r   s   "r   r   r   O  s(   € ÷ _ñ _˜Nð _Ð9Oð _Ð[oñ _r   c               óæ  € V P                  R4      p\        V4      w  r4\        V4      '       g1   \        V4      pVf"   \        V4      '       d   VP	                  4       p\        V4      '       g   . # V P                  R4      p\        V\        4      pV'       d   \        V4      ;'       g    RM\        T;'       g    R4      pV'       d   VP                  V4      M
\        V4      pRRRVRV/.# )zQConvert a tool-role message to ``[function_call_output]`` (``[]`` if unpairable).Útool_call_idrÖ   r4   r\   Úfunction_call_outputr  Úoutput)ra   r  r†   r  r%   r+   rg   rõ   r   r–  r  )	rj   rž  Úraw_tool_call_idr  Útool_response_item_idÚtool_contentÚis_partsÚoutput_valueÚwire_call_ids	   &$       r   Ú_tool_output_itemsrµ  O  sÚ   € à—w‘w˜~Ó.ÐÜ%=Ð>NÓ%OÑ"€GÜ�W×Òô -Ð-BÓCˆØŠ?œyÐ)9×:Ò:Ø&×,Ñ,Ó.ˆGÜ�W×ÒØˆ	à—7‘7˜9Ó%€LÜ˜,¬Ó-€HßRZÔ9¸,ÓG×MÐMÈ2øÔ`cÐdp×dvÐdvÐtvÓ`w€Lß3;�8×&Ñ& wÔ/ÔAYÐZaÓAb€LØÐ+¨Y¸ÀhÐP\Ð]Ð^Ð^r   Úreplay_encrypted_reasoningTrf  c               ó8   € V ^8„  d   QhRRRRRRRRRRR	RR
RRR/# )r   rT   rí   r   r   r   r¶  r\  r   rc  rf  r   r   )r   s   "r   r   r   c  sh   € ÷ vHñ vHØ"ðvHØ9=ðvHØ\`ðvHà $ðvHàBOðvHð (ðvHð MQðvHð ñ	vHr   c          
     ó4  aaaa€ . o. o\        4       p\        4       pVR8H  oR VV3R llp	V  EFÍ  p
\        V
\        4      '       g   K  V
P	                  R4      pVR8X  d   V	! \        W¨R7      V
4       KI  VR9  d   KR  V
P	                  R	R
4      p\        WËR7      p\        V4      o\        V\        4      '       d   R
P                  V3R lV 4       4      M
\        V4      pR VV3R llpVR8X  d&   T	! \        Y¿! T;'       g    T4      4      .V
4       Kí  V'       g   . M\        W§VWVR7      pV	! VV
4       \        W¢VR7      pV	! VV
4       RpV'       g/   T;'       g%    VP                  4       '       d   TMV'       d   R
MRp\        V
\!        S4      VRJ,           VR7      pVeE   VR
8X  d	   V'       g6   VR
8X  d   RMTpV	! \        RV! V4      V
P	                  R4      4      .V
4       V	! VV
4       EKÐ  	  V'       g   S# ^ RIHp V! SSR7      # )u/  Convert internal chat-style messages to Responses input items.

``is_xai_responses``: signature compatibility only (xAI DOES replay encrypted reasoning).
``replay_encrypted_reasoning``: per-session kill switch, threaded False by
``AIAgent._disable_codex_reasoning_replay`` after a repeat ``invalid_encrypted_content`` 400.
``is_github_responses``: drops ``id`` from replayed message items (Copilot 401s on stale ids).
``current_issuer_kind`` / ``current_issuer_model``: provenance guard; items stamped by another issuer or
model drop. Legacy items carrying only an endpoint stamp replay on a matching issuer.
``native_compaction_eligible``: THIS request carries ``context_management``; gates both replaying ``compaction``
checkpoints and ``prune_pre_checkpoint_items``. Checkpoints persist across model swaps / compression flips / resume,
so without the gate one checkpoint would erase pre-checkpoint history on a model that cannot decrypt it (lossless:
local history is never truncated).

Earlier (PR #26644, May 2026) we believed xAI's OAuth/SuperGrok ``/v1/responses`` surface rejected
replayed ``encrypted_content`` reasoning items minted by prior turns, and we stripped them. That
decision was wrong â€” xAI explicitly relies on Hermes threading encrypted reasoning back across turns for
cross-turn coherence (the whole point of their partnership integration). We now replay encrypted
reasoning on every Responses transport (xAI, native Codex, custom relays) and let xAI tell us explicitly
if a specific surface ever rejects a payload.
The Copilot backend (api.githubcopilot.com/responses) binds these ids to a specific backend "connection"
â€” credential-pool rotation, a gateway restart, or routine load-balancer churn between turns all
invalidate it â€” and rejects a stale id with HTTP 401 "input item ID does not belong to this connection"
even for short ids (see #32716). ``phase``/ ``status``/``content`` are still replayed; only ``id`` is
unsafe to reuse across a Copilot connection.
``native_compaction_eligible`` mirrors, for THIS request, the decision made by
``native_compaction.native_compaction_context_management`` â€” it is True only when that gate returned a
payload, i.e. when the request actually carries ``context_management``. It controls two things that must
never outlive the gate: replaying ``type: "compaction"`` checkpoint items, and restructuring the wire
around them (``prune_pre_checkpoint_items``). Checkpoints are persisted in the ``codex_reasoning_items``
sidecar and survive a mid-session model swap, a ``compression.enabled: false`` flip, the rejection kill
switch and a resumed session; without this flag a single captured checkpoint would keep deleting every
pre-checkpoint item from every later request, on a model that cannot decrypt the blob (#85914). Default
False = pre-feature wire, which is also correct for every caller that never sends ``context_management``
(auxiliary/compression client, ad-hoc ``convert_messages``). Dropping the checkpoint costs nothing:
Hermes' local history is never truncated by native compaction, so the full conversation is still on the
wire.
r"   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	new_itemsrí   rj   r�   r   r�  r   )r   s   "r   r   Ú7_chat_messages_to_responses_input.<locals>.__annotate__›  s"   € ÷ 4ñ 4Ð,ð 4°>ð 4Àdñ 4r   c                ón   <€ SP                  V 4       SP                  V.\        V 4      ,          4       R # r„   )Úextendr-   )rº  rj   Úitem_sourcesrk   s   &&€€r   ÚemitÚ/_chat_messages_to_responses_input.<locals>.emit›  s(   ø€ Ø�‰�YÔØ×Ñ˜S˜E¤C¨	£NÕ2Ö3r   rd   Útool)rž  rÝ   re   rÖ   r4   r£   c              3  óT   <"  € T F  qR ,          S8X  g   K  VR,          x € K  	  R# 5i)r\   rp   Nr   )r<   Úprò   s   & €r   r?   Ú4_chat_messages_to_responses_input.<locals>.<genexpr>«  s"   øé € ÐO¡} !¸&½	ÀYÑ8N”I�A�f—I’I£}ùs   ƒ(—(c               ó    € V ^8„  d   QhRRRR/# rÌ   r   )r   s   "r   r   r»  ®  s   € ÷ 	qñ 	q ð 	q¨ñ 	qr   c                óR   <€ S'       d   \        V \        4      '       d   R SRV /.# T # ©r\   rp   )r+   r   )r‚   rò   Útyped_text_onlys   &€€r   Úwire_contentÚ7_chat_messages_to_responses_input.<locals>.wire_content®  s+   ø€ ß;JÌzÐZ_Ôad×OeÒOe�V˜Y¨°Ð6Ð7ÐpÐkpÐpr   )re  r\  rc  rf  ry  N)r   rž  r÷   rL  )Úprune_pre_checkpoint_items)r¾  >   rÝ   re   )r½   r  r+   r`   ra   rµ  rõ   r¤   rg   rÂ   r�   r[  rr  r}  r%   r©  r-   Úagent.native_compactionrË  )rT   r   r   r¶  r\  rc  rf  re  rž  r¿  rj   rd   rÖ   Úcontent_partsÚcontent_textrÉ  Úreasoning_itemsÚmessage_itemsr§  Ú
tool_itemsÚfollowerrË  r¾  rk   rò   rÈ  s   &$$$$$$               @@@@r   Ú!_chat_messages_to_responses_inputrÓ  c  s  û€ ðT #%€Eð 46€LÜ›€MÜ‹~€Hð
 *¨_Ñ<€O÷4ñ 4ô ˆÜ˜#œt×$Ò$ÙØ�w‰w�v‹ˆØ�6Œ>ÙÔ# CÔ;¸SÔAÙØÐ,Ô,ÙØ—'‘'˜) RÓ(ˆÜ8¸ÔLˆÜ" 4Ó(ˆ	ô ˜'¤4×(Ò(ð �G‰GÔO¡}ÓOÔOÜ.;¸GÓ.Dð 	÷	qñ 	qà�6Œ>ÙÔ$ T¨<¸×8UÐ8UÈÓ+VÓWÐXÐZ]Ô^Ùß$>™"ÔD[ØÐBUØ!5ôE
ˆñ 	ˆ_˜cÔ"Ü-ØÐNaô
ˆñ 	ˆ]˜CÔ ØˆßØ$×sÐs¸×9KÑ9K×9MÒ9M©×YhÑSUÐnrˆHÜ,¨S¼cÀ%»jÈHÐ\`ÐL`Õ>aÐltÔuˆ
ð
 Ò¨°R¬¿JØ&¨"œn‘s°(ˆHÙÔ$ [±,¸xÓ2HÈ#Ï'É'ÐRYÓJZÓ[Ð\Ð^aÔbÙˆZ˜×ñS ÷p &ØˆÝBÙ% e¸,ÔGÐGr   c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR# )	ÚResponsesRouteFlagsiÜ  u¾  Which special Responses-API route an agent is talking to. Single owner of the
codex/xai/github predicates â€” every site must call :func:`classify_responses_route`.

Every site that needs these flags (request kwargs build, preflight estimation, silent- reject hints)
must call :func:`classify_responses_route` instead of re-implementing the string comparisons inline â€”
inline copies drift (backend-identity class: #22548/#70893/#59561/#72468).
r   r   r   r   r   N)r˜  r™  rš  r›  rœ  Ú__annotations__r�  r   r   r   rÕ  rÕ  Ü  s   ‡ ñð ÓØÓØ×r   rÕ  c               ó    € V ^8„  d   QhRRRR/# )r   Úagentr   r   rÕ  r   )r   s   "r   r   r   é  s   € ÷ ñ  Cð Ð,?ñ r   c                óü  a€ ^ RI Hp \        V RR4      p\        \        V RR4      ;'       g    R4      p\        \        V RR4      ;'       g    R4      P	                  4       ;'       g	    V! V4      o\        \        V RR4      ;'       g    T4      P	                  4       pR V3R	 llp\        VR
8H  ;'       g    V! R4      ;'       d    RV9   VR9   ;'       g    SR8H  V! R4      ;'       g	    V! R4      R7      # )z¦Classify the agent's Responses route from provider + base URL. Host checks are
exact-host-or-subdomain, never substring (``evil.com/models.github.ai`` is not GitHub).rI   ÚproviderNr   r4   Ú_base_url_hostnameÚ_base_url_lowerc               ó    € V ^8„  d   QhRRRR/# )r   Údomainr   r   r   r   )r   s   "r   r   Ú.classify_responses_route.<locals>.__annotate__ñ  s   € ÷ Eñ E˜ð E ñ Er   c                óN   <€ SV 8H  ;'       g    SP                  R V ,           4      # )r;   )Úendswith)rÞ  Úhostnames   &€r   Ú_host_isÚ*classify_responses_route.<locals>._host_isñ  s%   ø€ Ø˜6Ñ!×DÐD X×%6Ñ%6°s¸Vµ|Ó%DÐDr   zopenai-codexzchatgpt.comz/backend-api/codexzapi.x.aizmodels.github.aizgithubcopilot.com)r   r   r   >   Úxaiú	xai-oauth)rK   rJ   r™   r   rA   rÕ  )rØ  rJ   rÚ  r   rA   rã  râ  s   &     @r   Úclassify_responses_routerç  é  sô   ø€ õ (Ü�u˜j¨$Ó/€HÜ”7˜5 *¨bÓ1×7Ð7°RÓ8€HÜ”7˜5Ð"6¸Ó;×AÐA¸rÓB×HÑHÓJ×iÐiÑN_Ð`hÓNi€HÜ”˜Ð0°"Ó5×AÐA¸ÓB×HÑHÓJ€E÷Eð EäØ! ^Ñ3×rÐr¹ÀÓ8O×8qÐ8qÐThÐlqÑTqØ!Ð%9Ñ9×SÐS¸XÈÑ=SÙ$Ð%7Ó8×YÐY¹HÐEXÓ<Yôð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ  r   rT   rí   r   r:  r   )r   s   "r   r   r   ú  s$   € ÷ ñ ØðØ.ðà#ñr   c                ó  € \        V RR4      R8w  g   \        V\        4      '       g   R# \        V 4      P	                  4       p^ RIHp ^ RIHp V! V 3/ VB '       g   R# V! V 4      P                  R\        V RR4      4      p \        WR,          VR,          \        \        V R	R
4      4      \        RR\        V RR4      /VB \        V4      R
R7      pV#   \         d    \        P!                  RR
R7        R# i ; i)zMBuild the native-compaction-eligible wire items, or ``None`` when ineligible.Úapi_modeNÚcodex_responses)Ú$native_compaction_context_management)Úeffective_request_overridesr1   r   r   Ú_codex_reasoning_replay_enabledTr   )r   r   r¶  r\  rc  rf  zEnative Responses replay conversion failed; using the generic fallback)Úexc_infor   )r™   r+   rg   rç  Ú_asdictrÌ  rì  Úagent.fast_moderí  ra   rÓ  r   r(   r6   r   rj  Údebug)rØ  rT   Úrouterì  rí  Úeffective_modelrk   s   &&     r   Ú_native_responses_replay_itemsrõ  ú  s  € ô ˆu�j $Ó'Ð+<Ô<ÄJÈxÔY]×D^ÒD^ÙÜ$ UÓ+×3Ñ3Ó5€EÝLÝ;Ù/°Ñ?¸×?Ð?Ùá1°%Ó8×<Ñ<¸WÄgÈeÐU\Ð^bÓFcÓd€OðÜ1ØÐ-?Õ'@ÐV[Ð\qÕVrÜ'+¬G°EÐ;\Ð^bÓ,cÓ'dÜ :Ñ nÄGÈEÐS]Ð_cÓDdÐ nÐhmÑ nÜ!5°oÓ!FØ'+ô
ˆð €Løô ô Ü�‰ØSØð 	ô 	
ò ðús   ÂAC Ã"C?Ã>C?c               ó$   € V ^8„  d   QhRRRRRR/# )r   rØ  r   rT   rí   r   r   r   )r   s   "r   r   r     s$   € ÷ ,ñ ,Øð,Ø.ð,à	ñ,r   c                ó@   € \        W4      pVf   R# ^ RIHp V! V4      # )zEWhether the current route would replay a persisted native checkpoint.F)Úhas_compaction_checkpoint)rõ  rÌ  rø  )rØ  rT   rk   rø  s   &&  r   Ú+has_replayable_native_compaction_checkpointrù    s$   € ô +¨5Ó;€EØ‚}ÙÝAÙ$ UÓ+Ð+r   Úsystem_promptr4   r9  c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rØ  r   rT   rí   rú  r   r9  r:  r   zOptional[int]r   )r   s   "r   r   r   #  s;   € ÷ `ñ `Øð`Ø.ð`ØBEð`ØSqð`àñ`r   c               óX   € \        W4      pVf   R# ^ RIHp T! YB;'       g    RVR7      # )aÖ  Estimate tokens for the checkpoint-pruned Responses payload (the full transcript overstates a natively compacted
session and fires local compression needlessly). None when native compaction is not proven eligible or conversion fails.

Automatic preflight previously counted the full durable transcript. On a natively compacted Codex
session that overstates the wire by several times and fires local compression against history the main
request will never send (#96155).
N)Úestimate_request_tokens_roughr4   )rú  r9  )rõ  r5   rý  )rØ  rT   rú  r9  rk   rý  s   &&$$  r   Ú*estimate_native_responses_preflight_tokensrþ  #  s/   € ô +¨5Ó;€EØ‚}ÙÝBÙ(¨×>QÐ>QÈrÐY^Ô_Ð_r   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	tR
# )Ú_PreflightCtxi6  zCallable[[str], str]Úsanitize_textr   Úsanitize_harmony_tokensr   r½   Úseen_idsr   N)r˜  r™  rš  r›  rÖ  r�  r   r   r   r   r   6  s   ‡ Ø'Ó'Ø!Ó!ØÓØ‡Mr   r   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   rY   r�   ÚidxrV   Úctxr   r   r   )r   s   "r   r   r   =  s)   € ÷ 	ñ 	 >ð 	¸ð 	À-ð 	ÐTbñ 	r   c                óZ  € V P                  R 4      V P                  R4      rC\        V4      '       g   \        RV R24      h\        V4      '       g   \        RV R24      hRRR VP                  4       R\	        VRR7      R	VP                  \        V P                  R	R
4      4      4      /# )r  r>   úCodex Responses input[z#] function_call is missing call_id.z ] function_call is missing name.r\   r¥  rC  r¦  r¦   rª   )ra   r†   rÔ   r%   r   r  r­   )rY   r  r  r  r>   s   &&&  r   Ú_preflight_function_callr
  =  s£   € Ø—H‘H˜YÓ'¨¯©°&Ó)9ˆTÜ�W×ÒÜÐ1°#°Ð6YÐZÓ[Ð[Ü�T�?Š?ÜÐ1°#°Ð6VÐWÓXÐXà� ¨G¯M©M«O¸VÔEUÐVZÐeiÔEjØ�S×&Ñ&Ô'8¸¿¹À+ÈtÓ9TÓ'UÓVðð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r   I  s/   € ÷ `ñ `¨.ð `¸sð `Èð `Ð[iñ `r   c           
     óÌ  € V P                  R 4      p\        V4      '       g   \        RV R24      hV P                  RR4      p\        V\        4      '       dÝ   . pV FÇ  p\        V\
        4      '       d   VP                  R4      MRpVR8X  dN   \        VP                  R4      4      '       d.   VP                  RRRVP                  VR,          4      /4       K€  VR	8X  g   K‰  \        VP                  R
4      4      '       g   K«  VP                  \        VRR7      4       KÉ  	  T;'       g    RpMVP                  \        V4      4      pRRR VP                  4       RV/# )r  r	  z*] function_call_output is missing call_id.r®  r4   r\   Nr¢   rp   r~   r}   Frï   r­  )ra   r†   rÔ   r+   rg   r`   r‰   rñ   r  rë   r�   r%   )	rY   r  r  r  r®  rZ  rœ   rÛ   r³  s	   &&&      r   Ú_preflight_function_call_outputr  I  s'  € Ø�h‰h�yÓ!€GÜ�W×ÒÜÐ1°#°Ð6`ÐaÓbÐbØ�X‰X�h Ó#€FÜ�&œ$×Òà(*ˆÛˆDÜ(2°4¼×(>Ò(>�D—H‘H˜VÔ$ÀDˆEØ˜Ô$¬°t·x±xÀÓ7G×)HÒ)HØ—‘ ¨°f¸c×>OÑ>OÐPTÐU[ÕP\Ó>]Ð^Ö_Ø˜-Ö'¬M¸$¿(¹(À;Ó:O×,PÔ,PØ—‘Ô0°ÀeÔLÖMñ ð $ŸM˜M r‰à×(Ñ(¬°vÓ)>Ó?ˆØÐ*¨I°w·}±}³ÈÐR^Ð_Ð_r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rY   r�   r  rV   r  r   r   rà   r   )r   s   "r   r   r   ]  s)   € ÷ ñ ˜~ð °Cð ¸mð ÐPhñ r   c                ó�  € V P                  R4      p\        V4      '       g   R# V R,          R8X  d   RRRV/# V P                  R4      p\        V4      '       d.   WBP                  9   d   R# VP                  P                  V4       \	        V P                  R4      4      pRRRTRVP
                  '       d   \        V4      /# T/# )z]``reasoning`` / ``compaction`` items: opaque, issuer-sealed; forward only API-defined fields.rh  Nr\   r]   rP  ÚsummaryÚ	reasoning)ra   r‰   r  rl  r”   r  rÓ   )rY   r  r  Ú	encryptedrK  r  s   &&&   r   Ú_preflight_encryptedr  ]  s¼   € à—‘Ð,Ó-€IÜ˜×#Ò#ÙØˆF…|�|Ô#Ø˜Ð&9¸9ÐEÐEà�h‰h�t‹n€GÜ�W×ÒØ—l‘lÔ"ÙØ�‰×Ñ˜Ô!Ü�t—x‘x 	Ó*Ó+€Gà�Ð0°)Ø¸S×=X×=XÐ=XÔ0°Ó9ðð à^eðð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r   q  s.   € ÷ jñ j˜^ð j°#ð j¸Mð jÈnñ jr   c                óà  a € S P                  R 4      pS P                  R4      R8H  ;'       dS    \        V\        4      ;'       d;    \        ;QJ d    V 3R lR 4       F  '       g   K   RM	  RM! V 3R lR 4       4      pV'       g   \	        S W4      # . p\        V4       Fœ  w  rg\        V\        4      '       g   \        RV RV R24      hVP                  R	4      pV\        9  d   \        RV RV R
V: R24      hVP                  R	RRVP                  \        VP                  RR4      4      4      /4       Kž  	  V'       g   \        RV R24      h\        S WRP                  R7      # )rÖ   rd   re   c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5ir„   r   )r<   rÐ   rY   s   & €r   r?   Ú%_preflight_message.<locals>.<genexpr>x  s   øé € Ð8Ñ'7 �t–Ó'7ùs   ƒTFr	  z] message content[ú] must be an object.r\   ú] has unsupported type r;   r|   rp   r4   z3] message item must contain at least one text part.)r   )rP  rI  )ra   r+   rg   r¼   Ú_preflight_role_messagerÁ   r`   rÔ   rz  rñ   r  r�   rb  r   )	rY   r  r  rÖ   Úis_replayed_assistantÚnormalized_contentÚpart_idxrœ   Ú	part_types	   f&&      r   Ú_preflight_messager  q  sc  ø€ ð �h‰h�yÓ!€Gà�‰�Ó˜KÑ'÷ 	9ð 	9¬J°wÄÓ,E÷ 	9ð 	9ß‹CÔ8Ñ'7Ó8�C�CŠCÔ8Ñ'7Ó8Ó8ð ÷ !Ü& t¨SÓ6Ð6ØÐÜ# GÖ,‰ˆÜ˜$¤×%Ò%ÜÐ5°c°UÐ:LÈXÈJÐVjÐkÓlÐlØ—H‘H˜VÓ$ˆ	ØÔ.Ô.ÜØ(¨¨Ð-?À¸zÐI`ÐajÑ`mÐmnÐoóð ð 	×!Ñ! 6¨=¸&À#×BSÑBSÔTaÐbf×bjÑbjÐkqÐsuÓbvÓTwÓBxÐ"yÖzñ -÷ ÜÐ1°#°Ð6iÐjÓkÐkÜ" 4Ð);×QhÑQhÔiÐir   c               ó(   € V ^8„  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r   ‹  s/   € ÷ Bñ B .ð B°sð BÀð BÐSañ Br   c                ó  € V P                  R4      pVR9  d'   \        RV RV P                  R4      : RV: R24      hV P                  RR4      p\        V\        4      '       g4   \	        W2P                  \        V4      4      V P                  R	4      4      # \        V4      p. p\        V4       EF;  w  rx\        V\        4      '       d1   V'       d'   VP                  RVR
VP                  V4      /4       KJ  KL  \        V\        4      '       g   \        RV RV R24      h\        V4      ;p	\        9   df   VP                  R
R4      p
\        V
\        4      '       d   T
M\        T
;'       g    R4      p
VP                  RVR
VP                  V
4      /4       Kï  V	\        9   d    VP                  \        WƒRR7      4       EK  \        RV RV RVP                  R4      : R24      h	  \	        W6V P                  R	4      4      # )zY``user``/``assistant`` role message, typed or untyped; string content or Responses parts.rd   r	  z#] has unsupported item shape (type=r\   z, role=z).rÖ   r4   rL  rp   z
].content[z] must be an object or string.Trï   r  r;   >   rÝ   re   )ra   rÔ   r+   rg   r[  r  r�   r¤   rÁ   r   rñ   r`   rŸ   rÙ   rÚ   rë   )rY   r  r  rd   rÖ   rò   Ú	validatedr  rœ   rÛ   rp   s   &&&        r   r  r  ‹  sç  € à�8‰8�FÓ€DØÐ(Ô(ÜØ$ S EÐ)LÈTÏXÉXÐV\ÓM]ÑL`Ð`gÐhlÑgoÐoqÐró
ð 	
ð �h‰h�y "Ó%€GÜ�gœt×$Ò$Ü! $×(9Ñ(9¼-ÈÓ:PÓ(QÐSW×S[ÑS[Ð\cÓSdÓeÐeô ˜tÓ$€IØ&(€IÜ# G×,‰ˆÜ�dœC× Ò ßØ× Ñ  &¨)°V¸S×=NÑ=NÈtÓ=TÐ!UÖVñ ä˜D¤$×'Ò'ÜÐ5°c°U¸*ÀXÀJÐNlÐmÓnÐnÜ! $Ó'Ð'ˆeÔ,<Ô<Ø—8‘8˜F BÓ'ˆDÜ% d¬C×0Ò0‘4´c¸$¿*¸*À"³oˆDØ×Ñ˜f i°¸×9JÑ9JÈ4Ó9PÐQÖRØÔ'Ô'Ø×ÑÔ.¨tÈ$ÔO×PäØ(¨¨¨Z¸°zÐAXÐY]×YaÑYaÐbhÓYiÑXlÐlmÐnóð ñ -ô  ˜d¨t¯x©x¸Ó/@ÓAÐAr   r¥  r­  r  r]   rO  z2dict[str, Callable[..., Optional[dict[str, Any]]]]Ú_PREFLIGHT_ITEM_HANDLERSr  c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú	raw_itemsr   r   r   r  r   rí   r   )r   s   "r   r   r   ²  s,   € ÷ ñ ØðØ,0ðØSWðàñr   c               óâ  € \        V \        4      '       g   \        R 4      hV'       d   \        MR p\	        W2V\        4       4      p. p\        V 4       F–  w  rg\        V\        4      '       g   \        RV R24      hVP                  R4      p\        V\        4      '       d   \        P                  V4      MRp	T	;'       g    \        ! WvV4      p
V
f   K…  VP                  V
4       K˜  	  V# )z4Codex Responses input must be a list of input items.c                ó   € V # r„   r   )rp   s   &r   Ú<lambda>Ú._preflight_codex_input_items.<locals>.<lambda>·  s   € Ñ]ar   r	  r  r\   N)r+   rg   rÔ   rÊ   r   r½   rÁ   r`   ra   r   r#  r  rñ   )r%  r   r  r  r  Ú
normalizedr  rY   Ú	item_typeÚhandlerÚnormalized_items   &$$        r   Ú_preflight_codex_input_itemsr.  ²  s×   € ô �i¤×&Ò&ÜÐOÓPÐPß2IÕ.ÑPa€MÜ
˜Ð@SÔUXÓUZÓ
[€CØ')€JÜ˜yÖ)‰	ˆÜ˜$¤×%Ò%ÜÐ5°c°UÐ:NÐOÓPÐPØ—H‘H˜VÓ$ˆ	Ü=GÈ	ÔSV×=WÒ=WÔ*×.Ñ.¨yÔ9Ð]aˆØ"×=Ð=Ô&=Ð=¸tÈ#ÓNˆØÔ&Ø×Ñ˜oÖ.ñ *ð Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÁ  r   r  rV   r   r�   r   )r   s   "r   r   r   Å  s!   € ÷ ñ ˜#ð  Cð ¨Nñ r   c                óJ  € \        V \        4      '       g   \        R V R24      hV P                  R4      pV\        9   d   \        V 4      # VR8w  d#   \        R V RV P                  R4      : R24      hV P                  R4      V P                  R4      rC\        V4      R3\        V\        4      R	33 F  w  rVV'       d   K  \        R V R
V R24      h	  RRRVP                  4       R\        V P                  RR4      4      R\        V P                  RR4      4      RV/# )zCodex Responses tools[r  r\   r<  r  r;   r>   r?  za valid namezvalid parametersz] is missing r=  r4   r>  F)	r+   r`   rÔ   ra   Ú_RESPONSES_BUILTIN_TOOL_TYPESr†   r%   r�   r   )rÁ  r  Ú	tool_typer>   r?  ÚokÚwhats   &&     r   Ú_preflight_toolr5  Å  s"  € Ü�dœD×!Ò!ÜÐ1°#°Ð6JÐKÓLÐLØ—‘˜Ó €IØÔ1Ô1Ü�D‹zÐØ�JÔÜÐ1°#°Ð6MÈdÏhÉhÐW]ÓN^ÑMaÐabÐcÓdÐdØ—x‘x Ó'¨¯©°,Ó)?ˆ*Ü “o ~Ð6¼ÀJÔPTÓ9UÐWiÐ8jÓk‰ˆß‰rÜÐ5°c°U¸-ÈÀvÈQÐOÓPÐPñ lð 	�
˜F D§J¡J£L°-ÄÈtÏxÉxÐXeÐgiÓOjÓAkØ”$�t—x‘x ¨%Ó0Ó1°<Àðð r   c                ó"   € \        V \        4      # r„   )r+   r`   ©rS  s   &r   r(  r(  Ú  s   € œJ q¬$Ô/r   Úincludec                ó"   € \        V \        4      # r„   r“   r7  s   &r   r(  r(  Û  s   € œ* Q¬Ô-r   Úservice_tierc                óH   € \        V \        4      ;'       d    \        V 4      # r„   )r+   r`   r   r7  s   &r   r(  r(  Þ  s   € ”z !¤TÓ*×6Ð6¬t°A«wÐ6r   Úmax_output_tokensc                óH   € \        V \        \        34      ;'       d    V ^ 8„  # r”  ©r+   rV   Úfloatr7  s   &r   r(  r(  ß  s   € ¤J¨q´3¼°,Ó$?×$IÐ$IÀAÈÁEÐ$Ir   Útimeoutc                ó¶   € \        V \        \        34      ;'       d=    \        V \        4      '       * ;'       d     ^ T u;8  ;'       d    \        R4      8  # u # )rH   Úinf)r+   rV   r?  r   r7  s   &r   r(  r(  à  sH   € œ* Q¬¬e¨Ó5×jÐj¼jÈÌDÓ>QÔ:Q×jÐjÐVWÐZ[×VjÔVjÔ^cÐdiÓ^jÑVjÐjÑVjÐjr   Útemperaturec                ó.   € \        V \        \        34      # r„   r>  r7  s   &r   r(  r(  á  s   € œj¨¬S´%¨LÔ9r   c              #  ó.   "  € T F  pVR  R3x € K  	  R# 5i)c                ó
   € V R J# r„   r   r7  s   &r   r(  Ú<genexpr>.<lambda>ä  s   € ˜ ™r   Nr   rÏ   s   & r   r?   r?   ã  s   é € ð ágˆCð 
Ñ% tÕ,Ûgùs   ‚Úcontext_managementc                óH   € \        V \        4      ;'       d    \        V 4      # r„   )r+   rg   r   r7  s   &r   r(  r(  è  s   € ¤Z°´4Ó%8×%DÐ%D¼TÀ!»WÐ%Dr   zMtuple[tuple[str, Callable[[Any], bool], Optional[Callable[[Any], Any]]], ...]Ú_PREFLIGHT_OPTIONAL_FIELDSc              #  ó,   "  € T F
  w  p q!x € K  	  R # 5ir„   r   )r<   rÐ   rG  s   &  r   r?   r?   í  s   é € Ð6Ñ5‰iˆc�1�a„cÓ5ùs   ‚c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
api_kwargsr�   rÐ   r   r   rà   r   )r   s   "r   r   r   ñ  s"   € ÷ ñ ˜~ð °Cð Ð<Tñ r   c                óz   € V P                  V4      pVe&   \        V\        4      '       g   \        RV R24      hV# )NzCodex Responses request 'z' must be an object.)ra   r+   r`   rÔ   )rM  rÐ   r‚   s   && r   Ú_optional_dictrO  ñ  s=   € Ø�N‰N˜3Ó€EØÒ¤¨E´4×!8Ò!8ÜÐ4°S°EÐ9MÐNÓOÐOØ€Lr   Úallow_streamc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rM  r   rP  r   r   r  r   r�   r   )r   s   "r   r   r   ø  s6   € ÷ >ñ >Øð>Ø&*ð>ØIMð>à!ð>ð ñ>r   c               óæ  a a€ \        S \        4      '       g   \        R 4      h\        V 3R lR 4       4      ;p'       d   \        RRP	                  V4       R24      hS P                  R4      p\        V4      '       g   \        R4      h\        S P                  R4      4      P                  4       ;'       g    \        pV'       d   \        V4      p\        S P                  R4      W#R	7      pRVP                  4       RVRVR
R/pS P                  R4      p	V	ea   \        V	\        4      '       g   \        R4      h\        V	4       U
Uu. uF  w  r«\        Wº4      NK  	  pp
pV'       d   \        V4      MTVR&   S P                  R
R4      RJd   \        R4      h\          F;  w  rÞpS P                  V4      pV! V4      '       g   K'  V'       d	   V! V4      MTW�&   K=  	  \#        S R4      ;'       g    / p\$        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \        R4      hVP'                  4        UUu/ uF&  w  ppVf   K  VP                  4       \)        V4      bK(  	  pppV'       d   VVR&   \#        S R4      pV'       d   \        V4      VR&   S P                  R4      pV'       g   RS 9   d   \        R4      hV'       d   Ve   VRJd   \        R4      hRVR&   \)        S P                  R4      ;'       g    R4      P+                  4       P-                  R4      pV'       d4   VP                  R4      '       d    ^ RIHp V! VR,          4      w  VR&   p\4        V'       d   R0M	\7        4       ,          o\        V3R lS  4       4      ;p'       d   \        RRP	                  V4       R24      hV# u upp
i u uppi   \2         d     Lvi ; i)z'Codex Responses request must be a dict.c              3  ó8   <"  € T F  qS9  g   K  Vx € K  	  R # 5ir„   r   )r<   rÐ   rM  s   & €r   r?   Ú._preflight_codex_api_kwargs.<locals>.<genexpr>þ  s   øé € ÐdÑ(J ÐYcÑNcŸšÓ(Jùó   ƒ�
r1   ÚinstructionsÚinputz3Codex Responses request missing required field(s): z, r;   z;Codex Responses request 'model' must be a non-empty string.)r   r  ÚstoreFr9  z=Codex Responses request 'tools' must be a list when provided.z6Codex Responses contract requires 'store' to be false.Úextra_headersc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir„   )r†   rÏ   s   & r   r?   rT    s   é € Ð7© #Œy˜�~ˆ~«ùs   ‚TzGCodex Responses request 'extra_headers' keys must be non-empty strings.Ú
extra_bodyÚstreamzKCodex Responses stream flag is only allowed in fallback streaming requests.z/Codex Responses 'stream' must be true when set.r4   )Ústrip_slash_enumc              3  ó8   <"  € T F  qS9  g   K  Vx € K  	  R # 5ir„   r   )r<   rÐ   Úallowed_keyss   & €r   r?   rT  4  s   øé € ÐQ©: CÀLÑ9PŸCšC«:ùrU  z2Codex Responses request has unsupported field(s): )r1   rV  rW  )zgrok-z
x-ai/grok-)r+   r`   rÔ   ÚsortedrÂ   ra   r†   r�   r%   r   rÊ   r.  rg   rÁ   r5  rÓ   rJ  rO  Úallrk   r   rA   r,   Útools.schema_sanitizerr]  r   Ú_PREFLIGHT_ALLOWED_KEYSr½   )rM  rP  r   r  Úmissingr1   rV  Úinput_itemsr*  r9  r  rÁ  Únormalized_toolsrÐ   ÚacceptÚcoercer‚   rY  Únormalized_headersr[  r\  Úis_xai_modelr]  rG  Ú
unexpectedr_  s   f$$$                     @r   Ú_preflight_codex_api_kwargsrl  ø  sn  ù€ ô �j¤$×'Ò'ÜÐBÓCÐCÜÔdÑ(JÓdÓdÐd€wÖdÜÐNÈtÏyÉyÐY`ÓOaÐNbÐbcÐdÓeÐeØ�N‰N˜7Ó#€EÜ�U×ÒÜÐVÓWÐWÜ  §¡°Ó!?Ó@×FÑFÓH×bÐbÔLb€LßÜ1°,Ó?ˆÜ.Ø�‰�wÓÐ5Hô€Kð 	�—‘“ °¸gÀ{ÐT[Ð]bð"€Jð �N‰N˜7Ó#€EØÒÜ˜%¤×&Ò&ÜÐ\Ó]Ð]ÜHQÐRWÔHXÔYÑHX¹9¸3œO¨DÖ6ÑHXÐÑYßQhÔ;Ð<LÔMÐn~ˆ
�7ÑØ‡~�~�g˜uÓ%¨UÓ2ÜÐQÓRÐRß9Ñˆ�VØ—‘˜sÓ#ˆÙ�%�=Œ=ß/5™f Uœm¸5ˆJ‹Oñ  :ô # :¨Ó?×EÐEÀ2€Mß‹3Ñ7©Ó7�3�3Š3Ñ7©Ó7×7Ò7ÜÐbÓcÐcØDQ×DWÑDWÔDYÔoÑDY±j°c¸5Ð]bÔ1˜#Ÿ)™)›+¤s¨5£zÒ1ÑDYÐÑoßØ&8ˆ
�?Ñ#ô   
¨LÓ9€JßÜ#'¨
Ó#3ˆ
�<Ñ Ø�^‰^˜HÓ%€Fß˜H¨
Ô2ÜÐfÓgÐgß˜Ò*Ø˜ÓÜÐNÓOÐOØ#ˆ
�8Ñô �z—~‘~ gÓ.×4Ð4°"Ó5×;Ñ;Ó=×HÑHÐI`Óa€Lß˜
Ÿ™ w×/Ò/ð	Ý?Ù%5°jÀÕ6IÓ%JÑ"ˆJ�wÑ ô +¿L¨x©jÌcËeÕT€LÜÔQ©:ÓQÓQÐQ€zÖQÜÐMÈdÏiÉiÐXbÓNcÐMdÐdeÐfÓgÐgØÐùóM Zùó pøô, ô 	Ùð	ús$   ÅOÉ	OÉ OÍO" Ï"O0Ï/O0c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r   ÚtypeszOptional[set]r   z	list[str]r   )r   s   "r   r   r   ;  s&   € ÷ hñ h˜ð h Mð h¸Yñ hr   c                óÐ   € \        V 4       Uu. uF  q!e   \        VRR4      V9   g   K  VNK  	  ppR V 4        Uu. uF  p\        V4      '       g   K  VNK  	  up# u upi u upi )zVNon-empty ``.text`` of each part (optionally filtered by ``.type``); [] if not a list.Nr\   c              3  ó<   "  € T F  p\        VR R4      x € K  	  R# 5i©rp   N©r™   ©r<   rœ   s   & r   r?   Ú_text_chunks.<locals>.<genexpr>>  s   é € ÐOÁh¸dœg d¨F°D×9Ð9Ãhùó   ‚)r”   r™   r‰   )r  rn  rœ   Úselectedrp   s   &&   r   Ú_text_chunksrw  ;  sa   € ä!)¨%¤Ój¡˜²MÄWÈTÐSYÐ[_ÓE`ÐdiÑEi—�¡€HÐjÙOÁhÔOÓgÑO�TÔS`Ðae×Sf�DˆDÑOÑgÐgùò kùÚgs   ŽAªA½A#ÁA#c               ó    € V ^8„  d   QhRRRR/# ©r   rY   r   r   r   r   )r   s   "r   r   r   A  s   € ÷ 
#ñ 
#¨#ð 
#°#ñ 
#r   c                ó4  € . p\        \        V R4      4       F_  p\        VR4      pVR8X  d   \        VR4      MV\        9   d   \        VR4      MRp\        V4      '       g   KN  VP	                  V4       Ka  	  RP                  V4      P                  4       # )a  Assistant text from a Responses message output item. A ``refusal`` part carries the
model's explanation in ``refusal`` instead of ``text``; it is message text too, otherwise a
refusal-only turn reads as an empty response (sibling of chat_completions ``message.refusal``).rÖ   r\   Úrefusalrp   Nr4   )r”   rš   rz  r‰   rñ   rÂ   r%   )rY   Úchunksrœ   rÛ   rp   s   &    r   Ú_extract_responses_message_textr}  A  sˆ   € ð €FÜœ  iÓ0Ö1ˆÜ�t˜VÓ$ˆØ*/°9Ô*<Œv�d˜IÔ&Ð[`ÔdvÔ[vÄ6È$ÐPVÔCWð  }AˆÜ˜×ÔØ�M‰M˜$Öñ	 2ð
 �7‰7�6‹?× Ñ Ó"Ð"r   c               ó    € V ^8„  d   QhRRRR/# ry  r   )r   s   "r   r   r   N  s   € ÷ dñ d¨Cð d°Cñ dr   c                óæ   € \        \        V RR4      4      p\        V RR4      pV'       d    RP                  V4      P                  4       # \	        V\
        4      '       d   VP                  4       # R# )zPCompact reasoning text from a Responses reasoning item (summary, else ``text``).r  Nrp   Ú
r4   )rw  r™   rÂ   r%   r+   r   )rY   r|  rp   s   &  r   Ú!_extract_responses_reasoning_textr�  N  s\   € äœ' $¨	°4Ó8Ó9€FÜ�4˜ Ó&€Dß(.ˆ4�9‰9�VÓ×"Ñ"Ó$ÐcÄZÐPTÔVY×EZÒEZ°T·Z±Z³\ÐcÐ`bÐcr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	error_objr   Úresponse_statusr   r   r   )r   s   "r   r   r   U  s&   € ÷ 	~ñ 	~ sð 	~¸Sð 	~ÀSñ 	~r   c                ó¼   a € R V 3R llpV! R4      V! R4      rCV'       d   V'       d   V RV 2# T;'       g$    T;'       g    S '       d   \        S 4      # RV R2# )z›``"<code>: <message>"`` for a ``response.error`` payload (dict or object), else whichever
is present, else ``str(error_obj)``, else a status-based default.c               ó    € V ^8„  d   QhRRRR/# )r   r>   r   r   r   )r   s   "r   r   Ú-_format_responses_error.<locals>.__annotate__X  s   € ÷ Mñ M�Cð M˜Cñ Mr   c                óŽ   <€ \        SV 4      p\        V\        4      '       g	   V'       d   \        V4      P                  4       # R # )r4   )rš   r+   r   r%   )r>   r‚   rƒ  s   & €r   ÚfieldÚ&_format_responses_error.<locals>.fieldX  s5   ø€ Ü�y $Ó'ˆÜ%/°´s×%;Ò%;¿uŒs�5‹z×ÑÓ!ÐLÈ"ÐLr   ÚcoderO  z: zResponses API returned status 'Ú'rŒ   )rƒ  r„  r‰  Úcode_strÚmessage_strs   f&   r   Ú_format_responses_errorr�  U  se   ø€ ÷Mð Mñ " &›M©5°Ó+;ˆkß—KØ�˜2˜k˜]Ð+Ð+Ø×}Ð}˜(×}Ð}¿¤s¨9£~Ð}ÐJiÐjyÐizÐz{ÐH|Ð}r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rY   r   r+  r   r$  rV   r   r   r   )r   s   "r   r   r   c  s(   € ÷ ñ ˜cð ¨cð ¸#ð À/ñ r   c                ó~  € \        V RR4      ;'       g    Rp\        YR8X  d   RMRR4      p\        V\        4      '       g   \        P                  ! VRR7      p\        V R	R
4      p\        \        V RR
4      WSWBRR7      p\        T\        V\        4      '       d   TMR
4      p\        WfVR\        W4R7      R7      # )zPBuild a chat-style tool_call from a ``function_call``/``custom_tool_call`` item.r>   r4   r¥  r¦   rW  rª   Fr¨   rP  Nr  r¤  r<  )r>   r¦   )rP  r  r  r\   r<  )r™   r+   r   r«   r¬   r)  r7  r   )rY   r+  r$  r#  r¦   r"  r  Úfc_ids   &&&     r   Ú_response_tool_callr“  c  s­   € ä�d˜F BÓ'×-Ð-¨2€GÜ˜¸/Ô-I™kÈwÐX\Ó]€IÜ�i¤×%Ò%Ü—J’J˜y°uÔ=ˆ	Ü˜$  dÓ+€KÜœw t¨Y¸Ó=¸{ÐU^Ðw|Ô}€GÜ.¨wÄzÐR]Ô_b×GcÒGc¹ÐimÓn€EÜØ°eÀ*Ü  gÔCôð r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   rY   r   r+  r   rF   r   rU   r   rà   r   )r   s   "r   r   r   r  s4   € ÷ ñ Ø
ðØðØ,9ðØIVðàñr   c                ó&  € \        V RR4      p\        V4      '       g   R# RVRV/pV'       d   W%R&   V'       d   W5R&   VR8w  d   V# \        V RR4      p\        V\        4      '       d0   VP	                  R4      '       d   \
        P                  R	V4       R# \        V4      '       d   WeR&   \        V R
R4      p\        V\        4      '       d;   R V 4       pV U	u. uF!  p	\        V	\        4      '       g   K  RRRV	/NK#  	  up	VR
&   V# u up	i )zÍ``{type, encrypted_content[, _issuer_kind, _issuer_model]}`` for replay, or None without a blob. Reasoning
items also carry ``id`` + ``summary`` (required by the API on replay); transient ``rs_tmp_`` skip.rh  Nr\   r^   r_   r  rP  Úrs_tmp_z@Skipping transient Codex reasoning item during normalization: %sr  c              3  ó<   "  € T F  p\        VR R4      x € K  	  R# 5irq  rr  rs  s   & r   r?   Ú*_capture_encrypted_item.<locals>.<genexpr>‰  s   é € ÐA¹°”˜˜v t×,Ð,»ùru  Úsummary_textrp   )r™   r‰   r+   r   r,   rj  rò  rg   )
rY   r+  rF   rU   r  r|  rK  r  Útextsrp   s
   &&&&      r   Ú_capture_encrypted_itemr›  r  s  € ô
 ˜Ð1°4Ó8€IÜ˜×#Ò#ÙØ &¨	Ð3FÈ	ÐR€HßØ#.�Ñ ßØ$0�Ñ!Ø�KÔØˆÜ�d˜D $Ó'€GÜ�'œ3×Ò G×$6Ñ$6°y×$AÒ$AÜ�‰ÐWÐY`ÔaÙÜ�W×ÒØ �‰Ü�d˜I tÓ,€GÜ�'œ4× Ò ÙA¹ÓAˆÙRWÓqÑRWÈ$Ô[eÐfjÔlo×[pÔE ¨¸ÀÓEÑRWÑqˆ�ÑØ€Oùò rs   ÃDÃ<
Dc                  óB   € ] tR tRtRtR R ltRR R lltR R	 ltR
tR# )Ú_OutputScaniŽ  zMAccumulated view of one Responses ``output`` list (phase 1 of normalization).c               ó    € V ^8„  d   QhRRRR/# )r   r„  r   r   r�  r   )r   s   "r   r   Ú_OutputScan.__annotate__‘  s   € ÷ bñ b¨ð b¸$ñ br   c                	óª   € . . . uV n         V n        V n        . . uV n        V n        V\
        9   V n        VR9   V n        R;V n        ;V n	        V n
        R# )ÚqueuedFN>   r¡  Úin_progress)rÍ  Úreasoning_partsr£  Úreasoning_items_rawÚmessage_items_rawÚ_INCOMPLETE_STATUSESÚhas_incomplete_itemsÚ saw_streaming_or_item_incompleteÚsaw_commentary_phaseÚsaw_final_answer_phaseÚsaw_reasoning_item)r†  r„  s   &&r   r‡  Ú_OutputScan.__init__‘  s`   € ØDFÈÈBÐAˆÔ˜DÔ0°$´/Ø;=¸rÐ8ˆÔ  $Ô"8Ø$3Ô7KÑ$KˆÔ!Ø0?ÐC\Ñ0\ˆÔ-Ø\aÐaˆÔ!Ða DÔ$?À$ÖBYr   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r®  z	list[Any]rF   r   rU   r   r�  r   )r   s   "r   r   rŸ  ˜  s0   € ÷ cñ c˜9ð c°=ð cÐP]ð cÐimñ cr   c           
     	óÔ  € V EF`  p\        VR R4      p\        \        VRR4      4      pV\        9   d   V\        9  d   RV n        RV n        VR8X  d   V P                  WF4       Ke  VR9   dž   VR8X  d6   RV n        \        V4      pV'       d   V P                  P                  V4       \        WEW#4      pVeO   V P                  P                  V4       VR8X  d*   \        P                  R\        VR,          4      4       EK  EK  EK	  VR	8X  g   VR
8X  g   EK  V\        9  g   EK(  V P                   P                  \#        WE\        V P                   4      4      4       EKc  	  R# )r\   NrI  TrO  r  r]   z?Native Responses compaction item captured (%d chars encrypted).rh  Úcustom_tool_callr¥  >   r  r]   )r™   r�   r¦  Ú_SERVER_SIDE_TOOL_CALL_TYPESr§  r¨  Ú_messager«  r�  r£  rñ   r›  r¤  rj  Úinfor-   r£  r“  )	r†  r®  rF   rU   rY   r+  Úitem_statusÚreasoning_textr|  s	   &&&&     r   ÚscanÚ_OutputScan.scan˜  s=  € ÜˆDÜ  f¨dÓ3ˆIÜ(¬°°xÀÓ)FÓGˆKØÔ2Ô2°yÔHdÔ7dØ,0�Ô)Ø8<�Ô5Ø˜IÔ%Ø—‘˜dÖ0ØÐ9Ô9Ø Ô+Ø.2�DÔ+Ü%FÀtÓ%L�Nß%Ø×,Ñ,×3Ñ3°NÔCô 3°4ÀKÓ^�ØÒ'Ø×,Ñ,×3Ñ3°HÔ=Ø  LÔ0ÜŸ™Ø]Ô_bÐckÐlõ  dAó  `B÷ò 1ò (ð Ð0Ô0°YÀ/×5QÐVaÔi}×V}Ø—‘×&Ñ&Ô':¸4ÌCÐPT×P_ÑP_ÓL`Ó'a×bó1 r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rY   r   r³  r   r   r�  r   )r   s   "r   r   rŸ  ³  s!   € ÷ ñ ˜Sð ¨}ð Àñ r   c           
     	óì  € \        \        VR R4      4      pVR9   pV P                  ;'       g    TV n        V P                  ;'       g    VR9   V n        \	        V4      pV'       g   R# V'       d   V P
                  MV P                  P                  V4       \        VRR4      pV P                  P                  \        RRRV/.\        V4      \        V\        4      '       d   TMRVR7      4       R# )	rL  NrP  r\   r|   rp   r`  >   ÚanalysisrU  >   ÚfinalrV  )r�   r™   r©  rª  r}  r£  rÍ  rñ   r¥  rT  rJ  r+   r   )r†  rY   r³  Únormalized_phaseÚis_commentary_phaseÚmessage_textrK  s   &&&    r   r±  Ú_OutputScan._message³  sÜ   € Ü)¬'°$¸ÀÓ*FÓGÐØ.Ð2LÑLÐØ$(×$=Ñ$=×$TÐ$TÐATˆÔ!Ø&*×&AÑ&A×&rÐ&rÐEUÐYrÑErˆÔ#Ü6°tÓ<ˆßÙ÷ "5ˆ×	Ò	¸$×:LÑ:L×TÑTÐUaÔbÜ˜$  dÓ+ˆØ×Ñ×%Ñ%¤mØ�m V¨\Ð:Ð;ÔDgÐhsÓDtÜ)¨'´3×7Ò7‘G¸TÐIYô'
ö 	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�  Ž  s   † ÙWõb÷c÷6ñ r   r�  rF   rU   Úrecover_leaked_tool_callc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   Úresponser   rF   r   rU   r¿  r   r   ztuple[Any, str]r   )r   s   "r   r   r   Å  s=   € ÷ [,ñ [,Øð[,Ø#0ð[,ØGTð[,à"ð[,ð ñ[,r   c          
     ó	  € \        \        V RR4      4      p\        \        \        V RR4      RR4      ;'       g    R4      P	                  4       P                  4       pVR8H  ;'       d    VR8H  p\        V RR4      p\        V\        4      '       d	   V'       g›   \        V R	R4      p\        V\        4      '       d   VP	                  4       MRpV'       d1   R
p	\        P                  V	\        V4      4       \        R	VR7      .p
MV'       d   . p
M\        R4      h\        RRRV
R7      .;V n        pVR9   d!   \        \        \        V RR4      V4      4      h\        V4      pVP!                  WqV4       VP"                  VP$                  rÜRP'                  VP(                  4      P	                  4       pV'       gZ   VP*                  '       g   VP,                  '       g6   \        V R	R4      p\        V\        4      '       d   VP	                  4       MTp\/        T;'       d%    T;'       d    V'       * ;'       d    \1        V4      4      pV'       d    \        P3                  RVR,          4       RpVR8X  dÇ   V'       g¿   V'       g·   V'       d¯   RP'                  V4      pVP5                  R4      pVR8w  d;   VV\        R4      ,           R P7                  R^4      ^ ,          P	                  4       MRpV'       dB   \        P3                  R\        V4      4       TpVRV P	                  4       pV'       d   V.M. p\        YìV'       d    RP'                  V4      P	                  4       MRRRVP8                  ;'       g    RV'       d   RMVP:                  ;'       g    RR7      pVP8                  ;'       g    T;'       g    VP<                  ;'       d    V'       * pVR8H  ;'       d    VR9  pV'       d   RpVV3# V'       d   RpVV3# V'       gY   VP>                  '       gG   VP@                  '       g   VP,                  '       d   VP*                  '       d   V'       d   V'       g   RpVV3# RpVV3# ) a}  Normalize a Responses API object to ``(assistant_message, finish_reason)``.
``issuer_kind`` / ``issuer_model`` are stamped onto captured reasoning items for provenance replay drops.
``recover_leaked_tool_call=False`` is for callers with no continuation (aux): tool-call-shaped text is
then kept as ordinary content and judged by the same phase/completion gates as any other answer.rI  NÚincomplete_detailsÚreasonr4   Ú
incompleteÚcontent_filterr®  r|   z`Codex response has empty output but output_text is present (%d chars); synthesizing output item.rÇ  z&Responses API returned no output itemsrO  re   r   )r\   rd   rI  rÖ   Úerrorr€  zÌCodex response contains leaked tool-call text in assistant content (no structured function_call items). Treating as incomplete so the continuation path can re-elicit a proper tool call. Leaked snippet: %r:Ni,  Nr    z

z
<response>z</response>z…xAI response delivered its final answer inside the reasoning channel (<response> delimiter); promoting %d chars to assistant content.)rÖ   r£  r  Úreasoning_contentÚreasoning_detailsrf   rx  r£  Ústop>   ÚfailedÚ	cancelledrr   )r"   r    r!   )!r�   r™   r   rš   r%   rA   r+   rg   rj  rò  r-   r   ÚRuntimeErrorr®  r�  r�  rµ  r£  r£  rÂ   rÍ  rª  r©  r   r{   rk  Úrfindr  r¤  r¥  r«  r¨  r§  )rÁ  rF   rU   r¿  r„  Úincomplete_reasonÚ"response_incomplete_content_filterr®  Úout_textrj   rÖ   rµ  r£  r£  Ú
final_textÚleaked_tool_call_textÚjoined_reasoningÚmarkerÚsalvagedÚreasoning_prefixÚassistant_messageÚreasoning_onlyÚtrusted_finalÚfinish_reasons   &$$$                    r   Ú_normalize_codex_responserÜ  Å  sñ  € ô %¤W¨X°xÀÓ%FÓG€OÜœF¤7¨8Ð5IÈ4Ó#PÐRZÐ\^Ó_×eÐeÐceÓf×lÑlÓn×tÑtÓvÐØ)8¸LÑ)H×)rÐ)rÐM^ÐbrÑMrÐ&Ü�X˜x¨Ó.€FÜ�fœd×#Ò#¯6ä˜8 ]°DÓ9ˆÜ'1°(¼C×'@Ò'@�8—>‘>Ô#ÀbˆßØtˆCÜ�L‰L˜œc (›mÔ,Ü"1°}È8Ô"TÐ!U‰Gß/à‰GäÐGÓHÐHä °À[ÐZaÔbð$
ð 	
ˆŒ˜&ð Ð1Ô1ÜÔ2´7¸8ÀWÈdÓ3SÐUdÓeÓfÐfÜ�Ó'€DØ‡I�Iˆf <Ô0Ø"&§/¡/°4×3GÑ3G�Ø—‘˜4×-Ñ-Ó.×4Ñ4Ó6€Jß˜4×6×6Ð6¸d×>W×>WÐ>WÜ˜8 ]°BÓ7ˆÜ)3°H¼c×)BÒ)B�X—^‘^Ô%È
ˆ
ô !Ø ×iÐi Z×iÐi¸
´N×iÐiÔG]Ð^hÓGióÐ÷ Ü�‰ð!à",¨TÕ"2ô	
ð
 ˆ
ð �oÔ%¯jÇ×P_Ø!Ÿ;™; Ó7ÐØ!×'Ñ'¨Ó5ˆØgmÐqsÔgsÐ# F¬S°Ó->Õ$>Ð$?Ð@×FÑFÀ}ÐVWÓXÐYZÕ[×aÑaÔcÐy{ˆßÜ�N‰NðSÜTWÐX`ÓTaôð "ˆJØ/°°Ð8×>Ñ>Ó@Ðß4DÐ/Ñ0È"ˆOÜ'Øß:I�&—+‘+˜oÓ.×4Ñ4Ô6ÈtØ°$Ø"×6Ñ6×>Ð>¸$ç$9™DÀ×@VÑ@V×@^Ð@^ÐZ^ôÐð ×.Ñ.×\Ð\°/×\Ð\ÀT×E\ÑE\×pÐpÐfpÔbp€Nà˜;Ñ&×tÐt¨;Ð>tÑ+tð ÷ Ø$ˆð ˜mÐ+Ð+÷ 
,Ø(ˆð ˜mÐ+Ð+÷ 	Ø×0×0Ð0Ø×&×&Ð&¨$×*C×*CÐ*CÈT×Mh×MhÐMhß§=à$ˆð ˜mÐ+Ð+ð ˆØ˜mÐ+Ð+r   )zgpt-5.4zgpt-5.5zgpt-5.6zgpt-6>   rp   r¢   r|   >   ÚvideoÚ	video_urlÚinput_video>   r¡  rÅ  r¢  >   r   rÅ  r¢  >   Ú
web_searchÚfile_searchÚlocal_shellÚcode_interpreterÚimage_generationÚweb_search_previewÚcomputer_use_preview>   Úmcp_callÚcomputer_callÚweb_search_callÚfile_search_callÚlocal_shell_callÚcode_interpreter_callÚimage_generation_callr„   )rÝ   )Útool_choiceÚparallel_tool_callsÚprompt_cache_keyÚprompt_cache_retention>   rW  r1   rX  r9  r[  rV  rY  ){Ú__conditional_annotations__rœ  Ú
__future__r   r  r«   Úloggingr.  rµ   r/  rn  r   Útypingr   r   r   r   r   r	   r
   r   Úagent.message_sanitizationr   r   Úagent.prompt_builderr   Úhermes_cli.route_identityr   Ú	getLoggerr˜  rj  r(   r.   ri  r6   rC   rD   rL   rR   rn   ÚcompileÚ
IGNORECASErs   ru   Ú_ACTION_VERBSrx   r{   r¾   rÀ   rÙ   rÚ   rð   rz  ræ   r¦  rH  r  r1  r°  r†   r‰   r�   r�   r”   rš   rŸ   r¤   r­   rÊ   rÓ   rÜ   rë   rõ   r  r  r  r  r)  r7  rD  rJ  rT  Ú	frozensetrY  r[  rb  rr  r}  r  r©  rµ  rÓ  rÕ  rç  rõ  rù  rþ  r   r
  r  r  r  r  r#  rÖ  r.  r5  r   r%   rV   r?  rJ  rc  rO  rl  rw  r}  r�  r�  r“  r›  r�  rÜ  )rò  s   @r   Ú<module>rþ     s�  øðô[õ #ã Û Û Û 	Û Û Ý !ß W× WÓ Wç NÝ 7Ý >à	×	Ò	˜8Ó	$€ðFØ %ðFØCHðFØchðFà"÷Fõ"ð #Ð õPð HÐ õsõõwõð< Ÿ*š*Ð%QÐSU×S`ÑS`ÓaÐ ð
 Ÿ:š:ðjóÐ ð e€Ø"$§*¢*ðRØR_ÐQ`Ð`cðeà‡M�Mó#Ð õ_ð ŸJšJÐ'aÓbÐ Ø€â8Ð Ø  -Ð0Ð Ú9Ð Ø# VÐ,Ð ØHÐ ò ?Ð ÚGÐ ð !#Ð ò!Ð ò Ð õ:õ2õ/õEõ4÷Sõ
7õBõ%õ+õ,õ&
$÷ð>À&÷ ð(OÀ÷ Oõ"`õõGõ÷G÷"ð GÀk÷ GðØLPðØim÷ñ ! ,°Ð!?Ó@Ð ÷ðà)-÷ð$%à*.÷%ðPØ\`÷÷B/ñ /ð:ØQU÷ð,_ÐRV÷ _ð(vHØ@EðvHØchðvHà'+ðvHàRVðvHð +/ðvHð TY÷vHôr
˜*ô 
õõ"õ<,ð`ØHJð`Øtx÷`ô&�Jô õ	õ`õ(õ(jõ4BðD Ð-Ð/EÐGfØÐ% |Ð5IÈ9ÐVhðPÐ ÐLó ðØ38ðØZ_÷õ&ð* Ñ/°Ð6ØÑ-¨tÐ4Ø�Y §	¡	Ð*àÑ6¸Ð=ØÑIÈ3ÐOØÑjÐlqÐrØÑ9¸5ÐAðmñágóðmð ÑDÀdÐKñmÐ Ðió ò$á6Ñ5Ó6ðÐ õð>Ø-2ð>ØPUð>à$)÷>÷Fhõ
#õdõ	~õ÷÷84ñ 4ðn[,Ø37ð[,ØW[ð[,à%)÷[,ñ [,r   