diff --git a/api/schemas/user_configuration.py b/api/schemas/user_configuration.py index f147b37f..2e62396a 100644 --- a/api/schemas/user_configuration.py +++ b/api/schemas/user_configuration.py @@ -1,6 +1,6 @@ from datetime import datetime -from pydantic import BaseModel +from pydantic import BaseModel, model_validator from api.services.configuration.registry import ( EmbeddingsConfig, @@ -21,3 +21,13 @@ class UserConfiguration(BaseModel): test_phone_number: str | None = None timezone: str | None = None last_validated_at: datetime | None = None + + @model_validator(mode="before") + @classmethod + def strip_incomplete_realtime_when_disabled(cls, data): + """Skip realtime validation when is_realtime is False and api_key is missing.""" + if isinstance(data, dict) and not data.get("is_realtime", False): + realtime = data.get("realtime") + if isinstance(realtime, dict) and not realtime.get("api_key"): + data.pop("realtime", None) + return data diff --git a/api/services/configuration/check_validity.py b/api/services/configuration/check_validity.py index 01cd8341..6ad0d19d 100644 --- a/api/services/configuration/check_validity.py +++ b/api/services/configuration/check_validity.py @@ -72,10 +72,13 @@ class UserConfigurationValidator: configuration.embeddings, "embeddings", required=False ) ) - # Realtime is optional - only validate if configured - status_list.extend( - self._validate_service(configuration.realtime, "realtime", required=False) - ) + # Realtime is optional - only validate if is_realtime is enabled + if configuration.is_realtime: + status_list.extend( + self._validate_service( + configuration.realtime, "realtime", required=True + ) + ) if status_list: raise ValueError(status_list)