fix(gateway): 项目模型持久化加对话能力守卫——白名单取pipeline_llm.selection.CHAT_CAPS(未装兜底t2t/i2t/m2t),非对话模型选中即无效走回退链(2026-09-06用户定夺)

This commit is contained in:
ymq 2026-09-06 19:49:15 +08:00
parent 2f6b9396e1
commit 763e84681f

View File

@ -226,10 +226,22 @@ class Gateway:
except Exception:
pass
# 2026-09-04 切换到模型治理新表(旧 llm 表停用)
# 2026-09-06 会话 agent 只接受对话能力t2t/i2t/m2t
# 能力白名单唯一事实源 = pipeline_llm.selection.CHAT_CAPS
# (模块未装时兜底同值);存量 capability 空串按 t2t 语义归一;
# 非对话模型embedding/视频生成等)选中即无效,走回退链,
# 不落项目 default_model
try:
from pipeline_llm.selection import CHAT_CAPS as _chat_caps
except ImportError:
_chat_caps = ("t2t", "i2t", "m2t")
_cap_ph = ",".join("${c%d}$" % i for i in range(len(_chat_caps)))
_cap_params = {"c%d" % i: c for i, c in enumerate(_chat_caps)}
recs = await sor.sqlExe(
"SELECT id, name, org_id FROM llm_model "
"WHERE status='active' AND (id=${m}$ OR vendor_model_id=${m}$) LIMIT 1",
{"m": model_id})
"WHERE status='active' AND (id=${m}$ OR vendor_model_id=${m}$) "
"AND COALESCE(NULLIF(capability,''),'t2t') IN (%s) LIMIT 1" % _cap_ph,
dict({"m": model_id}, **_cap_params))
await sor.sqlExe("COMMIT", {})
if not recs:
logger.warning(f"run_message: model_id 无效(不存在或未启用): {model_id}")