Ë
    tPêj™@  ã                   ó¨   — U d dl Z d dlmZ d dlmZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d	Zeed
<   d„ Z G d„ de«      Zy)é    N)Údatetime)ÚFinal)Úverbose_logger)Úcreate_mock_braintrust_clientÚshould_use_braintrust_mock)ÚCustomLogger)ÚHTTPHandlerÚget_async_httpx_clientÚhttpxSpecialProvider)Úprint_verbosez!https://api.braintrustdata.com/v1ÚAPI_BASEc                  óˆ   — dd l } t        | d«      rt        j                  | j                  «      S t        j                  «       S )Nr   ÚUTC)r   ÚhasattrÚnowr   Úutcnow)Údts    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/braintrust_logging.pyÚget_utc_datetimer      s/   € Ûäˆr�5ÔÜ�|‰|˜BŸF™FÓ#Ð#ä�‰Ó Ð ó    c                   óŽ   ‡ — e Zd Zddedz  dedz  ddfˆ fd„Zdedz  fd„Zdedefd„Zdedefd	„Zd
„ Zd„ Z	d„ Z
d„ Zˆ fd„Zˆ xZS )ÚBraintrustLoggerNÚapi_keyÚapi_baseÚreturnc                 óè  •— t         ‰| �  «        t        «       | _        | j                  rt	        «        t        j                  d«       | j                  |¬«       |xs t        j                  d«      xs t        | _        d | _        |xs t        j                  d«      | _        d| j                  z   ddœ| _        i | _        t!        t"        j$                  ¬«      | _        t)        «       | _        y )	Nz<[BRAINTRUST MOCK] Braintrust logger initialized in mock mode)r   ÚBRAINTRUST_API_BASEÚBRAINTRUST_API_KEYzBearer zapplication/json)ÚAuthorizationzContent-Type)Úllm_provider)ÚsuperÚ__init__r   Úis_mock_moder   r   ÚinfoÚvalidate_environmentÚosÚgetenvr   r   Údefault_project_idr   ÚheadersÚ_project_id_cacher
   r   ÚLoggingCallbackÚglobal_braintrust_http_handlerr	   Ú#global_braintrust_sync_http_handler)Úselfr   r   Ú	__class__s      €r   r"   zBraintrustLogger.__init__%   sÁ   ø€ Ü‰ÑÔÜ6Ó8ˆÔØ×ÒÜ)Ô+Ü×ÑÐ ^Ô_Ø×!Ñ!¨'Ð!Ô2Ø ÒP¤B§I¡IÐ.CÓ$DÒPÌˆŒØ"&ˆÔØ#ÒF¤r§y¡yÐ1EÓ'FˆŒà&¨¯©Ñ5Ø.ñ
ˆŒð 24ˆÔÜ.DÔRf×RvÑRvÔ.wˆÔ+Ü3>³=ˆÕ0r   c                 ó”   — g }|€'t        j                  dd«      €|j                  d«       t        |«      dkD  rt	        d|› d�«      ‚y)zP
        Expects
        BRAINTRUST_API_KEY

        in the environment
        Nr   r   zMissing keys=z in environment.)r&   r'   ÚappendÚlenÚ	Exception)r.   r   Úmissing_keyss      r   r%   z%BraintrustLogger.validate_environment7   sU   € ð !ˆØˆ?œrŸy™yÐ)=¸tÓDÐLØ×ÑÐ 4Ô5äˆ|Ó˜qÒ Ü˜m¨L¨>Ð9IÐJÓKÐKð !r   Úproject_namec                 ór  — || j                   v r| j                   |   S 	 | j                  j                  | j                  › d�| j                  d|i¬«      }|j                  «       }|d   }|| j                   |<   |S # t        j                  $ r'}t        d|j                  j                  › �«      ‚d}~ww xY w)zs
        Get project ID from name, using cache if available.
        If project doesn't exist, creates it.
        ú/projectÚname©r)   ÚjsonÚidúFailed to register project: N)r*   r-   Úpostr   r)   r:   ÚhttpxÚHTTPStatusErrorr3   ÚresponseÚtext©r.   r5   r@   Úproject_dictÚ
project_idÚes         r   Úget_project_id_syncz$BraintrustLogger.get_project_id_syncE   sÃ   € ð
 ˜4×1Ñ1Ñ1Ø×)Ñ)¨,Ñ7Ð7ð	NØ"×FÑF×KÑKØ—=‘=�/ Ð*ØŸ™Ø˜lÐ+ð Ló ˆHð
 #+§-¡-£/ˆLØ ,¨TÑ 2ˆJØ3=ˆD×"Ñ" <Ñ0ØÐøÜ×$Ñ$ò 	NÜÐ:¸1¿:¹:¿?¹?Ð:KÐLÓMÐMûð	Nús   ŸAA< Á<B6Â"B1Â1B6c              ƒ   óŽ  K  — || j                   v r| j                   |   S 	 | j                  j                  | j                  › d�| j                  d|i¬«      ƒ d{  –—† }|j                  «       }|d   }|| j                   |<   |S 7 Œ*# t        j                  $ r'}t        d|j                  j                  › �«      ‚d}~ww xY w­w)z6
        Async version of get_project_id_sync
        z/project/registerr8   r9   Nr;   r<   )r*   r,   r=   r   r)   r:   r>   r?   r3   r@   rA   rB   s         r   Úget_project_id_asyncz%BraintrustLogger.get_project_id_asyncZ   sÓ   è ø€ ð ˜4×1Ñ1Ñ1Ø×)Ñ)¨,Ñ7Ð7ð	NØ$(×$GÑ$G×$LÑ$LØ—=‘=�/Ð!2Ð3ØŸ™Ø˜lÐ+ð %Mó %÷ ˆHð
 #+§-¡-£/ˆLØ ,¨TÑ 2ˆJØ3=ˆD×"Ñ" <Ñ0ØÐðùô ×$Ñ$ò 	NÜÐ:¸1¿:¹:¿?¹?Ð:KÐLÓMÐMûð	Nüs:   ‚C¡:B ÁBÁ)B ÂCÂB ÂCÂ"B=Â=CÃCc              ƒ   óÂ   K  — | j                   j                  | j                  › d�| j                  ddi¬«      ƒ d {  –—† }|j	                  «       }|d   | _        y 7 Œ­w©Nr7   r8   Úlitellmr9   r;   )r,   r=   r   r)   r:   r(   ©r.   ÚprojectrC   s      r   Ú%create_default_project_and_experimentz6BraintrustLogger.create_default_project_and_experimentn   sa   è ø€ Ø#×BÑB×GÑGØ�}‰}ˆo˜XÐ&°·±ÀFÈIÐCVð  Hó  
÷ 
ˆð &Ÿl™l›nˆà".¨tÑ"4ˆÕð
ús   ‚;A½A¾ Ac                 ó¦   — | j                   j                  | j                  › d�| j                  ddi¬«      }|j	                  «       }|d   | _        y rJ   )r-   r=   r   r)   r:   r(   rL   s      r   Ú*create_sync_default_project_and_experimentz;BraintrustLogger.create_sync_default_project_and_experimentw   sS   € Ø×AÑA×FÑFØ�}‰}ˆo˜XÐ&°·±ÀFÈIÐCVð Gó 
ˆð &Ÿl™l›nˆà".¨tÑ"4ˆÕr   c                 ó¨	  — t        j                  d«       	 |j                  d«      }|j                  di «      }d|j                  d«      i}d }g }	|�2|j                  dd «      dk(  st        |t        j
                  «      rd }nž|�9t        |t        j                  «      r|d   d   d	   j                  «       }|d   }	nc|�@t        |t        j                  «      r&|j                  d   j                  }|j                  }	n!|�t        |t        j                  «      r|d
   }|j                  di «      xs i }
|
j                  di «      xs i }|j                  d«      }|€&|j                  d«      }|r| j                  |«      nd }|€(| j                  €| j                  «        | j                  }g }t        |t        «      r‰|j!                  «       D ]v  \  }}t        j"                  �Ft        t        j"                  t$        «      r(|t        j"                  v r|j'                  |› d|› �«       t        |t(        «      sŒm||vsŒr|||<   Œx |j                  dd «      }d }t+        |dd «      }|r�t        |t        j,                  «      rƒt        j.                  j1                  ||«       |j2                  |j4                  |j6                  ||j9                  «       |j9                  «       z
  |j9                  «       |j9                  «       dœ}|j                  dd«      }|j                  d«      }|r=|j;                  d«      D �cg c]#  }|j=                  «       sŒ|j=                  «       ‘Œ% }}|j                  d«      |j                  d«      |dœ}||d   ||ddœdœ}|j                  d«      €||d<   |j!                  «       D ]  \  }}|sŒ	|||<   Œ |	�"|	D �cg c]  }|j                  «       ‘Œ c}|d<   n||d<   |�||d<   	 t?        d | j@                  jB                  › �«       | j@                  jC                  | jD                  › d!|› d"�d#|gi| jF                  ¬$«       | jH                  rt?        d%«       y y c c}w c c}w # tJ        jL                  $ r$}tO        |jP                  j                  «      ‚d }~ww xY w# tN        $ r}|‚d }~ww xY w)&NúREACHES BRAINTRUST SUCCESSÚlitellm_call_idÚstandard_logging_objectÚmessagesÚ	call_typeÚ	embeddingÚchoicesr   ÚmessageÚdataÚlitellm_paramsÚmetadatarD   r5   ú:Úresponse_costÚusage)Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚ
total_costÚtime_to_first_tokenÚstartÚendÚ	span_nameúChat CompletionÚspan_parentsú,Úspan_idÚroot_span_id©rk   rl   ri   Úllm©r8   Útype)r;   Úinputr\   Úspan_attributesÚtagsÚoutputÚmetricsz/self.global_braintrust_sync_http_handler.post: ú/project_logs/ú/insertÚevents©Úurlr:   r)   z0[BRAINTRUST MOCK] Sync event successfully mocked))r   ÚdebugÚgetÚ
isinstancerK   ÚEmbeddingResponseÚModelResponser:   ÚTextCompletionResponserX   rA   ÚImageResponserF   r(   rP   ÚdictÚitemsÚlangfuse_default_tagsÚlistr1   ÚstrÚgetattrÚUsageÚutilsÚget_logging_idr`   ra   rb   Ú	timestampÚsplitÚstripr   r-   r=   r   r)   r#   r>   r?   r3   r@   )r.   ÚkwargsÚresponse_objÚ
start_timeÚend_timerS   rT   Úpromptrt   rX   r[   Údynamic_metadatarD   r5   rs   ÚkeyÚvalueÚcostru   Ú	usage_objrg   ri   Úsrr   Úrequest_dataÚchoicerE   s                              r   Úlog_success_eventz"BraintrustLogger.log_success_event€   sÄ  € Ü×ÑÐ9Ô:ðz	Ø%+§Z¡ZÐ0AÓ%BˆOØ-3¯Z©ZÐ8QÐSUÓ-VÐ#Ø'¨¯©°JÓ)?Ð@ˆFàˆFØˆGØÐ'Ø—
‘
˜;¨Ó-°Ò<Ä
È<ÔY`×YrÑYrÔ@sà‘ØÐ)¬j¸Äw×G\ÑG\Ô.]Ø% iÑ0°Ñ3°IÑ>×CÑCÓE�Ø& yÑ1‘ØÐ)¬j¸Äw×GeÑGeÔ.fØ%×-Ñ-¨aÑ0×5Ñ5�Ø&×.Ñ.‘ØÐ)¬j¸Äw×G\ÑG\Ô.]Ø% fÑ-�à$*§J¡JÐ/?ÀÓ$DÒ$JÈˆNØ&4×&8Ñ&8¸ÀRÓ&HÒ&NÈBÐð *×-Ñ-¨lÓ;ˆJØÐ!Ø&6×&:Ñ&:¸>Ó&J�ÙGS˜T×5Ñ5°lÔCÐY]�
àÐ!Ø×*Ñ*Ð2Ø×CÑCÔEØ!×4Ñ4�
àˆDäÐ*¬DÔ1Ø"2×"8Ñ"8Ó":ò =‘J�C˜ô  ×5Ñ5ÐAÜ&¤w×'DÑ'DÄdÔKØ¤7×#@Ñ#@Ñ@àŸ™ s e¨1¨U¨GÐ$4Ô5ô # 5¬#Õ.°3Ð>UÒ3Uà7<Ð/°Ò4ð=ð !Ÿ*™* _°dÓ;ˆDà#'ˆGÜ& |°W¸dÓCˆIÙœZ¨	´7·=±=ÔAÜ—‘×,Ñ,¨Z¸ÔFà%.×%<Ñ%<Ø)2×)DÑ)DØ$-×$:Ñ$:Ø"&Ø+3×+=Ñ+=Ó+?À*×BVÑBVÓBXÑ+XØ'×1Ñ1Ó3Ø#×-Ñ-Ó/ñ�ð  0×3Ñ3°KÐARÓSˆIð ,×/Ñ/°Ó?ˆLñ Ø3?×3EÑ3EÀcÓ3JÖX¨aÈaÏgÉgÍi §¡¥	ÐX�ÐXð ,×/Ñ/°	Ó:Ø 0× 4Ñ 4°^Ó DØ ,ñ&ˆOð &Ø 
Ñ+Ø3Ø,5¸uÑ#Eñ	#ˆLð  ×#Ñ# NÓ3Ð;Ø'+�˜VÑ$ð .×3Ñ3Ó5ò .‘
��UÚØ(-�L Ò%ð.ð Ð"ØFMÖ)N¸F¨&¯+©+­-Ò)N�˜XÒ&à)/�˜XÑ&àÐ"Ø*1�˜YÑ'ð1ÜØEÀd×FnÑFn×FsÑFsÐEtÐuôð ×8Ñ8×=Ñ=ØŸ=™=˜/¨¸
°|À7ÐKØ" \ NÐ3Ø ŸL™Lð >ô ð
 ×$Ò$Ü!Ð"TÕUð %ùòU  Yùò4 *Oøô$ ×(Ñ(ò 1Ü §
¡
§¡Ó0Ð0ûð1ûäò 	ØˆGûð	úso   —H)S ÉS ÉC?S ÍQ=ÍQ=Í-A!S ÏS ÏRÏ3S ÐA4R Ñ=
S ÒR>ÒR9Ò9R>Ò>S Ó	SÓ
SÓSc              ƒ   óú	  K  — t        j                  d«       	 |j                  d«      }|j                  di «      }d|j                  d«      i}d }g }	|�2|j                  dd «      dk(  st        |t        j
                  «      rd }nž|�9t        |t        j                  «      r|d   d   d	   j                  «       }|d   }	nc|�@t        |t        j                  «      r&|j                  d   j                  }|j                  }	n!|�t        |t        j                  «      r|d
   }|j                  di «      }
|
j                  di «      xs i }|j                  d«      }|€.|j                  d«      }|r| j                  |«      ƒ d {  –—† nd }|€0| j                  €| j                  «       ƒ d {  –—†  | j                  }g }t        |t        «      r‰|j!                  «       D ]v  \  }}t        j"                  �Ft        t        j"                  t$        «      r(|t        j"                  v r|j'                  |› d|› �«       t        |t(        «      sŒm||vsŒr|||<   Œx |j                  dd «      }d }t+        |dd «      }|rÇt        |t        j,                  «      r­t        j.                  j1                  ||«       |j2                  |j4                  |j6                  ||j9                  «       |j9                  «       dœ}|j                  d«      }|j                  d«      }|�&|�$|j9                  «       |j9                  «       z
  |d<   |j                  dd«      }|j                  d«      }|r=|j;                  d«      D �cg c]#  }|j=                  «       sŒ|j=                  «       ‘Œ% }}|j                  d«      |j                  d«      |dœ}||d   |||ddœdœ}|j                  d«      €||d <   |j!                  «       D ]  \  }}|sŒ	|||<   Œ |	�"|	D �cg c]  }|j                  «       ‘Œ c}|d!<   n||d!<   |�||d"<   	 | j>                  jA                  | jB                  › d#|› d$�d%|gi| jD                  ¬&«      ƒ d {  –—†  | jF                  rtI        d'«       y y 7 �Œ7 �Œðc c}w c c}w 7 Œ-# tJ        jL                  $ r$}tO        |jP                  j                  «      ‚d }~ww xY w# tN        $ r}|‚d }~ww xY w­w)(NrR   rS   rT   rU   rV   rW   rX   r   rY   rZ   r[   r\   rD   r5   r]   r^   r_   )r`   ra   rb   rc   re   rf   Úapi_call_start_timeÚcompletion_start_timerd   rg   rh   ri   rj   rk   rl   rm   rn   ro   )r;   rq   rt   r\   rr   rs   rt   ru   rv   rw   rx   ry   z1[BRAINTRUST MOCK] Async event successfully mocked))r   r{   r|   r}   rK   r~   r   r:   r€   rX   rA   r�   rH   r(   rN   r‚   rƒ   r„   r…   r1   r†   r‡   rˆ   r‰   rŠ   r`   ra   rb   r‹   rŒ   r�   r,   r=   r   r)   r#   r   r>   r?   r3   r@   )r.   rŽ   r�   r�   r‘   rS   rT   r’   rt   rX   r[   r“   rD   r5   rs   r”   r•   r–   ru   r—   r�   rž   rg   ri   r˜   rr   r™   rš   rE   s                                r   Úasync_log_success_eventz(BraintrustLogger.async_log_success_eventþ   s  è ø€ Ü×ÑÐ9Ô:ð|	Ø%+§Z¡ZÐ0AÓ%BˆOØ-3¯Z©ZÐ8QÐSUÓ-VÐ#Ø'¨¯©°JÓ)?Ð@ˆFØˆFØˆGØÐ'Ø—
‘
˜;¨Ó-°Ò<Ä
È<ÔY`×YrÑYrÔ@sà‘ØÐ)¬j¸Äw×G\ÑG\Ô.]Ø% iÑ0°Ñ3°IÑ>×CÑCÓE�Ø& yÑ1‘ØÐ)¬j¸Äw×GeÑGeÔ.fØ%×-Ñ-¨aÑ0×5Ñ5�Ø&×.Ñ.‘ØÐ)¬j¸Äw×G\ÑG\Ô.]Ø% fÑ-�à$*§J¡JÐ/?ÀÓ$DˆNØ&4×&8Ñ&8¸ÀRÓ&HÒ&NÈBÐð *×-Ñ-¨lÓ;ˆJØÐ!Ø&6×&:Ñ&:¸>Ó&J�ÙNZ 4×#<Ñ#<¸\Ó#J×JÐJÐ`d�
àÐ!Ø×*Ñ*Ð2Ø×DÑDÓF×FÐFØ!×4Ñ4�
àˆDäÐ*¬DÔ1Ø"2×"8Ñ"8Ó":ò =‘J�C˜ô  ×5Ñ5ÐAÜ&¤w×'DÑ'DÄdÔKØ¤7×#@Ñ#@Ñ@àŸ™ s e¨1¨U¨GÐ$4Ô5ô # 5¬#Õ.°3Ð>UÒ3Uà7<Ð/°Ò4ð=ð !Ÿ*™* _°dÓ;ˆDà#'ˆGÜ& |°W¸dÓCˆIÙœZ¨	´7·=±=ÔAÜ—‘×,Ñ,¨Z¸ÔFà%.×%<Ñ%<Ø)2×)DÑ)DØ$-×$:Ñ$:Ø"&Ø'×1Ñ1Ó3Ø#×-Ñ-Ó/ñ�ð .4¯Z©ZÐ8MÓ-NÐ#Ø/5¯z©zÐ:QÓ/RÐ%à&Ð2Ð7LÐ7XØ5J×5TÑ5TÓ5VÐYl×YvÑYvÓYxÑ5x�GÐ1Ñ2ð  0×3Ñ3°KÐARÓSˆIð ,×/Ñ/°Ó?ˆLñ Ø3?×3EÑ3EÀcÓ3JÖX¨aÈaÏgÉgÍi §¡¥	ÐX�ÐXð ,×/Ñ/°	Ó:Ø 0× 4Ñ 4°^Ó DØ ,ñ&ˆOð &Ø 
Ñ+Ø Ø3Ø,5¸uÑ#Eñ#ˆLð  ×#Ñ# NÓ3Ð;Ø'+�˜VÑ$ð .×3Ñ3Ó5ò .‘
��UÚØ(-�L Ò%ð.ð Ð"ØFMÖ)N¸F¨&¯+©+­-Ò)N�˜XÒ&à)/�˜XÑ&àÐ"Ø*1�˜YÑ'ð	1Ø×9Ñ9×>Ñ>ØŸ=™=˜/¨¸
°|À7ÐKØ" \ NÐ3Ø ŸL™Lð ?ó ÷ ð ð
 ×$Ò$Ü!Ð"UÕVð %ð{ Kùð Gûòb  Yùò6 *Oðùô ×(Ñ(ò 1Ü §
¡
§¡Ó0Ð0ûð1ûäò 	ØˆGûð	üs¶   ‚S;™E.S( ÆRÆ'S( Æ/RÆ0BS( ÉS( ÉD)S( Í=R"ÎR"Î%A"S( ÐS( ÐR'Ð,S( Ñ >R. Ñ>R,Ñ?R. ÒS;ÒS( ÒS( Ò"
S( Ò,R. Ò.S%ÓS Ó S%Ó%S( Ó(	S8Ó1S3Ó3S8Ó8S;c                 ó(   •— t         ‰| �  ||||«      S )N)r!   Úlog_failure_event)r.   rŽ   r�   r�   r‘   r/   s        €r   r¡   z"BraintrustLogger.log_failure_event~  s   ø€ Ü‰wÑ(¨°¸zÈ8ÓTÐTr   )NN)Ú__name__Ú
__module__Ú__qualname__r†   r"   r%   rF   rH   rN   rP   r›   rŸ   r¡   Ú__classcell__)r/   s   @r   r   r   $   sŒ   ø„ ñA  d¡
ð A¸SÀ4¹Zð AÐSWõ Að$L¨C°$©Jó LðN°ð N¸ó Nð*N°sð N¸só Nò(5ò5ò|ò|~÷@Uð Ur   r   )r&   r   Útypingr   r>   rK   r   Ú+litellm.integrations.braintrust_mock_clientr   r   Ú"litellm.integrations.custom_loggerr   Ú&litellm.llms.custom_httpx.http_handlerr	   r
   r   Úlitellm.utilsr   r   Ú__annotations__r   r   © r   r   ú<module>r­      sQ   ðô 
Ý Ý ã ã Ý "÷õ <÷ñ õ
 (à5€ˆ%Ó 5ò!ô[U�|õ [Ur   