§
    ~Štj³   ã                   ó2  — 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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)Ú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dS )r   zMock otlp span exporter class.c                 ó    — t          d¦  «        ‚©zMock init method.r
   ©ÚImportError©ÚselfÚargsÚkwargss      úc/var/www/html/CA-Chatbot/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_provider2   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_urlr0   Úexporter_headersÚ	__class__s
            €r   r   zOtelExporter.__init__H   s   ø€ õ& Ô'¨Ñ-Ô-ˆà× Ò  Ñ%Ô%ð 	Ø˜‰OˆHØÐ=�' (Ð,<Ñ=Ô=ˆØÐ7�XÔ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ð4Pð 4Pà�cŒ]ð4Pð ˜#”ð4Pð ˜#”ð	4Pð
 ˜$˜s C˜xœ.Ô)ð4Pð 4Pð 4Pð 4Pð 4Pð 4Pð 4Pð 4Pð 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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        ¦  «        | _        i | _        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Ú	_metadata)r   r*   r+   r)   r,   rB   Úexporter_urls          r   r   zOtelSpanProcessor.__init__�   s”   € ð* ˆØð 	?Ø!Ÿjšj¨™oœoÐ>Ð>Ð>ˆLå%Ø g°wÈð
ñ 
ô 
ˆŒõ
 ð 	Ýð.ñô ð ð Ð Ý.ˆMà'˜-¨¬Ñ7Ô7ˆŒØ)+ˆŒˆˆr   ÚmetadataÚreturnc                 ó8   — |                      ¦   «         | _        dS )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         r0| j                              ¦   «         D ]\  }}t          |||¦  «         Œ| j                             ||¦  «         dS )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Ñ   sc   € àŒ>ð 	CØ"œn×2Ò2Ñ4Ô4ð Cð C‘
��UÝ0°°s¸EÑBÔBÐBÐBØŒ× Ò   ~Ñ6Ô6Ð6Ð6Ð6r   c                 ó:   — | j                              |¦  «         dS )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                             |¦  «         dS dS )z2Forward span ending events to the inner processor.Ú
_on_endingN)ÚhasattrrG   rZ   rX   s     r   rZ   zOtelSpanProcessor._on_endingÜ   s<   € å�4”? LÑ1Ô1ð 	-ØŒO×&Ò& tÑ,Ô,Ð,Ð,Ð,ð	-ð 	-r   c                 ó8   — | j                              ¦   «          dS )zShutdown processor.N)rG   Úshutdown©r   s    r   r]   zOtelSpanProcessor.shutdowná   s   € àŒ× Ò Ñ"Ô"Ð"Ð"Ð"r   é0u  c                 ó6   — | j                              |¦  «        S )z Force flush the inner processor.)rG   Úforce_flush)r   Útimeout_milliss     r   ra   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)r_   )r   r   r   r   r   r=   r>   Útyper   r   rN   rQ   rW   rZ   r]   ra   Úpropertyrd   rf   r   r   r   rA   rA      sK  € € € € € ðð ð> "&Ø!%Ø!Ø,0Ø(,ð),ð ),à˜#”ð),ð ˜#”ð),ð �cŒ]ð	),ð
 ˜$˜s C˜xœ.Ô)ð),ð   ”~ð),ð ),ð ),ð ),ðV) T¨#¨s¨(¤^ð )¸ð )ð )ð )ð )ð7ð 7ð 7ð 7ð%ð %ð %ð-ð -ð -ð
#ð #ð #ð;ð ;ð ;ð ;ð ðð ñ „Xðð ðð ñ „Xðð ð 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>rr      sÓ  ðØ >Ð >à €€€Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø OÐ OÐ OÐ OÐ OÐ Oð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ðBrð rð rð rð rñ rô rð rð rð rs   ¦5 µAA9Á8A9