+
    ~ji                    0  a  0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
H
t
HtHt ^ RIHtHt ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RIHtHtH t  ^ R	I!H"t" ^ R
I#H$t$ ^ RI%H&t& ^ RI'H(t( ^ RI)H*t* ^ RI+Ht, ^ RI-H.t.H/t/H0t0H1t1 ^ RI2H3t3 ^ RI4H5t6H7t8H9t:H;t<H=t>H?t@HAtB ^ RICHDtDHEtE ^ RIFHGtGHHtH ^ RIIHJtJ ^ RIKHLtL ^ RIMHNtNHOtO ^ RIPHQtQ ^ RIRHStSHTtT ^ RIUHVtV ^ RIWHXtXHtY ^RIZH[t[H\t\ ^RI]H^t^ ]'       d   ^RI_H`t`Hata ^RIbHctc ^RIdHete  ! R  R!]O4      tf]f! R"4      tgR!]hR#&    ! R$ R%]J4      ti ! R& R']04      tj ! R( R)]P                  4      tl ! R* R+]/4      tmR,R/R- R. lltnR/R0R1R0/R2 R3 lltoR4 R5 ltpR6 R7 ltqR8 R9 ltrR: R; ltsR<tt]t3R= R> lltuR# )?    )annotationsN)Iterator)datetime	timedeltatimezone)TYPE_CHECKINGAny)MessageToDict)contextmetricstrace)	LogRecordget_logger_providerset_logger_provider)SeverityNumber)Compression)OTLPLogExporter)OTLPMetricExporter)OTLPSpanExporter)r   )LoggerProviderLoggingHandlerLogRecordProcessorReadWriteLogRecord)BatchLogRecordProcessor)Counter	HistogramMeterProviderObservableCounterObservableGaugeObservableUpDownCounterUpDownCounter)AggregationTemporalityPeriodicExportingMetricReader)SERVICE_NAMEResource)SpanProcessor)BatchSpanProcessor)SpanTracer)_agnosticcontextmanager)
AttributesAttributeValue)api)agent_pbr   )TRACE_LEVELlogger)trace_types)ChatContextChatItem)Tagger)SessionReportc                  P    ] tR t^<tR R ltR R ltR R lt]R R l4       tR	t	R
# )_DynamicTracerc                    V ^8  d   QhRRRR/# )   instrumenting_module_namestrreturnNone )formats   "t/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/telemetry/traces.py__annotate___DynamicTracer.__annotate__=   s     G G# G$ G    c                	|    Wn         \        P                  ! 4       V n        \        P                  ! V4      V n        R # N)_instrumenting_module_name	trace_apiget_tracer_provider_tracer_provider
get_tracer_tracer)selfr:   s   &&r@   __init___DynamicTracer.__init__=   s,    *C':C:W:W:Y ++,EFrC   c                    V ^8  d   QhRRRR/# )r9   tracer_providertrace_api.TracerProviderr<   r=   r>   )r?   s   "r@   rA   rB   B   s     
 
,D 
 
rC   c                	t    Wn         \        P                  ! V P                  V P                   R 7      V n        R# ))rP   N)rI   rG   rJ   rF   rK   )rL   rP   s   &&r@   set_provider_DynamicTracer.set_providerB   s,     / ++++ 11
rC   c               $    V ^8  d   QhRRRRRR/# )r9   argsr	   kwargsr<   r(   r>   )r?   s   "r@   rA   rB   I   s!     8 8 8s 8t 8rC   c                	:    V P                   P                  ! V/ VB # rE   )rK   
start_span)rL   rV   rW   s   &*,r@   rY   _DynamicTracer.start_spanI   s    ||&&777rC   c               $    V ^8  d   QhRRRRRR/# )r9   rV   r	   rW   r<   zIterator[Span]r>   )r?   s   "r@   rA   rB   M   s!      3 # . rC   c              /  	   "   V P                   P                  ! V/ VB ;_uu_ 4       pVx  R R R 4       R #   + '       g   i     R # ; i5irE   )rK   start_as_current_span)rL   rV   rW   spans   &*, r@   r]   $_DynamicTracer.start_as_current_spanL   s5     \\//@@@DJ A@@@s   %A
6
A
A		A
)rF   rK   rI   N)
__name__
__module____qualname____firstlineno__rM   rS   rY   r*   r]   __static_attributes__r>   rC   r@   r7   r7   <   s&    G

8  rC   r7   livekit-agentstracerc                  2    ] tR t^UtR R ltRR R lltRtR# )_MetadataSpanProcessorc                    V ^8  d   QhRRRR/# r9   metadatazdict[str, AttributeValue]r<   r=   r>   )r?   s   "r@   rA   #_MetadataSpanProcessor.__annotate__V        " "!: "t "rC   c                	    Wn         R # rE   	_metadatarL   rk   s   &&r@   rM   _MetadataSpanProcessor.__init__V       !rC   Nc               $    V ^8  d   QhRRRRRR/# )r9   r^   r(   parent_contextzotel_context.Context | Noner<   r=   r>   )r?   s   "r@   rA   rl   Y   s#     , ,T ,3N ,Z^ ,rC   c                	<    VP                  V P                  4       R # rE   )set_attributesrp   )rL   r^   ru   s   &&&r@   on_start_MetadataSpanProcessor.on_startY   s    DNN+rC   ro   rE   )r`   ra   rb   rc   rM   rx   rd   r>   rC   r@   rh   rh   U   s    ", ,rC   rh   c                  J    ] tR t^]tR R ltR R ltR R ltRR R lltR	tR
# )_MetadataLogProcessorc                    V ^8  d   QhRRRR/# rj   r>   )r?   s   "r@   rA   "_MetadataLogProcessor.__annotate__^   rm   rC   c                	    Wn         R # rE   ro   rq   s   &&r@   rM   _MetadataLogProcessor.__init__^   rs   rC   c                    V ^8  d   QhRRRR/# )r9   log_datar   r<   r=   r>   )r?   s   "r@   rA   r}   a   s     	 	 2 	t 	rC   c                	r   VP                   P                  '       d1   VP                   P                  P                  V P                  4       MV P                  VP                   n        VP                  '       d>   VP                   P                  P                  R VP                  P
                  /4       R# R# )zlogger.nameN)
log_record
attributesupdaterp   instrumentation_scopename)rL   r   s   &&r@   on_emit_MetadataLogProcessor.on_emita   s    )))**11$..A-1^^H*)))**11 > > C CD *rC   c                   V ^8  d   QhRR/# r9   r<   r=   r>   )r?   s   "r@   rA   r}   l   s      $ rC   c                	    R # rE   r>   rL   s   &r@   shutdown_MetadataLogProcessor.shutdownl   s    rC   c                    V ^8  d   QhRRRR/# )r9   timeout_millisintr<   boolr>   )r?   s   "r@   rA   r}   o   s      # $ rC   c                	    R # )Tr>   )rL   r   s   &&r@   force_flush!_MetadataLogProcessor.force_flusho   s    rC   ro   N)0u  )	r`   ra   rb   rc   rM   r   r   r   rd   r>   rC   r@   r{   r{   ]   s    "	 rC   r{   c                  >   a  ] tR t^stRtR V 3R lltR R ltRtV ;t# )_BufferingHandlerz<Buffers log records in memory for later replay through OTLP.c                   V ^8  d   QhRR/# r   r>   )r?   s   "r@   rA   _BufferingHandler.__annotate__v   s     2 2$ 2rC   c                	2   < \         SV `  4        . V n        R # rE   )superrM   buffer)rL   	__class__s   &r@   rM   _BufferingHandler.__init__v   s    /1rC   c                    V ^8  d   QhRRRR/# )r9   recordlogging.LogRecordr<   r=   r>   )r?   s   "r@   rA   r   z   s     # #, # #rC   c                	<    V P                   P                  V4       R # rE   )r   append)rL   r   s   &&r@   emit_BufferingHandler.emitz   s    6"rC   )r   )	r`   ra   rb   rc   __doc__rM   r   rd   __classcell__r   s   @r@   r   r   s   s    F2 2# #rC   r   c                  2   a  ] tR t^~tRtR V 3R lltRtV ;t# )_TraceLevelLoggingHandlerzCustom LoggingHandler that properly maps TRACE_LEVEL to OTel TRACE severity.

The default OTel LoggingHandler maps any log level < 10 to UNSPECIFIED,
but we want TRACE_LEVEL (5) to map to TRACE for proper severity in exports.
c                    V ^8  d   QhRRRR/# )r9   r   r   r<   OTelLogRecordr>   )r?   s   "r@   rA   &_TraceLevelLoggingHandler.__annotate__   s      !2 } rC   c                	z   < \         SV `  V4      pVP                  \        8X  d   \        P
                  Vn        V# rE   )r   
_translatelevelnor/   r   TRACEseverity_number)rL   r   r   r   s   && r@   r   $_TraceLevelLoggingHandler._translate   s4    W'/
 >>[()7)=)=J&rC   r>   )r`   ra   rb   rc   r   r   rd   r   r   s   @r@   r   r   ~   s     rC   r   rk   c               $    V ^8  d   QhRRRRRR/# )r9   rP   rQ   rk   z dict[str, AttributeValue] | Noner<   r=   r>   )r?   s   "r@   rA   rA      s$     ) )-)<\)	)rC   c                   V'       d;   \        V \        P                  4      '       d   V P                  \	        V4      4       \
        P                  V 4       R# )zSet the tracer provider for the livekit-agents.

Args:
    tracer_provider (TracerProvider): The tracer provider to set.
    metadata (dict[str, AttributeValue] | None, optional): Metadata to set on all spans. Defaults to None.
N)
isinstance	trace_sdkTracerProvideradd_span_processorrh   rf   rS   )rP   rk   s   &$r@   set_tracer_providerr      s;     J	0H0HII**+A(+KL
(rC   enable_tracesTenable_logsc               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r9   room_idr;   job_idobservability_urlr   r   r   r<   r=   r>   )r?   s   "r@   rA   rA      sN     {7 {7{7 {7 	{7
 {7 {7 
{7rC   c                  aa \        ^R7      o\        ^R7      o ! R R\        P                  4      p ! VV3R lR4      pV! 4       pV! V4      p\        P                  p	RV RV/p
\
        P                  ! \        R	RV RV/4      pV'       Ed   \        \        P                  \        P                  \        P                  34      '       d$   \        P                  ! VR
7      p\!        V4       MK\        P                  p\        V\        P                  4      '       d   VP"                  P%                  V4       \'        V R2V	VR7      p\        V\        P                  4      '       d5   VP)                  \+        V
4      4       VP)                  \-        V4      4       \/        4       p\        V\0        4      '       g   \1        4       p\3        V4       V'       d   \5        V R2V	VR7      pVP7                  \9        V
4      4       VP7                  \;        V4      4       \=        \>        P@                  VR7      p\>        PB                  ! 4       pVPE                  V4       \F        PH                  ! 4       p\        V\J        4      '       g   \M        V R2V	V\N        \P        PR                  \T        \P        PR                  \V        \P        PR                  \X        \P        PR                  \Z        \P        PR                  \\        \P        PR                  /R7      p\_        VRR7      p\K        VV.R7      p\F        P`                  ! V4       R# R# )   hours)minutesc                  @   a  ] tR t^tR V 3R lltR V 3R lltRtV ;t# )3_setup_cloud_tracer.<locals>._AuthRefreshingSessionc                    V ^8  d   QhRRRR/# )r9   header_provider_AuthHeaderProviderr<   r=   r>   )r?   s   "r@   rA   @_setup_cloud_tracer.<locals>._AuthRefreshingSession.__annotate__   s     	4 	4,? 	4D 	4rC   c                	0   < \         SV `  4        Wn        R # rE   )r   rM   _header_provider)rL   r   r   s   &&r@   rM   <_setup_cloud_tracer.<locals>._AuthRefreshingSession.__init__   s    G$3!rC   c               $    V ^8  d   QhRRRRRR/# )r9   rV   r	   rW   r<   zrequests.Responser>   )r?   s   "r@   rA   r      s"     	4 	4 	4 	48I 	4rC   c                	v   < V P                   P                  V P                  4       4       \        SV `  ! V/ VB # rE   )headersr   r   r   request)rL   rV   rW   r   s   &*,r@   r   ;_setup_cloud_tracer.<locals>._AuthRefreshingSession.request   s2    LL 5 5 787?D3F33rC   )r   )r`   ra   rb   rc   rM   r   rd   r   r   s   @r@   _AuthRefreshingSessionr      s    	4 	4	4 	4rC   r   c                  H   < ] tR t^tR R ltR V3R lltR V 3R lltRtR# )	0_setup_cloud_tracer.<locals>._AuthHeaderProviderc                   V ^8  d   QhRR/# r   r>   )r?   s   "r@   rA   =_setup_cloud_tracer.<locals>._AuthHeaderProvider.__annotate__   s     	 	d 	rC   c                	    \         P                  ! 4       V n        R V n        \        P
                  P                  \        P                  R7      V n	        V P                  4        R# ) )tzinfoN)	threadingLock_lock_auth_headerr   minreplacer   utc_expires_at_refreshr   s   &r@   rM   9_setup_cloud_tracer.<locals>._AuthHeaderProvider.__init__   s?    ")DJ "D'||338<<3HDMMOrC   c                   V ^8  d   QhRR/# r   r>   )r?   s   "r@   rA   r      s     	F 	Fd 	FrC   c                	(  < \         P                  ! 4       P                  \         P                  ! R R7      4      P	                  S4      pRVP                  4        2V n        \        P                  ! \        P                  4      S,           V n        R# )TwriteBearer N)r-   AccessTokenwith_observability_grantsObservabilityGrantswith_ttlto_jwtr   r   nowr   r   r   )rL   access_token	token_ttls   & r@   r   9_setup_cloud_tracer.<locals>._AuthHeaderProvider._refresh   sg    !**3+B+B+NO)$ 
 #*,*=*=*?)@ AD'||HLL9IEDrC   c                   V ^8  d   QhRR/# )r9   r<   zdict[str, str]r>   )r?   s   "r@   rA   r      s     	8 	8n 	8rC   c                	D  < \         P                  ! \        P                  4      pWP                  S,
          8  dE   V P
                  ;_uu_ 4        WP                  S,
          8  d   V P                  4        R R R 4       RV P                  /#   + '       g   i     L; i)NAuthorization)r   r   r   r   r   r   r   r   )rL   r   refresh_margins   & r@   __call__9_setup_cloud_tracer.<locals>._AuthHeaderProvider.__call__   si    ,,x||,C&&77ZZZ..??   $T%6%677  Zs   (BB	)r   r   r   N)r`   ra   rb   rc   rM   r   r   rd   )r   r   s   r@   r   r      s    		F 	F	8 	8rC   r   r   r   re   )resourcez/observability/traces/otlp/v0)endpointcompressionsessionz/observability/logs/otlp/v0)levellogger_providerz/observability/metrics/otlp/v0)r   r   r   preferred_temporalityr   )export_interval_millis)r   metric_readersN)1r   requestsSessionr   Gzipr%   creater$   r   rf   rI   rG   ProxyTracerProviderNoOpTracerProviderr   r   r   r   merger   r   rh   r'   r   r   r   r   add_log_record_processorr{   r   r   loggingNOTSET	getLogger
addHandlermetrics_apiget_meter_providerSdkMeterProviderr   
SdkCounterr"   DELTASdkUpDownCounterSdkHistogramSdkObservableCounterSdkObservableUpDownCounterSdkObservableGauger#   set_meter_provider)r   r   r   r   r   r   r   r   r   otlp_compressionrk   r   rP   span_exporterr  log_exporterhandlerrootcurrent_meter_providermetric_exporterreadermeter_providerr   r   s   $$$$$                 @@r@   _setup_cloud_tracerr%     s    "Iq)N4!1!1 48 80 *+O$_5G"''+4gx*PH*wf	
H }
 ##**I,H,HI
 
 (66IO0 %55O/9+C+CDD((..x8()**GH(
 oy'?'?@@../Eh/OP../A-/PQ *+Oo~66(*O,&)**EF(

 	001Fx1PQ001H1VW+'..Rab  "  );;=,.>??,)**HI(288 "8">">4::$&<&B&B*,B,H,H"$:$@$@#	
 /W\])8VHU&&~6! @rC   c                    V ^8  d   QhRRRR/# )r9   chat_ctxr2   r<   zlist[tuple[str, Attributes]]r>   )r?   s   "r@   rA   rA     s     * *{ *7S *rC   c                   R \         P                  R\         P                  R\         P                  R\         P                  /p. pV P                   EF0  pVP
                  R8X  dO   VP                  VP                  4      ;p'       d,   TP                  TRVP                  ;'       g    R/34       Kc  VP
                  R8X  de   VP                  \         P                  RRR	\        P                  ! R
RVP                  RVP                  /RVP                  RR
/4      ./34       K  VP
                  R8X  g   K  VP                  \         P                  RVP                   RVP                  RVP                  /34       EK3  	  V# )system	developeruser	assistantmessagecontentr   function_callrole
tool_callsfunctionr   	argumentsidtypefunction_call_output)r1   EVENT_GEN_AI_SYSTEM_MESSAGEEVENT_GEN_AI_USER_MESSAGEEVENT_GEN_AI_ASSISTANT_MESSAGEitemsr5  getr0  r   text_contentjsondumpsr   r3  call_idEVENT_GEN_AI_TOOL_MESSAGEoutput)r'  role_to_eventeventsitem
event_names   &    r@   _chat_ctx_to_otel_eventsrF    sQ   +99
 	[<<55[??	M ,.F99	!]5F5Ftyy5Q'Qz'QMM:	43D3D3J3J'KLMYY/)MM>>$ JJ$.KQUQ_Q_0`$($,,$*J!"'" YY00MM99VTYYdllS/ : MrC   c                    V ^8  d   QhRRRR/# )r9   rD  r3   r<   dictr>   )r?   s   "r@   rA   rA   H  s"     UD UDh UD4 UDrC   c                x   \         P                  P                  P                  4       pV P                  R 8X  Ed   VP
                  pV P                  Vn        R\         P                  P                  R\         P                  P                  R\         P                  P                  R\         P                  P                  /pW0P                  ,          Vn        V P                   F;  p\        V\        4      '       g   K  VP                  P                  4       pWEn        K=  	  V P"                  Vn        V P$                  e   V P$                  Vn        V P&                  P)                  4        F  w  rg\        V4      VP&                  V&   K  	  V P*                  pRV9   d=   VP*                  P,                  P/                  \1        VR,          R,          4      4       RV9   d=   VP*                  P2                  P/                  \1        VR,          R,          4      4       RV9   d   VR,          VP*                  n        R	V9   d   VR	,          VP*                  n        R
V9   d   VR
,          VP*                  n        RV9   d   VR,          VP*                  n        RV9   d   VR,          VP*                  n        RV9   d   VR,          VP*                  n        VP@                  P/                  \1        V P@                  R,          4      4       EMV P                  R8X  d   VPB                  p	V P                  V	n        V PD                  V	n"        V PF                  V	n#        V PH                  V	n$        V	P@                  P/                  \1        V P@                  R,          4      4       EMV P                  R8X  d   VPJ                  p
V P                  V
n        V PH                  V
n$        V PD                  V
n"        V PL                  V
n&        V PN                  V
n'        V
P@                  P/                  \1        V P@                  R,          4      4       EM\V P                  R8X  d   VPP                  pV P                  Vn        V PR                  e   V PR                  Vn)        V PT                  Vn*        VP@                  P/                  \1        V P@                  R,          4      4       MV P                  R8X  d   VPV                  pV P                  Vn        V PX                  e   V PX                  Vn,        V PZ                  ;'       g    . VPZ                  R&   V P\                  ;'       g    . VP\                  R&   VP@                  P/                  \1        V P@                  R,          4      4       \_        VRR7      # )r-  r*  r)  r+  r,  started_speaking_at  stopped_speaking_attranscription_delayend_of_turn_delayon_user_turn_completed_delayllm_node_ttfttts_node_ttfbe2e_latencyr/  r6  agent_handoffagent_config_update:NNNT)preserving_proto_field_name)0r.   agent_sessionr2   r3   r5  r-  r4  	DEVELOPERSYSTEMUSER	ASSISTANTr0  r.  r   r;   addtextinterruptedtranscript_confidenceextrar:  r   rJ  FromMillisecondsr   rL  rM  rN  rO  rP  rQ  rR  
created_atr/  r?  r3  r   r6  rA  is_errorrS  old_agent_idnew_agent_idrT  instructionstools_addedtools_removedr
   )rD  item_pbmsgrole_mapr.  
content_pbkeyvaluer   fcfcoahacus   &            r@   _to_proto_chat_itemrr  H  s(   $$0099;GyyIoo //99h,,33H**////99	
 II&||G'3'' [[__.
") $
 **%%1(,(B(BC%****,JC ZCIIcN - ,, G+KK++<<G12T9: !G+KK++<<G12T9: !G+.56K.LCKK+'),34G,HCKK))W47>?]7^CKK4g%(/(@CKK%g%(/(@CKK%G#&-m&<CKK#''DOOd,B(CD	o	%""\\
~~))
&&s4??T+A'BC	,	,**99ll[[
}}''DOOd,B(CD	o	%""("//BO++
&&s4??T+A'BC	+	+))(#00C!--33#1177R!''DOOd,B(CDdCCrC   c                    V ^8  d   QhRRRR/# )r9   respzaiohttp.ClientResponser<   zfloat | Noner>   )r?   s   "r@   rA   rA     s      #9 l rC   c                  "   ^ RI HpHp  V P                  4       G Rj  xL
 pVP	                  4       pVP                  V4       VP                   Fe  pVP                  4       pVP                  V4      '       g   K,  VP                  p\        VP                  VP                  R,          ,           4      u # 	  R#  L  \         d     R# i ; i5i)zParse a protobuf Status error response for RetryInfo and return the retry delay in seconds,
or None if the error is not retryable.)error_details_pb2
status_pb2N    eA)
google.rpcrv  rw  readStatusParseFromStringdetails	RetryInfoUnpackretry_delayfloatsecondsnanos	Exception)rt  rv  rw  bodystatusdetail
retry_infodelays   &       r@   _parse_retry_delayr    s      9
YY[ ""$t$nnF*446J}}Z(("..U]]U[[3->>??	 %  !  sK   	CB> B<AB> =:B> 7C8B> :C<B> >C	CCCc               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r9   
agent_namer;   r   reportr5   taggerr4   http_sessionzaiohttp.ClientSessionr<   r=   r>   )r?   s   "r@   rA   rA     sN     M' M'M' M' 	M'
 M' (M' 
M'rC   c                  aa"a#a$a%"   R  V3R llp\         P                  R3R R llpV! R4      pSP                  o%\        S%P	                  4       4      '       Ed   T! TR\        SP                  ;'       g    SP                  ;'       g    ^ R,          4      R\        SP                  4      R	SP                  R
VP                  '       d   \        VP                  4      MRRT RSP                  RSP                  '       dc   SP                   UU	U
u. uFG  pVP                  4       P                  4        U	U
u/ uF  w  rV
^ 8w  g   K  V
R8w  g   K  WbK  	  up
p	NKI  	  up
p	pMR/R7       S%R,          '       d   SP                   P                   F  p\#        V4      p\         P                  pRpVP$                  R8X  d%   VP&                  '       d   \         P(                  pRpV! VR\        VP*                  R,          4      RV/VVR7       K  	  V! R4      pVP,                  '       dx   VP,                   Fg  p\         P                  pRpVP/                  R4      R8X  d   \         P(                  pRpV! VR\        SP                  R,          4      RV/VVR7       Ki  	  VP0                  P                  4        FP  w  ppVP2                  '       g   K  V! VR\        VP                  R,          4      RRVRVP2                  //R7       KR  	  VP4                  '       d   VP4                  R8H  pRVP4                  /pVP6                  '       d   VP6                  VR&   T! TR\        SP                  R,          4      RV/V'       d   \         P(                  M\         P                  V'       d   RMRR7       S%R ,          ;'       d!    SP8                  ;'       d    SP:                  pS%R,          '       g   V'       g   R# \<        P>                  ! 4       PA                  \<        PB                  ! R!R"7      4      PE                  \G        ^R#7      4      pVPI                  4       p\J        PL                  ! SPN                  R$7      pVPP                  PS                  \        SP:                  ;'       g    ^ R%,          4      4       VPU                  4       o$R&o#S%R,          '       d1   \V        PX                  ! SP                   P[                  R'R(7      4      o#R)o"V'       dn   SP8                  '       d\    \\        P^                  ! SP8                  R*4      ;_uu_4       GRj  xL
 pVPa                  4       G Rj  xL
 o"RRR4      GRj  xL
  V R+2pR, V"V#V$V%3R- llp^p\e        V^,           4       EF  pV! 4       pR.R/V 2R0VPf                  /p\h        Pj                  ! R14       VPm                  VVVR27      ;_uu_4       GRj  xL
 p V Pn                  R38  d    RRR4      GRj  xL
   M\q        V 4      G Rj  xL
 p!V!e   VV8X  d)   V Ps                  4        \u        R4V Pn                   24      h\h        Pv                  ! R5V^,           V^,           V!4       \x        Pz                  ! V!4      G Rj  xL
  RRR4      GRj  xL
  EK  	  \h        Pj                  ! R64       R# u up
p	i u up
p	pi  EL EL ELr  + GRj  xL 
 '       g   i     EL; i  \b         d    R)o" ELi ; i EL( EL	 L L Lr  + GRj  xL 
 '       g   i     EK  ; i5i)7c                    V ^8  d   QhRRRR/# )r9   r   r;   r<   r	   r>   )r?   s   "r@   rA   ,_upload_session_report.<locals>.__annotate__  s     
 
# 
# 
rC   c           	        < \        4       P                  V R SP                  RSP                  RSP                  /R7      # )r   r   room)r   r   )r   
get_loggerr   r   r  )r   r  s   &r@   _get_logger+_upload_session_report.<locals>._get_logger  sA    "$//6>>&-- 0 
 	
rC   unspecifiedc               4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r9   otel_loggerr	   r  r;   	timestampr   r   rH  severityr   severity_textr<   r=   r>   )r?   s   "r@   rA   r    sN     
 


 
 	

 !
 
 

rC   c                2    V P                  VVVVVR 7       R# ))r  r  r   r   r  N)r   )r  r  r  r   r  r  s   &&&&&&r@   _log$_upload_session_report.<locals>._log  s&     	!$' 	 	
rC   chat_historyzsession reportrx  zsession.optionszsession.report_timestampzsession.tagsNr  sdk_versionusage        )r  r  r   
transcriptr6  errorz	chat itemz	chat.item)r  r  r   r  r  evaluationsverdictfail
evaluationtagr   rk   outcomereasonaudioTr   r   )r   rK  r   F)exclude_timestamprC   rbz/observability/recordings/v0c                   V ^8  d   QhRR/# )r9   r<   zaiohttp.MultipartWriterr>   )r?   s   "r@   rA   r  O  s      5 rC   c                 `  < \         P                  ! R 4      p V P                  S4      pVP                  R RRR7       RVP                  R&   \        \        S4      4      VP                  R&   SR,          '       dV   V P                  S4      pVP                  R RR	R7       R
VP                  R&   \        \        S4      4      VP                  R&   S'       dV   V P                  S4      pVP                  R RRR7       RVP                  R&   \        \        S4      4      VP                  R&   V # )z	form-dataheaderzheader.binpb)r   filenamezapplication/protobufContent-TypezContent-Lengthr  r  zchat_history.jsonzapplication/jsonr  zrecording.oggz	audio/ogg)aiohttpMultipartWriterr   set_content_dispositionr   r;   len)mppartaudio_byteschat_history_jsonheader_bytesrecording_optionss     r@   _build_multipart0_upload_session_report.<locals>._build_multipartO  s   $$[1yy&$$[x.$Y'=^$),S->)?%&\**99./D((.;N )  ,>DLL(-05F1G-HDLL)*99[)D((7_(]+6DLL(-0[1A-BDLL)*	rC   r   r   r  z)uploading session report to LiveKit Cloud)datar   i  z recording upload failed: status z:recording upload failed (attempt %d/%d), retrying in %.1fszfinished uploading)>r   UNSPECIFIEDr  anyvaluesr   
started_atr  varsoptionstagssortedr  model_usage
model_dumpr:  r  rr  r5  rb  ERRORra  r  r;  _tagsrk   r  outcome_reasonaudio_recording_pathaudio_recording_started_atr-   r   r   r   r   r   r   proto_metricsMetricsRecordingHeaderr   
start_timer`  SerializeToStringr=  r>  to_dictaiofilesopenrz  r  rangecontent_typer0   debugpostr  r  raise_for_statusRuntimeErrorwarningasynciosleep)&r  r   r  r  r  r  r  chat_loggerukvrD  item_logr  r  eval_loggerr  r  entryis_failoutcome_data	has_audior   jwt
header_msgfurlr  max_retriesattemptr  r   rt  r  r  r  r  r  s&   $$d$$                             @@@@r@   _upload_session_reportr    s    
 
 $2#=#=*
  n-K00
##%&&!6,,EE0@0@EEALM!4#7*F,<,<v{{{v{{ 3jv11 %%% $/// '(lln&:&:&<T&<daQT1PS8TQT&<T/
 		
& &&''--D*40H'5'A'AH!.Myy22t}}})// ' doo34'2!+ .$ m,K ,,J%11H)M~~i(F2)// '!f..45(*5!+ -" ll((*
U>>>eoo34!FCU^^#LM	 + ~~~..F*(16>>'B   %+%:%:L"&**S01!<0-4^)).:T:T%,'-	
 	'" 	. 	.''	. 	.-- 
 \**9 		"	"3#:#:#F	G	)!$	% 
 


C55J **30Q0Q0V0VUVZ^/^+_`//1L&& JJv':':'B'BUZ'B'[\KV000	}}V%@%@$GGG1$%FFHn HG
 ;
<C 0 Kq)wse_BOO

 	@A$$Sr7$CCCt{{S  DCC !34 88K"g&<%%'"%Edkk]#STTNNL!a	 --,,, DCC *2 LL%&y UH H, HGGG 	K	L D 9 - DCCCs  A1]9]A7]]&[4(;[.0[.0[.0[4("]>A]A]1B&]A](.]A]7]]$] ]B1]:2]-9]']:-\! '[;(\! +\?[> \\! \\! A9]\5
]]$]/\80]6]\;
A7]<\=
=]]\?!].[4(4];\! >\\! \	
\
\	\	\! ]\! !\2.]1\22]8];]=]?]]]

]]
]g      $@c                    V ^8  d   QhRRRR/# )r9   timeoutr  r<   r=   r>   )r?   s   "r@   rA   rA     s"     AQ AQ AQ AQrC   c                <   \         P                  ! 4       p\        VP                  4       F,  p\	        V\
        4      '       g   K  VP                  V4       K.  	  . p\	        \        4       ;p\        4      '       d   VP                  V4       \	        \        P                  ;p\        P                  4      '       d   VP                  V4       \	        \        P                  ! 4       ;p\         4      '       d   VP                  V4       R R lpV Uu. uF4  p\"        P$                  ! VV3R\'        V4      P(                   2RR7      NK6  	  p	pV	 F  p
V
P+                  4        K  	  \,        P.                  ! 4       V ,           pV	 F8  p
V
P1                  \3        RV\,        P.                  ! 4       ,
          4      4       K:  	  \4        ;QJ d    R V	 4       F  '       g   K   RM	  RM! R V	 4       4      '       d   \6        P8                  ! R	V 4       R
# R
# u upi )uI  Shut down OTel providers with a hard wall-clock bound.

``provider.shutdown()`` internally joins its exporter worker with a 30s
default timeout per provider (and ``force_flush`` ignores its timeout arg
in the current SDK — see #4623). Across tracer/logger/meter that's up to
~90s, enough to stall the caller's event loop past the supervisor's 60s
ping/pong deadline when the OTLP endpoint is rate-limiting or unreachable.

Each provider is shut down in its *own* daemon thread, run in parallel.
That matters for two reasons:
  1) Main-thread wait is bounded by ``max`` of the three, not the ``sum``.
  2) ``BatchProcessor.shutdown()`` sets ``_shutdown = True`` as its first
     action; running in parallel guarantees that flag gets set on every
     provider within milliseconds, even if one hangs in ``worker_thread.join``.
     Any later atexit re-entry (OTel registers one, and Python's
     ``logging.shutdown()`` may spawn a *non-daemon* thread via
     ``LoggingHandler.flush`` → ``force_flush`` — see opentelemetry-python
     PR #4636) then short-circuits instead of hanging process exit.

Any unfinished work stays on existing daemon threads and is discarded at
process exit.

Upstream context:
- https://github.com/open-telemetry/opentelemetry-python/issues/4623
  (TracerProvider.shutdown() has no configurable timeout — still open)
c                    V ^8  d   QhRRRR/# )r9   providerr	   r<   r=   r>   )r?   s   "r@   rA   )_shutdown_telemetry.<locals>.__annotate__  s     G G G GrC   c                x     V P                  4        R#   \         d    \        P                  ! R 4        R# i ; i)z&failed to shut down telemetry providerN)r   r  r0   	exception)r  s   &r@   _shutdown_one*_shutdown_telemetry.<locals>._shutdown_one  s4    	G 	GEF	Gs    !99zlivekit-telemetry-shutdown-T)targetrV   r   daemonr  c              3  @   "   T F  qP                  4       x  K  	  R # 5irE   )is_alive).0ts   & r@   	<genexpr>&_shutdown_telemetry.<locals>.<genexpr>  s     
)A::<<s   Fz-telemetry shutdown exceeded %.1fs; continuingN)r  r  listhandlersr   r   removeHandlerr   r   r   rf   rI   r   r   r  r  r  r   Threadr5  r`   starttime	monotonicjoinmaxr  r0   r  )r  r   h	providerslptpr  r  pthreadsr  deadlines   &           r@   _shutdown_telemetryr    s   : D$-- a((q! ! I+--"~>>///"1I1IJJ6688":JKKG  A 	 .tAw/?/?.@A		
    		  ~~')H	s34>>#3345  s
)
)sss
)
)))FP *!s   :H)v__conditional_annotations__
__future__r   r  r=  r  r   r
  collections.abcr   r   r   r   typingr   r	   r  r  r  google.protobuf.json_formatr
   opentelemetryr   otel_contextr   r  r   rG   opentelemetry._logsr   r   r   r   opentelemetry._logs.severityr   &opentelemetry.exporter.otlp.proto.httpr   4opentelemetry.exporter.otlp.proto.http._log_exporterr   6opentelemetry.exporter.otlp.proto.http.metric_exporterr   5opentelemetry.exporter.otlp.proto.http.trace_exporterr   opentelemetry.sdkr   opentelemetry.sdk._logsr   r   r   r   opentelemetry.sdk._logs.exportr   opentelemetry.sdk.metricsr   r  r   r  r   r  r   r  r   r  r    r  r!   r   opentelemetry.sdk.metrics.exportr"   r#   opentelemetry.sdk.resourcesr$   r%   opentelemetry.sdk.tracer&   opentelemetry.sdk.trace.exportr'   opentelemetry.tracer(   r)   opentelemetry.util._decoratorr*   opentelemetry.util.typesr+   r,   livekitr-   livekit.protocolr.   r  logr/   r0   r   r1   llmr2   r3   observabilityr4   voice.reportr5   r7   rf   __annotations__rh   r{   Handlerr   r   r   r%  rF  rr  r  r  _TELEMETRY_SHUTDOWN_TIMEOUTr  )r  s   @r@   <module>r7     sS   " "      $ 2 2 %    5 ] ] d d 7 > P U R 0  C   c > 1 = , A ?  ? % +&,V , ((89 9,] ,. ,# #  )_c){7
 {7 {7|*ZUDp(M'` #  *E AQ AQrC   