Repository navigation
feat(gateway): filter accounts by per-model qualification before sticky selection - #492
Conversation
|
您好,感谢维护。 这个 PR 处理的是「账户不支持某个模型」时的反复 400:上游会返回
想麻烦看下能否合入并随下一个版本发布?另外 #488(本地上限可配置)已合并,感谢。 |
|
这个改动有实际价值:按账户和模型记住明确的资格拒绝,并在粘性选择、轮转前过滤,可以减少同一模型反复撞到不支持账户的 400。当前先暂缓合并,下面三处需要补齐;审查基于 head
回归测试需要覆盖:主模型与图片工具模型不同、参数错误含上述关键词、模型别名的一致性;两个账户先拒绝后过滤、sticky 绑定、所有候选均被标记、最后一个候选仍能学习、TTL 到期;400 正文挂起/持续发送/超大正文/读取失败;HTTP 200 后 当前 Rust CI 失败停在 cargo fmt --all -- --check
cargo test -p codexmanager-service --lib account::model_support -- --test-threads=1
cargo test -p codexmanager-service --lib gateway::upstream:: -- --test-threads=1
cargo test -p codexmanager-service --lib gateway::http_bridge:: -- --test-threads=1
cargo test --workspace -- --test-threads=1以上结论来自源码和当前 CI 审查;没有使用真实账户,也没有对真实上游执行实测。作者提供的隔离上游验证说明覆盖了基础路径,但没有给出这些边界的验证证据。 |
|
已直接补齐修复并推送到原 PR 分支,最终审查提交为 这项改动能减少已知不支持某模型的账户被重复选中,修复后有实际收益,审查通过。
验证记录:
回归覆盖 可以合并。 |
明确“不支持本模型”的账户此前仍会被粘性路由和轮转反复选择,产生可避免的 400。本 PR 按账户和实际发送的模型记录短期资格拒绝,并在候选过滤、粘性选择和轮转前使用记录。
验证覆盖两种 OpenAI 风格端点的流/非流、tools、别名、sticky、最后一个候选、全部被标记、TTL 与大/挂起/持续发送/读取失败的 400,以及可恢复 MCP 失败和真正响应失败后的资格状态。格式及 diff 检查通过;最终完整工作区和最新提交 CI 结果见维护者评论。验证使用本地隔离上游,没有使用真实账号或生产请求。
CI 还触发了既有 busy_database 测试的计数发布与内存预算释放时序竞态。测试现在用已有的 20 秒有界等待,同时确认写入完成、queued_bytes 和 queued_jobs 归零;数据库写入、busy retry、零丢失和内存释放断言全部保留,没有改动生产实现或 CI 配置。最终分支已同步包含 #464、#487、#491 的当前 main。