Ë
    tPêjo  ã                   ó  — U d dl 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
 erd dlmZ dZeed<    G d	„ d
e	«      Z G d„ de	«      Z G d„ de	«      Z G d„ de	«      Z G d„ de	«      ZdZeed<   dZeed<   dZeed<   dZeed<    G d„ de	«      Z G d„ de	«      Z e
ee   «      Zeed<    e
eed f   «      Zeed!<    e
ee   «      Zeed"<    e
ee   «      Zeed#<   d$ee   d%efd&„Z d'd(d)ed*ed+ee!   d,ee!   d%efd-„Z"y).é    N)ÚSequence)Údatetime)ÚTYPE_CHECKINGÚFinal)Ú	BaseModelÚTypeAdapter)ÚPrismaClientÚUnknownÚUNKNOWN_CALL_TYPEc                   óJ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   y)ÚCacheActivityGroupÚ	call_typeÚapi_requestsÚ
cache_hitsÚfailed_requestsÚcached_completion_tokensÚgenerated_completion_tokensN©Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úint© ó    úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/analytics_endpoints/cache_activity.pyr   r      s$   … ØƒNØÓØƒOØÓØ!Ó!Ø!$Ô$r   r   c                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ÚCacheActivityTotalsr   r   r   r   Úcache_hit_ratioN)r   r   r   r   r   Úfloatr   r   r   r   r      s   … ØÓØƒOØÓØ!Ó!ØÔr   r   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)ÚCacheActivityFilterOptionsÚkey_aliasesÚmodelsN)r   r   r   Úlistr   r   r   r   r   r#   r#       s   … Ø�c‘ÓØ�‰IÔr   r#   c                   ó6   — e Zd ZU eed<   eed<   eed<   eed<   y)ÚCacheActivityErrorBucketr   Ú
error_codeÚerror_classÚcountNr   r   r   r   r(   r(   %   s   … ØƒNØƒOØÓØ„Jr   r(   c                   óF   — e Zd ZU ee   ed<   eed<   eed<   ee	df   ed<   y)ÚCacheActivityResponseÚgroupsÚtotalsÚfilter_options.Úerror_breakdownN)
r   r   r   r&   r   r   r   r#   Útupler(   r   r   r   r-   r-   ,   s+   … ØÐ#Ñ$Ó$ØÓØ.Ó.ØÐ3°SÐ8Ñ9Ô9r   r-   aF  
    SELECT
        CASE WHEN sl."call_type" = '' THEN 'Unknown' ELSE sl."call_type" END AS call_type,
        (COUNT(*)
            - SUM(CASE WHEN COALESCE(sl."cache_hit", '') = 'True' THEN 1 ELSE 0 END)
            - SUM(CASE WHEN sl."status" = 'failure' THEN 1 ELSE 0 END))::int AS api_requests,
        SUM(CASE WHEN COALESCE(sl."cache_hit", '') = 'True' THEN 1 ELSE 0 END)::int AS cache_hits,
        SUM(CASE WHEN sl."status" = 'failure' THEN 1 ELSE 0 END)::int AS failed_requests,
        SUM(CASE WHEN COALESCE(sl."cache_hit", '') = 'True' THEN sl."completion_tokens" ELSE 0 END)::int
            AS cached_completion_tokens,
        SUM(CASE WHEN COALESCE(sl."cache_hit", '') != 'True' THEN sl."completion_tokens" ELSE 0 END)::int
            AS generated_completion_tokens
    FROM "LiteLLM_SpendLogs" sl
    LEFT JOIN "LiteLLM_VerificationToken" vt ON sl."api_key" = vt."token"
    WHERE
        sl."startTime" >= ($1::timestamptz AT TIME ZONE 'UTC')
        AND sl."startTime" <  (($2::timestamptz + INTERVAL '1 day') AT TIME ZONE 'UTC')
        AND ($3::jsonb = '[]'::jsonb
            OR COALESCE(vt."key_alias", 'Unnamed Key') IN (SELECT jsonb_array_elements_text($3::jsonb)))
        AND ($4::jsonb = '[]'::jsonb
            OR sl."model" IN (SELECT jsonb_array_elements_text($4::jsonb)))
    GROUP BY 1
    ORDER BY (COUNT(*)) DESC
Ú
GROUPS_SQLa¼  
    SELECT
        CASE WHEN sl."call_type" = '' THEN 'Unknown' ELSE sl."call_type" END AS call_type,
        COALESCE(NULLIF(sl."metadata"->'error_information'->>'error_code', ''), 'Unknown') AS error_code,
        COALESCE(NULLIF(sl."metadata"->'error_information'->>'error_class', ''), 'Unknown') AS error_class,
        COUNT(*)::int AS count
    FROM "LiteLLM_SpendLogs" sl
    LEFT JOIN "LiteLLM_VerificationToken" vt ON sl."api_key" = vt."token"
    WHERE
        sl."status" = 'failure'
        AND sl."startTime" >= ($1::timestamptz AT TIME ZONE 'UTC')
        AND sl."startTime" <  (($2::timestamptz + INTERVAL '1 day') AT TIME ZONE 'UTC')
        AND ($3::jsonb = '[]'::jsonb
            OR COALESCE(vt."key_alias", 'Unnamed Key') IN (SELECT jsonb_array_elements_text($3::jsonb)))
        AND ($4::jsonb = '[]'::jsonb
            OR sl."model" IN (SELECT jsonb_array_elements_text($4::jsonb)))
    GROUP BY 1, 2, 3
    ORDER BY (COUNT(*)) DESC
ÚERROR_BREAKDOWN_SQLad  
    SELECT DISTINCT COALESCE(vt."key_alias", 'Unnamed Key') AS key_alias
    FROM "LiteLLM_SpendLogs" sl
    LEFT JOIN "LiteLLM_VerificationToken" vt ON sl."api_key" = vt."token"
    WHERE
        sl."startTime" >= ($1::timestamptz AT TIME ZONE 'UTC')
        AND sl."startTime" <  (($2::timestamptz + INTERVAL '1 day') AT TIME ZONE 'UTC')
    ORDER BY 1
ÚKEY_ALIAS_OPTIONS_SQLa  
    SELECT DISTINCT sl."model" AS model
    FROM "LiteLLM_SpendLogs" sl
    WHERE
        sl."startTime" >= ($1::timestamptz AT TIME ZONE 'UTC')
        AND sl."startTime" <  (($2::timestamptz + INTERVAL '1 day') AT TIME ZONE 'UTC')
        AND sl."model" != ''
    ORDER BY 1
ÚMODEL_OPTIONS_SQLc                   ó   — e Zd ZU eed<   y)Ú_KeyAliasRowÚ	key_aliasN©r   r   r   r   r   r   r   r   r8   r8   u   s   … Ø„Nr   r8   c                   ó   — e Zd ZU eed<   y)Ú	_ModelRowÚmodelNr:   r   r   r   r<   r<   y   s   … Ø„Jr   r<   Ú_groups_adapter.Ú_error_buckets_adapterÚ_key_alias_rows_adapterÚ_model_rows_adapterr.   Úreturnc           	      óâ   — t        d„ | D «       «      }t        d„ | D «       «      }t        d„ | D «       «      }||z   |z   }t        |||t        d„ | D «       «      |dkD  r||z  dz  ¬«      S d¬«      S )	Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)r   ©Ú.0Úgroups     r   ú	<genexpr>z!compute_totals.<locals>.<genexpr>„   s   è ø€ ÒE°U˜e×0Õ0ÑEùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrE   )r   rF   s     r   rI   z!compute_totals.<locals>.<genexpr>…   s   è ø€ ÒA°˜E×,Õ,ÑAùrJ   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrE   )r   rF   s     r   rI   z!compute_totals.<locals>.<genexpr>†   s   è ø€ Ò K¸5 ×!6Õ!6Ñ KùrJ   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrE   )r   rF   s     r   rI   z!compute_totals.<locals>.<genexpr>Œ   s   è ø€ Ò$XÈ U×%CÕ%CÑ$XùrJ   r   éd   g        )r   r   r   r   r    )Úsumr   )r.   r   r   r   Úall_requestss        r   Úcompute_totalsrQ   ƒ   s‹   € ÜÑE¸fÔEÓE€LÜÑA¸&ÔAÓA€JÜ Ñ KÀFÔ KÓK€OØ&¨Ñ3°oÑE€LÜØ!ØØ'Ü!$Ñ$XÐQWÔ$XÓ!XØ=IÈAÒ=M˜ lÑ2°cÑ9ôð ð
 TWôð r   Úprisma_clientr	   Ú
start_dateÚend_dater$   r%   c              ƒ   óF  K  — t        j                  t        |«      «      }t        j                  t        |«      «      }t        j                  | j
                  j                  t        ||||«      | j
                  j                  t        ||||«      | j
                  j                  t        ||«      | j
                  j                  t        ||«      «      ƒ d {  –—† \  }}}	}
t        j                  |xs g «      }t        |t        |«      t        t         j                  |	xs g «      D �cg c]  }|j"                  ‘Œ c}t$        j                  |
xs g «      D �cg c]  }|j&                  ‘Œ c}¬«      t(        j                  |xs g «      ¬«      S 7 Œºc c}w c c}w ­w)N)r$   r%   )r.   r/   r0   r1   )ÚjsonÚdumpsr&   ÚasyncioÚgatherÚdbÚ	query_rawr3   r4   r5   r6   r>   Úvalidate_pythonr-   rQ   r#   r@   r9   rA   r=   r?   )rR   rS   rT   r$   r%   Úkey_aliases_jsonÚmodels_jsonÚ
group_rowsÚ
error_rowsÚkey_alias_rowsÚ
model_rowsr.   Úrows                r   Úget_cache_activityrd   ‘   s[  è ø€ ô #Ÿj™j¬¨kÓ):Ó;ÐÜŸ™¤D¨£LÓ1€KÜ?F¿~¹~Ø×Ñ×"Ñ"¤:¨z¸8ÐEUÐWbÓcØ×Ñ×"Ñ"Ô#6¸
ÀHÐN^Ð`kÓlØ×Ñ×"Ñ"Ô#8¸*ÀhÓOØ×Ñ×"Ñ"Ô#4°jÀ(ÓKó	@÷ :Ñ6€J�
˜N¨Jô $×3Ñ3°JÒ4DÀ"ÓE€FÜ ØÜ˜fÓ%Ü1Ü2I×2YÑ2YÐZhÒZnÐlnÓ2oÖp¨3˜Ÿ›ÒpÜ)<×)LÑ)LÈZÒM]Ð[]Ó)^Ö_ #�C—I“IÒ_ô
ô /×>Ñ>¸zÒ?OÈRÓPôð ð:úò qùÚ_ùs1   ‚CF!ÃFÃAF!Ä-FÅ F!ÅFÅ0&F!Æ
F!)#rX   rV   Úcollections.abcr   r   Útypingr   r   Úpydanticr   r   Úlitellm.proxy.utilsr	   r   r   r   r   r#   r(   r-   r3   r4   r5   r6   r8   r<   r&   r>   r2   r?   r@   rA   rQ   r   rd   r   r   r   ú<module>ri      sq  ðÜ Û Ý $Ý ß 'ç +áÝ0à$Ð �5Ó $ô%˜ô %ô˜)ô ô ô ô
˜yô ô:˜Iô :ð€
ˆEó ð2Ð �Uó ð( Ð �uó ðÐ �5ó ô�9ô ô�	ô ñ % TÐ*<Ñ%=Ó>€�Ó >Ù +¨EÐ2JÈCÐ2OÑ,PÓ QÐ ˜Ó QÙ!,¨T°,Ñ-?Ó!@Ð ˜Ó @Ù(¨¨i©Ó9Ð �UÓ 9ð˜8Ð$6Ñ7ð Ð<Oó ðØ!ðàðð ðð ˜#‘ð	ð
 �S‰Mðð ôr   