![[Bug]: Custom `input_cost_per_token_above_ _tokens` tiers are silently dropped unless N is 128k/200k/272k](https://www.chat-gpts.plus/wp-content/uploads/2026/06/30344-fbe5ac89.jpg)
[Bug]: Custom `input_cost_per_token_above__tokens` tiers are silently dropped unless N is 128k/200k/272k
快速结论:该问题发生在 LiteLLM SDK 的计费模块中,当用户为自定义模型配置非标准的上下文长度分层定价阈值(例如 500k、90k)时,该配置会被静默丢弃,导致计费回退到基础价格。优先排查 get_model_info 函数中的硬编码白名单是否覆盖了你的自定义阈值。
问题场景
用户在使用 litellm.register_model 注册自定义模型时,配置了 input_cost_per_token_above_500k_tokens 之类的分层定价键,但在调用 litellm.cost_calculator.cost_per_token 计算成本时,系统并未使用该分层价格,而是使用了 input_cost_per_token 的基础价格。该问题在 LiteLLM SDK(Python 包)中触发,无需实际模型调用,仅通过成本跟踪 API 即可重现。
报错原文
configured key kept by get_model_info: False
expected per-token cost (500k tier): 9e-06
actual per-token cost: 1e-06
上述输出表明:get_model_info 未保留自定义的 500k 分层配置,导致实际每 token 成本为基础价格(1e-06),而非配置的分层价格(9e-06)。
原因分析
根本原因在于 litellm/utils.py 中 get_model_info 函数的实现。该函数在重建 ModelInfo 时,使用了一个固定的白名单逐字段复制键。对于输入 token 的分层计费,它仅复制以下键:
input_cost_per_token_above_128k_tokensinput_cost_per_token_above_200k_tokensinput_cost_per_token_above_272k_tokens
(输出 token 的分层计费也有类似的固定白名单)。任何不在这个白名单中的阈值(例如 input_cost_per_token_above_500k_tokens)都不会被复制到 ModelInfo 中,导致下游解析器 _get_token_base_cost(位于 litellm/litellm_core_utils/llm_cost_calc/utils.py)即使支持任意阈值,也永远无法接收到这些自定义配置。因此配置被静默丢弃,计费回退到基础价格。
环境排查
- LiteLLM 版本:1.89.0 rc2(影响范围可能包括该版本前后的所有版本)
- 检查
litellm/utils.py中get_model_info函数的版本,确认白名单是否包含自定义阈值。 - 确认
litellm.types.utils.ModelInfo是否包含你配置的分层计费键。
解决步骤
- 检查你的自定义模型配置:确认你配置的
input_cost_per_token_above__tokens键中的N是否为 128、200、272 或 512(这些是硬编码支持的阈值)。如果不是,你的配置将被静默丢弃。 - 临时解决方案:将你的自定义阈值映射到可用的硬编码阈值之一。例如,如果你需要 500k 阈值,目前无法直接使用;建议将模型配置的上下文大小调整为 512k 并改用
input_cost_per_token_above_512k_tokens(注意:512k 也是硬编码支持的阈值之一,根据 Issue 中的描述)。 - 最佳解决方案:等待 LiteLLM 官方修复此问题。修复方案已在 Issue 中讨论:修改
get_model_info函数,使其不再使用固定的硬编码白名单,而是转发模型配置中所有以input_cost_per_token_above_开头的键到下游解析器。你可以关注 Issue #30344 或相关的 PR 更新。 - 自行修补(仅限熟悉代码库的高级用户):编辑
litellm/utils.py中get_model_info函数的相关部分(约第 5908-5916 行和 5960-5971 行),去除硬编码白名单,改为动态复制所有以input_cost_per_token_above_开头的键。注意:这需要您熟练操作且自行承担风险。
验证方法
使用 Issue 中提供的 repro.py 脚本运行测试。确认输出显示:
configured key kept by get_model_info: Trueactual per-token cost等于你配置的分层价格,而非基础价格。
你也可以直接打印 get_model_info 返回的字典,确认自定义阈值键存在于结果中且值非 None。



