Cooldown 机制变更历史(Diff in Cooldown)
追溯 LiteLLM 冷却机制从诞生到最新版本的每一个关键变更。
关注"什么功能/逻辑是什么时候、在哪个 commit 引入的"。
1. 演进总览
2024-08 冷却逻辑诞生(内嵌在 router.py)
│
2024-09 模块化拆分 + v2 错误率百分比阈值(里程碑)
│
2024-10 Prometheus 监控集成 + 单元测试覆盖
│
2024-11 Redis 性能优化
│
2025-01 单部署保护机制
│
2025-02 allowed_fails_policy 自定义冷却策略
│
2025-08 敏感数据屏蔽(安全增强)
│
2025-10 空状态码防护
│
2025-11 cooldown key 缓存优化(性能)
│
2025-12 最小请求阈值防误触发
│
2026-02 encrypted_content_affinity 新特性
│
2026-03 异步 Redis 写入(性能)
│
2026-05 Responses API cooldown 集成
2. 关键里程碑详解
2.1 冷却逻辑模块化 (2024-09-14)
- 提交:
63ed808ea4 — Ishaan Jaff
- 变更: 将冷却逻辑从
litellm/router.py(删除 185 行)拆分为独立的 litellm/router_utils/cooldown_handlers.py(新增 187 行)
- 意义: cooldown 机制首次作为独立模块存在,代码结构清晰化,便于维护和扩展
2.2 v2 错误率百分比阈值 (2024-09-14)
- 提交:
c8d15544c8 (#5698) — Ishaan Jaff
- 变更: 从绝对失败计数(
allowed_fails)切换为百分比阈值(DEFAULT_FAILURE_THRESHOLD_PERCENT = 0.5)
- 意义: 这是 cooldown 判断逻辑的根本性改变。v1 只看"失败了几次",v2 看"失败率是多少"——使得冷却策略在不同流量场景下更加灵活
2.3 单部署保护机制 (2025-01-17)
- 提交:
80f7af510b (#7823) — Krish Dholakia
- 变更: 当模型组仅有单个部署时,增加特殊冷却逻辑
- 引入常量:
SINGLE_DEPLOYMENT_TRAFFIC_FAILURE_THRESHOLD(默认 1000)
- 背景: GitHub issue #7822 — 用户反馈单部署模型组被冷却后所有流量中断
- 逻辑:
- 429 错误 → 不冷却(避免总中断)
- 100% 失败率 + 流量 ≥ 1000 → 冷却(确认是真故障)
- 50%+ 错误率 → 不冷却
2.4 allowed_fails_policy 集成 (2025-02-25)
- 提交:
f6fa2399cc (#8668) — Ishaan Jaff
- 变更: 允许通过
allowed_fails 或 allowed_fail_policy 参数控制冷却触发阈值
- 意义: 用户可以自定义冷却触发条件,v1 逻辑正式成为可配置选项
2.5 敏感数据保护 (2025-08-11)
- 提交:
bc9d0484e4 (#13329) — Krrish Dholakia
- 变更:
cooldown_cache.py 中屏蔽错误字符串,集成 sensitive_data_masker.py
- 背景: 冷却缓存中存储的异常信息可能包含用户 prompt 数据
- 处理: 错误字符串前 50 字符可见,其余被掩码
2.6 最小请求阈值 (2025-12-12)
- 提交:
f25344484f (#17464) — Devaj Mody
- 变更: 新增
DEFAULT_FAILURE_THRESHOLD_MINIMUM_REQUESTS 常量(默认 5)
- 背景: 之前 1 个请求失败就可能触发 100% 错误率冷却
- 解决: 必须达到最低请求数(默认 5)才应用错误率冷却
2.7 异步 Redis 写入 (2026-03-19)
- 提交:
bbd5ed9699 — Ishaan Jaff
- 变更:
CooldownCache 新增 async_add_deployment_to_cooldown() 方法
- 背景: 异步路径下同步 Redis SET 阻塞事件循环
- 意义: 性能优化,异步路径不再被 Redis 写入阻塞
2.8 Responses API Cooldown 集成 (2026-05-13)
- 提交:
2e5ebf826f (#27820) — Mateo Wang
- 变更: Responses API 失败时注册 cooldown + stale encrypted_content 快速失败
- 意义: 最新的 cooldown 集成点,将冷却机制扩展到 Responses API 场景
3. 完整变更时间线
| 日期 |
提交 |
作者 |
描述 |
| 2024-08-07 |
d1e519afd1 |
Ishaan Jaff |
use router_cooldown_handler |
| 2024-08-07 |
579f09b334 |
Ishaan Jaff |
fix logging cool down deployment |
| 2024-09-14 |
63ed808ea4 |
Ishaan Jaff |
[里程碑] 从 router.py 拆分出 cooldown_handlers.py |
| 2024-09-14 |
c8d15544c8 |
Ishaan Jaff |
[里程碑] v2 错误率百分比阈值 (#5698) |
| 2024-09-14 |
c8eff2dc65 |
Ishaan Jaff |
Prometheus 异常状态追踪 (#5706) |
| 2024-10-04 |
224460d4c9 |
Ishaan Jaff |
修复 Prometheus 自定义 logger cooldown 事件 (#6060) |
| 2024-10-16 |
891e9001b5 |
Ishaan Jaff |
添加 router cooldown 单元测试 (#6258) |
| 2024-10-29 |
44e7ffd05c |
Krish Dholakia |
Redis 性能优化 ~100ms (#6483) |
| 2024-11-19 |
7463dab9c6 |
Ishaan Jaff |
provider budget routing 集成 (#6827) |
| 2025-01-17 |
80f7af510b |
Krish Dholakia |
[里程碑] 单部署保护 (#7823) |
| 2025-02-17 |
b5709ca408 |
Ishaan Jaff |
修复 SINGLE_DEPLOYMENT_TRAFFIC_FAILURE_THRESHOLD |
| 2025-02-19 |
208e5c6f35 |
Ishaan Jaff |
修复单部署 cooldown |
| 2025-02-25 |
f6fa2399cc |
Ishaan Jaff |
[里程碑] allowed_fails_policy (#8668) |
| 2025-06-27 |
041db0268c |
Ishaan Jaff |
修复 cooldown_time = 0 的处理 (#12108) |
| 2025-08-11 |
bc9d0484e4 |
Krrish Dholakia |
[安全] 敏感数据屏蔽 (#13329) |
| 2025-10-08 |
5a1b6fe1a6 |
IQHL (Novo Nordisk) |
空 exception_status 跳过冷却 |
| 2025-11-21 |
f542011076 |
Alexsander Hamir |
cooldown key 缓存优化 (#16954) |
| 2025-12-12 |
f25344484f |
Devaj Mody |
[里程碑] 最小请求阈值 (#17464) |
| 2026-02-24 |
058fac848e |
Sameer Kankute |
encrypted_content_affinity 机制 |
| 2026-03-19 |
bbd5ed9699 |
Ishaan Jaff |
[性能] 异步 Redis cooldown 写入 |
| 2026-05-13 |
2e5ebf826f |
Mateo Wang |
Responses API cooldown 集成 (#27820) |
4. 文件级变更详情
4.1 cooldown_handlers.py
| 日期 |
提交 |
变更内容 |
| 2024-09-14 |
63ed808ea4 |
从 router.py 拆分创建,187 行 |
| 2024-09-14 |
c8d15544c8 |
v2 错误率百分比逻辑 |
| 2025-01-17 |
80f7af510b |
单部署保护 + 常量外迁至 constants.py |
| 2025-02-17~25 |
b5709ca408~f6fa2399cc |
allowed_fails_policy 集成 |
| 2025-08-11 |
bc9d0484e4 |
敏感数据屏蔽 |
| 2025-10-08 |
5a1b6fe1a6 |
空 exception_status 跳过冷却 |
| 2025-12-12 |
f25344484f |
最小请求阈值 |
| 2026-03-19 |
bbd5ed9699 |
异步 Redis 写入支持 |
4.2 cooldown_cache.py
| 日期 |
提交 |
变更内容 |
| 2024-09-14 |
c8d15544c8 |
初始创建(v2 逻辑配套) |
| 2024-10-29 |
44e7ffd05c |
Redis 性能优化 |
| 2025-08-11 |
bc9d0484e4 |
错误字符串敏感数据屏蔽 |
| 2025-11-21 |
f542011076 |
cooldown key 缓存优化 |
| 2026-03-19 |
bbd5ed9699 |
新增 async_add_deployment_to_cooldown() |
4.3 cooldown_callbacks.py
| 日期 |
提交 |
变更内容 |
| 2024-09-14 |
c8eff2dc65 |
Prometheus 异常状态追踪 |
| 2024-10-04 |
224460d4c9 |
修复 Prometheus 自定义 logger cooldown 事件 |
| 2024-10-16 |
891e9001b5 |
单元测试覆盖 |
| 2024-11-19 |
7463dab9c6 |
provider budget routing 集成 |
4.4 constants.py (cooldown 相关)
| 日期 |
提交 |
常量 |
| 2025-01-17 |
80f7af510b |
SINGLE_DEPLOYMENT_TRAFFIC_FAILURE_THRESHOLD |
| 2025-12-12 |
f25344484f |
DEFAULT_FAILURE_THRESHOLD_MINIMUM_REQUESTS |
4.5 encrypted_content_affinity_check.py
| 日期 |
提交 |
变更内容 |
| 2026-02-24 |
058fac848e |
初始创建,加密内容亲和性部署 |
| 2026-05-13 |
2e5ebf826f |
集成 cooldown 注册 + stale encrypted_content 快速失败 |
5. 最近半年变更重点 (2025-12 ~ 2026-06)
| 日期 |
重点方向 |
提交 |
说明 |
| 2025-12-12 |
错误率冷却改进 |
f25344484f |
最小请求阈值防误触发 |
| 2026-02-24 |
新特性 |
058fac848e |
encrypted_content_affinity 机制诞生 |
| 2026-03-19 |
性能优化 |
bbd5ed9699 |
异步 Redis cooldown 写入 |
| 2026-05-13 |
集成扩展 |
2e5ebf826f |
Responses API cooldown + encrypted_content 快速失败 |
趋势: 最近半年的变更重心从 cooldown 核心逻辑转向三个方向:
1. 性能优化 — 异步 IO,避免阻塞事件循环
2. 新 API 集成 — Responses API 的冷却支持
3. 加密内容场景 — encrypted_content_affinity 与 cooldown 的联动
6. 核心贡献者
| 贡献者 |
角色 |
主要贡献 |
| Ishaan Jaff |
主要维护者 |
模块化拆分、v2 逻辑、allowed_fails_policy、异步优化 |
| Krish/Krrish Dholakia |
核心开发者 |
单部署保护、Redis 优化、敏感数据屏蔽 |
| Devaj Mody |
贡献者 |
最小请求阈值 |
| Mateo Wang |
贡献者 |
Responses API cooldown 集成 |
| Sameer Kankute |
贡献者 |
encrypted_content_affinity |
| Alexsander Hamir |
贡献者 |
cooldown key 缓存优化 |
7. 分支说明
- 默认分支:
litellm_internal_staging(开发分支,PR 合入目标)
- 稳定分支:
main(从 staging 合并,用于发布)
- 所有 cooldown 变更均通过 PR 合入
litellm_internal_staging,再合并到 main
- 本地 fork(Setsuna-Yukirin/litellm)当前在
main 分支
文档生成时间: 2026-06-01
数据来源: git log 分析 + 源码阅读