rinogeek commited on
Commit
dbfca0d
·
1 Parent(s): 56a022b

Fixe Models loadding

Browse files
Files changed (1) hide show
  1. api/main.py +14 -1
api/main.py CHANGED
@@ -33,6 +33,7 @@ async def lifespan(app: FastAPI):
33
  logger.info("Chargement des modèles et des données...")
34
  try:
35
  # Résoudre les chemins relatifs par rapport à ce fichier
 
36
  base_dir = Path(__file__).resolve().parent
37
  profiles_path = base_dir / "profiles.csv"
38
  # Fallback : si le fichier n'existe pas au même niveau, essayer ../profiles.csv (pour endpoint add_profile)
@@ -40,12 +41,16 @@ async def lifespan(app: FastAPI):
40
  alt = base_dir.parent / "profiles.csv"
41
  if alt.exists():
42
  profiles_path = alt
 
43
 
 
44
  df_profiles = pd.read_csv(profiles_path)
45
  ml_models["profiles"] = df_profiles
 
46
 
47
  # Charger la cartographie des métiers du numérique
48
  try:
 
49
  carto_path = base_dir.parent.parent / "cartographie-metiers-numeriques.csv"
50
  # si non trouvé, essayer le repo root
51
  if not carto_path.exists():
@@ -57,27 +62,35 @@ async def lifespan(app: FastAPI):
57
  logger.warning("⚠️ Fichier cartographie-metiers-numeriques.csv non trouvé. Fonctionnalité métiers désactivée.")
58
  ml_models["metiers_digital"] = pd.DataFrame()
59
 
 
60
  model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
61
  ml_models["model"] = model
 
62
 
 
63
  profile_embeddings = model.encode(df_profiles["full_text"].tolist(), convert_to_numpy=True)
64
  d = profile_embeddings.shape[1]
 
65
 
 
66
  faiss.normalize_L2(profile_embeddings)
67
 
68
  index = faiss.IndexFlatIP(d)
69
  index.add(profile_embeddings)
70
  ml_models["faiss_index"] = index
 
71
 
72
  # Créer des embeddings séparés pour les compétences et l'expérience
 
73
  skills_embeddings = model.encode(df_profiles["hard_skills"].tolist(), convert_to_numpy=True)
74
  faiss.normalize_L2(skills_embeddings)
75
  ml_models["skills_embeddings"] = skills_embeddings
 
76
 
77
  logger.info(f"✅ Index FAISS construit avec {index.ntotal} profils.")
78
  logger.info("Application démarrée avec succès.")
79
  except Exception as e:
80
- logger.error(f"Erreur lors du chargement des modèles : {e}")
81
  # Vous pourriez vouloir arrêter l'application si les modèles ne se chargent pas
82
  # raise HTTPException(status_code=500, detail="Impossible de charger les modèles de ML.")
83
 
 
33
  logger.info("Chargement des modèles et des données...")
34
  try:
35
  # Résoudre les chemins relatifs par rapport à ce fichier
36
+ logger.info("Étape 1 : Résolution des chemins de fichiers...")
37
  base_dir = Path(__file__).resolve().parent
38
  profiles_path = base_dir / "profiles.csv"
39
  # Fallback : si le fichier n'existe pas au même niveau, essayer ../profiles.csv (pour endpoint add_profile)
 
41
  alt = base_dir.parent / "profiles.csv"
42
  if alt.exists():
43
  profiles_path = alt
44
+ logger.info(f"Chemin des profils : {profiles_path}")
45
 
46
+ logger.info("Étape 2 : Chargement du DataFrame des profils...")
47
  df_profiles = pd.read_csv(profiles_path)
48
  ml_models["profiles"] = df_profiles
49
+ logger.info(f"{len(df_profiles)} profils chargés.")
50
 
51
  # Charger la cartographie des métiers du numérique
52
  try:
53
+ logger.info("Étape 3 : Chargement de la cartographie des métiers...")
54
  carto_path = base_dir.parent.parent / "cartographie-metiers-numeriques.csv"
55
  # si non trouvé, essayer le repo root
56
  if not carto_path.exists():
 
62
  logger.warning("⚠️ Fichier cartographie-metiers-numeriques.csv non trouvé. Fonctionnalité métiers désactivée.")
63
  ml_models["metiers_digital"] = pd.DataFrame()
64
 
65
+ logger.info("Étape 4 : Chargement du modèle SentenceTransformer...")
66
  model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
67
  ml_models["model"] = model
68
+ logger.info("Modèle SentenceTransformer chargé.")
69
 
70
+ logger.info("Étape 5 : Encodage des profils (full_text)...")
71
  profile_embeddings = model.encode(df_profiles["full_text"].tolist(), convert_to_numpy=True)
72
  d = profile_embeddings.shape[1]
73
+ logger.info("Encodage des profils terminé.")
74
 
75
+ logger.info("Étape 6 : Normalisation et création de l'index FAISS...")
76
  faiss.normalize_L2(profile_embeddings)
77
 
78
  index = faiss.IndexFlatIP(d)
79
  index.add(profile_embeddings)
80
  ml_models["faiss_index"] = index
81
+ logger.info("Index FAISS créé.")
82
 
83
  # Créer des embeddings séparés pour les compétences et l'expérience
84
+ logger.info("Étape 7 : Encodage des compétences (hard_skills)...")
85
  skills_embeddings = model.encode(df_profiles["hard_skills"].tolist(), convert_to_numpy=True)
86
  faiss.normalize_L2(skills_embeddings)
87
  ml_models["skills_embeddings"] = skills_embeddings
88
+ logger.info("Encodage des compétences terminé.")
89
 
90
  logger.info(f"✅ Index FAISS construit avec {index.ntotal} profils.")
91
  logger.info("Application démarrée avec succès.")
92
  except Exception as e:
93
+ logger.error(f"Erreur lors du chargement des modèles : {e}", exc_info=True)
94
  # Vous pourriez vouloir arrêter l'application si les modèles ne se chargent pas
95
  # raise HTTPException(status_code=500, detail="Impossible de charger les modèles de ML.")
96