From e59c1bcc536131b43974b3069427d345c685689b Mon Sep 17 00:00:00 2001 From: hmo Date: Thu, 23 Jul 2026 16:47:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4afw-proxy(=E5=B7=B2?= =?UTF-8?q?=E5=BA=9F=E5=BC=83=E8=AF=95=E9=AA=8C)+ocg-key=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E7=94=B1/api/keys=E9=85=8D=E9=A2=9D=E5=8A=A8=E6=80=81=E5=86=B3?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - afw-proxy是早期试验代理,老爸确认已废弃,不入链 - ocg-key*按AgentsMeeting/api/keys健康度排序,session_expired跳过 --- gateway/scripts/chat_bridge.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/gateway/scripts/chat_bridge.py b/gateway/scripts/chat_bridge.py index f92f977..58c3d1a 100644 --- a/gateway/scripts/chat_bridge.py +++ b/gateway/scripts/chat_bridge.py @@ -98,13 +98,29 @@ def _build_chain() -> list[tuple[str, str, str]]: 2026-07-23 修复:原白名单只有 deepseek/volcengine/opencode-go*, 但 config 里只有 deepseek(402欠费)→ 全链死 → 模型无响应。 - 现按实际存活度排序:sense-nova(实测可用+支持tools)→ deepseek → - afw-proxy(本地代理,活着时优先)→ ocg-key*(Windows IP 当前403,恢复即可用)。 + 现按实际存活度排序:sense-nova(实测可用+支持tools)→ deepseek → ocg-key*。 + (afw-proxy 是已废弃的本地试验代理,不入链——老爸 2026-07-23 确认) + ocg-key* 顺序由 AgentsMeeting /api/keys 的配额状态动态决定(session_expired 跳过)。 模型名:options.model 优先,否则取 provider models 字典第一个 key。 """ - priority = ["sense-nova", "deepseek", "afw-proxy", - "ocg-key6", "ocg-key5", "ocg-key4", "ocg-key3", "ocg-key2", "ocg-key1", - "volcengine", "opencode-go", "opencode-go-new"] + # 从 AgentsMeeting /api/keys 拉 ocg key 健康度(246 本地视角) + _key_order = [] + try: + import urllib.request as _ur + _resp = _ur.urlopen("http://192.168.1.246:5803/api/keys", timeout=5) + _kd = json.loads(_resp.read()) + for _k in _kd.get("keys", []): + if _k.get("session_expired"): + continue # 过期key直接跳过 + _key_order.append(_k["key_id"]) + except Exception: + pass # API 不可用则按静态顺序 + + _ocg_static = ["ocg-key6", "ocg-key5", "ocg-key4", "ocg-key3", "ocg-key2", "ocg-key1"] + _ocg_sorted = ([k for k in _key_order if k in _PROVIDERS] or _ocg_static) + + priority = ["sense-nova", "deepseek"] + _ocg_sorted + \ + ["volcengine", "opencode-go", "opencode-go-new"] chain = [] for key in priority: prov = _PROVIDERS.get(key)