+
    „WÝjM  ã                  óä   € R t ^ RIHt ^ RIt^ RIHtHt ^ RIHtH	t	 ^RI
Ht ^RIHt RtR R	 ltR
 R ltR R ltR R ltR R ltR R lt] ! R R4      4       tR R ltR R ltR R ltR# )a¿  Connector work in the shared metrics: the search-to-execute chain and the batch and search rows.

Each entry of a connector ``tool_call`` batch dispatches with its own call id (``<id>#<position>``,
``tools/connectors/dispatch.py``), so entries count as their own calls; the wrapper's post under the
bare id is dropped once an entry ran. Connector slugs, tool names and query text never leave this
module: rows carry only buckets and closed enums.
)ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚIterable)Úshared_metrics_contract)ÚCONNECTOR_NAME_PREFIXé   c               ó    € V ^8„  d   QhRRRR/# )é   Únamer   ÚreturnÚbool© )Úformats   "ÚfC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\observability\shared_metrics_connectors.pyÚ__annotate__r      s   € ÷ Lñ L˜Cð L Dñ Ló    c                ó\   € \        V \        4      ;'       d    V P                  \        4      # ©N)Ú
isinstanceÚstrÚ
startswithr   )r   s   &r   Úis_connector_namer      s!   € Ü�dœCÓ ×KÐK T§_¡_Ô5JÓ%KÐKr   c               ó    € V ^8„  d   QhRRRR/# )r   Úargsr   r   zlist[dict[str, Any]]r   )r   s   "r   r   r      s   € ÷ "ñ "˜ð "Ð 4ñ "r   c                ój   € \        V \        4      '       g   . # ^ RIHp V! V 4      w  r#V'       d   . # T# )zZThe ``calls[]`` entries of a ``tool_call`` invocation; [] when the arguments do not parse.)Únormalize_tool_call_entries)r   ÚdictÚtools.tool_search_validationr   )r   r   ÚentriesÚerrs   &   r   Ú_call_entriesr"      s0   € ä�dœD×!Ò!Øˆ	ÝHá.¨tÓ4�L€Gßˆ2Ð!˜'Ð!r   c               ó    € V ^8„  d   QhRRRR/# )r   Úeventúdict[str, Any]r   r   r   )r   s   "r   r   r   $   s   € ÷ \ñ \˜nð \°ñ \r   c                óô   € V P                  R4      R8w  d   R# \        V P                  R4      4      p\        V4      ;'       d5    \        ;QJ d    R V 4       F  '       d   K   R# 	  R# ! R V 4       4      # )z]A ``tool_call`` wrapper whose entries are all connector calls (each entry is counted itself).Ú	tool_nameÚ	tool_callFr   c              3  óV   "  € T F  p\        VP                  R 4      4      x € K!  	  R# 5i)r   N)r   Úget)Ú.0Úentrys   & r   Ú	<genexpr>Ú%is_connector_batch.<locals>.<genexpr>)   s$   é € Ð [ÑSZÈ%Ô!2°5·9±9¸VÓ3D×!EÐ!EÓSZùs   ‚')T)r*   r"   r   Úall)r$   r    s   & r   Úis_connector_batchr0   $   s`   € à‡y�y�Ó Ô,ÙÜ˜EŸI™I fÓ-Ó.€GÜ�‹=×[Ð[ŸS›SÑ [ÑSZÓ [ŸSœSÐ[šSÐ[˜SÑ [ÑSZÓ [Ó[Ð[r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úidentityútuple[str, str, str]Úwrapperr   r   r   )r   s   "r   r   r   ,   s)   € ÷ iñ iÐ1ð iÐ<Pð iÐUYñ ir   c                ó°   € \        V^,          4      ;'       d>    V ^,          P                  V^,           R24      ;'       d    V R,          VR,          8H  # )zdWhether ``identity`` is an entry (``<id>#<n>``) of the batch whose wrapper has identity ``wrapper``.Ú#:Nr   N)r   r   )r2   r4   s   &&r   Úis_batch_entryr7   ,   sL   € ä�˜•
Ó×hÐh ¨¥× 6Ñ 6¸'À!½*¸ÀQÐ7GÓ H×hÐhÈXÐVXÍ\Ð]dÐegÕ]hÑMhÐhr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
identitieszIterable[tuple[str, str, str]]r4   r3   r   r   r   )r   s   "r   r   r   1   s)   € ÷ Mñ MÐ >ð MÐI]ð MÐbfñ Mr   c                óx   a€ \         ;QJ d    V3R lV  4       F  '       g   K   R# 	  R# ! V3R lV  4       4      # )zYWhether an entry of the batch whose wrapper has identity ``wrapper`` was already counted.c              3  ó<   <"  € T F  p\        VS4      x € K  	  R # 5ir   )r7   )r+   r2   r4   s   & €r   r-   Ú"batch_entry_ran.<locals>.<genexpr>3   s   øé € ÐLÁ°XŒ~˜h¨×0Ð0Ãùs   ƒTF)Úany)r9   r4   s   &fr   Úbatch_entry_ranr>   1   s,   ø€ ç‹3ÔLÁÓL�3Œ3ÐLŠ3ÐLˆ3ÔLÁÓLÓLÐLr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   z	list[str]r   )r   s   "r   r   r   6   s   € ÷ 7ñ 7˜3ð 7 9ñ 7r   c                ó*  € \        V \        4      '       d   V P                  R4      MRp\        V\        4      '       d   V.M\        V\        4      '       d   TM. pV Uu. uF&  p\        T;'       g    R4      P                  4       NK(  	  up# u upi )z```tool_describe`` names as its dispatcher reads them: a bare string is one name, items stripped.ÚnamesNÚ )r   r   r*   r   ÚlistÚstrip)r   rA   r   s   &  r   Ú_described_namesrE   6   sm   € ä!+¨D´$×!7Ò!7ˆD�H‰H�WÔ¸T€EÜ! %¬×-Ò-ˆU‰G¼JÀuÌd×<SÒ<S±5ÐY[€EÙ05Ó6±¨ŒC�—
�
˜‹O×!Ñ!Ö#±Ñ6Ð6ùÒ6s   Á!BÁ4Bc                  óR   € ] tR t^=t$ Rt^ tR]R&   ]! ]R7      t	R]R&   R R lt
R	tR
# )ÚConnectorSessionStatezšPer-conversation chain state; the caller holds the session lock. Compression hands it to the
rotated-to segment so the chain spans the whole conversation.ÚintÚsearches_since_execute)Údefault_factoryzset[str]Ú	describedc               ó    € V ^8„  d   QhRRRR/# )r   r$   r%   r   údict[str, str] | Noner   )r   s   "r   r   Ú"ConnectorSessionState.__annotate__E   s   € ÷ ñ ˜^ð Ð0Eñ r   c                ó(  € VP                  R4      pVR8X  d   V ;P                  ^,          un        R# VR8X  dr   \        VP                  R4      4       FQ  p\        V4      '       g   K  \	        V P
                  4      \        8  g   K6  V P
                  P                  V4       KS  	  R# \        V4      '       g   R# RW P
                  9   d   RMRR	\        P                  ! V4      R
\        P                  ! V P                  4      /p^ V n        V# )z`Update the chain after a counted call; the ``hermes.connector_chain.count`` fields for an entry.r'   Útool_searchNÚtool_describer   Údescribed_firstÚyesÚnoÚoutcomeÚsearches_before_bucket)r*   rI   rE   r   ÚlenrK   Ú_MAX_DESCRIBEDÚaddÚcontractÚtool_outcomeÚcount_bucket)Úselfr$   r   rK   Úfieldss   &&   r   ÚobserveÚConnectorSessionState.observeE   sÙ   € à�y‰y˜Ó%ˆØ�=Ô Ø×'Ò'¨1Õ,Õ'ÙØ�?Ô"Ü-¨e¯i©i¸Ó.?Ö@�	Ü$ Y×/Ô/´C¸¿¹Ó4GÌ.Ö4XØ—N‘N×&Ñ& yÖ1ñ Añ Ü  ×&Ò&Ùà¨·±Ô(>™uÀDØ”x×,Ò,¨UÓ3Ø$¤h×&;Ò&;¸D×<WÑ<WÓ&Xð
ˆð
 '(ˆÔ#Øˆr   )rI   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rI   Ú__annotations__r   ÚsetrK   r_   Ú__static_attributes__r   r   r   rG   rG   =   s.   ‡ ñEð #$Ð˜CÓ#Ù°Ô4€IˆxÓ4÷ñ r   rG   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úroutezdict[str, str]Ú
tool_callszIterable[Any]r   rM   r   )r   s   "r   r   r   ]   s'   € ÷ \ñ \˜^ð \¸ð \ÐK`ñ \r   c           
     óÎ  € ^ ;r#V Fœ  p\        VRR4      p\        VRR4      pV.pVR8X  dK   \        \        \        VRR4      4      4      pV U	u. uF  q™P                  R4      NK  	  up	;'       g    V.pV\	        V4      ,          pV\        R V 4       4      ,          pKž  	  V'       g   R# V'       g   RM	W28X  d   RMR	p
/ V CR
V
R\        P                  ! V4      /C# u up	i )zªOne model reply's tool calls: how many logical calls (``tool_call`` entries counted one by
one) and how many of them were connector calls. None for a reply with no calls.ÚfunctionNr   r(   Ú	argumentsc              3  óL   "  € T F  p\        V4      '       g   K  ^x € K  	  R# 5i)é   N)r   )r+   Ú
entry_names   & r   r-   Ú$tool_batch_fields.<locals>.<genexpr>i   s   é € ÐU©e 
Ô7HÈ×7TŸ!š!«eùs   ‚$š
$Únoner/   ÚsomeÚconnector_shareÚsize_bucket)Úgetattrr"   Ú_parsed_argumentsr*   rW   ÚsumrZ   r\   )rj   rk   ÚtotalÚ
connectorsÚtcÚfnr   rA   r    r,   Úshares   &&         r   Útool_batch_fieldsr   ]   sâ   € ð Ð€EÛˆÜ�R˜ TÓ*ˆÜ�r˜6 4Ó(ˆØ�ˆØ�;ÔÜ#Ô$5´g¸bÀ+ÈtÓ6TÓ$UÓVˆGÙ4;Ó<±G¨5—Y‘Y˜vÖ&±GÑ<×FÐFÀÀˆEØ”�U“ÕˆØ”cÑU©eÓUÓUÕUŠ
ñ ÷ Ùß$‰F°:Ô3F©%ÈF€EØ[ˆeÐ[Ð&¨¨}¼h×>SÒ>SÐTYÓ>ZÑ[Ð[ùò =s   ÁC"c               ó    € V ^8„  d   QhRRRR/# )r   Úrawr   r   r   )r   s   "r   r   r   p   s   € ÷ ñ ˜3ð  3ñ r   c                ó´   € \        V \        4      '       d   V #  \        V \        4      '       d   \        P                  ! V 4      # R #   \
         d     R # i ; ir   )r   r   r   ÚjsonÚloadsÚ
ValueError)r�   s   &r   rx   rx   p   sJ   € Ü�#”t×ÒØˆ
ðÜ",¨S´#×"6Ò"6Œt�zŠz˜#‹Ð@¸DÐ@øÜô Úðús   š+A ÁA ÁAÁAc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úscoper   ÚhitsrH   rU   r   rM   r   )r   s   "r   r   r   y   s/   € ÷ \ñ \ ð \¨Cð \¸#ð \ÐBWñ \r   c                ó’   € V \         P                  9  g   V\         P                  9  d   R # R\         P                  ! V4      RVRV /# )NÚhits_bucketrU   r‡   )rZ   ÚTOOL_SEARCH_SCOPESÚTOOL_SEARCH_OUTCOMESr\   )r‡   rˆ   rU   s   $$$r   Útool_search_fieldsr�   y   s?   € Ø”H×/Ñ/Ô/°7Ä(×B_ÑB_Ô3_ÙØœ8×0Ò0°Ó6¸	À7ÈGÐUZÐ[Ð[r   )re   Ú
__future__r   rƒ   Údataclassesr   r   Útypingr   r   rB   r   rZ   r   rX   r   r"   r0   r7   r>   rE   rG   r   rx   r�   r   r   r   Ú<module>r‘      sq   ðñõ #ã ß (ß  å 1Ý :ð €õLõ"õ\õiõ
Mõ
7ð ÷ð ó ðõ>\õ&÷\r   