Skip to content

Model providers: close runtime failover and live UI acceptance gaps #55

Closed

Description

@2233admin

背景 阶段性根目录待办已收敛。模型供应商仍有两项真实未完成工作,需要在公开 Issue 中继续追踪: - ProviderResolver.resolve_with_fallback() 已实现并有测试,但生产路径没有调用者;当前默认值与 cooldown 容易让用户误以为运行时已经自动故障转移。 - 模型供应商 UI 已通过类型检查、lint 和生产构建,但尚未针对真实后端完成创建、编辑、删除、同步、连接测试、默认顺序和提示反馈的完整验收。 ## 验收标准 - [ ] 明确选择并完成一条路径:将一个明确的 provider role 接入 resolve_with_fallback(),或删除未使用的 failover/cooldown 表面与误导性文案。 - [ ] 为选择的路径保留针对生产调用链的测试,而不仅是 resolver 单元测试。 - [ ] 对真实后端完成模型供应商 UI 的创建、编辑、删除、模型同步、连接测试、默认顺序和错误提示验收。 - [ ] 修复验收中发现的问题,并在 Issue 中记录验证命令或截图。 ## 非目标 - 不在没有生产调用者的前提下扩展新的 failover 策略。 - 不重做现有模型供应商设置界面。

Activity

  1. added
    ready-for-agentAcceptance criteria complete; an agent can take it · agent 可接
    on Jul 31, 2026
  2. lunnynight commented on Aug 8, 2026

    @lunnynight
    Contributor

    自主开发进度(nightly agent):已选择路径并完成生产链路接线,PR #75 待合入

    选择的路径:将一个明确 provider role 接入 resolve_with_fallback() —— 选了 chat role(Agent 对话坞,最常被使用的消费点),未删除 failover 表面。

    PR #75(https://github.com/2233admin/opencli-Razormind/pull/75):`feat(chat): wire chat role into ProviderResolver.resolve_with_fallback (#55)`

    验收项对照

    • 路径选择:chat role 接入 failover。model_defaults.candidates 配置后走 resolve_with_fallback()(连接级失败按序转移、4xx 立即重抛);无 candidates / 显式 provider_id 保持原单 provider 行为,兼容既有安装。
    • 生产调用链测试:新增 tests/integration/test_chat_failover_api.py,经真实 POST /api/v1/chat 端点验证 legacy、可重试转移、4xx 不转移、全不可用 502、disabled 跳过、显式 provider 绕过(resolver 单测之外)。
    • [~] 真实后端 UI 验收:本轮以 API 级真实验收 完成(fresh sqlite + 本地 fake OpenAI 服务器):provider 创建/编辑(PATCH)/删除、POST /{id}/test 连接测试 ok:true(7.8ms,models_sample 2 个)、POST /{id}/models/sync 发现 2 模型、PUT/GET /model-defaults 默认顺序持久化、chat 错误提示(无 provider 400 / SSRF guard 502 / 非法 role 400 / 未注册 model 400)。浏览器 UI 走查(创建/编辑/删除/同步/连接测试/默认顺序/提示反馈)仍需真机人工或浏览器自动化完成 —— 本环境无可用浏览器,这是唯一遗留的人工项。
    • 修复验收中发现的问题:修复了 test_resolver.py 并发测试的 unittest.mock.patch 泄漏(gather 内逐任务 patch 围绕 await 产生还原竞争)。

    验证证据

    环境性发现(与本 PR 无关,但影响本机测试稳定性)

    本机 host 有 Clash 代理(127.0.0.1:7897),沙箱偶发注入 ALL_PROXY=socks5://...;httpx 0.28.1 在 AsyncClient() 构造时急切构建 SOCKS transport,无 socksio 时抛 ImportError,导致一批真实 HTTP 测试(graphon is_healthy 等)偶发失败。证据:tests/integration 单独跑、不含本 PR 文件时同样复现 17 个相同失败。建议 dev 依赖补 httpx[socks](本机 pip install socksio 后全量通过)。

    推送说明

    本机 git 凭据(lunnynight)对 2233admin/opencli-Razormind 无写权限(HTTPS 403 / SSH 均拒),已走 fork + PR 路径(lunnynight:feat/chat-failover-wiring-55 → main)。需要 2233admin 合并 PR #75。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentAcceptance criteria complete; an agent can take it · agent 可接

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions