39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
"""Configuration minimale du pipeline, lue depuis l'environnement.
|
|
|
|
Pas de `BaseSettings` Pydantic ici : contrairement a `apps/backend`, ce n'est pas un service qui
|
|
tourne en continu mais un script CLI lance a la main (cf. `docs/ML-START.md`), donc pas de
|
|
surface de configuration a valider au demarrage d'un processus long.
|
|
"""
|
|
|
|
import os
|
|
|
|
# Piege : ce n'est pas `DATABASE_URL` (celui du backend applicatif, proprietaire du schema).
|
|
# `docs/ML-START.md` et l'ADR 0003 designent un role PostgreSQL dedie et restreint en lecture,
|
|
# `enervision_ml`, non encore provisionne (dette assumee). Reutiliser `DATABASE_URL` par defaut
|
|
# ferait tourner l'entrainement avec les droits d'ecriture complets de l'application, en
|
|
# silence.
|
|
ML_DATABASE_URL_ENV = "ML_DATABASE_URL"
|
|
|
|
MLFLOW_EXPERIMENT_NAME = "consumption-forecast"
|
|
MLFLOW_TRACKING_URI_ENV = "MLFLOW_TRACKING_URI"
|
|
|
|
|
|
def database_url() -> str:
|
|
valeur = os.environ.get(ML_DATABASE_URL_ENV)
|
|
if not valeur:
|
|
raise RuntimeError(
|
|
f"{ML_DATABASE_URL_ENV} n'est pas defini. Elle doit pointer vers un role "
|
|
"PostgreSQL en lecture seule sur `reading`/`site` (voir docs/ML-START.md)."
|
|
)
|
|
return valeur
|
|
|
|
|
|
def mlflow_tracking_uri() -> str | None:
|
|
"""`None` laisse MLflow choisir son magasin local par defaut.
|
|
|
|
Piege : ce n'est plus `./mlruns` en clair depuis MLflow 3 (magasin fichier "maintenance
|
|
mode", refuse une URI `file:` explicite sauf `MLFLOW_ALLOW_FILE_STORE=true`), mais une base
|
|
SQLite locale (`./mlflow.db`).
|
|
"""
|
|
return os.environ.get(MLFLOW_TRACKING_URI_ENV)
|