Ë
    ÿÍ:j¬  ã                  ó´  — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlZddlZddlmZ ddlmZ dd	lmZ dd
lmZ  ee«      j.                  dz  Z ee«      5 Z ej6                  e«      Zddd«       ed   Zej=                  di «      Z e  e
«       «      Z!ed   Z" eeed¬«      Z# ed¬«      Z$e$jK                   ee#dd¬«      «       e$jM                  e'«      Z(dd„Z)d d„Z*	 	 	 d!	 	 	 	 	 	 	 	 	 	 	 	 	 d"d„Z+dejX                  vr& e ed   «      j[                  «       ejX                  d<   d#d„Z.d$d„Z/d%d&d„Z0d'd„Z1 e1e"«       y# 1 sw Y   ŒÜxY w)(at  OpenTelemetry metrics for tracking function usage.

Metrics can be enabled/disabled for the current python kernel:

>>> from pyannote.audio.telemetry.metrics import set_telemetry_metrics
>>> set_telemetry_metrics(True)   # enable
>>> set_telemetry_metrics(False)  # disable

To activate / deactivate globally:

>>> set_telemetry_metrics(True, save_choice_as_default=True)
é    )ÚannotationsN)ÚPath)ÚAny)Úuuid4)ÚOTLPSpanExporter)ÚTracerProvider)ÚBatchSpanProcessor)Ú__version__zconfig.yamlÚotlp_endpointÚotlp_headersÚtelemetry_log_levelé   )ÚendpointÚheadersÚtimeoutF)Úshutdown_on_exitiô  iˆ  )Úschedule_delay_millisÚexport_timeout_millisc                ó¾   — t        «       rGt        j                  d«      5 }|j                  t	        | dd«      t
        t        dœ«       ddd«       yy# 1 sw Y   yxY w)z�
    Increment the model initialization counter.

    Parameters
    ----------
    model : Model
        Instantiated model
    zoss-model-initÚ_otel_originÚunknown)ÚoriginÚversionÚ
session_idN©Úis_metrics_enabledÚtracerÚstart_as_current_spanÚset_attributesÚgetattrr
   Ú
SESSION_ID)ÚmodelÚspans     úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/pyannote/audio/telemetry/metrics.pyÚtrack_model_initr%   2   s_   € ô ÔÜ×)Ñ)Ð*:Ó;ð 	¸tØ×Ñä% e¨^¸YÓGÜ*Ü",ñô÷	ð 	ð ÷	ð 	ús    )AÁAc           	     óÖ   — t        «       rSt        j                  d«      5 }|j                  t	        | dd«      t	        | dd«      t
        t        dœ«       ddd«       yy# 1 sw Y   yxY w)z|
    Track pipeline initialization

    Parameters
    ----------
    pipeline : Pipeline
        Instantiated pipeline
    zoss-pipeline-initr   r   Ú
_otel_name)r   Únamer   r   Nr   )Úpipeliner#   s     r$   Útrack_pipeline_initr*   F   sk   € ô ÔÜ×)Ñ)Ð*=Ó>ð 	À$Ø×Ñä% h°À	ÓJÜ# H¨l¸IÓFÜ*Ü",ñ	ô÷	ð 	ð ÷	ð 	ús    5AÁA(c                ón  — t        «       rŸddlm}  |«       j                  |«      }ddlm}  ||||¬«      \  }}}t        j                  d«      5 }	|	j                  t        | dd«      t        | dd«      t        t        |||t        j                  |«      r|nd	d
œ«       ddd«       yy# 1 sw Y   yxY w)ad  
    Track duration of files processed by pipelines

    Parameters
    ----------
    pipeline : Pipeline
        The pipeline being applied.
    file : AudioFile
        The audio file being processed by the pipeline.
    num_speakers, min_speakers, max_speakers : int, optional
        Requested number of speakers in the audio file, if applicable.
    r   )ÚAudio)Úset_num_speakers)Únum_speakersÚmin_speakersÚmax_speakerszoss-pipeline-applyr   r   r'   Úinf)r   r(   r   r   Údurationr.   r/   r0   N)r   Úpyannote.audio.core.ior,   Úget_durationÚ*pyannote.audio.pipelines.utils.diarizationr-   r   r   r   r    r
   r!   ÚnpÚisfinite)
r)   Úfiler.   r/   r0   Úkwargsr,   r2   r-   r#   s
             r$   Útrack_pipeline_applyr:   [   s¹   € ô* ÔÝ0Ù›'×.Ñ.¨tÓ4ˆåOÙ3CØ%Ø%Ø%ô4
Ñ0ˆ�l Lô ×)Ñ)Ð*>Ó?ð 	À4Ø×Ñä% h°À	ÓJÜ# H¨l¸IÓFÜ*Ü",Ø (Ø$0Ø$0Ü46·K±KÀÔ4M¡LÐSXñ	ô÷	ð 	ð ÷	ð 	ús   ÁAB+Â+B4ÚPYANNOTE_METRICS_ENABLEDÚmetrics_enabledc                 ó‚   — dt         j                  vrt        d«      ‚t         j                  d   j                  «       dv S )z
    Check if metrics are enabled.

    Returns
    -------
    bool
        True if metrics are enabled, False otherwise.
    r;   z9PYANNOTE_METRICS_ENABLED environment variable is not set.)ÚtrueÚ1)ÚosÚenvironÚ
ValueErrorÚlower© ó    r$   r   r   �   s:   € ð "¬¯©Ñ3ÜÐTÓUÐUä�:‰:Ð0Ñ1×7Ñ7Ó9¸]ÐJÐJrE   c                óö   — t        t        «      5 }t        j                  |«      }ddd«       | d<   t        t        d«      5 }t        j                  ||«       ddd«       y# 1 sw Y   Œ>xY w# 1 sw Y   yxY w)z 
    Save metrics state to the configuration file.

    Parameters
    ----------
    enabled : bool
        Whether metrics should be enabled or disabled.
    Nr<   Úw)ÚopenÚCONFIG_FILEÚyamlÚ	safe_loadÚ	safe_dump)ÚenabledÚfÚconfigs      r$   Ú_save_metrics_configrP   Ÿ   sr   € ô 
ŒkÓ	ð #˜aÜ—‘ Ó"ˆ÷#ð !(€FÐÑä	Œk˜3Ó	ð " 1Ü�‰�v˜qÔ!÷"ð "÷#ð #ú÷
"ð "ús   �A#ÁA/Á#A,Á/A8c                óŠ   — t        | «      } t        | «      j                  «       t        j                  d<   |rt        | «       yy)a  
    Enable or disable metrics globally.

    Parameters
    ----------
    enabled : bool
        Whether to enable or disable the metrics.
    save_choice_as_default : bool, optional
        If True, saves the state to the configuration file as the default value.
    r;   N)ÚboolÚstrrC   r@   rA   rP   )rM   Úsave_choice_as_defaults     r$   Úset_telemetry_metricsrU   ±   s9   € ô �7‹m€GÜ-0°«\×-?Ñ-?Ó-A„B‡J�JÐ)Ñ*ÙÜ˜WÕ%ð rE   c                óH  — d}| j                  «       } | |vrt        ddj                  |«      › �«      ‚t        t        | «      }t        j
                  j                  j                  D ]8  }|j                  d«      sŒt	        j                  |«      j                  |«       Œ: y)ac  
    Set the log level for OpenTelemetry loggers to control error visibility.

    This can be used to suppress error messages when telemetry fails.

    Parameters
    ----------
    level : str
        The log level to set. Must be one of: 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'.

        - 'DEBUG': Show all messages including detailed debugging information
        - 'INFO': Show informational messages, warnings and errors
        - 'WARNING': Show only warnings and errors (default)
        - 'ERROR': Show only errors
        - 'CRITICAL': Show only critical errors

    Raises
    ------
    ValueError
        If the provided level is not a valid logging level.

    Examples
    --------
    To suppress most error messages:

    >>> set_opentelemetry_log_level('ERROR')

    To show all messages:

    >>> set_opentelemetry_log_level('DEBUG')
    )ÚDEBUGÚINFOÚWARNINGÚERRORÚCRITICALzLog level must be one of: z, ÚopentelemetryN)ÚupperrB   Újoinr    ÚloggingÚrootÚmanagerÚ
loggerDictÚ
startswithÚ	getLoggerÚsetLevel)ÚlevelÚvalid_levelsÚlogging_levelÚlogger_names       r$   Úset_opentelemetry_log_levelrj   Â   s“   € ð@ E€LØ�K‰K‹M€Eà�LÑ ÜÐ5°d·i±iÀÓ6MÐ5NÐOÓPÐPô œG UÓ+€Mô —|‘|×+Ñ+×6Ñ6ò CˆØ×!Ñ! /Õ2Ü×Ñ˜kÓ*×3Ñ3°MÕBñCrE   )r"   z'Model'ÚreturnÚNone)r)   ú
'Pipeline'rk   rl   )NNN)r)   rm   r8   z'AudioFile'r.   ú
int | Noner/   rn   r0   rn   r9   r   rk   rl   )rk   rR   )rM   rR   rk   rl   )F)rM   rR   rT   rR   rk   rl   )rf   rS   rk   rl   )2Ú__doc__Ú
__future__r   r_   r@   Úpathlibr   Útypingr   Úuuidr   Únumpyr6   rJ   Ú5opentelemetry.exporter.otlp.proto.http.trace_exporterr   Úopentelemetry.sdk.tracer   Úopentelemetry.sdk.trace.exportr	   Úpyannote.audior
   Ú__file__ÚparentrI   rH   Úconfig_file_streamrK   ÚCONFIGÚOTLP_ENDPOINTÚgetÚOTLP_HEADERSrS   r!   ÚDEFAULT_LOG_LEVELÚexporterÚproviderÚadd_span_processorÚ
get_tracerÚ__name__r   r%   r*   r:   rA   rC   r   rP   rU   rj   rD   rE   r$   ú<module>r†      sŸ  ðñõ #ã Û 	Ý Ý Ý ã Û Ý RÝ 2Ý =Ý &á�8‹n×#Ñ# mÑ3€ñ 
ˆ+Óð 0Ð,ØˆT�^‰^Ð.Ó/€F÷0ð �Ñ'€Ø�z‰z˜.¨"Ó-€Ù‘“‹\€
ØÐ0Ñ1Ð ñ  ]¸LÐRSÔT€Ù¨5Ô1€Ø × Ñ Ñ.¨xÈsÐjnÔoÔ pØ	×	Ñ	˜XÓ	&€óó(ð0  $Ø#Ø#ð,Øð,à
ð,ð ð,ð ð	,ð
 ð,ð ð,ð 
ó,ð`  R§Z¡ZÑ/Ù-0°Ð8IÑ1JÓ-K×-QÑ-QÓ-S€B‡J�JÐ)Ñ*óKó "ô$&ó",Cñ^ Ð-Õ .÷]0ð 0ús   Á EÅE