MCPcopy Create free account
hub / github.com/BerriAI/litellm / _update_key_cache

Function _update_key_cache

litellm/proxy/proxy_server.py:2638–2703  ·  view source on GitHub ↗
(token: str, response_cost: float)

Source from the content-addressed store, hash-verified

2636
2637 ### UPDATE KEY SPEND ###
2638 async def _update_key_cache(token: str, response_cost: float):
2639 # Fetch the existing cost for the given token
2640 if isinstance(token, str) and token.startswith("sk-"):
2641 hashed_token = hash_token(token=token)
2642 else:
2643 hashed_token = token
2644 verbose_proxy_logger.debug("_update_key_cache: hashed_token=%s", hashed_token)
2645 existing_spend_obj = await user_api_key_cache.async_get_cache(key=hashed_token, model_type=UserAPIKeyAuth)
2646 verbose_proxy_logger.debug(f"_update_key_cache: existing_spend_obj={existing_spend_obj}")
2647 if existing_spend_obj is None:
2648 return
2649
2650 existing_spend = existing_spend_obj.spend or 0.0
2651 # Calculate the new cost by adding the existing cost and response_cost
2652 new_spend = existing_spend + response_cost
2653
2654 ## CHECK IF USER PROJECTED SPEND > SOFT LIMIT
2655 if (
2656 existing_spend_obj.soft_budget_cooldown is False
2657 and existing_spend_obj.soft_budget is not None
2658 and (
2659 _is_projected_spend_over_limit(
2660 current_spend=new_spend,
2661 soft_budget_limit=existing_spend_obj.soft_budget,
2662 )
2663 is True
2664 )
2665 ):
2666 projected_spend, projected_exceeded_date = _get_projected_spend_over_limit(
2667 current_spend=new_spend,
2668 soft_budget_limit=existing_spend_obj.soft_budget,
2669 ) # type: ignore
2670 soft_limit = existing_spend_obj.soft_budget
2671 call_info = CallInfo(
2672 token=existing_spend_obj.token or "",
2673 spend=new_spend,
2674 key_alias=existing_spend_obj.key_alias,
2675 max_budget=soft_limit,
2676 user_id=existing_spend_obj.user_id,
2677 projected_spend=projected_spend,
2678 projected_exceeded_date=str(projected_exceeded_date),
2679 event_group=Litellm_EntityType.KEY,
2680 )
2681 # alert user
2682 asyncio.create_task(
2683 proxy_logging_obj.budget_alerts(
2684 type="projected_limit_exceeded",
2685 user_info=call_info,
2686 )
2687 )
2688 # set cooldown on alert
2689
2690 if existing_spend_obj is not None and getattr(existing_spend_obj, "team_spend", None) is not None:
2691 existing_team_spend = existing_spend_obj.team_spend or 0
2692 # Calculate the new cost by adding the existing cost and response_cost
2693 existing_spend_obj.team_spend = existing_team_spend + response_cost
2694
2695 if existing_spend_obj is not None and getattr(existing_spend_obj, "team_member_spend", None) is not None:

Callers 1

update_cacheFunction · 0.85

Calls 8

hash_tokenFunction · 0.90
CallInfoClass · 0.90
debugMethod · 0.80
async_get_cacheMethod · 0.45
budget_alertsMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected