forked from phoenix/litellm-mirror
fix - working filter by tag query
This commit is contained in:
parent
2ac8f1c6ec
commit
45cb899687
2 changed files with 81 additions and 23 deletions
|
@ -1,5 +1,7 @@
|
||||||
# Enterprise Proxy Util Endpoints
|
# Enterprise Proxy Util Endpoints
|
||||||
|
from typing import Optional, List
|
||||||
from litellm._logging import verbose_logger
|
from litellm._logging import verbose_logger
|
||||||
|
from litellm.proxy.proxy_server import PrismaClient, HTTPException
|
||||||
import collections
|
import collections
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
@ -19,8 +21,31 @@ async def get_spend_by_tags(start_date=None, end_date=None, prisma_client=None):
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client):
|
async def ui_get_spend_by_tags(
|
||||||
|
start_date: str,
|
||||||
|
end_date: str,
|
||||||
|
prisma_client: Optional[PrismaClient] = None,
|
||||||
|
tags_str: Optional[str] = None,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Should cover 2 cases:
|
||||||
|
1. When user is getting spend for all_tags. "all_tags" in tags_list
|
||||||
|
2. When user is getting spend for specific tags.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# tags_str is a list of strings csv of tags
|
||||||
|
# tags_str = tag1,tag2,tag3
|
||||||
|
# convert to list if it's not None
|
||||||
|
tags_list: Optional[List[str]] = None
|
||||||
|
if tags_str is not None and len(tags_str) > 0:
|
||||||
|
tags_list = tags_str.split(",")
|
||||||
|
|
||||||
|
if prisma_client is None:
|
||||||
|
raise HTTPException(status_code=500, detail={"error": "No db connected"})
|
||||||
|
|
||||||
|
response = None
|
||||||
|
if tags_list is None or (isinstance(tags_list, list) and "all-tags" in tags_list):
|
||||||
|
# Get spend for all tags
|
||||||
sql_query = """
|
sql_query = """
|
||||||
SELECT
|
SELECT
|
||||||
jsonb_array_elements_text(request_tags) AS individual_request_tag,
|
jsonb_array_elements_text(request_tags) AS individual_request_tag,
|
||||||
|
@ -32,14 +57,40 @@ async def ui_get_spend_by_tags(start_date: str, end_date: str, prisma_client):
|
||||||
DATE(s."startTime") >= $1::date
|
DATE(s."startTime") >= $1::date
|
||||||
AND DATE(s."startTime") <= $2::date
|
AND DATE(s."startTime") <= $2::date
|
||||||
GROUP BY individual_request_tag, spend_date
|
GROUP BY individual_request_tag, spend_date
|
||||||
ORDER BY spend_date
|
ORDER BY total_spend DESC;
|
||||||
LIMIT 100;
|
|
||||||
"""
|
"""
|
||||||
response = await prisma_client.db.query_raw(
|
response = await prisma_client.db.query_raw(
|
||||||
sql_query,
|
sql_query,
|
||||||
start_date,
|
start_date,
|
||||||
end_date,
|
end_date,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
# filter by tags list
|
||||||
|
sql_query = """
|
||||||
|
SELECT
|
||||||
|
individual_request_tag,
|
||||||
|
COUNT(*) AS log_count,
|
||||||
|
SUM(spend) AS total_spend
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
jsonb_array_elements_text(request_tags) AS individual_request_tag,
|
||||||
|
DATE(s."startTime") AS spend_date,
|
||||||
|
spend
|
||||||
|
FROM "LiteLLM_SpendLogs" s
|
||||||
|
WHERE
|
||||||
|
DATE(s."startTime") >= $1::date
|
||||||
|
AND DATE(s."startTime") <= $2::date
|
||||||
|
) AS subquery
|
||||||
|
WHERE individual_request_tag = ANY($3::text[])
|
||||||
|
GROUP BY individual_request_tag
|
||||||
|
ORDER BY total_spend DESC;
|
||||||
|
"""
|
||||||
|
response = await prisma_client.db.query_raw(
|
||||||
|
sql_query,
|
||||||
|
start_date,
|
||||||
|
end_date,
|
||||||
|
tags_list,
|
||||||
|
)
|
||||||
|
|
||||||
# print("tags - spend")
|
# print("tags - spend")
|
||||||
# print(response)
|
# print(response)
|
||||||
|
|
|
@ -8297,19 +8297,23 @@ async def global_view_spend_tags(
|
||||||
default=None,
|
default=None,
|
||||||
description="Time till which to view key spend",
|
description="Time till which to view key spend",
|
||||||
),
|
),
|
||||||
|
tags: Optional[str] = fastapi.Query(
|
||||||
|
default=None,
|
||||||
|
description="comman separated tags to filter on",
|
||||||
|
),
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
LiteLLM Enterprise - View Spend Per Request Tag. Used by LiteLLM UI
|
LiteLLM Enterprise - View Spend Per Request Tag. Used by LiteLLM UI
|
||||||
|
|
||||||
Example Request:
|
Example Request:
|
||||||
```
|
```
|
||||||
curl -X GET "http://0.0.0.0:8000/spend/tags" \
|
curl -X GET "http://0.0.0.0:4000/spend/tags" \
|
||||||
-H "Authorization: Bearer sk-1234"
|
-H "Authorization: Bearer sk-1234"
|
||||||
```
|
```
|
||||||
|
|
||||||
Spend with Start Date and End Date
|
Spend with Start Date and End Date
|
||||||
```
|
```
|
||||||
curl -X GET "http://0.0.0.0:8000/spend/tags?start_date=2022-01-01&end_date=2022-02-01" \
|
curl -X GET "http://0.0.0.0:4000/spend/tags?start_date=2022-01-01&end_date=2022-02-01" \
|
||||||
-H "Authorization: Bearer sk-1234"
|
-H "Authorization: Bearer sk-1234"
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
@ -8331,7 +8335,10 @@ async def global_view_spend_tags(
|
||||||
code=status.HTTP_400_BAD_REQUEST,
|
code=status.HTTP_400_BAD_REQUEST,
|
||||||
)
|
)
|
||||||
response = await ui_get_spend_by_tags(
|
response = await ui_get_spend_by_tags(
|
||||||
start_date=start_date, end_date=end_date, prisma_client=prisma_client
|
start_date=start_date,
|
||||||
|
end_date=end_date,
|
||||||
|
tags_str=tags,
|
||||||
|
prisma_client=prisma_client,
|
||||||
)
|
)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue