
    j                         d Z ddlZddlmZ ddlmZ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 dd	lmZ dd
lmZ erddlmZ ddlmZ eZeeef   ZneZeZ G d de      Zy)zO
arize AI is OTEL compatible

this file has Arize ai specific helper functions
    N)datetime)TYPE_CHECKINGAnyOptionalUnion)_utils)ArizeOTELAttributes)OpenTelemetry)ArizeConfig)ServiceLoggerPayload)StandardCallbackDynamicParams)Span)Protocolc                   *   e Zd Zdedee   fdZedefd       Zede	fd       Z
	 	 	 	 dded	ee   d
eeeef      deeeef      dee   f
dZ	 	 	 	 	 ddedee   d	ee   d
eeeef      deeeef      dee   fdZd
edefdZd Zdedee   fdZy)ArizeLoggerspanresponse_objc                 2    t         j                  |||       y N)r   set_arize_attributes)selfr   kwargsr   s       y/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/integrations/arize/arize.pyset_attributeszArizeLogger.set_attributes   s    ((v|D    c                 <    t        j                  | ||t               y r   )r   r   r	   )r   r   r   s      r   r   z ArizeLogger.set_arize_attributes#   s    dFL:MNr   returnc                  D   t         j                  j                  d      } t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }d}d}|rd}|}n|rd}|}nd}d}t        | |||	      S )
z
        Helper function to get Arize configuration.

        Returns:
            ArizeConfig: A Pydantic model containing Arize configuration.

        Raises:
            ValueError: If required environment variables are not set.
        ARIZE_SPACE_KEYARIZE_API_KEYARIZE_ENDPOINTARIZE_HTTP_ENDPOINTN	otlp_grpc	otlp_httpzhttps://otlp.arize.com/v1)	space_keyapi_keyprotocolendpoint)osenvirongetr   )r%   r&   grpc_endpointhttp_endpointr(   r'   s         r   get_arize_configzArizeLogger.get_arize_config(   s     JJNN#45	**..1

'78

'<=("H$H"H$H"H2H	
 	
r   Npayloadparent_otel_span
start_timeend_timeevent_metadatac                    K   ywzaArize is used mainly for LLM I/O tracing, sending router+caching metrics adds bloat to arize logsN )r   r/   r0   r1   r2   r3   s         r   async_service_success_hookz&ArizeLogger.async_service_success_hookM   s      	   errorc                    K   ywr5   r6   )r   r/   r9   r0   r1   r2   r3   s          r   async_service_failure_hookz&ArizeLogger.async_service_failure_hookX   s      	r8   headersc                      y)z_Arize is used mainly for LLM I/O tracing, sending Proxy Server Request adds bloat to arize logsNr6   )r   r1   r<   s      r   )create_litellm_proxy_request_started_spanz5ArizeLogger.create_litellm_proxy_request_started_spand   s     	r   c                    K   	 | j                         }|j                  sdddS |j                  sdddS dddS # t        $ r}ddt	        |       dcY d	}~S d	}~ww xY ww)
z
        Performs a health check for Arize integration.

        Returns:
            dict: Health check result with status and message
        	unhealthyz,ARIZE_SPACE_KEY environment variable not set)statuserror_messagez*ARIZE_API_KEY environment variable not sethealthyz)Arize credentials are configured properly)rA   messagezArize health check failed: N)r.   r%   r&   	Exceptionstr)r   configes      r   async_health_checkzArizeLogger.async_health_checkl   s     	**,F##)%S 
 >>)%Q  $F 
  	%#>s1vh!G 	sC   A" ; A"; A"; A"	AAAA"AA" standard_callback_dynamic_paramsc                     i }|j                  d      r|j                  d      |d<   |j                  d      r|j                  d      |d<   |j                  d      r|j                  d      |d<   |S )z
        Construct dynamic Arize headers from standard callback dynamic params

        This is used for team/key based logging.

        Returns:
            dict: A dictionary of dynamic Arize headers
        arize_space_idzarize-space-idarize_space_keyarize_api_keyr&   )r+   )r   rJ   dynamic_headerss      r   construct_dynamic_otel_headersz*ArizeLogger.construct_dynamic_otel_headers   s      ,//0@A0P0T0T 1O,- ,//0AB0P0T0T!1O,- ,//@)I)M)M*OI& r   )NNNN) NNNN)__name__
__module____qualname__r   r   r   r   staticmethodr   r   r.   r   r   r   floatdictr7   rF   r;   r>   rI   r   rP   r6   r   r   r   r      se   4 x}  4   "
k "
 "
N ,07;59)-	%	 #4.	 U8U?34		
 5512	 !	  "+/7;59)-
%
 }
 #4.	

 U8U?34
 512
 !
 B"0M"	$"r   r   )__doc__r)   r   typingr   r   r   r   litellm.integrations.arizer   !litellm.integrations.arize._utilsr	   "litellm.integrations.opentelemetryr
    litellm.types.integrations.arizer   litellm.types.servicesr   litellm.types.utilsr   opentelemetry.tracer   _Spanr   	_Protocolr   r6   r   r   <module>rc      s^    
  6 6 - A < 8 7 =1FHDHDQ- Qr   