
    /j%b                    <   % S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
  S SKJrJr  S SKrS SKrS SKrS SKJr  S SKJrJrJr  S SKJrJrJr  S S	KJ r   S S
K!J"r"  S SK#J$r$  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/  S SK0J1r1  S SK2J3r4J5r6J7r8J9r:J;r<J=r>J?r@  S SKAJBrBJCrC  S SKDJErEJFrF  S SKGJHrH  S SKIJJrJ  S SKKJLrLJMrM  S SKNJOrO  S SKPJQrQJRrR  S SKSJTrT  S SKUJVrVJrW  SSKXJYrYJZrZ  SSK[J\r\  \(       a  SSK]J^r^J_r_  SS K`Jara  SS!KbJcrc   " S" S#\M5      rd\d" S$5      reS#\fS%'    " S& S'\H5      rg " S( S)\.5      rh " S* S+\R                  5      rj " S, S-\-5      rkSS..     S8S/ jjrlS0S0S1.           S9S2 jjrmS:S3 jrnS;S4 jro            S<S5 jrpS6rq\q4S=S7 jjrrg)>    )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                  F    \ rS rSrSS jrS	S jrS
S jr\SS j5       rSr	g)_DynamicTracer;   c                z    Xl         [        R                  " 5       U l        [        R                  " U5      U l        g N)_instrumenting_module_name	trace_apiget_tracer_provider_tracer_provider
get_tracer_tracer)selfinstrumenting_module_names     P/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/telemetry/traces.py__init___DynamicTracer.__init__<   s,    *C':C:W:W:Y ++,EF    c                l    Xl         [        R                  " U R                  U R                   S9U l        g )N)tracer_provider)r@   r>   rA   r=   rB   )rC   rJ   s     rE   set_provider_DynamicTracer.set_providerA   s,     / ++++ 11
rH   c                :    U R                   R                  " U0 UD6$ r<   )rB   
start_span)rC   argskwargss      rE   rN   _DynamicTracer.start_spanH   s    ||&&777rH   c              /     #    U R                   R                  " U0 UD6 nUv   S S S 5        g ! , (       d  f       g = f7fr<   )rB   start_as_current_span)rC   rO   rP   spans       rE   rS   $_DynamicTracer.start_as_current_spanK   s/     \\//@@DJ A@@s   >-	>
;>)r=   rB   r@   N)rD   strreturnNone)rJ   trace_api.TracerProviderrW   rX   )rO   r	   rP   r	   rW   r(   )rO   r	   rP   r	   rW   zIterator[Span])
__name__
__module____qualname____firstlineno__rF   rK   rN   r*   rS   __static_attributes__ rH   rE   r9   r9   ;   s&    G

8  rH   r9   livekit-agentstracerc                  ,    \ rS rSrSS jrSSS jjrSrg)	_MetadataSpanProcessorT   c                    Xl         g r<   	_metadatarC   metadatas     rE   rF   _MetadataSpanProcessor.__init__U       !rH   Nc                :    UR                  U R                  5        g r<   )set_attributesrg   )rC   rT   parent_contexts      rE   on_start_MetadataSpanProcessor.on_startX   s    DNN+rH   rf   ri   zdict[str, AttributeValue]rW   rX   r<   )rT   r(   rn   zotel_context.Context | NonerW   rX   )rZ   r[   r\   r]   rF   ro   r^   r_   rH   rE   rc   rc   T   s    ", ,rH   rc   c                  @    \ rS rSrSS jrS	S jrS
S jrSSS jjrSrg)_MetadataLogProcessor\   c                    Xl         g r<   rf   rh   s     rE   rF   _MetadataLogProcessor.__init__]   rk   rH   c                j   UR                   R                  (       a0  UR                   R                  R                  U R                  5        OU R                  UR                   l        UR                  (       a<  UR                   R                  R                  SUR                  R
                  05        g g )Nzlogger.name)
log_record
attributesupdaterg   instrumentation_scopename)rC   log_datas     rE   on_emit_MetadataLogProcessor.on_emit`   s}    ))**11$..A-1^^H*))**11 > > C CD *rH   c                    g r<   r_   rC   s    rE   shutdown_MetadataLogProcessor.shutdownk   s    rH   c                    g)NTr_   )rC   timeout_milliss     rE   force_flush!_MetadataLogProcessor.force_flushn   s    rH   rf   Nrq   )r}   r   rW   rX   rW   rX   )0u  )r   intrW   bool)	rZ   r[   r\   r]   rF   r~   r   r   r^   r_   rH   rE   rs   rs   \   s    "	 rH   rs   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )_BufferingHandlerr   z<Buffers log records in memory for later replay through OTLP.c                0   > [         TU ]  5         / U l        g r<   )superrF   buffer)rC   	__class__s    rE   rF   _BufferingHandler.__init__u   s    /1rH   c                :    U R                   R                  U5        g r<   )r   append)rC   records     rE   emit_BufferingHandler.emity   s    6"rH   )r   r   )r   logging.LogRecordrW   rX   )	rZ   r[   r\   r]   __doc__rF   r   r^   __classcell__r   s   @rE   r   r   r   s    F2# #rH   r   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )_TraceLevelLoggingHandler}   zCustom 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                x   > [         TU ]  U5      nUR                  [        :X  a  [        R
                  Ul        U$ r<   )r   
_translatelevelnor0   r   TRACEseverity_number)rC   r   rx   r   s      rE   r   $_TraceLevelLoggingHandler._translate   s4    W'/
 >>[()7)=)=J&rH   r_   )r   r   rW   OTelLogRecord)rZ   r[   r\   r]   r   r   r^   r   r   s   @rE   r   r   }   s     rH   r   )ri   c                   U(       a9  [        U [        R                  5      (       a  U R                  [	        U5      5        [
        R                  U 5        g)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_processorrc   ra   rK   )rJ   ri   s     rE   set_tracer_providerr      s;     J	0H0HII**+A(+KL
(rH   T)enable_tracesenable_logsc                P  ^^ [        SS9m[        SS9m " S S[        R                  5      n " UU4S jS5      nU" 5       nU" U5      n[        R                  n	XS	.n
[
        R                  " [        S
SU SU05      nU(       Ga  [        [        R                  [        R                  [        R                  45      (       a   [        R                  " US9n[!        U5        OJ[        R                  n[        U[        R                  5      (       a  UR"                  R%                  U5        ['        U S3U	US9n[        U[        R                  5      (       a4  UR)                  [+        U
5      5        UR)                  [-        U5      5        [/        5       n[        U[0        5      (       d  [1        5       n[3        U5        U(       a  [5        U S3U	US9nUR7                  [9        U
5      5        UR7                  [;        U5      5        [=        [>        R@                  US9n[>        RB                  " 5       nURE                  U5        [F        RH                  " 5       n[        U[J        5      (       d  [M        U S3U	U[N        [P        RR                  [T        [P        RR                  [V        [P        RR                  [X        [P        RR                  [Z        [P        RR                  [\        [P        RR                  0S9n[_        USS9n[K        UU/S9n[F        R`                  " U5        g g )N   hours   )minutesc                  <   ^  \ rS rSrSU 4S jjrSU 4S jjrSrU =r$ )3_setup_cloud_tracer.<locals>._AuthRefreshingSession   c                .   > [         TU ]  5         Xl        g r<   )r   rF   _header_provider)rC   header_providerr   s     rE   rF   <_setup_cloud_tracer.<locals>._AuthRefreshingSession.__init__   s    G$3!rH   c                v   > U R                   R                  U R                  5       5        [        TU ]  " U0 UD6$ r<   )headersrz   r   r   request)rC   rO   rP   r   s      rE   r   ;_setup_cloud_tracer.<locals>._AuthRefreshingSession.request   s2    LL 5 5 787?D3F33rH   )r   )r   _AuthHeaderProviderrW   rX   )rO   r	   rP   r	   rW   zrequests.Response)rZ   r[   r\   r]   rF   r   r^   r   r   s   @rE   _AuthRefreshingSessionr      s    	4	4 	4rH   r   c                  @   > \ rS rSrSS jrSU4S jjrSU 4S jjrSrg)	0_setup_cloud_tracer.<locals>._AuthHeaderProvider   c                    [         R                  " 5       U l        SU l        [        R
                  R                  [        R                  S9U l	        U R                  5         g )N )tzinfo)	threadingLock_lock_auth_headerr   minreplacer   utc_expires_at_refreshr   s    rE   rF   9_setup_cloud_tracer.<locals>._AuthHeaderProvider.__init__   s?    ")DJ "D'||338<<3HDMMOrH   c                  > [         R                  " 5       R                  [         R                  " SS95      R	                  T5      nSUR                  5        3U l        [        R                  " [        R                  5      T-   U l        g )NTwriteBearer )r-   AccessTokenwith_observability_grantsObservabilityGrantswith_ttlto_jwtr   r   nowr   r   r   )rC   access_token	token_ttls     rE   r   9_setup_cloud_tracer.<locals>._AuthHeaderProvider._refresh   sg    !**3+B+B+NO)$ 
 #*,*=*=*?)@ AD'||HLL9IEDrH   c                  > [         R                  " [        R                  5      nXR                  T-
  :  a7  U R
                     XR                  T-
  :  a  U R                  5         S S S 5        SU R                  0$ ! , (       d  f       N= f)NAuthorization)r   r   r   r   r   r   r   r   )rC   r   refresh_margins     rE   __call__9_setup_cloud_tracer.<locals>._AuthHeaderProvider.__call__   sg    ,,x||,C&&77ZZ..??   $T%6%677  Zs   #A==
B)r   r   r   Nr   )rW   zdict[str, str])rZ   r[   r\   r]   rF   r   r   r^   )r   r   s   rE   r   r      s    		F	8 	8rH   r   )room_idjob_idr`   r   r   )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_readers)1r   requestsSessionr   Gzipr%   creater$   r   ra   r@   r>   ProxyTracerProviderNoOpTracerProviderr   r   r   r   merger   r   rc   r'   r   r   r   r   add_log_record_processorrs   r   r   loggingNOTSET	getLogger
addHandlermetrics_apiget_meter_providerSdkMeterProviderr   
SdkCounterr"   DELTASdkUpDownCounterSdkHistogramSdkObservableCounterSdkObservableUpDownCounterSdkObservableGauger#   set_meter_provider)r   r   observability_urlr   r   r   r   r   r   otlp_compressionri   r   rJ   span_exporterr   log_exporterhandlerrootcurrent_meter_providermetric_exporterreadermeter_providerr   r   s                         @@rE   _setup_cloud_tracerr     s    "Iq)N4!1!1 48 80 *+O$_5G"''6=*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! @rH   c                   [         R                  [         R                  [         R                  [         R                  S.n/ nU R                   GH%  nUR
                  S:X  aL  UR                  UR                  5      =n(       a*  UR                  USUR                  =(       d    S045        M`  UR
                  S:X  a`  UR                  [         R                  S[        R                  " UR                  UR                  S.UR                  SS	.5      /S
.45        M  UR
                  S:X  d  M  UR                  [         R                  UR                   UR                  UR                  S.45        GM(     U$ )N)system	developeruser	assistantmessagecontentr   function_callr  )r|   	argumentsfunction)r  idtype)role
tool_callsfunction_call_output)r  r|   r  )r3   EVENT_GEN_AI_SYSTEM_MESSAGEEVENT_GEN_AI_USER_MESSAGEEVENT_GEN_AI_ASSISTANT_MESSAGEitemsr  getr  r   text_contentjsondumpsr|   r  call_idEVENT_GEN_AI_TOOL_MESSAGEoutput)chat_ctxrole_to_eventeventsitem
event_names        rE   _chat_ctx_to_otel_eventsr0    s1   99
 !<<55 ??	M ,.F99	!]5F5Ftyy5Q'Qz'QMM:	43D3D3J'KLMYY/)MM>> + JJ9=QUQ_Q_0`*.,,,6!"'" YY00MM99 $TYYdllS/ : MrH   c                B	   [         R                  R                  R                  5       nU R                  S:X  Ga  UR
                  nU R                  Ul        [         R                  R                  [         R                  R                  [         R                  R                  [         R                  R                  S.nX0R                     Ul        U R                   H:  n[        U[        5      (       d  M  UR                  R                  5       nXEl        M<     U R"                  Ul        U R$                  b  U R$                  Ul        U R&                  R)                  5        H  u  pg[        U5      UR&                  U'   M     U R*                  nSU;   a4  UR*                  R,                  R/                  [1        US   S-  5      5        SU;   a4  UR*                  R2                  R/                  [1        US   S-  5      5        SU;   a  US   UR*                  l        SU;   a  US   UR*                  l        SU;   a  US   UR*                  l        S	U;   a  US	   UR*                  l        S
U;   a  US
   UR*                  l        SU;   a  US   UR*                  l        UR@                  R/                  [1        U R@                  S-  5      5        GOU R                  S:X  a  URB                  n	U R                  U	l        U RD                  U	l"        U RF                  U	l#        U RH                  U	l$        U	R@                  R/                  [1        U R@                  S-  5      5        GO0U R                  S:X  a  URJ                  n
U R                  U
l        U RH                  U
l$        U RD                  U
l"        U RL                  U
l&        U RN                  U
l'        U
R@                  R/                  [1        U R@                  S-  5      5        OU R                  S:X  a}  URP                  nU R                  Ul        U RR                  b  U RR                  Ul)        U RT                  Ul*        UR@                  R/                  [1        U R@                  S-  5      5        [W        USS9$ )Nr  )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  r  agent_handoffT)preserving_proto_field_name),r.   agent_sessionr4   r5   r  r  r  	DEVELOPERSYSTEMUSER	ASSISTANTr  r  r   rV   addtextinterruptedtranscript_confidenceextrar#  r   r2  FromMillisecondsr   r4  r5  r6  r7  r8  r9  r:  
created_atr  r(  r  r|   r  r*  is_errorr;  old_agent_idnew_agent_idr
   )r.  item_pbmsgrole_mapr  
content_pbkeyvaluer   fcfcoahs               rE   _to_proto_chat_itemrU  G  s   $$0099;GyyIoo "//99,,33**//!//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dCCrH   c                B  ^#    S5U4S jjn[         R                  S4             S6S jjnU" S5      nTR                  n[        UR	                  5       5      (       Ga  U" US[        TR                  =(       d    TR                  =(       d    SS-  5      [        TR                  5      TR                  UR                  (       a  [        UR                  5      OS U TR                  TR                  (       ab  TR                   V	V
Vs/ s HF  n	U	R                  5       R                  5        V
Vs0 s H  u  pUS:w  d  M  US:w  d  M  X_M     snn
PMH     snn
n	OS S	.S
9  US   (       a  TR                   R                   Hv  n[#        U5      n[         R                  nSnUR$                  S:X  a#  UR&                  (       a  [         R(                  nSnU" US[        UR*                  S-  5      SU0UUS9  Mx     U" S5      nUR,                  (       ao  UR,                   H_  n[         R                  nSnUR/                  S5      S:X  a  [         R(                  nSnU" US[        TR                  S-  5      SU0UUS9  Ma     UR0                  R                  5        HG  u  nnUR2                  (       d  M  U" US[        UR                  S-  5      SUUR2                  S.0S
9  MI     UR4                  (       a  UR4                  S:H  nSUR4                  0nUR6                  (       a  UR6                  US'   U" US[        TR                  S-  5      SU0U(       a  [         R(                  O[         R                  U(       a  SOSS9  US   =(       a    TR8                  =(       a    TR:                  nUS   (       d  U(       d  g [<        R>                  " 5       RA                  [<        RB                  " SS95      RE                  [G        SS95      nURI                  5       n[J        RL                  " TRN                  S9nURP                  RS                  [        TR:                  =(       d    SS-  5      5        URU                  5       n[V        RX                  " S 5      nUR[                  U5      nUR]                  S S!S"S#9  S$UR^                  S%'   [a        [c        U5      5      UR^                  S&'   US   (       a  [d        Rf                  " TR                   Ri                  S'S(95      nUR[                  U5      nUR]                  S SS)S#9  S*UR^                  S%'   [a        [c        U5      5      UR^                  S&'   U(       a  TR8                  (       a   [j        Rl                  " TR8                  S+5       IS h  vN nURo                  5       I S h  vN nS S S 5      IS h  vN   W(       aR  UR[                  U5      nUR]                  S SS-S#9  S.UR^                  S%'   [a        [c        U5      5      UR^                  S&'   U S/3n S0U 3URr                  S1.n![t        Rv                  " S25        URy                  U UU!S39 IS h  vN n"U"R{                  5         S S S 5      IS h  vN   [t        Rv                  " S45        g s  snn
f s  snn
n	f  GN N N! , IS h  vN  (       d  f       GN= f! [p         a    S,n GNf = f N} N_! , IS h  vN  (       d  f       Nt= f7f)7Nc                x   > [        5       R                  U TR                  TR                  TR                  S.S9$ )N)r   r   room)r|   ry   )r   
get_loggerr   r   rX  )r|   reports    rE   _get_logger+_upload_session_report.<locals>._get_logger  s;    "$//!>> -- 0 
 	
rH   unspecifiedc                *    U R                  UUUUUS9  g )N)body	timestampry   r   severity_text)r   )otel_loggerr_  r`  ry   severityra  s         rE   _log$_upload_session_report.<locals>._log  s&     	!$' 	 	
rH   chat_historyzsession reportr   g    eA        )zsession.optionszsession.report_timestampzsession.tags
agent_namesdk_versionusage)r_  r`  ry   
transcriptr  errorz	chat itemz	chat.item)r_  r`  ry   rc  ra  evaluationsverdictfail
evaluationtag)r|   ri   outcomereasonaudioTr   r   r   )r   r3  z	form-dataheaderzheader.binpb)r|   filenamezapplication/protobufContent-TypezContent-LengthF)exclude_timestampzchat_history.jsonzapplication/jsonrbrH   zrecording.oggz	audio/oggz/observability/recordings/v0r   )r   rw  z)uploading session report to LiveKit Cloud)datar   zfinished uploading)r|   rV   rW   r	   )rb  r	   r_  rV   r`  r   ry   dictrc  r   ra  rV   rW   rX   )>r   UNSPECIFIEDrecording_optionsanyvaluesr   
started_atr`  varsoptionstagssortedri  model_usage
model_dumpr#  rf  rU  r  rI  ERRORrH  rm  r$  _tagsri   rr  outcome_reasonaudio_recording_pathaudio_recording_started_atr-   r   r   r   r   r   r   proto_metricsMetricsRecordingHeaderr   
start_timerG  SerializeToStringaiohttpMultipartWriterr   set_content_dispositionr   rV   lenr&  r'  to_dictaiofilesopenread	Exceptioncontent_typer1   debugpostraise_for_status)#rh  r  rZ  taggerhttp_sessionr[  rd  chat_loggerr}  ukvr.  item_logrc  ra  eval_loggerrp  rq  entryis_failoutcome_data	has_audior   jwt
header_msgheader_bytesmppartchat_history_jsonfaudio_bytesurlr   resps#     `                                rE   _upload_session_reportr    s3    
 $2#=#=*


 
 	

 !
 
 

  n-K00
##%&&!6,,E0@0@EALM#'#7,2,<,<7={{v{{ 3(%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!CU^^#LM	 + ~~..F*(16>>'B  %+%:%:L"&**S01!<0-4^)).:T:T%,'-	
 	'" 	.''	.-- 
 \*9 		"	"3#:#:#F	G	)!$	% 
 


C55J **30Q0Q0VUVZ^/^+_`//1L		 	 	-B99\"D  8n U#9DLL %(\):%;DLL!"& JJv':':'B'BUZ'B'[\yy*+$$[~Pc$d'9^$),S1B-C)D%&V00	}}V%@%@$GG1$%FFHn HG
 99[)D((7_(]+6DLL(-0[1A-BDLL)*;
<C"3%G
 LL<=  2w ??4 @? LL%&C UZ H, HGGG 	K	  @???s  D
\'[4Z?$Z?$Z?$[E\:K\%[. ;[<[. ?[[[[. #[$[. (B\\\\\#\$\?[\[. [[. [+[[+&[. )\+[. .[>:\=[>>\\\\\\g      $@c                   [         R                  " 5       n[        UR                  5       H+  n[	        U[
        5      (       d  M  UR                  U5        M-     / n[	        [        5       =n[        5      (       a  UR                  U5        [	        [        R                  =n[        R                  5      (       a  UR                  U5        [	        [        R                  " 5       =n[         5      (       a  UR                  U5        S	S jnU Vs/ s H1  n["        R$                  " UU4S['        U5      R(                   3SS9PM3     n	nU	 H  n
U
R+                  5         M     [,        R.                  " 5       U -   nU	 H4  n
U
R1                  [3        SU[,        R.                  " 5       -
  5      5        M6     [5        S U	 5       5      (       a  [6        R8                  " SU 5        ggs  snf )
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                r     U R                  5         g ! [         a    [        R                  " S5         g f = f)Nz&failed to shut down telemetry provider)r   r  r1   	exception)providers    rE   _shutdown_one*_shutdown_telemetry.<locals>._shutdown_onex  s4    	G 	GEF	Gs     66zlivekit-telemetry-shutdown-T)targetrO   r|   daemonrg  c              3  @   #    U  H  oR                  5       v   M     g 7fr<   )is_alive).0ts     rE   	<genexpr>&_shutdown_telemetry.<locals>.<genexpr>  s     
)A::<<s   z-telemetry shutdown exceeded %.1fs; continuingN)r  r	   rW   rX   )r   r   listhandlersr   r   removeHandlerr   r   r   ra   r@   r   r   r   r   r   r   Threadr  rZ   starttime	monotonicjoinmaxr~  r1   warning)timeoutr  h	providerslptpr  r  pthreadsr  deadlines               rE   _shutdown_telemetryr  N  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  
)
)))FP *!s   8G%)rJ   rY   ri   z dict[str, AttributeValue] | NonerW   rX   )r   rV   r   rV   r  rV   r   r   r   r   rW   rX   )r+  r4   rW   zlist[tuple[str, Attributes]])r.  r5   rW   r{  )rh  rV   r  rV   rZ  r7   r  r6   r  zaiohttp.ClientSessionrW   rX   )r  floatrW   rX   )s
__future__r   r&  r   r   r  collections.abcr   r   r   r   typingr   r	   r  r  r   google.protobuf.json_formatr
   opentelemetryr   otel_contextr   r   r   r>   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  logr0   r1   r   r3   llmr4   r5   observabilityr6   voice.reportr7   r9   ra   __annotations__rc   rs   Handlerr   r   r   r  r0  rU  r  _TELEMETRY_SHUTDOWN_TIMEOUTr  r_   rH   rE   <module>r     s   "     $ 2 2 %    5 ] ] d d 7 > P U R 0  C   c > 1 = , A ?  ? % +&,V , ((89 9,] ,. ,# # " `d)-)<\)	)( {7{7 {7 	{7
 {7 {7 
{7|*ZLD^r'r' r' 	r'
 r' (r' 
r'j #  *E AQrH   