2025-09-09 14:37:32 +05:30
|
|
|
from datetime import datetime
|
|
|
|
|
|
2026-03-31 21:42:03 +05:30
|
|
|
from pydantic import BaseModel, model_validator
|
2025-09-09 14:37:32 +05:30
|
|
|
|
|
|
|
|
from api.services.configuration.registry import (
|
2026-01-17 14:37:03 +05:30
|
|
|
EmbeddingsConfig,
|
2025-09-09 14:37:32 +05:30
|
|
|
LLMConfig,
|
2026-03-31 21:42:03 +05:30
|
|
|
RealtimeConfig,
|
2025-09-09 14:37:32 +05:30
|
|
|
STTConfig,
|
|
|
|
|
TTSConfig,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserConfiguration(BaseModel):
|
|
|
|
|
llm: LLMConfig | None = None
|
|
|
|
|
stt: STTConfig | None = None
|
|
|
|
|
tts: TTSConfig | None = None
|
2026-01-17 14:37:03 +05:30
|
|
|
embeddings: EmbeddingsConfig | None = None
|
2026-03-31 21:42:03 +05:30
|
|
|
realtime: RealtimeConfig | None = None
|
|
|
|
|
is_realtime: bool = False
|
2025-09-09 14:37:32 +05:30
|
|
|
test_phone_number: str | None = None
|
|
|
|
|
timezone: str | None = None
|
|
|
|
|
last_validated_at: datetime | None = None
|
2026-03-31 21:42:03 +05:30
|
|
|
|
|
|
|
|
@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
|