litellm/tests/proxy_behavior/management
Yassin Kortam 1d695a714b
fix(proxy): reset a stuck team member's budget (#37971)
* fix(proxy): reset a stuck team member's budget

A per-team-member budget check reads a cross-pod spend counter that
nothing ever invalidates. Once a member exceeds their per-member
budget, resetting the key's spend, raising the user's or the team's
own budget, or issuing a new key all leave the member stuck, because
none of them touch this counter or its cached membership object.

Add POST /team/{team_id}/member/{user_id}/reset_spend to reset a
member's tracked spend, and invalidate the same cached state from
/team/member_update when it raises a member's own budget, so that
path also takes effect immediately instead of waiting on the
membership cache's TTL. Name the entity in the check's error message
so a stuck member is diagnosable from the 429 body alone.

* fix(proxy): close reset-vs-floor-read race and surface double Redis write failure on member spend reset

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): broadcast spend reset as a SET so the handler's self-delivered message cannot erase the reset guard

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): omit null fields from the invalidation message so plain evictions keep the old wire format

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-25 09:50:09 -07:00
..
__init__.py
actors.py
conftest.py
test_credential_migration_endpoint.py
test_f7_coverage_closeout.py
test_f7_key_coverage_push.py
test_key_aliases.py
test_key_block_unblock.py
test_key_budget_limits.py
test_key_bulk_update.py
test_key_delete.py
test_key_generate.py
test_key_health.py
test_key_info.py
test_key_info_v2.py
test_key_list.py
test_key_regenerate.py
test_key_reset_spend.py
test_key_service_account_generate.py
test_key_team_change.py
test_key_update.py
test_no_management_imports.py
test_route_coverage.py
test_scratch_teardown.py
test_smoke.py
test_team_available.py
test_team_block_unblock.py
test_team_budget_limits.py feat(teams): apply default organization to new teams from default team settings (#35540) 2026-08-03 12:57:12 -07:00
test_team_bulk_member_add.py
test_team_daily_activity.py feat(proxy): add /team/daily/activity/aggregated and switch the Usage team tab to it (#36562) 2026-08-18 11:29:57 -07:00
test_team_delete.py
test_team_filter_ui.py
test_team_info.py
test_team_key_bulk_update.py
test_team_list.py
test_team_list_v2.py
test_team_member_add.py
test_team_member_delete.py
test_team_member_info_validation.py
test_team_member_me.py
test_team_member_reset_spend.py fix(proxy): reset a stuck team member's budget (#37971) 2026-08-25 09:50:09 -07:00
test_team_member_update.py
test_team_metadata_schema.py test: repair three failing suites on litellm_internal_staging 2026-08-04 16:07:02 -07:00
test_team_model.py
test_team_new.py feat(teams): apply default organization to new teams from default team settings (#35540) 2026-08-03 12:57:12 -07:00
test_team_permissions.py
test_team_permissions_bulk_update.py
test_team_update.py
test_world_seed.py