
    	h(              	          d dl Z d dlZd dlmZmZ d dlmZmZmZ d dlm	Z	 d dl
mZmZmZ 	 d dlmZ dZn# e$ r dZY nw xY w ej        e          Zed	         Zerd!dededefdZdej        defdZdej        defdZdej        deeef         fdZdeeef         defdZdej        deeef         fdZ dej!        deeef         fdZ"dej#        deeef         fdZ$dej%        deeef         fdZ&dej'        deeef         fdZ(dej)        deeef         fdZ*dej        deeef         fdZ+	 d"dee         dee         dee         defd Z,dS dS )#    N)datetimetimezone)AnyLiteralOptional)uuid4)InputTokenDetailsOutputTokenDetailsUsageMetadata)tracingTF)toolchainllm	retriever	embeddingpromptparseroutputdatadefault_keyreturnc                 8   t          | t                    r| }n t          | t                    rK	 t          j        |           }t          |t                    r|}n|| i}n# t          j        $ r || i}Y nw xY w| t          | d          rt          | j                  rvt          | t                    sa	 |                     dd          }nL# t          $ r;}t                              dt          |            d|            || i}Y d}~nd}~ww xY w|| i}|S )a8  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        l/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/langsmith/wrappers/_agent_utils.pyparse_ior-      se    dD!! 	(EEc"" 	(,"j..k400 0'EE($/E' , , ,$d+, l++ ))  tT** 
,TGG , , ,VT$ZZVVSTVV   %d+	, !$'Es)   0A! !A76A76C 
D1DDspanc                 V    t          | j        dd           }|dv rdS |dv rdS |dv rdS dS )Nr%   )agenthandoffcustomr   )function	guardrailr   )
generationresponser   )getattr	span_datar.   	span_types     r,   get_run_typer;   >   sM    DNFD99	6667333644457    c                     t          | j        d          r| j        j        r| j        j        S t          | j        dd           }|dk    rdS |dk    rdS |dk    rdS d	S )
Nnamer%   r5   
Generationr6   Responser1   HandoffSpan)r#   r8   r>   r7   r9   s     r,   get_run_namerC   I   su    4>6** 	't~/B 	'>&&DNFD99	$$<*$$:)##96r<   r8   c                 X    t          | j        d          t          | j        d          dS )Ninputr   )inputsoutputs)r-   rE   r   r8   s    r,   _extract_function_span_datarI   V   s2     y88	 0(;;
 
 	
r<   usagec                 
   |                      d          p|                      d          pd}|                      d          p|                      d          pd}|                      d          p||z   }i }|                      d          x}r|                     d          x}r||d	<   i }|                      d
          x}r|                     d          x}	r|	|d<   t          |||t          di |t          di |          S )aX  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]   ^   sN    yy00SEIIo4N4NSRSIIo&&M%))4G*H*HMA 	 yy00R\M5Q %'!II&<==== 	B - 1 1/ B BB} B4A#L1 &("YY'>???> 	E#1#5#56H#I#II E4D$[1%'% 1 H H4G H H!3!K!K6J!K!K
 
 
 	
r<   c                     t          | j        d          t          | j        d          | j        | j        dd}| j        rt          | j                  |d         d<   |S )NrE   r   )modelmodel_config)rF   rG   invocation_paramsrG   usage_metadata)r-   rE   r   r_   r`   rJ   r]   )r8   r   s     r,   _extract_generation_span_datarc      so     y88	 0(;;" ) 6" "
 
 ? 	Y0G	0X0XDO,-r<   c                    i | j         ,| j         | j        | j        j        r| j        j        nddd<   | j        | j                            dd          }d|                    dg           id<   |                    d	d           x}rd
|v r=|                    d
          |d<   |d                             dd          |d         d<   d|v r=|                    d          |d<   |d                             dd          |d         d<   |d         d<   d |                                D             d<   fd|                                D             }|                    d                             d          d                             d          d                             d          ddd           |d<   S )N )rE   instructionsrF   Tr   r   r   rG   rJ   rT   rX   rU   r   rV   rQ   rW   rR   rS   rb   c                 "    i | ]\  }}|d v 	||S ))
max_output_tokensr_   parallel_tool_callsrV   temperaturetexttool_choicetoolstop_p
truncationrY   ).0kvs      r,   
<dictcomp>z/_extract_response_span_data.<locals>.<dictcomp>   s@     ) ) )Aq  1  r<   ra   c                 Z    i | ]'\  }}|h d                      d                   v$||(S )>   rJ   r   rf   ra   )union)rp   rq   rr   r   s      r,   rs   z/_extract_response_span_data.<locals>.<dictcomp>   sY       Aq777==dCV>WXX  1  r<   r_   rh   rj   chatopenai)ls_model_namels_max_tokensls_temperaturels_model_typels_providermetadata)rE   r6   rf   r   popitemsupdaterZ   )r8   r6   rJ   r}   r   s       @r,   _extract_response_span_datar      s?     "?&" !)5!*7 6 &33  DN ) )44$V4TTH'h)C)CDDO Wd333u :*e3349II>U4V4VE01AF.Bc,a00 01+> *U223899=S3T3TE/0AF-Bc/1-- /0> 5:Y 01) )$NN,,) ) )D$%"   $NN,,  H OO%)*=%>%B%B7%K%K%)*=%>%B%BCV%W%W&*+>&?&C&CM&R&R%+#+     (Dr<   c                 4    | j         | j        dd| j        idS )N)rm   handoffsoutput_type)ra   r}   )rm   r   r   rH   s    r,   _extract_agent_span_datar      s7     #%." "
 y4
 
 	
r<   c                 $    d| j         | j        diS )NrF   
from_agentto_agentr   rH   s    r,   _extract_handoff_span_datar      s'     '2%. 
 	
r<   c                     dd| j         iiS )Nr}   	triggered)r   rH   s    r,   _extract_guardrail_span_datar      s     [)*=>??r<   c                     d| j         iS )Nr}   )r   rH   s    r,   _extract_custom_span_datar      s    IN++r<   c                    i }t          | j        t          j                  r)|                    t          | j                             nt          | j        t          j                  r)|                    t          | j                             nft          | j        t          j                  r)|                    t          | j                             nt          | j        t          j
                  r(|                    t          | j                             nt          | j        t          j                  r(|                    t          | j                             nt          | j        t          j                  r(|                    t          | j                             nIt          | j        t          j                  r(|                    t#          | j                             ni S |S N)r   r8   r   FunctionSpanDatar   rI   GenerationSpanDatarc   ResponseSpanDatar   AgentSpanDatar   HandoffSpanDatar   GuardrailSpanDatar   CustomSpanDatar   )r.   r   s     r,   extract_span_datar      s   !dng&>?? 	KK3DNCCDDDD(BCC 	KK5dnEEFFFF(@AA 	KK3DNCCDDDD(=>> 		KK0@@AAAA(?@@ 	KK24>BBCCCC(ABB 	KK4T^DDEEEE(>?? 	KK1$.AABBBBIr<   
start_timerun_idparent_dotted_orderc                     | pt          j        t          j                  }|pt	          t                                }|                    d          |z   }||dz   |z   S |S )z3Create a dotted order from a start time and run id.z%Y%m%dT%H%M%S%fZN.)r   nowr   utcr    r   strftime)r   r   r   stid_current_dotted_orders         r,   ensure_dotted_orderr   	  sc     58<55$EGG!{{+=>>D*&,/CCC##r<   )r   r   )-r   loggingr   r   typingr   r   r   uuidr   langsmith.schemasr	   r
   r   agentsr   HAVE_AGENTSImportError	getLogger__name__r'   RunTypeTr    r   r-   rB   r;   rC   r   rI   r]   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   rY   r<   r,   <module>r      so     ' ' ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) )       R R R R R R R R R RKK   KKK 
	8	$	$WX @$& &s & &D & & & &P	7< 	H 	 	 	 	7< C    
+
	c3h
 
 
 
"
tCH~ "
- "
 "
 "
 "
H-	c3h   C+C	c3hC C C CJ	
G,A 	
d3PS8n 	
 	
 	
 	

*
	c3h
 
 
 
@,@	c3h@ @ @ @
,W-C ,SRUX , , , , c3h    2 .2$ $X&$$ &c]$ 
	$ $ $ $ $ $k@$ @$s   5 ??