diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 409cf63d5..2a8aa8037 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -3918,59 +3918,6 @@ async def view_spend_logs( -H "Authorization: Bearer sk-1234" ``` """ - if os.getenv("CLICKHOUSE_HOST") is not None: - # gettting spend logs from clickhouse - from litellm.proxy.enterprise.utils import view_spend_logs_from_clickhouse - - daily_metrics = await view_daily_metrics( - start_date=start_date, - end_date=end_date, - ) - - # get the top api keys across all daily_metrics - top_api_keys = {} # type: ignore - - # make this compatible with the admin UI - for response in daily_metrics.get("daily_spend", {}): - response["startTime"] = response["day"] - response["spend"] = response["daily_spend"] - response["models"] = response["spend_per_model"] - response["users"] = {"ishaan": 0.0} - spend_per_api_key = response["spend_per_api_key"] - - # insert spend_per_api_key key, values in response - for key, value in spend_per_api_key.items(): - response[key] = value - top_api_keys[key] = top_api_keys.get(key, 0.0) + value - - del response["day"] - del response["daily_spend"] - del response["spend_per_model"] - del response["spend_per_api_key"] - - # get top 5 api keys - top_api_keys = sorted(top_api_keys.items(), key=lambda x: x[1], reverse=True) # type: ignore - top_api_keys = top_api_keys[:5] # type: ignore - top_api_keys = dict(top_api_keys) # type: ignore - """ - set it like this - { - "key" : key, - "spend:" : spend - } - """ - # we need this to show on the Admin UI - response_keys = [] - for key in top_api_keys.items(): - response_keys.append( - { - "key": key[0], - "spend": key[1], - } - ) - daily_metrics["top_api_keys"] = response_keys - - return daily_metrics global prisma_client try: verbose_proxy_logger.debug("inside view_spend_logs") @@ -4289,65 +4236,6 @@ async def global_predict_spend_logs(request: Request): return _forecast_daily_cost(data) -@router.get( - "/daily_metrics", - summary="Get daily spend metrics", - tags=["budget & spend Tracking"], - dependencies=[Depends(user_api_key_auth)], -) -async def view_daily_metrics( - start_date: Optional[str] = fastapi.Query( - default=None, - description="Time from which to start viewing key spend", - ), - end_date: Optional[str] = fastapi.Query( - default=None, - description="Time till which to view key spend", - ), -): - """ - [BETA] This is a beta endpoint. It might change without notice. - - Please give feedback - https://github.com/BerriAI/litellm/issues - """ - try: - if os.getenv("CLICKHOUSE_HOST") is not None: - # gettting spend logs from clickhouse - from litellm.integrations import clickhouse - - return clickhouse.build_daily_metrics() - - # create a response object - """ - { - "date": "2022-01-01", - "spend": 0.0, - "users": {}, - "models": {}, - } - """ - else: - raise Exception( - "Clickhouse: Clickhouse host not set. Required for viewing /daily/metrics" - ) - except Exception as e: - if isinstance(e, HTTPException): - raise ProxyException( - message=getattr(e, "detail", f"/spend/logs Error({str(e)})"), - type="internal_error", - param=getattr(e, "param", "None"), - code=getattr(e, "status_code", status.HTTP_500_INTERNAL_SERVER_ERROR), - ) - elif isinstance(e, ProxyException): - raise e - raise ProxyException( - message="/spend/logs Error" + str(e), - type="internal_error", - param=getattr(e, "param", "None"), - code=status.HTTP_500_INTERNAL_SERVER_ERROR, - ) - - #### USER MANAGEMENT #### @router.post( "/user/new", @@ -4357,25 +4245,21 @@ async def view_daily_metrics( ) async def new_user(data: NewUserRequest): """ - Use this to create a new user with a budget. + Use this to create a new user with a budget. This creates a new user and generates a new api key for the new user. The new api key is returned. Returns user id, budget + new key. Parameters: - user_id: Optional[str] - Specify a user id. If not set, a unique id will be generated. - user_email: Optional[str] - Specify a user email. - - user_role: Optional[str] - Specify a user role - "proxy_admin", "app_owner", "app_user" + - user_role: Optional[str] - Specify a user role - "admin", "app_owner", "app_user" - max_budget: Optional[float] - Specify max budget for a given user. - - duration: Optional[str] - Specify the length of time the token is valid for. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). **(Default is set to 1 hour.)** - models: Optional[list] - Model_name's a user is allowed to call. (if empty, key is allowed to call all models) - - aliases: Optional[dict] - Any alias mappings, on top of anything in the config.yaml model list. - https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---upgradedowngrade-models - - config: Optional[dict] - any key-specific configs, overrides config in config.yaml - - spend: Optional[int] - Amount spent by key. Default is 0. Will be updated by proxy whenever key is used. https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---tracking-spend - - max_parallel_requests: Optional[int] - Rate limit a user based on the number of parallel requests. Raises 429 error, if user's parallel requests > x. - - metadata: Optional[dict] - Metadata for key, store information for key. Example metadata = {"team": "core-infra", "app": "app2", "email": "ishaan@berri.ai" } + - tpm_limit: Optional[int] - Specify tpm limit for a given user (Tokens per minute) + - rpm_limit: Optional[int] - Specify rpm limit for a given user (Requests per minute) Returns: - - key: (str) The generated api key + - key: (str) The generated api key for the user - expires: (datetime) Datetime object for when key expires. - user_id: (str) Unique user id - used for tracking spend across multiple keys for same user id. - max_budget: (float|None) Max budget for given user.