
    g:1                         d dl Z d dlmZmZmZ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mZ d dlmZmZmZmZmZmZ er	d d	lmZ eZneZ G d
 d      Zy)    N)TYPE_CHECKINGAnyListLiteralOptionalTupleUnion)	BaseModel)	DualCache)UserAPIKeyAuth)ArgillaItem)AllMessageValuesChatCompletionRequest)AdapterCompletionStreamWrapperEmbeddingResponseImageResponseModelResponseStandardCallbackDynamicParamsStandardLoggingPayload)Spanc                   *   e Zd ZdFdeddfdZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zdedee   dededee   dedeeee   ef   fdZdedee   dededee   dedeeee   ef   fdZ	 	 	 dGdededeee      dee   dee   dee   fdZdedee   dee   fdZdedee   fdZdedee   defd Zdeded!efd"Zdeded!efd#Zdee   fd$Z d%e!dee"   fd&Z#d'e$dee%   fd(Z&d)e'd*ee(   dee'   fd+Z)	 d,e*d-e+d.ed/e,d0   dee-eeef      f
d1Z.d2ed!ed,e*fd3Z/d.ed,e*d%e-e$e!e0e1f   de$fd4Z2ded5e$d/edeee$f   fd6Z3ded5e$d/edeee$f   fd7Z4d.ed,e*d/e,d8   de$fd9Z5d,e*d%ede$fd:Z6d; Z7d< Z8d= Z9d> Z:d?e(fd@Z;d?e(dAedBe<ddfdCZ=dDedBe<defdEZ>y)HCustomLoggermessage_loggingreturnNc                     || _         y N)r   )selfr   s     W/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/custom_logger.py__init__zCustomLogger.__init__   s    .    c                      y r    r   modelmessageskwargss       r   log_pre_api_callzCustomLogger.log_pre_api_call#       r    c                      y r   r"   r   r&   response_obj
start_timeend_times        r   log_post_api_callzCustomLogger.log_post_api_call&   r(   r    c                      y r   r"   r*   s        r   log_stream_eventzCustomLogger.log_stream_event)   r(   r    c                      y r   r"   r*   s        r   log_success_eventzCustomLogger.log_success_event,   r(   r    c                      y r   r"   r*   s        r   log_failure_eventzCustomLogger.log_failure_event/   r(   r    c                    K   y wr   r"   r*   s        r   async_log_stream_eventz#CustomLogger.async_log_stream_event4   	        c                    K   y wr   r"   r#   s       r   async_log_pre_api_callz#CustomLogger.async_log_pre_api_call7   r7   r8   c                    K   y wr   r"   r*   s        r   async_log_success_eventz$CustomLogger.async_log_success_event:   r7   r8   c                    K   y wr   r"   r*   s        r   async_log_failure_eventz$CustomLogger.async_log_failure_event=   r7   r8   r$   r%   non_default_params	prompt_idprompt_variablesdynamic_callback_paramsc                    K   |||fS wax  
        Returns:
        - model: str - the model to use (can be pulled from prompt management tool)
        - messages: List[AllMessageValues] - the messages to use (can be pulled from prompt management tool)
        - non_default_params: dict - update with any optional params (e.g. temperature, max_tokens, etc.) to use (can be pulled from prompt management tool)
        r"   r   r$   r%   r?   r@   rA   rB   s          r    async_get_chat_completion_promptz-CustomLogger.async_get_chat_completion_promptB   s      h 222s   c                     |||fS rD   r"   rE   s          r   get_chat_completion_promptz'CustomLogger.get_chat_completion_promptS   s     h 222r    healthy_deploymentsrequest_kwargsparent_otel_spanc                    K   |S wr   r"   )r   r$   rI   r%   rJ   rK   s         r   async_filter_deploymentsz%CustomLogger.async_filter_deploymentsi   s      #"s   
deploymentc                    K   y wr   r"   )r   rN   rK   s      r   async_pre_call_checkz!CustomLogger.async_pre_call_checks         	r8   c                      y r   r"   )r   rN   s     r   pre_call_checkzCustomLogger.pre_call_checkx   r(   r    	exceptionoriginal_model_groupr&   c                    K   y wr   r"   )r   rT   rU   r&   s       r    log_model_group_rate_limit_errorz-CustomLogger.log_model_group_rate_limit_error|   rQ   r8   original_exceptionc                    K   y wr   r"   r   rU   r&   rX   s       r   log_success_fallback_eventz'CustomLogger.log_success_fallback_event   rQ   r8   c                    K   y wr   r"   rZ   s       r   log_failure_fallback_eventz'CustomLogger.log_failure_fallback_event   rQ   r8   c                      y)zt
        Translates the input params, from the provider's native format to the litellm.completion() format.
        Nr"   )r   r&   s     r   !translate_completion_input_paramsz.CustomLogger.translate_completion_input_params        	r    responsec                      y)z\
        Translates the output params, from the OpenAI format to the custom format.
        Nr"   )r   ra   s     r   "translate_completion_output_paramsz/CustomLogger.translate_completion_output_params   r`   r    completion_streamc                      y)z^
        Translates the streaming chunk, from the OpenAI format to the custom format.
        Nr"   )r   rd   s     r   ,translate_completion_output_params_streamingz9CustomLogger.translate_completion_output_params_streaming   r`   r    logged_itemstandard_logging_payloadc                     K   t        d      w)z
        - Decide if the result should be logged to Argilla.
        - Modify the result before logging to Argilla.
        - Return None if the result should not be logged to Argilla.
        z"async_dataset_hook not implemented)NotImplementedError)r   rg   rh   s      r   async_dataset_hookzCustomLogger.async_dataset_hook   s      ""FGGs   user_api_key_dictcachedata	call_type)
completiontext_completion
embeddingsimage_generation
moderationaudio_transcriptionpass_through_endpointrerankc                    K   y wr   r"   )r   rl   rm   rn   ro   s        r   async_pre_call_hookz CustomLogger.async_pre_call_hook   s     $ 	r8   request_datac                    K   y wr   r"   )r   rz   rX   rl   s       r   async_post_call_failure_hookz)CustomLogger.async_post_call_failure_hook         	r8   c                    K   y wr   r"   )r   rn   rl   ra   s       r   async_post_call_success_hookz)CustomLogger.async_post_call_success_hook   r}   r8   resultc                    K   ||fS wzUFor masking logged request/response. Return a modified version of the request/result.r"   r   r&   r   ro   s       r   async_logging_hookzCustomLogger.async_logging_hook   s      v~s   c                 
    ||fS r   r"   r   s       r   logging_hookzCustomLogger.logging_hook   s     v~r    )rp   rr   rs   rt   ru   c                    K   y wr   r"   )r   rn   rl   ro   s       r   async_moderation_hookz"CustomLogger.async_moderation_hook   s      	r8   c                    K   y wr   r"   )r   rl   ra   s      r   async_post_call_streaming_hookz+CustomLogger.async_post_call_streaming_hook   s     
 	r8   c                     	 ||d<   ||d<   d|d<    ||        |d|        y # t         $ r   |dt        j                                 Y y w xY wNr$   r%   pre_api_calllog_event_typez$Custom Logger - model call details: Custom Logger Error - 	Exception	traceback
format_excr   r$   r%   r&   print_verbosecallback_funcs         r   log_input_eventzCustomLogger.log_input_event   sn    		M#F7O!)F:'5F#$ @IJ 	M293G3G3I2JKL	Ms   "% &AAc                    K   	 ||d<   ||d<   d|d<    ||       d {     |d|        y 7 # t         $ r   |dt        j                                 Y y w xY wwr   r   r   s         r   async_log_input_eventz"CustomLogger.async_log_input_event  s     		M#F7O!)F:'5F#$   @IJ  	M293G3G3I2JKL	Ms1   A1 /1 A1 &AAAAc                 ~    	 d|d<    |||||       y # t         $ r   |dt        j                                 Y y w xY wNpost_api_callr   r   r   r   r&   r+   r,   r-   r   r   s          r   	log_eventzCustomLogger.log_event  sT    
	'6F#$	  	293G3G3I2JKL	s    &<<c                    K   	 d|d<    |||||       d {    y 7 # t         $ r   |dt        j                                 Y y w xY wwr   r   r   s          r   async_log_eventzCustomLogger.async_log_event)  sa     
	'6F#$	    	293G3G3I2JKL	s1   A  A &AAAAstandard_logging_objectc                 F    d}g d}|D ]  }| j                  |||        y)a  
        Truncate error strings and message content in logging payload

        Some loggers like DataDog/ GCS Bucket have a limit on the size of the payload. (1MB)

        This function truncates the error string and the message content if they exceed a certain length.
        i'  )	error_strr%   ra   )r   
field_name
max_lengthN)_truncate_field)r   r   MAX_STR_LENGTHfields_to_truncatefields        r   )truncate_standard_logging_payload_contentz6CustomLogger.truncate_standard_logging_payload_content;  s8       C'E  (? ) !  (r    r   r   c                     |j                  |      }|r1t        |      }t        |      |kD  r| j                  ||      ||<   yyy)aP  
        Helper function to truncate a field in the logging payload

        This converts the field to a string and then truncates it if it exceeds the max length.

        Why convert to string ?
        1. User was sending a poorly formatted list for `messages` field, we could not predict where they would send content
            - Converting to string and then truncating the logged content catches this
        2. We want to avoid modifying the original `messages`, `response`, and `error_str` in the logging payload since these are in kwargs and could be returned to the user
        )textr   N)getstrlen_truncate_text)r   r   r   r   field_value	str_values         r   r   zCustomLogger._truncate_fieldQ  sX      .11*=K(I9~
*6:6I6I"z 7J 7'
3 + r    r   c                 2    t        |      |kD  r|d| dz   S |S )z&Truncate text if it exceeds max_lengthNzC...truncated by litellm, this logger does not support large content)r   )r   r   r   s      r   r   zCustomLogger._truncate_texti  s4    
 4y:% *ST	
 		
r    )T)NN)?__name__
__module____qualname__boolr   r'   r.   r0   r2   r4   r6   r:   r<   r>   r   r   r   dictr   r   r   rF   rH   r   rM   rP   rS   r   rW   r[   r]   r   r_   r   r
   rc   r   r   rf   r   r   rk   r   r   r   r	   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   intr   r   r"   r    r   r   r      sK     

33 '(3 !	3
 3 #4.3 "?3 
sD)*D0	13"33 '(3 !	3
 3 #4.3 "?3 
sD)*D0	13$ *.+/## "# 4 012	#
 !# #4.# 
d#2:4.	$
 (4. ":B3-QU
$'15KT
$'15KT	'	(%	)	!$	0	1
H 
H #++A"B
H 
+		
H)  	
 	
 
id"#
( & *	 * ],=}LM	
 
$'47	tSy	$'47	tSy	 * #
	 
)  
	
MM $!7,!7  	
 
0
3 
C 
C 
r    r   )r   typingr   r   r   r   r   r   r	   pydanticr
   litellm.caching.cachingr   litellm.proxy._typesr   "litellm.types.integrations.argillar   litellm.types.llms.openair   r   litellm.types.utilsr   r   r   r   r   r   opentelemetry.tracer   _Spanr   r"   r    r   <module>r      sJ     L L L  - / : M  1DDS
 S
r    