diff --git a/api/services/dataset_service.py b/api/services/dataset_service.py index ea8896a5aa..1332390d46 100644 --- a/api/services/dataset_service.py +++ b/api/services/dataset_service.py @@ -170,6 +170,16 @@ class _AutomaticProcessRule(BaseModel): mode: Literal[ProcessRuleMode.AUTOMATIC] summary_index_setting: _SummaryIndexSetting | None = None + @field_validator("summary_index_setting", mode="before") + @classmethod + def _normalize_summary_index_setting(cls, v: Any) -> Any: + """Treat dicts with enable=None (or missing enable) as None (#36602).""" + if v is None: + return None + if isinstance(v, dict) and v.get("enable") is None: + return None + return v + class _CustomProcessRule(BaseModel): model_config = ConfigDict(extra="allow") @@ -178,6 +188,16 @@ class _CustomProcessRule(BaseModel): rules: _EstimateRules summary_index_setting: _SummaryIndexSetting | None = None + @field_validator("summary_index_setting", mode="before") + @classmethod + def _normalize_summary_index_setting(cls, v: Any) -> Any: + """Treat dicts with enable=None (or missing enable) as None (#36602).""" + if v is None: + return None + if isinstance(v, dict) and v.get("enable") is None: + return None + return v + class _HierarchicalProcessRule(BaseModel): model_config = ConfigDict(extra="allow") @@ -186,6 +206,16 @@ class _HierarchicalProcessRule(BaseModel): rules: _EstimateRules summary_index_setting: _SummaryIndexSetting | None = None + @field_validator("summary_index_setting", mode="before") + @classmethod + def _normalize_summary_index_setting(cls, v: Any) -> Any: + """Treat dicts with enable=None (or missing enable) as None (#36602).""" + if v is None: + return None + if isinstance(v, dict) and v.get("enable") is None: + return None + return v + _EstimateProcessRule = Annotated[ _AutomaticProcessRule | _CustomProcessRule | _HierarchicalProcessRule,