SurfSense/surfsense_backend/app/podcasts/generation/brief/detection.py

28 lines
844 B
Python

"""The language-detection reply shape, normalised to a safe tag or ``None``."""
from __future__ import annotations
from pydantic import BaseModel, field_validator
from app.podcasts.schemas import normalize_language_tag
class DetectedLanguage(BaseModel):
"""What the detector returns: a usable BCP-47 tag, or ``None`` when unsure.
A malformed or non-language reply is coerced to ``None`` so a bad detection
quietly defers to the rest of the resolution chain rather than poisoning the
spec with an invalid tag.
"""
language: str | None = None
@field_validator("language")
@classmethod
def _normalise(cls, value: str | None) -> str | None:
if value is None:
return None
try:
return normalize_language_tag(value)
except ValueError:
return None