[Bug]: /team/member_update does not support setting budget_duration on individual member budgets

用户在运行 LiteLLM Proxy 时,通过 /team/member_update 为已有团队成员更新预算额度( max_budget_in_team ),期望该预算能够像团队预算( team_member_budget )一样按 budget_duration (如“30d”)周期自动重置。

[Bug]: /team/member_update does not support setting budget_duration on individual member budgets

[Bug]: /team/member_update does not support setting budget_duration on individual member budgets

快速结论:该问题发生在使用 LiteLLM Proxy 的 /team/member_update 接口为团队成员设置独立预算时,budget_duration 参数缺失,导致成员预算变为“终身上限”而非“定期重置额度”。该问题已由 PR #29717 修复,升级到相应版本即可解决。

问题场景

用户在运行 LiteLLM Proxy 时,通过 /team/member_update 为已有团队成员更新预算额度(max_budget_in_team),期望该预算能够像团队预算(team_member_budget)一样按 budget_duration(如“30d”)周期自动重置。

报错原文

# Member's budget after member_update — note budget_duration is null
{
  "user_id": "user-A",
  "budget_id": "59db2fc6-96c9-40e0-94e5-c5bebb572084",
  "litellm_budget_table": {
    "budget_id": "59db2fc6-96c9-40e0-94e5-c5bebb572084",
    "soft_budget": null,
    "max_budget": 10.0,
    "max_parallel_requests": null,
    "tpm_limit": null,
    "rpm_limit": null,
    "model_max_budget": null,
    "budget_duration": null
  }
}

原因分析

根本原因是 /team/member_update 端点底层的 _upsert_budget_and_membership 函数在设计时只接收 max_budgettpm_limitrpm_limit 参数,没有为 budget_duration 提供参数传递路径。因此通过 member_update 创建的成员预算始终为 budget_duration: null,不会像从团队继承预算的成员那样自动拥有重置周期。

注意:该问题与 Issue #25495(组织级预算重置问题)不同,这里是 API 参数缺失,而非后台重置任务问题。

环境排查

  • LiteLLM 版本:问题在 v1.83.3.rc.1 及之前版本中存在,已在 litellm_internal_staging 分支修复。
  • 确认后端数据库类型(如 Postgres),不同数据库参数兼容性需验证。

解决步骤

该问题已在 PR #29717 中修复,修复后的关键变化包括:

  1. /team/member_update 接口现在支持 budget_duration 参数,传入后会被持久化到成员的独立预算表(litellm_budget_table),并自动计算 budget_reset_at 时间。
  2. _upsert_budget_and_membership 函数在更新/创建预算时均会写入 budget_duration
  3. 当成员仍指向团队共享默认预算时,clone-on-write 路径会继承团队的 budget_duration
  4. 请求/响应模型(TeamMemberUpdateRequest / TeamMemberUpdateResponse)均已包含该字段,无效的 duration 值会返回 400 错误。

修复后可优先尝试以下操作:

  1. 升级 LiteLLM 到包含 PR #29717 的版本(或从 litellm_internal_staging 分支构建)。
  2. 通过 /team/member_update 为成员设置 budget_duration,例如:
    curl -X POST http://localhost:4000/team/member_update -H "Authorization: Bearer sk-admin" -H "Content-Type: application/json" -d '{"team_id": "1", "user_id": "user-A", "max_budget_in_team": 10.0, "budget_duration": "30d"}'
  3. 通过 GET /team/info?team_id=1 验证成员的 budget_durationbudget_reset_at 是否正确设置。

验证方法

调用 GET /team/info?team_id=1 查看成员预算详情,确认 litellm_budget_table 中:

  • budget_duration 已显示为期望值(如“30d”)。
  • budget_reset_at 已计算并显示(例如 “2026-07-01T00:00:00Z”)。

示例验证输出:

# member budget after member_update (GET /team/info)
user           : lit4012-user-a
max_budget     : 10.0
budget_duration: 30d
budget_reset_at: 2026-07-01T00:00:00Z

参考来源

BerriAI/litellm #25509

修复 PR:PR #29717

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10197

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注