
    h'                         d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ erd dlmZ d dlmZ d d	lmZ eZeZeeef   ZneZeZeZd
ZdZ G d d      Zy)    N)TYPE_CHECKINGAnyUnion)quote)verbose_logger)_utils)LangfuseOtelConfigLangfuseSpanAttributes)Span)OpenTelemetryConfig)Protocolz*https://cloud.langfuse.com/api/public/otelz-https://us.cloud.langfuse.com/api/public/otelc                   N    e Zd Zedefd       Zedefd       Zedefd       Zy)LangfuseOtelLoggerspanc                 `    t        j                  | ||       t        j                  | |       y)z
        Sets OpenTelemetry span attributes for Langfuse observability.
        Uses the same attribute setting logic as Arize Phoenix for consistency.
        )r   kwargsN)r   set_attributesr   !_set_langfuse_specific_attributes)r   r   response_objs      g/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/integrations/langfuse/langfuse_otel.pyset_langfuse_otel_attributesz/LangfuseOtelLogger.set_langfuse_otel_attributes$   s6     	dFL9
 	<< 	= 	
 	    c                     ddl m} t        j                  j	                  dd      }|r$ || t
        j                  j                  |       yy)z@
        Sets Langfuse specific attributes to the span.
        r   )safe_set_attributeLANGFUSE_TRACING_ENVIRONMENTN)r   keyvalue)!litellm.integrations.arize._utilsr   osenvirongetr
   LANGFUSE_ENVIRONMENTr   )r   r   r   langfuse_environments       r   r   z4LangfuseOtelLogger._set_langfuse_specific_attributes5   sC    
 	I!zz~~.LdS*??EE*  r   returnc                     t         j                  j                  dd      } t         j                  j                  dd      }| r|st        d      t         j                  j                  dd      }|rC|j	                  d      sd|z   }|j                  d       d	}t        j                  d
|        nt        }t        j                  d|        |  d| }t        j                  |j                               j                         }dt        d|        }|t         j                  d<   |t         j                  d<   t        |d      S )a1  
        Retrieves the Langfuse OpenTelemetry configuration based on environment variables.

        Environment Variables:
            LANGFUSE_PUBLIC_KEY: Required. Langfuse public key for authentication.
            LANGFUSE_SECRET_KEY: Required. Langfuse secret key for authentication.
            LANGFUSE_HOST: Optional. Custom Langfuse host URL. Defaults to US cloud.

        Returns:
            LangfuseOtelConfig: A Pydantic model containing Langfuse OTEL configuration.

        Raises:
            ValueError: If required keys are missing.
        LANGFUSE_PUBLIC_KEYNLANGFUSE_SECRET_KEYz_LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY must be set for Langfuse OpenTelemetry integration.LANGFUSE_HOSThttpzhttps:///z/api/public/otelz(Using Langfuse OTEL endpoint from host: z"Using Langfuse US cloud endpoint: :zAuthorization=zBasic OTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_HEADERS	otlp_http)otlp_auth_headersprotocol)r   r    r!   
ValueError
startswithrstripr   debugLANGFUSE_CLOUD_US_ENDPOINTbase64	b64encodeencodedecoder   r	   )
public_key
secret_keylangfuse_hostendpointauth_stringauth_headerr/   s          r   get_langfuse_otel_configz+LangfuseOtelLogger.get_langfuse_otel_configC   s@     ZZ^^$94@
ZZ^^$94@
q 
 

= ++F3 *] :'..s344DEH  #KH:!VW 2H  #EhZ!PQ $Aj\2&&{'9'9';<CCE,UVK=3I-J,KL 5=

013D

/0!/+
 	
r   N)	__name__
__module____qualname__staticmethodr   r   r   r	   r@    r   r   r   r   #   sR    4       1
&8 1
 1
r   r   )r6   r   typingr   r   r   urllib.parser   litellm._loggingr   litellm.integrations.arizer   (litellm.types.integrations.langfuse_otelr	   r
   opentelemetry.tracer   _Span"litellm.integrations.opentelemetryr   _OpenTelemetryConfig litellm.types.integrations.arizer   	_ProtocolLANGFUSE_CLOUD_EU_ENDPOINTr5   r   rE   r   r   <module>rR      sv     	 , ,  + -
 1 GH.DHD J L R
 R
r   