§
    î	Äh  ã                   ó"  — d 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 ddlmZ dZnG# e$ r?  ej        d	ed
¬¦  «          G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdZY nw xY w G d„ de¦  «        Z G d„ d¦  «        ZdS )z8OpenTelemetry span processor and exporter for LangSmith.é    N)ÚOptional)Úurljoin)Úutils)Ú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dS )r   zMock otlp span exporter class.c                 ó    — t          d¦  «        ‚©zMock init method.r   ©ÚImportError©ÚselfÚargsÚkwargss      úr/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/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dS )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dS )ÚtracezMock trace class.c                  ó    — t          d¦  «        ‚)z Mock get tracer provider method.r   r   r   r   r   Úget_tracer_providerztrace.get_tracer_provider1   s   € õ ð.ñô ð r   N)r   r   r   r   Ústaticmethodr#   r   r   r   r!   r!   .   s3   € € € € € ØÐà	ð	ð 	ñ 
Œð	ð 	ð 	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.
    NÚurlÚapi_keyÚprojectÚheadersc                 ó˜  •— t          j        d¦  «        }|                     d¦  «        s|dz  }|pt          |d¦  «        }|pt          j        d¦  «        }|pt          j        ¦   «         }|pi }|st          d¦  «        ‚|sd}t          j        d¦  «         d|i|¥}|r||d<   || _	         t          ¦   «         j        d
||d	œ|¤Ž dS )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_urlr.   Úexporter_headersÚ	__class__s
            €r   r   zOtelExporter.__init__F   s   ø€ õ$ Ô'¨Ñ-Ô-ˆà× Ò  Ñ%Ô%ð 	Ø˜‰OˆHØÐ=' (Ð,<Ñ=Ô=ˆØÐ7XÔ1°$Ñ7Ô7ˆØÐ:XÔ8Ñ:Ô:ˆØ-˜Rˆàð 	Ýð:ñô ð ð
 ð 	ØˆGÝŒLð%ñô ð ð ˜ð
àð
Ðð
 ð 	<Ø4;ÐÐ0Ñ1àˆŒà‰ŒÔÐO (Ð4DÐOÐOÈÐOÐOÐOÐOÐOr   )NNNN)	r   r   r   r   r   ÚstrÚdictr   Ú__classcell__)r:   s   @r   r&   r&   =   s¨   ø€ € € € € ðð ð "Ø!%Ø!%Ø,0ð3Pð 3PàcŒ]ð3Pð ˜#”ð3Pð ˜#”ð	3Pð
 ˜$˜s C˜xœ.Ô)ð3Pð 3Pð 3Pð 3Pð 3Pð 3Pð 3Pð 3Pð 3Pð 3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d	„Z	d
„ Z
d„ Zdd„Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú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|                      d¦  «        › d}t          ||||¬¦  «        | _        t          st	          d¦  «        ‚|€t
          } || j        ¦  «        | _        dS )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)r   r(   r)   r'   r*   r@   Úexporter_urls          r   r   zOtelSpanProcessor.__init__™   s   € ð* ˆØð 	?Ø!Ÿjšj¨™oœoÐ>Ð>Ð>ˆLå%Ø g°wÈð
ñ 
ô 
ˆŒõ
 ð 	Ýð.ñô ð ð Ð Ý.ˆMà'˜-¨¬Ñ7Ô7ˆŒˆˆr   c                 ó<   — | j                              ||¦  «         dS )z1Forward span start events to the inner processor.N)rE   Úon_start)r   ÚspanÚparent_contexts      r   rH   zOtelSpanProcessor.on_startÃ   s    € àŒ× Ò   ~Ñ6Ô6Ð6Ð6Ð6r   c                 ó:   — | j                              |¦  «         dS )z/Forward span end events to the inner processor.N)rE   Úon_end)r   rI   s     r   rL   zOtelSpanProcessor.on_endÇ   s   € àŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   c                 ó8   — | j                              ¦   «          dS )zShutdown processor.N)rE   Úshutdown©r   s    r   rN   zOtelSpanProcessor.shutdownË   s   € àŒ× Ò Ñ"Ô"Ð"Ð"Ð"r   é0u  c                 ó6   — | j                              |¦  «        S )z Force flush the inner processor.)rE   Úforce_flush)r   Útimeout_milliss     r   rR   zOtelSpanProcessor.force_flushÏ   s   € àŒ×*Ò*¨>Ñ:Ô:Ð:r   c                 ó   — | j         S )zThe underlying OtelExporter.)rC   rO   s    r   ÚexporterzOtelSpanProcessor.exporterÓ   s   € ð Œ~Ðr   c                 ó   — | j         S )zThe underlying span processor.)rE   rO   s    r   Ú	processorzOtelSpanProcessor.processorØ   s   € ð ŒÐr   )NNNNN)N)rP   )r   r   r   r   r   r;   r<   Útyper   rH   rL   rN   rR   ÚpropertyrU   rW   r   r   r   r?   r?   |   s  € € € € € ðð ð< "&Ø!%Ø!Ø,0Ø(,ð(8ð (8à˜#”ð(8ð ˜#”ð(8ð cŒ]ð	(8ð
 ˜$˜s C˜xœ.Ô)ð(8ð   ”~ð(8ð (8ð (8ð (8ðT7ð 7ð 7ð 7ð%ð %ð %ð#ð #ð #ð;ð ;ð ;ð ;ð ðð ñ „Xðð ðð ñ „Xðð ð r   r?   )r   r5   ÚwarningsÚtypingr   Úurllib.parser   Ú	langsmithr   r/   Ú5opentelemetry.exporter.otlp.proto.http.trace_exporterr   Úopentelemetry.sdk.trace.exportr   rD   r   ÚwarnÚUserWarningr!   r&   r?   r   r   r   ú<module>rb      s»  ðØ >Ð >à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð0ØVÐVÐVÐVÐVÐVØAÐAÐAÐAÐAÐAà€N€NøØð +ð +ð +Ø€H„Mð	&ð 	Øðñ ô ð ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð €N€N€NðW+øøøð\<Pð <Pð <Pð <Pð <PÐ#ñ <Pô <Pð <Pð~_ð _ð _ð _ð _ñ _ô _ð _ð _ð _s   ž- ­AA1Á0A1