
    $h(              	          S SK r S SKrS SKJrJr  S SKJrJrJr  S SKJ	r	  S SK
JrJrJr   S SKJr  Sr\R$                  " \5      r\S	   r\(       Ga  S S
\S\S\4S jjrS\R2                  S\4S jrS\R2                  S\4S jrS\R8                  S\\\4   4S jrS\\\4   S\4S jrS\R>                  S\\\4   4S jr S\RB                  S\\\4   4S jr"S\RF                  S\\\4   4S jr$S\RJ                  S\\\4   4S jr&S\RN                  S\\\4   4S jr(S\RR                  S\\\4   4S jr*S\R2                  S\\\4   4S jr+ S!S\\   S\\   S\\   S\4S jjr,gg! \ a    Sr GNFf = f)"    N)datetimetimezone)AnyLiteralOptional)uuid4)InputTokenDetailsOutputTokenDetailsUsageMetadata)tracingTF)toolchainllm	retriever	embeddingpromptparserdatadefault_keyreturnc                 :   [        U [        5      (       a  U nU$ [        U [        5      (       a6   [        R                  " U 5      n[        U[        5      (       a  UnU$ X0n U$ U bS  [        U S5      (       aB  [        U R                  5      (       a(  [        U [        5      (       d   U R                  SSS9nU$ X0nU$ ! [        R
                   a    X0n U$ f = f! [         a2  n[        R                  S[        U 5       SU 35        X0n SnAU$ SnAff = f)a   Parse inputs or outputs into a dictionary format.

Args:
    data: The data to parse (can be inputs or outputs)
    default_key: The default key to use if data is not a dict
        ("input" or "output")

Returns:
    Dict: The parsed data as a dictionary
N
model_dumpTjsonexclude_nonemodez&Failed to use model_dump to serialize z
 to JSON: )
isinstancedictstrr   loadsJSONDecodeErrorhasattrcallabler   type	Exceptionloggerdebug)r   r   data_parsed_jsones        W/var/www/html/shao/venv/lib/python3.13/site-packages/langsmith/wrappers/_agent_utils.pyparse_ior,      s1    dD!!E4 3 c"","jj.k400'E* ' )/E&  l++))tT**,TG  !'E% '' ,$+" %,  ,<T$ZL
STRUV %+ ,s/   -C  C  )C  CC
D('DDspanc                 \    [        U R                  SS 5      nUS;   a  gUS;   a  gUS;   a  gg)Nr$   )agenthandoffcustomr   )function	guardrailr   )
generationresponser   )getattr	span_datar-   	span_types     r+   get_run_typer:   >   s;    DNNFD9	663344    c                     [        U R                  S5      (       a1  U R                  R                  (       a  U R                  R                  $ [        U R                  SS 5      nUS:X  a  gUS:X  a  gUS:X  a  gg	)
Nnamer$   r4   
Generationr5   Responser0   HandoffSpan)r"   r7   r=   r6   r8   s     r+   get_run_namerB   I   se    4>>6**t~~/B/B>>&&&DNNFD9	$*$)#r;   r7   c                 \    [        U R                  S5      [        U R                  S5      S.$ )Ninputoutput)inputsoutputs)r,   rD   rE   r7   s    r+   _extract_function_span_datarI   V   s,     y8	 0 0(;
 	
r;   usagec                    U R                  S5      =(       d    U R                  S5      =(       d    SnU R                  S5      =(       d    U R                  S5      =(       d    SnU R                  S5      =(       d    X-   n0 nU R                  S5      =n(       a  UR                  S5      =n(       a  XdS	'   0 nU R                  S
5      =n(       a  UR                  S5      =n	(       a  XS'   [        UUU[        S0 UD6[        S0 UD6S9$ )a(  Extract standardized usage metadata.

Supports both older OpenAI chat completions format
(prompt_tokens/completion_tokens) and newer format (input_tokens/output_tokens).

Token details follow new OpenAI format only:
- input_tokens_details: cached_tokens
- output_tokens_details: reasoning_tokens
input_tokensprompt_tokensr   output_tokenscompletion_tokenstotal_tokensinput_tokens_detailscached_tokens
cache_readoutput_tokens_detailsreasoning_tokens	reasoning)rL   rN   rP   input_token_detailsoutput_token_details )getr   r	   r
   )
rJ   rL   rN   rP   rW   input_detailsrR   rX   output_detailsrU   s
             r+   _extract_usage_metadatar]   ^   s	    yy0SEIIo4NSRSIIo&M%))4G*HMA 	 yy0R\5Q %'!II&<==== - 1 1/ BB}B4AL1 &("YY'>??>?#1#5#56H#III4D[1%'% 1 H4G H!3!K6J!K
 	
r;   c                     [        U R                  S5      [        U R                  S5      U R                  U R                  S.S.nU R
                  (       a  [        U R
                  5      US   S'   U$ )NrD   rE   )modelmodel_config)rF   rG   invocation_paramsrG   usage_metadata)r,   rD   rE   r_   r`   rJ   r]   )r7   r   s     r+   _extract_generation_span_datarc      sd     y8	 0 0(;" ) 6 6"
 ??0G	0XDO,-r;   c           	         0 nU R                   bP  U R                   U R                  b1  U R                  R                  (       a  U R                  R                  OSS.US'   U R                  Gbz  U R                  R                  SSS9nSUR	                  S/ 5      0US'   UR	                  S	S 5      =n(       aq  S
U;   a/  UR	                  S
5      US'   US   R	                  SS5      US   S'   SU;   a/  UR	                  S5      US'   US   R	                  SS5      US   S'   X1S   S'   UR                  5        VVs0 sH  u  pEUS;   d  M  XE_M     snnUS'   UR                  5        VVs0 sH#  u  pEU1 SkR                  US   5      ;  d  M!  XE_M%     nnnUR                  US   R                  S5      US   R                  S5      US   R                  S5      SSS.5        XaS'   U$ s  snnf s  snnf )N )rD   instructionsrF   Tr   r   rE   rG   rJ   rT   rX   rU   r   rV   rQ   rW   rR   rS   rb   )
max_output_tokensr_   parallel_tool_callsrV   temperaturetexttool_choicetoolstop_p
truncationra   >   rJ   rE   rf   r_   rg   ri   chatopenai)ls_model_namels_max_tokensls_temperaturels_model_typels_providermetadata)	rD   r5   rf   r   popitemsunionupdaterZ   )r7   r   r5   rJ   kvrv   s          r+   _extract_response_span_datar}      sF     "??&" !))5!**77 &&33 DN ) ))44$V4TH'h)CDDO Wd33u3*e349II>U4VE01AF.Bc,a0 01+> *U23899=S3TE/0AF-Bc/1- /0> 5:Y 01 %NN,),DA ,)D$%& %NN,,DA7==dCV>WX ,   OO%)*=%>%B%B7%K%)*=%>%B%BCV%W&*+>&?&C&CM&R%+#+  (I)"s   <G*G*+G0G0c                 R    U R                   U R                  S.SU R                  0S.$ )N)rl   handoffsoutput_type)ra   rv   )rl   r   r   rH   s    r+   _extract_agent_span_datar      s5     #%.."
 y44
 	
r;   c                 8    SU R                   U R                  S.0$ )NrF   
from_agentto_agentr   rH   s    r+   _extract_handoff_span_datar      s(     '22%..
 	
r;   c                 "    SSU R                   00$ )Nrv   	triggered)r   rH   s    r+   _extract_guardrail_span_datar      s     [)*=*=>??r;   c                     SU R                   0$ )Nrv   )r   rH   s    r+   _extract_custom_span_datar      s    INN++r;   c                 \   0 n[        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                  5      (       a&  UR	                  [        U R                  5      5        U$ [        U R                  [        R                   5      (       a&  UR	                  [#        U R                  5      5        U$ 0 $ N)r   r7   r   FunctionSpanDatarz   rI   GenerationSpanDatarc   ResponseSpanDatar}   AgentSpanDatar   HandoffSpanDatar   GuardrailSpanDatar   CustomSpanDatar   )r-   r   s     r+   extract_span_datar      s   !dnng&>&>??KK3DNNCD   (B(BCCKK5dnnEF  (@(@AAKK3DNNCD  (=(=>>KK0@A  (?(?@@KK24>>BC  (A(ABBKK4T^^DE  (>(>??KK1$..AB  Ir;   
start_timerun_idparent_dotted_orderc                     U =(       d$    [         R                  " [        R                  5      nU=(       d    [	        [        5       5      nUR                  S5      U-   nUb  US-   U-   $ U$ )z3Create a dotted order from a start time and run id.z%Y%m%dT%H%M%S%fZ.)r   nowr   utcr   r   strftime)r   r   r   stid_current_dotted_orders         r+   ensure_dotted_orderr   	  s]     58<<5$EG!{{+=>D*&,/CCC##r;   )rE   r   )-r   loggingr   r   typingr   r   r   uuidr   langsmith.schemasr	   r
   r   agentsr   HAVE_AGENTSImportError	getLogger__name__r&   RunTypeTr   r   r,   rA   r:   rB   r   rI   r]   r   rc   r   r}   r   r   r   r   r   r   r   r   r   r   rY   r;   r+   <module>r      s     ' ) )  R RK 
		8	$WX&s & &D &P	7<< 	H 	7<< C 
++
	c3h
"
tCH~ "
- "
H--	c3hC++C	c3hCJ	
G,A,A 	
d3PS8n 	

**
	c3h
@,,@	c3h@
,W-C-C ,SRUX , c3h 2 .2$X&$$ &c]$ 
	$k   Ks   E/ /E;:E;