
    a
i                     "   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)BatchSpanProcessorTwOpenTelemetry 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:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\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__G   s    & '--  %% 	OH='(,<==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4P 4Pc]4P #4P #	4P
 $sCx.)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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                  | _        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    *  	?!jjoo>>>L%gw
 
 

  	.    .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                 h    t          | j        d          r| j                            |           dS dS )z2Forward span ending events to the inner processor.
_on_endingN)hasattrrE   rO   rM   s     r   rO   zOtelSpanProcessor._on_ending   s<    4?L11 	-O&&t,,,,,	- 	-r   c                 8    | j                                          dS )zShutdown processor.N)rE   shutdownr   s    r   rR   zOtelSpanProcessor.shutdown   s      """""r   0u  c                 6    | j                             |          S )z Force flush the inner processor.)rE   force_flush)r   timeout_milliss     r   rV   zOtelSpanProcessor.force_flush   s    **>:::r   c                     | j         S )zThe underlying OtelExporter.)rC   rS   s    r   exporterzOtelSpanProcessor.exporter   s     ~r   c                     | j         S )zThe underlying span processor.)rE   rS   s    r   	processorzOtelSpanProcessor.processor   s     r   )NNNNN)N)rT   )r   r   r   r   r   r;   r<   typer   rH   rL   rO   rR   rV   propertyrY   r[   r   r   r   r?   r?   ~   s!        > "&!%!,0(,(8 (8#(8 #(8 c]	(8
 $sCx.)(8  ~(8 (8 (8 (8T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>rf      s   > >                     ' ' ' ' ' '0VVVVVVAAAAAANN + + +HM	& 	   	 	 	 	 	 	 	 		 	 	 	 	 	 	 	
 
 
 
 
 
 
 
 NNNW+\>P >P >P >P >P# >P >P >PBe e e e e e e e e es   - AA10A1