File size: 2,825 Bytes
bd09498
 
 
193eb98
 
bd09498
 
 
 
 
 
 
193eb98
 
bd09498
1fa7ddd
 
 
 
 
bd09498
193eb98
bd09498
 
 
 
 
 
193eb98
 
 
 
bd09498
 
 
 
965e8e0
bd09498
1fa7ddd
 
 
 
 
bd09498
e0fd571
bd09498
9097545
 
 
bd09498
2d76892
 
 
bd09498
 
2d76892
bd09498
 
193eb98
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
"""
Configuration globale de la plateforme, chargΓ©e depuis les variables d'environnement.

Utilise pydantic-settings (CLAUDE.md Β§2, Β§7) :
  - les valeurs sont lues depuis os.environ / fichier .env au moment de l'instanciation
  - l'objet `settings` est importΓ© partout dans l'application
  - dans les tests : monkeypatch.setattr(config, "settings", ...) pour surcharger
"""
# 1. stdlib
from pathlib import Path

# 2. third-party
from pydantic import ConfigDict
from pydantic_settings import BaseSettings

# Racine du dΓ©pΓ΄t β€” rΓ©solue depuis l'emplacement absolu de ce fichier.
# config.py se trouve dans backend/app/ ; 3 parents remontent Γ  la racine.
# .resolve() garantit un chemin absolu mΓͺme si __file__ est relatif au CWD.
_REPO_ROOT = Path(__file__).resolve().parent.parent.parent


class Settings(BaseSettings):
    """Paramètres d'application lus depuis les variables d'environnement.

    Toutes les clΓ©s API sont optionnelles (None si non configurΓ©es).
    Elles ne sont jamais loguΓ©es ni exportΓ©es (R06).
    """

    model_config = ConfigDict(
        env_file=".env",
        extra="ignore",
    )

    # ── Serveur ──────────────────────────────────────────────────────────────
    base_url: str = "http://localhost:8000"
    data_dir: Path = Path("data")
    cors_origins: list[str] = ["*"]

    # ── Chemins des ressources statiques ─────────────────────────────────────
    # CalculΓ©s depuis la racine du dΓ©pΓ΄t ; surchargeables via variables d'env.
    profiles_dir: Path = _REPO_ROOT / "profiles"
    prompts_dir: Path = _REPO_ROOT / "prompts"

    # ── Base de donnΓ©es ───────────────────────────────────────────────────────
    database_url: str = "sqlite+aiosqlite:///./iiif_studio.db"

    # ── Pipeline IA ────────────────────────────────────────────────────────────
    ai_max_concurrent: int = 3  # jobs IA simultanΓ©s par corpus run

    # ── Fournisseurs IA (R06 β€” clΓ©s depuis l'environnement uniquement) ────────
    # Chaque clΓ© est optionnelle. Le backend dΓ©tecte automatiquement quels
    # providers sont disponibles selon les clΓ©s prΓ©sentes. Pas de AI_PROVIDER
    # global : le provider est choisi par corpus depuis l'interface.
    google_ai_studio_api_key: str | None = None
    vertex_service_account_json: str | None = None
    mistral_api_key: str | None = None


settings: Settings = Settings()