feat(#65): 配置预览渲染引擎(布局/告警/NL查询,对齐 cockpit-layout-v1 widget 类型)

This commit is contained in:
2026-08-05 06:05:26 +08:00
parent c5a5b8468c
commit 0660a4b256
3 changed files with 523 additions and 5 deletions
+6 -5
View File
@@ -114,7 +114,8 @@ def validate_item(kind: ConfigKind, key: str, value: Any) -> ValidationResult:
校验规则(配置台 upsert 前置门禁,防止坏数据进快照):
- 通用:key 非空、匹配 ``[a-z0-9_.-]+``;
- model_param:value 为标量(int/float/bool/str)或标量列表;
- model_param:value 为标量(int/float/bool/str)、标量列表,或结构化 dict
(如 optimizer 配置 / 告警规则等复合超参);
- rag_config:top_k 为 1~50 的正整数、similarity_threshold 为 0~1 浮点、
sources 为非空字符串列表;
- layout:value 为 widget 列表,每个 widget 有合法 type 与 x/y/w/h。
@@ -126,11 +127,11 @@ def validate_item(kind: ConfigKind, key: str, value: Any) -> ValidationResult:
errors.append(f"key '{key}' 仅允许小写字母/数字/._-")
if kind == ConfigKind.MODEL_PARAM:
if not isinstance(value, (int, float, bool, str, list)):
errors.append("model_param 的 value 必须为标量或标量列表")
if not isinstance(value, (int, float, bool, str, list, dict)):
errors.append("model_param 的 value 必须为标量/标量列表/结构化对象")
elif isinstance(value, list) and any(
not isinstance(v, (int, float, bool, str)) for v in value):
errors.append("model_param 列表 value 仅允许标量元素")
not isinstance(v, (int, float, bool, str, dict)) for v in value):
errors.append("model_param 列表 value 仅允许标量或对象元素")
# 常见超参范围提示(软约束,仅对已知键)
if key == "learning_rate" and isinstance(value, (int, float)):
if not (0 < value < 1):