File size: 1,526 Bytes
93cdb63
 
 
 
 
 
a1909f8
93cdb63
 
 
a1909f8
93cdb63
ab13e5c
93cdb63
 
c72538b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91fadd5
a1909f8
 
cdc317a
 
e7db87b
 
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
import os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

MODEL_DIR = os.path.join(BASE_DIR, "saved_models")
META_DIR = os.path.join(BASE_DIR, "saved_models_meta")
FIGURE_DIR = os.path.join(BASE_DIR, "saved_figures")

os.makedirs(MODEL_DIR, exist_ok=True)
os.makedirs(META_DIR, exist_ok=True)
os.makedirs(FIGURE_DIR, exist_ok=True)

HF_DATASET_REPO = os.environ.get("HF_DATASET_REPO", "CircleStar/charcoal-microscopy")
HF_TOKEN = os.environ.get("HF_TOKEN")


def _sanitize_session_id(session_id: str) -> str:
    """Un session_hash Gradio est déjà un identifiant sûr, mais on filtre par
    prudence pour ne jamais laisser un caractère de traversée de chemin
    (../) atteindre os.path.join."""
    safe = "".join(c for c in (session_id or "") if c.isalnum() or c in "-_")
    return safe or "default"


def session_model_dir(session_id: str) -> str:
    """Répertoire des poids/pipelines pour UNE session de navigateur — isole
    les modèles entraînés par un·e étudiant·e de ceux des autres, qui
    partagent pourtant le même Space Gradio."""
    d = os.path.join(MODEL_DIR, _sanitize_session_id(session_id))
    os.makedirs(d, exist_ok=True)
    return d


def session_meta_dir(session_id: str) -> str:
    d = os.path.join(META_DIR, _sanitize_session_id(session_id))
    os.makedirs(d, exist_ok=True)
    return d

IMAGE_SIZE = 224
RANDOM_SEED = 42

DATASET_DISPLAY_NAME = "Images microscopiques de charbons de bois"

CLASSICAL_MODEL_TYPES = frozenset({"svm", "logreg", "knn", "rf"})
CV_FOLDS = 3