Ë
    tPêjQ†  ã                   ó°  — U d Z ddlZddlmZmZmZmZ ddlmZmZm	Z	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mZ dd	lmZ dd
lmZ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,m-Z-m.Z. er@ddl/m0Z1 ddl/mZ2 ddl3m4Z4 ddl5m6Z6 e1jn                  e6z  Z8e1jr                  e1jt                  z  Z; e«       Z<ee=d<    ei «      Z>eee?e@f      e=d<   dZAee=d<   de?dz  de?dz  deBe?e?f   fd„ZC	 	 	 	 d‹d„ZD	 	 	 	 dŒd„ZE	 	 	 	 d�d„ZF	 	 	 	 dŽd„ZG	 	 	 	 	 	 d�d „ZH	 	 	 	 	 	 d�d!„ZI	 	 	 	 d‘d"„ZJ	 	 	 	 	 	 d’d$„ZKd%d&de?fd'„ZLd(d)dee?e@f   fd*„ZMd(d#d+d,dee?ee?e@f   f   fd-„ZN G d.„ d/ed0¬1«      ZO G d2„ d3e«      ZP G d4„ d5e«      ZQ G d6„ d7e«      ZR G d8„ d9e«      ZS G d:„ d;e«      ZT G d<„ d=e«      ZU G d>„ d?e«      ZV G d@„ dAe«      ZW G dB„ dCe«      ZX G dD„ dEe«      ZYdFeZde?fdG„Z[dHeZdIeZde?fdJ„Z\dKdLdMe?dee?eQf   fdN„Z]dOdLdMe?dee?eZf   fdP„Z^dKdLde_eP   fdQ„Z`edR   ZaedS   ZbedTdUdVeade?dz  fdW„«       ZcedTdUdVebdedfdX„«       ZcdTdUdVeaebz  dedfdY„ZcdZeddeee?ef   fd[„ZfdTdUdeBee?f   fd\„Zgd]d^d_ee?eQf   d`ee?eZf   daee?ee?e@f   f   de_eT   f
db„Zhdcddd_ee?eQf   d`ee?eZf   de_eT   fde„Zie<jÕ                  dfdgg ee$«      geU¬h«       eddi¬j«       eddi¬j«       ee$«      fde?dz  de?dz  dke"fdl„«       Zke<jÕ                  dmdgg ee$«      geW¬h«       ed«       ed«       ee$«      fdne?de?dz  de?dz  dke"fdo„«       Zldpe_e?   dz  dqe?dz  de?dz  de?dz  ddrf
ds„Zmdtdudvdwdxe?dz  deXdz  fdy„Znd“dzed{e@de?dz  fd|„Zodvdwde?dz  fd}„Zpe<jÕ                  d~dgg ee$«      geY¬h«       ed«       ed«       edd¬€«       ed�dd‚¬ƒ«       ed«       ed«       ed«       ee$«      fdne?dz  dqe?dz  d„e@d…e@d†e?dz  de?dz  de?dz  dke"fd‡„«       Zqe<jÕ                  dˆd‰g ee$«      geU¬h«       eddi¬j«       eddi¬j«       ee$«      fde?dz  de?dz  dke"fdŠ„«       Zry)”z‘
Guardrails and policies usage endpoints for the dashboard.
GET /guardrails/usage/overview, /guardrails/usage/detail/:id, /guardrails/usage/logs
é    N)ÚCallableÚIterableÚMappingÚSequence)ÚdateÚdatetimeÚ	timedeltaÚtimezone)Úgroupby)ÚMappingProxyType)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚoverload)Ú	APIRouterÚDependsÚQuery)Ú	BaseModel)ÚNotRequiredÚReadOnlyÚ	TypedDict)Úverbose_proxy_logger)ÚUserAPIKeyAuth)Úuser_api_key_auth)ÚTableActions)ÚDailyGuardrailMetricsRepositoryÚ"DailyGuardrailUsageUnitsRepositoryÚDailyPolicyMetricsRepositoryÚGuardrailsRepositoryÚPolicyRepositoryÚ SpendLogGuardrailIndexRepositoryÚSpendLogsRepository)Úmodels)Útypes)ÚPrismaClient)Ú	GuardrailÚrouterÚ_EMPTY_UNITSin  Ú_USAGE_MAX_RANGE_DAYSÚ
start_dateÚend_dateÚreturnc                 óx  — ddl m}m} t        j                  t
        j                  «      }|xs |j                  d«      }| xs |t        d¬«      z
  j                  d«      }	 t        j                  |«      t        j                  |«      f}|\  }}	|j                  «       |	j                  «       f||fk7  r ||j                  d¬«      ‚|	|k  r ||j                  d¬«      ‚|	|z
  t        t        ¬«      kD  r ||j                  d	t        › d
�¬«      ‚||fS # t        $ r  ||j                  d¬«      ‚w xY w)Nr   )ÚHTTPExceptionÚstatusz%Y-%m-%dé   ©Údaysz4start_date and end_date must be in YYYY-MM-DD format©Ústatus_codeÚdetailz(start_date must be on or before end_datez!Date range too large; maximum is z days)Úfastapir/   r0   r   Únowr
   ÚutcÚstrftimer	   r   ÚfromisoformatÚ
ValueErrorÚHTTP_400_BAD_REQUESTÚ	isoformatr*   )
r+   r,   r/   r0   r8   ÚendÚstartÚparsedÚ	start_objÚend_objs
             úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/usage_endpoints.pyÚ_resolve_usage_windowrE   0   sH  € ß-ä—‘œhŸl™lÓ+€CØÒ5˜SŸ\™\¨*Ó5€CØÒO #¬	°qÔ(9Ñ"9×!CÑ!CÀJÓ!O€Eð
Ü×+Ñ+¨EÓ2´D×4FÑ4FÀsÓ4KÐLˆð  Ñ€IˆwØ×ÑÓ˜w×0Ñ0Ó2Ð3¸¸s°|ÒCÙØ×3Ñ3ØIô
ð 	
ð �ÒÙØ×3Ñ3Ø=ô
ð 	
ð �ÑœYÔ,AÔBÒBÙØ×3Ñ3Ø6Ô7LÐ6MÈUÐSô
ð 	
ð �#ˆ:Ðøô+ ò 
ÙØ×3Ñ3ØIô
ð 	
ð
ús   Á$*D ÄD9c                 ó0   — t        | «      j                  }|S ©N)r    Útable)Úprisma_clientÚguardrails_tables     rD   Ú_guardrails_tablerK   P   s$   € ô ThØóTç�eð ð Ðó    c                 ó0   — t        | «      j                  }|S rG   )r!   rH   )rI   Úpolicies_tables     rD   Ú_policies_tablerO   Y   s   € ô N^Ð^kÓMl×MrÑMr€NØÐrL   c                 ó0   — t        | «      j                  }|S rG   )r   rH   ©rI   Úmetrics_tables     rD   Ú_daily_guardrail_metrics_tablerS   `   s$   € ô WvØóWç�eð ð ÐrL   c                 ó0   — t        | «      j                  }|S rG   )r   rH   rQ   s     rD   Ú_daily_policy_metrics_tablerU   i   s$   € ô TpØóTç�eð ð ÐrL   c              ƒ   óT   K  — t        | «      j                  |¬«      ƒ d {  –—† S 7 Œ­w©N©Úwhere)rS   Ú	find_many©rI   rY   s     rD   Ú_find_daily_guardrail_metricsr\   r   s'   è ø€ ô 0°Ó>×HÑHÈuÐHÓU×UÐUÐUúó   ‚(¡&¢(c              ƒ   óT   K  — t        | «      j                  |¬«      ƒ d {  –—† S 7 Œ­wrW   )rU   rZ   r[   s     rD   Ú_find_daily_policy_metricsr_   y   s'   è ø€ ô -¨]Ó;×EÑEÈEÐEÓR×RÐRÐRúr]   c                 ó0   — t        | «      j                  }|S rG   )r   rH   )rI   Úunits_tables     rD   Ú"_daily_guardrail_usage_units_tablerb   €   s   € ô 	+¨=Ó9×?Ñ?ð ð ÐrL   ú8Sequence[prisma_models.LiteLLM_DailyGuardrailUsageUnits]c              ƒ   ó²   K  — ddl m} 	 t        | «      j                  |¬«      ƒ d {  –—† S 7 Œ# |$ r }t	        j
                  d|«       Y d }~yd }~ww xY w­w)Nr   )ÚTableNotFoundErrorrX   ziGuardrail usage units are unavailable until the LiteLLM_DailyGuardrailUsageUnits migration is applied: %s© )Úprisma.errorsre   rb   rZ   r   Úwarning)rI   rY   re   Úes       rD   Ú!_find_daily_guardrail_usage_unitsrj   ‰   sX   è ø€ õ 1ðÜ7¸ÓF×PÑPÐW\ÐPÓ]×]Ð]Ð]ùØò Ü×$Ñ$ØwØô	
ô ûðüs6   ‚AŠ/ ¨-©/ ¬A­/ ¯A´AÁ
AÁAÁAÚrowz.prisma_models.LiteLLM_DailyGuardrailUsageUnitsc                 ó   — | j                   S rG   )Ú
usage_unit)rk   s    rD   Ú_counter_namern   ™   s   € Ø�>‰>ÐrL   Úrowsz8Iterable[prisma_models.LiteLLM_DailyGuardrailUsageUnits]c                 ó¬   — t        | t        ¬«      }t        t        |t        ¬«      D ��ci c]  \  }}|t	        d„ |D «       «      “Œ c}}«      S c c}}w )N©Úkeyc              3   óF   K  — | ]  }t        |j                  «      –— Œ y ­wrG   )ÚintÚunits)Ú.0Úrs     rD   ú	<genexpr>z%_sum_counter_units.<locals>.<genexpr>    s   è ø€ Ò/ A”3�q—w‘w—<Ñ/ùs   ‚!)Úsortedrn   r   r   Úsum)ro   ÚorderedÚnameÚgroups       rD   Ú_sum_counter_unitsr~   �   sH   € Ü˜D¤mÔ4€GÜÜCJÈ7ÔXeÔCf×g±K°D¸%ˆŒsÑ/¨Ô/Ó/Ñ	/Ógóð ùÛgs   «A
Úkey_ofz?Callable[[prisma_models.LiteLLM_DailyGuardrailUsageUnits], str]c           
      óŽ   — t        | |¬«      }t        t        ||¬«      D ��ci c]  \  }}|t        |«      “Œ c}}«      S c c}}w )Nrq   )ry   r   r   r~   )ro   r   r{   rr   r}   s        rD   Ú	_units_byr�   ¤   sA   € ô ˜D fÔ-€GÜÌgÐV]ÐciÔNj×kÁ
ÀÀU˜SÔ"4°UÓ";Ñ;ÓkÓlÐlùÓks   £A
c                   óÎ   — e Zd ZU eedz     ed<   eedz     ed<   eedz     ed<   eedz     ed<   eedz     ed<   eedz     ed<   eeeeef   z  e	eeef      z  dz     ed<   y)	Ú_GuardrailRunInfoNÚguardrail_idÚguardrail_nameÚguardrail_statusÚdurationÚconfidence_scoreÚ
risk_scoreÚguardrail_response)
Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__Úfloatr   Úobjectr   rf   rL   rD   rƒ   rƒ   ¯   s�   … Ø˜3 ™:Ñ&Ó&Ø˜S 4™ZÑ(Ó(Ø˜s T™zÑ*Ó*Ø�u˜t‘|Ñ$Ó$Ø˜u t™|Ñ,Ó,Ø˜ ™Ñ&Ó&Ø   w¨s°F¨{Ñ';Ñ!;¸hÀwÈsÐTZÈ{ÑG[Ñ>\Ñ!\Ð_cÑ!cÑdÔdrL   rƒ   F)Útotalc                   óB   — e Zd ZU eed<   eed<   eed<   eedz     ed<   y)ÚUsageChartPointr   ÚpassedÚblockedNÚscore)r‹   rŒ   r�   rŽ   r�   rt   r   r�   rf   rL   rD   r”   r”   ¹   s    … Ø
ƒIØƒKØƒLØ�u˜t‘|Ñ$Ô$rL   r”   c                   ó6   — e Zd ZU eed<   eed<   eed<   eed<   y)Ú_MetricTotalsÚrequestsr•   r–   ÚflaggedN©r‹   rŒ   r�   rt   r�   rf   rL   rD   r™   r™   À   s   … ØƒMØƒKØƒLØ„LrL   r™   c                   ó"   — e Zd ZU eed<   eed<   y)Ú_PrevPeriodCountsÚreqr–   Nrœ   rf   rL   rD   rž   rž   Ç   s   … Ø	ƒHØ„LrL   rž   c                   ó"   — e Zd ZU eed<   eed<   y)Ú_DailyPassBlockedr•   r–   Nrœ   rf   rL   rD   r¡   r¡   Ì   s   … ØƒKØ„LrL   r¡   c                   ó’   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   edz  ed<   edz  ed	<   eed
<   eed<   eeef   ed<   y)ÚUsageOverviewRowÚidr|   ÚtypeÚproviderÚrequestsEvaluatedÚfailRateNÚavgScoreÚ
avgLatencyr0   ÚtrendÚ
usageUnits)r‹   rŒ   r�   rŽ   r�   rt   r�   r   rf   rL   rD   r£   r£   Ñ   sN   … ØƒGØ
ƒIØ
ƒIØƒMØÓØƒOØ�d‰lÓØ˜‘ÓØƒKØƒJØ˜˜S˜Ñ!Ô!rL   r£   c                   ó`   — e Zd ZU ee   ed<   ee   ed<   eed<   eed<   eed<   e	e
ef   ed<   y)ÚUsageOverviewResponsero   ÚchartÚtotalRequestsÚtotalBlockedÚpassRateÚtotalUsageUnitsN)r‹   rŒ   r�   Úlistr£   r�   r”   rt   r�   r   rŽ   rf   rL   rD   r®   r®   ß   s9   … Ø
ÐÑ
 Ó Ø�Ñ Ó ØÓØÓØƒOØ˜S #˜XÑ&Ô&rL   r®   c                   ó,   — e Zd ZU eed<   eeef   ed<   y)ÚUsageUnitsDailyPointr   ru   N)r‹   rŒ   r�   rŽ   r�   r   rt   rf   rL   rD   r¶   r¶   è   s   … Ø
ƒIØ�3˜�8ÑÔrL   r¶   c                   óþ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   edz  ed<   edz  ed	<   eed
<   eed<   edz  ed<   ee   ed<   e	eef   ed<   e
e   ed<   e	ee	eef   f   ed<   e	ee	eef   f   ed<   y)ÚUsageDetailResponser„   r…   r¥   r¦   r§   r¨   Nr©   rª   r0   r«   ÚdescriptionÚtime_seriesÚusage_unitsÚusage_units_dailyÚusage_units_by_teamÚusage_units_by_key)r‹   rŒ   r�   rŽ   r�   rt   r�   r´   r”   r   r   r¶   rf   rL   rD   r¸   r¸   í   s£   … ØÓØÓØ
ƒIØƒMØÓØƒOØ�d‰lÓØ˜‘ÓØƒKØƒJØ�t‘ÓØ�oÑ&Ó&Ø˜˜c˜Ñ"Ó"ØÐ 4Ñ5Ó5Ø   g¨c°3¨hÑ&7Ð!7Ñ8Ó8Ø  W¨S°#¨XÑ%6Ð 6Ñ7Ô7rL   r¸   c                   óŒ   — e Zd ZU eed<   eed<   eed<   edz  ed<   edz  ed<   edz  ed<   edz  ed<   edz  ed	<   edz  ed
<   y)ÚUsageLogEntryr¤   Ú	timestampÚactionNr—   Ú
latency_msÚmodelÚinput_snippetÚoutput_snippetÚreason)r‹   rŒ   r�   rŽ   r�   r�   rf   rL   rD   rÀ   rÀ      sM   … ØƒGØƒNØƒKØ�4‰<ÓØ˜‘ÓØ�‰:ÓØ˜‘:ÓØ˜$‘JÓØ�$‰JÔrL   rÀ   c                   ó<   — e Zd ZU ee   ed<   eed<   eed<   eed<   y)ÚUsageLogsResponseÚlogsr’   ÚpageÚ	page_sizeN)r‹   rŒ   r�   r´   rÀ   r�   rt   rf   rL   rD   rÉ   rÉ     s   … Ø
ˆ}Ñ
ÓØƒJØ
ƒIØ„NrL   rÉ   Ú	fail_ratec                 ó   — | dkD  ry| dkD  ryy)Né   Úcriticalé   rh   Úhealthyrf   )rÍ   s    rD   Ú_status_from_fail_raterÓ     s   € Ø�2‚~ØØ�1‚}ØØrL   Úcurrent_failÚprevious_failc                 ó2   — |dk  ry| |z
  }|dkD  ry|dk  ryy)Nr   Ústableg      à?Úupg      à¿Údownrf   )rÔ   rÕ   Údiffs      rD   Ú_trend_from_comparisonrÛ     s.   € Ø˜ÒØØ Ñ.€DØˆc‚zØØˆd‚{ØØrL   ÚmetricszSequence[_DailyMetricsRow]Úid_attrc                 ó„  — i }| D ]¸  }t        ||«      }||vr
dddddœ||<   ||   dxx   t        |j                  xs d«      z  cc<   ||   dxx   t        |j                  xs d«      z  cc<   ||   dxx   t        |j                  xs d«      z  cc<   ||   dxx   t        |j
                  xs d«      z  cc<   Œº |S )Nr   ©rš   r•   r–   r›   rš   r•   r–   r›   )Úgetattrrt   Úrequests_evaluatedÚpassed_countÚblocked_countÚflagged_count)rÜ   rÝ   ÚaggÚmÚgids        rD   Ú_aggregate_daily_metricsrè   &  sÌ   € Ø+-€CØò 9ˆÜ˜1˜gÓ&ˆØ�c‰>Ø$%°¸qÈQÑOˆC�‰HØˆC‰�Ó¤ A×$8Ñ$8Ò$=¸AÓ >Ñ>ÓØˆC‰�Óœc !§.¡.Ò"5°AÓ6Ñ6ÓØˆC‰�Óœs 1§?¡?Ò#7°aÓ8Ñ8ÓØˆC‰�Óœs 1§?¡?Ò#7°aÓ8Ñ8Ôð9ð €JrL   Úmetrics_prevc                 ób  — i }| D ]l  }t        ||«      }t        |j                  xs d«      t        |j                  xs d«      }}||vrdddœ||<   ||   dxx   |z  cc<   ||   dxx   |z  cc<   Œn |j	                  «       D ��ci c]  \  }}||d   rd|d   z  |d   z  nd“Œ c}}S c c}}w )Nr   )rŸ   r–   rŸ   r–   ç      Y@ç        )rà   rt   rá   rã   Úitems)ré   rÝ   Úprev_agg_rawræ   rç   rw   ÚbÚvs           rD   Ú_prev_fail_ratesrñ   3  sÏ   € Ø8:€LØò *ˆÜ˜1˜gÓ&ˆÜ�1×'Ñ'Ò,¨1Ó-¬s°1·?±?Ò3GÀaÓ/Hˆ1ˆØ�lÑ"Ø()°aÑ 8ˆL˜ÑØ�SÑ˜%Ó  AÑ%Ó Ø�SÑ˜)Ó$¨Ñ)Ô$ð*ð Wc×VhÑVhÓVj×kÉFÈCÐQRˆC°a¸²h�%˜!˜I™,Ñ&¨¨5©Ò1ÀCÑGÓkÐkùÓks   Â B+c                 óX  — i }| D ]h  }|j                   }||vrdddœ||<   ||   dxx   t        |j                  xs d«      z  cc<   ||   dxx   t        |j                  xs d«      z  cc<   Œj t	        |j                  «       «      D ��cg c]  \  }}||d   |d   dœ‘Œ c}}S c c}}w )Nr   ©r•   r–   r•   r–   )r   r•   r–   )r   rt   râ   rã   ry   rí   )rÜ   Úchart_by_dateræ   Údrð   s        rD   Ú_chart_from_metricsrö   ?  s¸   € Ø9;€MØò AˆØ�F‰FˆØ�MÑ!Ø*+¸Ñ:ˆM˜!ÑØ�aÑ˜Ó"¤c¨!¯.©.Ò*=¸AÓ&>Ñ>Ó"Ø�aÑ˜Ó#¤s¨1¯?©?Ò+?¸aÓ'@Ñ@Ô#ðAô U[Ð[h×[nÑ[nÓ[pÓTq×rÉDÈAÈq�Q ! H¡+¸!¸I¹,ÓGÓrÐrùÓrs   ÂB&)r„   r…   )Úlitellm_paramsÚguardrail_infoÚgÚ_DbOrConfigGuardrailÚfieldc                  ó   — y rG   rf   ©rù   rû   s     rD   Ú_get_guardrail_fieldrþ   N  s   € Ø^arL   c                  ó   — y rG   rf   rý   s     rD   rþ   rþ   R  s   € Ø]`rL   c                 ó^   — t        | t        «      r| j                  |«      S t        | |d«      S )zXRead `field` off a guardrail whether it's a Prisma row (attr) or a dict/TypedDict (key).N)Ú
isinstanceÚdictÚgetrà   rý   s     rD   rþ   rþ   V  s)   € ä�!”TÔØ�u‰u�U‹|ÐÜ�1�e˜TÓ"Ð"rL   Úvaluec                 ón   — t        | t        «      r| j                  d¬«      S t        | t        «      r| S i S )zLCoerce a pydantic model (e.g. LitellmParams) / dict value into a plain dict.T)Úexclude_none)r  r   Ú
model_dumpr  )r  s    rD   Ú_to_dictr  ]  s4   € ä�%œÔ#Ø×Ñ¨TÐÓ2Ð2Ü�%œÔØˆØ€IrL   c                 óJ   — t        | d«      }t        | d«      }||xs |xs dfS )zOGet (guardrail_id, display_name) from guardrail - handles Prisma model or dict.r„   r…   Ú )rþ   )rù   rç   r|   s      rD   Ú_get_guardrail_attrsr  f  s0   € ä% a¨Ó8€CÜ& qÐ*:Ó;€DØ�Ò"˜Ò" Ð#Ð#rL   Ú
guardrailszSequence[_DbOrConfigGuardrail]rå   Úprev_aggÚ	units_aggc                 óT  ‡— g }t        «       }| D �]]  }t        |«      \  }}||fD �	cg c]  }	|	sŒ|	‘Œ	 }
}	|j                  |
«       dddddœ}|
D ]  }	|	|v sŒ||	   } n |d   |d   }}|rd|z  |z  nd}t        t	        |d«      «      }t        |j                  dd	«      «      }t        t	        |d
«      «      }t        |j                  dd«      «      }d}|
D ]'  }	|	|v sŒt        |j                  |	d«      xs d«      } n t        ||«      }t        ˆfd„|
D «       t        «      }|j                  t        ||xs t        |«      |||t        |d«      d d t        |«      ||¬«      «       �Œ` |j                  «       D ]Ÿ  \  }}||v s|d   dk(  rŒ|d   |d   }}|rd|z  |z  nd}t        |j                  |d«      xs d«      }t        ||«      }|j                  t        ||dd|t        |d«      d d t        |«      |‰j                  |t        «      ¬«      «       Œ¡ |S c c}	w )Nr   rß   rš   r–   rë   rì   r÷   Ú	guardrailÚUnknownrø   r¥   r'   c              3   ó2   •K  — | ]  }|‰v sŒ‰|   –— Œ y ­wrG   rf   )rv   Úkr  s     €rD   rx   z+_guardrail_overview_rows.<locals>.<genexpr>‹  s   øè ø€ Ò,a¸aÐRSÐW`ÒR`¨Y°q­\Ñ,aùs   ƒ	�
é   ©r¤   r|   r¥   r¦   r§   r¨   r©   rª   r0   r«   r¬   ÚCustom)Úsetr  Úupdater  rþ   rŽ   r  r�   rÛ   Únextr)   Úappendr£   ÚroundrÓ   rí   )r  rå   r  r  ro   Úcovered_keysrù   rç   Údisplay_namer  Úlookup_keysÚarŸ   r–   rÍ   r÷   r¦   rø   ÚgtypeÚ	prev_failr«   Ú	row_unitsÚagg_keys      `                   rD   Ú_guardrail_overview_rowsr$  m  sy  ø€ ð +-€DÜ$'£E€LØó %
ˆÜ0°Ó3Ñˆˆ\à2>ÀÐ1DÖ%J¨AÊ¢aÐ%JˆÐ%JØ×Ñ˜KÔ(Ø()°QÀ1ÐQRÑSˆØò 	ˆAØ�CŠxØ˜‘F�Ùð	ð ˜‘} a¨	¡lˆWˆÙ/2�U˜W‘_ sÒ*¸ˆ	Ü!Ô"6°qÐ:JÓ"KÓLˆÜ�~×)Ñ)¨+°yÓAÓBˆÜ!Ô"6°qÐ:JÓ"KÓLˆÜ�N×&Ñ& v¨{Ó;Ó<ˆØˆ	Øò 	ˆAØ�HŠ}Ü! (§,¡,¨q°#Ó"6Ò"=¸#Ó>�	Ùð	ô ' y°)Ó<ˆÜ'+Ó,aÀ;Ô,aÔcoÓ'pˆ	Ø�‰ÜØØ!Ò-¤S¨£XØØ!Ø"%Ü˜y¨!Ó,ØØÜ-¨iÓ8ØØ$ôö	
ð/%
ðN —i‘i“kò 
‰
ˆ�Ø�lÑ" a¨
¡m°qÒ&8ØØ˜‘} a¨	¡lˆWˆÙ/2�U˜W‘_ sÒ*¸ˆ	Ü˜(Ÿ,™, w°Ó4Ò;¸Ó<ˆ	Ü& y°)Ó<ˆØ�‰ÜØØØ Ø!Ø"%Ü˜y¨!Ó,ØØÜ-¨iÓ8ØØ$Ÿ=™=¨´,Ó?ôõ	
ð
ð, €Kùòu &Ks
   ¨H%°H%Úpoliciesz+Sequence[prisma_models.LiteLLM_PolicyTable]c                 óV  — g }| D ]¡  }|j                   }|j                  |dddddœ«      }|d   |d   }}|rd|z  |z  nd}	t        |	|j                  |d«      «      }
|j                  t	        ||j
                  xs |dd|t        |	d	«      d d t        |	«      |
t        ¬
«      «       Œ£ |S )Nr   rß   rš   r–   rë   rì   ÚPolicyÚLiteLLMr  r  )	Ú	policy_idr  rÛ   r  r£   Úpolicy_namer  rÓ   r)   )r%  rå   r  ro   ÚpÚpidr  rŸ   r–   rÍ   r«   s              rD   Ú_policy_overview_rowsr-  µ  sÅ   € ð
 +-€DØò 
ˆØ�k‰kˆØ�G‰G�C a°1ÀÈqÑQÓRˆØ˜‘} a¨	¡lˆWˆÙ/2�U˜W‘_ sÒ*¸ˆ	Ü& y°(·,±,¸sÀCÓ2HÓIˆØ�‰ÜØØ—]‘]Ò) cØØ"Ø"%Ü˜y¨!Ó,ØØÜ-¨iÓ8ØÜ'ôõ	
ð
ð* €KrL   z/guardrails/usage/overviewÚ
Guardrails)ÚtagsÚdependenciesÚresponse_modelz
YYYY-MM-DD)r¹   Úuser_api_key_dictc           
   ƒ   ó$  K  — ddl m} |€t        g g dddt        ¬«      S t	        | |«      \  }}ddlm} 	 t        |«      j                  «       ƒ d{  –—† }|D �ch c]  }t        |d«      x}	€Œ|	’Œ }
}|j                  «       D �cg c]  }|j                  d«      |
vsŒ|‘Œ }}g |¢|¢}t        |d||d	œi¬
«      ƒ d{  –—† }t        j                  |«      t        d¬«      z
  j!                  «       }t        |d||dœi¬
«      ƒ d{  –—† }d||d	œi}t#        ||¬
«      ƒ d{  –—† }t%        |d«      }t'        |d«      }t)        |d„ «      }t+        |«      }t-        d„ |j/                  «       D «       «      }t-        d„ |j/                  «       D «       «      }|rd||z
  z  |z  nd}t1        ||||«      }t        ||||t3        |d«      t5        |«      ¬«      S 7 �Œ‹c c}w c c}w 7 �Œ)7 Œá7 ŒÇ# t6        $ r}ddlm}  ||«      ‚d}~ww xY w­w)z8Return guardrail performance overview for the dashboard.r   ©rI   Nrë   ©ro   r¯   r°   r±   r²   r³   ©ÚIN_MEMORY_GUARDRAIL_HANDLERr„   r   ©ÚgteÚlterX   r1   r2   ©r9  Últc                 ó   — | j                   S rG   ©r„   ©rw   s    rD   ú<lambda>z+guardrails_usage_overview.<locals>.<lambda>  s
   € ¸1¿>¹>€ rL   c              3   ó&   K  — | ]	  }|d    –— Œ y­w©rš   Nrf   ©rv   r  s     rD   rx   z,guardrails_usage_overview.<locals>.<genexpr>  ó   è ø€ Ò#H°a A j¥MÑ#Hùó   ‚c              3   ó&   K  — | ]	  }|d    –— Œ y­w©r–   Nrf   rC  s     rD   rx   z,guardrails_usage_overview.<locals>.<genexpr>	  ó   è ø€ Ò"F°A 1 Y¥<Ñ"FùrE  r  ©Úhandle_exception_on_proxy)Úlitellm.proxy.proxy_serverrI   r®   r)   rE   Ú+litellm.proxy.guardrails.guardrail_registryr7  rK   rZ   rþ   Úlist_config_guardrailsr  r\   r   r;   r	   r>   rj   rè   rñ   r�   rö   rz   Úvaluesr$  r  r~   Ú	ExceptionÚlitellm.proxy.utilsrJ  )r+   r,   r2  rI   r@   r?   r7  Údb_guardrailsrù   rç   Úseen_idsÚconfig_guardrailsr  rÜ   Ú
start_prevré   Úunits_whereÚ
units_rowsrå   r  r  r¯   Útotal_requestsÚtotal_blockedÚ	pass_ratero   ri   rJ  s                               rD   Úguardrails_usage_overviewrZ  Ó  sP  è ø€ õ 9àÐÜ$Ø˜2¨Q¸QÈÔ`lô
ð 	
ô ' z°8Ó<�J€Eˆ3åWð-+Ü%6°}Ó%E×%OÑ%OÓ%Q×QˆØ(5Öv 1ÔAUÐVWÐYgÓAhÐ:h¸#Ñ9uš3ÐvˆÐvà2×IÑIÓKö$
ØÈqÏuÉuÐUcÓOdÐltÒOtŠAð$
Ðð $
ð =a¸mÐ<`ÐN_Ð<`ˆ
ô WtØ &°%ÀÑ*DÐ!EôW
÷ Q
ˆô
 "×/Ñ/°Ó6¼ÈÔ9JÑJ×UÑUÓWˆ
ÜTqØ &°*ÀEÑ*JÐ!KôU
÷ O
ˆð
 ˜E¨#Ñ.ðW
ˆô
 4°MÈÔU×Uð 	ô .¨g°~ÓFˆÜ*¨<¸ÓHˆÜ$ ZÑ1IÓJˆ	Ü*¨7Ó3ˆÜ #Ñ#H¸3¿:¹:»<Ô#HÓ HˆÜ"Ñ"F¸¿¹»Ô"FÓFˆÙZh˜E ^°mÑ%CÑDÀ~ÒUÐnsˆ	Ü.¨z¸3ÀÈ)ÓTˆÜ$ØØØ(Ø&Ü˜9 aÓ(Ü.¨zÓ:ô
ð 	
ðC  RûÚvùò$
ðQ
ùðO
øð Vùô$ ò +ÝAá'¨Ó*Ð*ûð+üs–   ‚3H¶G1 ÁGÁG1 ÁG Á/G Á3G1 ÂG%Â G%Â$G1 ÃG*ÃA	G1 ÄG-ÄG1 Ä'G/Ä(B4G1 ÇHÇG1 Ç G1 Ç-G1 Ç/G1 Ç1	HÇ:HÈHÈHz'/guardrails/usage/detail/{guardrail_id}r„   c              ƒ   óÔ  K  — ddl m} |€ddlm}  |dd¬«      ‚t	        ||«      \  }}ddlm} t        |«      j                  d	| i¬
«      ƒ d{  –—† }	|	€|j                  | ¬«      }	|	€ddlm}  |dd¬«      ‚t        |	d«      }
|
| fD �cg c]  }|sŒ|‘Œ	 }}t        |d|i||dœdœ¬
«      ƒ d{  –—† }t        j                  |«      t        d¬«      z
  j                  «       }t        |d|i||dœdœ¬
«      ƒ d{  –—† }d|i||dœdœ}t!        ||¬
«      ƒ d{  –—† }t#        d„ |D «       «      }t#        d„ |D «       «      }|rd|z  |z  nd}t#        d„ |D «       «      }t#        d„ |D «       «      }|rd|z  |z  nd}t%        ||«      }i }|D ]h  }|j                  }||vrdddœ||<   ||   dxx   t'        |j(                  xs d«      z  cc<   ||   dxx   t'        |j*                  xs d«      z  cc<   Œj t-        |j/                  «       «      D ��cg c]  \  }}||d   |d   ddœ‘Œ }}}t1        t        |	d«      «      }t1        t        |	d «      «      }t        |	d«      } t-        t3        |d!„ «      j/                  «       «      }!t5        d"„ |!D «       «      }"t7        d7i d	| “d| xs | “d#t9        |j;                  d#d$«      «      “d%t9        |j;                  d&d'«      «      “d(|“d)t=        |d*«      “d+d“d,d“d-t?        |«      “d.|“d/|j;                  d/«      “d0|“d1tA        |«      “d2|"“d3t3        |d4„ «      “d5t3        |d6„ «      “ŽS 7 �Œc c}w 7 �Œ¦7 �Œ\7 �Œ@c c}}w ­w)8z6Return single guardrail usage metrics and time series.r   r4  N)r/   éô  zPrisma client not initializedr4   r6  r„   rX   r>  i”  zGuardrail not foundr…   Úinr8  )r„   r   r1   r2   r;  c              3   óN   K  — | ]  }t        |j                  xs d «      –— Œ y­w©r   N©rt   rá   ©rv   ræ   s     rD   rx   z*guardrails_usage_detail.<locals>.<genexpr>U  s    è ø€ ÒJ¸Qœ#˜a×2Ñ2Ò7°a×8ÑJùó   ‚#%c              3   óN   K  — | ]  }t        |j                  xs d «      –— Œ y­wr_  ©rt   rã   ra  s     rD   rx   z*guardrails_usage_detail.<locals>.<genexpr>V  s   è ø€ ÒD°qœ˜QŸ_™_Ò1°×2ÑDùrb  rë   rì   c              3   óN   K  — | ]  }t        |j                  xs d «      –— Œ y­wr_  rd  ra  s     rD   rx   z*guardrails_usage_detail.<locals>.<genexpr>Y  s   è ø€ ÒN¸Aœc !§/¡/Ò"6°Q×7ÑNùrb  c              3   óN   K  — | ]  }t        |j                  xs d «      –— Œ y­wr_  r`  ra  s     rD   rx   z*guardrails_usage_detail.<locals>.<genexpr>Z  s    è ø€ ÒO¸Qœ#˜a×2Ñ2Ò7°a×8ÑOùrb  ró   r•   r–   )r   r•   r–   r—   r÷   rø   c                 ó   — | j                   S rG   )r   r?  s    rD   r@  z)guardrails_usage_detail.<locals>.<lambda>m  s
   € ÀAÇFÁF€ rL   c              3   ó<   K  — | ]  \  }}t        ||¬ «      –— Œ y­w))r   ru   N)r¶   )rv   rõ   ru   s      rD   rx   z*guardrails_usage_detail.<locals>.<genexpr>n  s    è ø€ ÒiÉXÈQÐPUÔ3¸À%×HÐHÑiùs   ‚r¥   r'   r¦   r  r  r§   r¨   r  r©   rª   r0   r«   r¹   rº   r»   r¼   r½   c                 ó   — | j                   S rG   )Úteam_idr?  s    rD   r@  z)guardrails_usage_detail.<locals>.<lambda>  s
   € ¸A¿I¹I€ rL   r¾   c                 ó   — | j                   S rG   )Úapi_keyr?  s    rD   r@  z)guardrails_usage_detail.<locals>.<lambda>€  s
   € ¸1¿9¹9€ rL   rf   )!rK  rI   r7   r/   rE   rL  r7  rK   Úfind_uniqueÚget_config_guardrail_by_idrþ   r\   r   r;   r	   r>   rj   rz   rÛ   rt   râ   rã   ry   rí   r  r�   Útupler¸   rŽ   r  r  rÓ   r~   )#r„   r+   r,   r2  rI   r/   r@   r?   r7  r  Ú
logical_idÚiÚ
metric_idsrÜ   rT  ré   rU  rV  rš   r–   rÍ   Úprev_blockedÚprev_reqr!  r«   Ú
ts_by_dateræ   rõ   rð   rº   r÷   rø   Ú_guardrail_nameÚdaily_unit_sumsÚunits_dailys#                                      rD   Úguardrails_usage_detailry    s	  è ø€ õ 9àÐÝ)á¨Ð4SÔTÐTä& z°8Ó<�J€Eˆ3åWä'¨Ó6×BÑBÈ.ÐZfÐIgÐBÓh×h€IØÐØ/×JÑJÐXdÐJÓeˆ	ØÐÝ)á¨Ð4IÔJÐJô -¨YÐ8HÓI€JØ%/°Ð$>ÖD˜qÂ!šÐD€JÐDäRoØà! :Ð.Ø!¨#Ñ.ñ
ôS÷ M€Gô ×+Ñ+¨EÓ2´YÀAÔ5FÑF×QÑQÓS€JÜWtØà! :Ð.Ø&¨eÑ4ñ
ôX÷ R€Lð ˜zÐ*Ø cÑ*ñS€Kô 0°À[ÔQ×Qð ô ÑJÀ'ÔJÓJ€HÜÑD¸GÔDÓD€GÙ7?˜ ™¨(Ò2ÀS€IäÑNÀÔNÓN€LÜÑOÀ,ÔOÓO€HÙ<D˜ Ñ,¨xÒ7È#€IÜ)¨)°YÓ?€Eð 79€JØò >ˆØ�F‰FˆØ�JÑØ'(°QÑ7ˆJ�q‰MØ�1‰�hÓ¤3 q§~¡~Ò':¸Ó#;Ñ;ÓØ�1‰�iÓ ¤C¨¯©Ò(<¸1Ó$=Ñ=Ô ð>ô ˜:×+Ñ+Ó-Ó.÷1áˆAˆqð ˜a ™k°a¸	±lÈTÓRð1€Kñ 1ô %Ô%9¸)ÐEUÓ%VÓW€NÜ$Ô%9¸)ÐEUÓ%VÓW€NÜ1°)Ð=MÓN€OÜ#¤I¨jÑ:JÓ$K×$QÑ$QÓ$SÓT€OÜÑiÐYhÔiÓi€Käò Ù!ðà&Ò6¨,øðô �×#Ñ# F¨KÓ8Ô9ðô �^×'Ñ'¨°YÓ?Ô@ð	ñ
 #ðô �y !Ô$ðñ ðñ ðô & iÔ0ðñ ðð #×&Ñ& }Ô5ðñ  ðô ' zÔ2ðñ &ðô & jÑ2EÔFðô  % ZÑ1DÔEð!ð ð} iûò EðMùðRùð 	Rûó&1ùso   ‚AM(ÁMÁ<M(ÂMÂMÂM(Â3MÂ4AM(Ä MÄM(ÄMÄ C;M(ÈM"È2D M(ÍM(ÍM(ÍM(Í"M(Úguardrail_idsr)  z5prisma_types.LiteLLM_SpendLogGuardrailIndexWhereInputc                 ór  — i }| rt        | «      dkD  rd| in| d   |d<   |r||d<   |s|r�i }|rA|j                  dd«      j                  «       }d|vr|d	z  }t        j                  |«      |d
<   |rA|j                  dd«      j                  «       }d|vr|dz  }t        j                  |«      |d<   ||d<   |S )Nr  r]  r   r„   r)  ÚZz+00:00ÚTzT00:00:00+00:00r9  zT23:59:59+00:00r:  Ú
start_time)ÚlenÚreplaceÚstripr   r;   )rz  r)  r+   r,   rY   Ú	st_filterÚsdÚeds           rD   Ú_build_usage_logs_wherer…  „  sâ   € ð KM€EÙÜ9<¸]Ó9KÈaÒ9O  }Ñ 5ÐUbÐcdÑUeˆˆnÑÙØ&ˆˆkÑÙ‘XØ8:ˆ	ÙØ×#Ñ# C¨Ó2×8Ñ8Ó:ˆBØ˜"‰}ØÐ'Ñ'�Ü'×5Ñ5°bÓ9ˆI�eÑÙØ×!Ñ! # xÓ0×6Ñ6Ó8ˆBØ˜"‰}ØÐ'Ñ'�Ü'×5Ñ5°bÓ9ˆI�eÑØ'ˆˆlÑØ€LrL   rw   z,prisma_models.LiteLLM_SpendLogGuardrailIndexÚslzprisma_models.LiteLLM_SpendLogsÚaction_filterc                 ó4  — |j                   }t        |t        «      r	 t        j                  |«      }|xs i j                  d«      xs g }d }|D ]7  }|j                  d«      xs |j                  d«      | j                  k(  sŒ5|} n d}d }d }	d }
|rã|j                  d«      xs dj                  «       }d|v sd|v rd	}n
d
|v sd|v rd}|j                  d«      }|�t        t        |«      dz  d«      }	|j                  d«      xs |j                  d«      }|�t        t        |«      d«      }|j                  d«      }t        |t        «      r|d d }
nt        |t        «      rt        |«      d d }
|r||k7  ry t        |j                  d«      r|j                  j                  «       nt        |j                  «      }t        | j                   ||||	|j"                  t%        |«      t'        |j(                  «      |
¬«	      S # t
        $ r i }Y �Œãw xY w)NÚguardrail_informationr„   r…   r•   r†   r
  Ú
intervenedÚblockr–   ÚfailÚerrorr›   r‡   iè  r   rˆ   r‰   é   rŠ   r\  r>   )	r¤   rÁ   rÂ   r—   rÃ   rÄ   rÅ   rÆ   rÇ   )Úmetadatar  rŽ   ÚjsonÚloadsrO  r  r„   Úlowerr  r�   r  ÚhasattrÚ	startTimer>   rÀ   Ú
request_idrÄ   Ú_input_snippet_for_logÚ_snippetÚresponse)rw   r†  r‡  ÚmetaÚguardrail_info_listÚentry_for_guardrailÚgiÚ
action_valÚ	score_valÚlatency_valÚ
reason_valÚstr‡   ÚrespÚtss                  rD   Ú_usage_log_entry_from_rowr¤  Ÿ  s  € ð
 �;‰;€DÜ�$œÔð	Ü—:‘:˜dÓ#ˆDð @DºzÀr×>NÑ>NÐOfÓ>gÒ>mÐkmÐØ48ÐØ!ò ˆØ�F‰F�>Ó"Ò> b§f¡fÐ-=Ó&>À1Ç>Á>ÓQØ"$ÐÙðð €JØ€IØ€KØ€JÙØ(×,Ñ,Ð-?Ó@ÒFÀB×MÑMÓOˆØ˜2Ñ ¨B¡Ø"‰JØ�r‰\˜W¨™]Ø"ˆJØ-×1Ñ1°*Ó=ˆØÐÜ¤ h£°$Ñ 6¸Ó:ˆKØ'×+Ñ+Ð,>Ó?ÒhÐCV×CZÑCZÐ[gÓChˆ	ØÐ Üœe IÓ.°Ó2ˆIØ)×-Ñ-Ð.BÓCˆÜ�dœCÔ Ø˜d˜s˜‰JÜ˜œdÔ#Ü˜T› 4 C˜ˆJÙ˜ }Ò4ØÜ,3°B·L±LÀ+Ô,N�—‘×&Ñ&Ô(ÔTWÐXZ×XdÑXdÓTe€BÜØ�<‰<ØØØØØ�h‰hÜ,¨RÓ0Ü §¡Ó,Øô
ð 
øôA ò 	Ø‹Dð	ús   žH ÈHÈHÚtextÚmax_lenc                 ón  — | €y t        | t        «      r| }n{t        | t        «      r`| D �cg c]C  }t        |t        «      r&d|v r"t        |d   x}t        «      r|nt        |«      n
t        |«      ‘ŒE }}dj	                  |«      }nt        | «      }t        |«      |kD  r|d | dz   n|}|dk(  ry |S c c}w )NÚcontentú z...z{})r  rŽ   r´   r  Újoinr  )r¥  r¦  ÚsÚitemÚcÚpartsÚresults          rD   r—  r—  Õ  sÄ   € Ø€|ØÜ�$œÔØ‰Ü	�Dœ$Ô	ð
 ö	'
ð ô ˜$¤Ô%¨)°tÑ*;ô  $ y¡/Ð1˜Q´3Ô7‰Q¼SÀ¼Vä�T“ñð'
ˆð '
ð �H‰H�U‹O‰ä�‹IˆÜ-0°«V°gÒ-=�Q�x˜�[ 5Ò(À1€FØ�‚~ØØ€Mùò'
s   «AB2c                 óÊ  — t        | j                  «      }|r|S t        | dd«      }|syt        |t        «      r	 t        j                  |«      }t        |t        «      r`|j                  d«      }|€3t        |j                  d«      t        «      r|d   j                  d«      }t        |«      }|r|S t        |«      S t        |«      S # t        $ r t        |«      cY S w xY w)z_Snippet for request input: prefer messages, fall back to proxy_server_request (same as drawer).Úproxy_server_requestNÚmessagesÚbody)
r—  r²  rà   r  rŽ   r�  r‘  rO  r  r  )r†  ÚoutÚpsrÚmsgss       rD   r–  r–  ê  sË   € ä
�2—;‘;Ó
€CÙ
Øˆ
Ü
�"Ð,¨dÓ
3€CÙØÜ�#”sÔð	!Ü—*‘*˜S“/ˆCô �#”tÔØ�w‰w�zÓ"ˆØˆ<œJ s§w¡w¨v£¼Ô=Ø�v‘;—?‘? :Ó.ˆDÜ�t‹nˆÙØˆJÜ˜‹}ÐÜ�C‹=Ðøô ò 	!Ü˜C“=Ò ð	!ús   »C ÃC"Ã!C"z/guardrails/usage/logsr  )Úgeé2   éd   )r·  ÚlerË   rÌ   rÂ   c              ƒ   ó8  K  — ddl m} |€t        g d||¬«      S | s|st        g d||¬«      S 	 | r| gng }	| rdddlm}
 t        |«      j                  d| i¬«      ƒ d{  –—† }|€|
j                  | ¬«      }|r#t        |d	«      }|r||	vr|	j                  |«       t        |	xs d|||«      }t        |«      j                  j                  |d
di|dz
  |z  |dz   ¬«      ƒ d{  –—† }t        |«      j                  j                  |¬«      ƒ d{  –—† }|d| D �cg c]  }|j                  ‘Œ }}|st        g |||¬«      S t!        |«      j                  j                  dd|ii¬«      ƒ d{  –—† }|D �ci c]  }|j                  |“Œ }}g }|d| D ]A  }|j#                  |j                  «      }|sŒ!t%        |||«      }|€Œ1|j                  |«       ŒC t        ||||¬«      S 7 �ŒŠ7 �Œ7 ŒÜc c}w 7 Œ…c c}w # t&        $ r}ddlm}  ||«      ‚d}~ww xY w­w)zOReturn paginated run logs for a guardrail (or policy) from SpendLogs via index.r   r4  N)rÊ   r’   rË   rÌ   r6  r„   rX   r>  r…   r~  Údescr  )rY   ÚorderÚskipÚtaker•  r]  rI  )rK  rI   rÉ   rL  r7  rK   rm  rn  rþ   r  r…  r"   rH   rZ   Úcountr•  r#   r  r¤  rO  rP  rJ  )r„   r)  rË   rÌ   rÂ   r+   r,   r2  rI   Úeffective_guardrail_idsr7  r  Úlogical_namerY   Ú
index_rowsr’   rw   Úrequest_idsÚ
spend_logsr«  Ú	log_by_idÚlogs_outr†  Úentryri   rJ  s                             rD   Úguardrails_usage_logsrÉ    sg  è ø€ õ" 9àÐÜ  b°¸È	ÔRÐRá¡	Ü  b°¸È	ÔRÐRð,+ñ GS°\±NÐXZÐÙÝ_ä/°Ó>×JÑJÐR`ÐbnÐQoÐJÓp×pˆIØÐ Ø7×RÑRÐ`lÐRÓm�	ÙÜ&:¸9ÐFVÓ&W�Ù LÐ8OÑ$OØ+×2Ñ2°<Ô@ä.Ð/FÒ/NÈ$ÐPYÐ[eÐgoÓpˆÜSsØóT
ç
‰%—	‘	ØØ Ð(Ø˜‘(˜iÑ'Ø˜Q‘ð	 ó 
÷N
ˆ
ô #CÀ=Ó"Q×"WÑ"W×"]Ñ"]ÐdiÐ"]Ó"j×jˆØ4>¸zÀ	Ð4JÖK¨q˜aŸl›lÐKˆÐKÙÜ$¨"°EÀÐPYÔZÐZÜM`ØóN
ç
‰%—	‘	 °°kÐ/BÐ C�	ÓD÷HEˆ
ð 6@Ö@°˜AŸL™L¨!™OÐ@ˆ	Ð@Ø/1ˆØ˜J˜YÐ'ò 	'ˆAØ—‘˜qŸ|™|Ó,ˆBÙØÜ-¨a°°VÓ<ˆEØÑ Ø—‘ Õ&ð	'ô ! h°eÀ$ÐR[Ô\Ð\ðC qùðN
ùð kúÚKðHEúò Aøô ò +ÝAá'¨Ó*Ð*ûð+üs¡   ‚+H®/G; ÁG'ÁBG; Ã#G*Ã$,G; ÄG-ÄG; ÄG/Ä/G; ÅHÅ,G; Å.G4Å/G; Å7G6Æ9G; Ç!G; Ç&HÇ'G; Ç*G; Ç-G; Ç/G; Ç6G; Ç;	HÈHÈHÈHz/policies/usage/overviewÚPoliciesc           
   ƒ   óò  K  — ddl m} |€t        g g dddt        ¬«      S t	        | |«      \  }}	 t        |«      j                  «       ƒ d{  –—† }t        |d||dœi¬«      ƒ d{  –—† }t        |dt        j                  |«      t        d	¬
«      z
  j                  «       |dœi¬«      ƒ d{  –—† }t        |d«      }	t        |d«      }
t        |«      }t        d„ |	j!                  «       D «       «      }t        d„ |	j!                  «       D «       «      }|rd||z
  z  |z  nd}t#        ||	|
«      }t        ||||t%        |d«      t        ¬«      S 7 �Œ7 Œí7 Œ§# t&        $ r}ddlm}  ||«      ‚d}~ww xY w­w)z5Return policy performance overview for the dashboard.r   r4  Nrë   r5  r   r8  rX   r1   r2   r;  r)  c              3   ó&   K  — | ]	  }|d    –— Œ y­wrB  rf   rC  s     rD   rx   z*policies_usage_overview.<locals>.<genexpr>s  rD  rE  c              3   ó&   K  — | ]	  }|d    –— Œ y­wrG  rf   rC  s     rD   rx   z*policies_usage_overview.<locals>.<genexpr>t  rH  rE  r  rI  )rK  rI   r®   r)   rE   rO   rZ   r_   r   r;   r	   r>   rè   rñ   rö   rz   rN  r-  r  rO  rP  rJ  )r+   r,   r2  rI   r@   r?   r%  rÜ   ré   rå   r  r¯   rW  rX  rY  ro   ri   rJ  s                     rD   Úpolicies_usage_overviewrÎ  M  s’  è ø€ õ 9àÐÜ$Ø˜2¨Q¸QÈÔ`lô
ð 	
ô ' z°8Ó<�J€Eˆ3ð +Ü /°Ó >× HÑ HÓ J×JˆÜSmØ &°%ÀÑ*DÐ!EôT
÷ N
ˆô YsØàÜ ×.Ñ.¨uÓ5¼	ÀqÔ8IÑI×TÑTÓVØñðôY
÷ S
ˆô .¨g°{ÓCˆÜ*¨<¸ÓEˆÜ*¨7Ó3ˆÜ #Ñ#H¸3¿:¹:»<Ô#HÓ HˆÜ"Ñ"F¸¿¹»Ô"FÓFˆÙZh˜E ^°mÑ%CÑDÀ~ÒUÐnsˆ	Ü+¨H°c¸8ÓDˆÜ$ØØØ(Ø&Ü˜9 aÓ(Ü(ô
ð 	
ð) KùðN
øðS
ùô0 ò +ÝAá'¨Ó*Ð*ûð+üs`   ‚-E7°E ÁEÁE Á&EÁ'AE Â.EÂ/B!E ÅE7ÅE ÅE ÅE Å	E4Å!E/Å/E4Å4E7)rI   r&   r-   z3TableActions[prisma_models.LiteLLM_GuardrailsTable])rI   r&   r-   z/TableActions[prisma_models.LiteLLM_PolicyTable])rI   r&   r-   z9TableActions[prisma_models.LiteLLM_DailyGuardrailMetrics])rI   r&   r-   z6TableActions[prisma_models.LiteLLM_DailyPolicyMetrics])rI   r&   rY   z4prisma_types.LiteLLM_DailyGuardrailMetricsWhereInputr-   z5Sequence[prisma_models.LiteLLM_DailyGuardrailMetrics])rI   r&   rY   z1prisma_types.LiteLLM_DailyPolicyMetricsWhereInputr-   z2Sequence[prisma_models.LiteLLM_DailyPolicyMetrics])rI   r&   r-   z<TableActions[prisma_models.LiteLLM_DailyGuardrailUsageUnits])rI   r&   rY   z7prisma_types.LiteLLM_DailyGuardrailUsageUnitsWhereInputr-   rc   )éÈ   )sÚ__doc__r�  Úcollections.abcr   r   r   r   r   r   r	   r
   Ú	itertoolsr   r%   r   Útypingr   r   r   r   r   r7   r   r   r   Úpydanticr   Útyping_extensionsr   r   r   Úlitellm._loggingr   Úlitellm.proxy._typesr   Ú$litellm.proxy.auth.user_api_key_authr   Ú%litellm.repositories.prisma_protocolsr   Ú'litellm.repositories.table_repositoriesr   r   r   r    r!   r"   r#   Úprismar$   Úprisma_modelsÚprisma_typesrP  r&   Úlitellm.types.guardrailsr'   ÚLiteLLM_GuardrailsTablerú   ÚLiteLLM_DailyGuardrailMetricsÚLiteLLM_DailyPolicyMetricsÚ_DailyMetricsRowr(   r�   r)   rŽ   rt   r*   ro  rE   rK   rO   rS   rU   r\   r_   rb   rj   rn   r~   r�   rƒ   r”   r™   rž   r¡   r£   r®   r¶   r¸   rÀ   rÉ   r�   rÓ   rÛ   rè   rñ   r´   rö   Ú_GuardrailStrFieldÚ_GuardrailObjectFieldrþ   r‘   r  r  r  r$  r-  r  rZ  ry  r…  r¤  r—  r–  rÉ  rÎ  rf   rL   rD   ú<module>rå     s¹  ðòó
 ß AÓ Aß 8Ó 8Ý Ý "ß ?Õ ?ç -Ñ -Ý ß >Ñ >å 1Ý /Ý BÝ >÷÷ ñ ñ Ý.Ý,å0Ý2à(×@Ñ@À9ÑLÐØ$×BÑBÀ]×EmÑEmÑmÐá“€ˆÓ á)9¸"Ó)=€ˆe�G˜C ˜HÑ%Ñ&Ó =à"Ð �uÓ "ð c¨D¡jð ¸CÀ$¹Jð È5ÐQTÐVYÐQYÉ?ó ð@Ø!ðà:óðØ!ðà6óðØ!ðà@óðØ!ðà=óðVØ!ðVàAðVð =óVðSØ!ðSà>ðSð :óSðØ!ðàCóðØ!ðàDðð @óð ÐGð ÈCó ðÐWð Ð\cÐdgÐilÐdlÑ\mó ðmØ
DðmàMðmð ˆS�'˜#˜s˜(Ñ#Ð#Ñ$ómôe˜	¨õ eô%�iô %ô�Iô ô˜	ô ô
˜	ô ô
"�yô "ô'˜Iô 'ô˜9ô ô
8˜)ô 8ô&	�Iô 	ô˜	ô ð eð °ó ð¨ð ¸uð Èó ð
Ð&Bð 
ÈSð 
ÐU\Ð]`ÐboÐ]oÑUpó 
ð	lÐ#?ð 	lÈ#ð 	lÐRYÐZ]Ð_dÐZdÑReó 	lðsÐ!=ð sÀ$ÀÑBWó sð Ð=Ñ>Ð ØÐ BÑCÐ ð 
Ø aÐ2Ð aÐ;MÐ aÐRUÐX\ÑR\Ò aó 
Ø að 
Ø `Ð2Ð `Ð;PÐ `ÐU[Ò `ó 
Ø `ð#Ð2ð #Ð;MÐPeÑ;eð #Ðjpó #ð�Fð ˜t C¨ H™~ó ð$Ð2ð $°u¸SÀ#¸X±ó $ðEØ0ðEà	��mÐ#Ñ	$ðEð �c˜5�jÑ!ðEð �s˜G C¨ HÑ-Ð-Ñ.ð	Eð
 
Ð
ÑóEðPØ;ðà	��mÐ#Ñ	$ðð �c˜5�jÑ!ðð 
Ð
Ñó	ð< ‡�Ø Ø
ˆÙÐ+Ó,Ð-Ø(ð	 ó ñ # 4°\ÔBÙ  °<Ô@Ù(/Ð0AÓ(Bñ>+Ø�d‘
ð>+à�D‰jð>+ð &ò>+óð>+ðB ‡�Ø-Ø
ˆÙÐ+Ó,Ð-Ø&ð	 ó ñ # 4›[Ù  ›;Ù(/Ð0AÓ(Bñ	aØðaà�d‘
ðað �D‰jðað &ò	aóðaðHØ˜‘9˜tÑ#ðà�T‰zðð �d‘
ðð �D‰jð	ð
 =óð63Ø5ð3à)ð3ð ˜‘:ð3ð �TÑó	3ñl�3ð  ð ¨s°T©zó ð*Ð@ð ÀSÈ4ÁZó ð0 ‡�ØØ
ˆÙÐ+Ó,Ð-Ø$ð	 ó ñ  % T›{Ù! $›KÙ�a˜A”Ù˜2 !¨Ô,Ù˜t›Ù" 4›[Ù  ›;Ù(/Ð0AÓ(Bñ?+Ø˜‘*ð?+à�T‰zð?+ð ð?+ð ð	?+ð
 �$‰Jð?+ð �d‘
ð?+ð �D‰jð?+ð &ò?+óð?+ðJ ‡�ØØ
ˆÙÐ+Ó,Ð-Ø(ð	 ó ñ # 4°\ÔBÙ  °<Ô@Ù(/Ð0AÓ(Bñ/+Ø�d‘
ð/+à�D‰jð/+ð &ò/+óñ/+rL   