TypeError: ‘>’ not supported between instances of ‘str’ and ‘float’

用户在使用 LiteLLM Proxy(v1.89.1)并通过 Prometheus 回调或 API 响应获取模型成本信息时触发。具体场景包括:

TypeError: '>' not supported between instances of 'str' and 'float'

TypeError: ‘>’ not supported between instances of ‘str’ and ‘float’

快速结论:该报错通常发生在 LiteLLM Proxy 使用 store_model_in_db: true 或 Helm Chart 部署时,model_info 中的成本字段(如 output_cost_per_token)被序列化为字符串(如 "1e-05"),导致在 router.py 中进行大小比较时出现类型错误。优先排查成本字段是否被 YAML 解析器(如 PyYAML)误解析为字符串。

问题场景

用户在使用 LiteLLM Proxy(v1.89.1)并通过 Prometheus 回调或 API 响应获取模型成本信息时触发。具体场景包括:

  • 代理配置中启用了 store_model_in_db: true,导致模型配置经过数据库往返(round-trip)。
  • 使用 Helm 部署时,Go 的 yaml.v3 库将浮点数 0.00001 标准化为 1e-05(整数尾数),而 PyYAML 6.0.3 将 YAML 1.2 规范的 1e-05(无小数点的整数尾数表示)解析为字符串。

报错原文

TypeError: '>' not supported between instances of 'str' and 'float'

完整回溯信息:

Traceback (most recent call last):
  File ".../litellm/integrations/prometheus.py", line 2463, in _async_set_router_remaining_metrics
    remaining_usage = await llm_router.get_remaining_model_group_usage(
  File ".../litellm/router.py", line 9484, in get_remaining_model_group_usage
    model_group_info = self._cached_get_model_group_info(model_group)
  File ".../litellm/router.py", line 9481, in _cached_get_model_group_info
    return self.get_model_group_info(model_group)
  File ".../litellm/router.py", line 9395, in get_model_group_info
    return self._set_model_group_info(
  File ".../litellm/router.py", line 9293, in _set_model_group_info
    or (model_info["output_cost_per_token"] or 0.0)
       > (model_group_info.output_cost_per_token or 0.0)
TypeError: '>' not supported between instances of 'str' and 'float'

原因分析

根本原因是 LiteLLM 的 _set_model_group_info() 方法(位于 litellm/router.py 第 9293 行附近)在比较成本字段时,未对 model_info 中的值进行类型转换。当场景满足以下条件时触发:

  • 配置渲染阶段:Helm 的 Go yaml.v3 库将 0.00001 标准化为 1e-05(整数尾数,无小数点)。
  • 配置解析阶段:PyYAML 6.0.3 将 1e-05 解析为字符串("1e-05"),而不是浮点数。相比之下,1.0e-05(有小数点)会被正确解析为浮点数。
  • 运行时阶段model_info["output_cost_per_token"] 为字符串类型,在与浮点数 model_group_info.output_cost_per_token 比较时抛出 TypeError

注意:store_model_in_db: true 并非必要条件——纯粹通过 YAML 配置加载模型时也会触发,只要成本值被序列化为 1e-05 这类字符串。

环境排查

  • LiteLLM 版本:v1.89.1(受影响版本,需检查是否有修复补丁)
  • Python 版本:3.13(用户环境)
  • PyYAML 版本:6.0.3(该版本对 1e-05 的解析行为见上述分析)
  • 部署方式:Kubernetes + Helm(Go yaml.v3 渲染配置)
  • 配置项
    • 检查 model_info 下的 output_cost_per_tokeninput_cost_per_tokencache_read_input_token_cost 等字段是否使用了类似 0.00001 的极小浮点数。
    • 确认是否启用了 store_model_in_db: true(虽然本 Issue 证实非必须,但仍需排查数据库中存储的字符串化成本值)。

解决步骤

  1. 确认问题根源:在启动 LiteLLM Proxy 的容器中运行以下命令,检查成本字段是否为字符串类型:
    python3 -c "import yaml; print(type(yaml.safe_load('output_cost_per_token: 1e-05')['output_cost_per_token']))"

    若输出 <class 'str'>,则确认问题。

  2. 临时规避:修改 Helm 配置:在 values.yaml 中将成本值改为十进制表示法(如 0.00001)或使用带小数点的科学计数法(如 1.0e-05),避免被 Helm 标准化为 1e-05
  3. 代码修复(可优先尝试):在 LiteLLM 的 _set_model_group_info() 方法中,对所有成本字段增加 float() 类型转换。修复位置为 litellm/router.py 第 9293 行附近,参考以下补丁:
    # 修改前
    if model_info.get("output_cost_per_token", None) is not None and (
        model_group_info.output_cost_per_token is None
        or (model_info["output_cost_per_token"] or 0.0) > (model_group_info.output_cost_per_token or 0.0)
    ):
        model_group_info.output_cost_per_token = model_info["output_cost_per_token"]
    
    # 修改后
    cost_val = model_info.get("output_cost_per_token")
    if cost_val is not None and (
        model_group_info.output_cost_per_token is None
        or float(cost_val or 0.0) > float(model_group_info.output_cost_per_token or 0.0)
    ):
        model_group_info.output_cost_per_token = float(cost_val)

    同理,对 input_cost_per_tokencache_read_input_token_cost 等字段也做相同的 float() 包裹处理。

  4. 升级 LiteLLM 版本:检查 LiteLLM 后续版本(≥ v1.89.2)是否已包含该修复。若未包含,可等待官方 release 或自行安装补丁。

验证方法

完成修复后,重新启动 LiteLLM Proxy,执行以下验证:

  • 发送一个补全请求(completion request)到模型中,检查 HTTP 响应头 x-litellm-response-cost 是否存在且包含正确的成本值。
  • 如果启用了 Prometheus 回调,检查 Prometheus 指标采集是否恢复正常,不再抛出 TypeError 异常。
  • 在 Python 解释器中模拟比较操作,确认 float("1e-05") > 0.0True 且不报错。

参考来源

BerriAI/litellm #32787

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13741

发表回复

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