(feat) /predict/spend endpoint

This commit is contained in:
ishaan-jaff 2024-03-01 08:20:35 -08:00
parent 3bb861ae02
commit 47c5b94c50
2 changed files with 44 additions and 20 deletions

View file

@ -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},
] # ]
) # )

View file

@ -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",