+
    iHàj  ã                   ó®   € R t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	H
t
 RtRtR R ltRRR	R
RR
RRRRRR
RR
RRRR/	t ! R R]4      t^ RIHt ]! R]4       R
# )z`Anthropic Messages API transport: conversion via agent/anthropic_adapter.py, normalization here.)ÚAnyÚDictÚListÚOptional)ÚProviderTransport)ÚNormalizedResponseÚToolCallÚmcp__c                ó0   € V ^8„  d   QhR\         R\         /# )é   ÚnameÚreturn©Ústr)Úformats   "Ú?/home/ubuntu/.hermes/hermes-agent/agent/transports/anthropic.pyÚ__annotate__r      s   € ÷ <ñ <¤Cð <¬Cñ <ó    c                ó¼   € ^ RI Hp ^ RIHp V \	        \
        4      R pV RV,           V3 F  pVP                  V4      '       g   K  Vu # 	  VP                  W04      # )aC  Reverse the OAuth-wire ``mcp__`` prefix back to the registered tool name.
Two originals map onto one wire name (``read_file`` / ``mcp_linear_get_issue``), so
resolve by registry lookup, never rewriting a name that already resolves natively.
OAuth wire aliases are checked LAST so a real tool under the wire name still wins.)Ú _OAUTH_TOOL_NAME_REVERSE_ALIASES)ÚregistryNÚmcp_)Úagent.anthropic_adapterr   Útools.registryr   ÚlenÚ_MCP_PREFIXÚ	get_entryÚget)r   r   Ú_tool_registryÚbareÚ	candidates   &    r   Ú_unprefix_oauth_tool_namer!      s\   € õ
 IÝ9Ø””KÓ Ð!Ð"€DØ˜F T�M¨4Ó0ˆ	Ø×#Ñ# I×.Ô.ØÒñ 1ð ,×/Ñ/°Ó;Ð;r   Ú
max_tokensi @  Úreasoning_configNÚtool_choiceÚis_oauthFÚpreserve_dotsÚcontext_lengthÚbase_urlÚ	fast_modeÚdrop_context_1m_betac                   óÞ   a € ] tR t^!t o RtRRRRRRRRR	R
RR/t]V 3R lR l4       tV 3R lR ltV 3R lR lt	RV 3R lR llt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )ÚAnthropicTransportz,Transport for api_mode='anthropic_messages'.Úend_turnÚstopÚtool_useÚ
tool_callsr"   ÚlengthÚstop_sequenceÚrefusalÚcontent_filterÚmodel_context_window_exceededc                ó    <€ V ^8„  d   QhRS[ /# )r   r   r   )r   Ú__classdict__s   "€r   r   ÚAnthropicTransport.__annotate__*   s   ø€ ÷ $ñ $™#ñ $r   c                ó   € R # )Úanthropic_messages© )Úselfs   &r   Úapi_modeÚAnthropicTransport.api_mode)   s   € á#r   c                óL   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[/# )r   Úmessagesr   ©ÚlistÚdictr   r   )r   r7   s   "€r   r   r8   -   s,   ø€ ÷ sñ s©©d±3¹°8­nÕ)=ð sÉCñ sr   c                ó^   € ^ RI Hp V! WP                  R4      VP                  R4      R7      # )z}Convert OpenAI messages to an Anthropic (system, messages) tuple; ``base_url`` and ``model`` pick the thinking-replay policy.)Úconvert_messages_to_anthropicr(   Úmodel)r(   rF   )Úagent.anthropic_message_convertrE   r   )r<   r@   ÚkwargsrE   s   &&, r   Úconvert_messagesÚ#AnthropicTransport.convert_messages-   s(   € åQÙ,¨XÇ
Á
È:Ó@VÐ^d×^hÑ^hÐipÓ^qÔrÐrr   c                óL   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          RS[/# )r   Útoolsr   rA   )r   r7   s   "€r   r   r8   2   s(   ø€ ÷ 1ñ 1¡4©©S±#¨X­Õ#7ð 1¹Cñ 1r   c                ó   € ^ RI Hp V! V4      # )z=Convert OpenAI tool schemas to Anthropic input_schema format.)Úconvert_tools_to_anthropic)rG   rN   )r<   rL   rN   s   && r   Úconvert_toolsÚ AnthropicTransport.convert_tools2   s   € åNÙ)¨%Ó0Ð0r   Nc          
      ó¤   <€ V ^8„  d   QhRS[ RS[S[S[ S[3,          ,          RS[S[S[S[ S[3,          ,          ,          RS[S[ S[3,          /# )r   rF   r@   rL   r   )r   rB   rC   r   r   )r   r7   s   "€r   r   r8   7   sW   ø€ ÷ 
ñ 
Ùð
Ù$(©©c±3¨h­Õ$8ð
ÙAIÉ$ÉtÑTWÑY\ÐT\Í~ÕJ^ÕA_ð
á	‰c‘3ˆh�ñ
r   c                ó    € ^ RI Hp T! RRVRVRV/\        P                  4        UUu/ uF  w  rgWdP	                  Wg4      bK  	  uppB # u uppi )zRBuild Anthropic messages.create() kwargs (converts messages and tools internally).)Úbuild_anthropic_kwargsrF   r@   rL   r;   )r   rS   Ú_BUILD_KWARG_DEFAULTSÚitemsr   )r<   rF   r@   rL   ÚparamsrS   ÚkeyÚdefaults   &&&&,   r   Úbuild_kwargsÚAnthropicTransport.build_kwargs7   s`   € õ 	CÙ%ñ 
Øð
Ø"*ð
Ø27ð
äAV×A\ÑA\ÔA^Ô_ÑA^±°ˆs—J‘J˜sÓ,Ò,ÑA^Ò_ñ
ð 	
ùã_s   ¨A
c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   Úresponser   )r   r   )r   r7   s   "€r   r   r8   A   s   ø€ ÷ )
ñ )
©3ð )
Ñ=Oñ )
r   c           
     ól  € ^ RI p^ RIHpHp VP	                  RR4      p. . . . 3w  rxrš. pVP
                   EFp  pV! V4      p\        V\        4      '       d	   V! V4      MRpVe   VP                  V4       VP                  R8X  d   VP                  VP                  4       Ko  VP                  \        9   d`   VP                  R8X  d   VP                  VP                  4       Ve   TMTp\        V\        4      '       d   V	P                  V4       Ká  Kã  VP                  R8X  g   Kö  VP                  pV'       d'   VP                  \        4      '       d   \!        V4      pV
P                  \#        VP$                  VVP'                  VP(                  4      R7      4       EKs  	  V	'       d   R	V	/M/ pV! \+        VR
R4      4      pVe   VVR
&   \,        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      pV'       d@   \,        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   VVR&   \/        V'       d   RP1                  V4      MRT
;'       g    RV P3                  V4      V'       d   RP1                  V4      MRRT;'       g    RR7      # )zZParse content blocks (text/thinking/tool_use), map stop_reason, collect reasoning_details.N)Ú_sanitize_replay_blockÚ_to_plain_dataÚstrip_tool_prefixFÚtextÚthinkingr/   )Úidr   Ú	argumentsÚreasoning_detailsÚstop_detailsc              3   ó´   "  € T FN  qP                  R 4      \        9   ;'       d+    VP                  R4      ;'       g    VP                  R4      x € KP  	  R# 5i)ÚtypeÚ	signatureÚdataN)r   Ú_THINKING_TYPES©Ú.0Úbs   & r   Ú	<genexpr>Ú8AnthropicTransport.normalize_response.<locals>.<genexpr>b   sG   é € ÐxÑiwÐde—U‘U˜6“]¤oÑ5×_Ð_¸1¿5¹5ÀÓ;M×;^Ð;^ÐQR×QVÑQVÐW]ÓQ^Ô_Óiwùs   ‚"A¥A¾ATc              3   óH   "  € T F  qP                  R 4      R8H  x € K  	  R# 5i)ri   r/   N)r   rm   s   & r   rp   rq   c   s   é € ÐN¹~¸!Ÿ%™% ›-¨:Ö5»~ùs   ‚ "Úanthropic_content_blocksÚ
z

)Úcontentr0   Úfinish_reasonÚ	reasoningÚusageÚprovider_data)ÚjsonrG   r_   r`   r   ru   Ú
isinstancerC   Úappendri   rb   rl   rc   r   Ú
startswithr   r!   r   rd   ÚdumpsÚinputÚgetattrÚanyr   ÚjoinÚresponse_finish_reason)r<   r]   rH   rz   r_   r`   ra   Ú
text_partsÚreasoning_partsrf   r0   Úordered_blocksÚblockÚ
block_dictÚclean_blockÚdetailr   ry   rg   Úsigneds   &&,                 r   Únormalize_responseÚ%AnthropicTransport.normalize_responseA   s)  € ãßZØ"ŸJ™JÐ':¸EÓBÐØEGÈÈRÐQSÀ^ÑBˆ
Ð%6ð ˆØ×%Õ%ˆEÙ'¨Ó.ˆJä@JÈ:ÔW[×@\Ò@\Ñ0°Ô<ÐbfˆKØÒ&Ø×%Ñ% kÔ2Ø�z‰z˜VÔ#Ø×!Ñ! %§*¡*Ö-Ø—‘œÔ.Ø—:‘: Ô+Ø#×*Ñ*¨5¯>©>Ô:Ø(3Ò(?™ÀZ�Ü˜f¤d×+Ò+Ø%×,Ñ,¨VÖ4ñ ,à—‘˜zÖ)Ø—z‘z�ß$¨¯©¼×)EÒ)EÜ4°TÓ:�DØ×!Ñ!¤(¨e¯h©h¸TÈTÏZÉZÐX]×XcÑXcÓMdÔ"e×fñ% &÷& EVÐ,Ð.?Ñ@Ð[]ˆÙ%¤g¨h¸ÈÓ&MÓNˆØÒ#Ø,8ˆM˜.Ñ)ç“ÑxÑiwÓx——’ÑxÑiwÓxÓxˆß—c“cÑN¹~ÓN—c—c’cÑN¹~ÓN×NÒNØ8FˆMÐ4Ñ5Ü!ß-7�D—I‘I˜jÔ)¸TÈj×N`ÐN`Ð\`Ø×5Ñ5°hÓ?ß6E�f—k‘k /Ô2È4ÐW[Ø'×/Ð/¨4ô	
ð 	
r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r\   )r   r   )r   r7   s   "€r   r   r8   l   s   ø€ ÷ <ñ <©sð <±sñ <r   c                ód   € ^ RI Hp V! V4      '       d   R# V P                  VP                  4      # )a  ``stop_reason`` mapped to the OpenAI vocabulary. Bedrock InvokeModel guardrail blocks keep
``stop_reason=end_turn`` and hand back the guardrail's canned text as an ordinary reply; they
must surface as ``content_filter`` so the loop treats them as a refusal, not model output.)Ú'anthropic_response_guardrail_intervenedr4   )Úagent.bedrock_adapterr�   Úmap_finish_reasonÚstop_reason)r<   r]   r�   s   && r   rƒ   Ú)AnthropicTransport.response_finish_reasonl   s-   € õ 	RÙ2°8×<Ò<Ù#Ø×%Ñ% h×&:Ñ&:Ó;Ð;r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r\   )r   Úbool)r   r7   s   "€r   r   r8   u   s   ø€ ÷ 
ñ 
©#ð 
±$ñ 
r   c                ó’   € \        VRR4      p\        V\        4      ;'       d$    \        V4      ;'       g    \        VRR4      R9   # )zpStructural check; empty content is legitimate for ``end_turn``/``refusal`` (retrying
either would loop forever).ru   Nr“   >   r3   r-   )r€   r{   rB   r–   )r<   r]   Úcontent_blockss   && r   Úvalidate_responseÚ$AnthropicTransport.validate_responseu   sJ   € ô ! ¨9°dÓ;ˆÜ˜.¬$Ó/÷ 
ð 
Ü�Ó ×eÐe¤G¨H°mÀTÓ$JÐNeÑ$eð	
r   c                óL   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          ,          /# r\   )r   r   rC   r   Úint)r   r7   s   "€r   r   r8   }   s,   ø€ ÷ dñ d©Cð d±H¹TÁ#ÁsÀ(½^Õ4Lñ dr   c                ó´   € \        VRR4      pVf   R# \        VR^ 4      ;'       g    ^ p\        VR^ 4      ;'       g    ^ pV'       g	   V'       d   RVRV/# R# )z3Anthropic cache_read / cache_creation token counts.rx   NÚcache_read_input_tokensÚcache_creation_input_tokensÚcached_tokensÚcreation_tokens)r€   )r<   r]   rx   ÚcachedÚwrittens   &&   r   Úextract_cache_statsÚ&AnthropicTransport.extract_cache_stats}   sa   € ä˜ '¨4Ó0ˆØŠ=ÙÜ˜Ð 9¸1Ó=×BÐBÀˆÜ˜%Ð!>ÀÓB×GÐGÀaˆßHN×RY� Ð):¸GÐDÐcÐ_cÐcr   r;   )N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú_STOP_REASON_MAPÚpropertyr=   rI   rO   rY   rŒ   rƒ   r™   r¤   Ú__static_attributes__Ú__classdictcell__)r7   s   @r   r,   r,   !   sŽ   ø‡ € Ù6ð 	�F˜J¨°lÀHÈoÐ_eØÐ#Ð%DÀhðÐð
 ÷$ó ð$÷sð s÷
1ð 1÷

ò 
÷)
ð )
÷V<ð <÷
ð 
÷dö dr   r,   )Úregister_transportr:   )rc   Úredacted_thinking)rª   Útypingr   r   r   r   Úagent.transports.baser   Úagent.transports.typesr   r   r   rl   r!   rT   r,   Úagent.transportsr¯   r;   r   r   Ú<module>rµ      s|   ðÙ fç ,Ó ,å 3ß ?à€Ø3€õ<ð  �%Ð+¨T°=À$È
ÐTYÐ[jÐlqØ�d˜J¨¨k¸5ÐBXÐZ_ðÐ ôcdÐ*ô cdõL 0á Ð'Ð);Ö <r   