Ë
    tPêj§J  ã                   ób  — U d dl Z d dlZd dlm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 er=d dlmZ d d	l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  e ZeZeez  ZeZe!e"d<   neZeZeZeZeZeZeZ	 d dlm#Z#mZ dZ%ee"d<   dZ&ee"d<    G d„ de«      Z'y# e$$ r dZ#dZY Œ%w xY w)é    N)ÚOrderedDict)ÚTYPE_CHECKINGÚAnyÚFinal)Úverbose_logger)Ú_utils)ÚArizeOTELAttributes)ÚArizePhoenixConfig©ÚTracerProvider)ÚSpanProcessor)ÚSpan)ÚSpanKindÚTracer)ÚOpenTelemetry)ÚOpenTelemetryConfig)ÚProtocolÚLITELLM_TRACER_NAME)r   r   Úlitellmz https://otlp.arize.com/v1/tracesÚARIZE_HOSTED_PHOENIX_ENDPOINTé@   Ú_MAX_PROJECT_PROVIDERSc            
       óª  — e Zd ZdZd„ Zd$d„Zdefd„Zdedefd„Z	dede
fd	„Zd
edeee
f   fd„Zd
ede
fd„Zd„ Zdededz  fd„Zedefd„«       Zededz  dedz  fd„«       Zed
efd„«       Zed
edefd„«       Zedededededz  fd„«       Zed
edededz  fd„«       Zed
edefd„«       Zd%de
dz  fd„Zd„ Zd„ Zd efd!„Z ede!fd"„«       Z"d#„ Z#y)&ÚArizePhoenixLoggera+  
    Arize Phoenix logger that sends traces to a Phoenix endpoint.

    Creates its own dedicated TracerProvider so it can coexist with the
    generic ``otel`` callback (or any other OTEL-based integration) without
    fighting over the global ``opentelemetry.trace`` TracerProvider singleton.
    c                 óØ  — ddl m} |�0d| _        d| _        |j	                  t
        «      | _        || _        yd| _        t        «       | _	        t        j                  «       | _        | j                  «       | _        || _        | j                  i «      }| j                  |«      | _        t!        j"                  d|| j$                  j&                  | j$                  j(                  «       y)ar  
        Override to create per-project TracerProviders (LRU-cached) for Arize Phoenix.

        The base ``OpenTelemetry._init_tracing`` falls back to the global
        TracerProvider when one already exists.  That causes whichever
        integration initialises second to silently reuse the first one's
        exporter, so spans only reach one destination.
        r   )r   NTFzoArizePhoenixLogger: Initialized per-project TracerProvider cache (default_project=%s, endpoint=%s, exporter=%s))Úopentelemetry.tracer   Ú_use_injected_tracer_providerÚ_shared_span_processorÚ
get_tracerr   ÚtracerÚ	span_kindr   Ú_project_providersÚ	threadingÚLockÚ_project_providers_lockÚ_get_span_processorÚ_resolve_project_nameÚ_get_tracer_forr   ÚdebugÚconfigÚendpointÚexporter)ÚselfÚtracer_providerr   Údefault_projects       úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/arize/arize_phoenix.pyÚ_init_tracingz ArizePhoenixLogger._init_tracing;   sÅ   € õ 	1àÐ&Ø15ˆDÔ.Ø*.ˆDÔ'Ø)×4Ñ4Ô5HÓIˆDŒKØ%ˆDŒNØà-2ˆÔ*ÜDOÃMˆÔÜ'0§~¡~Ó'7ˆÔ$Ø&*×&>Ñ&>Ó&@ˆÔ#Ø!ˆŒà!%×!;Ñ!;¸BÓ!?ˆØ×*Ñ*¨?Ó;ˆŒÜ×Ñð=àØ�K‰K× Ñ Ø�K‰K× Ñ õ	
ó    ÚreturnNc                 óð  — t        | dd«      ryt        | dd«      }|�	 |j                  «        t        | dt        j                  «       «      5  t        t        | di «      j                  «       «      }ddd«       D ]  }	 |j                  «        Œ y# t        $ r }t        j                  d|«       Y d}~Œ‰d}~ww xY w# 1 sw Y   ŒNxY w# t        $ r }t        j                  d|«       Y d}~Œsd}~ww xY w)	uà   
        Flush all cached per-project providers and the shared span processor.

        Call on graceful proxy shutdown. Do not call on LRU eviction â€” in-flight
        spans may still reference evicted providers.
        r   FNr   z@ArizePhoenixLogger: shared span processor force_flush failed: %sr%   r"   z9ArizePhoenixLogger: TracerProvider force_flush failed: %s)	ÚgetattrÚforce_flushÚ	Exceptionr   r)   r#   r$   ÚlistÚvalues)r-   Úshared_processorÚeÚ	providersÚproviders        r0   Úflush_tracer_providersz)ArizePhoenixLogger.flush_tracer_providers]   sÿ   € ô �4Ð8¸%Ô@Øä")¨$Ð0HÈ$Ó"OÐØÐ'ðØ ×,Ñ,Ô.ô �TÐ4´i·n±nÓ6FÓGñ 	VÜ#¤G¨DÐ2FÈÓ$K×$RÑ$RÓ$TÓUˆI÷	Vð "ò 	eˆHðeØ×$Ñ$Õ&ñ	eøô ò Ü×$Ñ$ØVØ÷ñ ûðú÷	Vð 	Vûô ò eÜ×$Ñ$Ð%`Ðbc×dÑdûðeús;   ŸB Á%C ÂCÂ	B=ÂB8Â8B=Ã C	Ã	C5ÃC0Ã0C5Úproject_namec                 óÈ   — ddl m}m} |||dœ}t        | j                  dd«      }|�||d<    |«       j                  «       }|j                  |«      }|j                  |«      S )aF  
        Build an OTEL Resource with project routing attrs that win over env detector.

        Phoenix uses ``openinference.project.name``; Arize AX uses ``model_id`` and
        ``service.name``. Project attrs are merged last so OTEL_RESOURCE_ATTRIBUTES
        from init does not pin every provider to one project.
        r   )ÚOTELResourceDetectorÚResource)zopeninference.project.nameÚmodel_idzservice.nameÚdeployment_environmentNzdeployment.environment)Úopentelemetry.sdk.resourcesrA   rB   r5   r*   ÚdetectÚcreateÚmerge)r-   r?   rA   rB   Úproject_attributesrD   Úenv_resourceÚproject_resources           r0   Ú!_get_litellm_resource_for_projectz4ArizePhoenixLogger._get_litellm_resource_for_projectz   sw   € ÷ 	Oð +7Ø$Ø(ñ5
Ðô
 )0°·±Ð=UÐW[Ó(\ÐØ!Ð-Ø;QÐÐ7Ñ8á2Ó4×;Ñ;Ó=ˆØ"*§/¡/Ð2DÓ"EÐØ×!Ñ!Ð"2Ó3Ð3r2   c                 óx   — ddl m}  || j                  |«      ¬«      }|j                  | j                  «       |S )zHCreate a TracerProvider for *project_name* (caller holds no cache lock).r   r   )Úresource)Úopentelemetry.sdk.tracer   rL   Úadd_span_processorr   )r-   r?   r   r=   s       r0   Ú"_build_tracer_provider_for_projectz5ArizePhoenixLogger._build_tracer_provider_for_project‘   s4   € å:á(°$×2XÑ2XÐYeÓ2fÔgˆØ×#Ñ# D×$?Ñ$?Ô@Øˆr2   c                 óæ  — t        | dd«      r| j                  S | j                  5  || j                  v rF| j                  j	                  |«       | j                  |   j                  t        «      cddd«       S 	 ddd«       | j                  |«      }| j                  5  || j                  v rF| j                  j	                  |«       | j                  |   j                  t        «      cddd«       S t        | j                  «      t        k\  r| j                  j                  d¬«       || j                  |<   |j                  t        «      cddd«       S # 1 sw Y   ŒàxY w# 1 sw Y   yxY w)zHReturn a tracer for *project_name*, creating/caching a provider on miss.r   FN)Úlast)r5   r    r%   r"   Úmove_to_endr   r   rQ   Úlenr   Úpopitem)r-   r?   Únew_providers      r0   r(   z"ArizePhoenixLogger._get_tracer_for™   sT  € ä�4Ð8¸%Ô@Ø—;‘;Ðà×)Ñ)ñ 	]Ø˜t×6Ñ6Ñ6Ø×'Ñ'×3Ñ3°LÔAØ×.Ñ.¨|Ñ<×GÑGÔH[Ó\÷	]ñ 	]Ø6÷	]ð #×EÑEÀlÓSˆà×)Ñ)ñ 		@Ø˜t×6Ñ6Ñ6Ø×'Ñ'×3Ñ3°LÔAØ×.Ñ.¨|Ñ<×GÑGÔH[Ó\÷		@ñ 		@ô
 �4×*Ñ*Ó+Ô/EÒEØ×'Ñ'×/Ñ/°UÐ/Ô;à4@ˆD×#Ñ# LÑ1Ø×*Ñ*Ô+>Ó?÷		@ñ 		@÷	]ð 	]ú÷		@ð 		@ús    ¦AEÂ!AE'Ã6AE'ÅE$Å'E0Úkwargsc                 óJ   — | j                  |«      }|| j                  |«      fS )z9Resolve project name once and return the matching tracer.)r'   r(   )r-   rX   r?   s      r0   Ú_resolve_tracer_for_kwargsz-ArizePhoenixLogger._resolve_tracer_for_kwargs²   s(   € à"×8Ñ8¸Ó@ˆØ˜T×1Ñ1°,Ó?Ð?Ð?r2   c                 ó\   — t        | dd«      r| j                  S | j                  |«      d   S )zPRoute guardrail/raw-request spans to the same per-project tracer as the request.r   Fé   )r5   r    rZ   )r-   rX   s     r0   Úget_tracer_to_use_for_requestz0ArizePhoenixLogger.get_tracer_to_use_for_request·   s/   € ä�4Ð8¸%Ô@Ø—;‘;ÐØ×.Ñ.¨vÓ6°qÑ9Ð9r2   c                  ó   — y)zÛ
        Override: Arize Phoenix should NOT overwrite the proxy's
        ``open_telemetry_logger``.  That attribute is reserved for the
        primary ``otel`` callback which handles proxy-level parent spans.
        N© )r-   s    r0   Ú"_init_otel_logger_on_litellm_proxyz5ArizePhoenixLogger._init_otel_logger_on_litellm_proxy½   s   � r2   ÚspanÚresponse_objc                 ó2   — t         j                  |||«       y ©N)r   Úset_arize_phoenix_attributes)r-   ra   rX   rb   s       r0   Úset_attributesz!ArizePhoenixLogger.set_attributesÄ   s   € Ü×7Ñ7¸¸fÀlÕSr2   c                 ó<   — t        j                  | ||t        «       y rd   )r   rf   r	   )ra   rX   rb   s      r0   re   z/ArizePhoenixLogger.set_arize_phoenix_attributesÇ   s   € ä×Ñ˜d F¨LÔ:MÕNr2   Únamec                 óF   — | €y t        | «      j                  «       }|r|S d S rd   )ÚstrÚstrip)rh   Ú
normalizeds     r0   Ú_normalize_project_namez*ArizePhoenixLogger._normalize_project_nameË   s'   € àˆ<ØÜ ›IŸO™OÓ-ˆ
Ù'ˆzÐ1¨TÐ1r2   c              #   óª   K  — dD ]J  }| j                  |«      }t        |t        «      sŒ%|j                  d«      }t        |t        «      sŒG|–— ŒL y­w)zLYield request metadata dicts; standard_logging_object before litellm_params.)Ústandard_logging_objectÚlitellm_paramsÚmetadataN)ÚgetÚ
isinstanceÚdict)rX   ÚkeyÚ	found_keyrq   s       r0   Ú _iter_metadata_dicts_from_kwargsz3ArizePhoenixLogger._iter_metadata_dicts_from_kwargsÒ   sO   è ø€ ð Aò 	ˆCØŸ
™
 3›ˆIÜ˜i¬Ô.ØØ —}‘} ZÓ0ˆHÜ˜(¤DÕ)Ø“ñ	ùs   ‚A	AÁAc                 ó|   — | j                  d«      }t        |t        «      xr t        |j                  d«      «      S )aÅ  True when the call is routed through the LiteLLM proxy.

        Proxy mode is determined solely by the server-set ``proxy_server_request``
        field in ``litellm_params``.  Checking request metadata for
        ``user_api_key_auth_metadata`` is intentionally avoided: that field is
        user-supplied and would let an authenticated caller fake proxy-mode
        detection to route their telemetry into arbitrary Arize/Phoenix projects.
        rp   Úproxy_server_request)rr   rs   rt   Úbool)rX   rp   s     r0   Ú_is_proxy_requestz$ArizePhoenixLogger._is_proxy_requestÝ   s6   € ð !'§
¡
Ð+;Ó <ˆÜ˜.¬$Ó/Òd´D¸×9KÑ9KÐLbÓ9cÓ4dÐdr2   rq   Úmetadata_keyÚ
proxy_modec                óâ   — | j                  d«      }t        |t        «      r(t        j	                  |j                  |«      «      }|r|S |s$t        j	                  | j                  |«      «      S y)zÿ
        Read a Phoenix project field from proxy/SDK metadata.

        On the proxy, only ``user_api_key_auth_metadata`` (team/key config) may
        select the project. SDK callers may still set project fields directly on
        ``metadata``.
        Úuser_api_key_auth_metadataN)rr   rs   rt   r   rm   )rq   r|   r}   Úauth_metadataÚprojects        r0   Ú_project_from_metadata_dictz.ArizePhoenixLogger._project_from_metadata_dictê   sa   € ð  (Ÿ|™|Ð,HÓIˆÜ�m¤TÔ*Ü/×GÑGÈ×HYÑHYÐZfÓHgÓhˆGÙØ�áÜ%×=Ñ=¸h¿l¹lÈ<Ó>XÓYÐYØr2   c                 óž   — t         j                  | «      }t         j                  | «      D ]   }t         j                  |||¬«      }|sŒ|c S  y )N)r}   )r   r{   rw   r‚   )rX   r|   r}   rq   r�   s        r0   Ú_metadata_project_from_kwargsz0ArizePhoenixLogger._metadata_project_from_kwargsý   sQ   € ä.×@Ñ@ÀÓHˆ
Ü*×KÑKÈFÓSò 	ˆHÜ(×DÑDÀXÈ|ÐhrÐDÓsˆGÚØ’ð	ð r2   c                 ó  — t         j                  | d«      }|r|S t         j                  | d«      }|r|S t         j                  t        j                  j                  d«      xs t        j                  j                  d«      «      }|r|S y)aB  
        Resolve the target Phoenix/Arize project for this request.

        Proxy priority: ``user_api_key_auth_metadata.phoenix_project_name_override``,
        ``user_api_key_auth_metadata.phoenix_project_name``, env, then ``default``.
        SDK priority: request metadata fields, then env, then ``default``.
        Úphoenix_project_name_overrideÚphoenix_project_nameÚPHOENIX_PROJECT_NAMEÚARIZE_PROJECT_NAMEÚdefault)r   r„   rm   ÚosÚenvironrr   )rX   ÚoverrideÚphoenix_nameÚenv_names       r0   r'   z(ArizePhoenixLogger._resolve_project_name  s|   € ô -×JÑJÈ6ÐSrÓsˆÙØˆOä0×NÑNÈvÐWmÓnˆÙØÐä,×DÑDÜ�J‰J�N‰NÐ1Ó2ÒZ´b·j±j·n±nÐEYÓ6Zó
ˆñ ØˆOàr2   r    c                 ó  — ddl m} |€| j                  |«      d   }|j                  di «      xs i }|j                  di «      xs i }|j                  di «      xs i }|j                  d«      r| j	                  |¬	«      nd}t        |«      }|rr|j                  d
|j                  d«      «      }	|j                  d|	�| j                  |	«      nd|| j                  j                  ¬«      }
|j                  |
«      }||
fS |dfS )u¥  
        Build a trace context for Phoenix's dedicated TracerProvider.

        The base ``_get_span_context`` returns parent spans from the global
        TracerProvider (the ``otel`` callback).  Those spans live on a
        *different* TracerProvider, so they won't appear in Phoenix â€” using
        them as parents just creates broken links.

        Instead we:
        1. Honour an incoming ``traceparent`` HTTP header (distributed tracing).
        2. In proxy mode, create our *own* parent span on Phoenix's tracer
           so the hierarchy is visible end-to-end inside Phoenix.
        3. In SDK (non-proxy) mode, just return (None, None) for a root span.
        r   )ÚtraceNr\   rp   ry   ÚheadersÚtraceparent)r’   Ú
start_timeÚapi_call_start_timeÚlitellm_proxy_request)rh   r”   ÚcontextÚkind)Úopentelemetryr‘   rZ   rr   Úget_traceparent_from_headerrz   Ú
start_spanÚ_to_nsr!   ÚSERVERÚset_span_in_context)r-   rX   r    r‘   rp   ry   r’   Útraceparent_ctxÚis_proxy_modeÚstart_time_valÚparent_spanÚctxs               r0   Ú_get_phoenix_contextz'ArizePhoenixLogger._get_phoenix_context  s  € õ 	(àˆ>Ø×4Ñ4°VÓ<¸QÑ?ˆFà &§
¡
Ð+;¸RÓ @Ò FÀBˆØ&4×&8Ñ&8Ð9OÐQSÓ&TÒ&ZÐXZÐØ-×1Ñ1°)¸RÓ@ÒFÀBˆàOVÏ{É{Ð[hÔOi˜$×:Ñ:À7Ð:ÔKÐosˆä#Ð$8Ó9ˆáØ$*§J¡J¨|¸V¿Z¹ZÐH]Ó=^Ó$_ˆNØ!'×!2Ñ!2Ø,Ø;IÐ;U˜DŸK™K¨Ô7Ð[_Ø'Ø—^‘^×*Ñ*ð	 "3ó "ˆKð ×2Ñ2°;Ó?ˆCØ˜Ð#Ð#à Ð$Ð$r2   c                 ó0   — | j                  ||||d¬«       y )NT©Úsuccess©Ú_handle_phoenix_trace©r-   rX   rb   r”   Úend_times        r0   Ú_handle_successz"ArizePhoenixLogger._handle_successH  s   € Ø×"Ñ" 6¨<¸ÀXÐW[Ð"Õ\r2   c                 ó0   — | j                  ||||d¬«       y )NFr¦   r¨   rª   s        r0   Ú_handle_failurez"ArizePhoenixLogger._handle_failureK  s   € Ø×"Ñ" 6¨<¸ÀXÐW\Ð"Õ]r2   r§   c                óš  — ddl m}m} t        j                  d|rdnd|| j
                  «       | j                  |«      \  }}	| j                  ||	¬«      \  }
} ||r|j                  n|j                  «      }|	j                  | j                  |«      | j                  |«      |
¬«      }|j                  |«       | j                  |||«       |s| j                  ||¬«       |r| j!                  |||||«       |j#                  | j                  |«      ¬	«       | j%                  ||
¬
«       |�Z|j                  |«       | j                  |||«       |s| j                  ||¬«       |j#                  | j                  |«      ¬	«       |r?| j'                  ||||«       | j
                  j(                  r| j+                  |||«       y y y )Nr   )ÚStatusÚ
StatusCodez<ArizePhoenixLogger: %s - kwargs: %s, OTEL config settings=%sr§   Úfailure)r    )rh   r”   r—   )ra   rX   )r«   )rX   r—   )r   r°   r±   r   r)   r*   rZ   r¤   ÚOKÚERRORr›   Ú_get_span_namerœ   Ú
set_statusrf   Ú_record_exception_on_spanÚ_maybe_log_raw_requestÚendÚ_create_guardrail_spanÚ_record_metricsÚenable_eventsÚ_emit_semantic_logs)r-   rX   rb   r”   r«   r§   r°   r±   Ú_project_namer    r£   r¢   Ústatusra   s                 r0   r©   z(ArizePhoenixLogger._handle_phoenix_traceN  s±  € ÷ 	;ä×ÑØJÙ ‰I iØØ�K‰Kô		
ð !%× ?Ñ ?ÀÓ GÑˆ�vØ×4Ñ4°VÀFÐ4ÓKÑˆˆ[á±˜zŸ}š}¸Z×=MÑ=MÓNˆà×'Ñ'Ø×$Ñ$ VÓ,Ø—{‘{ :Ó.Øð (ó 
ˆð
 	�‰˜ÔØ×Ñ˜D &¨,Ô7ÙØ×*Ñ*°¸VÐ*ÔDáØ×'Ñ'¨°¸jÈ(ÐTXÔYØ�‰˜$Ÿ+™+ hÓ/ˆÔ0à×#Ñ#¨6¸3Ð#Ô?àÐ"Ø×"Ñ" 6Ô*Ø×Ñ ¨V°\ÔBÙØ×.Ñ.°KÈÐ.ÔOØ�O‰O T§[¡[°Ó%:ˆOÔ;áØ× Ñ  ¨°zÀ8ÔLà�{‰{×(Ò(Ø×(Ñ(¨°¸tÕDð )ð r2   c                  óÆ  — t         j                  j                  dd«      } t         j                  j                  dd«      }|sFt         j                  j                  dd«      }t         j                  j                  dd«      }|xs |}d}d}|rd|j                  d«      sd|v r	d|vr|}d	}n`d
|v r|}d}n:d|vr4|j	                  d«      r|dz   }n|j	                  d«      r|› d�}n|› d�}n|}d}nd}d}t        j                  d|«       d}| �|d	k(  rdnd}|› d| › �}nd
|v rt        d«      ‚t         j                  j                  d«      xs d}t        ||||¬«      S )zl
        Retrieves the Arize Phoenix configuration based on environment variables.
        Returns:
        ÚPHOENIX_API_KEYNÚPHOENIX_COLLECTOR_HTTP_ENDPOINTÚPHOENIX_COLLECTOR_ENDPOINTÚ	otlp_httpzgrpc://z:4317z
/v1/tracesÚ	otlp_grpczapp.phoenix.arize.comz/v1z/tracesú/z	v1/traceszhttp://localhost:6006/v1/traceszMNo PHOENIX_COLLECTOR_ENDPOINT found, using default local Phoenix endpoint: %sÚauthorizationÚAuthorizationz=Bearer zMPHOENIX_API_KEY must be set when using Phoenix Cloud (app.phoenix.arize.com).rˆ   rŠ   )Úotlp_auth_headersÚprotocolr+   r?   )	r‹   rŒ   rr   Ú
startswithÚendswithr   r)   Ú
ValueErrorr
   )	Úapi_keyÚcollector_endpointÚgrpc_endpointÚhttp_endpointr+   rÊ   rÉ   Úauth_header_keyr?   s	            r0   Úget_arize_phoenix_configz+ArizePhoenixLogger.get_arize_phoenix_config‚  s–  € ô Ÿ™Ÿ™Ð(9¸4Ó@ˆäŸZ™ZŸ^™^Ð,MÈtÓTÐá!Ü#%§:¡:§>¡>Ð2NÐPTÓ#UˆMÜ#%§:¡:§>¡>Ð2SÐUYÓ#ZˆMØ!.Ò!?°-ÐàˆØ(ˆáØ!×,Ñ,¨YÔ7ØÐ-Ñ-°,ÐFXÑ2Xà-�Ø&‘à*Ð.@Ñ@Ø1�HØ*‘HØ!Ð);Ñ;Ø)×2Ñ2°5Ô9Ø#5¸	Ñ#A™Ø+×4Ñ4°SÔ9Ø&8Ð%9¸Ð#C™à&8Ð%9¸Ð#D™à1�HØ&‘à8ˆHØ"ˆHÜ× Ñ Ø_Ðaiôð !ÐØÐØ19¸[Ò1H™oÈoˆOØ#2Ð"3°8¸G¸9Ð EÑØ$¨Ñ0ÜÐlÓmÐmä Ÿj™jŸn™nÐ-CÓDÒQÈ	ˆä!Ø/ØØØ%ô	
ð 	
r2   c              ƒ   óV   K  — | j                  «       }|j                  sdddœS dddœS ­w)NÚ	unhealthyz,PHOENIX_API_KEY environment variable not set)r¿   Úerror_messageÚhealthyz1Arize-Phoenix credentials are configured properly)r¿   Úmessage)rÓ   rÉ   )r-   r*   s     r0   Úasync_health_checkz%ArizePhoenixLogger.async_health_check¿  s?   è ø€ Ø×5Ñ5Ó7ˆà×'Ò'à%Ø!Oñð ð  ØJñ
ð 	
ùs   ‚'))r3   Nrd   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r>   rj   rL   r   rQ   r   r(   rt   ÚtuplerZ   r]   r`   r   r   rf   Ústaticmethodre   rm   rw   rz   r{   r‚   r„   r'   r¤   r¬   r®   r©   r
   rÓ   rÙ   r_   r2   r0   r   r   2   sû  „ ñò 
óDeð:4¸có 4ð.¸sð À~ó ð@¨Cð @°Fó @ð2@°ð @¸%ÀÀVÀÑ:Ló @ð
:°Dð :¸Vó :òðT 4ð T¸sÀT¹zó Tð ðO¨4ò Oó ðOð ð2 c¨D¡jð 2°S¸4±Zò 2ó ð2ð ð°ò ó ðð ð
e $ð 
e¨4ò 
eó ð
eð ð¨dð À#ð ÐVZð Ð_bÐeiÑ_iò ó ðð$ ð¨dð À#ð È#ÐPTÉ*ò ó ðð ð dð ¨sò ó ðñ0'%°6¸D±=ó '%òR]ò^ð2Eð ó2Eðh ð:
Ð&8ò :
ó ð:
óx
r2   r   )(r‹   r#   Úcollectionsr   Útypingr   r   r   Úlitellm._loggingr   Úlitellm.integrations.arizer   Ú!litellm.integrations.arize._utilsr	   Ú(litellm.types.integrations.arize_phoenixr
   rO   r   Úopentelemetry.sdk.trace.exportr   r   r   Ú_Spanr   r   Ú"litellm.integrations.opentelemetryr   Ú_OpenTelemetryr   Ú_OpenTelemetryConfigÚ litellm.types.integrations.arizer   Ú	_Protocolrj   Ú__annotations__r   ÚImportErrorr   r   r   r_   r2   r0   ú<module>rï      sÍ   ðÜ 	Û Ý #ß ,Ñ ,å +Ý -Ý AÝ GáÝ6Ý<Ý1ß4åRõõ Gà€HØ.ÐØ�3‰;€DØ"€MØÔà€HØÐØ€DØ€FØ€NØ€HØ€Mð÷	
ð (JÐ ˜uÓ IØ "Ð ˜Ó "ôY
˜õ Y
øð ò Ø'ÐØŠðús   Â B" Â"	B.Â-B.