forked from phoenix/litellm-mirror
(feat) /predict/spend endpoint
This commit is contained in:
parent
3bb861ae02
commit
47c5b94c50
2 changed files with 44 additions and 20 deletions
|
@ -251,26 +251,27 @@ def _forecast_daily_cost(data: list):
|
||||||
import requests
|
import requests
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
# Get the current date
|
|
||||||
current_date = datetime.now().date()
|
|
||||||
|
|
||||||
# Get the last entry in the data
|
# Get the last entry in the data
|
||||||
last_entry = data[-1]
|
last_entry = data[-1]
|
||||||
|
|
||||||
# Parse the date from the last entry
|
# Parse the date from the last entry
|
||||||
last_entry_date = datetime.strptime(last_entry["date"], "%Y-%m-%d").date()
|
last_entry_date = datetime.strptime(last_entry["date"], "%Y-%m-%d").date()
|
||||||
|
# print("Last Entry Date:", last_entry_date)
|
||||||
|
|
||||||
# Get the month of the last entry
|
# Get the month of the last entry
|
||||||
last_entry_month = last_entry_date.month
|
last_entry_month = last_entry_date.month
|
||||||
|
# print("Last Entry Month:", last_entry_month)
|
||||||
|
|
||||||
# Calculate the last day of the month
|
# Calculate the last day of the month
|
||||||
last_day_of_month = (
|
last_day_of_month = (
|
||||||
datetime(last_entry_date.year, last_entry_date.month % 12 + 1, 1)
|
datetime(last_entry_date.year, last_entry_date.month % 12 + 1, 1)
|
||||||
- timedelta(days=1)
|
- timedelta(days=1)
|
||||||
).day
|
).day
|
||||||
|
# print("Last Day of Month:", last_day_of_month)
|
||||||
|
|
||||||
# Calculate the remaining days in the month
|
# Calculate the remaining days in the month
|
||||||
remaining_days = last_day_of_month - last_entry_date.day
|
remaining_days = last_day_of_month - last_entry_date.day
|
||||||
|
# print("Remaining Days:", remaining_days)
|
||||||
|
|
||||||
series = {}
|
series = {}
|
||||||
for entry in data:
|
for entry in data:
|
||||||
|
@ -278,7 +279,7 @@ def _forecast_daily_cost(data: list):
|
||||||
spend = entry["spend"]
|
spend = entry["spend"]
|
||||||
series[date] = spend
|
series[date] = spend
|
||||||
|
|
||||||
payload = {"series": series, "count": 5}
|
payload = {"series": series, "count": remaining_days}
|
||||||
print("Prediction Data:", payload)
|
print("Prediction Data:", payload)
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
|
@ -294,23 +295,34 @@ def _forecast_daily_cost(data: list):
|
||||||
json_response = response.json()
|
json_response = response.json()
|
||||||
forecast_data = json_response["forecast"]
|
forecast_data = json_response["forecast"]
|
||||||
|
|
||||||
print("Forecast Data:", forecast_data)
|
# print("Forecast Data:", forecast_data)
|
||||||
|
|
||||||
|
response_data = []
|
||||||
|
for date in forecast_data:
|
||||||
|
spend = forecast_data[date]
|
||||||
|
entry = {
|
||||||
|
"date": date,
|
||||||
|
"predicted_spend": spend,
|
||||||
|
}
|
||||||
|
response_data.append(entry)
|
||||||
|
# print("Response Data:", response_data)
|
||||||
|
return response_data
|
||||||
|
|
||||||
# print(f"Date: {entry['date']}, Spend: {entry['spend']}, Response: {response.text}")
|
# print(f"Date: {entry['date']}, Spend: {entry['spend']}, Response: {response.text}")
|
||||||
|
|
||||||
|
|
||||||
_forecast_daily_cost(
|
# _forecast_daily_cost(
|
||||||
[
|
# [
|
||||||
{"date": "2022-01-01", "spend": 100},
|
# {"date": "2022-01-01", "spend": 100},
|
||||||
{"date": "2022-01-02", "spend": 200},
|
# {"date": "2022-01-02", "spend": 200},
|
||||||
{"date": "2022-01-03", "spend": 300},
|
# {"date": "2022-01-03", "spend": 300},
|
||||||
{"date": "2022-01-04", "spend": 400},
|
# {"date": "2022-01-04", "spend": 400},
|
||||||
{"date": "2022-01-05", "spend": 500},
|
# {"date": "2022-01-05", "spend": 500},
|
||||||
{"date": "2022-01-06", "spend": 600},
|
# {"date": "2022-01-06", "spend": 600},
|
||||||
{"date": "2022-01-07", "spend": 700},
|
# {"date": "2022-01-07", "spend": 700},
|
||||||
{"date": "2022-01-08", "spend": 800},
|
# {"date": "2022-01-08", "spend": 800},
|
||||||
{"date": "2022-01-09", "spend": 900},
|
# {"date": "2022-01-09", "spend": 900},
|
||||||
{"date": "2022-01-10", "spend": 1000},
|
# {"date": "2022-01-10", "spend": 1000},
|
||||||
{"date": "2022-01-11", "spend": 50},
|
# {"date": "2022-01-11", "spend": 50},
|
||||||
]
|
# ]
|
||||||
)
|
# )
|
||||||
|
|
|
@ -4190,6 +4190,18 @@ async def global_spend_models(
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@router.post(
|
||||||
|
"/global/predict/spend/logs",
|
||||||
|
tags=["Budget & Spend Tracking"],
|
||||||
|
dependencies=[Depends(user_api_key_auth)],
|
||||||
|
)
|
||||||
|
async def global_predict_spend_logs(request: Request):
|
||||||
|
from litellm.proxy.enterprise.utils import _forecast_daily_cost
|
||||||
|
|
||||||
|
data = await request.json()
|
||||||
|
return _forecast_daily_cost(data)
|
||||||
|
|
||||||
|
|
||||||
@router.get(
|
@router.get(
|
||||||
"/daily_metrics",
|
"/daily_metrics",
|
||||||
summary="Get daily spend metrics",
|
summary="Get daily spend metrics",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue