diff --git a/pipeline_service/gateway.py b/pipeline_service/gateway.py index 1a99dc4..0c0fccd 100644 --- a/pipeline_service/gateway.py +++ b/pipeline_service/gateway.py @@ -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}")