
    Cj1                    2   S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
Jr  S SKJrJr  S SKJrJrJr  S SKJr  SS
 jr\ " S S5      5       r    SS jr    SS jr\ " S S	5      5       rSS jrSS jrSS jrSS jrSS jrSS jrSS jr S S jr!g)!    )annotations)Mapping)field)	AnnotatedAny)CompletionTokensDetailsPromptTokensDetails)InputTokensDetailsOutputTokensDetails)BeforeValidatorTypeAdapterValidationError)	dataclassUsagec                Z   U R                  S5      nU R                  S5      n[        [        [        5      U=(       d    SS0[        SS95      n[        [        [        5      U=(       d    SS0[	        SS95      n/ nU R                  S5      =(       d    / nU H  nUR                  [        UR                  S	S5      UR                  S
S5      UR                  SS5      [        [        [        5      UR                  S5      =(       d    SS0[        SS95      [        [        [        5      UR                  S5      =(       d    SS0[	        SS95      S95        M     [        U R                  SS5      U R                  S	S5      U R                  S
S5      U R                  SS5      UUUS9$ )z1Rebuild a Usage object from serialized JSON data.input_tokens_detailsoutput_tokens_detailscached_tokensr   r   reasoning_tokensr   request_usage_entriesinput_tokensoutput_tokenstotal_tokensr   r   r   r   r   requests)r   r   r   r   r   r   r   )get_coerce_token_detailsr   r
   r   appendRequestUsager   )
usage_datainput_tokens_details_rawoutput_tokens_details_rawinput_detailsoutput_detailsrequest_entriesrequest_entries_rawentrys           ^/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/agents/usage.pydeserialize_usager+      s   )~~.DE */F G)&' 8_a$8+M
 +'(!<&8!%<Q/N +-O$..)@AGR$"YY~q9#ii;"YY~q9%: 23II45M/19M&Q7&
 '< 34II56Q;Mq:Q';'	
 %& 
A.^^NA6 nn_a8^^NA6*,-     c                  T    \ rS rSr% SrS\S'    S\S'    S\S'    S\S'    S	\S
'   Srg)r!   <   z'Usage details for a single API request.intr   r   r   r
   r   r   r    N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r0   r,   r*   r!   r!   <   s2    134D,,E..Fr,   r!   c                    U c	  [        SS9$ [        U [        5      (       a  [        U R                  =(       d    SS9$ U $ )z;Converts None or PromptTokensDetails to InputTokensDetails.r   r   )r
   
isinstancer	   r   vs    r*   _normalize_input_tokens_detailsr<   P   s;     	y!22!())!0D1EEHr,   c                    U c	  [        SS9$ [        U [        5      (       a  [        U R                  =(       d    SS9$ U $ )z@Converts None or CompletionTokensDetails to OutputTokensDetails.r   r   )r   r9   r   r   r:   s    r*    _normalize_output_tokens_detailsr>   [   s=     	y"A66!,--"A4F4F4K!LLHr,   c                      \ rS rSr% SrS\S'    SrS\S'    \" S S9rS\S	'    Sr	S\S
'    \" S S9r
S\S'    SrS\S'    \" \S9rS\S'    SS jrSS jrSrg)r   f   r   r/   r   r   c                     [        SS9$ )Nr   r   )r
   r0   r,   r*   <lambda>Usage.<lambda>p   s
    &8q&Ir,   )default_factoryzOAnnotated[InputTokensDetails, BeforeValidator(_normalize_input_tokens_details)]r   r   c                     [        SS9$ )Nr   r   )r   r0   r,   r*   rB   rC   w   s
    &91&Mr,   zQAnnotated[OutputTokensDetails, BeforeValidator(_normalize_output_tokens_details)]r   r   zlist[RequestUsage]r   c                F   U R                   S L nU(       + =(       a    U R                   R                  S L nU(       d  U(       a  [        SS9U l         U R                  S L nU(       + =(       a    U R                  R                  S L nU(       d  U(       a  [        SS9U l        g g )Nr   r   r   )r   r   r
   r   r   r   )selfinput_details_noneinput_cached_noneoutput_details_noneoutput_reasoning_nones        r*   __post_init__Usage.__post_init__   s    
 "66$>""Vt'@'@'N'NRV'V 	 !2(:(KD%"88D@##[(B(B(S(SW[([ 	 "7)<a)PD& #8r,   c                   U =R                   UR                   (       a  UR                   OS-  sl         U =R                  UR                  (       a  UR                  OS-  sl        U =R                  UR                  (       a  UR                  OS-  sl        U =R                  UR                  (       a  UR                  OS-  sl        UR                  (       a1  UR                  R
                  (       a  UR                  R
                  OSnUR                  (       a1  UR                  R                  (       a  UR                  R                  OSnU R                  (       a1  U R                  R
                  (       a  U R                  R
                  OSnU R                  (       a1  U R                  R                  (       a  U R                  R                  OSn[        XB-   S9U l        [        XS-   S9U l        UR                   S:X  a  UR                  S:  a  UR                  =(       d	    [        SS9nUR                  =(       d	    [        SS9n[        UR                  UR                  UR                  UUS9nU R                  R                  U5        gUR                  (       a&  U R                  R                  UR                  5        gg)zAdd another Usage object to this one, aggregating all fields.

This method automatically preserves request_usage_entries.

Args:
    other: The Usage object to add to this one.
r   r   r      r   N)r   r   r   r   r   r   r   r   r
   r   r!   r   r    extend)	rG   otherother_cachedother_reasoningself_cachedself_reasoningr%   r&   request_usages	            r*   add	Usage.add   s     	5>>q@53E3EU//1LU5H5He11aO53E3EU//1L
 ))e.H.H.V.V &&44 	 **u/J/J/[/[ ''88 	 ((T-F-F-T-T %%33 	 ))d.H.H.Y.Y &&77 	 %7[E_$`!%8+=&
" >>Q5#5#5#9!66]:L[\:]M"88c<Oab<cN("//#11"//%2&4M &&--m<((&&--e.I.IJ )r,   )r   r   N)returnNone)rQ   r   rY   rZ   )r1   r2   r3   r4   r   r6   r   r   r   r   r   r   listr   rL   rW   r7   r0   r,   r*   r   r   f   s    Hc-L#7 	IJ   K PM3< 	MN   O QL#>05d0K-K
Q&8Kr,   c                    [        U S5      (       a.  U R                  5       n[        U[        5      (       a	  U(       a  U$ [        U5      $ )zDSerialize token details while applying the given default when empty.
model_dump)hasattrr]   r9   dict)detailsdefault
serializeds      r*   _serialize_usage_detailsrc      s<    w%%'')
j$''J=r,   c                   [        U R                  SS05      n[        U R                  SS05      nSS jnU R                  U R                  U/U R
                  U/U R                  U R                   Vs/ s H
  oC" U5      PM     snS.$ s  snf )z9Serialize a Usage object into a JSON-friendly dictionary.r   r   r   c           	         U R                   U R                  U R                  [        U R                  SS05      [        U R
                  SS05      S.$ )Nr   r   r   r   )r   r   r   rc   r   r   )r)   s    r*   _serialize_request_entry1serialize_usage.<locals>._serialize_request_entry   sZ    !.."00!..$<**_a,@% &>++.@!-D&

 
	
r,   )r   r   r   r   r   r   r   )r)   r!   rY   dict[str, Any])rc   r   r   r   r   r   r   r   )usager%   r&   rf   r)   s        r*   serialize_usagerj      s    ,U-G-G/[\I]^M-e.I.IL^`aKbcN
 NN**!.,,"0!1**9>9T9T"
9T$U+9T"

 
"
s   4B
c           
         U R                   U R                  U R                  U R                  [	        U R
                  SS05      [	        U R                  SS05      S.$ )z:Serialize full per-model-call usage for tracing span data.r   r   r   )r   r   r   r   r   r   )r   r   r   r   rc   r   r   ri   s    r*   model_usage_to_span_usagerm      sd     NN**,,** 8&&a !
 ":''#"
 r,   c                t    U R                   U R                  U R                  U R                  [	        U 5      S.$ )z=Serialize aggregate task/run usage for tracing span metadata.)r   r   r   r   cached_input_tokens)r   r   r   r   _cached_input_tokensrl   s    r*   total_usage_to_span_metadatarq     s8     NN**,,**3E: r,   c                    U R                   (       a1  U R                   R                  (       a  U R                   R                  $ S$ )Nr   )r   r   rl   s    r*   rp   rp     s;     %%%*D*D*R*R 	""00 r,   c                H    U R                   U R                  [        U 5      S.$ )z=Serialize aggregate per-turn usage for custom turn span data.)r   r   ro   )r   r   rp   rl   s    r*   turn_usage_to_span_datart   %  s(     **,,3E: r,   c                N    0 [        U 5      EU R                  U R                  S.E$ )z=Serialize aggregate per-task usage for custom task span data.)r   r   )rt   r   r   rl   s    r*   task_usage_to_span_datarv   .  s.    
!%
(NN** r,   c                    Un[        U[        5      (       a  U(       a  US   n U R                  U5      $ ! [         a    Us $ f = f)z7Deserialize token details safely with a fallback value.r   )r9   r[   validate_pythonr   )adapter	raw_valuera   	candidates       r*   r   r   7  sI    I)T""yaL	&&y11 s   6 AAN)r"   zMapping[str, Any]rY   r   )r;   z/InputTokensDetails | PromptTokensDetails | NonerY   r
   )r;   z4OutputTokensDetails | CompletionTokensDetails | NonerY   r   )r`   r   ra   dict[str, int]rY   rh   )ri   r   rY   rh   )ri   r   rY   r|   )ri   r   rY   r/   )ry   zTypeAdapter[Any]rz   r   ra   r   rY   r   )"
__future__r   collections.abcr   dataclassesr   typingr   r   openai.types.completion_usager   r	   %openai.types.responses.response_usager
   r   pydanticr   r   r   pydantic.dataclassesr   r+   r!   r<   r>   r   rc   rj   rm   rq   rp   rt   rv   r   r0   r,   r*   <module>r      s    " #  ! V Y B B *,^ G G G&6; nK nK nKb>$r,   