Ë
    tPêjy  ã                   ó   — U d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ dZeed<   	 ed	z  Zeed
<   	 dedefd„Zdeee
dz  f   de	fd„Zdeeegef   dee   deeeege
dz  f   f   dede	f
d„Zdeeef   dede	fd„Zdeeef   dedz  fd„Zdededz  fd„Zdededz  fd„Zdee   dedz  fd„Zdededz  fd „Zd!edefd"„Zy)#uã   Shared helpers for the attribute mappers.

Small, mapper-agnostic utilities â€” JSON serialization, message extraction, and
extractor-table application â€” pulled out of the individual mapper modules so
they live in one place.
é    N)ÚCallableÚMappingÚSequence)ÚFinal)ÚAttributeMapÚ	AttrValue)ÚLLMCallSpanDataÚToolDefinitioné€   ÚDEFAULT_SPAN_ATTRIBUTE_LIMITé   Ú"MAX_TOOL_DEFINITION_ATTRS_PER_SPANÚvocabulariesÚreturnc                 ó(   — t         t        | d«      z  S )zGSplit the span-wide tool-definition ceiling across active vocabularies.é   )r   Úmax)r   s    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/otel/mappers/utils.pyÚtool_attr_budgetr   #   s   € ä-´°\À1Ó1EÑEÐEó    Úvaluesc                 ó\   — | j                  «       D ��ci c]  \  }}|€Œ	||“Œ c}}S c c}}w )z7Return ``values`` with ``None``-valued entries removed.)Úitems)r   ÚkÚvs      r   Ú	drop_noner   (   s(   € à#Ÿ\™\›^×=‘T�Q˜¨q©}ˆAˆq‰DÓ=Ð=ùÓ=s   ”
(Ÿ(Úkey_forÚtoolsÚ
extractorsÚattr_budgetc                 óþ   — t        |t        t        |«      d«      z  d«      }t        t        |d| «      D ����ci c]-  \  }}|j	                  «       D ]  \  }} | ||«       ||«      “Œ Œ/ c}}}}«      S c c}}}}w )aS  Per-index attributes for as many tools as ``attr_budget`` affords.

    ``key_for`` builds a vocabulary's key from the tool's index and the field
    name, so each mapper keeps its own naming while sharing the budget. One tool
    always keeps its detail, so the family stays legible even when many
    vocabularies split the ceiling.
    r   N)r   Úlenr   Ú	enumerater   )	r   r   r   r    Ú	max_toolsÚidxÚtoolÚsuffixÚextracts	            r   Útool_definition_attrsr)   -   s‘   € ô ˜;¬#¬c°*«o¸qÓ*AÑAÀ1ÓE€IÜô ' u¨Z¨iÐ'8Ó9÷	
ñ 	
á��TØ#-×#3Ñ#3Ó#5ò	
ñ  �˜ñ �C˜Ó ¡'¨$£-Ñ/ð	
Ø õ	
óð ùõ	
s   »2A7ÚtableÚsourcec           
      ót   — t        | j                  «       D ��ci c]  \  }}| ||«      “Œ c}}«      S c c}}w )zBApply an extractor table to ``source``, dropping ``None`` results.)r   r   )r*   r+   Úkeyr(   s       r   Úcollectr.   D   s.   € ä¸u¿{¹{»}×M©|¨s°G�c™7 6›?Ñ*ÓMÓNÐNùÓMs   ™4
Úpayloadc                 ó4   — | rt        j                  | «      S dS )zCJSON-serialize ``payload`` only when it's non-empty; else ``None``.N)ÚjsonÚdumps)r/   s    r   Újson_ifr3   I   s   € á")Œ4�:‰:�gÓÐ3¨tÐ3r   Úvaluec                 óX   — 	 t        j                  | t        ¬«      S # t        $ r Y yw xY w)zHJSON-serialize ``value`` (falling back to ``str``); ``None`` on failure.©ÚdefaultN)r1   r2   ÚstrÚ	Exception)r4   s    r   Újson_or_noner:   N   s*   € ðÜ�z‰z˜%¬Ô-Ð-øÜò Ùðús   ‚ �	)¨)Úmessagec                 óz   — t        | t        «      sy	 t        j                  | t        ¬«      S # t
        $ r Y yw xY w)zIJSON-serialize a chat message dict; ``None`` if not a dict or on failure.Nr6   )Ú
isinstanceÚdictr1   r2   r8   r9   )r;   s    r   Ústringify_messager?   V   s7   € ä�gœtÔ$ØðÜ�z‰z˜'¬3Ô/Ð/øÜò Ùðús   “. ®	:¹:Úmessagesc                 ó–   — d„ | D «       D �cg c]  }|€Œt        j                  |«      ‘Œ }}|rt        j                  |«      S dS c c}w )zERound-trip a sequence of message dicts through ``stringify_message``.c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)r?   )Ú.0Úms     r   ú	<genexpr>z%serialize_messages.<locals>.<genexpr>b   s   è ø€ Ò0XÈ!Ô1BÀ1×1EÑ0Xùs   ‚N)r1   Úloadsr2   )r@   ÚsÚ
serializeds      r   Úserialize_messagesrJ   `   sD   € á0XÈxÔ0XÖj¨1Ð\]Ñ\iœŸ™ A�Ðj€JÐjÙ%/Œ4�:‰:�jÓ!Ð9°TÐ9ùò ks
   ŒA”Ac                 óX  — t        | t        «      sy| j                  d«      }t        |t        «      r|S t        |t        «      ra|D �cg c]:  }t        |t        «      sŒ|j                  d«      dk(  sŒ)|j                  dd«      ‘Œ< }}dj                  d„ |D «       «      xs dS yc c}w )z9Extract the textual ``content`` from a chat message dict.NÚcontentÚtypeÚtextÚ c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wrC   )r=   r8   )rD   Úps     r   rF   z"message_content.<locals>.<genexpr>p   s   è ø€ Ò>˜Q¬:°a¼Õ+=”qÑ>ùs   ‚˜)r=   r>   Úgetr8   ÚlistÚjoin)r;   rL   ÚpartÚpartss       r   Úmessage_contentrW   f   s•   € ä�gœtÔ$ØØ—[‘[ Ó+€GÜ�'œ3ÔØˆÜ�'œ4Ô à29Ös¨$¼ZÈÌdÕ=SÐX\×X`ÑX`ÐagÓXhÐlrÓXr�—‘˜& "Õ%ÐsˆÐsØ�w‰wÑ> %Ô>Ó>ÒFÀ$ÐFØùò ts   Á	B'ÁB'Á4B'Údatac                 ó€   — | j                   D �cg c]$  }t        |t        «      sŒ|j                  d«      ‘Œ& c}S c c}w )z0The ``message`` payload of each response choice.r;   )Úchoices_outr=   r>   rR   )rX   Úcs     r   Úoutput_messagesr\   t   s.   € à&*×&6Ñ&6ÖN ¼*ÀQÌÕ:MˆA�E‰E�)ÕÒNÐNùÒNs   �;¥;)Ú__doc__r1   Úcollections.abcr   r   r   Útypingr   Ú&litellm.integrations.otel.mappers.baser   r   Ú(litellm.integrations.otel.model.payloadsr	   r
   r   Ú__annotations__r   Úintr   r8   r   r)   Úobjectr.   r3   r:   r?   rJ   rW   rS   r\   © r   r   ú<module>rf      s˜  ðòó ß 7Ñ 7Ý ç Jß Tà&)Ð ˜eÓ )Ø <à,HÈAÑ,MÐ " EÓ Mðð F 3ð F¨3ó Fð
>�g˜c 9¨tÑ#3Ð3Ñ4ð >¸ó >ð
Ø�s˜C�j #�oÑ&ðà�NÑ#ðð ˜˜X ~Ð&6¸	ÀDÑ8HÐ&HÑIÐIÑJðð ð	ð
 óð.O�7˜3 ˜=Ñ)ð O°6ð O¸ló Oð
4�W˜S &˜[Ñ)ð 4¨c°D©jó 4ð
˜ð  3¨¡:ó ð˜vð ¨#°©*ó ð: ¨&Ñ!1ð :°c¸D±jó :ð˜Vð ¨¨d©
ó ðO˜/ð O¨dô Or   