
    /j                    D   S SK Jr  S SKJr  S SKJr  SSKJrJ	r	J
r
JrJrJrJr  \(       a
  SSKJrJrJr  \R&                  " S5      r\R+                  SS	S
S9r\R+                  SS	SS9r\R+                  SS	SS9r\R+                  SS	SS9r\R+                  SS	SS9r\R+                  SS	SS9r\R9                  S5      r\R9                  S5      r\R9                  S5      r\R9                  S5      r \R9                  S5      r!\R9                  S5      r"\R9                  S5      r#\R9                  SS	S9r$\R9                  S5      r%\R9                  S S	S9r&\R9                  S!S	S9r'\R9                  S"5      r(\R+                  S#S	S$S9r)S+S% jr*S,S& jr+S-S' jr,S.S( jr-S/S) jr.g*)0    )annotations)TYPE_CHECKING)metrics   )AgentMetricsInterruptionMetrics
LLMMetricsMetadataRealtimeModelMetrics
STTMetrics
TTSMetrics)ChatContextMetricsMetadataMetricsReportzlivekit-agentszlk.agents.turn.e2e_latencyszEnd-to-end turn latency)unitdescriptionzlk.agents.turn.llm_ttftz&Pipeline-level LLM time to first tokenzlk.agents.turn.tts_ttfbz%Pipeline-level TTS time to first bytez"lk.agents.turn.transcription_delayz/Time from end of speech to transcript availablez lk.agents.turn.end_of_turn_delayz(Time from end of speech to turn decisionz+lk.agents.turn.on_user_turn_completed_delayz2Time to invoke the on_user_turn_completed callbackz lk.agents.usage.llm_input_tokensz'lk.agents.usage.llm_input_cached_tokensz!lk.agents.usage.llm_output_tokensz&lk.agents.usage.llm_input_audio_tokensz%lk.agents.usage.llm_input_text_tokensz'lk.agents.usage.llm_output_audio_tokensz&lk.agents.usage.llm_output_text_tokensz$lk.agents.usage.llm_session_duration)r   zlk.agents.usage.tts_charactersz"lk.agents.usage.tts_audio_durationz"lk.agents.usage.stt_audio_durationz)lk.agents.usage.interruption_num_requestsz!lk.agents.connection.acquire_timez-Time to acquire a connection (WebSocket only)c                    0 nU (       a@  U R                   (       a  U R                   US'   U R                  (       a  U R                  US'   U$ )Nmodel_provider
model_name)r   r   metadataattrss     V/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/telemetry/otel_metrics.py_model_attrsr   U   sB    E""&.&=&=E"#"*"5"5E,L    c                \    U R                  5        H  n[        UR                  5        M     g)zNEmit per-turn latency histograms from the chat history. Called at session end.N)messages_record_turn_metricsr   )chat_ctxmsgs     r   flush_turn_metricsr"   _   s!      "S[[) #r   c                B    0 nSU ;   a  U S   US'   SU ;   a  U S   US'   U$ )Nr   r    r   s     r   _metadata_to_attrsr%   e   s<    Ex&|4l8#"*+;"<Lr   c                   SU ;   a  [        U S   5      O0 nSU ;   a  [        U S   5      O0 nSU ;   a  [        U S   5      O0 nSU ;   a  [        R                  U S   US9  SU ;   a  [        R                  U S   US9  SU ;   a  [        R                  U S   US9  SU ;   a  [
        R                  U S   US9  S	U ;   a  [        R                  U S	   US9  S
U ;   a  [        R                  U S
   US9  g g )Nllm_metadatatts_metadatastt_metadatae2e_latency
attributesllm_node_ttfttts_node_ttfbtranscription_delayend_of_turn_delayon_user_turn_completed_delay)r%   _turn_e2e_latencyrecord_turn_llm_ttft_turn_tts_ttfb_turn_transcription_delay_turn_end_of_turn_delay"_turn_on_user_turn_completed_delay)report	llm_attrs	tts_attrs	stt_attrss       r   r   r   n   s!   >LPV>V"6.#9:\^I>LPV>V"6.#9:\^I>LPV>V"6.#9:\^I  !69 M& f_5)L& f_5)L&!((0E)FS\(]f$&&v.A'By&Y%/*1112y 	2 	
 0r   c                	   [        U [        5      (       a  [        U R                  5      nU R                  (       a  [
        R                  U R                  US9  U R                  (       a  [        R                  U R                  US9  U R                  (       a  [        R                  U R                  US9  GOE[        U [        5      (       Ga  [        U R                  5      nU R                  (       a  [
        R                  U R                  US9  U R                  R                  (       a(  [        R                  U R                  R                  US9  U R                  (       a  [        R                  U R                  US9  U R                  R                   (       a(  ["        R                  U R                  R                   US9  U R                  R$                  (       a(  [&        R                  U R                  R$                  US9  U R(                  R                   (       a(  [*        R                  U R(                  R                   US9  U R(                  R$                  (       a(  [,        R                  U R(                  R$                  US9  U R.                  (       a  [0        R                  U R.                  US9  GO<[        U [2        5      (       at  [        U R                  5      nU R4                  (       a  [6        R                  U R4                  US9  U R8                  (       a  [:        R                  U R8                  US9  O[        U [<        5      (       aE  [        U R                  5      nU R8                  (       a  [>        R                  U R8                  US9  OY[        U [@        5      (       aD  [        U R                  5      nU RB                  (       a  [D        R                  U RB                  US9  [        U [<        [2        [        45      (       ak  U RF                  S:  aZ  [        U R                  5      n[I        U RJ                  5      RM                  5       US'   [N        RQ                  U RF                  US9  ggg)z7Record usage counters directly from each metrics event.r+   r   connection_reusedN))
isinstancer	   r   r   prompt_tokens_llm_input_tokensaddprompt_cached_tokens_llm_input_cached_tokenscompletion_tokens_llm_output_tokensr   input_tokensinput_token_detailscached_tokensoutput_tokensaudio_tokens_llm_input_audio_tokenstext_tokens_llm_input_text_tokensoutput_token_details_llm_output_audio_tokens_llm_output_text_tokenssession_duration_llm_session_durationr   characters_count_tts_charactersaudio_duration_tts_audio_durationr   _stt_audio_durationr   num_requests_interruption_num_requestsacquire_timestrr>   lower_connection_acquire_timer3   )evr   
conn_attrss      r   collect_usagera      s8   "j!!R[[)!!""2"2u!E""$(()@)@U(S""2#7#7E"J	B,	-	-R[[)??!!"//e!D!!//$(()?)?)M)MZ_(`""2#3#3"F!!..#''(>(>(K(KX]'^!!--"&&r'='='I'IV[&\""//$(()@)@)M)MZ_(`""..#''(?(?(K(KX]'^!%%b&9&9e%L	B
	#	#R[[) 3 3F##B$5$5%#H	B
	#	#R[[)##B$5$5%#H	B+	,	,R[[)??&**2??u*M "z:/CDEE??Q%bkk2J.1"2F2F.G.M.M.OJ*+$++BOO
+S  Fr   N)r   zMetadata | Nonereturndict[str, str])r    r   rb   None)r   r   rb   rc   )r9   r   rb   rd   )r_   r   rb   rd   )/
__future__r   typingr   opentelemetryr   metrics_apimetrics.baser   r   r	   r
   r   r   r   llm.chat_contextr   r   r   	get_meter_metercreate_histogramr2   r4   r5   r6   r7   r8   create_counterrA   rD   rF   rL   rN   rP   rQ   rS   rU   rW   rX   rZ   r^   r   r"   r%   r   ra   r$   r   r   <module>ro      s5   "   0   NN			/	0 ++ 	) ,  
 ((	8 ) 
 ((	7 ) 
 #33(	A 4  
 !11&	: 2  
 &,%<%<1	D &= & " ))*LM !001Z[ **+NO  //0XY ../VW !001Z[  //0XY --*	 .   ''(HI++(	 ,   ++(	 ,   $223^_  "22'	? 3  *
*4Tr   