dsh-hyper-tools:解决 Charm Hyper 网关 10 MiB 限制的插件

前言

DeepSeek Harness (DSH) 采用了插件化架构,允许在模型推理前注入中间件逻辑。Charm Hyper 的 HTTP 网关(Google Frontend 后端)对请求体有严格的 10 MiB 限制。当对话历史累积的图片超过这个上限时,网关会拒绝请求并返回 400 invalid request body 错误,导致推理任务在执行前就失败。dsh-hyper-tools 插件正是为了解决这一场景而设计。

插件概览

该插件由 samuelrubiodev 维护,开源协议为 MIT。它通过拦截特定路由的请求,在发送到网关前动态调整图片载荷,确保请求体大小不超过限制。

工作原理

插件通过注册 llm/stream 中间件实现功能,主要包含两个步骤:

  1. 预处理与替换
    在请求分发前,插件会根据 maxRequestImageBytes 预算投影持久化历史。如果图片载荷超标,最旧的图片会被替换为 DSH 标准的占位符文本([image omitted to fit request image limits; …]),而最新的图片会被保留。如果请求体原本就符合要求,则直接通过 next() 分发,不做额外处理。

  2. 失败重试
    如果网关依然拒绝请求(通常是因为预算估算低估了非图片的元数据开销),插件会捕获这个错误并重试一次。重试时,图片预算会乘以 recoveryBudgetFactor(默认 0.5),进一步替换更旧的图片。如果已无可替换内容,则原样返回原始错误。

安装

使用以下命令安装插件:

dsh plugin --profile <profile> add dsh-hyper-tools

配置

该插件支持灵活的配置,所有字段均为可选。以下是核心配置项:

配置项 默认值 说明
providers ['charm-hyper', 'hyper'] 受影响的 Provider 路由列表(不区分大小写)。
maxRequestImageBytes 6291456 (6 MiB) 单次请求允许的最大图片载荷(Base64 字节数)。
recovery true 当网关拒绝请求时,是否触发一次重试。
recoveryBudgetFactor 0.5 重试时的图片预算乘数。
byteQuantum 1 字节溢出时的移除步长。
countQuantum 1 数量溢出时的移除步长。

配置示例:

- id: hyper-tools
  name: 'dsh-hyper-tools'
  config:
    providers: ['charm-hyper']
    maxRequestImageBytes: 6291456

注意事项

  • 预算计算范围:maxRequestImageBytes 仅计算图片的 Base64 载荷。文本内容、工具模式定义以及 JSON 结构体不计入此限制。
  • 仅处理指定路由:插件仅对 providers 列表中的路由生效,其他 Provider 的请求不受影响。
  • 兼容性:需要 @deepseek-ai/dsh-llm ^0.1.5-rc.1。

总结

dsh-hyper-tools 通过智能替换旧图片和失败重试机制,解决了 Charm Hyper 网关对请求体大小的硬性限制问题。对于需要处理大量图片的长对话场景,这是一个可靠的中间件解决方案。

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

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

小夜