fix(llm): 严格本机构隔离,去掉系统级(org_id='0')兜底

This commit is contained in:
ymq 2026-08-17 13:22:25 +08:00
parent e9838a3ec6
commit 791bd88c6d

View File

@ -33,8 +33,8 @@ def _decrypt_key(encrypted: str) -> str:
async def _get_model_config(model_name: str = None, org_id: str = None) -> dict:
"""Look up model config from llm table. Returns dict with api_base, api_key, model_id.
org_id 多租户隔离:非空时只取「本机构 + 系统级(org_id='0')」的模型,
且本机构模型优先(ORDER BY (org_id='0') 让系统级排后);org_id 为空时不过滤(向后兼容)。
org_id 多租户隔离:非空时只取本机构(org_id=${org}$)的模型,不含系统级兜底;
org_id 为空时不过滤(向后兼容)。
"""
global _model_cache
@ -51,17 +51,17 @@ async def _get_model_config(model_name: str = None, org_id: str = None) -> dict:
sql = "SELECT api_base, api_key, model_id FROM llm WHERE name=${name}$ AND status='active'"
params = {"name": model_name}
if org_id:
sql += " AND (org_id=${org}$ OR org_id='0')"
sql += " AND org_id=${org}$"
params["org"] = org_id
sql += " ORDER BY (org_id='0') ASC LIMIT 1"
sql += " LIMIT 1"
recs = await sor.sqlExe(sql, params)
else:
sql = "SELECT api_base, api_key, model_id, name FROM llm WHERE status='active'"
params = {}
if org_id:
sql += " AND (org_id=${org}$ OR org_id='0')"
sql += " AND org_id=${org}$"
params["org"] = org_id
sql += " ORDER BY (org_id='0') ASC, id LIMIT 1"
sql += " ORDER BY id LIMIT 1"
recs = await sor.sqlExe(sql, params)
if recs:
r = recs[0]