mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
问题(实测证据,按钩子做字节级哈希分组): transform_response github/groq/mistral 三份完全相同(2207B × 3) transform_stream_chunk github/groq/kimicode/mistral 四份相同(2211B × 4) transform_error deepseek/github/groq/kimicode 四份相同(293B × 4) 合计 12680 字节完全重复。openai.lua 自己的注释就写着 「(anthropic.lua carries the same helper; Lua adapters have no shared prelude.)」—— safe_tool_id 在 openai.lua 与 anthropic.lua 各复制了一份。 参考插件有 src/openai-compat.ts(1196 行,12 个 adapter 里 8 个 import), 我们没有对应物。本提交补上这一层。 做法:**编译期把一份中性助手库拼在适配器脚本前面**,注入点在 LoadAdapterSource —— 适配器有三个编译点(worker boot / HasFn 探针 / inspectScript),全部源自这里存进 pool 的 script 文本,拼一处即全覆盖; 且不像运行时 SetGlobal 那样会在热重载/池重建时丢失。 助手只做**协议层面的中立清理与组装**,不含任何厂商名(守住内核零厂商名 纪律):decode_body / strip_control(剥内核私有控制字段 —— 那是网关内部 约定,v2 改一次就要改 12 个文件)/ unified_skeleton / finish_reason / usage(含 cache 细分,属协议族已知变体)/ choices / tool_id(路由器性质: 坏 id 会被回放到每个 Claude 上游,一票否决整条 AUTO 链)/ derive_key。 判据两条: - TestAdapterPreludeInjectedAndCorrect:不只断言存在,抽查**语义值** (end_turn→stop、tool_use→tool_calls、合法 id 原样透传、非法 id 带摘要 改写、cache_hit 从 prompt_cache_hit_tokens 取) - TestAdapterPreludeDoesNotChangeExistingAdapters:旧适配器(自己实现全部 钩子、不引用前导)输出逐字节不变 回归:internal/lua + internal/provider 全绿(16 个适配器行为不变)。