Ë
    tPêjul  ã                  ó®  — U d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ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mZmZmZmZ ddlmZmZmZm Z m!Z! g d¢Z"erddl#m$Z$ ddl%m&Z&m'Z'  ed¬«       G d„ d«      «       Z( ed¬«       G d„ d«      «       Z) ed¬«       G d„ d«      «       Z* ed¬«       G d„ d«      «       Z+ ed¬«       G d„ d«      «       Z, ed¬«       G d„ d«      «       Z- ed¬«       G d„ d«      «       Z. ed¬«       G d„ d «      «       Z/ ed¬«       G d!„ d"«      «       Z0 ed¬«       G d#„ d$«      «       Z1dAd%„Z2 ed¬«       G d&„ d'«      «       Z3dBd(„Z4dCd)„Z5 ed¬«       G d*„ d+«      «       Z6dCd,„Z7d-Z8d.e9d/<    e:h d0£«      Z;d1e9d2<   d3Z<d4e9d5<   d6Z=d4e9d7<   	 	 	 	 dDd8„Z>dEd9„Z?dEd:„Z@dFd;„ZAdGd<„ZBdHd=„ZCdId>„ZDdJd?„ZE	 	 	 	 dKd@„ZFy)LzJTyped span-data inputs: frozen dataclasses the engine and mappers consume.é    )ÚannotationsN)ÚMapping)Ú	dataclassÚfield)ÚEnum)ÚTYPE_CHECKINGÚClassVarÚFinalÚcast)Úurlsplit)ÚRequestContextÚRequestIdentity)ÚGenAIOperationÚGenAIOutputTypeÚ	MCPMethodÚresolve_operationÚresolve_output_typeÚresolve_provider)Úas_boolÚas_floatÚas_intÚas_strÚas_str_tuple)ÚGuardrailSpanDataÚLLMCallSpanDataÚLLMCostÚLLMRequestParamsÚLLMUsageÚMCPListToolsSpanDataÚMCPToolCallSpanDataÚProxyRequestSpanDatar   r   Ú
ServerInfoÚServiceSpanDataÚ	SpanErrorÚToolDefinitionÚis_mcp_list_toolsÚis_mcp_tool_call)ÚServiceLoggerPayload)Ú#StandardLoggingGuardrailInformationÚStandardLoggingPayloadT)Úfrozenc                  ó�   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
d
ed<   dZded<   edd„«       Zy)r   Núfloat | NoneÚtemperatureÚtop_pú
int | NoneÚtop_kÚ
max_tokensÚfrequency_penaltyÚpresence_penaltyztuple[str, ...] | NoneÚstop_sequencesÚseedc                óÞ  — t        |j                  d«      «      }|€t        |j                  d«      «      } | t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      |t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d	«      «      ¬
«      S )Nr2   Úmax_completion_tokensr.   r/   r1   r3   r4   Ústopr6   )r.   r/   r1   r2   r3   r4   r5   r6   )r   Úgetr   r   )ÚclsÚparamsr2   s      úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/otel/model/payloads.pyÚfrom_model_parametersz&LLMRequestParams.from_model_parametersL   s¸   € ä˜FŸJ™J |Ó4Ó5ˆ
ØÐÜ §
¡
Ð+BÓ CÓDˆJÙÜ  §¡¨MÓ!:Ó;Ü˜6Ÿ:™: gÓ.Ó/Ü˜Ÿ™ GÓ,Ó-Ø!Ü& v§z¡zÐ2EÓ'FÓGÜ% f§j¡jÐ1CÓ&DÓEÜ'¨¯
©
°6Ó(:Ó;Ü˜Ÿ
™
 6Ó*Ó+ô	
ð 		
ó    )r<   úMapping[str, object]Úreturnr   )Ú__name__Ú
__module__Ú__qualname__r.   Ú__annotations__r/   r1   r2   r3   r4   r5   r6   Úclassmethodr>   © r?   r=   r   r   A   sg   … à $€K�Ó$Ø€Eˆ<ÓØ€Eˆ:ÓØ!€J�
Ó!Ø&*Ð�|Ó*Ø%)Ð�lÓ)Ø-1€NÐ*Ó1Ø€Dˆ*Óàò
ó ñ
r?   r   c                  ó8   — e Zd ZU dZded<   dZded<   dZded<   y)r   Nr0   Úinput_tokensÚoutput_tokensÚtotal_tokens)rB   rC   rD   rI   rE   rJ   rK   rG   r?   r=   r   r   ]   s    … à#€L�*Ó#Ø $€M�:Ó$Ø#€L�*Ô#r?   r   c                  ó¾   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   dZ	ded<   dZ
ded	<   dZded
<   dZded<   dZded<   dZded<   dZded<   edd„«       Zy)r   u  Per-component cost breakdown, from the StandardLoggingPayload
    ``cost_breakdown`` (``litellm.types.utils.CostBreakdown``).

    Each field is the USD cost of one component, or ``None`` when the source did
    not report it â€” so the mapper omits absent components instead of emitting 0.
    The final (post-discount/post-margin) total is carried separately on
    ``LLMCallSpanData.response_cost``. Free-form ``additional_costs`` are not
    surfaced here: span attributes are scalar and there is no agreed key shape
    for them yet.
    Nr-   ÚinputÚoutputÚ
cache_readÚcache_creationÚ
tool_usageÚoriginalÚdiscount_amountÚdiscount_percentÚmargin_fixed_amountÚmargin_percentÚmargin_total_amountc                óD  — |xs i } | t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d	«      «      t        |j                  d
«      «      t        |j                  d«      «      ¬«      S )NÚ
input_costÚoutput_costÚcache_read_costÚcache_creation_costÚtool_usage_costÚoriginal_costrS   rT   rU   rV   rW   )rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   )r   r:   )r;   Ú	breakdownÚbs      r=   Úfrom_breakdownzLLMCost.from_breakdown}   sÛ   € à’? ˆÙÜ˜1Ÿ5™5 Ó.Ó/Ü˜AŸE™E -Ó0Ó1Ü §¡Ð&7Ó 8Ó9Ü# A§E¡EÐ*?Ó$@ÓAÜ §¡Ð&7Ó 8Ó9Ü˜aŸe™e OÓ4Ó5Ü$ Q§U¡UÐ+<Ó%=Ó>Ü% a§e¡eÐ,>Ó&?Ó@Ü (¨¯©Ð/DÓ)EÓ FÜ# A§E¡EÐ*:Ó$;Ó<Ü (¨¯©Ð/DÓ)EÓ Fô
ð 	
r?   )r_   úMapping[str, object] | NonerA   r   )rB   rC   rD   Ú__doc__rM   rE   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rF   ra   rG   r?   r=   r   r   d   sŒ   … ñ	ð €Eˆ<ÓØ€FˆLÓØ#€J�Ó#Ø#'€N�LÓ'Ø#€J�Ó#Ø!€HˆlÓ!Ø$(€O�\Ó(Ø%)Ð�lÓ)Ø(,Ð˜Ó,Ø#'€N�LÓ'Ø(,Ð˜Ó,àò
ó ñ
r?   r   c                  óT   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   y)r$   Nú
str | NoneÚ
error_typeÚmessageÚcodeÚstack_traceÚllm_provider)	rB   rC   rD   rf   rE   rg   rh   ri   rj   rG   r?   r=   r$   r$   �   s4   … à!€J�
Ó!Ø€GˆZÓØ€Dˆ*ÓØ"€K�Ó"Ø#€L�*Ô#r?   r$   c                  ó<   — e Zd ZU dZded<   dZded<   edd„«       Zy)r"   Nre   Úaddressr0   Úportc                ó†   — |sy t        d|v r|nd|› �«      }|j                  sy  | |j                  |j                  ¬«      S )Nz://z//)rl   rm   )r   Úhostnamerm   )r;   Úapi_baseÚparseds      r=   Úfrom_api_basezServerInfo.from_api_base�   s@   € áØÜ ¨U°hÑ->¡ÀbÈÈ
ÀOÓTˆØ�ŠØÙ˜6Ÿ?™?°·±Ô=Ð=r?   )rp   re   rA   úServerInfo | None)rB   rC   rD   rl   rE   rm   rF   rr   rG   r?   r=   r"   r"   ˜   s(   … à€GˆZÓØ€Dˆ*Óàò>ó ñ>r?   r"   c                  óR  — e Zd ZU ded<   dZded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    eddh«      Zd ed!<   ed#d"„«       Zy)$r   ÚstrÚguardrail_nameNre   ÚmodeÚstatusr0   Úmasked_entity_countÚproviderÚactionÚresponse_jsonrG   útuple[str, ...]Úviolation_categoriesr-   Úconfidence_scoreÚ
risk_scoreÚdurationÚ
start_timeÚend_timeÚguardrail_idÚpolicy_templateÚdetection_methodÚ
usage_jsonÚcostúbool | NoneÚcost_in_spendúSpanError | NoneÚerrorÚguardrail_intervenedÚguardrail_failed_to_respondzClassVar[frozenset[str]]Ú_ERROR_STATUSESc           
     ó¨  — t        t        t        t        f   |«      j                  }t         |d«      «      } |d«      } |d«      } |d«      }|| j                  v rt        |t         |d«      «      ¬«      nd} | di dt         |d«      «      xs d	“d
t         |d«      «      “d|“dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “d|�t        |«      nd“dt         |d«      «      xs d“dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “dt         |d«      «      “d|�t        |«      nd“dt         |d«      «      “dt        |t        «      r|nd“d |“ŽS )!uŒ  Build from one ``standard_logging_guardrail_information`` entry.

        Reads the canonical, provider-agnostic ``StandardLoggingGuardrailInformation``
        keys only â€” no guessing at a single provider's field names. Values that are
        typed as enums or lists (e.g. ``guardrail_mode``) are normalized to a
        stable string rather than assumed to already be plain strings.
        Úguardrail_statusÚguardrail_responseÚguardrail_usageÚguardrail_cost_in_spendÚguardrail_action)rf   rg   Nrv   Ú	guardrailrw   Úguardrail_moderx   ry   rz   Úguardrail_providerr{   r|   r~   rG   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   Úguardrail_costrŠ   rŒ   )r   r   ru   Úobjectr:   r   r�   r$   Ú_guardrail_mode_strÚ_total_masked_entitiesÚ_json_or_noner   r   Ú
isinstanceÚbool)r;   Úentryr:   rx   ÚresponseÚusageÚin_spendrŒ   s           r=   Úfrom_logging_entryz$GuardrailSpanData.from_logging_entryÑ   s"  € ô œ'¤#¤v +Ñ.°Ó6×:Ñ:ˆÜ™sÐ#5Ó6Ó7ˆÙÐ2Ó3ˆÙÐ,Ó-ˆÙÐ7Ó8ˆð ˜×,Ñ,Ñ,ô  ´¹Ð<NÓ8OÓ1PÕQàð 	ñ
 ò 
Ü!¡#Ð&6Ó"7Ó8ÒG¸Køð
ä$¡SÐ)9Ó%:Ô;ð
ñ ð
ô !7±sÐ;PÓ7QÔ Rð	
ô
 ™CÐ 4Ó5Ô6ð
ô ™#Ð0Ó1Ô2ð
ð 6>Ð5Iœ-¨Ô1Ètøð
ô ".©cÐ2HÓ.IÓ!JÒ!PÈbøð
ô &¡cÐ*<Ó&=Ô>ð
ô  ¡ LÓ 1Ô2ð
ô ™c *›oÔ.ð
ô  ¡ LÓ 1Ô2ð
ô ™c *›oÔ.ð
ô  ¡ NÓ 3Ô4ð
ô #¡3Ð'8Ó#9Ô:ð
ô  $¡CÐ(:Ó$;Ô<ð!
ð" 05Ð/@”} UÔ+Àdøð#
ô$ ™#Ð.Ó/Ô0ð%
ô& '1°¼4Ô&@™(Àdøð'
ñ( ð)
ð 	
r?   )r    r)   rA   r   )rB   rC   rD   rE   rw   rx   ry   rz   r{   r|   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   rŠ   rŒ   Ú	frozensetr�   rF   r¤   rG   r?   r=   r   r   §   s  … àÓØ€Dˆ*ÓØ€FˆJÓØ&*Ð˜Ó*Ø€HˆjÓØ€FˆJÓð !%€M�:Ó$Ø,.Ð˜/Ó.Ø%)Ð�lÓ)Ø#€J�Ó#Ø!€HˆlÓ!ð  $€J�Ó#Ø!€HˆlÓ!ð  $€L�*Ó#Ø"&€O�ZÓ&Ø#'Ð�jÓ'ð "€J�
Ó!Ø€Dˆ,Óð "&€M�;Ó%ð #€EÐÓ"ñ 1:Ð;QÐSpÐ:qÓ0r€OÐ-Óràò'
ó ñ'
r?   r   c                  óp   — e Zd ZU ded<   dZded<   dZded<    ee¬«      Zd	ed
<   e		 d	 	 	 	 	 dd„«       Z
y)r#   ru   Úservice_nameNre   Ú	call_typer‹   rŒ   ©Údefault_factoryzMapping[str, str]Úevent_metadatac                ó¬   —  | |j                   j                  |j                  |j                  rt	        |j                  ¬«      nd t        |«      ¬«      S )N)rg   )r§   r¨   rŒ   r«   )ÚserviceÚvaluer¨   rŒ   r$   Úsanitize_event_metadata)r;   Úpayloadr«   s      r=   Úfrom_payloadzServiceSpanData.from_payload  sC   € ñ Ø Ÿ™×.Ñ.Ø×'Ñ'Ø6=·m²m”) G§M¡MÕ2ÈÜ2°>ÓBô	
ð 	
r?   ©N)r°   r(   r«   rb   rA   r#   )rB   rC   rD   rE   r¨   rŒ   r   Údictr«   rF   r±   rG   r?   r=   r#   r#   ü   sb   … àÓØ €IˆzÓ Ø"€EÐÓ"ñ
 ).¸dÔ(C€NÐ%ÓCàð 7;ð
à%ð
ð 4ð
ð 
ò	
ó ñ
r?   r#   c                  óL   — e Zd ZU ded<   ded<   dZded<   dZded<   dZd	ed
<   y)r!   ru   Úhttp_methodÚrouteNre   Úurl_pathr0   Ústatus_codezRequestIdentity | NoneÚidentity)rB   rC   rD   rE   r·   r¸   r¹   rG   r?   r=   r!   r!     s,   … àÓØƒJØ€HˆjÓØ"€K�Ó"Ø'+€HÐ$Ô+r?   r!   c                  ó8   — e Zd ZU dZded<   dZded<   dZded<   y)r%   z=A single function/tool declared on a chat-completion request.ru   ÚnameNre   ÚdescriptionÚparameters_json)rB   rC   rD   rc   rE   r¼   r½   rG   r?   r=   r%   r%   &  s   … áGà
ƒIØ"€K�Ó"Ø"&€O�ZÔ&r?   r%   c                  ó8  — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   dZded<    ee¬«      Zded<   dZded<   dZ	d ed!<   dZ
d ed"<   dZded#<   dZded$<   dZd%ed&<   dZded'<   e	 	 d)	 	 	 	 	 	 	 d*d(„«       Zy)+r   r   Ú	operationru   rz   Úrequest_modelre   Úresponse_modelÚresponse_idr   Úrequest_paramsr   r¢   r}   Úfinish_reasonsr‹   rŒ   r-   Úresponse_costrs   Úserverr   r¹   Nr‰   Úis_streamingr©   r   rˆ   rG   útuple[ToolDefinition, ...]Útoolsú tuple[Mapping[str, object], ...]Úmessages_inÚchoices_outÚsystem_fingerprintÚtime_to_first_chunk_secondszGenAIOutputType | NoneÚoutput_typer¨   c                óB  — t        t        t        t        f   |j	                  d«      xs i «      }t        j                  |«      }|j	                  d«      }t        t        t        t        f   t        |t        «      r|ni «      }t        |j	                  d«      «      }t        |«      }	t        |j	                  d«      «      }
 | di dt        |
«      “dt        t        |j	                  d«      «      «      “d|j                  “d	|j                  “d
t        |j	                  d«      «      “dt         j#                  |«      “dt%        t'        |j	                  d«      «      t'        |j	                  d«      «      t'        |j	                  d«      «      ¬«      “d|	“dt)        |«      “dt+        |j	                  d«      «      “dt,        j/                  t        d|j	                  d«      «      «      “dt0        j3                  |j4                  «      “d|j6                  “dt9        |j	                  d«      «      “dt;        |«      “d|rt        |j	                  d«      «      nd“d |r|nd“d!t        |j	                  d!«      «      “d"|“d#t=        |
«      “d|
xs d “ŽS )$NÚmodel_parametersr¡   Úchoicesr¨   r¿   rz   Úcustom_llm_providerrÀ   rÁ   rÂ   ÚidrÃ   r¢   Úprompt_tokensÚcompletion_tokensrK   )rI   rJ   rK   rÄ   rŒ   rÅ   rˆ   rb   Úcost_breakdownrÆ   r¹   rÇ   ÚstreamrÉ   rË   ÚmessagesrG   rÌ   rÍ   rÎ   rÏ   )r   r   ru   rš   r:   r   Úfrom_standard_logging_payloadrž   r³   Ú_dictsÚ_finish_reasonsr   r   r   rÀ   rÁ   r   r>   r   r   Ú_parse_errorr   r   ra   r"   rr   rp   r¹   r   Ú_extract_toolsr   )r;   r°   Úcapture_contentrÎ   r<   ÚcontextÚraw_responser¡   rÌ   rÄ   r¨   s              r=   rÚ   z-LLMCallSpanData.from_standard_logging_payloadO  s�  € ô œW¤S¬& [Ñ1°7·;±;Ð?QÓ3RÒ3XÐVXÓYˆô (×EÑEÀgÓNˆð &Ÿk™k¨*Ó5ˆÜœw¤s¬F {Ñ3ÄZÐP\Ô^bÔEc±\ÐikÓlˆÜ# H§L¡L°Ó$;Ó<ˆô !0°Ó <ˆÜ! '§+¡+¨kÓ":Ó;ˆ	Ùò 
Ü'¨	Ô2ð
ä%¤f¨W¯[©[Ð9NÓ-OÓ&PÔQð
ð "×/Ò/ð
ð #×1Ò1ð	
ô
 ˜xŸ|™|¨DÓ1Ô2ð
ô ,×AÑAÀ&ÔIð
ô Ü# G§K¡K°Ó$@ÓAÜ$ W§[¡[Ð1DÓ%EÓFÜ# G§K¡K°Ó$?Ó@õð
ñ *ð
ô ˜wÔ'ð
ô # 7§;¡;¨Ó#?Ô@ð
ô ×'Ñ'¬Ð-JÈGÏKÉKÐXhÓLiÓ(jÔkð
ô  ×+Ñ+¨G×,<Ñ,<Ô=ð!
ð" ×%Ò%ð#
ô$ ! §¡¨XÓ!6Ô7ð%
ô& ! Ô(ð'
ñ( <Kœ˜wŸ{™{¨:Ó6Ô7ÐPRøð)
ñ* (7™¸Bøð+
ô,  & h§l¡lÐ3GÓ&HÔIð-
ñ. )Dð/
ô0 ,¨IÔ6ð1
ð2  Ò' 4øð3
ð 	
r?   )FN)r°   r*   rß   rŸ   rÎ   r-   rA   r   )rB   rC   rD   rE   rÇ   r   r   rˆ   rÉ   rË   rÌ   rÍ   rÎ   rÏ   r¨   rF   rÚ   rG   r?   r=   r   r   /  sñ   … àÓØƒMØÓØÓØÓØ$Ó$ØƒOØ#Ó#ØÓØÓØÓØÓØ $€L�+Ó$Ù¨'Ô2€Dˆ'Ó2Ø(*€EÐ%Ó*ð 57€KÐ1Ó6Ø46€KÐ1Ó6Ø%)Ð˜
Ó)Ø04Ð Ó4ð +/€KÐ'Ó.Ø €IˆzÓ àð !&Ø48ð	1
à'ð1
ð ð1
ð &2ð	1
ð
 
ò1
ó ñ1
r?   r   c                óÌ   — | sy	 t        | «      }|j                  }|j                  }|sy|j                  dk(  rdn|j                  dk(  rdnd}||xs |fS # t        $ r Y yw xY w)a  Split a redacted MCP server origin into ``server.address`` / ``server.port``.

    ``mcp_server_resource`` is a scheme + host + port origin with userinfo, path,
    query and fragment already stripped. The port falls back to the scheme default
    when the origin omits it, because a consumer that keys a downstream dependency
    off the address renders a missing port as ``0``.

    The origin is rebuilt without its IPv6 brackets upstream, so reading the port can
    raise on an address the host check still admits: a zone-scoped ``fe80::1%25eth0``
    leaves a truthy hostname of ``fe80`` behind. Both halves are read inside the guard
    so an unparseable origin yields no address rather than propagating out of span
    construction, matching how the redactor guards the same split.
    )NNÚhttpsi»  ÚhttpéP   N)r   ro   rm   Ú
ValueErrorÚscheme)Úresourcerq   ro   rm   Údefault_ports        r=   Ú_upstream_address_portrê   ‡  sx   € ñ ØðÜ  Ó*ˆØ Ÿ/™/ˆØ—k‘kˆñ ØØ!'§¡°'Ò!9™#ÀVÇ]Á]ÐV\ÒE\¹rÐbf€LØ�TÒ)˜\Ð)Ð)øô ò Ùðús   …#A Á	A#Á"A#c                  óª   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   e	 d	 	 	 	 	 dd„«       Zy)r    u†  One MCP ``tools/call`` execution, parsed from a closed request's payload.

    The proxy is an MCP *client* to the upstream server it forwards the call to,
    so this is a CLIENT span. ``arguments_json``/``result_json`` are the tool's
    input/output â€” sensitive content, so they're only retained when content
    capture is enabled, mirroring ``LLMCallSpanData``'s message bodies.
    r   r¿   ru   ÚmethodÚ	tool_namere   Úserver_nameÚserver_addressr0   Úserver_portÚ
session_idÚarguments_jsonÚresult_jsonr‹   rŒ   r-   rÅ   r   r¹   c                ó  — t        t        t        t        t        f   |«      «      }t        t        |j                  d«      «      xs d «      \  }} | t        t        |j                  d«      «      «      t        j                  j                  t        |j                  d«      «      xs dt        |j                  d«      «      ||t        |j                  d«      «      |r+|j                  d«      �t        |j                  d«      «      nd |r+|j                  d«      �t        |j                  d«      «      nd t        |«      t        |j                  d	«      «      t        j                   |«      j"                  ¬
«      S )NÚmcp_server_resourcer¨   r»   Ú Úmcp_server_nameÚmcp_session_idÚ	argumentsÚresultrÅ   )r¿   rì   rí   rî   rï   rð   rñ   rò   ró   rŒ   rÅ   r¹   )Ú_mcp_tool_call_metadatar   r   ru   rš   rê   r   r:   r   r   Ú
TOOLS_CALLr®   r�   rÝ   r   r   rÚ   r¹   )r;   r°   rß   Úmetarl   rm   s         r=   rÚ   z1MCPToolCallSpanData.from_standard_logging_payloadº  s-  € ô .¬d´7¼3Ä¸;Ñ3GÈÓ.QÓRˆÜ.¬v°d·h±hÐ?TÓ6UÓ/VÒ/^ÐZ^Ó_‰ˆ�ÙÜ'¬¨w¯{©{¸;Ó/GÓ(HÓIÜ×'Ñ'×-Ñ-Ü˜TŸX™X fÓ-Ó.Ò4°"Ü˜tŸx™xÐ(9Ó:Ó;Ø"ØÜ˜dŸh™hÐ'7Ó8Ó9á8GÈDÏHÉHÐU`ÓLaÐLm”˜dŸh™h {Ó3Ô4Ðswñ 6EÈÏÉÐRZÓI[ÐIg”˜dŸh™h xÓ0Ô1Ðmqä˜wÓ'Ü" 7§;¡;¨Ó#?Ó@Ü#×AÑAÀ'ÓJ×SÑSô!
ð 	
r?   N©F)r°   r*   rß   rŸ   rA   r    ©rB   rC   rD   rc   rE   rF   rÚ   rG   r?   r=   r    r    £  s|   … ñð ÓØƒKØƒNØÓØÓØÓØÓØÓØÓØÓØÓØÓààFKð
Ø,ð
Ø?Cð
à	ò
ó ñ
r?   r    c                ó’   — | j                  d«      }t        |t        «      si S |j                  d«      }t        |t        «      r|S i S )z¨The MCP gateway's tool-call metadata, which lives under
    ``StandardLoggingPayload.metadata`` (a ``StandardLoggingMetadata`` key), not
    at the payload's top level.ÚmetadataÚmcp_tool_call_metadata)r:   rž   r   )r°   r  rý   s      r=   rû   rû   Ô  sD   € ð —k‘k *Ó-€HÜ�h¤Ô(Øˆ	Ø—,‘,Ð7Ó8€DÜ˜d¤GÔ,ˆ4Ð4°"Ð4r?   c                óV   — t        t        | «      «      xs | j                  d«      dk(  S )uß   Whether a closed request's payload is an MCP tool call rather than an LLM
    call â€” true when the MCP gateway stamped its tool-call metadata, or the call
    type says so on a path that hasn't populated the metadata yet.r¨   Úcall_mcp_tool)rŸ   rû   r:   ©r°   s    r=   r'   r'   ß  s)   € ô Ô'¨Ó0Ó1Òb°g·k±kÀ+Ó6NÐRaÑ6aÐbr?   c                  óZ   — e Zd ZU dZded<   ded<   ded<   ded	<   e	 d	 	 	 	 	 dd
„«       Zy)r   a{  One MCP ``tools/list`` discovery call, parsed from a closed request's payload.

    The proxy is an MCP *client* enumerating an upstream server's tools, so this is
    a CLIENT span. It carries neither ``gen_ai.operation.name`` nor ``gen_ai.tool.name``:
    the GenAI semconv sets ``execute_tool`` (and the tool name) only for tool *calls*,
    and listing executes no tool.
    ru   rì   re   rñ   r‹   rŒ   r   r¹   c                ó–   —  | t         j                  j                  d t        |«      t	        j
                  |«      j                  ¬«      S )N)rì   rñ   rŒ   r¹   )r   Ú
TOOLS_LISTr®   rÝ   r   rÚ   r¹   )r;   r°   rß   s      r=   rÚ   z2MCPListToolsSpanData.from_standard_logging_payloadõ  s?   € ñ Ü×'Ñ'×-Ñ-ØÜ˜wÓ'Ü#×AÑAÀ'ÓJ×SÑSô	
ð 	
r?   Nrþ   )r°   r*   rß   rŸ   rA   r   rÿ   rG   r?   r=   r   r   æ  sM   … ñð ƒKØÓØÓØÓààFKð
Ø,ð
Ø?Cð
à	ò
ó ñ
r?   r   c                ó*   — | j                  d«      dk(  S )uš   Whether a closed request's payload is an MCP ``tools/list`` discovery call
    rather than a tool call or an LLM call â€” true when the call type says so.r¨   Úlist_mcp_tools)r:   r  s    r=   r&   r&     s   € ð �;‰;�{Ó#Ð'7Ñ7Ð7r?   )Úapi_keyÚtokenÚsecretÚpasswordÚcookieÚauthorizationÚheaderÚhidden_paramszFinal[tuple[str, ...]]Ú_SENSITIVE_METADATA_SUBSTRINGS>   Úfunction_argsÚfunction_nameÚfunction_kwargszFinal[frozenset]Ú_DROP_METADATA_KEYSi   r
   Ú_MAX_METADATA_VALUE_LENé    Ú_MAX_METADATA_ITEMSc                óT  ‡— | si S i }| j                  «       D ]�  \  }}t        |«      t        k\  r |S t        |t        «      r|t
        v rŒ4|j                  «       Št        ˆfd„t        D «       «      rŒ]t        |t        t        t        f«      sŒyt	        |«      dt         ||<   Œ� |S )uƒ  Reduce caller-supplied ``event_metadata`` to span-safe string attributes.

    Keeps only primitive values (str/int/float/bool) under non-sensitive keys â€”
    never ``repr()``-ing objects, dicts, or lists, never stamping secrets/headers,
    and bounding the count and per-value length. This is the single chokepoint:
    both the GenAI and legacy mappers read the cleaned result.
    c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr²   rG   )Ú.0r  Úlowereds     €r=   ú	<genexpr>z*sanitize_event_metadata.<locals>.<genexpr>3  s   øè ø€ ÒL Eˆu˜ÔÑLùs   ƒN)ÚitemsÚlenr  rž   ru   r  ÚlowerÚanyr  ÚintÚfloatr  )r«   ÚcleanÚkeyr®   r  s       @r=   r¯   r¯      s©   ø€ ñ Øˆ	Ø#%€EØ$×*Ñ*Ó,ò >‰
ˆˆUÜˆu‹:Ô,Ò,Øð €Lô ˜#œsÔ# sÔ.AÑ'AØØ—)‘)“+ˆÜÓLÔ-KÔLÔLØô �eœc¤3¬Ð.Õ/Ü˜U›Ð$<Ô%<Ð=ˆE�#ŠJð>ð €Lr?   c                ó|   — t        | t        «      r| S 	 t        j                  | t        ¬«      S # t        $ r Y yw xY w)zSJSON-serialize ``value`` (already-string values pass through). ``None`` on failure.©ÚdefaultN)rž   ru   ÚjsonÚdumpsÚ	Exception©r®   s    r=   r�   r�   <  s9   € ä�%œÔØˆðÜ�z‰z˜%¬Ô-Ð-øÜò Ùðús   ”/ ¯	;º;c                ó^  — | €yt        | t        t        f«      reg }| D ]I  }|€Œt        |t        «      rt	        |j
                  «      n
t	        |«      }|sŒ9|j                  |«       ŒK dj                  |«      xs dS t        | t        «      rt	        | j
                  «      S t	        | «      S )u“  Normalize ``guardrail_mode`` to a stable string.

    ``guardrail_mode`` is typed as a ``GuardrailEventHooks`` enum, a list of them,
    or a ``GuardrailMode`` â€” not a plain string. Emit the enum *value* (e.g.
    ``"pre_call"``) rather than ``str(enum)`` (``"GuardrailEventHooks.pre_call"``),
    and join a list of modes so a guardrail that runs at multiple hooks is
    represented faithfully.
    Nú,)rž   ÚlistÚtupler   r   r®   ÚappendÚjoin)r®   ÚpartsÚitemÚparts       r=   r›   r›   F  sš   € ð €}ØÜ�%œ$¤˜Ô'Ø"$ˆØò 	#ˆDØˆ|ØÜ)3°D¼$Ô)?”6˜$Ÿ*™*Ô%ÄVÈDÃ\ˆDÚØ—‘˜TÕ"ð	#ð �x‰x˜‹Ò& $Ð&Ü�%œÔÜ�e—k‘kÓ"Ð"Ü�%‹=Ðr?   c                ó„   — t        | t        «      r&t        d„ | j                  «       D «       «      }|xs dS t	        | «      S )uM   ``masked_entity_count`` is a ``{entity_type: count}`` map â€” sum to a total.c              3  óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr²   )rž   r$  )r  Úvs     r=   r  z)_total_masked_entities.<locals>.<genexpr>b  s   è ø€ ÒK ¼
À1ÄcÕ8Jœ1ÑKùó   ‚˜N)rž   r   ÚsumÚvaluesr   )r®   Útotals     r=   rœ   rœ   _  s6   € ä�%œÔ!ÜÑK e§l¡l£nÔKÓKˆØŠ}˜ÐÜ�%‹=Ðr?   c                óH   — t        | t        «      syt        d„ | D «       «      S )zGThe dict items of ``value`` (when it's a list), as a tuple. Else empty.rG   c              3  óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr²   )rž   r³   )r  r6  s     r=   r  z_dicts.<locals>.<genexpr>k  s   è ø€ ÒB˜$¬:°d¼DÕ+A”ÑBùr;  )rž   r1  r2  r.  s    r=   rÛ   rÛ   g  s    € ä�eœTÔ"ØÜÑB %ÔBÓBÐBr?   c                ó,   ‡— t        ˆfd„| D «       «      S )z4Non-empty ``finish_reason`` of each response choice.c              3  ó\   •K  — | ]#  }t        |j                  d «      «      xŠsŒ ‰–— Œ% y­w)Úfinish_reasonN)r   r:   )r  ÚcÚrs     €r=   r  z"_finish_reasons.<locals>.<genexpr>p  s)   øè ø€ ÒM�q¬V°A·E±E¸/Ó4JÓ-KÐ(K¨Ñ(K”ÑMùs   ƒ!,¥,)r2  )rÒ   rE  s    @r=   rÜ   rÜ   n  s   ø€ äÓM˜GÔMÓMÐMr?   c                ó  — | j                  d«      dk7  ryt        t        t        t        f   | j                  d«      xs i «      }t        t        |j                  d«      «      xs t        |j                  d«      «      t        |j                  d«      «      xs t        | j                  d«      «      t        |j                  d«      «      t        |j                  d	«      «      t        |j                  d
«      «      ¬«      S )z=A ``SpanError`` for a failed request, or ``None`` on success.rx   ÚfailureNÚerror_informationÚerror_classÚ
error_codeÚerror_messageÚ	error_strÚ	tracebackrj   )rf   rg   rh   ri   rj   )r:   r   r   ru   rš   r$   r   )r°   Úinfos     r=   rÝ   rÝ   s  sÃ   € à‡{�{�8Ó 	Ò)ØÜ”wœs¤F˜{Ñ+¨W¯[©[Ð9LÓ-MÒ-SÐQSÓT€DÜÜ˜$Ÿ(™( =Ó1Ó2ÒT´f¸T¿X¹XÀlÓ=SÓ6TÜ�t—x‘x Ó0Ó1ÒU´V¸G¿K¹KÈÓ<TÓ5UÜ�D—H‘H˜\Ó*Ó+Ü˜4Ÿ8™8 KÓ0Ó1Ü˜DŸH™H ^Ó4Ó5ôð r?   c                ó~  — t        | t        «      syd| v r| j                  d«      n| }t        |t        «      syt        |j                  d«      «      }|sy|j                  d«      }d}|�	 t	        j
                  |t        ¬«      }t        |t        |j                  d«      «      |¬«      S # t        $ r d}Y Œ3w xY w)uR   One ``tools``/``functions`` entry â†’ ``ToolDefinition``, or ``None`` if unusable.NÚfunctionr»   Ú
parametersr)  r¼   )r»   r¼   r½   )	rž   r³   r:   r   r+  r,  ru   r-  r%   )r    Úfnr»   r<   r½   s        r=   Ú_tool_from_entryrS  �  sµ   € ä�eœTÔ"ØØ)3°uÑ)<�—	‘	˜*Ô%À%€BÜ�bœ$ÔØÜ˜Ÿ™ ›Ó(€DÙØØ—F‘F˜<Ó(€FØ"&€OØÐð	#Ü"Ÿj™j¨¼Ô=ˆOô ØÜ˜2Ÿ6™6 -Ó0Ó1Ø'ôð øô ò 	#Ø"ŠOð	#ús   Á-B. Â.B<Â;B<c                ó²   ‡— | j                  d«      }t        |t        «      s| j                  d«      }t        |t        «      syt        ˆfd„|D «       «      S )a  Pull declared tools from request params (OpenAI / Anthropic shape).

    Accepts the chat-completion ``tools=[{"type":"function", "function":
    {...}}, ...]`` shape, and falls back to the ``functions=[...]`` shape.
    Returns an empty tuple when neither is present.
    rÉ   Ú	functionsrG   c              3  ó>   •K  — | ]  }t        |«      xŠ€Œ‰–— Œ y ­wr²   )rS  )r  r    Úts     €r=   r  z!_extract_tools.<locals>.<genexpr>§  s!   øè ø€ ÒX�uÔ3CÀEÓ3JÐ.J¨aÑ-W”ÑXùs   ƒ–)r:   rž   r1  r2  )rÑ   Ú	raw_toolsrW  s     @r=   rÞ   rÞ   ™  sM   ø€ ð !×$Ñ$ WÓ-€IÜ�i¤Ô&Ø$×(Ñ(¨Ó5ˆ	Ü�i¤Ô&ØÜÓX 	ÔXÓXÐXr?   )rè   re   rA   ztuple[str | None, int | None])r°   r@   rA   r@   )r°   r@   rA   rŸ   )r«   rb   rA   zdict[str, str])r®   rš   rA   re   )r®   rš   rA   r0   )r®   rš   rA   rÊ   )rÒ   rÊ   rA   r}   )r°   r*   rA   r‹   )r    rš   rA   zToolDefinition | None)rÑ   r@   rA   rÈ   )Grc   Ú
__future__r   r+  Úcollections.abcr   Údataclassesr   r   Úenumr   Útypingr   r	   r
   r   Úurllib.parser   Ú(litellm.integrations.otel.model.metadatar   r   Ú'litellm.integrations.otel.model.semconvr   r   r   r   r   r   Ú%litellm.integrations.otel.model.utilsr   r   r   r   r   Ú__all__Úlitellm.types.servicesr(   Úlitellm.types.utilsr)   r*   r   r   r   r$   r"   r   r#   r!   r%   r   rê   r    rû   r'   r   r&   r  rE   r¥   r  r  r  r¯   r�   r›   rœ   rÛ   rÜ   rÝ   rS  rÞ   rG   r?   r=   ú<module>re     s`  ðÚ På "ã Ý #ß (Ý ß 7Ó 7Ý !÷÷÷ ÷õ ò€ñ& Ý;÷ñ �$Ô÷
ð 
ó ð
ñ6 �$Ô÷$ð $ó ð$ñ �$Ô÷'
ð '
ó ð'
ñT �$Ô÷$ð $ó ð$ñ �$Ô÷>ð >ó ð>ñ �$Ô÷Q
ð Q
ó ðQ
ñh �$Ô÷
ð 
ó ð
ñ: �$Ô÷,ð ,ó ð,ñ �$Ô÷'ð 'ó ð'ñ �$Ô÷Q
ð Q
ó ðQ
ón*ñ8 �$Ô÷-
ð -
ó ð-
ó`5ócñ �$Ô÷
ð 
ó ð
ó:8ð	:Ð Ð 6ó 	ñ )2Ò2gÓ(hÐ Ð%Ó hØ!%Ð ˜Ó %ØÐ �UÓ ðØ/ðàóó8óó2óCóNó
óð0YØ*ðYàôYr?   