deepinfra-fusion-proxy: A Local Reverse Proxy Injecting service_tier and Standard↔Flex Fallback for DeepInfra

前言

在 DSH 里把对话路由到 DeepInfra 时,客户端往往只能改模型名和消息体,很难按会话切换 DeepInfra 的 service_tier(Flex 与 priority/Standard)或 fail_fast(忙时立即 429 还是排队)。若要在每个请求里手写这些顶层字段,或自己实现 Flex 失败后再试 Standard,通常得改客户端或中间层代码。deepinfra-fusion-proxy 在本地起一个无第三方依赖的反向代理,统一注入参数并做带 per-session 冷却锁的自动回落;同时以 DSH profile bundle 形式提供安装、Composer 里的 tier 切换芯片和配置页。

这是什么

deepinfra-fusion-proxy 由维护者 citydirector 发布,npm 包名与 DSH 插件标识均为 deepinfra-fusion-proxy。它在 127.0.0.1:8790 转发 OpenAI 兼容请求到 https://api.deepinfra.com/v1/openai,对 POST /v1/openai/chat/completions 注入 service_tier 与 fail_fast,其余路径(如 GET /models、embeddings)原样透传。仓库同时包含 DSH 宿主插件、Composer 切换卡片和 bundle 配置页;许可证为 MIT(见 GitHub 仓库)。

核心功能

DeepInfra 文档中,service_tier 取 "flex" 或 "priority":Flex 更便宜、尽力而为,容量满时排队;priority 在支持的模型上优先调度、价格更高,响应里会回显实际 tier。fail_fast 默认为 false(排队);为 true 时容量问题会直接返回 HTTP 429,便于代理检测并触发回落。

下面介绍代理侧已文档化的能力(均可在 README 核对):

  1. Body 注入 — 仅修改 chat completions 请求体,不改动模型可见的消息文本。
  2. 按会话路由 — 从请求体读取 prompt_cache_key(客户端在 cacheRetention: long 时会带上)作为会话 id,路由与冷却锁按会话隔离,无需改客户端逻辑。
  3. 自动回落 — 非 Standard 模式下若 Flex 尝试得到 429,会再试一次 Standard;之后按 fallbackAction 为 "stay"(留在 Standard)或 "cooldown"(为该会话加冷却锁,N 轮后自动回到 Flex)。
  4. 等待策略 — 每会话可选 fail-fast(fail_fast: true,忙即 429 再回落)或 wait(fail_fast: false,在提供商上限内排队,DeepInfra 上约最长 10 分钟)。
  5. 控制 API — JSON 端点可读写状态、配置、解除冷却锁,便于 GUI 或脚本热更新。
  6. DSH 集成 — 宿主插件随 DSH 启停代理、带退避重启;Cordis Config 字段声明在插件内,DSH 0.1.7+ 下值落在当前 profile 的 cordis.patch.yml,修改后可原地重启受管子进程。Bundle 还提供 Composer 工具行的 Standard/Flex、等待策略、冷却与回落行为芯片,以及 Plugins 下的配置页(状态、baseURL、端口等)。

核心仅依赖 Node 标准库(http/https/fs/path);DSH 宿主侧依赖 harness 的 @deepseek-ai/schemastery,由 bundle 安装解析。

安装与启用

环境要求:DSH >= 0.2.1-rc.2 且 < 0.3.0,Node.js >= 24.9.0(见 package.json 的 engines)。

图形界面(推荐):侧边栏 Plugins → Add plugin,填入包名并启用:

deepinfra-fusion-proxy

启用后代理随 DSH 在 127.0.0.1:8790 启动。

命令行(修改 CLI 配置前应先停止对应 DSH 实例,改完再启动;Desktop 用户更宜用 Plugins 页,且 desktop profile 需与该安装的 CLI 及相同 DSH_HOME):

dsh plugin --profile web add deepinfra-fusion-proxy

注意:仅把包装进 profile 的 dependencies(例如手动 pnpm add)不等于激活 bundle;profile 的 package.json 需在 dsh.profile.bundles 里列出 deepinfra-fusion-proxy 才会加载 cordis.patch.yml 中的行。Plugins 面板会写入 bundle 条目;手动安装时需自行补上。

两个 profile 共用同一 $DSH_HOME 时,默认共用 $DSH_HOME/deepinfra-proxy 状态目录;若需独立实例,应在配置里为各 profile 设置不同的 stateDir 与 port。

插件在 DSH 进程权限下运行;安装前应阅读 GitHub 源码与 MIT 许可证,确认可接受其行为与网络转发范围。

典型用法

先做路由,再做会话级 tier 选择。

  1. 把 provider 指到本地代理:使用 openai-completions 类型 provider,baseURL 设为 http://127.0.0.1:8790/v1/openai,并设置 cacheRetention: long(以便每会话拥有独立的 prompt_cache_key)。DeepInfra API key 仍配置在 provider 上,由代理转发时保留 Authorization。
  2. 在 Composer 选 tier:工具行芯片可在 Standard / Flex、等待策略与回落行为之间按会话切换;状态写入代理的 config.json,DSH 重启后仍保留。
  3. 在 Plugins 查看状态:路径为 Plugins → deepinfra-fusion-proxy → deepinfra-proxy → 配置;可查看核心是否运行、失败原因、建议给 llm 路由用的 baseURL 与版本等。

请求路径示意:

OpenAI 兼容客户端(baseURL → http://127.0.0.1:8790/v1/openai)
   → deepinfra-fusion-proxy(127.0.0.1:8790)
   → https://api.deepinfra.com/v1/openai

SSE 分块转发并保留正确头;上游错误映射为 502。

适用场景与注意

适合已在 DSH 或本地 OpenAI 兼容栈中使用 DeepInfra、且需要在会话粒度切换 Flex/Standard、控制忙时排队还是 fail-fast、并在 Flex 容量紧张时自动试 Standard 的开发者。不适合期望完全不改 provider baseURL 或不需要 DeepInfra tier 语义的场景。

社区目录 SkillHub 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系;DSH 生态理念是「一切皆插件」,本介绍仅依据公开 README 与 package 元数据。

结尾

经过上面的步骤,你可以在不大改客户端的前提下,把 DeepInfra 的 service tier 与回落策略收到本地代理和 DSH UI 里统一配置。进一步细节与无 DSH 单独运行 server.js 的说明见仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/citydirector/deepinfra-fusion-proxy
  • GitHub:https://github.com/citydirector/deepinfra-fusion-proxy
羽毛球分组比赛记分
小程序二维码

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

Xiaoye