mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-07 01:47:47 +08:00
refactor(model-permissions): 简化 allowed_models 为纯列表格式
移除按 API 格式区分的字典模式(Dict[str, List[str]]),统一使用简单列表格式。 - 删除 normalize_allowed_models 的 api_format 参数 - 删除 check_model_allowed 的 api_format 参数 - 简化 merge_allowed_models 为直接列表交集 - 移除前端的字典模式兼容代码和警告 UI - 删除 is_format_mode、convert_to_format_mode 等辅助函数
This commit is contained in:
@@ -223,12 +223,10 @@ class AdminUpdateEndpointKeyAdapter(AdminApiAdapter):
|
||||
update_data["learned_rpm_limit"] = None
|
||||
logger.info("Key %s 切换为自适应 RPM 模式", self.key_id)
|
||||
|
||||
# 统一处理 allowed_models:空列表/空字典 -> None(表示不限制)
|
||||
# 统一处理 allowed_models:空列表 -> None(表示不限制)
|
||||
if "allowed_models" in update_data:
|
||||
am = update_data["allowed_models"]
|
||||
if am is not None and (
|
||||
(isinstance(am, list) and len(am) == 0) or (isinstance(am, dict) and len(am) == 0)
|
||||
):
|
||||
if isinstance(am, list) and len(am) == 0:
|
||||
update_data["allowed_models"] = None
|
||||
|
||||
# 统一处理 locked_models:空列表 -> None
|
||||
|
||||
@@ -310,19 +310,12 @@ class AdminGetModelRoutingPreviewAdapter(AdminApiAdapter):
|
||||
next_probe_at = fmt_next_probe
|
||||
|
||||
# 解析 allowed_models
|
||||
# 语义说明:
|
||||
# - None: 不限制(允许所有模型)
|
||||
# - {}: 空字典 = 不限制(normalize_allowed_models 返回 None)
|
||||
# - []: 空列表 = 拒绝所有模型
|
||||
# - {"CLAUDE": []}: 指定格式空列表 = 该格式拒绝所有
|
||||
raw_allowed_models = key.allowed_models
|
||||
if raw_allowed_models is None:
|
||||
allowed_models_list = None
|
||||
elif isinstance(raw_allowed_models, dict) and not raw_allowed_models:
|
||||
# 空 dict {} 在语义上等价于不限制
|
||||
allowed_models_list = None
|
||||
else:
|
||||
allowed_models_list = parse_allowed_models_to_list(raw_allowed_models)
|
||||
allowed_models_list = (
|
||||
parse_allowed_models_to_list(raw_allowed_models)
|
||||
if raw_allowed_models
|
||||
else None
|
||||
)
|
||||
|
||||
key_infos.append(
|
||||
RoutingKeyInfo(
|
||||
|
||||
@@ -352,7 +352,7 @@ def _get_available_model_ids_for_format(db: Session, api_formats: list[str]) ->
|
||||
if model_provider_id not in provider_ids_with_format:
|
||||
continue
|
||||
|
||||
# 检查该 provider 下是否有 Key 允许这个模型(支持 list/dict 两种 allowed_models)
|
||||
# 检查该 provider 下是否有 Key 允许这个模型
|
||||
from src.core.model_permissions import check_model_allowed
|
||||
|
||||
rules = provider_key_rules.get(model_provider_id, [])
|
||||
@@ -362,19 +362,14 @@ def _get_available_model_ids_for_format(db: Session, api_formats: list[str]) ->
|
||||
available_model_ids.add(model_id)
|
||||
break
|
||||
|
||||
# 对于支持多个格式的 Key:任意一个可用格式允许即可
|
||||
for fmt in usable_formats:
|
||||
if check_model_allowed(
|
||||
model_name=model_id,
|
||||
allowed_models=allowed_models, # type: ignore[arg-type]
|
||||
api_format=fmt,
|
||||
resolved_model_name=(model.provider_model_name if global_model else None),
|
||||
):
|
||||
available_model_ids.add(model_id)
|
||||
break
|
||||
else:
|
||||
continue
|
||||
break
|
||||
# 检查是否允许该模型
|
||||
if check_model_allowed(
|
||||
model_name=model_id,
|
||||
allowed_models=allowed_models, # type: ignore[arg-type]
|
||||
resolved_model_name=(model.provider_model_name if global_model else None),
|
||||
):
|
||||
available_model_ids.add(model_id)
|
||||
break
|
||||
|
||||
return available_model_ids
|
||||
|
||||
|
||||
Reference in New Issue
Block a user