Fixes#19105
## Problem
Team member budgets (max_budget_in_team) were not resetting properly:
1. Team members use litellm_budget_table for budget limits
2. Budget resets only occurred if litellm_budget_table had budget_duration set
3. When creating team members with max_budget_in_team, budget_duration wasn't inherited
4. Without budget_duration, team member budgets never reset, even though team budgets did
## Root Cause
The reset_budget_for_litellm_budget_table() method only reset budgets that had
their own budget_duration and reset_at time. Team members without explicit
budget_duration were never included in the reset.
## Solution
Added reset_budget_for_team_members_by_team() method that:
- Runs during the budget reset job
- Finds teams that need budget reset (based on team's budget_duration)
- Resets spend for ALL team members in those teams
- Ensures team member budgets inherit the team's reset schedule
## Changes
- litellm/proxy/common_utils/reset_budget_job.py:
- Added reset_budget_for_team_members_by_team() method
- Called in reset_budget() after resetting team budgets
- Added comprehensive tests to verify the fix
- Added reproduction script for issue validation
## Testing
- Unit tests verify team member budgets reset with team
- Tested with multiple teams and edge cases
- All existing tests pass
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>