"""Vides mainīgo helperi Maris runtime noklusējumiem.""" from __future__ import annotations import os import re MARIS_MODEL_NAMESPACE = os.getenv("MARIS_MODEL_NAMESPACE", "MarisUK/") HF_REPO_ID_PATTERN = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*/[A-Za-z0-9][A-Za-z0-9._-]*$") def get_env(name: str, default: str | None = None) -> str | None: value = os.getenv(name) if value is None: return default normalized = value.strip() if normalized: return normalized return default def require_env(name: str) -> str: value = get_env(name) if value is None: raise RuntimeError(f"Trūkst obligātais vides mainīgais: {name}") return value def get_env_or_default(name: str, default: str) -> str: return get_env(name, default) or default def get_env_any(*names: str, default: str | None = None) -> str | None: for name in names: value = get_env(name) if value is not None: return value return default def get_env_any_or_default(*names: str, default: str) -> str: return get_env_any(*names, default=default) or default def get_hf_token() -> str | None: return get_env_any( "HF_TOKEN", "HUGGING_FACE_HUB_TOKEN", "HUGGINGFACEHUB_API_TOKEN", "HUGGINGFACE_API_KEY", "MARIS_REPO_TOKEN", "MARIS_TOKEN", ) def validate_maris_repo(repo_id: str, source: str, *, label: str = "repozitorijs") -> str: normalized = validate_hf_repo_id(repo_id, source, label=label) if not normalized.startswith(MARIS_MODEL_NAMESPACE): raise RuntimeError(f"{source} jānorāda uz Maris AI {label} ({MARIS_MODEL_NAMESPACE}...).") return normalized def validate_hf_repo_id(repo_id: str, source: str, *, label: str = "repozitorijs") -> str: normalized = repo_id.strip() if not normalized: raise RuntimeError(f"Trūkst Maris AI {label} konfigurācija: {source}") if not HF_REPO_ID_PATTERN.fullmatch(normalized): raise RuntimeError(f"{source} jābūt owner/name formātā.") return normalized def validate_maris_model(model_id: str, source: str) -> str: return validate_maris_repo(model_id, source, label="modeli") def validate_hf_model(model_id: str, source: str) -> str: return validate_hf_repo_id(model_id, source, label="modeli") def get_maris_model(*names: str, default: str | None = None) -> str: source = ", ".join(names) value = get_env_any(*names) if value is None: if default is None: raise RuntimeError(f"Trūkst Maris AI modeļa konfigurācija: {source}") value = default if value is None: raise RuntimeError(f"Trūkst Maris AI modeļa konfigurācija: {source}") return validate_maris_model(value, source) def get_optional_maris_model(*names: str) -> str | None: source = ", ".join(names) value = get_env_any(*names) if value is None: return None return validate_maris_model(value, source) def get_hf_model(*names: str, default: str | None = None) -> str: source = ", ".join(names) value = get_env_any(*names) if value is None: if default is None: raise RuntimeError(f"Trūkst Hugging Face modeļa konfigurācija: {source}") value = default return validate_hf_model(value, source) def get_optional_hf_model(*names: str) -> str | None: source = ", ".join(names) value = get_env_any(*names) if value is None: return None return validate_hf_model(value, source)