#29142 [Bug]: Cross-end-user budget leak: cached UserAPIKeyAuth retains per-request end_user_max_budget across requests sharing one virtual key
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
## Summary
When multiple end-users share a single virtual key (canonical OpenWebUI pattern: one proxy key + per-user `user` field on `/chat/completions`), the proxy's in-memory `user_api_key_cache` poisons subsequent requests with the **first** end-user's budget fields. This causes sporadic `BudgetExceededError` responses for end-users whose true budget is much larger than the cached value — the DB row is correct, but the cached [`UserAPIKeyAuth`](litellm/proxy/_types.py:2658) carries a stale `end_user_max_budget` that wins over the freshly-joined DB value during budget reservation.
Symptom: an end-user with `LiteLLM_EndUserTable.budget_id` pointing at a budget of `20.0` sporadically receives:
``` BudgetExceededError: Budget has been exceeded! Current cost: 4.08, Max budget: 2.0 ```
…where `2.0` is the budget of a *different* end-user whose request happened to populate the cache entry earlier.
---
## Affected versions
- **Introduced in:** [`v1.84.0`](https://github.com/BerriAI/litellm/releases/tag/v1.84.0), commit [`6ff668c7aa`](https://…