Ë
    tPêjý4  ã                   óÌ   — 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 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ÚFinal)Ú	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     úa/home/oem/CyberBrain26-unified/.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dz  dedz  dedz  fˆ fd„Zdeeef   fd„Zdedz  dedz  dedz  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dz  fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚArgillaLoggerNÚ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__*   s.  ø€ ô ×0Ñ0Ð8ÜÐrÓsÐsØ×3Ñ3´G×4YÑ4YÔZÜ-4×-RÑ-RˆÔ*Ø#'×#@Ñ#@Ø+Ø!5Ø-ð $Aó $
ˆÔ ô �y‰yÐ0Ó1Ð=Ä"Ç)Á)ÐLcÓBd×BjÑBjÓBl×BtÑBtÔBvô ”"—)‘)Ð3Ó4Ô5àð 	Ôô #9ÔFZ×FjÑFjÔ"kˆÔÜŸY™YÐ';¸TÓBÒ`Äg×F`ÑF`ˆÙÜ! +Ó.ˆDŒOÜ×Ñ˜D×/Ñ/Ó1Ô2Ü!Ÿ,™,›.ˆŒÜ‰ÑÑ>˜6Ñ>¨d¯o©oÔ>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_objectH   s]   € ÜÐ7¼Ô>ÜÐsÓtÐtà.×5Ñ5Ó7ò 	ˆAØÔ0Ò0ÜØmÐnoÐmpð  qEð  Fóð ñ	r   Ú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)rG   rH   rI   )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_envR   s!  € ð '6Ò&U¼¿¹ÐCTÓ9UÐØÐ'ÜÐWÓXÐXà'7Ò't¼2¿9¹9ÐEWÓ;XÒ'tÐ\tÐØ Ð(ÜÐYÓZÐZà$8Ò$u¼B¿I¹IÐF\Ó<]Ò$uÐauÐ!Ø$Ð,ÜÐGÓHÐHä&-×&AÑ&A×&EÑ&EØ,Ð-Ð-FÐG`ÐFaÐbØ,Ð.BÐCð 'Fó 'Ðð $4×#8Ñ#8Ó#:ˆMà˜=Ñ(Ü˜}¨WÑ5´tÔ<Ü˜ gÑ.Ó/°!Ò3à,9¸'Ñ,BÀ1Ñ,EÀdÑ,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: )rP   r(   r   rR   rS   rB   )r=   rY   Úpayload_messagess      r   Úget_chat_messageszArgillaLogger.get_chat_messagesv   s~   € Ø")§+¡+¨j¸$Ó"?ÐàÐ#ÜÐ@ÓAÐAäÐ&¬Ô-´#Ð6FÓ2GÈ!Ò2KÔPZÐ[kÐlmÑ[nÔptÔPuØ#Ð#ÜÐ(¬$Ô/Ø$Ð%Ð%äÐ<Ð=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   ÚstrrB   rP   )r=   rY   r_   s      r   Úget_str_responsezArgillaLogger.get_str_responseƒ   s}   € Ø! *Ñ-ˆàÐÜÐ;Ó<Ð<ä�h¤Ô$ØˆOÜ˜¤$Ô'Ø—<‘< 	¨B¨4Ó0°Ñ3×7Ñ7¸	À2ÓF×JÑJÈ9ÐVXÓYÐYäÐ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[   r_   )rP   r(   r]   re   r'   rM   )r=   r>   Úresponse_objÚ
start_timeÚend_timerY   Úargilla_messageÚargilla_responseÚargilla_itemÚkrD   s              r   Ú_prepare_log_datazArgillaLogger._prepare_log_data�   sØ   € ð	à<B¿J¹JÐG`ÐbfÓ<gˆGàˆÜÐ NÓOÐOà%)×%;Ñ%;¸GÓ%DˆOØ&*×&;Ñ&;¸GÓ&DÐØ08¸"¨~ˆLØ×:Ñ:×@Ñ@ÓBò E‘��1Ø˜
’?Ø0?�L Ñ*¨1Ò-Ø˜*’_Ø0@�L Ñ*¨1Ò-à07·±¸A¸tÓ0D�L Ñ*¨1Ò-ðEð  ÐøÜò 	Øð	ú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\  r,t        j                  d	|j
                  |j                  «       n)t        j                  d
t        | j                   «      «       | j                   j                  «        y # t        $ r t        j                  d«       Y y w xY w)NrH   rI   ú/api/v1/datasets/ú/records/bulkrG   rJ   )rK   rQ   rL   é,  úArgilla Error: %s - %sú%Batch of %s runs successfully createdz*Argilla Layer Error - Error sending batch.)Ú	log_queuer+   r&   rO   ÚpostÚstatus_coder   ÚerrorÚtextÚdebugrS   Úclearr(   Ú	exception©r=   Úargilla_api_baser   rK   r   rL   r_   s          r   Ú_send_batchzArgillaLogger._send_batch§   s  € Ø�~Š~Øà"&×":Ñ":Ð;MÑ"NÐØ&*×&>Ñ&>Ð?UÑ&VÐà(Ð)Ð):Ð;OÐ:PÐP]Ð^ˆà!%×!9Ñ!9Ð:KÑ!Lˆà-¨Ð?ˆð	SÜ%×9Ñ9×>Ñ>ØØ—^‘^Øð ?ó ˆHð ×#Ñ# sÒ*Ü×$Ñ$Ð%=¸x×?SÑ?SÐU]×UbÑUbÕcä×$Ñ$Ð%LÌcÐRV×R`ÑR`ÓNaÔbà�N‰N× Ñ Õ"øÜò 	SÜ×$Ñ$Ð%QÖRð	Sús   ÁB*C3 Ã3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||«       y t        j                  d||«       | j                  ||||«      }|€y | j                  j                  |«       t        j                  d| j                  «       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=%s, random_sample=%sz;Langsmith Sync Layer Logging - kwargs: %s, response_obj: %sz<Langsmith, event added to queue. Will flush in %s seconds...z/Langsmith Layer Error - log_success_event error)r,   r-   r.   r/   r0   Úrandomr   Úinfor|   rp   rw   ÚappendÚflush_intervalrS   r6   r�   r(   r~   ©r=   r>   ri   rj   rk   r1   Úrandom_sampleÚdatas           r   Úlog_success_eventzArgillaLogger.log_success_eventÄ   s2  € ð	Xô —9‘9Ð6Ó7ÐCÜ—I‘IÐ7Ó8×>Ñ>Ó@×HÑHÔJô ”b—i‘iÐ 9Ó:Ô;ð ð	 ô $*§=¡=£?ˆMØ˜}Ò,Ü×#Ñ#ØTÐVcÐerôð Ü× Ñ ØMØØôð
 ×0Ñ0°¸ÀzÐS[Ó\ˆDØˆ|Øà�N‰N×!Ñ! $Ô'Ü× Ñ Ð!_Ðae×atÑatÔuä�4—>‘>Ó" d§o¡oÒ5Ø× Ñ Õ"ð 6øô ò 	XÜ×$Ñ$Ð%VÖWð	Xús   ‚BD6 Â-D6 ÃA-D6 Ä6EÅEc              ƒ   ó  K  — 	 | j                   }t        j                  «       }||kD  rt        j                  d||«       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: %srg   ú1Langsmith logging: queue length %s, batch size %sz8Argilla Layer Error - error logging async success event.)r1   r…   r   r†   r|   rP   rp   r&   Ú	callbacksr   r   Úasync_dataset_hookÚNotImplementedErrorrw   r‡   rS   r6   Úflush_queuer(   r~   )
r=   r>   ri   rj   rk   r1   rŠ   rY   r‹   Úcallbacks
             r   Úasync_log_success_eventz%ArgillaLogger.async_log_success_eventä   su  è ø€ ð'	aØ#'×#5Ñ#5ˆMÜ#)§=¡=£?ˆMØ˜}Ò,Ü×#Ñ#ØTÐVcÐerôð Ü× Ñ ØNØØôð
 =C¿J¹JÐG`ÐbfÓ<gˆGà×)Ñ)¨&°,À
ÈHÓUˆDô $×-Ñ-ò �Ü˜h¬Õ5ðØ˜<Ù!Ø%-×%@Ñ%@ÀÀwÓ%O×O™ðð ˆ|Øà�N‰N×!Ñ! $Ô'Ü× Ñ ØCÜ�D—N‘NÓ#Ø—‘ôô
 �4—>‘>Ó" d§o¡oÒ5Ø×&Ñ&Ó(×(Ñ(ð 6ð  PùÜ.ò Ùðúð )ùÜò 	aÜ×$Ñ$Ð%_Ö`ð	aüs�   ‚F„<E$ Á FÁA E$ Â#EÂ%E$ Â'EÂ<EÂ=EÃE$ ÃFÃBE$ Å
E"ÅE$ ÅFÅEÅ	EÅE$ ÅEÅE$ Å$FÆFÆFÆFc              ƒ   ó:  K  — | j                   }t        j                  «       }||kD  rt        j                  d||«       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.)r1   r…   r   r†   rp   rw   r‡   r|   rS   r6   r’   r(   r~   r‰   s           r   Úasync_log_failure_eventz%ArgillaLogger.async_log_failure_event  sò   è ø€ Ø#×1Ñ1ˆÜ%Ÿ}™}›ˆØ˜=Ò(Ü×ÑØPÐR_Ðanôð Ü×ÑÐ>Ô?ð	cØ×0Ñ0°¸ÀzÐS[Ó\ˆDØ�N‰N×!Ñ! $Ô'Ü× Ñ ØCÜ�D—N‘NÓ#Ø—‘ôô
 �4—>‘>Ó" d§o¡oÒ5Ø×&Ñ&Ó(×(Ñ(ð 6Ø(ùÜò 	cÜ×$Ñ$Ð%aÖbð	cüs=   ‚ADÁBC7 Ã.C5Ã/C7 Ã3DÃ5C7 Ã7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\  r,t        j                  d|j                  |j                  «       yt        j                  dt        | j                   «      «       y7 Œy# 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()
        NrH   rI   rr   rs   rG   rJ   rM   i`ê  )rK   r‹   rL   Útimeoutrt   ru   rv   zArgilla HTTP ErrorzArgilla Layer Error)rw   r+   r3   ÚputrQ   ÚdumpsÚraise_for_statusry   r   rz   r{   r|   rS   ÚhttpxÚHTTPStatusErrorr~   r(   r   s          r   Úasync_send_batchzArgillaLogger.async_send_batch$  sM  è ø€ ð �~Š~Øà"&×":Ñ":Ð;MÑ"NÐØ&*×&>Ñ&>Ð?UÑ&VÐà(Ð)Ð):Ð;OÐ:PÐP]Ð^ˆà!%×!9Ñ!9Ð:KÑ!Lˆà-¨Ð?ˆð	<Ø$(×$;Ñ$;×$?Ñ$?ØÜ—Z‘Zà §¡ðóð
  Øð %@ó 	%÷ 	ˆHð ×%Ñ%Ô'à×#Ñ# sÒ*Ü×$Ñ$Ð%=¸x×?SÑ?SÐU]×UbÑUbÕcä×$Ñ$Ð%LÌcÐRV×R`ÑR`ÓNaÕbð	ùô  ×$Ñ$ò 	;Ü×$Ñ$Ð%9Ö:Üò 	<Ü×$Ñ$Ð%:Ö;ð	<üsV   ‚AEÁ
AD ÂDÂAD ÃEÃ)D ÄEÄD Ä(EÄ/EÄ1EÅEÅEÅE)NNN)Ú__name__Ú
__module__Ú__qualname__rd   r<   rB   r   r)   r   r*   r   rR   r]   re   r   rp   r�   rŒ   r”   r–   rž   Ú__classcell__)r@   s   @r   r   r   )   sù   ø„ ð '+Ø+/Ø'+ñ	?à˜t™ð?ð " D™jð?ð  ™*õ	?ð<ÐTXÐY\Ð^aÐYaÑTbó ð"
à˜t™ð"
ð " D™jð"
ð  ™*ð	"
ð
 
"ó"
ðHQÐ)?ð QÀDÈÈcÐSVÈhÉÑDXó QðDÐ(>ð DÀ3ó DðÈ{Ð]aÑOaó ò.Sò:Xò@(aòTcö,*<r   r   )Ú__doc__r7   rQ   r,   r…   r   Útypingr   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¬      sX   ðñó Û Û 	Û Û ß ã Ý ã Ý +Ý FÝ ;÷÷ñ õ
 7ò9ôe<Ð%õ e<r   