
    g7                         d Z ddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
 ddlZddl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 dd	lmZmZmZ dd
lmZ d Z G d de      Zy)z%
Send logs to Argilla for annotation
    N)AnyDictListOptional)	BaseModel)verbose_logger)CustomBatchLogger)CustomLogger)get_async_httpx_clienthttpxSpecialProvider)SUPPORTED_PAYLOAD_FIELDSArgillaCredentialsObjectArgillaItem)StandardLoggingPayloadc                     t         j                  t         j                  t         j                  t        f}t        | |       S )N)typesCoroutineTypeFunctionTypeGeneratorTyper   
isinstance)valuenon_serializable_typess     Q/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/argilla.pyis_serializabler      s;    	 %!7888    c                        e Zd Z	 	 	 ddee   dee   dee   f fdZdeeef   fdZdee   dee   dee   de	fdZ
d	edeeeef      fd
Zd	edefdZdee   fdZd Zd Zd Zd Zd Z xZS )ArgillaLoggerargilla_api_keyargilla_dataset_nameargilla_base_urlc                    t         j                  t        d      | j                  t         j                         t         j                  | _        | j	                  |||      | _        t        j                  d      Ot        j                  d      j                         j                         rt        t        j                  d            nd| _        t        t        j                        | _        t        j                  dd       xs t         j                   }|rt#        |      | _        t'        j(                  | j+                                t'        j,                         | _        t1        | d  di |d| j.                  i y )	NzT'litellm.argilla_transformation_object' is required, to log your payload to Argilla.)r   r   r    ARGILLA_SAMPLING_RATE      ?)llm_providerARGILLA_BATCH_SIZE
flush_lock )litellmargilla_transformation_object	Exception&validate_argilla_transformation_objectget_credentials_from_envdefault_credentialsosgetenvstripisdigitfloatsampling_rater   r   LoggingCallbackasync_httpx_clientargilla_batch_sizeint
batch_sizeasynciocreate_taskperiodic_flushLockr&   super__init__)selfr   r   r    kwargs_batch_size	__class__s         r   r>   zArgillaLogger.__init__*   sE    008f  	3311	
 .5-R-R*#'#@#@+!5- $A $
  yy01=		1288:BBD "))345 	 	 #9-==#
 II*D1OW5O5O 	 !+.DOD//12!,,.>6>doo>r   r)   c                     t        |t              st        d      |j                         D ]  }|t        vst        d| d       y )NzU'argilla_transformation_object' must be a dictionary, to log your payload to Argilla.zWAll values in argilla_transformation_object must be a key in SUPPORTED_PAYLOAD_FIELDS, z is not a valid key.)r   dictr*   valuesr   )r?   r)   vs      r   r+   z4ArgillaLogger.validate_argilla_transformation_objectQ   s`     7>g  /557A00mnomp  qE  F  8r   returnc                    |xs t        j                  d      }|t        d      |xs t        j                  d      xs d}|t        d      |xs t        j                  d      xs d}|t        d      t        j                  j                  | d	| d
|i      }|j                         }d|v r/t        |d   t              rt        |d         dkD  r|d   d   d   }t        |||      S )NARGILLA_API_KEYz9Invalid Argilla API Key given. _credentials_api_key=None.ARGILLA_BASE_URLzhttp://localhost:6900/z;Invalid Argilla Base URL given. _credentials_base_url=None.ARGILLA_DATASET_NAMEzlitellm-completionz)Invalid Argilla Dataset give. Value=None.z/api/v1/me/datasets?name=X-Argilla-Api-Key)urlheadersitemsr   id)rI   rJ   rK   )r.   r/   r*   r(   module_level_clientgetjsonr   listlenr   )	r?   r   r   r    _credentials_api_key_credentials_base_url_credentials_dataset_namedataset_responsejson_responses	            r   r,   z&ArgillaLogger.get_credentials_from_env_   s:     /N"))<M2N'WXX  (yy+,(' 	
 !(M 
 ! $yy/0$# 	"
 %,GHH&::>>,--FG`Fab,.BC  ?   -113M=(}W5t<g./!3,9',B1,Ed,K)'02!:
 	
r   payloadc                     |j                  dd       }|t        d      t        |t              r#t	        |      dkD  rt        |d   t
              r|S t        |t
              r|gS t        d|       )Nmessagesz"No chat messages found in payload.r   zInvalid chat messages format: )rR   r*   r   rT   rU   rD   )r?   r[   payload_messagess      r   get_chat_messageszArgillaLogger.get_chat_messages   s     #;;z48#@AA '.$%)+A.5##($/$%%<=M<NOPPr   c                     |d   }|t        d      t        |t              r|S t        |t              r6|j	                  di g      d   j	                  di       j	                  dd      S t        d|       )	NresponsezNo response found in payload.choicesr   messagecontent zInvalid response format: )r*   r   strrD   rR   )r?   r[   ra   s      r   get_str_responsezArgillaLogger.get_str_response   s    :&;<<h$O$'Y-a044YCGG	SUV 7zBCCr   c                 Z   	 |j                  dd       }|t        d      | j                  |      }| j                  |      }di i}| j                  j                         D ]9  \  }	}
|
dk(  r	||d   |	<   |
dk(  r	||d   |	<   "|j                  |
d       |d   |	<   ; |S # t        $ r  w xY w)Nstandard_logging_objectz,Error logging request payload. Payload=none.fieldsr]   ra   )rR   r*   r_   rg   r)   rO   )r?   r@   response_obj
start_timeend_timer[   argilla_messageargilla_responseargilla_itemkrF   s              r   _prepare_log_datazArgillaLogger._prepare_log_data   s    	8>

)49G  NOO"44W=O#44W=)12L::@@B1
?0?L*1-*_0@L*1-07At0DL*1- C   		s   BB B*c                 <   | j                   sy | j                  d   }| j                  d   }| d| d}| j                  d   }d|i}	 t        j                  j	                  || j                   |      }|j
                  dk\  r0t        j                  d	|j
                   d
|j                          n,t        j                  dt        | j                          d       | j                   j                          y # t        $ r t        j                  d       Y y w xY w)NrJ   rK   /api/v1/datasets//records/bulkrI   rL   )rM   rS   rN   ,  Argilla Error:  - z	Batch of z runs successfully createdz*Argilla Layer Error - Error sending batch.)	log_queuer-   r(   rQ   poststatus_coder   errortextdebugrU   clearr*   	exceptionr?   argilla_api_baser   rM   r   rN   ra   s          r   _send_batchzArgillaLogger._send_batch   s!   ~~334FG#778NO!""34H3IW223DE&8	S2277^^ 8 H ##s*$$%h&:&:%;3x}}oN $$DNN 344NO NN  " 	S$$%QR	Ss   B1C: :DDc                    	 t        j                  d      Ot        j                  d      j                         j                         rt	        t        j                  d            nd}t        j
                         }||kD  r&t        j                  dj                  ||             y t        j                  d||       | j                  ||||      }|y | j                  j                  |       t        j                  d| j                   d       t        | j                        | j                  k\  r| j!                          y y # t"        $ r t        j$                  d       Y y w xY w)NLANGSMITH_SAMPLING_RATEr#   >Skipping Langsmith logging. Sampling rate={}, random_sample={}z;Langsmith Sync Layer Logging - kwargs: %s, response_obj: %sz/Langsmith, event added to queue. Will flush in z seconds...z/Langsmith Layer Error - log_success_event error)r.   r/   r0   r1   r2   randomr   infoformatr~   rr   ry   appendflush_intervalrU   r8   r   r*   r   r?   r@   rk   rl   rm   r3   random_sampledatas           r   log_success_eventzArgillaLogger.log_success_event   sG   !	X 9967CII78>>@HHJ bii 9:; 	  #MMOM},##T[[%}
   M
 ))&,
HUD|NN!!$'  A$BUBUAVVab 4>>"doo5  " 6  	X$$%VW	Xs   B$E '-E A0E E('E(c                 0  K   	 | j                   }t        j                         }||kD  r&t        j                  dj	                  ||             y t        j
                  d||       |j                  dd       }| j                  ||||      }t        j                  D ]2  }	t        |	t              s	 | n|	j                  ||       d {   }4 |y | j                  j                  |       t        j
                  dt!        | j                        | j"                         t!        | j                        | j"                  k\  r| j%                          d {    y y 7 # t        $ r Y w xY w7 # t&        $ r t        j(                  d       Y y w xY ww)Nr   z<Langsmith Async Layer Logging - kwargs: %s, response_obj: %sri   1Langsmith logging: queue length %s, batch size %sz8Argilla Layer Error - error logging async success event.)r3   r   r   r   r   r~   rR   rr   r(   	callbacksr   r
   async_dataset_hookNotImplementedErrorry   r   rU   r8   flush_queuer*   r   )
r?   r@   rk   rl   rm   r3   r   r[   r   callbacks
             r   async_log_success_eventz%ArgillaLogger.async_log_success_event  s{    -	 ..M"MMOM},##T[[%}
   N
 9?

)49G ))&,
HUD $--h5<!%-%@%@w%OO . |NN!!$'  CDNN#
 4>>"doo5&&((( 6  P.  ) 	$$J	s   FA
E2 FA E2 1E!3E2 5E!
EE!E2 FBE2 E0E2 FE!!	E-*E2 ,E--E2 2FFFFc                 V  K   | j                   }t        j                         }||kD  r&t        j                  dj	                  ||             y t        j                  d       	 | j                  ||||      }| j                  j                  |       t        j                  dt        | j                        | j                         t        | j                        | j                  k\  r| j                          d {    y y 7 # t        $ r t        j                  d       Y y w xY ww)Nr   z Langsmith Failure Event Logging!r   z:Langsmith Layer Error - error logging async failure event.)r3   r   r   r   r   rr   ry   r   r~   rU   r8   r   r*   r   r   s           r   async_log_failure_eventz%ArgillaLogger.async_log_failure_event@  s     **=(PWW!=
 >?	))&,
HUDNN!!$'  CDNN#
 4>>"doo5&&((( 6( 	$$L	s=   A!D)$BD <D=D D)D D&#D)%D&&D)c                   K   | j                   sy| j                  d   }| j                  d   }| d| d}| j                  d   }d|i}	 | j                  j                  |t	        j
                  d| j                   i      |d	
       d{   }|j                          |j                  dk\  r0t        j                  d|j                   d|j                          yt        j                  dt        | j                                y7 }# t        j                  $ r t        j                  d       Y yt         $ r t        j                  d       Y yw xY ww)z
        sends runs to /batch endpoint

        Sends runs from self.log_queue

        Returns: None

        Raises: Does not raise an exception, will only verbose_logger.exception()
        NrJ   rK   rt   ru   rI   rL   rO   i`  )rM   r   rN   timeoutrv   rw   rx   z%Batch of %s runs successfully createdzArgilla HTTP ErrorzArgilla Layer Error)ry   r-   r5   putrS   dumpsraise_for_statusr{   r   r|   r}   r~   rU   httpxHTTPStatusErrorr   r*   r   s          r   async_send_batchzArgillaLogger.async_send_batchZ  sU     ~~334FG#778NO!""34H3IW223DE&8	<!4488ZZ
   9 	 	H %%'##s*$$%h&:&:%;3x}}oN $$;S=P#	( $$ 	;$$%9: 	<$$%:;	<sV   AE
AD D	AD E)D E	D (E3E5EEEE)NNN)__name__
__module____qualname__r   rf   r>   r   r   r+   r   r,   r   r   r_   rg   r   rr   r   r   r   r   r   __classcell__)rB   s   @r   r   r   )   s     *..2*.	%?!#%? 'sm%? #3-	%?N-1#s(^-
!#-
 'sm-
 #3-	-

 
"-
^Q-Q	d38n	Q&D(> D3 D	+	6SB"XH.`4.<r   r   ) __doc__r9   rS   r.   r   r   typingr   r   r   r   r   pydanticr   r(   litellm._loggingr   (litellm.integrations.custom_batch_loggerr	   "litellm.integrations.custom_loggerr
   &litellm.llms.custom_httpx.http_handlerr   r   "litellm.types.integrations.argillar   r   r   litellm.types.utilsr   r   r   r'   r   r   <module>r      s[      	   , ,    + F ; 
 79_<% _<r   