
    g\                        U d dl Z d dlmZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZ er!d d	lmZ d d
lmZ d dlmZ d dlm Z! eZeZe!Z eZneZeZeZ eZ e jD                  dd      Z# e jD                  dd       e jD                  dd       e jD                  dd      dZ$eeef   e%d<   dZ&dZ'e G d d             Z( G d de      Z)y)    N)	dataclass)datetime)TYPE_CHECKINGAnyDictListOptionalUnion)verbose_logger)CustomLogger)ServiceLoggerPayload)ChatCompletionMessageToolCallFunctionStandardLoggingPayload)SpanExporter)Span) ManagementEndpointLoggingPayload)UserAPIKeyAuthOTEL_TRACER_NAMElitellmOTEL_SERVICE_NAMEOTEL_ENVIRONMENT_NAME
production)zservice.namezdeployment.environmentmodel_idLITELLM_RESOURCEraw_gen_ai_requestlitellm_requestc                   ^    e Zd ZU dZeeef   ed<   dZe	e   ed<   dZ
e	e   ed<   ed        Zy)OpenTelemetryConfigconsoleexporterNendpointheadersc                     ddl m} t        j                  d      dk(  r |  |             S  | t        j                  dd      t        j                  d      t        j                  d      	      S )
z
        OTEL_HEADERS=x-honeycomb-team=B85YgLm9****
        OTEL_EXPORTER="otlp_http"
        OTEL_ENDPOINT="https://api.honeycomb.io/v1/traces"

        OTEL_HEADERS gets sent as headers = {"x-honeycomb-team": "B85YgLm96******"}
        r   )InMemorySpanExporterOTEL_EXPORTER	in_memory)r!   r    OTEL_ENDPOINTOTEL_HEADERS)r!   r"   r#   )6opentelemetry.sdk.trace.export.in_memory_span_exporterr%   osgetenv)clsr%   s     W/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/opentelemetry.pyfrom_envzOpenTelemetryConfig.from_env5   s_    	
 99_%4 4 677YY	:YY/II
 	
    )__name__
__module____qualname__r!   r
   strr   __annotations__r"   r	   r#   classmethodr/    r0   r.   r   r   .   sF     *3HeC%&2"Hhsm"!GXc]!
 
r0   r   c                       e Zd Z	 	 d,dee   dee   f fdZd Zd Zd Z	d Z
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defdZd Zd ZdefdZdeeeeef   fdZedee   de ee!f   fd       Z"dedee!   fdZ#deeeeef   fdZ$ded ed!e!fd"Z%defd#Z&d$ Z'd% Z(d& Z)d' Z*d( Z+	 d/d)e,d
ee   fd*Z-	 d/d)e,d
ee   fd+Z. xZ/S )0OpenTelemetryconfigcallback_namec                 N   ddl m} ddlm} ddlm} ddlm} |t        j                         }|| _
        | j                  j                  | _        | j                  j                  | _        | j                  j                  | _         | |t"                    }|j%                  | j'                                || _        |j+                  |       |j-                  t.              | _        || _        t5        t7        j8                  dd	            j;                         }	|	d
k(  radd l}
|
j?                  |
j@                         |
jC                  tD               |
jC                  d      }|jG                  |
j@                         tI        |   di | | jM                          y )Nr   trace)Resource)TracerProvider)SpanKind)
attributes)resource
DEBUG_OTELFalsetrue)levelzopentelemetry.sdk.trace.exportr7   )'opentelemetryr>   opentelemetry.sdk.resourcesr?   opentelemetry.sdk.tracer@   opentelemetry.tracerA   r   r/   r:   r!   r&   r"   r(   r#   r)   r   add_span_processor_get_span_processorr;   set_tracer_provider
get_tracerLITELLM_TRACER_NAMEtracer	span_kindr4   r+   r,   lowerloggingbasicConfigDEBUG	getLoggerr1   setLevelsuper__init__"_init_otel_logger_on_litellm_proxy)selfr:   r;   kwargsr>   r?   r@   rA   provider_debug_otelrT   otel_exporter_logger	__class__s               r.   rZ   zOpenTelemetry.__init__N   sH    	(8:0>(113F![[11![[11 KK//!8?O+PQ##D$<$<$>?*!!(+&&':;!"))L':;AAC& gmm4h' $+#4#45U#V  ))'--8 	"6"//1r0   c                     ddl m} dt        j                  vrt        j                  j	                  d       t        |d|        y)z
        Initializes OpenTelemetry for litellm proxy server

        - Adds Otel as a service callback
        - Sets `proxy_server.open_telemetry_logger` to self
        r   )proxy_serverotelopen_telemetry_loggerN)litellm.proxyrc   r   service_callbackappendsetattr)r\   rc   s     r.   r[   z0OpenTelemetry._init_otel_logger_on_litellm_proxyz   s8     	/ 111$$++F35t<r0   c                 ,    | j                  ||||       y N_handle_sucessr\   r]   response_obj
start_timeend_times        r.   log_success_eventzOpenTelemetry.log_success_event   s    FL*hGr0   c                 ,    | j                  ||||       y rk   _handle_failurern   s        r.   log_failure_eventzOpenTelemetry.log_failure_event   s    V\:xHr0   c                 4   K   | j                  ||||       y wrk   rl   rn   s        r.   async_log_success_eventz%OpenTelemetry.async_log_success_event   s     FL*hG   c                 4   K   | j                  ||||       y wrk   rt   rn   s        r.   async_log_failure_eventz%OpenTelemetry.async_log_failure_event   s     V\:xHry   payloadparent_otel_spanrp   rq   event_metadatac                   K   ddl m} ddlm}m} d}	d}
t        |t              rt        |dz        }	n| j                  |      }	t        |t              rt        |dz        }
n| j                  |      }
||j                  }| j                  j                  ||j                  |      |	      }| j                  |d|j                         | j                  |d|j                  j                         |rL|j!                         D ]9  \  }}|d	}t        |t"              r	 t%        |      }| j                  |||       ; |j)                   ||j*                               |j-                  |
       y y # t&        $ r d
}Y Xw xY ww)Nr   r=   Status
StatusCode    eAnamecontextrp   	call_typespankeyvalueserviceNonez0litellm logging error - could_not_json_serializerq   )rH   r>   rK   r   r   
isinstancefloatint_to_nsr   rQ   
start_spanset_span_in_contextsafe_set_attributer   r   itemsdictr4   	Exception
set_statusOKend)r\   r|   r}   rp   rq   r~   r>   r   r   _start_time_ns_end_time_ns
_span_nameservice_logging_spanr   r   s                  r.   async_service_success_hookz(OpenTelemetry.async_service_success_hook   s     	(:j%( c!12N![[4Nh&x#~.L;;x0L' J#';;#9#9112BC) $: $ 
 ##)'' $ 
 ##)oo++ $  "0"6"6"8JC} &!%.W$'JE ++1# ,  #9 !++F:==,AB $$l$;C (2  ) W$VEWs+   D!F$E:/AF:FFFFerrorc                 b  K   ddl m} ddlm}m}	 d}
d}t        |t              rt        t        |      dz        }
n| j                  |      }
t        |t              rt        t        |      dz        }n| j                  |      }||j                  }| j                  j                  ||j                  |      |
      }| j                  |d|j                         | j                  |d|j                  j                         |r| j                  |d	|       |rH|j!                         D ]5  \  }}t        |t"              r	 t%        |      }| j                  |||       7 |j)                   ||	j*                               |j-                  |       y y # t&        $ r d
}Y Xw xY ww)Nr   r=   r   r   r   r   r   r   r   z/litllm logging error - could_not_json_serializer   )rH   r>   rK   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r4   r   r   ERRORr   )r\   r|   r   r}   rp   rq   r~   r>   r   r   r   r   r   r   r   r   s                   r.   async_service_failure_hookz(OpenTelemetry.async_service_failure_hook   s     	(:j%( Z3!67N![[4Nh&s8}s23L;;x0L' J#';;#9#9112BC) $: $ 
 ##)'' $ 
 ##)oo++ $ 
 ''- ( 
 "0"6"6"8JC!%.V$'JE ++1# ,  #9 !++F:3C3C,DE $$l$;K (8  ) V$UEVs+   EF/FAF/F,)F/+F,,F/request_dataoriginal_exceptionuser_api_key_dictc                 ,  K   ddl m} ddlm}m} |j
                  }||j                   ||j                               d}| j                  j                  ||j                  |            }	| j                  |	dt        |             |	j                   ||j                               |	j                  | j                  t        j                                       |j                  | j                  t        j                                       y y w)	Nr   r=   r   zFailed Proxy Server Request)r   r   	exceptionr   r   )rH   r>   rK   r   r   r}   r   r   rQ   r   r   r   r4   r   r   r   now)
r\   r   r   r   r>   r   r   r}   r   exception_logging_spans
             r.   async_post_call_failure_hookz*OpenTelemetry.async_post_call_failure_hook  s      	(:,=='''z/?/?(@A6J &*[[%;%;112BC &< &" ##+,- $ 
 #--fZ5E5E.FG"&&HLLN0K&L   $++hlln*E F% (s   DDc                    ddl m} ddlm}m} t        j                  d|| j                         | j                  |      \  }}	| j                  j                  | j                  |      | j                  |      |      }
|
j                   ||j                               | j                  |
||       t         j"                  du rn| j$                  durn| j                  j                  t&        | j                  |      |j)                  |
            }|j                   ||j                               | j+                  |||       |j-                  | j                  |             |
j-                  | j                  |             |	4|	j-                  | j                  t/        j0                                      y y )Nr   r=   r   zAOpenTelemetry Logger: Logging kwargs: %s, OTEL config settings=%sr   rp   r   Tr   )rH   r>   rK   r   r   r   debugr:   _get_span_contextrQ   r   _get_span_namer   r   r   set_attributesr   turn_off_message_loggingmessage_loggingRAW_REQUEST_SPAN_NAMEr   set_raw_request_attributesr   r   r   )r\   r]   ro   rp   rq   r>   r   r   _parent_contextr}   r   raw_request_spans               r.   rm   zOpenTelemetry._handle_sucess/  s   ':OKK	

 -1,B,B6,J)) {{%%$$V,{{:.# & 

 	z}}-.D&,7++t3!!-  ${{55*;;z211$7  6   ''z}}(=>++,<flS  $++h*? @$++h/0'  $++hlln*E F (r0   c                    ddl m}m} t        j                  d|| j
                         | j                  |      \  }}| j                  j                  | j                  |      | j                  |      |      }	|	j                   ||j                               | j                  |	||       |	j                  | j                  |             |4|j                  | j                  t        j                                       y y )Nr   r   zPOpenTelemetry Logger: Failure HandlerLogging kwargs: %s, OTEL config settings=%sr   r   )rK   r   r   r   r   r:   r   rQ   r   r   r   r   r   r   r   r   r   )
r\   r]   ro   rp   rq   r   r   r   r}   r   s
             r.   ru   zOpenTelemetry._handle_failureX  s    :^KK	

 -1,B,B6,J)) {{%%$$V,{{:.# & 

 	z//01D&,7$++h/0'  $++hlln*E F (r0   r   c           
         dd l }ddlm} |sy 	 t        |      D ]  \  }}|j	                  d      }|s|j
                   d| }| j                  || d|j	                  d             | j                  || d|j	                  d	             | j                  || d
|j                  |j	                  d                    y # t        $ r)}	t        j                  dt        |	             Y d }	~	y d }	~	ww xY w)Nr   SpanAttributesfunction.z.namer   r   z.descriptiondescriptionz.parameters
parametersz1OpenTelemetry: Error setting tools attributes: %s)jsonlitellm.proxy._typesr   	enumerategetLLM_REQUEST_FUNCTIONSr   dumpsr   r   r   r4   )
r\   r   toolsr   r   itoolr   prefixes
             r.   set_tools_attributesz"OpenTelemetry.set_tools_attributeso  s   7	$U+488J/*@@A1#F''!(%(",,v. ( 
 ''!(,/",,}5 ( 
 ''!(+.**X\\,%?@ ( ! ,*  	  CSV 		s   B9C	 		C;C66C;returnc                     |yt        |t        t        t        t        f      r|S 	 t        |      S # t
        $ r Y yw xY wz
        Casts the value to a primitive OTEL type if it is not already a primitive type.

        OTEL supports - str, bool, int, float

        If it's not a primitive type, then it's converted to a string
         r   r4   boolr   r   r   r\   r   s     r.   cast_as_primitive_value_typez*OpenTelemetry.cast_as_primitive_value_type  E     =ec4e45L	u: 		   
2 	>>
tool_callsc           	         ddl m} i }t        |       D ]i  \  }}|j                  d      }|st        j
                  j                         }|D ]-  }|j                  |      }|s|||j                   d| d| <   / k |S )Nr   r   r   r   z.function_call.)r   r   r   r   r   r5   keysLLM_COMPLETIONS)	r   r   kv_pairsidx	tool_call	_functionr   r   _values	            r.   _tool_calls_kv_pairz!OpenTelemetry._tool_calls_kv_pair  s     	8#%'
3NC!j1I++002D"s+  )99:!C5PSuU  4 r0   ro   c           
         	 | j                   dk(  rddlm} |j                  |||       y | j                   dk(  rddlm}  |       j                  |||       y ddlm} |j                  di       }|j                  di       xs i }|j                  d	      }	|	t        d
      |	d   }
|
j                         D ](  \  }}| j                  |dj                  |      |       * |j                  d      r-| j                  ||j                  |j                  d             | j                  ||j                  |	d          | j                  ||j                   |j                  dd             |j                  d      r-| j                  ||j"                  |j                  d             |j                  d      r-| j                  ||j$                  |j                  d             |j                  d      r-| j                  ||j&                  |j                  d             | j                  ||j(                  t+        |j                  dd                   |j                  d      r-| j                  ||j,                  |j                  d             |r4|j                  d      r#| j                  |d|j                  d             |r>|j                  d      r-| j                  ||j.                  |j                  d             |xr |j                  d      }|r| j                  ||j0                  |j                  d             | j                  ||j2                  |j                  d             | j                  ||j4                  |j                  d             t6        j8                  du ry | j:                  dury |j                  d      r|d   }| j=                  ||       |j                  d       rt?        |j                  d             D ]  \  }}|j                  d!      r3| j                  ||j@                   d"| d#|j                  d!             |j                  d$      s\tC        |j                  d$      t*              st+        |j                  d$            |d$<   | j                  ||j@                   d"| d%|j                  d$              ||j                  d&      rt?        |j                  d&            D ]  \  }}|j                  d'      r3| j                  ||jD                   d"| d(|j                  d'             |j                  d)      s]|j                  d)      j                  d!      rB| j                  ||jD                   d"| d#|j                  d)      j                  d!             |j                  d)      j                  d$      rtC        |j                  d)      j                  d$      t*              s/t+        |j                  d)      j                  d$            |d)   d$<   | j                  ||jD                   d"| d%|j                  d)      j                  d$             |j                  d)      }|j                  d*      }|stF        jI                  |      }|j                         D ]  \  }}| j                  |||         y y y # tJ        $ r)}tM        jN                  d+t+        |             Y d }~y d }~ww xY w),Narizer   )ArizeLogger	langtrace)LangtraceAttributesr   optional_paramslitellm_paramsstandard_logging_objectz+standard_logging_object not found in kwargsmetadatazmetadata.{}r   modelr   custom_llm_providerUnknown
max_tokenstemperaturetop_pstreamFuseridzgen_ai.response.idusagetotal_tokenscompletion_tokensprompt_tokensTr   messagesroler   z.rolecontentz.contentchoicesfinish_reasonz.finish_reasonmessager   z0OpenTelemetry logging error in set_attributes %s)(r;   litellm.integrations.arize_air   set_arize_ai_attributeslitellm.integrations.langtracer   set_langtrace_attributesr   r   r   
ValueErrorr   r   formatLLM_REQUEST_MODELLLM_REQUEST_TYPE
LLM_SYSTEMLLM_REQUEST_MAX_TOKENSLLM_REQUEST_TEMPERATURELLM_REQUEST_TOP_PLLM_IS_STREAMINGr4   LLM_USERLLM_RESPONSE_MODELLLM_USAGE_TOTAL_TOKENSLLM_USAGE_COMPLETION_TOKENSLLM_USAGE_PROMPT_TOKENSr   r   r   r   r   LLM_PROMPTSr   r   r9   r   r   r   r   )r\   r   r]   ro   r   r   r   r   r   standard_logging_payloadr   r   r   r   r   r   promptchoicer   r   r   r   s                         r.   r   zOpenTelemetry.set_attributes  s&   Q	!!W,E33D&,O##{2N#%>>&, ;$jj):B?O#ZZ(8"=CNIO)J$ (/ !NOO 0
;H&nn.
U''=#7#7#<E (  / zz'"''&88 **W- (  ##"33.{; $  ##"--$(()>	J $  ""<0''&==)--l; (  ""=1''&>>)--m< (  ""7+''&88)--g6 (  ##"33/--h>? $  ""6*''&//)--f5 (   0 0 6''#7|?O?OPT?U ( 
  0 0 9''&99&**73 (  !>\%5%5g%>E''&==))N3 (  ''&BB))$78 (  ''&>>))O4 (  //47##4/""7+'0))$6zz*%#,VZZ
-C#DKCzz&)//!%#1#=#=">auE J"(**V"4 0  zz),)&**Y*?E03FJJy4I0JF9-//!%#1#=#=">auH M"(**Y"7 0  $E& '##I.'01A1A)1L'MV!::o6 33%)'5'E'E&FauN$[&,jj&A 4 
 "::i0%zz)488@ $ 7 7)-+9+I+I*J!C5PU(V*0**Y*?*C*CF*K !8 !"
  &zz)488C'1$*JJy$9$=$=i$H#(" DG(.

9(=(A(A)(LD&F9$5i$@ !% 7 7)-+9+I+I*J!C5PX(Y*0**Y*?*C*CI*N !8 !" '-jj&;G)0\)BJ)+8+L+LZ+X2:..2BJC$($;$;-1,/.3 %< %& 3C? (N / (P  	$$BCF 	sE   (\ -\ M.\ \ B.\ C<\ E\ 
A\ 	]\>>]c                     |yt        |t        t        t        t        f      r|S 	 t        |      S # t
        $ r Y yw xY wr   r   r   s     r.   _cast_as_primitive_value_typez+OpenTelemetry._cast_as_primitive_value_type  r   r   r   r   c                 J    | j                  |      }|j                  ||       y)z_
        Safely sets an attribute on the span, ensuring the value is a primitive type.
        N)r  set_attribute)r\   r   r   r   primitive_values        r.   r   z OpenTelemetry.safe_set_attribute  s$     <<UC30r0   c                    |j                  di        |j                  di       xs i }|j                  dd      }|j                  d      }|j                  di       xs i }|j                  d      }|rBt        |t              r2|j                         D ]  \  }	}
| j	                  |d| d	|	 |

       ! |rZt        |t
              rIdd l}	 |j                  |      }|j                         D ]  \  }	}
| j	                  |d| d	|	 |

       ! y y y # |j                  $ r? t        j                  dj                  |             | j	                  |d| d|
       Y y w xY w)Nr   r   r   r   original_responseadditional_argscomplete_input_dictzllm.r   r   r   zglitellm.integrations.opentelemetry.py::set_raw_request_attributes() - raw_response not json string - {}z.stringified_raw_response)r   r   r   r   r   r4   r   loadsJSONDecodeErrorr   r   r  )r\   r   r]   ro   r   r   _raw_response_additional_argsr  paramvalr   s               r.   r   z(OpenTelemetry.set_raw_request_attributes  s   

$b)$4b9?R,001F	R

#67!::&7<B.223HI :.A4#H1779
s''T*=)>aw#Gs (  : Zs; $

= 9"/"5"5"7JE3++!"#6"7q@! ,  #8 <= '' $$}  E  E% ''233LM' ( s   AD AE"!E"c                 :    t        |j                         dz        S )Nr   )r   	timestamp)r\   dts     r.   r   zOpenTelemetry._to_ns  s    2<<>C'((r0   c                     t         S rk   )LITELLM_REQUEST_SPAN_NAME)r\   r]   s     r.   r   zOpenTelemetry._get_span_name  s    ((r0   c                 |    |y |j                  dd       }|y ddlm}  |       }d|i}|j                  |      }|S )Ntraceparentr   TraceContextTextMapPropagatorcarrier)r   ,opentelemetry.trace.propagation.tracecontextr*  extract)r\   r#   _traceparentr*  
propagatorr,  r   s          r.   get_traceparent_from_headerz)OpenTelemetry.get_traceparent_from_header  sU    ?{{=$7	
 34
 ,/$,,W,=r0   c                 ~   ddl m} ddlm} |j	                  di       xs i }|j	                  di       xs i }|j	                  di       xs i }|j	                  dd       }|j	                  di       xs i }|j	                  d	d       }		 |	|j                  |	      |	fS |y
d|i}
 |       j                  |
      d fS )Nr   r=   r)  r   proxy_server_requestr#   r(  r   litellm_parent_otel_spanNNr+  )rH   r>   r-  r*  r   r   r.  )r\   r]   r>   r*  r   r3  r#   r(  	_metadatar}   r,  s              r.   r   zOpenTelemetry._get_span_context  s    '	
  $4b9?R-112H"MSQS&**9b9?Rkk-6"&&z26<"	$==)CTJ	
 ',,-=>@PPP$k2G02::7:KTQQr0   c                    ddl m} ddlm} ddlm}m}m}m} t        j                  d| j                  | j                  | j                         i }| j                  ?t        | j                  t              r%| j                  j                  d      }|d   |d   i}t        | j                  |      r2t        j                  d| j                          || j                        S | j                  dk(  r-t        j                  d	| j                          | |             S | j                  d
k(  r:t        j                  d| j                          | || j                  |            S | j                  dk(  r:t        j                  d| j                          | || j                  |            S t        j                  d	| j                          | |             S )Nr   )OTLPSpanExporter)BatchSpanProcessorConsoleSpanExporterSimpleSpanProcessorr   zvOpenTelemetry Logger, initializing span processor 
self.OTEL_EXPORTER: %s
self.OTEL_ENDPOINT: %s
self.OTEL_HEADERS: %s=   zDOpenTelemetry: intiializing SpanExporter. Value of OTEL_EXPORTER: %sr    zHOpenTelemetry: intiializing console exporter. Value of OTEL_EXPORTER: %s	otlp_httpzEOpenTelemetry: intiializing http exporter. Value of OTEL_EXPORTER: %s)r"   r#   	otlp_grpczEOpenTelemetry: intiializing grpc exporter. Value of OTEL_EXPORTER: %s)5opentelemetry.exporter.otlp.proto.grpc.trace_exporterr8  5opentelemetry.exporter.otlp.proto.http.trace_exporteropentelemetry.sdk.trace.exportr9  r:  r;  r   r   r   r&   r(   r)   r   r4   split)r\   OTLPSpanExporterGRPCOTLPSpanExporterHTTPr9  r:  r;  r   _split_otel_headerss           r.   rM   z!OpenTelemetry._get_span_processor
  s   	
	
	
 	
 	 H		
 !(Z8I8I3-O"&"3"3"9"9#">#6q#9;Nq;Q"Rd((,7  V"" 't'9'9::*  Z"" &&9&;<<;.  W"" &$!//9L 
 ;.  W"" &$!//9L    Z"" &&9&;<<r0   logging_payloadc                   K   ddl m} ddlm}m} d}d}|j
                  }|j                  }	t        |t              rt        |dz        }n| j                  |      }t        |	t              rt        |	dz        }n| j                  |	      }||j                  }
| j                  j                  |
|j                  |      |      }|j                  }|/|j!                         D ]  \  }}| j#                  |d| |        |j$                  }|/|j!                         D ]  \  }}| j#                  |d| |        |j'                   ||j(                               |j+                  |	       y y w)
Nr   r=   r   r   r   request.r   z	response.r   )rH   r>   rK   r   r   rp   rq   r   r   r   r   routerQ   r   r   r   r   r   responser   r   r   )r\   rG  r}   r>   r   r   r   r   rp   rq   r   management_endpoint_span_request_datar   r   	_responses                   r.   &async_management_endpoint_success_hookz4OpenTelemetry.async_management_endpoint_success_hookK  s     	(:$//
"++j%( c!12N![[4Nh&x#~.L;;x0L'(..J'+{{'='=112BC) (> ($ ,88M("/"5"5"7JC++5&se,# ,  #8 (00I$"+//"3JC++5'u-# ,  #4 %//z}}0EF$((,(?7 (s   E5E7c                   K   ddl m} ddlm}m} d}d}|j
                  }|j                  }	t        |t              rt        t        |      dz        }n| j                  |      }t        |	t              rt        t        |	      dz        }n| j                  |	      }||j                  }
| j                  j                  |
|j                  |      |      }|j                  }|/|j!                         D ]  \  }}| j#                  |d| |        |j$                  }| j#                  |dt'        |             |j)                   ||j*                               |j-                  |	       y y w)
Nr   r=   r   r   r   rI  r   r   r   )rH   r>   rK   r   r   rp   rq   r   r   r   r   rJ  rQ   r   r   r   r   r   r   r4   r   r   r   )r\   rG  r}   r>   r   r   r   r   rp   rq   r   rL  rM  r   r   
_exceptions                   r.   &async_management_endpoint_failure_hookz4OpenTelemetry.async_management_endpoint_failure_hook  so     	(:$//
"++j%( Z3!67N![[4Nh&s8}s23L;;x0L'(..J'+{{'='=112BC) (> ($ ,88M("/"5"5"7JC++5&se,# ,  #8 )22J##-*o $ 
 %//z7G7G0HI$((,(?1 (s   E3E5r5  )NNNN)r   NNNNrk   )0r1   r2   r3   r	   r   r4   rZ   r[   rr   rv   rx   r{   r   r   r
   r   r   r   r   r   r   r   r   rm   ru   r   r   r   r   staticmethodr   r   r   r   r   r   r  r   r   r   r   r1  r   rM   r   rO  rR  __classcell__)ra   s   @r.   r9   r9   M   sv    15'+*2,-*2  }*2X=HIHI ,07;59)-:<%:< #4.:< U8U?34	:<
 5512:< !:<~  "+/7;59)-?<%?< }?< #4.	?<
 U8U?34?< 512?< !?<BGG &G *	G<'GRG." "HU3c5;P5Q " 67	c3h *TT08TleCsE<Q6R "1t 1# 1c 1.t .`))"R6?=H ,04@94@ #4.4@r ,01@91@ #4.1@r0   r9   )*r+   dataclassesr   r   typingr   r   r   r   r	   r
   r   litellm._loggingr   "litellm.integrations.custom_loggerr   litellm.types.servicesr   litellm.types.utilsr   r   r   rB  r   _SpanExporterrK   r   _Spanr   r   !_ManagementEndpointLoggingPayloadlitellm.proxy.proxy_serverr   _UserAPIKeyAuthr,   rP   r   r5   r   r&  r   r9   r7   r0   r.   <module>r`     s   	 !  B B  + ; 7  L1 MD L$N'H$DLN'*$  bii 2I> BII19='bii(?N		-y9$ $sCx. 
 - -  
 
 
<e@L e@r0   