
    jKj                     r    d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZ dd	lmZmZ  G d
 de      Zy)zPostHog trace exporter for OpenTelemetry.

Provides a SpanExporter that filters AI-related spans before forwarding them
to PostHog's OTLP endpoint. Use this when your setup only accepts a
SpanExporter (e.g. as an argument to BatchSpanProcessor).
    )OptionalSequence)ReadableSpan)SpanExporterSpanExportResult)OTLPSpanExporter   )*warn_if_posthog_ai_gateway_otel_attributes   )DEFAULT_HOST
is_ai_spanc                   Z    e Zd ZdZefdedefdZdee   de	fdZ
dd	Zdd
ee   defdZy)PostHogTraceExporteraf  Span exporter that filters AI spans and forwards them to PostHog.

    Wraps an OTLPSpanExporter configured for PostHog's OTLP endpoint. Spans
    that are not AI-related are silently dropped, returning SUCCESS immediately.

    Usage::

        from opentelemetry.sdk.trace import TracerProvider
        from opentelemetry.sdk.trace.export import BatchSpanProcessor
        from posthog.ai.otel import PostHogTraceExporter

        provider = TracerProvider()
        provider.add_span_processor(
            BatchSpanProcessor(
                PostHogTraceExporter(api_key="phc_...")
            )
        )
    api_keyhostc                     || _         |j                  d      | _        t        | j                   ddd| j                    i      | _        y)z
        Args:
            api_key: PostHog project API key.
            host: PostHog host URL. Defaults to US cloud.
        /z/i/v0/ai/otelAuthorizationzBearer )endpointheadersN)_api_keyrstrip_hostr   	_exporter)selfr   r   s      i/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/ai/otel/exporter.py__init__zPostHogTraceExporter.__init__&   sH      [[%
)

|=1$&?@
    spansreturnc                     |D cg c]  }t        |      s| }}|st        j                  S |D ]  }t        |j                          | j
                  j                  |      S c c}w )z
        Export AI-related spans to PostHog and drop non-AI spans.

        Args:
            spans: Readable OpenTelemetry spans to filter and export.

        Returns:
            The OpenTelemetry export result.
        )r   r   SUCCESSr
   
attributesr   export)r   r   spanai_spanss       r   r$   zPostHogTraceExporter.export8   s_     &+?UTj.>DU?#+++D6tG ~~$$X.. @s
   A%A%Nc                 8    | j                   j                          y)z'Shut down the underlying OTLP exporter.N)r   shutdown)r   s    r   r(   zPostHogTraceExporter.shutdownI   s    !r   timeout_millisc                 p    || j                   j                  |      S | j                   j                         S )z
        Flush pending spans from the underlying OTLP exporter.

        Args:
            timeout_millis: Optional flush timeout in milliseconds.

        Returns:
            True if the flush succeeded within the timeout, False otherwise.
        )r   force_flush)r   r)   s     r   r+   z PostHogTraceExporter.force_flushM   s2     %>>--n==~~))++r   )r    N)N)__name__
__module____qualname____doc__r   strr   r   r   r   r$   r(   r   intboolr+    r   r   r   r      sX    , !

 
$/H\2 /7G /"",(3- ,4 ,r   r   N)r/   typingr   r   opentelemetry.sdk.tracer   opentelemetry.sdk.trace.exportr   r   5opentelemetry.exporter.otlp.proto.http.trace_exporterr   gatewayr
   r   r   r   r   r3   r   r   <module>r9      s,    & 0 I R @ +G,< G,r   