Ë
    tPêji~  ã                  óH  — U d dl m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	m	Z	m
Z
mZ d dlmZmZmZmZ d dlZd dlmZmZ d dl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 d dl m!Z! d dl"m#Z#m$Z$m%Z% dZ&de'd<   dZ(de'd<    G d„ ded¬«      Z) G d„ de«      Z* G d„ de«      Z+y)é    )ÚannotationsN)ÚMappingÚSequence)ÚdatetimeÚtimezoneÚtzinfo)ÚAnyÚFinalÚ	TypedDictÚcast)Ú	BaseModelÚField)Úverbose_logger)ÚCustomLogger)Úconvert_content_list_to_strÚget_content_from_model_response)Úget_async_httpx_clientÚhttpxSpecialProvider)ÚIntegrationHealthCheckStatus)ÚAllMessageValuesÚHttpxBinaryResponseContentÚResponsesAPIResponsezhttps://api.galileo.air
   ÚGALILEO_CLOUD_API_BASE_URLéè  ÚGALILEO_MAX_IN_MEMORY_RECORDSc                  ó^   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   y)ÚGalileoStandardLoggingFieldsÚstrÚ	call_typeÚmodelÚintÚprompt_tokensÚcompletion_tokensÚtotal_tokensÚfloatÚresponse_costÚ	startTimeÚendTimeN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/galileo.pyr   r   &   s/   … ØƒNØƒJØÓØÓØÓØÓØÓØ„Nr.   r   F)Útotalc                  óÞ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<    edd¬«      Zded<    edd¬«      Zded<    edd¬«      Zded<   dZded<   dZ	ded<   y)ÚLLMResponser!   Ú
latency_msÚstatus_coder   Ú
input_textÚoutput_textÚ	node_typer    Únum_input_tokensÚnum_output_tokensÚnum_total_tokensNz9Total cost of the LLM call in USD as computed by LiteLLM.)ÚdefaultÚdescriptionzfloat | NoneÚcostzCOptional. When available, logprobs are used to compute Uncertainty.zdict[str, object] | NoneÚoutput_logprobs.z3timestamp constructed in "%Y-%m-%dT%H:%M:%S" format)r<   Ú
created_atzlist[str] | NoneÚtagsÚuser_metadata)
r)   r*   r+   r,   r   r=   r>   r?   r@   rA   r-   r.   r/   r2   r2   1   s�   … ØƒOØÓØƒOØÓØƒNØƒJØÓØÓØÓÙØØOô€Dˆ,ó ñ 16ØØYô1€OÐ-ó ñ ˜CÐ-bÔc€J�ÓcØ!€DÐ
Ó!Ø.2€MÐ+Ô2r.   r2   c                  óN  — e Zd Zd$d„Zed%d„«       Zd&d„Zd'd„Zd$d„Zd&d„Z	ed(d„«       Z
ed)d„«       Zed*d	„«       Zed+d
„«       Zed,d„«       Ze	 	 	 	 	 	 	 	 d-d„«       Zed,d„«       Zd.d„Zd/d„Zed0d„«       Zd$d„Zed1d„«       Zd2d„Zed3d„«       Zed4d„«       Zed5d„«       Zed6d„«       Zed7d„«       Ze	 	 	 	 d8d„«       Ze	 	 	 	 d9d„«       Zed:d„«       Z	 	 d;	 	 	 	 	 	 	 	 	 d<d„Zd=d„Z ed>d„«       Z!	 	 	 	 	 	 	 	 	 	 d?d „Z"	 	 	 	 	 	 	 	 	 	 d@d!„Z#d$d"„Z$	 	 	 	 	 	 	 	 	 	 d?d#„Z%y)AÚGalileoObservec                ó<  — g | _         d| _        t        j                  d«      | _        t        j                  d«      | _        t        j                  d«      | _        t        j                  d«      | _        t        j                  d«      | _        | j                  t        j                  d«      «      | _
        | j                  r| j                  st        | _
        t        | j                  «      | _        d | _        t        t         j"                  ¬«      | _        y )	Né   ÚGALILEO_API_KEYÚGALILEO_PROJECT_IDÚGALILEO_LOG_STREAM_IDÚGALILEO_USERNAMEÚGALILEO_PASSWORDÚGALILEO_BASE_URL)Úllm_provider)Úin_memory_recordsÚ
batch_sizeÚosÚgetenvÚapi_keyÚ
project_idÚlog_stream_idÚusernameÚpasswordÚ_normalize_base_urlÚbase_urlr   ÚboolÚ
use_v2_apiÚheadersr   r   ÚLoggingCallbackÚasync_httpx_handler©Úselfs    r/   Ú__init__zGalileoObserve.__init__I   sÂ   € Ø=?ˆÔØˆŒÜ—y‘yÐ!2Ó3ˆŒÜŸ)™)Ð$8Ó9ˆŒÜŸY™YÐ'>Ó?ˆÔÜŸ	™	Ð"4Ó5ˆŒÜŸ	™	Ð"4Ó5ˆŒØ×0Ñ0´·±Ð;MÓ1NÓOˆŒØ�<Š< §¢Ü6ˆDŒMÜ˜tŸ|™|Ó,ˆŒØ.2ˆŒÜ#9ÔG[×GkÑGkÔ#lˆÕ r.   c                ó*   — | r| j                  d«      S y )Nú/)Úrstrip)rW   s    r/   rV   z"GalileoObserve._normalize_base_urlX   s   € áØ—?‘? 3Ó'Ð'Ør.   c                ó¼   — | j                   r| j                  sy| j                  rt        | j                  «      S t        | j
                  xr | j                  «      S )NF)rR   rW   rY   rX   rQ   rT   rU   r]   s    r/   Ú_is_configuredzGalileoObserve._is_configured^   s@   € Ø�Š d§m¢mØØ�?Š?Ü˜Ÿ™Ó%Ð%Ü�D—M‘MÒ3 d§m¡mÓ4Ð4r.   c              ƒ  óT  K  — 	 | j                   st        dd¬«      S | j                  st        dd¬«      S | j                  s%| j                  r| j
                  st        dd¬«      S | j                  «       ƒ d {  –—† st        dd¬«      S | j                  j                  | j                  › d�| j                  ¬«      ƒ d {  –—† }|j                  d	k\  rt        dd
|j                  › �¬«      S t        dd ¬«      S 7 Œƒ7 Œ<# t        $ r}t        dd|› �¬«      cY d }~S d }~ww xY w­w)NÚ	unhealthyz/GALILEO_PROJECT_ID environment variable not set)ÚstatusÚerror_messagez-GALILEO_BASE_URL environment variable not setzZGALILEO_API_KEY or GALILEO_USERNAME and GALILEO_PASSWORD environment variables must be setzGalileo authentication failedz/current_user)ÚurlrZ   i�  zGalileo API returned HTTP ÚhealthyzGalileo health check failed: )rR   r   rW   rY   rT   rU   Ú_ensure_headersr\   ÚgetrZ   r4   Ú	Exception)r^   ÚresponseÚes      r/   Úasync_health_checkz!GalileoObserve.async_health_checke   s?  è ø€ ð*	Ø—?’?Ü3Ø&Ø"Sôð ð
 —=’=Ü3Ø&Ø"Qôð ð
 —?’?¨D¯MªMÀÇÂÜ3Ø&àtôð ð ×-Ñ-Ó/×/Ð/Ü3Ø&Ø"Aôð ð
 %)×$<Ñ$<×$@Ñ$@Ø—}‘}�o ]Ð3ØŸ™ð %Aó %÷ ˆHð ×#Ñ# sÒ*Ü3Ø&Ø%?À×@TÑ@TÐ?UÐ#Vôð ô
 0°yÐPTÔUÐUð! 0øðùô ò 	Ü/Ø"Ø =¸a¸SÐAôõ ûð	üs�   ‚D(„D œD(�D µD(¶0D Á&D(Á'D Á:C>Á;D ÂD(Â7D ÃD Ã,D Ã0D(Ã1D Ã=D(Ã>D Ä D Ä	D%ÄD ÄD%ÄD(Ä D%Ä%D(c              ƒ  ó  K  — | j                   j                  | j                  › d�dddœ| j                  | j                  dœ¬«      ƒ d {  –—† }|j                  «        |j                  «       d   }ddd|› �d	œ| _        y 7 Œ6­w)
Nz/loginúapplication/jsonz!application/x-www-form-urlencoded)ÚacceptúContent-Type)rT   rU   )ri   rZ   ÚdataÚaccess_tokenzBearer )rs   rt   ÚAuthorization)r\   ÚpostrW   rT   rU   Úraise_for_statusÚjsonrZ   )r^   Úgalileo_login_responserv   s      r/   Úasync_set_galileo_headersz(GalileoObserve.async_set_galileo_headers’   s•   è ø€ Ø.2×.FÑ.F×.KÑ.KØ—=‘=�/ Ð(à,Ø Cñð
 !ŸM™MØ ŸM™Mñð /Ló 
/
÷ 
)
Ðð 	×/Ñ/Ô1Ø4×9Ñ9Ó;¸NÑKˆà(Ø.Ø& | nÐ5ñ
ˆ�ð
)
ús   ‚A	BÁBÁ7Bc              ƒ  ó\  K  — | j                   �y| j                  r#| j                  sydd| j                  dœ| _         y| j                  r| j                  r| j
                  sy	 | j                  «       ƒ d {  –—†  y7 Œ# t        $ r }t        j                  d|«       Y d }~yd }~ww xY w­w)NTFrr   )rs   rt   zGalileo-API-Keyz*Galileo Logger: failed to authenticate: %s)
rZ   rY   rQ   rT   rU   rW   r|   rm   r   Údebug)r^   ro   s     r/   rk   zGalileoObserve._ensure_headers¦   s—   è ø€ Ø�<‰<Ð#Øà�?Š?Ø—<’<Øà,Ø 2Ø#'§<¡<ñˆDŒLð
 à—’ $§-¢-°D·M²MØð	Ø×0Ñ0Ó2×2Ð2Øð 3ùäò 	Ü× Ñ Ð!MÈqÔQÜûð	üsB   ‚A"B,Á%B  Á8A>Á9B  Á=B,Á>B  Â 	B)Â	B$ÂB,Â$B)Â)B,c           
     óZ  — t        | t        «      r| j                  d«      } | sd|dœgS t        | t        «      sd|dœgS g }| D ]\  }t        |t        «      sŒ|j                  d«      }|sŒ(|j	                  t        |«      t        t        t        |«      ¬«      dœ«       Œ^ |r|S d|dœgS )NÚmessagesÚuser©ÚroleÚcontentrƒ   )Úmessage)	Ú
isinstanceÚdictrl   ÚlistÚappendr   r   r   r   )r€   r5   Úgalileo_messagesr…   rƒ   s        r/   Ú_galileo_input_messagesz&GalileoObserve._galileo_input_messages¾   s½   € ä�h¤Ô%Ø—|‘| JÓ/ˆHÙØ#°
Ñ;Ð<Ð<Ü˜(¤DÔ)Ø#°
Ñ;Ð<Ð<à8:ÐØò 	ˆGÜ˜g¤tÔ,ØØ—;‘;˜vÓ&ˆDÙØØ×#Ñ#ä ›IÜ:Ä4ÔHXÐZaÓCbÔcñõð	ñ Ø#Ð#Ø¨JÑ7Ð8Ð8r.   c                 ó~   — t        j                  «       j                  «       j                  xs t        j
                  S )N)r   ÚnowÚ
astimezoner   r   Úutcr-   r.   r/   Ú_local_timezonezGalileoObserve._local_timezoneÙ   s&   € ä�|‰|‹~×(Ñ(Ó*×1Ñ1ÒA´X·\±\ÐAr.   c                óô   — t        | t        «      st        | «      S | j                  €$| j	                  t
        j                  «       ¬«      } | j                  t        j                  «      j                  d«      S )z1Serialize timestamps as UTC ISO-8601 for Galileo.©r   z%Y-%m-%dT%H:%M:%SZ)r†   r   r   r   ÚreplacerC   r�   rŽ   r   r�   Ústrftime)Údts    r/   Ú_format_created_atz!GalileoObserve._format_created_atÝ   s[   € ô ˜"œhÔ'Ü�r“7ˆNà�9‰9Ðð —‘¤>×#AÑ#AÓ#C�ÓDˆBà�}‰}œXŸ\™\Ó*×3Ñ3Ð4HÓIÐIr.   c                ó@   — | rt        j                  d| «      s| › d�S | S )Nz(Z|[+-]\d{2}:?\d{2})$ÚZ)ÚreÚsearch)r?   s    r/   Ú_normalize_created_atz$GalileoObserve._normalize_created_atê   s&   € áœbŸi™iÐ(@À*ÔMØ �\ Ð#Ð#ØÐr.   c                ó$  — t        | j                  d«      xs d«      }t        | j                  d«      xs d«      }t        | j                  d«      xs d«      }|dk(  r	|s|r||z   }|||dœ}| j                  d«      }|�t        |«      |d<   |S )Nr8   r   r9   r:   )r8   r9   r:   r=   )r!   rl   r%   )Úrecordr8   r9   r:   Úmetricsr=   s         r/   Ú_token_metrics_from_recordz)GalileoObserve._token_metrics_from_recordð   s¢   € ä"% f§j¡jÐ1CÓ&DÒ&IÈÓ"JÐÜ#& v§z¡zÐ2EÓ'FÒ'KÈ!Ó#LÐÜ˜vŸz™zÐ*<Ó=ÒBÀÓCÐØ˜qÒ Ñ&6Ñ:KØ/Ð2CÑCÐà 0Ø!2Ø 0ñ-
ˆð
 —j‘j Ó(ˆØÐÜ# D›kˆG�F‰OØˆr.   c               óî  — t         j                  | j                  dd«      «      }d|||| j                  dd«      |t         j                  | j                  d«      | j                  dd«      «      d| j                  d	d«      d
œ| j                  dd«      | j                  d«      dt	        | j                  dd«      «      dz  it         j                  | «      ¥dœ}| j                  d«      r| d   |d<   |S )Nr?   Ú Úllmr7   Úlitellmr€   r5   Ú	assistantr6   r‚   r4   éÈ   r    Úduration_nsr3   r   é@B )ÚtypeÚidÚtrace_idÚ	parent_idÚnamer?   ÚinputÚoutputr4   r    rž   r@   )rC   r›   rl   r‹   r!   rŸ   )r�   rª   Úspan_idr?   Úspans        r/   Ú_record_to_v2_spanz!GalileoObserve._record_to_v2_span  só   € ô +×@Ñ@ÀÇÁÈLÐZ\ÓA]Ó^ˆ
ð ØØ Ø!Ø—J‘J˜{¨IÓ6Ø$Ü#×;Ñ;¸F¿J¹JÀzÓ<RÐTZ×T^ÑT^Ð_kÐmoÓTpÓqà#Ø!Ÿ:™: m°RÓ8ñð "Ÿ:™: m°SÓ9Ø—Z‘Z Ó(àœs 6§:¡:¨l¸AÓ#>Ó?À)ÑKðä ×;Ñ;¸FÓCðñ*
ˆð& �:‰:�fÔØ! &™>ˆD�‰LØˆr.   c                óì  — t        t        j                  «       «      }t        t        j                  «       «      }t        j	                  | j                  dd«      «      }d|| j                  dd«      || j                  dd«      | j                  dd«      | j                  dd	«      d
t        | j                  dd«      «      dz  it        j                  | «      ¥t        j                  | ||¬«      gdœ	S )Nr?   r¡   Útracer7   r£   r5   r6   r4   r¥   r¦   r3   r   r§   )rª   r¯   )	r¨   r©   r¬   r?   r­   r®   r4   rž   Úspans)	r   ÚuuidÚuuid4rC   r›   rl   r!   rŸ   r±   )r�   rª   r¯   r?   s       r/   Ú_record_to_v2_tracez"GalileoObserve._record_to_v2_trace!  sØ   € äœdŸj™j›lÓ+ˆÜœTŸZ™Z›\Ó*ˆÜ*×@Ñ@ÀÇÁÈLÐZ\ÓA]Ó^ˆ
ð ØØ—J‘J˜{¨IÓ6Ø$Ø—Z‘Z ¨bÓ1Ø—j‘j °Ó3Ø!Ÿ:™: m°SÓ9àœs 6§:¡:¨l¸AÓ#>Ó?À)ÑKðä ×;Ñ;¸FÓCðô %×7Ñ7¸ÈÐ[bÐ7ÓcÐdñ
ð 	
r.   c                óŽ   — |D �cg c]  }| j                  |«      ‘Œ c}ddddœ}| j                  r| j                  |d<   |S c c}w )NÚ
api_directFT)ÚtracesÚlogging_methodÚreliableÚis_completerS   )r·   rS   )r^   Úrecordsr�   Úpayloads       r/   Ú_build_traces_payloadz$GalileoObserve._build_traces_payload6  sQ   € àFMÖN¸F�t×/Ñ/°Õ7ÒNØ*ØØñ	-
ˆð ×ÒØ'+×'9Ñ'9ˆG�OÑ$Øˆùò Os   …Ac                ó  — | j                   r| j                  sy t        | j                  «      }| j	                  |«      }| j
                  r| j                   › d| j                  › �|fS | j                   › d| j                  › d�|fS )Nú/ingest/traces/z/v2/projects/z/traces)rW   rR   rˆ   rM   rÀ   rY   )r^   r¾   r¿   s      r/   Ú_get_ingest_requestz"GalileoObserve._get_ingest_requestA  s‡   € Ø�}Š} D§O¢OØô ˜d×4Ñ4Ó5ˆØ×3Ñ3°GÓ<ˆà�?Š?à—=‘=�/ °·±Ð0AÐBØðð ð �}‰}ˆo˜]¨4¯?©?Ð*;¸7ÐCØð
ð 	
r.   c                ó¶   — | si S i }| j                  «       D ]?  \  }}|j                  «       dv r#|r!t        |«      dkD  r|d d › d|dd  › �nd||<   Œ;|||<   ŒA |S )N>   úgalileo-api-keyÚauthorizationé   é   z...éüÿÿÿz***)ÚitemsÚlowerÚlen)rZ   ÚredactedÚkeyÚvalues       r/   Ú_redact_headerszGalileoObserve._redact_headersX  sv   € áØˆIØ*,ˆØ!Ÿ-™-›/ò 	&‰JˆC�Ø�y‰y‹{ÐBÑBÁuÜADÀUÃÈbÂ 5¨¨! 9 +¨S°°r°s°°Ñ =ÐV[�˜’à %�˜’ð		&ð
 ˆr.   c                óþ   — t        j                  d| j                  | j                  | j                  | j
                  t        | j                  «      t        | j                  «      t        | j                  «      «       y )Nz„Galileo Logger flush config: use_v2_api=%s base_url=%s project_id=%s log_stream_id=%s api_key_set=%s username_set=%s record_count=%s)r   r~   rY   rW   rR   rS   rX   rQ   rT   rÌ   rM   r]   s    r/   Ú_log_flush_configz GalileoObserve._log_flush_configd  sZ   € Ü×ÑðNà�O‰OØ�M‰MØ�O‰OØ×ÑÜ�—‘ÓÜ�—‘ÓÜ�×&Ñ&Ó'õ
	
r.   c                óH  — g }| j                  dg «      }|s|j                  d«       t        |«      D ]Ô  \  }}t        |t        «      sŒdD ]  }||vsŒ|j                  d|› d|› �«       Œ  |j                  d«      }t        |j                  dg «      «      D ]l  \  }}t        |t        «      sŒdD ]!  }||vsŒ|j                  d|› d|› d|› �«       Œ# |sŒ@|j                  d	«      |k7  sŒU|j                  d|› d|› d
�«       Œn ŒÖ |rt        j                  d|«       y y )Nrº   )r©   r¨   r´   ztraces[z].r©   r´   )r©   rª   r«   z].spans[rª   z].trace_id mismatchz<Galileo Logger: ingest /traces payload validation issues: %s)rl   r‰   Ú	enumerater†   r‡   r   r~   )	r¿   Úmissing_fieldsrº   Útrace_indexr³   Úfieldrª   Ú
span_indexr°   s	            r/   Ú_log_v2_payload_validationz)GalileoObserve._log_v2_payload_validationq  sT  € à+-ˆØ*1¯+©+°hÀÓ*CˆÙØ×!Ñ! (Ô+ä"+¨FÓ"3ò 	jÑˆK˜Ü˜e¤TÔ*ØØ0ò L�Ø Ò%Ø"×)Ñ)¨G°K°=ÀÀ5À'Ð*JÕKðLð —y‘y “ˆHÜ$-¨e¯i©i¸ÀÓ.DÓ$Eò jÑ �
˜DÜ! $¬Ô-ØØ<ò d�EØ DÒ(Ø&×-Ñ-°¸°}ÀHÈZÈLÐXZÐ[`ÐZaÐ.bÕcðdò  §¡¨Ó 4¸Ó @Ø"×)Ñ)¨G°K°=ÀÈÈÐTgÐ*hÕiñjð	jñ" Ü× Ñ ØNØõð r.   c                óÒ   — |j                  dg «      }t        j                  d|t        |t        «      rt        |«      nd«       | j                  rd|v r| j                  |«       y y y )Nrº   z+Galileo Logger flush URL: %s trace_count=%sr   rÂ   )rl   r   r~   r†   rˆ   rÌ   rY   rÙ   )r^   ri   r¿   rº   s       r/   Ú_log_flush_payloadz!GalileoObserve._log_flush_payload�  s^   € Ø*1¯+©+°hÀÓ*CˆÜ×ÑØ9ØÜ% f¬dÔ3ŒC�ŒK¸ô	
ð
 �?Š?Ð0°CÑ7Ø×+Ñ+¨GÕ4ð  8ˆ?r.   c                ó  — | j                   }t        j                  d|j                  |«       t        j                  d|j                  «       	 t        j                  d|j                  «       «       y # t        $ r Y y w xY w)Nz+Galileo Logger HTTP error: status=%s url=%sz+Galileo Logger HTTP error response body: %sz+Galileo Logger HTTP error response json: %s)rn   r   r~   r4   Útextrz   rm   )Úerrorri   rn   s      r/   Ú_log_http_status_errorz%GalileoObserve._log_http_status_error™  su   € àŸ.™.ˆÜ×ÑØ9Ø× Ñ Øô	
ô
 	×ÑØ9Ø�M‰Mô	
ð	Ü× Ñ Ø=Ø—‘“õøô ò 	Ùð	ús   Á$A4 Á4	B Á?B c                ó¼   — | j                  di «      xs i }d| j                  d«      i}|j                  d«      �|d   |d<   |j                  d«      �|d   |d<   |S )NÚoptional_paramsr€   Ú	functionsÚtools©rl   )Úkwargsrá   Úprompts      r/   Ú_build_promptzGalileoObserve._build_prompt­  sq   € à7=·z±zÐBSÐUWÓ7XÒ7^Ð\^ˆØ,6¸¿
¹
À:Ó8NÐ+OˆØ×Ñ˜{Ó+Ð7Ø"1°+Ñ">ˆF�;ÑØ×Ñ˜wÓ'Ð3Ø-¨gÑ6ˆF�7‰OØˆr.   c                ób   — | €yt        | t        «      r| S dd„}t        j                  | |¬«      S )Nr¡   c                óP   — t        | d«      r| j                  «       S t        | «      S )NÚ
model_dump)Úhasattrrê   r   )Úobjs    r/   Ú_json_defaultz?GalileoObserve._serialize_galileo_output.<locals>._json_default¾  s"   € Ü�s˜LÔ)Ø—~‘~Ó'Ð'Ü�s“8ˆOr.   ©r;   )rì   r	   ÚreturnÚobject)r†   r   rz   Údumps)rÏ   rí   s     r/   Ú_serialize_galileo_outputz(GalileoObserve._serialize_galileo_output·  s1   € àˆ=ØÜ�eœSÔ!ØˆLó	ô
 �z‰z˜%¨Ô7Ð7r.   c                ó�   — | j                  d«      }|�t        j                  |«      }|r|S t        j                  | t
        ¬«      S )Nr€   rî   )rl   rC   Ú_input_text_from_messagesrz   rñ   r   )ræ   r€   rÝ   s      r/   Ú_prompt_to_input_textz$GalileoObserve._prompt_to_input_textÅ  s?   € à"(§*¡*¨ZÓ"8ˆØÐÜ(×BÑBÀ8ÓLˆDÙØ�Ü�z‰z˜&¬#Ô.Ð.r.   c                óì   — | j                   rht        | j                   «      dkD  rP| d   d   d   }t        |d«      r7|j                  «       }t	        |t
        «      rt        j                  |«      S |S |S y )Nr   Úchoicesr…   rz   )r÷   rÌ   rë   rz   r†   r   Úloads)Úresponse_objr…   Úmessage_jsons      r/   Ú_get_chat_content_for_galileoz,GalileoObserve._get_chat_content_for_galileoÎ  sm   € à×Ò¤C¨×(<Ñ(<Ó$=ÀÒ$AØ)¨)Ñ4°QÑ7¸	ÑBˆGÜ�w Ô'Ø.5¯l©l«n�Ü˜l¬CÔ0ÜŸ:™: lÓ3Ð3Ø#Ð#ØˆNØr.   c                ó~   — | j                   r1t        | j                   «      dkD  r| j                   d   j                  S y )Nr   )r÷   rÌ   rÝ   ©rù   s    r/   Ú(_get_text_completion_content_for_galileoz7GalileoObserve._get_text_completion_content_for_galileoÚ  s9   € ð ×Ò¤C¨×(<Ñ(<Ó$=ÀÒ$AØ×'Ñ'¨Ñ*×/Ñ/Ð/Ør.   c                óL   — t        | d«      r| j                  r| j                  S y )Nr®   )rë   r®   rý   s    r/   Ú&_get_responses_api_content_for_galileoz5GalileoObserve._get_responses_api_content_for_galileoâ  s%   € ô �< Ô*¨|×/BÒ/BØ×&Ñ&Ð&Ør.   c                ó(   — d| j                  d«      iS )zKMatch Langfuse rerank input: prompt = {"messages": kwargs.get("messages")}.r€   rä   )rå   s    r/   Ú_langfuse_style_rerank_promptz,GalileoObserve._langfuse_style_rerank_promptê  s   € ð ˜FŸJ™J zÓ2Ð3Ð3r.   Nc                óÀ  — |j                  d«      }| j                  |«      }|dk(  r&|�$t        |t        «      r| j	                  |«      ||fS |�2|dv st        |t
        j                  «      r| j	                  |«      d|fS |�at        |t
        j                  «      rG| j                  |«      }| j	                  |«      | j                  |«      |j                  d«      xs g fS |�$t        |t        «      r| j	                  |«      d|fS |�at        |t
        j                  «      rG| j                  |«      }| j	                  |«      | j                  |«      |j                  d«      xs g fS |�Ot        |t
        j                  «      r5|j                  dd«      }| j	                  |«      | j                  |«      |fS |�Ot        |t
        j                  «      r5|j                  d	d«      }| j	                  |«      | j                  |«      |fS |�dt        |t
        j                  «      rJ|j                   }| j#                  |«      }t%        j&                  |t        ¬
«      | j                  |«      |fS |�Wt        |t(        «      rG| j+                  |«      }| j	                  |«      | j                  |«      |j                  d«      xs g fS |dk(  rF|�Dt        |t,        «      r4|j                  d«      }	| j                  |	«      | j                  |«      |	fS |dk(  rG|�Et        |t.        «      r5|j                  dd«      }| j	                  |«      | j                  |«      |fS |�Qt        |t.        «      rAt1        |«      }| j	                  |«      | j                  |«      |j                  d«      xs g fS | j	                  |«      d|j                  d«      xs g fS )z—
        Mirror Langfuse _get_langfuse_input_output_content for Galileo ingest.

        Returns (input_text, output_text, messages_for_span).
        r   ÚERRORN)Ú	embeddingÚ
aembeddingzembedding-outputr€   zspeech-outputru   rÝ   rî   Ú
_arealtimer­   Úpass_through_endpointrn   r¡   )rl   rç   r†   r   rõ   r£   ÚEmbeddingResponseÚModelResponserû   rò   r   ÚTextCompletionResponserþ   ÚImageResponseÚTranscriptionResponseÚRerankResponseÚresultsr  rz   rñ   r   r   rˆ   r‡   r   )
r^   rå   rù   ÚlevelÚstatus_messager   ræ   r®   Úrerank_promptÚ	input_vals
             r/   Ú!_get_galileo_input_output_contentz0GalileoObserve._get_galileo_input_output_contentï  sè  € ð "Ÿ:™: kÓ2ˆ	Ø×*Ñ*¨6Ó2ˆà�GÒ Ð :¼zÈ.ÔZ]Ô?^Ø×-Ñ-¨fÓ5°~ÀvÐMÐMàÐ#ØÐ4Ñ4¼
À<ÔQX×QjÑQjÔ8kð ×-Ñ-¨fÓ5Ð7IÈ6ÐQÐQàÐ#¬
°<Ä×AVÑAVÔ(WØ×7Ñ7¸ÓEˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Ø—
‘
˜:Ó&Ò,¨"ðð ð Ð#¬
°<ÔA[Ô(\Ø×-Ñ-¨fÓ5°ÈÐNÐNàÐ#¬
°<Ä×A_ÑA_Ô(`Ø×BÑBÀ<ÓPˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Ø—
‘
˜:Ó&Ò,¨"ðð ð Ð#¬
°<Ä×AVÑAVÔ(WØ!×%Ñ% f¨dÓ3ˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Øðð ð Ð#¬
°<Ä×A^ÑA^Ô(_Ø!×%Ñ% f¨dÓ3ˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Øðð ð Ð#¬
°<Ä×AWÑAWÔ(XØ!×)Ñ)ˆFØ#'×#EÑ#EÀfÓ#MˆMä—
‘
˜=´#Ô6Ø×.Ñ.¨vÓ6Øðð ð Ð#¬
°<ÔAUÔ(VØ×@Ñ@ÀÓNˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Ø—
‘
˜:Ó&Ò,¨"ðð ð ˜Ò$¨Ð)AÄjÐQ]Ô_cÔFdØ%Ÿz™z¨'Ó2ˆIà×.Ñ.¨yÓ9Ø×.Ñ.¨|Ó<Øðð ð Ð/Ò/°LÐ4LÔQ[Ð\hÔjnÔQoØ!×%Ñ% j°"Ó5ˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Øðð ð Ð#¬
°<ÄÔ(FÜ4°\ÓBˆFà×*Ñ*¨6Ó2Ø×.Ñ.¨vÓ6Ø—
‘
˜:Ó&Ò,¨"ðð ð ×)Ñ)¨&Ó1°2°v·z±zÀ*Ó7MÒ7SÐQSÐSÐSr.   c                ó4   — | j                  ||¬«      \  }}}|S )N©rå   rù   )r  )r^   rù   rå   Ú_r6   s        r/   Úget_output_str_from_responsez+GalileoObserve.get_output_str_from_responseU  s%   € Ø ×BÑBÈ&Ð_kÐBÓlÑˆˆ;˜ØÐr.   c                óD  — t        | t        «      r| S t        | t        «      syt        | «      D ]‹  }t        |t        «      sŒt        |j                  dd«      «      j                  «       dv sŒ@|j                  d«      xs d}t        |t        «      rdj                  d„ |D «       «      }|sŒ€t        |«      c S  | D ]_  }t        |t        «      sŒ|j                  d«      xs d}t        |t        «      rdj                  d„ |D «       «      }|sŒTt        |«      c S  y)zTReturn a plain-string summary of the input suitable for the trace-level input field.r¡   rƒ   )r�   Úhumanr„   ú c              3  óv   K  — | ]1  }t        |t        «      r|j                  d d«      n
t        |«      –— Œ3 y­w©rÝ   r¡   N©r†   r‡   rl   r   ©Ú.0Úbs     r/   ú	<genexpr>z;GalileoObserve._input_text_from_messages.<locals>.<genexpr>g  ó1   è ø€ Ò&mÐ`a¼JÀqÌ$Ô<O q§u¡u¨V°RÔ'8ÔUXÐYZÓU[Ó'[Ñ&mùó   ‚79c              3  óv   K  — | ]1  }t        |t        «      r|j                  d d«      n
t        |«      –— Œ3 y­wr  r  r  s     r/   r"  z;GalileoObserve._input_text_from_messages.<locals>.<genexpr>o  r#  r$  )r†   r   rˆ   Úreversedr‡   rl   rË   Újoin)r€   Úmsgr„   s      r/   rô   z(GalileoObserve._input_text_from_messagesY  s  € ô �h¤Ô$ØˆOÜ˜(¤DÔ)Øä˜HÓ%ò 	(ˆCÜ˜c¤4Ô(ØÜ�3—7‘7˜6 2Ó&Ó'×-Ñ-Ó/Ð3DÒDØŸ'™' )Ó,Ò2°�Ü˜g¤tÔ,Ø!Ÿh™hÑ&mÐelÔ&mÓm�GÚÜ˜w›<Ò'ð	(ð ò 	(ˆCÜ˜#œtÕ$ØŸ'™' )Ó,Ò2°�Ü˜g¤tÔ,Ø!Ÿh™hÑ&mÐelÔ&mÓm�GÚÜ˜w›<Ò'ð	(ð r.   c              ƒ  ó¾   K  — t        j                  d«       	 | j                  ||||¬«      ƒ d {  –—†  y 7 Œ# t        $ r t        j                  d«       Y y w xY w­w)NzOn Async Success)rå   rù   Ú
start_timeÚend_timez;Galileo Logger: unexpected error in async_log_success_event)r   r~   Ú_async_log_success_event_implrm   Ú	exception©r^   rå   rù   r*  r+  s        r/   Úasync_log_success_eventz&GalileoObserve.async_log_success_eventt  sg   è ø€ ô 	×ÑÐ/Ô0ð	dØ×4Ñ4ØØ)Ø%Ø!ð	 5ó ÷ ò ùô ò 	dÜ×$Ñ$Ð%bÖcð	düs1   ‚A™9 ±7²9 ¶A·9 ¹AÁAÁAÁAc              ƒ  óÂ  K  — | j                  «       sRt        j                  dt        | j                  «      t        | j
                  «      t        | j                  «      «       y |j                  d«      }|€t        j                  d«       y t        |j                  d«      xs |j                  d«      xs d«      }| j                  ||¬«      \  }}}	|j                  d«      }
|j                  d«      }|
�|€Ùt        j                  d	«       t        |t        «      rt        |t        «      sy |}|}|j                  €$|j                  t        j                  «       ¬
«      }|j                  €$|j                  t        j                  «       ¬
«      }|j!                  t"        j$                  «      }|j!                  t"        j$                  «      }n\t        j&                  t)        |
«      t"        j$                  ¬«      }t        j&                  t)        |«      t"        j$                  ¬«      }t+        dt-        ||z
  j/                  «       dz  «      «      }t-        |j                  d«      xs d«      }t-        |j                  d«      xs d«      }t-        |j                  d«      xs d«      }|dk(  r	|s|r||z   }t1        |d|||t        |j                  d«      xs |j                  d«      xs d«      ||||j                  d«      t        j3                  |«      ¬«      }|j5                  «       }t        |	t6        «      r|	j                  d«      }	t        |	t8        «      r|	r|	|d<   | j:                  j=                  |«       t        j                  dt?        | j:                  «      «       t?        | j:                  «      t@        kD  rPt?        | j:                  «      t@        z
  }| j:                  t@         d  | _        t        jB                  dt@        |«       t?        | j:                  «      | jD                  k\  r| jG                  «       ƒ d {  –—†  y y 7 Œ­w)NuY   Galileo Logger: skipping â€” GALILEO_PROJECT_ID=%s GALILEO_API_KEY=%s GALILEO_BASE_URL=%sÚstandard_logging_objectz>Galileo Logger: no standard_logging_object in kwargs, skippingr   r£   r  r'   r(   zmGalileo Logger: standard_logging_object missing startTime/endTime, falling back to start_time/end_time paramsr’   )Útzr   r   r"   r#   r$   r¥   r    ú-r&   )r3   r4   r5   r6   r7   r    r8   r9   r:   r=   r?   r€   z+Galileo Logger: queued record, in_memory=%dzzGalileo Logger: in-memory buffer exceeded %s records; dropped %s oldest record(s). Check Galileo connectivity/credentials.)$rd   r   r~   rX   rR   rQ   rW   rl   r   r  r†   r   r   r“   rC   r�   rŽ   r   r�   Úfromtimestampr%   Úmaxr!   Útotal_secondsr2   r–   rê   r‡   rˆ   rM   r‰   rÌ   r   ÚwarningrN   Úflush_in_memory_records)r^   rå   rù   r*  r+  ÚsloÚ
_call_typer5   r6   r€   Ú	raw_startÚraw_endÚstart_tsÚend_tsÚ_latency_msr8   r9   r:   Úrequest_recordÚrequest_dictÚdroppeds                        r/   r,  z,GalileoObserve._async_log_success_event_impl†  s­  è ø€ ð ×"Ñ"Ô$Ü× Ñ ØkÜ�T—_‘_Ó%Ü�T—\‘\Ó"Ü�T—]‘]Ó#ô	ð à:@¿*¹*ÐE^Ó:_ˆØˆ;Ü× Ñ Ð!aÔbØä!$ S§W¡W¨[Ó%9Ò%a¸V¿Z¹ZÈÓ=TÒ%aÐXaÓ!bˆ
à,0×,RÑ,RØ¨ð -Só -
Ñ)ˆ
�K ð *-¯©°Ó)=ˆ	Ø'*§w¡w¨yÓ'9ˆØÐ  Ü× Ñ ð=ôô ˜j¬(Ô3¼:ÀhÔPXÔ;YØØ!ˆHØˆFØ�‰Ð&Ø#×+Ñ+´>×3QÑ3QÓ3SÐ+ÓT�Ø�}‰}Ð$ØŸ™¬~×/MÑ/MÓ/O˜ÓP�Ø×*Ñ*¬8¯<©<Ó8ˆHØ×&Ñ&¤x§|¡|Ó4‰Fä×-Ñ-¬e°IÓ.>Ä8Ç<Á<ÔPˆHÜ×+Ñ+¬E°'«N¼x¿|¹|ÔLˆFÜ  ¤C¨°(Ñ):×(IÑ(IÓ(KÈdÑ(RÓ$SÓTˆÜ"% c§g¡g¨oÓ&>Ò&CÀ!Ó"DÐÜ#& s§w¡wÐ/BÓ'CÒ'HÀqÓ#IÐÜ˜sŸw™w ~Ó6Ò;¸!Ó<ÐØ˜qÒ Ñ&6Ñ:KØ/Ð2CÑCÐä +Ø"ØØ!Ø#Ø Ü�c—g‘g˜gÓ&ÒD¨&¯*©*°WÓ*=ÒDÀÓEØ-Ø/Ø-Ø—‘˜Ó)Ü%×8Ñ8¸ÓBô!
ˆð -×7Ñ7Ó9ˆÜ�h¤Ô%Ø—|‘| JÓ/ˆHÜ�h¤Ô%©(Ø'/ˆL˜Ñ$Ø×Ñ×%Ñ% lÔ3Ü×ÑÐJÌCÐPT×PfÑPfÓLgÔhô ˆt×%Ñ%Ó&Ô)FÒFÜ  ×!7Ñ!7Ó8Ô;XÑXˆGØ%)×%;Ñ%;Ô=ZÐ<ZÐ<[Ð%\ˆDÔ"Ü×"Ñ"ðWä-Øô	ô ˆt×%Ñ%Ó&¨$¯/©/Ò9Ø×.Ñ.Ó0×0Ñ0ð :Ø0ús   ‚QQÑQÑQc              ƒ  ó   K  — | j                   sy t        | j                   «      }| j                  «       }|€t        j                  d«       y | j                  «       ƒ d {  –—† st        j                  d«       y |\  }}| j                  «        | j                  ||¬«       t        j                  d| j                  | j                  «      «       t        j                  d|«       	 | j                  j                  || j                  |¬«      ƒ d {  –—† }|j                   rPt        j                  d	«       t        j                  d
|j"                  |j$                  «       | j                   d |…= y t        j                  d«       t        j                  d|j$                  |j"                  «       | j&                  s|j"                  dv rd | _	        y y y 7 �Œy7 ŒÇ# t        j                  $ r3}| j                  ||¬«       t        j                  d|«       Y d }~y d }~wt        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)NuQ   Galileo Logger: missing GALILEO_BASE_URL or GALILEO_PROJECT_ID â€” skipping flushu@   Galileo Logger: could not set request headers â€” skipping flush)ri   r¿   z Galileo Logger flush headers: %sz flushing in memory records to %s)ri   rZ   rz   )rÞ   ri   z5Galileo Logger: failed to flush in memory records: %sz6Galileo Logger: successfully flushed in memory recordsz0Galileo Logger flush response: status=%s body=%sz1Galileo Logger: failed to flush in memory recordsz'Galileo Logger error=%s, status code=%s)i‘  i“  )rM   rÌ   rÃ   r   r~   rk   rÒ   rÛ   rÐ   rZ   r\   rx   ÚhttpxÚHTTPStatusErrorrß   rm   Ú
is_successr4   rÝ   rY   )r^   Úrecords_in_payloadÚingest_requestri   r¿   rn   ro   s          r/   r8  z&GalileoObserve.flush_in_memory_recordsá  s  è ø€ Ø×%Ò%Øô
 %(¨×(>Ñ(>Ó$?Ðà $× 8Ñ 8Ó :ˆØÐ!Ü× Ñ Ð!tÔuØà×)Ñ)Ó+×+Ð+Ü× Ñ Ð!cÔdØà%‰ˆˆWØ×ÑÔ Ø×Ñ C°ÐÔ9Ü×ÑØ.Ø× Ñ  §¡Ó.ô	
ô 	×ÑÐ?ÀÔEð	Ø$(×$<Ñ$<×$AÑ$AØØŸ™Øð %Bó %÷ ˆHð ×ÒÜ× Ñ Ð!YÔZÜ× Ñ ØBØ×$Ñ$Ø—‘ôð
 ×&Ñ&Ð':Ð(:Ð':Ñ;ä× Ñ Ð!TÔUÜ× Ñ Ø9Ø—‘Ø×$Ñ$ôð —?’? x×';Ñ';¸zÑ'IØ#�•ð (J�?ð_ ,ùðùô
 ×$Ñ$ò 	Ø×'Ñ'¨a°SÐ'Ô9Ü× Ñ Ð!XÐZ[Ô\ÜûÜò 	Ü× Ñ Ð!XÐZ[Ô\Üûð	üsb   ‚AIÁ GÁ!BIÃ)+G ÄGÄG ÄCIÇG ÇIÇ1)HÈIÈIÈ+IÉIÉIÉIc              ƒ  ó6   K  — t        j                  d«       y ­w)NzOn Async Failure)r   r~   r.  s        r/   Úasync_log_failure_eventz&GalileoObserve.async_log_failure_event!  s   è ø€ ô 	×ÑÐ/Õ0ùs   ‚)rï   ÚNone)rW   ú
str | Nonerï   rL  )rï   rX   )rï   r   )r€   rð   r5   r   rï   zlist[dict[str, str]])rï   r   )r•   rð   rï   r   )r?   r   rï   r   )r�   úMapping[str, Any]rï   údict[str, object])r�   rM  rª   r   r¯   r   rï   rN  )r¾   zSequence[Mapping[str, object]]rï   rN  )rï   z$tuple[str, dict[str, object]] | None)rZ   zdict[str, str] | Nonerï   zdict[str, str])r¿   údict[str, Any]rï   rK  )ri   r   r¿   rO  rï   rK  )rÞ   zhttpx.HTTPStatusErrorri   r   rï   rK  )rå   rM  rï   rN  )rÏ   rð   rï   r   )ræ   úMapping[str, object]rï   r   )rù   zlitellm.ModelResponserï   rð   )rù   zlitellm.TextCompletionResponserï   rL  )rù   r   rï   rð   )rå   rP  rï   rN  )ÚDEFAULTN)
rå   rP  rù   rð   r  r   r  rL  rï   ztuple[str, str, object])rù   rð   rå   rP  rï   r   )r€   rð   rï   r   )
rå   rP  rù   rð   r*  rð   r+  rð   rï   rK  )
rå   rM  rù   rð   r*  rð   r+  rð   rï   rK  )&r)   r*   r+   r_   ÚstaticmethodrV   rd   rp   r|   rk   r‹   r�   r–   r›   rŸ   r±   r·   rÀ   rÃ   rÐ   rÒ   rÙ   rÛ   rß   rç   rò   rõ   rû   rþ   r   r  r  r  rô   r/  r,  r8  rJ  r-   r.   r/   rC   rC   H   sø  „ ómð òó ðó
5ó+óZ
ó(ð0 ò9ó ð9ð4 òBó ðBð ò
Jó ð
Jð òó ðð
 òó ðð  ðØ!ðð ðð ð	ð
 
òó ðð> ò
ó ð
ó(	ó
ð. ò	ó ð	ó
ð òó ðó:5ð òó ðð& òó ðð ò8ó ð8ð ò/ó ð/ð ò	ó ð	ð ðØ4ðà	òó ðð ðØ*ðà	òó ðð ò4ó ð4ð Ø%)ðdTà$ðdTð ðdTð ð	dTð
 #ðdTð 
!ódTóLð òó ðð4dà$ðdð ðdð ð	dð
 ðdð 
ódð$Y1à!ðY1ð ðY1ð ð	Y1ð
 ðY1ð 
óY1óv>$ð@1à$ð1ð ð1ð ð	1ð
 ð1ð 
ô1r.   rC   ),Ú
__future__r   rz   rO   r™   rµ   Úcollections.abcr   r   r   r   r   Útypingr	   r
   r   r   rD  Úpydanticr   r   r£   Úlitellm._loggingr   Ú"litellm.integrations.custom_loggerr   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsr   r   Ú&litellm.llms.custom_httpx.http_handlerr   r   Ú,litellm.types.integrations.base_health_checkr   Úlitellm.types.llms.openair   r   r   r   r,   r   r   r2   rC   r-   r.   r/   ú<module>r]     sŽ   ðÞ "ã Û 	Û 	Û ß -ß /Ñ /ß .Ó .ã ß %ã Ý +Ý ;÷÷õ V÷ñ ð %=Ð ˜EÓ <ð (,Ð ˜uÓ +ô 9°Eõ ô3�)ô 3ô.`1�\õ `1r.   