Ë
    tPêjÿ7  ã                   ó¨  — U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' erddl(mZ) dZ*ee+d<   dZ,ee+d<    ed«      Z- ed«      Z. G d„ de«      Z/ G d„ de«      Z0 G d„ de«      Z1 G d„ de«      Z2 G d„ d «      Z3 e3«       Z4ee+d!<    ei «      Z5ee	e6e7f      e+d"<   d#e	e-e8f   d$e	e-e8f   d%e9e-d&f   fd'„Z:d#e	e/e7f   d$e	e/e7f   d%e	e/e7f   fd(„Z;d#e	e0e	e6e7f   f   d$e	e0e	e6e7f   f   d%e	e0e	e6e7f   f   fd)„Z<d*e	e-e.f   d+e6d%e	e-e.f   fd,„Z=d-ee-e.ged   f   d.e-d/e.d%e>dz  fd0„Z?e*fd*e	e-e.f   d-ee-e.ged   f   d+e6d1ee@ged   f   d2e7d%e	e-e.f   fd3„ZAd4e6dz  d%e6fd5„ZBd6e	e6ef   d%e
e	e6ef      fd7„ZCd8ed%e6fd9„ZDd6e	e6ef   d%edz  fd:„ZEd;e
e	e6ef      d%ee9e/e7f      fd<„ZFd;e
e	e6ef      d%e	e/e7f   fd=„ZGd>e#d.e/d?e7d%dfd@„ZHd>e#d.e0dAe	e6e7f   d%dfdB„ZIej”                  e4fd>e#d;eKeLe6ef      d1ee@ged   f   dCe3d%df
dD„ZMy)EzŽ
Track guardrail and policy usage for the dashboard: upsert daily metrics and
insert into SpendLogGuardrailIndex when spend logs are written.
é    N)Údefaultdict)Ú	AwaitableÚCallableÚIteratorÚMappingÚSequence)ÚdatetimeÚtimezone)Úpartial)Úgroupby)Ú
itemgetter)ÚMappingProxyType)ÚTYPE_CHECKINGÚAnyÚFinalÚ
NamedTupleÚTypeVar)ÚReadOnlyÚ	TypedDict)Úverbose_proxy_logger)ÚDB_RETRY_SAFE_ERROR_TYPES)ÚPrismaClient)ÚDailyGuardrailMetricsRepositoryÚ"DailyGuardrailUsageUnitsRepositoryÚ SpendLogGuardrailIndexRepository)Útypesé   Ú_UPSERT_RETRY_TIMESi'  Ú_MAX_PENDING_ROWSÚ_RowKeyÚ	_RowValuec                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)Ú_UsageUnitKeyÚguardrail_idÚdateÚteam_idÚapi_keyÚ
usage_unitN©Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/usage_tracking.pyr#   r#   '   s   … ØÓØ
ƒIØƒLØƒLØ„Or0   r#   c                   ó"   — e Zd ZU eed<   eed<   y)Ú_MetricsKeyr$   r%   Nr)   r/   r0   r1   r3   r3   /   s   … ØÓØ
„Ir0   r3   c                   ó^   — e Zd ZU ee   ed<   ee   ed<   ee   ed<   ee   ed<   ee   ed<   y)Ú_UsageUnitCompoundKeyr$   r%   r&   r'   r(   N)r*   r+   r,   r   r-   r.   r/   r0   r1   r5   r5   4   s4   … Ø˜3‘-ÓØ
�3‰-ÓØ�c‰]ÓØ�c‰]ÓØ˜‘Ôr0   r5   c                   ó   — e Zd ZU ee   ed<   y)Ú_UsageUnitWhereUniqueÚ,guardrail_id_date_team_id_api_key_usage_unitN)r*   r+   r,   r   r5   r.   r/   r0   r1   r7   r7   <   s   … Ø2:Ð;PÑ2QÔQr0   r7   c                   ó   — e Zd ZdZdd„Zy)ÚPendingRollupszNRollup rows whose connection-error retries exhausted, held for the next flush.Nc                 óv   — t        j                  «       | _        t        i «      | _        t        i «      | _        y ©N)ÚasyncioÚLockÚlockr   ÚmetricsÚunits)Úselfs    r1   Ú__init__zPendingRollups.__init__C   s(   € Ü"Ÿ<™<›>ˆŒ	Ü@PÐQSÓ@TˆŒÜ2BÀ2Ó2Fˆ�
r0   )ÚreturnN)r*   r+   r,   Ú__doc__rC   r/   r0   r1   r:   r:   @   s   „ ÙXôGr0   r:   Ú_PENDING_ROLLUPSÚ_NO_COUNTERSÚbaseÚextrarD   .c                 ó$   ‡ — g ‰ ¢ˆ fd„|D «       ¢­S )Nc              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wr<   r/   )Ú.0ÚkeyrH   s     €r1   ú	<genexpr>z_merged_keys.<locals>.<genexpr>O   s   øè ø€ Ò=˜S¨S¸ª_”SÑ=ùs   ƒ	�r/   )rH   rI   s   ` r1   Ú_merged_keysrO   N   s   ø€ Ø>ˆTÐ>Ó= EÔ=Ñ>Ð>r0   c                 óš   — t        t        | |«      D �ci c](  }|| j                  |d«      |j                  |d«      z   “Œ* c}«      S c c}w ©Nr   )r   rO   Úget)rH   rI   rM   s      r1   Ú_merged_unit_rowsrS   R   sG   € ô ÔR^Ð_cÐejÓRkÖlÈ3˜S $§(¡(¨3°Ó"2°U·Y±Y¸sÀAÓ5FÑ"FÑFÒlÓmÐmùÒls   ”-Ac           	      ó¤   ‡ ‡— dt         dt        t        t        f   fˆ ˆfd„}t	        t        ‰ ‰«      D �ci c]  }| ||«      “Œ c}«      S c c}w )NrM   rD   c                 ó  •— ‰j                  | t        «      }‰j                  | t        «      }t        t        ||«      D �ci c]:  }|t	        |j                  |d«      «      t	        |j                  |d«      «      z   “Œ< c}«      S c c}w rQ   )rR   rG   r   rO   Úint)rM   Úbase_countersÚextra_countersÚcounterrH   rI   s       €€r1   Úmerged_countersz,_merged_metric_rows.<locals>.merged_counters[   s„   ø€ Ø#Ÿx™x¨¬\Ó:ˆØ %§	¡	¨#¬|Ó <ˆÜô  ,¨M¸>ÓJöàð œ˜]×.Ñ.¨w¸Ó:Ó;¼cÀ.×BTÑBTÐU\Ð^_ÓB`Ó>aÑaÑaòó
ð 	
ùòs   Á?B)r3   r   r-   rV   r   rO   )rH   rI   rZ   rM   s   ``  r1   Ú_merged_metric_rowsr[   X   sL   ù€ ð
œ[ð 
¬W´S¼#°XÑ->ö 
ô Ä,ÈtÐUZÓB[Ö\¸3˜S¡/°#Ó"6Ñ6Ò\Ó]Ð]ùÒ\s   ¶AÚrowsÚlabelc                 óþ   — t        | «      t        k  r| S t        j                  d|t        t        | «      t        z
  «       t	        t        t        | j                  «       «      t        | «      t        z
  d  «      «      S )Nz`Guardrail usage tracking: pending %s requeue exceeds %d rows; dropping the %d oldest (non-fatal))Úlenr   r   Úwarningr   ÚdictÚtupleÚitems)r\   r]   s     r1   Ú_cappedrd   h   sg   € Ü
ˆ4ƒyÔ%Ò%ØˆÜ× Ñ ØjØÜÜˆD‹	Ô%Ñ%ô	ô œD¤ t§z¡z£|Ó!4´S¸³YÔARÑ5RÐ5TÐ!UÓVÓWÐWr0   Ú
upsert_rowrM   Úvaluec              ƒ   ód   K  — 	  | ||«      ƒ d {  –—†  y 7 Œ# t         $ r}|cY d }~S d }~ww xY w­wr<   )Ú	Exception)re   rM   rf   Úerrors       r1   Ú_attempt_upsertrj   t   s9   è ø€ ðÙ˜˜eÓ$×$Ð$ð ð 	%ùÜò Ø�ûðüs0   ‚0„ �‘ •0– ˜	-¡(¢-£0¨-­0ÚsleepÚretries_leftc           
   ƒ   ó‚  K  — | j                  «       D ��ci c]  \  }}|t        |||«      ƒ d{  –—† “Œ }}}|j                  «       D ]1  \  }}|€Œ	t        |t        «      rŒt	        j
                  d|||«       Œ3 t        |j                  «       D ��ci c]  \  }}t        |t        «      sŒ|| |   “Œ c}}«      }	|	st        i «      S |dk(  r)|	D ]"  }t	        j
                  d||t        ||   «       Œ$ |	S  |dt        |z
  z  «      ƒ d{  –—†  t        |	||||dz
  «      ƒ d{  –—† S 7 Œýc c}}w c c}}w 7 Œ,7 Œ­w)z[Returns the rows still failing with connection errors once retries exhaust, for requeueing.NzZGuardrail usage tracking: %s upsert failed for %s and is not safe to retry (non-fatal): %sr   zoGuardrail usage tracking: %s upsert failed for %s after %d retries; requeued for the next flush (non-fatal): %sé   é   )	rc   rj   Ú
isinstancer   r   r`   r   r   Ú_upsert_rows_with_retry)
r\   re   r]   rk   rl   rM   rf   Úoutcomesri   Ú	retryables
             r1   rq   rq   ~   sV  è ø€ ð ]a×\fÑ\fÓ\h×iÉjÈcÐSX�s¤/°*¸cÀ5Ó"I×IÑIÐi€HÑiØ—n‘nÓ&ò ‰
ˆˆUØÑ¤Z°Ô7PÕ%QÜ ×(Ñ(ØlØØØõ	ðô (Ø*2¯.©.Ó*:×k™J˜C ¼jÈÔPiÕ>jˆˆd�3‰i‰Ókó€Iñ Ü Ó#Ð#Ø�qÒØò 	ˆCÜ ×(Ñ(ð"àØÜ#Ø˜‘õð	ð ÐÙ
�Ô)¨LÑ8Ñ9Ó
:×:Ð:Ü(¨°JÀÀuÈlÐ]^ÑN^Ó_×_Ð_ð5 JúÓiùó 	lð ;øØ_úsb   ‚D?–D/¯D-°D/¶D?ÁD?Á#2D?ÂD5
Â.D5
Â6AD?ÄD;ÄD?Ä(D=Ä)D?Ä-D/Ä/D?Ä=D?Ústatusc                 óV   — | sy| xs dj                  «       }d|v sd|v ryd|v sd|v ryy)	z?Map StandardLogging guardrail_status to blocked/passed/flagged.ÚpassedÚ Ú
intervenedÚblockÚblockedÚfailri   Úflagged)Úlower)rt   Úss     r1   Ú_guardrail_status_to_actionr   £   s>   € áØØ’˜"×#Ñ#Ó%€AØ�qÑ˜G q™LØØ��{�g ‘lØØr0   Úpayloadc                 óN  — | j                  d«      }|sg S t        |t        «      r	 t        j                  |«      }t        |t        «      sg S |j                  d«      xs |j                  d«      }t        |t        «      sg S |S # t        j
                  t        f$ r g cY S w xY w)z>Extract guardrail_information from spend log payload metadata.ÚmetadataÚguardrail_informationÚ&standard_logging_guardrail_information)	rR   rp   r-   ÚjsonÚloadsÚJSONDecodeErrorÚ	TypeErrorra   Úlist)r€   ÚmetaÚinfos      r1   Ú"_parse_guardrail_info_from_payloadrŒ   ¯   s™   € à�;‰;�zÓ"€DÙØˆ	Ü�$œÔð	Ü—:‘:˜dÓ#ˆDô �dœDÔ!Øˆ	Ø—(‘(Ð2Ó3Òi°t·x±xÐ@hÓ7i€DÜ�dœDÔ!Øˆ	Ø€Køô ×$Ñ$¤iÐ0ò 	ØŠIð	ús   §B ÂB$Â#B$Údtc                 ó¶   — | j                   € | j                  t        j                  ¬«      } | j	                  t        j                  «      j                  d«      S )zYYYY-MM-DD in UTC.)Útzinfoz%Y-%m-%d)r�   Úreplacer
   ÚutcÚ
astimezoneÚstrftime)r�   s    r1   Ú	_date_strr”   Á   s>   € à	‡y�yÐØ�Z‰ZœxŸ|™|ˆZÓ,ˆØ�=‰=œŸ™Ó&×/Ñ/°
Ó;Ð;r0   c                 óà   — | j                  d«      }t        |t        «      r|S t        |t        «      sy 	 t        j                  |j                  dd«      «      S # t        t        f$ r Y y w xY w)NÚ	startTimeÚZz+00:00)rR   rp   r	   r-   Úfromisoformatr�   Ú
ValueErrorrˆ   )r€   Ú
start_times     r1   Ú_parse_payload_start_timer›   È   sg   € ØŸ™ KÓ0€JÜ�*œhÔ'ØÐÜ�j¤#Ô&ØðÜ×%Ñ% j×&8Ñ&8¸¸hÓ&GÓHÐHøÜœ	Ð"ò Ùðús   ¶$A ÁA-Á,A-Úlogs_to_processc              #   ól  K  — | D �]*  }t        |«      }|j                  d«      r|€Œ#t        |«      }t        |j                  d«      xs d«      }t        |j                  d«      xs d«      }t	        |«      D ]³  }t        |j                  d«      xs |j                  d«      xs d«      }|j                  d«      }|rt        |t        «      sŒX|j                  «       D ]I  \  }	}
t        |
t        «      sŒt        |
t        «      rŒ(|
dkD  sŒ.t        ||||t        |	«      «      |
f–— ŒK Œµ �Œ- y ­w)	NÚ
request_idr&   rw   r'   r$   Úguardrail_nameÚguardrail_usager   )r›   rR   r”   r-   rŒ   rp   ra   rc   rV   Úboolr#   )rœ   r€   rš   Údate_keyr&   r'   Úentryr$   ÚusageÚ	unit_namerA   s              r1   Ú_iter_usage_unit_incrementsr¦   Ô   s!  è ø€ Ø"ó iˆÜ.¨wÓ7ˆ
Ø�{‰{˜<Ô(¨JÐ,>ØÜ˜ZÓ(ˆÜ�g—k‘k )Ó,Ò2°Ó3ˆÜ�g—k‘k )Ó,Ò2°Ó3ˆÜ7¸Ó@ò 	iˆEÜ˜uŸy™y¨Ó8Ò]¸E¿I¹IÐFVÓ<WÒ]Ð[]Ó^ˆLØ—I‘IÐ/Ó0ˆEÙ¤z°%¼Ô'>ØØ$)§K¡K£Mò iÑ �	˜5Ü˜e¤SÕ)´*¸UÄDÕ2IÈeÐVWËiÜ'¨°hÀÈÔRUÐV_ÓR`ÓaÐchÐhÓhñiò	iñiùs   ‚C6D4Ã9D4Ä
D4Ä$D4c                 óÒ   — t        t        | «      t        d«      ¬«      }t        t	        |t        d«      ¬«      D ��ci c]  \  }}|t        d„ |D «       «      “Œ c}}«      S c c}}w )Nr   )rM   c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr<   r/   )rL   Ú_rA   s      r1   rN   z-_sum_usage_unit_increments.<locals>.<genexpr>é   s   è ø€ Ò.™H˜A˜u”%Ñ.ùs   ‚)Úsortedr¦   r   r   r   Úsum)rœ   ÚorderedrM   Úgroups       r1   Ú_sum_usage_unit_incrementsr®   æ   sY   € ÜÔ7¸ÓHÌjÐYZËmÔ\€GÜÜAHÈÔV`ÐabÓVcÔAd×e±:°3¸ˆŒcÑ.¨Ô.Ó.Ñ	.Óeóð ùÛes   ¾A#
Úprisma_clientrA   c              ƒ   ól  K  — |j                   |j                  |j                  |j                  |j                  |dœ}d|j                   |j                  |j                  |j                  |j                  dœi}|dd|iidœ}t        | «      j                  j                  ||¬«      ƒ d {  –—†  y 7 Œ­w)N)r$   r%   r&   r'   r(   rA   r8   )r$   r%   r&   r'   r(   rA   Ú	increment©ÚcreateÚupdate©ÚwhereÚdata)r$   r%   r&   r'   r(   r   ÚtableÚupsert)r¯   rM   rA   Úrowr¶   r·   s         r1   Ú_upsert_usage_unit_rowr»   í   s­   è ø€ à×(Ñ(Ø—‘Ø—;‘;Ø—;‘;Ø—n‘nØñL€Cð 	7Ø×,Ñ,Ø—H‘HØ—{‘{Ø—{‘{ØŸ.™.ñ9
ð+€Eð Ø˜[¨%Ð0Ð1ñM€Dô -¨]Ó
;×
AÑ
A×
HÑ
HÈuÐ[_Ð
HÓ
`×`Ò`ús   ‚B*B4Â,B2Â-B4Úaggc              ƒ   ó   K  — t        |d   «      }t        | «      j                  j                  d|j                  |j
                  dœi|j                  |j
                  |t        |d   «      t        |d   «      t        |d   «      dœd|idt        |d   «      idt        |d   «      idt        |d   «      id	œd
œ¬«      ƒ d {  –—†  y 7 Œ­w)NÚrequests_evaluatedÚguardrail_id_date)r$   r%   Úpassed_countÚblocked_countÚflagged_count)r$   r%   r¾   rÀ   rÁ   rÂ   r±   ©r¾   rÀ   rÁ   rÂ   r²   rµ   )rV   r   r¸   r¹   r$   r%   )r¯   rM   r¼   Úns       r1   Ú_upsert_metrics_rowrÅ     sá   è ø€ Ü�3Ð+Ñ,Ó-€AÜ
)¨-Ó
8×
>Ñ
>×
EÑ
EØ"°S×5EÑ5EÈsÏxÉxÑ$XÐYð !$× 0Ñ 0ØŸ™Ø&'Ü # C¨Ñ$7Ó 8Ü!$ S¨Ñ%9Ó!:Ü!$ S¨Ñ%9Ó!:ñð (3°AÐ&6Ø!,¬c°#°nÑ2EÓ.FÐ GØ"-¬s°3°Ñ3GÓ/HÐ!IØ"-¬s°3°Ñ3GÓ/HÐ!Iñ	ñ
ð Fó ÷ ò ús   ‚CCÃCÃCÚpendingc           
   ƒ   óØ  K  — |syt        d„ «      }g }|D �]  }|j                  d«      }t        |«      }|r|€Œ%t        |«      }	t	        |«      D ]Æ  }
|
j                  d«      xs |
j                  d«      xs d}|sŒ.t        ||	«      }||   dxx   dz  cc<   t        |
j                  d	«      «      }|d
k(  r||   dxx   dz  cc<   n&|dk(  r||   dxx   dz  cc<   n||   dxx   dz  cc<   |
j                  d«      }|j                  ||||dœ«       ŒÈ �Œ |j                  4 ƒd{  –—†  |j                  }|j                  }t        i «      |_	        t        i «      |_
        ddd«      ƒd{  –—†  t        |j                  «       D ��ci c]  \  }}t        |d   «      dkD  sŒ||“Œ c}}«      }t        |«      }t        t!        |«      «      }|s|s|sy	 |r/	 t#        | «      j$                  j'                  |d¬«      ƒ d{  –—†  t/        |t1        t2        | «      d|«      ƒ d{  –—† }t/        |t1        t4        | «      d|«      ƒ d{  –—† }|s|rp|j                  4 ƒd{  –—†  t7        t        |j                  |«      d«      |_	        t7        t        |j                  |«      d«      |_
        ddd«      ƒd{  –—†  yy7 �Œ£7 �Œ^# 1 ƒd{  –—†7  sw Y   �ŒoxY wc c}}w 7 Œã# t(        $ r!}t+        j,                  d|«       Y d}~�Œd}~ww xY w7 Œî7 ŒÌ7 Œµ7 Œ]# 1 ƒd{  –—†7  sw Y   yxY w# t(        $ r }t+        j8                  d|«       Y d}~yd}~ww xY w­w)z›
    After spend logs are written: update DailyGuardrailMetrics and insert
    SpendLogGuardrailIndex rows from guardrail_information in each payload.
    Nc                  ó   — dddddœS )Nr   rÃ   r/   r/   r0   r1   ú<lambda>z4process_spend_logs_guardrail_usage.<locals>.<lambda>+  s   € Ø"#ØØØñ	
€ r0   rž   r$   rŸ   rw   r¾   ro   Úguardrail_statusrv   rÀ   rz   rÁ   rÂ   Ú	policy_id)rž   r$   rË   rš   r   T)r·   Úskip_duplicatesz7Guardrail usage tracking: index create_many skipped: %szdaily metricsz
usage unitz/Guardrail usage tracking failed (non-fatal): %s)r   rR   r›   r”   rŒ   r3   r   Úappendr?   r@   rA   r   rc   rV   r[   rS   r®   r   r¸   Úcreate_manyrh   r   Údebugrq   r   rÅ   r»   rd   r`   )r¯   rœ   rk   rÆ   Údaily_guardrailÚ
index_rowsr€   rž   rš   r¢   r£   r$   rM   ÚactionrË   Úpending_metricsÚpending_unitsr¼   Úevaluated_metricsÚmetrics_rowsÚ	unit_rowsÚeÚfailed_metricsÚfailed_unitss                           r1   Ú"process_spend_logs_guardrail_usagerÛ     s‘  è ø€ ñ Øä@Kñ	
óA€Oð /1€Jà"ó ˆØ—[‘[ Ó.ˆ
Ü.¨wÓ7ˆ
Ù˜ZÐ/ØÜ˜ZÓ(ˆä7¸Ó@ò 	ˆEØ Ÿ9™9 ^Ó4ÒY¸¿	¹	ÐBRÓ8SÒYÐWYˆLÙØÜ˜l¨HÓ5ˆCØ˜CÑ Ð!5Ó6¸!Ñ;Ó6Ü0°·±Ð;MÓ1NÓOˆFØ˜Ò!Ø Ñ$ ^Ó4¸Ñ9Ô4Ø˜9Ò$Ø Ñ$ _Ó5¸Ñ:Ô5à Ñ$ _Ó5¸Ñ:Ó5ØŸ	™	 +Ó.ˆIØ×Ñà",Ø$0Ø!*Ø",ñ	õò	ðð< �|‰|÷ -ñ -Ø!(§¡ˆØ&Ÿ}™}ˆÜ*¨2Ó.ˆŒÜ(¨Ó,ˆŒ÷	-÷ -ô  0Ø"1×"7Ñ"7Ó"9×`‘h�c˜3¼SÀÐEYÑAZÓ=[Ð^_Ó=_ˆˆc‰Ó`ó Ðô .¨oÐ?PÓQ€LÜ(¨Ô8RÐSbÓ8cÓd€Iá¡
±9Øð[áðiÜ6°}ÓE×KÑK×WÑWØ#Ø$(ð Xó ÷ ð ô '>Øœ'Ô"5°}ÓEÀÐX]ó'
÷ !
ˆô %<Ø”wÔ5°}ÓEÀ|ÐUZó%
÷ 
ˆñ ™\Ø—|‘|÷ fñ fÜ")Ô*=¸g¿o¹oÈ~Ó*^Ð`oÓ"p�”Ü 'Ô(9¸'¿-¹-ÈÓ(VÐXdÓ e�”÷f÷ fð fð *ðC-ùð -ù÷ -÷ -ò -üó 	aðùô ò iÜ$×*Ñ*Ð+dÐfg×hÒhûðiúð!
øð
øðføð fø÷ f÷ fñ fûô ò [Ü×$Ñ$Ð%VÐXY×ZÑZûð[üs3  ‚D+M*Ä-KÄ.M*Ä19KÅ*M*Å5KÅ6M*ÆK,
Æ,K,
Æ10M*Ç"L> Ç%)K4 ÈK2ÈK4 ÈL> È2L!È3#L> ÉL#ÉL> É/L%É0L> É3AL)Ê>L> Ë	L'Ë
L> ËM*ËM*ËK)ËKËK)Ë$M*Ë2K4 Ë4	LË=LÌL> ÌLÌL> Ì#L> Ì%L> Ì'L> Ì)L;Ì/L2Ì0L;Ì7L> Ì:M*Ì;L> Ì>	M'ÍM"ÍM*Í"M'Í'M*)NrE   r=   r…   Úcollectionsr   Úcollections.abcr   r   r   r   r   r	   r
   Ú	functoolsr   Ú	itertoolsr   Úoperatorr   r   r   Útypingr   r   r   r   r   Útyping_extensionsr   r   Úlitellm._loggingr   Úlitellm.proxy._typesr   Úlitellm.proxy.utilsr   Ú'litellm.repositories.table_repositoriesr   r   r   ÚprismaÚprisma_typesr   r.   r   r    r!   r#   r3   r5   r7   r:   rF   rG   r-   rV   Úobjectrb   rO   rS   r[   rd   rh   rj   Úfloatrq   r   rŒ   r”   r›   r¦   r®   r»   rÅ   rk   r‰   ra   rÛ   r/   r0   r1   ú<module>rë      sE  ðòó
 Û Ý #ß LÕ Lß 'Ý Ý Ý Ý "ß AÕ Aç 1å 1Ý :Ý ,÷ñ ñ Ý,ð Ð �UÓ Ø!Ð �5Ó !á
�)Ó
€Ù�KÓ €	ô�Jô ô�*ô ô
˜Iô ôR˜Iô R÷Gñ Gñ )Ó*Ð �%Ó *á)9¸"Ó)=€ˆe�G˜C ˜HÑ%Ñ&Ó =ð?�w˜w¨˜Ñ/ð ?¸ÀÈÀÑ8Pð ?ÐUZÐ[bÐdgÐ[gÑUhó ?ðnØ
�- Ð$Ñ
%ðnØ.5°mÀSÐ6HÑ.Iðnàˆ]˜CÐÑ ónð^Ø
�+˜w s¨C xÑ0Ð0Ñ
1ð^Ø:AÀ+ÈwÐWZÐ\_ÐW_ÑO`ÐB`Ñ:að^àˆ[˜' # s (Ñ+Ð+Ñ,ó^ð 	X�'˜' 9Ð,Ñ-ð 	X°cð 	X¸gÀgÈyÐFXÑ>Yó 	XðØ˜' 9Ð-¨y¸©Ð>Ñ?ðØFMðØV_ðà�Ñóð ,ñ"`Ø
�'˜9Ð$Ñ
%ð"`à˜' 9Ð-¨y¸©Ð>Ñ?ð"`ð ð"`ð �U�G˜Y t™_Ð,Ñ-ð	"`ð
 ð"`ð ˆW�iÐÑ ó"`ðJ	¨¨d©
ð 	°só 	ð°¸¸S¸Ñ0Að ÀhÈwÐWZÐ\_ÐW_ÑO`ÑFaó ð$<�(ð <˜só <ð	 w¨s°C¨xÑ'8ð 	¸XÈ¹_ó 	ði°¸'À#ÀsÀ(Ñ:KÑ1Lð iÐQYÐZ_Ð`mÐorÐ`rÑZsÑQtó ið$°¸ÀÀcÀÑ9JÑ0Kð ÐPWÐXeÐgjÐXjÑPkó ða°ð aÀ=ð aÐY\ð aÐaeó að2¨\ð Àð ÐRYÐZ]Ð_bÐZbÑRcð Ðhló ð4 18·±Ø.ñ	[[Øð[[à˜$˜s C˜x™.Ñ)ð[[ð �U�G˜Y t™_Ð,Ñ-ð[[ð ð	[[ð
 
ô[[r0   