From 5bb22fe7df182cf6894864d2ae7f7a6368340480 Mon Sep 17 00:00:00 2001 From: ymq Date: Tue, 8 Sep 2026 17:20:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(gate):=20invoke=5Fmodel=E5=AE=8C=E5=A4=87?= =?UTF-8?q?=E6=80=A7=E9=97=A8=E7=A6=81=E6=8E=A5=E5=85=A5=E8=83=BD=E5=8A=9B?= =?UTF-8?q?=E9=99=8D=E7=BA=A7=E6=8D=A2=E7=AE=97=E2=80=94=E2=80=94i2i/r2v?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E6=97=A0=E5=AA=92=E4=BD=93=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=97=B6=E6=8C=89t2i/t2v=E5=A5=91=E7=BA=A6=E6=A0=A1=E9=AA=8C(?= =?UTF-8?q?=E5=90=A6=E5=88=99i2i=E6=89=BF=E6=8E=A5=E6=96=87=E7=94=9F?= =?UTF-8?q?=E5=9B=BE=E8=A2=AB=E7=BC=BA=E8=BE=93=E5=85=A5=E5=9B=BE=E8=AF=AF?= =?UTF-8?q?=E6=8B=A6)(2026-09-08)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_service/platform_model_tools.py | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/pipeline_service/platform_model_tools.py b/pipeline_service/platform_model_tools.py index 438b7b9..9e34fb4 100644 --- a/pipeline_service/platform_model_tools.py +++ b/pipeline_service/platform_model_tools.py @@ -91,6 +91,32 @@ def _biz_media(biz, key): return bool(str(v or "").strip()) +def _degrade_gate_cap(cap, biz): + """能力降级门禁换算(2026-09-08,i2i→t2i / r2v→t2v)。 + + 选中模型能力是降级源(i2i/r2v)但调用没带该能力必需的媒体输入时, + 说明任务实际是请求能力(t2i/t2v)形态——门禁按请求能力契约校验 + (只要 task 描述),否则 i2i 模型承接文生图任务会被「缺输入图」误拦。 + 带了媒体输入 = 真 i2i/r2v 用法,契约不变。 + """ + try: + from pipeline_llm.selection import CAP_DEGRADE_SOURCE + except ImportError: + return cap + src = CAP_DEGRADE_SOURCE.get((cap or "").strip().lower()) + if not src: + return cap + for req in _CAP_REQUIRED.get(cap, ()): + if req == "task": + continue + if req == "any_media": + if not any(_biz_media(biz or {}, k) for k in _MEDIA_KEYS): + return src + elif not _biz_media(biz or {}, req): + return src + return cap + + def _check_completeness_code(capability, task, biz): """能力契约代码表校验(**兜底层**,2026-09-08 用户定夺后降级)。 @@ -356,6 +382,8 @@ async def tool_invoke_model(params, org_id, user_id=""): desc = "" cap2, desc = await _resolve_capability(model, org_id) cap = cap or cap2 + # 能力降级门禁换算:i2i/r2v 模型无媒体输入时按 t2i/t2v 契约校验 + cap = _degrade_gate_cap(cap, biz) gap = await judge_completeness(model, cap, task, biz, description=desc, org_id=org_id or "0", user_id=user_id or "")