
    ^h7                         S r SSKrSSKrSSKrSSKrSSKrSSKJrJrJ	r	J
r
  SSKrSSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJrJrJr  SS
KJr  S r " S S\5      rg)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                     [         R                  [         R                  [         R                  [        4n[        X5      (       + $ )N)typesCoroutineTypeFunctionTypeGeneratorTyper   
isinstance)valuenon_serializable_typess     V/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/argilla.pyis_serializabler      s8    	 %888    c                      ^  \ rS rSr   SS\\   S\\   S\\   4U 4S jjjrS\\\4   4S jr	S\\   S\\   S\\   S\
4S	 jrS
\S\\\\4      4S jrS
\S\4S jrS\\   4S jrS rS rS rS rS rSrU =r$ )ArgillaLogger)   argilla_api_keyargilla_dataset_nameargilla_base_urlc                 4  > [         R                  c  [        S5      eU R                  [         R                  5        [         R                  U l        U R	                  UUUS9U l        [        R                  " S5      bV  [        R                  " S5      R                  5       R                  5       (       a  [        [        R                  " S5      5      OSU l        [        [        R                  S9U l        [        R                  " SS 5      =(       d    [         R                   nU(       a  [#        U5      U l        [&        R(                  " U R+                  5       5        [&        R,                  " 5       U l        [0        TU ]d  " S0 UDSU R.                  0D6  g )	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?   ArgillaLogger.__init__*   sH    008f  	3311	
 .5-R-R*#'#@#@+!5- $A $
  yy01=		1288:BBDD "))345 	 	 #9-==#
 II*D1OW5O5O 	 !+.DOD//12!,,.>6>doo>r   r*   c                     [        U[        5      (       d  [        S5      eUR                  5        H  nU[        ;  d  M  [        SU S35      e   g )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,   4ArgillaLogger.validate_argilla_transformation_objectQ   sc     7>>g  /557A00mnomp  qE  F  8r   returnc                 *   U=(       d    [         R                  " S5      nUc  [        S5      eU=(       d    [         R                  " S5      =(       d    SnUc  [        S5      eU=(       d    [         R                  " S5      =(       d    SnUc  [        S5      e[        R                  R                  U S	U 3S
U0S9nUR                  5       nSU;   a5  [        US   [        5      (       a  [        US   5      S:  a  US   S   S   n[        UUUS9$ )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)rL   rM   rN   )r/   r0   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-   &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                 
   UR                  SS 5      nUc  [        S5      e[        U[        5      (       a)  [	        U5      S:  a  [        US   [
        5      (       a  U$ [        U[
        5      (       a  U/$ [        SU 35      e)Nmessagesz"No chat messages found in payload.r   zInvalid chat messages format: )rU   r+   r   rW   rX   rF   )r@   r_   payload_messagess      r   get_chat_messagesArgillaLogger.get_chat_messages   s     #;;z48#@AA '..$%)+A.55##($//$%%<=M<NOPPr   c                    US   nUc  [        S5      e[        U[        5      (       a  U$ [        U[        5      (       a6  UR	                  S0 /5      S   R	                  S0 5      R	                  SS5      $ [        SU 35      e)	NresponsezNo response found in payload.choicesr   messagecontent zInvalid response format: )r+   r   strrF   rU   )r@   r_   rf   s      r   get_str_responseArgillaLogger.get_str_response   s    :&;<<h$$O$''Y-a044YCGG	SUV 7zBCCr   c                 d    UR                  SS 5      nUc  [        S5      eU R                  U5      nU R                  U5      nS0 0nU R                  R                  5        H;  u  pU
S:X  a	  XhS   U	'   M  U
S:X  a	  XxS   U	'   M#  UR                  U
S 5      US   U	'   M=     U$ ! [         a    e f = f)Nstandard_logging_objectz,Error logging request payload. Payload=none.fieldsra   rf   )rU   r+   rc   rl   r*   rR   )r@   rA   response_obj
start_timeend_timer_   argilla_messageargilla_responseargilla_itemkrH   s              r   _prepare_log_dataArgillaLogger._prepare_log_data   s    	8>

)49G  NOO"44W=O#44W=)12L::@@B
?0?*1-*_0@*1-07At0DL*1- C   		s   B B# #B/c                 J   U R                   (       d  g U R                  S   nU R                  S   nU SU S3nU R                  S   nSU0n [        R                  R	                  UU R                   US9nUR
                  S:  a1  [        R                  " S	UR
                   S
UR                   35        O-[        R                  " S[        U R                   5       S35        U R                   R                  5         g ! [         a    [        R                  " S5         g f = f)NrM   rN   /api/v1/datasets//records/bulkrL   rO   )rP   rV   rQ   ,  Argilla Error:  - z	Batch of z runs successfully createdz*Argilla Layer Error - Error sending batch.)	log_queuer.   r)   rT   poststatus_coder   errortextdebugrX   clearr+   	exceptionr@   argilla_api_baser    rP   r   rQ   rf   s          r   _send_batch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                     [         R                  " S5      bV  [         R                  " S5      R                  5       R                  5       (       a  [	        [         R                  " S5      5      OSn[
        R
                  " 5       nXe:  a&  [        R                  " SR                  XV5      5        g [        R                  " SUU5        U R                  XX45      nUc  g U R                  R                  U5        [        R                  " SU R                   S35        [        U R                  5      U R                  :  a  U R!                  5         g g ! ["         a    [        R$                  " S5         g f = f)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/   r0   r1   r2   r3   randomr   infoformatr   rx   r   appendflush_intervalrX   r9   r   r+   r   r@   rA   rq   rr   rs   r4   random_sampledatas           r   log_success_eventArgillaLogger.log_success_event   sB   !	X 9967CII78>>@HHJJ bii 9:; 	  #MMOM,##T[[%
   M
 ))&
UD|NN!!$'  A$BUBUAVVab 4>>"doo5  " 6  	X$$%VW	Xs   B.E 1-E A2E  E65E6c                 N  #     U R                   n[        R                  " 5       nXe:  a&  [        R                  " SR	                  XV5      5        g [        R
                  " SUU5        UR                  SS 5      nU R                  XX45      n[        R                   H9  n	[        U	[        5      (       d  M   Uc    OU	R                  X5      I S h  vN nM;     Uc  g U R                  R                  U5        [        R
                  " S[!        U R                  5      U R"                  5        [!        U R                  5      U R"                  :  a  U R%                  5       I S h  vN   g g  N! [         a     M  f = f N! [&         a    [        R(                  " S5         g f = f7f)Nr   z<Langsmith Async Layer Logging - kwargs: %s, response_obj: %sro   1Langsmith logging: queue length %s, batch size %sz8Argilla Layer Error - error logging async success event.)r4   r   r   r   r   r   rU   rx   r)   	callbacksr   r
   async_dataset_hookNotImplementedErrorr   r   rX   r9   flush_queuer+   r   )
r@   rA   rq   rr   rs   r4   r   r_   r   callbacks
             r   async_log_success_event%ArgillaLogger.async_log_success_event  ss    -	 ..M"MMOM,##T[[%
   N
 9?

)49G ))&
UD $--h55<!%-%@%@%OO . |NN!!$'  CDNN#
 4>>"doo5&&((( 6  P.  ) 	$$J	s   F%AE? F%A"E? 7E,:E? <E,E*E,E? F%BE? #E=$E? (F%*E,,
E:6E? 9E::E? ? F"F%!F""F%c                 ^  #    U R                   n[        R                  " 5       nXe:  a&  [        R                  " SR	                  XV5      5        g [        R                  " S5         U R                  XX45      nU R                  R                  U5        [        R                  " S[        U R                  5      U R                  5        [        U R                  5      U R                  :  a  U R                  5       I S h  vN   g g  N! [         a    [        R                  " S5         g f = f7f)Nr   z Langsmith Failure Event Logging!r   z:Langsmith Layer Error - error logging async failure event.)r4   r   r   r   r   rx   r   r   r   rX   r9   r   r+   r   r   s           r   async_log_failure_event%ArgillaLogger.async_log_failure_event@  s     **(PWW!
 >?	))&
UDNN!!$'  CDNN#
 4>>"doo5&&((( 6( 	$$L	s=   A#D-&BD >D?D D-D  D*'D-)D**D-c                   #    U R                   (       d  gU R                  S   nU R                  S   nU SU S3nU R                  S   nSU0n U R                  R                  U[        R
                  " SU R                   05      US	S
9I Sh  vN nUR                  5         UR                  S:  a1  [        R                  " SUR                   SUR                   35        g[        R                  " S[        U R                   5      5        g N! [        R                   a    [        R                  " S5         g[          a    [        R                  " S5         gf = f7f)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()
NrM   rN   r{   r|   rL   rO   rR   i`  )rP   r   rQ   timeoutr}   r~   r   z%Batch of %s runs successfully createdzArgilla HTTP ErrorzArgilla Layer Error)r   r.   r6   putrV   dumpsraise_for_statusr   r   r   r   r   rX   httpxHTTPStatusErrorr   r+   r   s          r   async_send_batchArgillaLogger.async_send_batchZ  sT     ~~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: 	<$$%:;	<sU   AE"?D DAD #E"$*D E"D *E;E"=EE"EE")r*   r6   r9   r.   r'   r4   )NNN)__name__
__module____qualname____firstlineno__r   rk   r?   r   r   r,   r   r-   r   r   rc   rl   r   rx   r   r   r   r   r   __static_attributes____classcell__)rC   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__r:   rV   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   