ASI-Engineer commited on
Commit
7cc1222
ยท
verified ยท
1 Parent(s): 6ca43a7

Upload folder using huggingface_hub

Browse files
exemples/demo_batch.py CHANGED
@@ -1,160 +1,154 @@
1
  #!/usr/bin/env python3
2
  """
3
- ๐Ÿ“ฆ Prรฉdiction BATCH - Le plus simple possible
4
 
5
  Usage: python demo_batch.py
 
6
  """
7
 
8
  import os
9
- import pandas as pd
10
- import requests
11
  from datetime import datetime
12
 
 
 
 
 
 
 
 
 
13
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
14
  # CONFIGURATION
15
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
16
-
17
- # Pour utiliser l'API Hugging Face Spaces, changez l'URL ci-dessous
18
- # API_URL = "https://asi-engineer-oc-p5.hf.space"
19
- API_URL = "http://127.0.0.1:7860" # API locale par dรฉfaut
20
- API_KEY = None # Pas besoin d'API key en mode DEBUG local
 
 
 
 
21
 
22
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
23
- print("โ•‘ ๐Ÿ“ฆ PRร‰DICTION BATCH - Traitement CSV โ•‘")
24
- print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•\n")
 
25
 
26
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
27
- # COLLECTE DES FICHIERS
28
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
29
-
30
- # Obtenir le dossier du script
31
- script_dir = os.path.dirname(os.path.abspath(__file__))
32
-
33
- # Chemins par dรฉfaut vers les fichiers d'exemple
34
- default_sondage = os.path.join(script_dir, "02_predict_batch_sondage.csv")
35
- default_eval = os.path.join(script_dir, "02_predict_batch_eval.csv")
36
- default_sirh = os.path.join(script_dir, "02_predict_batch_sirh.csv")
37
-
38
- print("๐Ÿ“‹ Voulez-vous utiliser les fichiers d'exemple du dossier ?")
39
- print(f" - {os.path.basename(default_sondage)}")
40
- print(f" - {os.path.basename(default_eval)}")
41
- print(f" - {os.path.basename(default_sirh)}")
42
- use_defaults = input("\nUtiliser ces fichiers ? (O/n): ").strip().lower()
43
-
44
- if use_defaults in ["", "o", "oui", "y", "yes"]:
45
- sondage_path = default_sondage
46
- eval_path = default_eval
47
- sirh_path = default_sirh
48
- print("\nโœ… Utilisation des fichiers d'exemple")
49
  else:
50
- print("\nVeuillez fournir les 3 fichiers CSV:\n")
51
- sondage_path = input("๐Ÿ“‹ Chemin du fichier SONDAGE (.csv): ").strip()
52
- eval_path = input("๐Ÿ“Š Chemin du fichier ร‰VALUATION (.csv): ").strip()
53
- sirh_path = input("๐Ÿ’ผ Chemin du fichier SIRH (.csv): ").strip()
54
-
55
- # Vรฉrifier que les fichiers existent
56
- for path in [sondage_path, eval_path, sirh_path]:
 
 
 
 
57
  if not os.path.exists(path):
58
- print(f"\nโŒ ERREUR: Fichier introuvable: {path}")
59
- exit(1)
60
-
61
- print("\nโœ… Fichiers chargรฉs:")
62
- print(f" - Sondage: {os.path.basename(sondage_path)}")
63
- print(f" - ร‰valuation: {os.path.basename(eval_path)}")
64
- print(f" - SIRH: {os.path.basename(sirh_path)}")
65
 
66
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
67
- # ENVOI ร€ L'API
68
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
69
-
70
- print("\nโณ Envoi des fichiers ร  l'API...")
71
-
72
- files = {
73
- "sondage_file": open(sondage_path, "rb"),
74
- "eval_file": open(eval_path, "rb"),
75
- "sirh_file": open(sirh_path, "rb"),
76
- }
77
-
78
- headers = {}
79
- if API_KEY:
80
- headers["X-API-Key"] = API_KEY
81
 
82
  try:
83
- response = requests.post(
84
- f"{API_URL}/predict/batch", files=files, headers=headers, timeout=120
 
 
 
 
 
 
 
 
85
  )
86
- response.raise_for_status()
87
- result = response.json()
88
-
89
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
90
- # CRร‰ATION DU CSV DE SORTIE
91
- # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
92
-
93
- print("\nโœ… Prรฉdictions reรงues!")
94
- print(f" Total employรฉs traitรฉs: {result['total_employees']}")
95
-
96
- # Crรฉer un DataFrame avec les rรฉsultats
97
- predictions_data = []
98
- for pred in result["predictions"]:
99
- predictions_data.append(
100
- {
101
- "employee_id": pred["employee_id"],
102
- "prediction": "VA PARTIR" if pred["prediction"] == 1 else "VA RESTER",
103
- "prediction_code": pred["prediction"],
104
- "risk_level": pred["risk_level"],
105
- "probability_stay": f"{pred['probability_stay']:.2%}",
106
- "probability_leave": f"{pred['probability_leave']:.2%}",
107
- }
108
- )
109
-
110
- df_results = pd.DataFrame(predictions_data)
111
-
112
- # Gรฉnรฉrer le nom du fichier de sortie
113
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
114
- output_filename = f"predictions_batch_{timestamp}.csv"
115
-
116
- # Sauvegarder dans le mรชme dossier que ce script
117
- script_dir = os.path.dirname(os.path.abspath(__file__))
118
- output_path = os.path.join(script_dir, output_filename)
119
-
120
- # Sauvegarder dans le mรชme dossier que ce script
121
- script_dir = os.path.dirname(os.path.abspath(__file__))
122
- output_path = os.path.join(script_dir, output_filename)
123
-
124
- df_results.to_csv(output_path, index=False, encoding="utf-8-sig")
125
 
126
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
127
- # AFFICHAGE DU Rร‰SUMร‰
128
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
129
-
130
- print("\n" + "โ•" * 60)
131
- print(" ๐Ÿ“Š Rร‰SUMร‰")
132
- print("โ•" * 60)
133
-
134
- summary = result["summary"]
135
- print(f"\nโœ… Employรฉs qui vont RESTER: {summary['total_stay']}")
136
- print(f"๐Ÿƒ Employรฉs qui vont PARTIR: {summary['total_leave']}")
137
- print(f"\n๐Ÿ”ด Risque ร‰LEVร‰: {summary['high_risk_count']}")
138
- print(f"๐ŸŸก Risque MOYEN: {summary['medium_risk_count']}")
139
- print(f"๐ŸŸข Risque FAIBLE: {summary['low_risk_count']}")
140
-
141
  print("\n" + "โ•" * 60)
142
- print("๐Ÿ’พ Rรฉsultats sauvegardรฉs dans:")
143
- print(f" {output_path}")
144
  print("โ•" * 60)
145
 
146
- # Afficher un รฉchantillon
147
- print("\n๐Ÿ“‹ Aperรงu des 5 premiers rรฉsultats:")
148
- print(df_results.head(5).to_string(index=False))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
 
150
- except requests.exceptions.RequestException as e:
151
- print(f"\nโŒ ERREUR API: {e}")
152
- if hasattr(e, "response") and e.response is not None:
153
- print(f"Dรฉtails: {e.response.text}")
154
  except Exception as e:
155
- print(f"\nโŒ ERREUR: {e}")
156
- finally:
157
- # Fermer les fichiers
158
- for f in files.values():
159
- if not f.closed:
160
- f.close()
 
1
  #!/usr/bin/env python3
2
  """
3
+ ๐Ÿ“ฆ Prรฉdiction BATCH - API Locale
4
 
5
  Usage: python demo_batch.py
6
+ Prรฉrequis: API locale dรฉmarrรฉe sur http://127.0.0.1:7860
7
  """
8
 
9
  import os
10
+ import sys
 
11
  from datetime import datetime
12
 
13
+ try:
14
+ import pandas as pd
15
+ from gradio_client import Client, handle_file
16
+ except ImportError:
17
+ print("โŒ Dรฉpendances manquantes. Installez avec:")
18
+ print(" pip install gradio_client pandas")
19
+ sys.exit(1)
20
+
21
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
  # CONFIGURATION
23
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
24
+ API_URL = os.getenv("LOCAL_API_URL", "http://127.0.0.1:7860")
25
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
26
+
27
+ # Fichiers par dรฉfaut
28
+ DEFAULT_FILES = {
29
+ "eval": os.path.join(SCRIPT_DIR, "02_predict_batch_eval.csv"),
30
+ "sirh": os.path.join(SCRIPT_DIR, "02_predict_batch_sirh.csv"),
31
+ "sondage": os.path.join(SCRIPT_DIR, "02_predict_batch_sondage.csv"),
32
+ }
33
 
34
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
35
+ print("โ•‘ ๐Ÿ“ฆ PRร‰DICTION BATCH - API Locale โ•‘")
36
+ print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•")
37
+ print(f"\n๐ŸŒ API: {API_URL}\n")
38
 
39
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
40
+ # Sร‰LECTION DES FICHIERS
41
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
42
+ print("โ•" * 60)
43
+ print("๐Ÿ“ Sร‰LECTION DES FICHIERS CSV")
44
+ print("โ•" * 60)
45
+
46
+ use_default = (
47
+ input("\nUtiliser les fichiers exemples par dรฉfaut? [O/n]: ").strip().lower()
48
+ )
49
+
50
+ if use_default in ("", "o", "oui", "y", "yes"):
51
+ fichier_eval = DEFAULT_FILES["eval"]
52
+ fichier_sirh = DEFAULT_FILES["sirh"]
53
+ fichier_sondage = DEFAULT_FILES["sondage"]
54
+ print(f"\n๐Ÿ“„ ร‰valuation: {os.path.basename(fichier_eval)}")
55
+ print(f"๐Ÿ“„ SIRH: {os.path.basename(fichier_sirh)}")
56
+ print(f"๐Ÿ“„ Sondage: {os.path.basename(fichier_sondage)}")
 
 
 
 
 
57
  else:
58
+ print("\nEntrez les chemins des fichiers CSV:")
59
+ fichier_eval = input("๐Ÿ“„ Fichier รฉvaluation: ").strip()
60
+ fichier_sirh = input("๐Ÿ“„ Fichier SIRH: ").strip()
61
+ fichier_sondage = input("๐Ÿ“„ Fichier sondage: ").strip()
62
+
63
+ # Vรฉrification des fichiers
64
+ for name, path in [
65
+ ("ร‰valuation", fichier_eval),
66
+ ("SIRH", fichier_sirh),
67
+ ("Sondage", fichier_sondage),
68
+ ]:
69
  if not os.path.exists(path):
70
+ print(f"\nโŒ Fichier {name} introuvable: {path}")
71
+ sys.exit(1)
 
 
 
 
 
72
 
73
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
74
+ # PRร‰DICTION BATCH
75
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
76
+ print("\n" + "โ•" * 60)
77
+ print("โณ TRAITEMENT EN COURS...")
78
+ print("โ•" * 60)
 
 
 
 
 
 
 
 
 
79
 
80
  try:
81
+ print("\nโณ Connexion ร  l'API...")
82
+ client = Client(API_URL)
83
+ print("โœ… Connectรฉ")
84
+
85
+ print("โณ Envoi des fichiers...")
86
+ result = client.predict(
87
+ fichier_eval=handle_file(fichier_eval),
88
+ fichier_sirh=handle_file(fichier_sirh),
89
+ fichier_sondage=handle_file(fichier_sondage),
90
+ api_name="/predict_batch",
91
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
94
+ # AFFICHAGE DU Rร‰SULTAT
95
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
 
 
 
 
 
 
 
 
 
 
 
 
96
  print("\n" + "โ•" * 60)
97
+ print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION BATCH")
 
98
  print("โ•" * 60)
99
 
100
+ if isinstance(result, dict):
101
+ # Lecture du fichier rรฉsultat
102
+ result_path = result.get("value") or result.get("path")
103
+ if result_path and os.path.exists(result_path):
104
+ df = pd.read_csv(result_path)
105
+ total = len(df)
106
+
107
+ # Statistiques
108
+ if "prediction" in df.columns:
109
+ restent = (df["prediction"] == "Reste").sum()
110
+ partent = (df["prediction"] == "Part").sum()
111
+ else:
112
+ restent = partent = 0
113
+
114
+ if "risk_level" in df.columns:
115
+ risque_eleve = (df["risk_level"] == "ร‰levรฉ").sum()
116
+ risque_moyen = (df["risk_level"] == "Moyen").sum()
117
+ risque_faible = (df["risk_level"] == "Faible").sum()
118
+ else:
119
+ risque_eleve = risque_moyen = risque_faible = 0
120
+
121
+ # Affichage des stats
122
+ print(f"\n๐Ÿ‘ฅ Total employรฉs analysรฉs: {total}")
123
+ print(f"\n๐Ÿ“ˆ Vont RESTER: {restent} ({100 * restent / total:.1f}%)")
124
+ print(f"๐Ÿ“‰ Vont PARTIR: {partent} ({100 * partent / total:.1f}%)")
125
+
126
+ print(f"\n๐ŸŸข Risque faible: {risque_faible}")
127
+ print(f"๐ŸŸ  Risque moyen: {risque_moyen}")
128
+ print(f"๐Ÿ”ด Risque รฉlevรฉ: {risque_eleve}")
129
+
130
+ # Sauvegarde
131
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
132
+ output_file = os.path.join(SCRIPT_DIR, f"predictions_batch_{timestamp}.csv")
133
+ df.to_csv(output_file, index=False)
134
+
135
+ print("\n" + "โ”€" * 60)
136
+ print(f"๐Ÿ’พ Fichier sauvegardรฉ: {os.path.basename(output_file)}")
137
+ print("โ”€" * 60)
138
+
139
+ # Aperรงu
140
+ print("\n๐Ÿ“‹ Aperรงu des rรฉsultats:")
141
+ cols = ["employee_id", "prediction", "prob_depart", "risk_level"]
142
+ cols_exist = [c for c in cols if c in df.columns]
143
+ if cols_exist:
144
+ print(df[cols_exist].head(10).to_string(index=False))
145
+ else:
146
+ print(f"\nโš ๏ธ Fichier rรฉsultat non trouvรฉ: {result_path}")
147
+ else:
148
+ print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
149
+
150
+ print("\nโœ… Prรฉdiction batch terminรฉe avec succรจs!")
151
 
 
 
 
 
152
  except Exception as e:
153
+ print(f"\nโŒ Erreur: {e}")
154
+ sys.exit(1)
 
 
 
 
exemples/demo_batch_hf.py CHANGED
@@ -1,109 +1,154 @@
1
  #!/usr/bin/env python3
2
  """
3
- ๐Ÿ“ฆ Prรฉdiction BATCH via API Hugging Face (Gradio Client)
4
 
5
  Usage: python demo_batch_hf.py
6
- - Utilise par dรฉfaut les CSV d'exemple du dossier
7
- - Envoie les 3 fichiers ร  la Space HF via Gradio Client
8
- - Sauvegarde un CSV de rรฉsultats
9
-
10
- Prรฉrequis: pip install gradio_client
11
  """
12
 
13
  import os
14
  import sys
15
- import pandas as pd
16
  from datetime import datetime
17
 
18
  try:
 
19
  from gradio_client import Client, handle_file
20
  except ImportError:
21
- print("โŒ gradio_client non installรฉ. Installez-le avec:")
22
- print(" pip install gradio_client")
23
  sys.exit(1)
24
 
 
 
 
25
  API_URL = os.getenv("HF_API_URL", "https://asi-engineer-oc-p5.hf.space")
 
 
 
 
 
 
 
 
26
 
27
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
28
- print("โ•‘ ๐Ÿ“ฆ Prรฉdiction BATCH - API Hugging Face (Gradio) โ•‘")
29
- print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•\n")
30
- print(f"๐ŸŒ API: {API_URL}\n")
31
-
32
- # Dossier du script
33
- script_dir = os.path.dirname(os.path.abspath(__file__))
34
- sondage_path = os.path.join(script_dir, "02_predict_batch_sondage.csv")
35
- eval_path = os.path.join(script_dir, "02_predict_batch_eval.csv")
36
- sirh_path = os.path.join(script_dir, "02_predict_batch_sirh.csv")
37
-
38
- # Vรฉrifier existence
39
- for path in [sondage_path, eval_path, sirh_path]:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  if not os.path.exists(path):
41
- print(f"โŒ Fichier introuvable: {path}")
42
  sys.exit(1)
43
 
44
- print("โœ… Fichiers d'exemple dรฉtectรฉs:")
45
- print(f" - {os.path.basename(sondage_path)}")
46
- print(f" - {os.path.basename(eval_path)}")
47
- print(f" - {os.path.basename(sirh_path)}\n")
 
 
48
 
49
- print("โณ Connexion ร  l'API Gradio...")
50
  try:
 
51
  client = Client(API_URL)
52
- print("โœ… Connectรฉ ร  l'API Gradio\n")
53
- except Exception as e:
54
- print(f"โŒ Impossible de se connecter: {e}")
55
- sys.exit(1)
56
 
57
- print("โณ Envoi des fichiers pour prรฉdiction batch...")
58
- try:
59
  result = client.predict(
60
- sondage_path=handle_file(sondage_path),
61
- eval_path=handle_file(eval_path),
62
- sirh_path=handle_file(sirh_path),
63
  api_name="/predict_batch",
64
  )
65
- except Exception as e:
66
- print(f"โŒ Erreur lors de la prรฉdiction: {e}")
67
- sys.exit(1)
68
-
69
- # Vรฉrifier si erreur dans le rรฉsultat
70
- if isinstance(result, dict) and "error" in result:
71
- print(f"\nโŒ Erreur API: {result.get('error')}")
72
- print(f" Message: {result.get('message')}")
73
- sys.exit(1)
74
 
75
- # Construire le CSV de sortie
76
- predictions_data = []
77
- for pred in result.get("predictions", []):
78
- predictions_data.append(
79
- {
80
- "employee_id": pred.get("employee_id"),
81
- "prediction": "VA PARTIR" if pred.get("prediction") == 1 else "VA RESTER",
82
- "prediction_code": pred.get("prediction"),
83
- "risk_level": pred.get("risk_level"),
84
- "probability_stay": f"{pred.get('probability_stay', 0):.2%}",
85
- "probability_leave": f"{pred.get('probability_leave', 0):.2%}",
86
- }
87
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
- df = pd.DataFrame(predictions_data)
90
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
91
- output_path = os.path.join(script_dir, f"predictions_batch_hf_{timestamp}.csv")
92
- df.to_csv(output_path, index=False, encoding="utf-8-sig")
93
-
94
- # Affichage rรฉsumรฉ
95
- summary = result.get("summary", {})
96
- total = result.get("total_employees", len(predictions_data))
97
-
98
- print("\n" + "=" * 50)
99
- print("๐Ÿ“Š Rร‰SULTATS DE LA PRร‰DICTION BATCH")
100
- print("=" * 50)
101
- print(f"\n๐Ÿ‘ฅ Total employรฉs analysรฉs: {total}")
102
- print(f"โœ… Vont rester: {summary.get('total_stay', 'N/A')}")
103
- print(f"โŒ Vont partir: {summary.get('total_leave', 'N/A')}")
104
- print(f"\n๐Ÿ”ด Risque รฉlevรฉ: {summary.get('high_risk_count', 'N/A')}")
105
- print(f"๐ŸŸ  Risque moyen: {summary.get('medium_risk_count', 'N/A')}")
106
- print(f"๐ŸŸข Risque faible: {summary.get('low_risk_count', 'N/A')}")
107
-
108
- print(f"\n๐Ÿ’พ Rรฉsultats sauvegardรฉs: {os.path.basename(output_path)}")
109
- print("\nโœ… Prรฉdiction batch terminรฉe avec succรจs!")
 
1
  #!/usr/bin/env python3
2
  """
3
+ ๐Ÿ“ฆ Prรฉdiction BATCH - API Hugging Face (Gradio)
4
 
5
  Usage: python demo_batch_hf.py
6
+ Prรฉrequis: pip install gradio_client pandas
 
 
 
 
7
  """
8
 
9
  import os
10
  import sys
 
11
  from datetime import datetime
12
 
13
  try:
14
+ import pandas as pd
15
  from gradio_client import Client, handle_file
16
  except ImportError:
17
+ print("โŒ Dรฉpendances manquantes. Installez avec:")
18
+ print(" pip install gradio_client pandas")
19
  sys.exit(1)
20
 
21
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
+ # CONFIGURATION
23
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
24
  API_URL = os.getenv("HF_API_URL", "https://asi-engineer-oc-p5.hf.space")
25
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
26
+
27
+ # Fichiers par dรฉfaut
28
+ DEFAULT_FILES = {
29
+ "eval": os.path.join(SCRIPT_DIR, "02_predict_batch_eval.csv"),
30
+ "sirh": os.path.join(SCRIPT_DIR, "02_predict_batch_sirh.csv"),
31
+ "sondage": os.path.join(SCRIPT_DIR, "02_predict_batch_sondage.csv"),
32
+ }
33
 
34
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
35
+ print("โ•‘ ๐Ÿ“ฆ PRร‰DICTION BATCH - API Hugging Face โ•‘")
36
+ print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•")
37
+ print(f"\n๐ŸŒ API: {API_URL}\n")
38
+
39
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
40
+ # Sร‰LECTION DES FICHIERS
41
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
42
+ print("โ•" * 60)
43
+ print("๐Ÿ“ Sร‰LECTION DES FICHIERS CSV")
44
+ print("โ•" * 60)
45
+
46
+ use_default = (
47
+ input("\nUtiliser les fichiers exemples par dรฉfaut? [O/n]: ").strip().lower()
48
+ )
49
+
50
+ if use_default in ("", "o", "oui", "y", "yes"):
51
+ fichier_eval = DEFAULT_FILES["eval"]
52
+ fichier_sirh = DEFAULT_FILES["sirh"]
53
+ fichier_sondage = DEFAULT_FILES["sondage"]
54
+ print(f"\n๐Ÿ“„ ร‰valuation: {os.path.basename(fichier_eval)}")
55
+ print(f"๐Ÿ“„ SIRH: {os.path.basename(fichier_sirh)}")
56
+ print(f"๐Ÿ“„ Sondage: {os.path.basename(fichier_sondage)}")
57
+ else:
58
+ print("\nEntrez les chemins des fichiers CSV:")
59
+ fichier_eval = input("๐Ÿ“„ Fichier รฉvaluation: ").strip()
60
+ fichier_sirh = input("๐Ÿ“„ Fichier SIRH: ").strip()
61
+ fichier_sondage = input("๐Ÿ“„ Fichier sondage: ").strip()
62
+
63
+ # Vรฉrification des fichiers
64
+ for name, path in [
65
+ ("ร‰valuation", fichier_eval),
66
+ ("SIRH", fichier_sirh),
67
+ ("Sondage", fichier_sondage),
68
+ ]:
69
  if not os.path.exists(path):
70
+ print(f"\nโŒ Fichier {name} introuvable: {path}")
71
  sys.exit(1)
72
 
73
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
74
+ # PRร‰DICTION BATCH
75
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
76
+ print("\n" + "โ•" * 60)
77
+ print("โณ TRAITEMENT EN COURS...")
78
+ print("โ•" * 60)
79
 
 
80
  try:
81
+ print("\nโณ Connexion ร  l'API...")
82
  client = Client(API_URL)
83
+ print("โœ… Connectรฉ")
 
 
 
84
 
85
+ print("โณ Envoi des fichiers...")
 
86
  result = client.predict(
87
+ fichier_eval=handle_file(fichier_eval),
88
+ fichier_sirh=handle_file(fichier_sirh),
89
+ fichier_sondage=handle_file(fichier_sondage),
90
  api_name="/predict_batch",
91
  )
 
 
 
 
 
 
 
 
 
92
 
93
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
94
+ # AFFICHAGE DU Rร‰SULTAT
95
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
96
+ print("\n" + "โ•" * 60)
97
+ print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION BATCH")
98
+ print("โ•" * 60)
99
+
100
+ if isinstance(result, dict):
101
+ # Lecture du fichier rรฉsultat
102
+ result_path = result.get("value") or result.get("path")
103
+ if result_path and os.path.exists(result_path):
104
+ df = pd.read_csv(result_path)
105
+ total = len(df)
106
+
107
+ # Statistiques
108
+ if "prediction" in df.columns:
109
+ restent = (df["prediction"] == "Reste").sum()
110
+ partent = (df["prediction"] == "Part").sum()
111
+ else:
112
+ restent = partent = 0
113
+
114
+ if "risk_level" in df.columns:
115
+ risque_eleve = (df["risk_level"] == "ร‰levรฉ").sum()
116
+ risque_moyen = (df["risk_level"] == "Moyen").sum()
117
+ risque_faible = (df["risk_level"] == "Faible").sum()
118
+ else:
119
+ risque_eleve = risque_moyen = risque_faible = 0
120
+
121
+ # Affichage des stats
122
+ print(f"\n๐Ÿ‘ฅ Total employรฉs analysรฉs: {total}")
123
+ print(f"\n๐Ÿ“ˆ Vont RESTER: {restent} ({100 * restent / total:.1f}%)")
124
+ print(f"๐Ÿ“‰ Vont PARTIR: {partent} ({100 * partent / total:.1f}%)")
125
+
126
+ print(f"\n๐ŸŸข Risque faible: {risque_faible}")
127
+ print(f"๐ŸŸ  Risque moyen: {risque_moyen}")
128
+ print(f"๐Ÿ”ด Risque รฉlevรฉ: {risque_eleve}")
129
+
130
+ # Sauvegarde
131
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
132
+ output_file = os.path.join(SCRIPT_DIR, f"predictions_batch_{timestamp}.csv")
133
+ df.to_csv(output_file, index=False)
134
+
135
+ print("\n" + "โ”€" * 60)
136
+ print(f"๐Ÿ’พ Fichier sauvegardรฉ: {os.path.basename(output_file)}")
137
+ print("โ”€" * 60)
138
+
139
+ # Aperรงu
140
+ print("\n๐Ÿ“‹ Aperรงu des rรฉsultats:")
141
+ cols = ["employee_id", "prediction", "prob_depart", "risk_level"]
142
+ cols_exist = [c for c in cols if c in df.columns]
143
+ if cols_exist:
144
+ print(df[cols_exist].head(10).to_string(index=False))
145
+ else:
146
+ print(f"\nโš ๏ธ Fichier rรฉsultat non trouvรฉ: {result_path}")
147
+ else:
148
+ print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
149
+
150
+ print("\nโœ… Prรฉdiction batch terminรฉe avec succรจs!")
151
 
152
+ except Exception as e:
153
+ print(f"\nโŒ Erreur: {e}")
154
+ sys.exit(1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
exemples/demo_unitaire.py CHANGED
@@ -1,9 +1,9 @@
1
  #!/usr/bin/env python3
2
  """
3
- ๐Ÿ”ฎ Prรฉdiction UNITAIRE - Interface simple avec entrรฉes numรฉriques uniquement
4
 
5
  Usage: python demo_unitaire.py
6
- Note: Utilise l'API Gradio locale qui retourne du Markdown
7
  """
8
 
9
  import re
@@ -19,10 +19,10 @@ except ImportError:
19
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
20
  # CONFIGURATION
21
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
- API_URL = "http://127.0.0.1:7860" # API Gradio locale
23
 
24
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
25
- # OPTIONS ร€ AFFICHER (pour rรฉfรฉrence utilisateur)
26
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
27
  DOMAINES = {
28
  1: "Infra & Cloud",
@@ -48,12 +48,12 @@ POSTES = {
48
  }
49
 
50
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
51
- print("โ•‘ ๐Ÿ”ฎ PRร‰DICTION UNITAIRE - Risque de dรฉpart employรฉ โ•‘")
52
- print("โ•‘ (API locale - Entrรฉes numรฉriques uniquement) โ•‘")
53
- print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•\n")
54
 
55
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
56
- # COLLECTE DES DONNร‰ES - Tout en nombres !
57
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
58
 
59
  print("โ•" * 60)
@@ -120,13 +120,13 @@ annees_entreprise = int(input("Annรฉes dans l'entreprise [0-40]: "))
120
  annees_poste = int(input("Annรฉes dans le poste actuel [0-18]: "))
121
 
122
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
123
- # PRร‰DICTION VIA GRADIO CLIENT
124
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
125
- print("\nโณ Connexion ร  l'API Gradio locale...")
126
 
127
  try:
128
  client = Client(API_URL)
129
- print("โœ… Connectรฉ\n")
130
  print("โณ Envoi de la prรฉdiction...")
131
 
132
  result = client.predict(
@@ -163,45 +163,51 @@ try:
163
  api_name="/predict",
164
  )
165
 
 
 
 
166
  print("\n" + "โ•" * 60)
167
  print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION")
168
  print("โ•" * 60)
169
 
170
- # Le rรฉsultat est du Markdown - on l'affiche directement
171
- # mais on extrait aussi les valeurs clรฉs
172
  if isinstance(result, str):
173
  # Extraire les probabilitรฉs du Markdown
174
  prob_depart = re.search(r"Probabilitรฉ de dรฉpart[^:]*:\s*([\d.]+)%", result)
175
  prob_maintien = re.search(r"Probabilitรฉ de maintien[^:]*:\s*([\d.]+)%", result)
176
  confiance = re.search(r"Confiance[^:]*:\s*([\d.]+)%", result)
177
 
178
- # Dรฉtecter le risque
179
  if "RISQUE ร‰LEVร‰" in result:
180
- print("\n๐Ÿ”ด RISQUE ร‰LEVร‰ DE Dร‰PART")
181
  elif "RISQUE MOYEN" in result:
182
- print("\n๐ŸŸ  RISQUE MOYEN DE Dร‰PART")
183
  else:
184
- print("\n๐ŸŸข RISQUE FAIBLE DE Dร‰PART")
185
 
186
- # Afficher les probabilitรฉs
187
  if prob_maintien:
188
  print(f"\n๐Ÿ“ˆ Probabilitรฉ de rester: {prob_maintien.group(1)}%")
189
  if prob_depart:
190
  print(f"๐Ÿ“‰ Probabilitรฉ de partir: {prob_depart.group(1)}%")
191
  if confiance:
192
- print(f"๐ŸŽฏ Confiance du modรจle: {confiance.group(1)}%")
193
 
194
- # Afficher la prรฉdiction
 
195
  if "Dรฉpart probable" in result:
196
- print("\n๐Ÿšจ PRร‰DICTION: VA PARTIR")
197
  else:
198
- print("\nโœ… PRร‰DICTION: VA RESTER")
 
199
  else:
200
  print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
201
 
 
 
202
  except ConnectionError:
203
- print("\nโŒ Impossible de se connecter ร  l'API Gradio locale.")
204
  print(" Lancez d'abord: python app.py")
 
205
  except Exception as e:
206
  print(f"\nโŒ Erreur: {e}")
207
  sys.exit(1)
 
1
  #!/usr/bin/env python3
2
  """
3
+ ๐Ÿ”ฎ Prรฉdiction UNITAIRE - API locale (Gradio)
4
 
5
  Usage: python demo_unitaire.py
6
+ Prรฉrequis: Lancer l'API locale avec `python app.py`
7
  """
8
 
9
  import re
 
19
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
20
  # CONFIGURATION
21
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
+ API_URL = "http://127.0.0.1:7860"
23
 
24
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
25
+ # OPTIONS (menus numรฉrotรฉs)
26
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
27
  DOMAINES = {
28
  1: "Infra & Cloud",
 
48
  }
49
 
50
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
51
+ print("โ•‘ ๐Ÿ”ฎ PRร‰DICTION UNITAIRE - API Locale โ•‘")
52
+ print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•")
53
+ print(f"\n๐ŸŒ API: {API_URL}\n")
54
 
55
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
56
+ # COLLECTE DES DONNร‰ES
57
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
58
 
59
  print("โ•" * 60)
 
120
  annees_poste = int(input("Annรฉes dans le poste actuel [0-18]: "))
121
 
122
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
123
+ # PRร‰DICTION
124
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
125
+ print("\nโณ Connexion ร  l'API...")
126
 
127
  try:
128
  client = Client(API_URL)
129
+ print("โœ… Connectรฉ")
130
  print("โณ Envoi de la prรฉdiction...")
131
 
132
  result = client.predict(
 
163
  api_name="/predict",
164
  )
165
 
166
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
167
+ # AFFICHAGE DU Rร‰SULTAT
168
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
169
  print("\n" + "โ•" * 60)
170
  print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION")
171
  print("โ•" * 60)
172
 
 
 
173
  if isinstance(result, str):
174
  # Extraire les probabilitรฉs du Markdown
175
  prob_depart = re.search(r"Probabilitรฉ de dรฉpart[^:]*:\s*([\d.]+)%", result)
176
  prob_maintien = re.search(r"Probabilitรฉ de maintien[^:]*:\s*([\d.]+)%", result)
177
  confiance = re.search(r"Confiance[^:]*:\s*([\d.]+)%", result)
178
 
179
+ # Niveau de risque
180
  if "RISQUE ร‰LEVร‰" in result:
181
+ print("\n๐Ÿ”ด Niveau de risque: ร‰LEVร‰")
182
  elif "RISQUE MOYEN" in result:
183
+ print("\n๐ŸŸ  Niveau de risque: MOYEN")
184
  else:
185
+ print("\n๐ŸŸข Niveau de risque: FAIBLE")
186
 
187
+ # Probabilitรฉs
188
  if prob_maintien:
189
  print(f"\n๐Ÿ“ˆ Probabilitรฉ de rester: {prob_maintien.group(1)}%")
190
  if prob_depart:
191
  print(f"๐Ÿ“‰ Probabilitรฉ de partir: {prob_depart.group(1)}%")
192
  if confiance:
193
+ print(f"๐ŸŽฏ Confiance du modรจle: {confiance.group(1)}%")
194
 
195
+ # Prรฉdiction finale
196
+ print("\n" + "โ”€" * 60)
197
  if "Dรฉpart probable" in result:
198
+ print("๐Ÿšจ PRร‰DICTION FINALE: VA PARTIR")
199
  else:
200
+ print("โœ… PRร‰DICTION FINALE: VA RESTER")
201
+ print("โ”€" * 60)
202
  else:
203
  print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
204
 
205
+ print("\nโœ… Prรฉdiction unitaire terminรฉe avec succรจs!")
206
+
207
  except ConnectionError:
208
+ print("\nโŒ Impossible de se connecter ร  l'API locale.")
209
  print(" Lancez d'abord: python app.py")
210
+ sys.exit(1)
211
  except Exception as e:
212
  print(f"\nโŒ Erreur: {e}")
213
  sys.exit(1)
exemples/demo_unitaire_hf.py CHANGED
@@ -1,6 +1,6 @@
1
  #!/usr/bin/env python3
2
  """
3
- ๐Ÿ”ฎ Prรฉdiction UNITAIRE via Hugging Face - Entrรฉes numรฉriques uniquement
4
 
5
  Usage: python demo_unitaire_hf.py
6
  Prรฉrequis: pip install gradio_client
@@ -17,10 +17,13 @@ except ImportError:
17
  print(" pip install gradio_client")
18
  sys.exit(1)
19
 
 
 
 
20
  API_URL = os.getenv("HF_API_URL", "https://asi-engineer-oc-p5.hf.space")
21
 
22
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
23
- # OPTIONS ร€ AFFICHER (pour rรฉfรฉrence utilisateur)
24
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
25
  DOMAINES = {
26
  1: "Infra & Cloud",
@@ -46,13 +49,12 @@ POSTES = {
46
  }
47
 
48
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
49
- print("โ•‘ ๐Ÿ”ฎ PRร‰DICTION UNITAIRE - Hugging Face Spaces โ•‘")
50
- print("โ•‘ (Entrรฉes numรฉriques uniquement) โ•‘")
51
- print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•\n")
52
- print(f"๐ŸŒ API: {API_URL}\n")
53
 
54
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
55
- # COLLECTE DES DONNร‰ES - Tout en nombres !
56
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
57
 
58
  print("โ•" * 60)
@@ -119,13 +121,13 @@ annees_entreprise = int(input("Annรฉes dans l'entreprise [0-40]: "))
119
  annees_poste = int(input("Annรฉes dans le poste actuel [0-18]: "))
120
 
121
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
122
- # PRร‰DICTION VIA GRADIO CLIENT
123
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
124
- print("\nโณ Connexion ร  l'API Gradio HF...")
125
 
126
  try:
127
  client = Client(API_URL)
128
- print("โœ… Connectรฉ\n")
129
  print("โณ Envoi de la prรฉdiction...")
130
 
131
  result = client.predict(
@@ -162,41 +164,47 @@ try:
162
  api_name="/predict",
163
  )
164
 
 
 
 
165
  print("\n" + "โ•" * 60)
166
- print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION (HF)")
167
  print("โ•" * 60)
168
 
169
- # Le rรฉsultat est du Markdown - on extrait les valeurs clรฉs
170
  if isinstance(result, str):
171
  # Extraire les probabilitรฉs du Markdown
172
  prob_depart = re.search(r"Probabilitรฉ de dรฉpart[^:]*:\s*([\d.]+)%", result)
173
  prob_maintien = re.search(r"Probabilitรฉ de maintien[^:]*:\s*([\d.]+)%", result)
174
  confiance = re.search(r"Confiance[^:]*:\s*([\d.]+)%", result)
175
 
176
- # Dรฉtecter le risque
177
  if "RISQUE ร‰LEVร‰" in result:
178
- print("\n๐Ÿ”ด RISQUE ร‰LEVร‰ DE Dร‰PART")
179
  elif "RISQUE MOYEN" in result:
180
- print("\n๐ŸŸ  RISQUE MOYEN DE Dร‰PART")
181
  else:
182
- print("\n๐ŸŸข RISQUE FAIBLE DE Dร‰PART")
183
 
184
- # Afficher les probabilitรฉs
185
  if prob_maintien:
186
  print(f"\n๐Ÿ“ˆ Probabilitรฉ de rester: {prob_maintien.group(1)}%")
187
  if prob_depart:
188
  print(f"๐Ÿ“‰ Probabilitรฉ de partir: {prob_depart.group(1)}%")
189
  if confiance:
190
- print(f"๐ŸŽฏ Confiance du modรจle: {confiance.group(1)}%")
191
 
192
- # Afficher la prรฉdiction
 
193
  if "Dรฉpart probable" in result:
194
- print("\n๐Ÿšจ PRร‰DICTION: VA PARTIR")
195
  else:
196
- print("\nโœ… PRร‰DICTION: VA RESTER")
 
197
  else:
198
  print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
199
 
 
 
200
  except Exception as e:
201
  print(f"\nโŒ Erreur: {e}")
202
  sys.exit(1)
 
1
  #!/usr/bin/env python3
2
  """
3
+ ๐Ÿ”ฎ Prรฉdiction UNITAIRE - API Hugging Face (Gradio)
4
 
5
  Usage: python demo_unitaire_hf.py
6
  Prรฉrequis: pip install gradio_client
 
17
  print(" pip install gradio_client")
18
  sys.exit(1)
19
 
20
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
21
+ # CONFIGURATION
22
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
23
  API_URL = os.getenv("HF_API_URL", "https://asi-engineer-oc-p5.hf.space")
24
 
25
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
26
+ # OPTIONS (menus numรฉrotรฉs)
27
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
28
  DOMAINES = {
29
  1: "Infra & Cloud",
 
49
  }
50
 
51
  print("โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—")
52
+ print("โ•‘ ๐Ÿ”ฎ PRร‰DICTION UNITAIRE - API Hugging Face โ•‘")
53
+ print("โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•")
54
+ print(f"\n๐ŸŒ API: {API_URL}\n")
 
55
 
56
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
57
+ # COLLECTE DES DONNร‰ES
58
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
59
 
60
  print("โ•" * 60)
 
121
  annees_poste = int(input("Annรฉes dans le poste actuel [0-18]: "))
122
 
123
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
124
+ # PRร‰DICTION
125
  # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
126
+ print("\nโณ Connexion ร  l'API...")
127
 
128
  try:
129
  client = Client(API_URL)
130
+ print("โœ… Connectรฉ")
131
  print("โณ Envoi de la prรฉdiction...")
132
 
133
  result = client.predict(
 
164
  api_name="/predict",
165
  )
166
 
167
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
168
+ # AFFICHAGE DU Rร‰SULTAT
169
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
170
  print("\n" + "โ•" * 60)
171
+ print("๐Ÿ“Š Rร‰SULTAT DE LA PRร‰DICTION")
172
  print("โ•" * 60)
173
 
 
174
  if isinstance(result, str):
175
  # Extraire les probabilitรฉs du Markdown
176
  prob_depart = re.search(r"Probabilitรฉ de dรฉpart[^:]*:\s*([\d.]+)%", result)
177
  prob_maintien = re.search(r"Probabilitรฉ de maintien[^:]*:\s*([\d.]+)%", result)
178
  confiance = re.search(r"Confiance[^:]*:\s*([\d.]+)%", result)
179
 
180
+ # Niveau de risque
181
  if "RISQUE ร‰LEVร‰" in result:
182
+ print("\n๐Ÿ”ด Niveau de risque: ร‰LEVร‰")
183
  elif "RISQUE MOYEN" in result:
184
+ print("\n๐ŸŸ  Niveau de risque: MOYEN")
185
  else:
186
+ print("\n๐ŸŸข Niveau de risque: FAIBLE")
187
 
188
+ # Probabilitรฉs
189
  if prob_maintien:
190
  print(f"\n๐Ÿ“ˆ Probabilitรฉ de rester: {prob_maintien.group(1)}%")
191
  if prob_depart:
192
  print(f"๐Ÿ“‰ Probabilitรฉ de partir: {prob_depart.group(1)}%")
193
  if confiance:
194
+ print(f"๐ŸŽฏ Confiance du modรจle: {confiance.group(1)}%")
195
 
196
+ # Prรฉdiction finale
197
+ print("\n" + "โ”€" * 60)
198
  if "Dรฉpart probable" in result:
199
+ print("๐Ÿšจ PRร‰DICTION FINALE: VA PARTIR")
200
  else:
201
+ print("โœ… PRร‰DICTION FINALE: VA RESTER")
202
+ print("โ”€" * 60)
203
  else:
204
  print(f"\n๐Ÿ“‹ Rรฉsultat: {result}")
205
 
206
+ print("\nโœ… Prรฉdiction unitaire terminรฉe avec succรจs!")
207
+
208
  except Exception as e:
209
  print(f"\nโŒ Erreur: {e}")
210
  sys.exit(1)