
    	h              	           d Z ddlZddlmZmZ ddlmZ ddlm	Z	m
Z
  ej        e          Zg dZ	 	 	 ddee         d	ee         d
ee         defdZdS )z(OpenTelemetry integration for LangSmith.    N)Optionalcast)utils   )OtelExporterOtelSpanProcessor)	configurer   r   api_keyproject_nameSpanProcessorreturnc                    	 ddl m} ddlm} ddlm}m}m} t          ||	                                          }|
                    t                    }	t          ||          rSt          |	d          rCt          t          ||	          j        |          r  |            }
|                    |
           nt                               d           dS | pt%          j        d          } | sdS |pt%          j                    }t+          | ||	          }|
                    |           d
S # t.          $ r&}t                               d|           Y d}~dS d}~ww xY w)a-  Configure OpenTelemetry with LangSmith as the TracerProvider.

    Initializes OpenTelemetry with LangSmith as the primary and only TracerProvider.

    Usage:
        >>> from langsmith.integrations.otel import configure
        >>> configure(  # doctest: +SKIP
        ...     api_key="your-api-key", project_name="your-project"
        ... )

        Using environment variables:
        >>> # Set LANGSMITH_API_KEY and LANGSMITH_PROJECT
        >>> configure()  # Will use env vars  # doctest: +SKIP

    WARNING: This function is only for when LangSmith is your ONLY OpenTelemetry source.
    It sets the global TracerProvider, which can only be done once per application.

    This function will fail if OpenTelemetry is already initialized with another
    TracerProvider (you cannot override an existing TracerProvider).

    If you already have OpenTelemetry set up with other tools, use OtelSpanProcessor
    directly to add LangSmith to your existing setup:

    Example for adding LangSmith to existing OTEL setup:
        from opentelemetry import trace
        from langsmith.integrations.otel.processor import OtelSpanProcessor

        # Use your existing provider (already initialized)
        provider = trace.get_tracer_provider()

        # Add LangSmith processor to existing provider
        langsmith_processor = OtelSpanProcessor(
            api_key="your-api-key",
            project="your-project"
        )
        provider.add_span_processor(langsmith_processor)

    Args:
        api_key: LangSmith API key. Defaults to LANGSMITH_API_KEY env var.
        project_name: Project name. Defaults to LANGSMITH_PROJECT env var.
        SpanProcessor: Span processor class to use. Defaults to BatchSpanProcessor.

    Returns:
        True if configuration succeeded, False if TracerProvider already exists.
    r   )trace)TracerProvider)
NoOpTracerProxyTracerProxyTracerProvider_tracerzOpenTelemetry TracerProvider is already set. Cannot override existing TracerProvider. Use OtelSpanProcessor directly to add LangSmith to your existing provider instead.FN)r
   projectr   Tz(Failed to initialize Otel for LangSmith:)opentelemetryr   opentelemetry.sdk.tracer   opentelemetry.tracer   r   r   r   get_tracer_provider
get_tracer__name__
isinstancehasattrr   set_tracer_providerloggerwarningls_utilsget_api_keyget_tracer_projectr   add_span_processor	Exception)r
   r   r   r   r   r   r   r   existing_providertracerprovider	processores                q/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/langsmith/integrations/otel/__init__.pyr	   r	      s   d-''''''::::::TTTTTTTTTT 1J1J1L1LMM"--h77
 (*=>>		**	    	 &~''H%%h////NNO  
 57X1$77 	5#Dx'B'D'D%\
 
 
	 	##I...t   A1EEEuuuuus$   CD+ D+ -<D+ +
E5EE)NNN)__doc__loggingtypingr   r   	langsmithr   r!   r)   r   r   	getLoggerr   r   __all__strtypeboolr	        r+   <module>r7      s    . .  ! ! ! ! ! ! ! ! ' ' ' ' ' ' 6 6 6 6 6 6 6 6		8	$	$
<
<
< ""&$(_ _c]_3-_ D>_ 
	_ _ _ _ _ _r6   