DeepSeek Harness 的 OMP 风格 429 重试策略

前言

DeepSeek Harness(DSH)内置的 dsh-llm-retry 对临时故障使用有界指数退避策略,默认从 500ms 到 10s 共重试 5 次。当预算耗尽时,TPM/RPM 窗口仍然活跃,可能导致更严重的限流。OpenModel Platform(OMP)对速率限制的处理方式不同:它会重试最多 10 次,等待至少 30 秒,并接受 provider 的 Retry-After 头,最长可达 5 分钟。

这个插件为 DSH 增加了一套与 OMP 对齐的 429 重试行为,无需修改 DSH 核心代码。

是什么

dsh-omp-retry 是一个 DSH 插件,为 HTTP 429(Too Many Requests)响应提供 OMP 风格的重试策略。它由 Rinai-R 维护,定位为工作流类插件。插件会在 dsh-llm-retry 之前插入一个 agent/request-error 监听器,只接管 RATE_LIMIT 错误码,其余错误码仍由内置执行器处理。

核心功能

  • 最多 10 次速率限制重试(可配置)。
  • 延迟为 max(30 s, provider Retry-After),即至少等待 30 秒,或使用 provider 返回的 Retry-After 头。
  • 若 provider 返回的 Retry-After 超过 5 分钟,则终止重试链,不再等待。
  • 每次重试会持久化 llm/retry / llm/retry-started 事件,保证重试 UI 和会话历史正常工作。
  • 取消操作、回合结束或插件销毁会中断当前等待。
  • SERVER、TIMEOUT、TRANSPORT、EMPTY_RESPONSE 仍由 dsh-llm-retry 处理。
  • CONTEXT_WINDOW_EXCEEDED、QUOTA、AUTH、INVALID_REQUEST 不会重试。

安装与启用

使用官方安装命令:

dsh plugin --profile desktop add github:Rinai-R/dsh-omp-retry

将 desktop 替换为你的实际 profile 名称(如 web 或自定义 profile),然后重启 DSH。插件会在启动时自动插入 omp-rate-limit-retry 配置行。

配置

默认配置为:

  • maxRetries: 10
  • floorMs: 30000
  • maxDelayMs: 300000

在 profile 的 cordis.patch.yml 中覆盖:

- id: omp-rate-limit-retry
  config:
    maxRetries: 10
    floorMs: 30000
    maxDelayMs: 300000

设为 maxRetries: 0 可禁用插件。插件的重试预算独立于 provider 的 retryPolicy.maxRetries:即使 provider 仍为默认 5 次,该插件仍会进行最多 10 次速率限制重试。

典型用法

在 cordis.patch.yml 中为 provider 配置 OMP 风格的本地退避,并将 RATE_LIMIT 放入可重试列表:

retryPolicy:
  mode: normal
  maxRetries: 10
  retryableCodes:
    - EMPTY_RESPONSE
    - RATE_LIMIT
    - SERVER
    - TIMEOUT
    - TRANSPORT
  backoff:
    initialDelayMs: 500
    maxDelayMs: 8000
    jitterRatio: 0.25

这样,当 dsh-omp-retry 拦截到 429 响应时,会按 OMP 策略重试;未拦截的错误仍由 provider 策略处理。

适用场景与注意

适合需要与 OMP 行为对齐、希望更长时间窗口内处理速率限制的开发者。插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证(MIT)。

限制

  • 不适用于 Ghostty,也不是通用重试框架,仅覆盖 HTTP 429 速率限制。
  • 未实现 OMP 的 model/credential 降级链。
  • 若 provider 的 Retry-After 超过 maxDelayMs,将不再等待。

总结

dsh-omp-retry 通过 OMP 风格的 429 重试策略,帮助 DSH 更好地处理速率限制场景。配合合适的 provider 重试配置,可以在保持会话历史和 UI 正常工作的同时,延长重试窗口。更多细节见插件目录页或 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜