
    )h                         S r SSKrSSKrSSKJr  SSKJr  SSKJr	   SSK
Jr  SSKJr  Sr " S S\5      r " S S5      rg! \ a5    \R                   " S	\S
S9   " S S5      r " S S5      r " S S5      rSr NPf = f)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                       \ rS rSrSrS rSrg)r      zMock otlp span exporter class.c                     [        S5      ezMock init method.r   ImportErrorselfargskwargss      U/root/34ku/venv/lib/python3.13/site-packages/langsmith/integrations/otel/processor.py__init__OTLPSpanExporter.__init__       .      N__name__
__module____qualname____firstlineno____doc__r   __static_attributes__r   r   r   r   r      s
    ,	r   r   c                       \ rS rSrSrS rSrg)r   #   z Mock batch span processor class.c                     [        S5      er   r   r   s      r   r   BatchSpanProcessor.__init__&   r   r   r   Nr   r   r   r   r   r   #   s
    .	r   r   c                   (    \ rS rSrSr\S 5       rSrg)trace.   zMock trace class.c                      [        S5      e)z Mock get tracer provider method.r   r   r   r   r   get_tracer_providertrace.get_tracer_provider1   s     . r   r   N)r   r   r   r   r    staticmethodr*   r!   r   r   r   r'   r'   .   s    		 
	r   r'   Fc                   n   ^  \ rS rSrSr    S	S\\   S\\   S\\   S\\\\4      4U 4S jjjrSr	U =r
$ )
OtelExporter=   a  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                   > [         R                  " S5      nUR                  S5      (       d  US-  nU=(       d    [        US5      nU=(       d    [         R                  " S5      nU=(       d    [         R
                  " 5       nU=(       d    0 nU(       d  [        S5      eU(       d  Sn[        R                  " S5        SU0UEnU(       a  X8S'   X0l	        [        T	U ],  " S
XxS	.UD6  g)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)endpointr3   r   )ls_utilsget_api_urlendswithr   get_api_keyget_tracer_project
ValueErrorlogginginfor2   superr   )
r   r0   r1   r2   r3   r   base_urlr7   exporter_headers	__class__s
            r   r   OtelExporter.__init__F   s    $ ''-  %%OH='(,<=7X11$7:X88:-R: 
 GLL% 


 4;01O(OOr   )r2   )NNNN)r   r   r   r   r    r   strdictr   r!   __classcell__)rC   s   @r   r.   r.   =   se     "!%!%,03Pc]3P #3P #	3P
 $sCx.)3P 3Pr   r.   c                       \ rS rSrSr     SS\\   S\\   S\\   S\\\\4      S\\   4
S	 jjr	SS
 jr
S rS rSS jr\S 5       r\S 5       rSrg)OtelSpanProcessor|   a  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)
Nr1   r2   r0   r3   SpanProcessorc                     SnU(       a  UR                  S5       S3n[        XaX$S9U l        [        (       d  [	        S5      eUc  [
        nU" U R                  5      U l        g)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.
Nr5   z/otel/v1/traces)r0   r1   r2   r3   r   )rstripr.   	_exporterOTEL_AVAILABLEr   r   
_processor)r   r1   r2   r0   r3   rK   exporter_urls          r   r   OtelSpanProcessor.__init__   sh    * !jjo.o>L%w

 ~.   .M'7r   c                 :    U R                   R                  X5        g)z1Forward span start events to the inner processor.N)rP   on_start)r   spanparent_contexts      r   rT   OtelSpanProcessor.on_start   s      6r   c                 :    U R                   R                  U5        g)z/Forward span end events to the inner processor.N)rP   on_end)r   rU   s     r   rY   OtelSpanProcessor.on_end   s    t$r   c                 8    U R                   R                  5         g)zShutdown processor.N)rP   shutdownr   s    r   r\   OtelSpanProcessor.shutdown   s      "r   c                 8    U R                   R                  U5      $ )z Force flush the inner processor.)rP   force_flush)r   timeout_milliss     r   r`   OtelSpanProcessor.force_flush   s    **>::r   c                     U R                   $ )zThe underlying OtelExporter.)rN   r]   s    r   exporterOtelSpanProcessor.exporter   s     ~~r   c                     U R                   $ )zThe underlying span processor.)rP   r]   s    r   	processorOtelSpanProcessor.processor   s     r   )rN   rP   )NNNNN)N)i0u  )r   r   r   r   r    r   rE   rF   typer   rT   rY   r\   r`   propertyrd   rg   r!   r   r   r   rI   rI   |   s    < "&!%!,0(,(8#(8 #(8 c]	(8
 $sCx.)(8  ~(8T7%#;    r   rI   )r    r>   warningstypingr   urllib.parser   	langsmithr   r8   5opentelemetry.exporter.otlp.proto.http.trace_exporterr   opentelemetry.sdk.trace.exportr   rO   r   warnUserWarningr'   r.   rI   r   r   r   <module>rs      s    >      '0VAN^<P# <P~_ _[  +MM	& 		 		 	
 
 NW+s   A 8A=<A=