services: 机器翻译只在服务端接得上的 provider 里挑,别随手挑中没接的那家
线上表现:文本翻译 / 同传 / 面对面全部报「未配置机器翻译服务」,
而后台 EAIMAR 下 mt_alibaba / mt_azure / mt_volcano 三家都启用着、凭据也都填了。
根因:resolveTranslator 挑选时没有任何优先级,谁先从 postgres 返回就用谁,
这次挑中了 mt_volcano,而服务端只实现了阿里一家,于是落进「provider 不是
alibaba 就返回 nil」的分支。错误信息指向「没配置」,会把人引去后台反复检查
明明填好的凭据;而且它取决于数据库返回顺序,可能自己好、也可能自己坏。
- 新增 mtProviderPriority 白名单:只在真正接了的 provider 里挑,并给出稳定优先级。
- 挑选抽成纯函数 pickMTSvc(可脱离 postgres 测),被跳过的未接入服务打一条点名 warn。
- 缓存命中不再硬编码返回 "alibaba",改为记住实际 provider。
- model_translate_test.go 5 个用例:未接入的要跳过、全不可用返回 nil、
停用/非 MT 类别不参与、应用行优先、provider 大小写归一。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|