Spaces:
Sleeping
Sleeping
File size: 2,479 Bytes
4ccde7a 94961c3 4ccde7a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | from typing import List, Tuple, Type
from functools import lru_cache
from pydantic import Field
from pydantic_settings import (
BaseSettings,
PydanticBaseSettingsSource,
SettingsConfigDict,
YamlConfigSettingsSource,
)
class Settings(BaseSettings):
"""Centralized settings.
Priority (highest β lowest):
1. Environment variables
2. .env file β secrets only (MISTRAL_API_KEY)
3. development.yml β non-secret config (model, server, CORS)
"""
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
case_sensitive=True,
extra="ignore",
)
@classmethod
def settings_customise_sources(
cls,
settings_cls: Type[PydanticBaseSettingsSource],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> Tuple[PydanticBaseSettingsSource, ...]:
return (
init_settings,
env_settings,
dotenv_settings,
YamlConfigSettingsSource(settings_cls, yaml_file="development.yml"),
file_secret_settings,
)
# ββ Mistral (secret in .env, rest in development.yml) βββββββββββββββββββββ
MISTRAL_API_KEY: str
MISTRAL_OCR_MODEL: str = "mistral-ocr-latest"
MISTRAL_TABLE_FORMAT: str = "markdown"
# ββ Server (development.yml) βββββββββββββββββββββββββββββββββββββββββββββββ
APP_NAME: str = "Markdown & Layout Extractor"
HOST: str = "127.0.0.1"
PORT: int = 7860 # HF Spaces requires 7860; development.yml / env var can override
LOG_LEVEL: str = "INFO"
# ββ CORS (development.yml) βββββββββββββββββββββββββββββββββββββββββββββββββ
CORS_ALLOW_ORIGINS: List[str] = Field(default_factory=lambda: ["*"])
CORS_ALLOW_METHODS: List[str] = Field(default_factory=lambda: ["*"])
CORS_ALLOW_HEADERS: List[str] = Field(default_factory=lambda: ["*"])
@lru_cache
def get_settings() -> Settings:
"""Cached settings instance β call this everywhere instead of instantiating."""
return Settings()
settings = get_settings()
|