ó
    üÞ j³   ã                   ó  • S r SSKrSSKrSSKJrJ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)Ú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                   ó   • \ 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      Ú_/var/www/html/gaurav/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_provider2   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)Úendpointr5   r   )Úls_utilsÚget_api_urlÚendswithr   Úget_api_keyÚget_tracer_projectÚ
ValueErrorÚloggingÚinfor4   Úsuperr   )
r   r2   r3   r4   r5   r   Úbase_urlr9   Úexporter_headersÚ	__class__s
            €r   r   ÚOtelExporter.__init__H   sá   ø€ ô& ×'Ò'¨Ó-ˆà× Ñ  ×%Ñ%Ø˜‰OˆHØ×=œ' (Ð,<Ó=ˆØ×7œX×1Ò1°$Ó7ˆØ×:œX×8Ò8Ó:ˆØ—-˜RˆæÜð:óð ö
 ØˆGÜ�LŠLð%ôð ˜ð
àð
Ðö
 Ø4;Ð0Ñ1àŒä‰ÒÐO (ÑOÈÓOr   )r4   )NNNN)r   r   r    r!   r"   r   ÚstrÚdictr   r#   Ú__classcell__)rE   s   @r   r0   r0   >   se   ø† ñð "Ø!%Ø!%Ø,0ñ4Pà�c‰]ð4Pð ˜#‘ð4Pð ˜#‘ð	4Pð
 ˜$˜s C˜x™.Ñ)÷4Pö 4Pr   r0   c                   óÎ   • \ rS rSrSr     SS\\   S\\   S\\   S\\\\4      S\\   4
S	 jjr	S
\\\
4   SS4S jrSS jrS 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)
Nr3   r4   r2   r5   Ú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        0 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`.
Nr7   z/otel/v1/traces)r2   r3   r4   r5   r
   )Úrstripr0   Ú	_exporterÚOTEL_AVAILABLEr   r	   Ú
_processorÚ	_metadata)r   r3   r4   r2   r5   rM   Úexporter_urls          r   r   ÚOtelSpanProcessor.__init__�   so   € ð* ˆÞØ!Ÿj™j¨›oÐ.¨oÐ>ˆLä%Ø°wñ
ˆŒ÷
 Š~Üð.óð ð Ñ Ü.ˆMá'¨¯©Ó7ˆŒØ)+ˆ�r   ÚmetadataÚreturnc                 ó.   • UR                  5       U l        g)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)ÚcopyrS   )r   rV   s     r   Úset_metadataÚOtelSpanProcessor.set_metadataÈ   s   € ð "Ÿ™›ˆ�r   c                 óº   • U R                   (       a/  U R                   R                  5        H  u  p4[        XU5        M     U R                  R	                  X5        g)z1Forward span start events to the inner processor.N)rS   Úitemsr   rR   Úon_start)r   ÚspanÚparent_contextÚkeyÚvalues        r   r^   ÚOtelSpanProcessor.on_startÑ   s>   € à�>�>Ø"Ÿn™n×2Ñ2Ö4‘
�Ü0°¸EÖBñ 5à�‰× Ñ  Õ6r   c                 ó:   • U R                   R                  U5        g)z/Forward span end events to the inner processor.N)rR   Úon_end©r   r_   s     r   re   ÚOtelSpanProcessor.on_endØ   s   € à�‰×Ñ˜tÕ$r   c                 ór   • [        U R                  S5      (       a  U R                  R                  U5        gg)z2Forward span ending events to the inner processor.Ú
_on_endingN)ÚhasattrrR   ri   rf   s     r   ri   ÚOtelSpanProcessor._on_endingÜ   s*   € ä�4—?‘? L×1Ñ1Ø�O‰O×&Ñ& tÕ,ð 2r   c                 ó8   • U R                   R                  5         g)zShutdown processor.N)rR   Úshutdown©r   s    r   rm   ÚOtelSpanProcessor.shutdowná   s   € à�‰× Ñ Õ"r   c                 ó8   • U R                   R                  U5      $ )z Force flush the inner processor.)rR   Úforce_flush)r   Útimeout_milliss     r   rq   ÚOtelSpanProcessor.force_flushå   s   € à�‰×*Ñ*¨>Ó:Ð:r   c                 ó   • U R                   $ )zThe underlying OtelExporter.)rP   rn   s    r   ÚexporterÚOtelSpanProcessor.exporteré   s   € ð �~‰~Ðr   c                 ó   • U R                   $ )zThe underlying span processor.)rR   rn   s    r   Ú	processorÚOtelSpanProcessor.processorî   s   € ð �‰Ðr   )rP   rS   rR   )NNNNN)N)i0u  )r   r   r    r!   r"   r   rG   rH   Útyper   r   rZ   r^   re   ri   rm   rq   Úpropertyru   rx   r#   r   r   r   rK   rK      sÇ   † ñð> "&Ø!%Ø!Ø,0Ø(,ñ),à˜#‘ð),ð ˜#‘ð),ð �c‰]ð	),ð
 ˜$˜s C˜x™.Ñ)ð),ð   ‘~õ),ðV) T¨#¨s¨(¡^ð )¸ô )ô7ò%ò-ò
#ô;ð ñó ðð ñó ór   rK   )r"   r@   ÚwarningsÚtypingr   r   Úurllib.parser   Ú	langsmithr   r:   Ú"langsmith.integrations.otel._utilsr   Ú5opentelemetry.exporter.otlp.proto.http.trace_exporterr   Úopentelemetry.sdk.trace.exportr	   rQ   r   ÚwarnÚUserWarningr)   r0   rK   r   r   r   Ú<module>r…      s˜   ðÙ >ã Û ß  Ý  å 'Ý Oð0ÝVÝAà€Nô^>PÐ#ô >P÷Brò røð_ ó +Ø‡M‚Mð	&ð 	Øò÷	ñ 	÷	ñ 	÷
ñ 
ð ‚NðW+ús   ¦A
 Á
8BÂB