feat(gate): invoke_model完备性门禁接入能力降级换算——i2i/r2v模型无媒体输入时按t2i/t2v契约校验(否则i2i承接文生图被缺输入图误拦)(2026-09-08)

This commit is contained in:
ymq 2026-09-08 17:20:40 +08:00
parent d8bd88ced7
commit 5bb22fe7df

View File

@ -91,6 +91,32 @@ def _biz_media(biz, key):
return bool(str(v or "").strip()) 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): def _check_completeness_code(capability, task, biz):
"""能力契约代码表校验(**兜底层**,2026-09-08 用户定夺后降级)。 """能力契约代码表校验(**兜底层**,2026-09-08 用户定夺后降级)。
@ -356,6 +382,8 @@ async def tool_invoke_model(params, org_id, user_id=""):
desc = "" desc = ""
cap2, desc = await _resolve_capability(model, org_id) cap2, desc = await _resolve_capability(model, org_id)
cap = cap or cap2 cap = cap or cap2
# 能力降级门禁换算:i2i/r2v 模型无媒体输入时按 t2i/t2v 契约校验
cap = _degrade_gate_cap(cap, biz)
gap = await judge_completeness(model, cap, task, biz, gap = await judge_completeness(model, cap, task, biz,
description=desc, org_id=org_id or "0", description=desc, org_id=org_id or "0",
user_id=user_id or "") user_id=user_id or "")