+
    ~jn%                    &   ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^RIH	t	H
t
HtHtHtHt  ! R R]4      t ! R R	]4      t ! R
 R]4      t ! R R]4      t ! R R]4      t]],          ],          ],          t ] ! R R4      4       t ! R R4      tR# )    )annotations)	dataclass)Literal)	BaseModel)AgentMetricsInterruptionMetrics
LLMMetricsRealtimeModelMetrics
STTMetrics
TTSMetricsc                  "    ] tR t^tR R ltRtR# )_BaseModelUsagec                   V ^8  d   QhRR/# )   returnstr )formats   "q/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/metrics/usage.py__annotate___BaseModelUsage.__annotate__   s     : :# :    c                	   V P                  4       P                  4        UUu/ uF  w  rV^ 8w  g   K  VR8w  g   K  WbK  	  pppRP                  R VP                  4        4       4      pV P                  P                   RV R2# u uppi )r           z, c              3  6   "   T F  w  rV R V: 2x  K  	  R# 5i)=Nr   ).0kvs   &  r   	<genexpr>+_BaseModelUsage.__repr__.<locals>.<genexpr>   s     G!AaU|s   ())
model_dumpitemsjoin	__class____name__)selfr   r   fields
fields_strs   &    r   __repr___BaseModelUsage.__repr__   s{    #'??#4#:#:#<T#<41Q$1PS8$!$#<TYYGGG
..))*!J<q99 Us   BBBr   N)r(   
__module____qualname____firstlineno__r,   __static_attributes__r   r   r   r   r      s    : :r   r   c                      ] tR t^t$ RtRtR]R&   R]R&    R]R&    ^ tR]R	&    ^ tR]R
&    ^ t	R]R&    ^ t
R]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    ^ tR]R&    RtR]R&   RtR# )LLMModelUsagezUsage summary for LLM models.	llm_usagezLiteral['llm_usage']typer   providermodelintinput_tokensinput_cached_tokensinput_audio_tokensinput_cached_audio_tokensinput_text_tokensinput_cached_text_tokensinput_image_tokensinput_cached_image_tokensoutput_tokensoutput_audio_tokensoutput_text_tokensr   floatsession_durationr   N)r(   r.   r/   r0   __doc__r5   __annotations__r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rE   r1   r   r   r   r3   r3      s    '!,D
,M:J?L#  )5%&s&$s$%c%#5%&s&$M3  6!e!\r   r3   c                      ] tR t^?t$ RtRtR]R&   R]R&    R]R&    ^ tR]R	&    ^ tR]R
&    ^ t	R]R&    Rt
R]R&   RtR# )TTSModelUsagezUsage summary for TTS models.	tts_usagezLiteral['tts_usage']r5   r   r6   r7   r8   r9   rA   characters_countr   rD   audio_durationr   N)r(   r.   r/   r0   rF   r5   rG   r9   rA   rK   rL   r1   r   r   r   rI   rI   ?   sU    '!,D
,M=J<L#LM3NcMNE1r   rI   c                  p    ] tR t^Rt$ RtRtR]R&   R]R&    R]R&    ^ tR]R	&    ^ tR]R
&    Rt	R]R&   Rt
R# )STTModelUsagezUsage summary for STT models.	stt_usagezLiteral['stt_usage']r5   r   r6   r7   r8   r9   rA   r   rD   rL   r   N)r(   r.   r/   r0   rF   r5   rG   r9   rA   rL   r1   r   r   r   rN   rN   R   sG    '!,D
,M=J2L#;M3;NE1r   rN   c                  P    ] tR t^ct$ RtRtR]R&   R]R&    R]R&    ^ tR]R	&   R
tR# )InterruptionModelUsagez0Usage summary for interruption detection models.interruption_usagezLiteral['interruption_usage']r5   r   r6   r7   r8   total_requestsr   N)	r(   r.   r/   r0   rF   r5   rG   rS   r1   r   r   r   rQ   rQ   c   s-    :*>D
'>M.J,NCLr   rQ   c                  "    ] tR t^st$ R]R&   RtR# )AgentSessionUsagelist[ModelUsage]model_usager   N)r(   r.   r/   r0   rG   r1   r   r   r   rU   rU   s   s    !!r   rU   c                      ] tR t^xtRtR R ltR R ltR R ltR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltRtR# )ModelUsageCollectorzECollects and aggregates usage metrics per model/provider combination.c                   V ^8  d   QhRR/# )r   r   Noner   )r   s   "r   r    ModelUsageCollector.__annotate__{   s     U U$ Ur   c                	>    / V n         / V n        / V n        / V n        R # N)
_llm_usage
_tts_usage
_stt_usage_interruption_usage)r)   s   &r   __init__ModelUsageCollector.__init__{   s    @B@B@BRT r   c                    V ^8  d   QhRRRR/# r   metricsr   r   r[   r   )r   s   "r   r   r\      s        r   c                	(    V P                  V4       R # r^   )collect)r)   rg   s   &&r   __call__ModelUsageCollector.__call__   s    Wr   c                    V ^8  d   QhRRRR/# )r   rg   zQLLMMetrics | STTMetrics | TTSMetrics | RealtimeModelMetrics | InterruptionMetricsr   ztuple[str, str]r   )r   s   "r   r   r\      s     
 
b
 

r   c                    RpRpVP                   '       dA   VP                   P                  ;'       g    RpVP                   P                  ;'       g    RpW#3# )z1Extract provider and model from metrics metadata. )metadatamodel_provider
model_name)r)   rg   r6   r7   s   &&  r   _extract_provider_model+ModelUsageCollector._extract_provider_model   sT    
 ''66<<"H$$//552Er   c               $    V ^8  d   QhRRRRRR/# )r   r6   r   r7   r   r3   r   )r   s   "r   r   r\      !     $ $s $3 $= $r   c                    W3pW0P                   9  d   \        WR7      V P                   V&   V P                   V,          # )zHGet or create an LLMModelUsage for the given provider/model combination.r6   r7   )r_   r3   r)   r6   r7   keys   &&& r   _get_llm_usage"ModelUsageCollector._get_llm_usage   6    oo%#0(#PDOOC s##r   c               $    V ^8  d   QhRRRRRR/# )r   r6   r   r7   r   rI   r   )r   s   "r   r   r\      ru   r   c                    W3pW0P                   9  d   \        WR7      V P                   V&   V P                   V,          # )zGGet or create a TTSModelUsage for the given provider/model combination.rw   )r`   rI   rx   s   &&& r   _get_tts_usage"ModelUsageCollector._get_tts_usage   r|   r   c               $    V ^8  d   QhRRRRRR/# )r   r6   r   r7   r   rN   r   )r   s   "r   r   r\      ru   r   c                    W3pW0P                   9  d   \        WR7      V P                   V&   V P                   V,          # )zHGet or create an STTModelUsage for the given provider/model combination.rw   )ra   rN   rx   s   &&& r   _get_stt_usage"ModelUsageCollector._get_stt_usage   r|   r   c               $    V ^8  d   QhRRRRRR/# )r   r6   r   r7   r   rQ   r   )r   s   "r   r   r\      s"     - - -C -DZ -r   c                    W3pW0P                   9  d   \        WR7      V P                   V&   V P                   V,          # )zQGet or create an InterruptionModelUsage for the given provider/model combination.rw   )rb   rQ   rx   s   &&& r   _get_interruption_usage+ModelUsageCollector._get_interruption_usage   s<    ...,BH,bD$$S)'',,r   c                    V ^8  d   QhRRRR/# rf   r   )r   s   "r   r   r\      s     7F 7F| 7F 7Fr   c                	N
   \        V\        4      '       d   V P                  V4      w  r#V P                  W#4      pV;P                  VP
                  ,          un        V;P                  VP                  ,          un        V;P                  VP                  ,          un        R# \        V\        4      '       Ed   V P                  V4      w  r#V P                  W#4      pV;P                  VP                  ,          un        V;P                  VP                  P                  ,          un        V;P                  VP                  P                  ,          un        T;P                  VP                  P                   '       d!   VP                  P                   P                  M^ ,          un        V;P"                  VP                  P$                  ,          un        T;P&                  VP                  P                   '       d!   VP                  P                   P$                  M^ ,          un        V;P(                  VP                  P*                  ,          un        T;P,                  VP                  P                   '       d!   VP                  P                   P*                  M^ ,          un        V;P.                  VP0                  P                  ,          un        V;P2                  VP0                  P*                  ,          un        V;P                  VP                  ,          un        V;P4                  VP4                  ,          un        R# \        V\6        4      '       d   V P                  V4      w  r#V P9                  W#4      pV;P                  VP                  ,          un        V;P                  VP                  ,          un        V;P:                  VP:                  ,          un        V;P<                  VP<                  ,          un        R# \        V\>        4      '       d   V P                  V4      w  r#V PA                  W#4      pV;P                  VP                  ,          un        V;P                  VP                  ,          un        V;P<                  VP<                  ,          un        R# \        V\B        4      '       dJ   V P                  V4      w  r#V PE                  W#4      pV;PF                  VPH                  ,          un#        R# R# )r   N)%
isinstancer	   rr   rz   r9   prompt_tokensr:   prompt_cached_tokensrA   completion_tokensr
   input_token_detailscached_tokensr=   text_tokensr>   cached_tokens_detailsr?   image_tokensr@   r;   audio_tokensr<   rC   output_token_detailsrB   rE   r   r   rK   rL   r   r   r   r   rS   num_requests)r)   rg   r6   r7   usagerJ   rO   rR   s   &&      r   ri   ModelUsageCollector.collect   s   gz**"::7COH''8E'"7"77%%)E)EE%7#<#<<!566"::7COH''8E'"6"66%%)D)D)R)RR%##w'B'B'N'NN#**..DDD ++AAMM*
 $$(C(C(P(PP$++..DDD ++AANN+
 $$(C(C(P(PP$++..DDD ++AANN+ $$(D(D(P(PP$%%)E)E)R)RR%7#8#88""g&>&>>",,"::7COH++H<I""g&:&::"##w'<'<<#&&'*B*BB&$$(>(>>$,,"::7COH++H<I""g&:&::"##w'<'<<#$$(>(>>$!455"::7COH!%!=!=h!N--1E1EE- 6r   c                   V ^8  d   QhRR/# )r   r   rV   r   )r   s   "r   r   r\      s      ) r   c                   . pVP                  R V P                  P                  4        4       4       VP                  R V P                  P                  4        4       4       VP                  R V P                  P                  4        4       4       VP                  R V P
                  P                  4        4       4       V# )zFReturns a list of usage summaries, one per model/provider combination.c              3  D   "   T F  qP                  R R7      x  K  	  R# 5iT)deepN
model_copyr   us   & r   r    .ModelUsageCollector.flatten.<locals>.<genexpr>        P7O!lll--7O    c              3  D   "   T F  qP                  R R7      x  K  	  R# 5ir   r   r   s   & r   r    r      r   r   c              3  D   "   T F  qP                  R R7      x  K  	  R# 5ir   r   r   s   & r   r    r      r   r   c              3  D   "   T F  qP                  R R7      x  K  	  R# 5ir   r   r   s   & r   r    r      s     Y7X!lll--7Xr   )extendr_   valuesr`   ra   rb   )r)   results   & r   flattenModelUsageCollector.flatten   s    #%Pt7M7M7OPPPt7M7M7OPPPt7M7M7OPPYt7O7O7V7V7XYYr   )rb   r_   ra   r`   N)r(   r.   r/   r0   rF   rc   rj   rr   rz   r   r   r   ri   r   r1   r   r   r   rY   rY   x   s:    OU
$$$-7Fr r   rY   N)
__future__r   dataclassesr   typingr   pydanticr   baser   r   r	   r
   r   r   r   r3   rI   rN   rQ   
ModelUsagerU   rY   r   r   r   <module>r      s    " !   :i :"]O "]J2O 2&2O 2"	M_ 	M ]*]:=SS
 + " " "t tr   