Spaces:
Sleeping
Sleeping
#### Analytics Endpoints ##### | |
from datetime import datetime | |
from typing import List, Optional | |
import fastapi | |
from fastapi import APIRouter, Depends, HTTPException, status | |
from litellm.proxy._types import * | |
from litellm.proxy.auth.user_api_key_auth import user_api_key_auth | |
router = APIRouter() | |
async def get_global_activity( | |
start_date: Optional[str] = fastapi.Query( | |
default=None, | |
description="Time from which to start viewing spend", | |
), | |
end_date: Optional[str] = fastapi.Query( | |
default=None, | |
description="Time till which to view spend", | |
), | |
): | |
""" | |
Get number of cache hits, vs misses | |
{ | |
"daily_data": [ | |
const chartdata = [ | |
{ | |
date: 'Jan 22', | |
cache_hits: 10, | |
llm_api_calls: 2000 | |
}, | |
{ | |
date: 'Jan 23', | |
cache_hits: 10, | |
llm_api_calls: 12 | |
}, | |
], | |
"sum_cache_hits": 20, | |
"sum_llm_api_calls": 2012 | |
} | |
""" | |
if start_date is None or end_date is None: | |
raise HTTPException( | |
status_code=status.HTTP_400_BAD_REQUEST, | |
detail={"error": "Please provide start_date and end_date"}, | |
) | |
start_date_obj = datetime.strptime(start_date, "%Y-%m-%d") | |
end_date_obj = datetime.strptime(end_date, "%Y-%m-%d") | |
from litellm.proxy.proxy_server import prisma_client | |
try: | |
if prisma_client is None: | |
raise ValueError( | |
"Database not connected. Connect a database to your proxy - https://docs.litellm.ai/docs/simple_proxy#managing-auth---virtual-keys" | |
) | |
sql_query = """ | |
SELECT | |
CASE | |
WHEN vt."key_alias" IS NOT NULL THEN vt."key_alias" | |
ELSE 'Unnamed Key' | |
END AS api_key, | |
sl."call_type", | |
sl."model", | |
COUNT(*) AS total_rows, | |
SUM(CASE WHEN sl."cache_hit" = 'True' THEN 1 ELSE 0 END) AS cache_hit_true_rows, | |
SUM(CASE WHEN sl."cache_hit" = 'True' THEN sl."completion_tokens" ELSE 0 END) AS cached_completion_tokens, | |
SUM(CASE WHEN sl."cache_hit" != 'True' THEN sl."completion_tokens" ELSE 0 END) AS generated_completion_tokens | |
FROM "LiteLLM_SpendLogs" sl | |
LEFT JOIN "LiteLLM_VerificationToken" vt ON sl."api_key" = vt."token" | |
WHERE | |
sl."startTime" BETWEEN $1::date AND $2::date + interval '1 day' | |
GROUP BY | |
vt."key_alias", | |
sl."call_type", | |
sl."model" | |
""" | |
db_response = await prisma_client.db.query_raw( | |
sql_query, start_date_obj, end_date_obj | |
) | |
if db_response is None: | |
return [] | |
return db_response | |
except Exception as e: | |
raise HTTPException( | |
status_code=status.HTTP_400_BAD_REQUEST, | |
detail={"error": str(e)}, | |
) | |