Ë
    ³Œj³   ã                   ó  — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z
 ddlmZ 	 ddlmZ ddlmZ d	Z G d„ de«      Z G d„ d«      Zy# e$ r8  ej&                  d
ed¬«        G d„ d«      Z G d„ d«      Z G d„ d«      ZdZY ŒRw xY w)z8OpenTelemetry span processor and exporter for LangSmith.é    N)ÚAnyÚOptional)Úurljoin)Úutils)Ú set_langsmith_metadata_attribute)ÚOTLPSpanExporter)ÚBatchSpanProcessorTúwOpenTelemetry packages are not installed. Install optional OpenTelemetry dependencies with: pip install langsmith[otel]é   )Ú
stacklevelc                   ó   — e Zd ZdZd„ Zy)r   zMock otlp span exporter class.c                 ó   — t        d«      ‚©zMock init method.r
   ©ÚImportError©ÚselfÚargsÚkwargss      úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/integrations/otel/processor.pyÚ__init__zOTLPSpanExporter.__init__   ó   € äð.óð ó    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      s
   „ Ù,ó	r   r   c                   ó   — e Zd ZdZd„ Zy)r	   z Mock batch span processor class.c                 ó   — t        d«      ‚r   r   r   s      r   r   zBatchSpanProcessor.__init__'   r   r   Nr   r   r   r   r	   r	   $   s
   „ Ù.ó	r   r	   c                   ó    — e Zd ZdZed„ «       Zy)ÚtracezMock trace class.c                  ó   — t        d«      ‚)z Mock get tracer provider method.r
   r   r   r   r   Úget_tracer_providerztrace.get_tracer_provider2   s   € ô ð.óð r   N)r   r   r   r   Ústaticmethodr%   r   r   r   r#   r#   /   s   „ Ùà	ñ	ó 
ñ	r   r#   Fc                   ó`   ‡ — e Zd ZdZ	 	 	 	 ddee   dee   dee   deeeef      fˆ fd„Zˆ xZS )ÚOtelExportera&  A subclass of `OTLPSpanExporter` configured for LangSmith.

    Environment Variables:

    - `LANGSMITH_API_KEY`: Your LangSmith API key.
    - `LANGSMITH_ENDPOINT`: Base URL for LangSmith API (defaults to `https://api.smith.langchain.com`).
    - `LANGSMITH_PROJECT`: Project identifier.
    ÚurlÚapi_keyÚprojectÚheadersc                 ó‚  •— t        j                  d«      }|j                  d«      s|dz  }|xs t        |d«      }|xs t        j                  d«      }|xs t        j
                  «       }|xs i }|st        d«      ‚|sd}t        j                  d«       d|i|¥}|r||d<   || _	        t        ‰	| �,  d
||d	œ|¤Ž y)aå  Initialize the `OtelExporter`.

        Args:
            url: OTLP endpoint URL. Defaults to `{LANGSMITH_ENDPOINT}/otel/v1/traces`.
            api_key: LangSmith API key. Defaults to `LANGSMITH_API_KEY` env var.
            parent: Parent identifier (e.g., `'project_name:test'`).

                Defaults to `LANGSMITH_PARENT` env var.
            headers: Additional headers to include in requests.
            **kwargs: Additional arguments passed to `OTLPSpanExporter`.
        NÚ/zotel/v1/tracesz`API key is required. Provide it via api_key parameter or LANGSMITH_API_KEY environment variable.ÚdefaultzpNo project specified, using default. Configure with LANGSMITH_PROJECT environment variable or project parameter.z	x-api-keyzLangsmith-Project)Úendpointr,   r   )Úls_utilsÚget_api_urlÚendswithr   Úget_api_keyÚget_tracer_projectÚ
ValueErrorÚloggingÚinfor+   Úsuperr   )
r   r)   r*   r+   r,   r   Úbase_urlr0   Úexporter_headersÚ	__class__s
            €r   r   zOtelExporter.__init__H   sæ   ø€ ô& ×'Ñ'¨Ó-ˆà× Ñ  Ô%Ø˜‰OˆHØÒ=œ' (Ð,<Ó=ˆØÒ7œX×1Ñ1°$Ó7ˆØÒ:œX×8Ñ8Ó:ˆØ’-˜RˆáÜð:óð ñ
 ØˆGÜ�L‰Lð%ôð ˜ð
àð
Ðñ
 Ø4;ÐÐ0Ñ1àˆŒä‰ÑÐO (Ð4DÑOÈÓOr   )NNNN)	r   r   r   r   r   ÚstrÚdictr   Ú__classcell__)r<   s   @r   r(   r(   >   se   ø„ ñð "Ø!%Ø!%Ø,0ñ4Pà�c‰]ð4Pð ˜#‘ð4Pð ˜#‘ð	4Pð
 ˜$˜s C˜x™.Ñ)÷4Pñ 4Pr   r(   c                   ó¼   — e Zd ZdZ	 	 	 	 	 ddee   dee   dee   deeeef      dee   f
d„Zd	eee	f   d
dfd„Z
dd„Zd„ Zd„ Zd„ Zdd„Zed„ «       Zed„ «       Zy)ÚOtelSpanProcessora&  A span processor for adding LangSmith to OpenTelemetry setups.

    This class combines the `OtelExporter` and `BatchSpanProcessor`
    into a single processor that can be added to any `TracerProvider`.

    Use this when:

    1. You already have OpenTelemetry initialized with other tools
    2. You want to add LangSmith alongside existing OTEL exporters

    Examples:
        # Fresh OpenTelemetry setup (LangSmith only):
        from langsmith.integrations.otel import configure
        configure(api_key="your-key", project="your-project")

        # Add LangSmith to existing OpenTelemetry setup:
        from opentelemetry import trace
        from langsmith.integrations.otel.processor import OtelSpanProcessor

        # Get your existing TracerProvider (already set by other tools)
        provider = trace.get_tracer_provider()

        # Add LangSmith processor alongside existing processors
        langsmith_processor = OtelSpanProcessor(
            project="your-project",
        )
        provider.add_span_processor(langsmith_processor)
    Nr*   r+   r)   r,   ÚSpanProcessorc                 óÊ   — d}|r|j                  d«      › d�}t        ||||¬«      | _        t        st	        d«      ‚|€t
        } || j                  «      | _        i | _        y)a  Initialize the `OtelSpanProcessor`.

        Args:
            api_key: LangSmith API key. Defaults to `LANGSMITH_API_KEY` env var.
            project: Project identifier. Defaults to `LANGSMITH_PROJECT` env var.
            url: Base URL for LangSmith API. Defaults to `LANGSMITH_ENDPOINT` env var
                or `https://api.smith.langchain.com`.
            headers: Additional headers to include in requests.
            SpanProcessor: Optional span processor class. Defaults to
                `BatchSpanProcessor`.
        Nr.   z/otel/v1/traces)r)   r*   r+   r,   r
   )Úrstripr(   Ú	_exporterÚOTEL_AVAILABLEr   r	   Ú
_processorÚ	_metadata)r   r*   r+   r)   r,   rB   Úexporter_urls          r   r   zOtelSpanProcessor.__init__�   sq   € ð* ˆÙØ!Ÿj™j¨›oÐ.¨oÐ>ˆLä%Ø g°wÈô
ˆŒõ
 Üð.óð ð Ð Ü.ˆMá'¨¯©Ó7ˆŒØ)+ˆ�r   ÚmetadataÚreturnc                 ó.   — |j                  «       | _        y)a"  Set metadata attributes to propagate to all spans.

        Use this to ensure metadata like ``thread_id`` appears on every span
        in a trace, not just the root span.  This is required for LangSmith
        features (e.g. the threads view) that query runs by metadata fields.
        N)ÚcopyrH   )r   rJ   s     r   Úset_metadatazOtelSpanProcessor.set_metadataÈ   s   € ð "Ÿ™›ˆ�r   c                 ó²   — | j                   r/| j                   j                  «       D ]  \  }}t        |||«       Œ | j                  j	                  ||«       y)z1Forward span start events to the inner processor.N)rH   Úitemsr   rG   Úon_start)r   ÚspanÚparent_contextÚkeyÚvalues        r   rQ   zOtelSpanProcessor.on_startÑ   sD   € à�>Š>Ø"Ÿn™n×2Ñ2Ö4‘
��UÜ0°°s¸EÕBð 5à�‰× Ñ   ~Õ6r   c                 ó:   — | j                   j                  |«       y)z/Forward span end events to the inner processor.N)rG   Úon_end©r   rR   s     r   rW   zOtelSpanProcessor.on_endØ   s   € à�‰×Ñ˜tÕ$r   c                 óh   — t        | j                  d«      r| j                  j                  |«       yy)z2Forward span ending events to the inner processor.Ú
_on_endingN)ÚhasattrrG   rZ   rX   s     r   rZ   zOtelSpanProcessor._on_endingÜ   s'   € ä�4—?‘? LÔ1Ø�O‰O×&Ñ& tÕ,ð 2r   c                 ó8   — | j                   j                  «        y)zShutdown processor.N)rG   Úshutdown©r   s    r   r]   zOtelSpanProcessor.shutdowná   s   € à�‰× Ñ Õ"r   c                 ó8   — | j                   j                  |«      S )z Force flush the inner processor.)rG   Úforce_flush)r   Útimeout_milliss     r   r`   zOtelSpanProcessor.force_flushå   s   € à�‰×*Ñ*¨>Ó:Ð:r   c                 ó   — | j                   S )zThe underlying OtelExporter.)rE   r^   s    r   ÚexporterzOtelSpanProcessor.exporteré   s   € ð �~‰~Ðr   c                 ó   — | j                   S )zThe underlying span processor.)rG   r^   s    r   Ú	processorzOtelSpanProcessor.processorî   s   € ð �‰Ðr   )NNNNN)N)i0u  )r   r   r   r   r   r=   r>   Útyper   r   rN   rQ   rW   rZ   r]   r`   Úpropertyrc   re   r   r   r   rA   rA      sÇ   „ ñð> "&Ø!%Ø!Ø,0Ø(,ñ),à˜#‘ð),ð ˜#‘ð),ð �c‰]ð	),ð
 ˜$˜s C˜x™.Ñ)ð),ð   ‘~ó),ðV) T¨#¨s¨(¡^ð )¸ó )ó7ò%ò-ò
#ó;ð ñó ðð ñó ñr   rA   )r   r7   ÚwarningsÚtypingr   r   Úurllib.parser   Ú	langsmithr   r1   Ú"langsmith.integrations.otel._utilsr   Ú5opentelemetry.exporter.otlp.proto.http.trace_exporterr   Úopentelemetry.sdk.trace.exportr	   rF   r   ÚwarnÚUserWarningr#   r(   rA   r   r   r   Ú<module>rq      sš   ðÙ >ã Û ß  Ý  å 'Ý Oð0ÝVÝAà€Nô^>PÐ#ô >P÷Brò røð_ ò +Ø€H‡M�Mð	&ð 	Øõ÷	ñ 	÷	ñ 	÷
ñ 
ð ‚NðW+ús   ¦A
 Á
:BÂB