[Bug]: Bedrock prompt caching strips `ttl` for Claude Opus 4.8 (1h cache silently downgraded to 5m)

用户在 LiteLLM Proxy 中使用 Bedrock API 调用 anthropic.claude-opus-4-8 (Claude Opus 4.8)模型,并显式设置 cache_control.ttl 为 "1h"(1 小时)。实际运行时,Bedrock prompt caching 的

[Bug]: Bedrock prompt caching strips `ttl` for Claude Opus 4.8 (1h cache silently downgraded to 5m)

[Bug]: Bedrock prompt caching strips `ttl` for Claude Opus 4.8 (1h cache silently downgraded to 5m)

快速结论:该报错发生在使用 LiteLLM Proxy 调用 Bedrock 上 Claude Opus 4.8 模型并设置 `cache_control.ttl`(例如 “1h”)时,缓存 TTL 被静默降级为 5 分钟(Bedrock 默认值)。优先确认 `litellm/llms/bedrock/common_utils.py` 中 `is_claude_4_5_on_bedrock()` 函数是否包含 Opus 4.8 的型号模式。

问题场景

用户在 LiteLLM Proxy 中使用 Bedrock API 调用 anthropic.claude-opus-4-8(Claude Opus 4.8)模型,并显式设置 cache_control.ttl 为 “1h”(1 小时)。实际运行时,Bedrock prompt caching 的 TTL 被静默降级为 5 分钟,而非预期的 1 小时。问题涉及 LiteLLM v1.89.0 版本的 Proxy 模块及 Bedrock 公共工具函数。

报错原文

# 不直接报错,但 cache 行为异常:TTL 从 "1h" 静默降级为 "5m"
# 可通过以下代码确认 is_claude_4_5_on_bedrock() 对 Opus 4.8 返回 False:

from litellm.llms.bedrock.common_utils import is_claude_4_5_on_bedrock

print(is_claude_4_5_on_bedrock("anthropic.claude-opus-4-7"))  # True
print(is_claude_4_5_on_bedrock("anthropic.claude-opus-4-8"))  # False  <-- bug

原因分析

可能原因:litellm/llms/bedrock/common_utils.py 文件(约第 690 行)中,is_claude_4_5_on_bedrock() 函数维护了一个显式的 Claude 型号模式白名单,用于决定是否保留 cache_control.ttl 字段。该白名单覆盖了 Sonnet/Haiku/Opus 4.5、Sonnet/Opus 4.6 和 Opus 4.7,但缺少了 Opus 4.8 的条目模式(如 opus-4.8opus_4.8opus-4-8opus_4_8)。当用户传入 Opus 4.8 的 Bedrock 模型 ID 时,该函数返回 False,导致 LiteLLM 剥离了自定义的 cache_control.ttl 字段,使其回退到 Bedrock 默认的 5 分钟缓存 TTL,且此行为没有任何显式警告或报错。

环境排查

  • 确认 LiteLLM 版本是否为 v1.89.0 或更早版本(问题已在 PR #31929 中修复)。
  • 检查 litellm/llms/bedrock/common_utils.py 文件中 is_claude_4_5_on_bedrock() 函数的白名单是否包含 opus-4.8opus_4.8opus-4-8opus_4_8 这四个模式。
  • 确认使用的 Bedrock 模型 ID 是否跨区域(如 us.anthropic.claude-opus-4-8),该前缀同样受白名单影响。

解决步骤

  1. 确认是否为已知 Bug:检查 is_claude_4_5_on_bedrock() 函数的实现,定位到白名单末尾(Opus 4.7 条目之后),确认是否缺少 Opus 4.8 对应的 4 个模式字符串。
  2. 应用修复代码(手动修补):litellm/llms/bedrock/common_utils.py 中,于现有 Opus 4.7 的白名单条目后,添加以下 4 行模式匹配:
    "opus-4.8",
    "opus_4.8",
    "opus-4-8",
    "opus_4_8",
  3. 添加单元测试(可选但推荐):tests/llm_translation/test_bedrock_common_utils.py 中为新添加的 Opus 4.8 Bedrock ID(包括跨区域前缀 us.anthropic.*)添加测试用例,确保 is_claude_4_5_on_bedrock() 返回 True
  4. 升级 LiteLLM 版本:如果无法手动修补,建议升级至包含 PR #31929 修复的 LiteLLM 版本。

验证方法

修改后,重新运行以下 Python 代码,确认 is_claude_4_5_on_bedrock("anthropic.claude-opus-4-8") 返回 True。然后在实际 Bedrock 调用中设置 cache_control.ttl = "1h",通过监控日志或缓存命中/过期行为确认 TTL 已正确保留 1 小时,而非降级为 5 分钟。

参考来源

BerriAI/litellm #31359

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13307

发表回复

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