diff --git a/MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb b/MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb
index 24a0adb1c4..dbf9f50ee2 100644
--- a/MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb
+++ b/MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb
@@ -5,10 +5,10 @@
"id": "dc90c000",
"metadata": {
"papermill": {
- "duration": 0.007855,
- "end_time": "2026-09-28T16:53:04.948418+00:00",
+ "duration": 0.006999,
+ "end_time": "2026-10-01T20:37:19.340726+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:04.940563+00:00",
+ "start_time": "2026-10-01T20:37:19.333727+00:00",
"status": "completed"
},
"tags": []
@@ -33,16 +33,16 @@
"id": "2c0da28c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:53:04.965693Z",
- "iopub.status.busy": "2026-09-28T16:53:04.965147Z",
- "iopub.status.idle": "2026-09-28T16:53:05.001627Z",
- "shell.execute_reply": "2026-09-28T16:53:04.996695Z"
+ "iopub.execute_input": "2026-10-01T20:37:19.358011Z",
+ "iopub.status.busy": "2026-10-01T20:37:19.357486Z",
+ "iopub.status.idle": "2026-10-01T20:37:19.383660Z",
+ "shell.execute_reply": "2026-10-01T20:37:19.382258Z"
},
"papermill": {
- "duration": 0.04706,
- "end_time": "2026-09-28T16:53:05.003385+00:00",
+ "duration": 0.03516,
+ "end_time": "2026-10-01T20:37:19.384874+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:04.956325+00:00",
+ "start_time": "2026-10-01T20:37:19.349714+00:00",
"status": "completed"
},
"tags": []
@@ -74,10 +74,10 @@
"id": "ba52ca1a",
"metadata": {
"papermill": {
- "duration": 0.009105,
- "end_time": "2026-09-28T16:53:05.019595+00:00",
+ "duration": 0.006294,
+ "end_time": "2026-10-01T20:37:19.397556+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:05.010490+00:00",
+ "start_time": "2026-10-01T20:37:19.391262+00:00",
"status": "completed"
},
"tags": []
@@ -93,16 +93,16 @@
"id": "0b5cbfcf",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:53:05.040822Z",
- "iopub.status.busy": "2026-09-28T16:53:05.040296Z",
- "iopub.status.idle": "2026-09-28T16:53:08.613191Z",
- "shell.execute_reply": "2026-09-28T16:53:08.611991Z"
+ "iopub.execute_input": "2026-10-01T20:37:19.413636Z",
+ "iopub.status.busy": "2026-10-01T20:37:19.413108Z",
+ "iopub.status.idle": "2026-10-01T20:37:22.482838Z",
+ "shell.execute_reply": "2026-10-01T20:37:22.481529Z"
},
"papermill": {
- "duration": 3.588199,
- "end_time": "2026-09-28T16:53:08.614310+00:00",
+ "duration": 3.08013,
+ "end_time": "2026-10-01T20:37:22.484028+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:05.026111+00:00",
+ "start_time": "2026-10-01T20:37:19.403898+00:00",
"status": "completed"
},
"tags": []
@@ -119,7 +119,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "API directe fournisseur HTTP 200 139 modèles\n",
+ "API directe fournisseur HTTP 200 140 modèles\n",
"Prix catalogue openai/gpt-5-mini : $0.25/M entrée, $2.00/M sortie\n"
]
}
@@ -175,16 +175,16 @@
"id": "0bfa605f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:53:08.628815Z",
- "iopub.status.busy": "2026-09-28T16:53:08.628325Z",
- "iopub.status.idle": "2026-09-28T16:53:08.642547Z",
- "shell.execute_reply": "2026-09-28T16:53:08.641043Z"
+ "iopub.execute_input": "2026-10-01T20:37:22.497530Z",
+ "iopub.status.busy": "2026-10-01T20:37:22.497070Z",
+ "iopub.status.idle": "2026-10-01T20:37:22.506687Z",
+ "shell.execute_reply": "2026-10-01T20:37:22.505455Z"
},
"papermill": {
- "duration": 0.023335,
- "end_time": "2026-09-28T16:53:08.644070+00:00",
+ "duration": 0.01769,
+ "end_time": "2026-10-01T20:37:22.507647+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:08.620735+00:00",
+ "start_time": "2026-10-01T20:37:22.489957+00:00",
"status": "completed"
},
"tags": []
@@ -234,16 +234,16 @@
"id": "dea89f9f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:53:08.660551Z",
- "iopub.status.busy": "2026-09-28T16:53:08.659789Z",
- "iopub.status.idle": "2026-09-28T16:53:08.672355Z",
- "shell.execute_reply": "2026-09-28T16:53:08.670912Z"
+ "iopub.execute_input": "2026-10-01T20:37:22.520271Z",
+ "iopub.status.busy": "2026-10-01T20:37:22.519805Z",
+ "iopub.status.idle": "2026-10-01T20:37:22.528572Z",
+ "shell.execute_reply": "2026-10-01T20:37:22.527199Z"
},
"papermill": {
- "duration": 0.02333,
- "end_time": "2026-09-28T16:53:08.673786+00:00",
+ "duration": 0.017133,
+ "end_time": "2026-10-01T20:37:22.529680+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:08.650456+00:00",
+ "start_time": "2026-10-01T20:37:22.512547+00:00",
"status": "completed"
},
"tags": []
@@ -295,10 +295,10 @@
"id": "b7ff4094",
"metadata": {
"papermill": {
- "duration": 0.007039,
- "end_time": "2026-09-28T16:53:08.692012+00:00",
+ "duration": 0.005794,
+ "end_time": "2026-10-01T20:37:22.542066+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:08.684973+00:00",
+ "start_time": "2026-10-01T20:37:22.536272+00:00",
"status": "completed"
},
"tags": []
@@ -319,16 +319,16 @@
"id": "17aae912",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:53:08.717941Z",
- "iopub.status.busy": "2026-09-28T16:53:08.717401Z",
- "iopub.status.idle": "2026-09-28T16:54:45.784487Z",
- "shell.execute_reply": "2026-09-28T16:54:45.783019Z"
+ "iopub.execute_input": "2026-10-01T20:37:22.557752Z",
+ "iopub.status.busy": "2026-10-01T20:37:22.557235Z",
+ "iopub.status.idle": "2026-10-01T20:38:43.245382Z",
+ "shell.execute_reply": "2026-10-01T20:38:43.243583Z"
},
"papermill": {
- "duration": 97.092228,
- "end_time": "2026-09-28T16:54:45.791003+00:00",
+ "duration": 80.702329,
+ "end_time": "2026-10-01T20:38:43.251433+00:00",
"exception": false,
- "start_time": "2026-09-28T16:53:08.698775+00:00",
+ "start_time": "2026-10-01T20:37:22.549104+00:00",
"status": "completed"
},
"tags": []
@@ -367,7 +367,7 @@
"
0 | \n",
" local | \n",
" 86.7 | \n",
- " 1.207 | \n",
+ " 1.001 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" \n",
@@ -375,9 +375,9 @@
" 1 | \n",
" distant | \n",
" 100.0 | \n",
- " 1.892 | \n",
- " 0.000042 | \n",
- " 0.001254 | \n",
+ " 1.572 | \n",
+ " 0.000043 | \n",
+ " 0.001277 | \n",
" \n",
" \n",
"\n",
@@ -385,8 +385,8 @@
],
"text/plain": [
" modèle justesse % latence médiane (s) coût/requête ($) coût total ($)\n",
- "0 local 86.7 1.207 0.000000 0.000000\n",
- "1 distant 100.0 1.892 0.000042 0.001254"
+ "0 local 86.7 1.001 0.000000 0.000000\n",
+ "1 distant 100.0 1.572 0.000043 0.001277"
]
},
"metadata": {},
@@ -426,10 +426,10 @@
"id": "21a21751",
"metadata": {
"papermill": {
- "duration": 0.005669,
- "end_time": "2026-09-28T16:54:45.804429+00:00",
+ "duration": 0.009631,
+ "end_time": "2026-10-01T20:38:43.268275+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.798760+00:00",
+ "start_time": "2026-10-01T20:38:43.258644+00:00",
"status": "completed"
},
"tags": []
@@ -447,10 +447,10 @@
"id": "a19b6040",
"metadata": {
"papermill": {
- "duration": 0.007041,
- "end_time": "2026-09-28T16:54:45.818988+00:00",
+ "duration": 0.008276,
+ "end_time": "2026-10-01T20:38:43.284254+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.811947+00:00",
+ "start_time": "2026-10-01T20:38:43.275978+00:00",
"status": "completed"
},
"tags": []
@@ -460,8 +460,10 @@
"\n",
"Un budget d'exploitation ne se décrète pas, il se simule à partir du coût mesuré. À volume fixe,\n",
"la trajectoire de dépense est une droite dont la pente est le coût par requête ; le mix local/distant\n",
- "fait varier la pente. L'exploitant veut trois choses : la trajectoire, la date de franchissement\n",
- "du budget, et une alerte *avant* — posée ici à quatre-vingts pour cent du budget."
+ "fait varier la pente. Le budget est mensuel et **renouvelable** : le compteur retombe à zéro à chaque\n",
+ "frontière de mois, et c'est la trajectoire d'un mois qui décide — pas un cumul annuel. L'exploitant\n",
+ "veut trois choses : cette trajectoire, le jour du mois où elle franchit le budget, et une alerte\n",
+ "*avant* — posée ici à quatre-vingts pour cent du budget.\n"
]
},
{
@@ -470,16 +472,16 @@
"id": "1f127d45",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:45.835877Z",
- "iopub.status.busy": "2026-09-28T16:54:45.835239Z",
- "iopub.status.idle": "2026-09-28T16:54:45.861293Z",
- "shell.execute_reply": "2026-09-28T16:54:45.859035Z"
+ "iopub.execute_input": "2026-10-01T20:38:43.301770Z",
+ "iopub.status.busy": "2026-10-01T20:38:43.301195Z",
+ "iopub.status.idle": "2026-10-01T20:38:43.325445Z",
+ "shell.execute_reply": "2026-10-01T20:38:43.323782Z"
},
"papermill": {
- "duration": 0.036488,
- "end_time": "2026-09-28T16:54:45.862684+00:00",
+ "duration": 0.035333,
+ "end_time": "2026-10-01T20:38:43.326559+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.826196+00:00",
+ "start_time": "2026-10-01T20:38:43.291226+00:00",
"status": "completed"
},
"tags": []
@@ -508,41 +510,55 @@
" | \n",
" part locale | \n",
" pente ($/jour) | \n",
- " alerte 80 % (jour) | \n",
- " budget épuisé (jour) | \n",
+ " alerte 80 % (jour du mois) | \n",
+ " budget épuisé (jour du mois) | \n",
" \n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.0 | \n",
- " 0.0627 | \n",
- " 128 | \n",
- " 160 | \n",
+ " 0.0639 | \n",
+ " jamais | \n",
+ " jamais | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.5 | \n",
- " 0.0313 | \n",
- " 256 | \n",
- " 320 | \n",
+ " 0.0319 | \n",
+ " jamais | \n",
+ " jamais | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.9 | \n",
- " 0.0063 | \n",
+ " 0.0064 | \n",
+ " jamais | \n",
+ " jamais | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1.0 | \n",
+ " 0.0000 | \n",
+ " jamais | \n",
" jamais | \n",
- " > 1 an | \n",
"
\n",
" \n",
"\n",
""
],
"text/plain": [
- " part locale pente ($/jour) alerte 80 % (jour) budget épuisé (jour)\n",
- "0 0.0 0.0627 128 160\n",
- "1 0.5 0.0313 256 320\n",
- "2 0.9 0.0063 jamais > 1 an"
+ " part locale pente ($/jour) alerte 80 % (jour du mois) \\\n",
+ "0 0.0 0.0639 jamais \n",
+ "1 0.5 0.0319 jamais \n",
+ "2 0.9 0.0064 jamais \n",
+ "3 1.0 0.0000 jamais \n",
+ "\n",
+ " budget épuisé (jour du mois) \n",
+ "0 jamais \n",
+ "1 jamais \n",
+ "2 jamais \n",
+ "3 jamais "
]
},
"metadata": {},
@@ -552,42 +568,53 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Entrées de la simulation : coût distant mesuré $0.000042/requête, volume 1500 req/jour, budget $10/mois\n"
+ "Entrées : coût distant mesuré $0.000043/requête, volume 1500 req/jour, budget $10/mois renouvelable (compteur remis à zéro tous les 30 jours)\n",
+ "Témoin à $0.40/jour : alerte 80 % au jour 20, budget épuisé au jour 25 du mois\n",
+ "Témoin zéro requête : alerte jamais, épuisement jamais\n"
]
}
],
"source": [
+ "JOURS_MOIS = 30 # mois normalisé de la simulation (paramètre de l'exploitant)\n",
+ "\n",
"def trajectoire(cout_distant_par_req, volume_par_jour, part_locale, budget_usd):\n",
- " \"\"\"Simule la dépense cumulée jour par jour. Retourne (cumuls, jour_franchissement_80, jour_epuisement).\"\"\"\n",
+ " \"\"\"Dépense cumulée dans le mois courant. Le budget est mensuel RENOUVELABLE : le compteur\n",
+ " retombe à zéro à chaque frontière de mois, et comme la pente est constante, la trajectoire\n",
+ " d'un mois vaut pour tous. Retourne (cumuls_du_mois, jour_du_mois_80, jour_du_mois_epuisement).\"\"\"\n",
" pente = volume_par_jour * (1 - part_locale) * cout_distant_par_req\n",
" cumuls, c = [], 0.0\n",
" jour80 = jour_plein = None\n",
- " for jour in range(1, 366):\n",
+ " for jour in range(1, JOURS_MOIS + 1):\n",
" c += pente\n",
" cumuls.append(c)\n",
" if jour80 is None and c >= 0.8 * budget_usd:\n",
" jour80 = jour\n",
" if jour_plein is None and c >= budget_usd:\n",
" jour_plein = jour\n",
- " break\n",
" return cumuls, jour80, jour_plein\n",
"\n",
"COUT_DISTANT = sum(x[\"cout_usd\"] for x in MESURES[\"distant\"]) / len(MESURES[\"distant\"])\n",
"VOLUME = 1500 # requêtes/jour posées au service (paramètre de l'exploitant)\n",
- "BUDGET = 10.0 # budget mensuel en dollars (paramètre de l'exploitant)\n",
+ "BUDGET = 10.0 # budget mensuel renouvelable en dollars (paramètre de l'exploitant)\n",
"\n",
"lignes = []\n",
- "for part_locale in (0.0, 0.5, 0.9):\n",
+ "for part_locale in (0.0, 0.5, 0.9, 1.0):\n",
" cumuls, j80, jp = trajectoire(COUT_DISTANT, VOLUME, part_locale, BUDGET)\n",
" lignes.append({\n",
" \"part locale\": part_locale,\n",
" \"pente ($/jour)\": round(VOLUME * (1 - part_locale) * COUT_DISTANT, 4),\n",
- " \"alerte 80 % (jour)\": j80 if j80 else \"jamais\",\n",
- " \"budget épuisé (jour)\": jp if jp else \"> 1 an\",\n",
+ " \"alerte 80 % (jour du mois)\": j80 if j80 else \"jamais\",\n",
+ " \"budget épuisé (jour du mois)\": jp if jp else \"jamais\",\n",
" })\n",
"display(pd.DataFrame(lignes))\n",
- "print(f\"Entrées de la simulation : coût distant mesuré ${COUT_DISTANT:.6f}/requête, \"\n",
- " f\"volume {VOLUME} req/jour, budget ${BUDGET:.0f}/mois\")"
+ "print(f\"Entrées : coût distant mesuré ${COUT_DISTANT:.6f}/requête, volume {VOLUME} req/jour, \"\n",
+ " f\"budget ${BUDGET:.0f}/mois renouvelable (compteur remis à zéro tous les {JOURS_MOIS} jours)\")\n",
+ "\n",
+ "# Témoins de contrôle : le modèle mensuel doit rendre les deux régimes observables.\n",
+ "_, j80_t, jp_t = trajectoire(0.40 / VOLUME, VOLUME, 0.0, BUDGET) # pente à 0,40 $/jour\n",
+ "_, j80_z, jp_z = trajectoire(COUT_DISTANT, 0, 0.0, BUDGET) # zéro requête posée\n",
+ "print(f\"Témoin à $0.40/jour : alerte 80 % au jour {j80_t}, budget épuisé au jour {jp_t} du mois\")\n",
+ "print(f\"Témoin zéro requête : alerte {j80_z or 'jamais'}, épuisement {jp_z or 'jamais'}\")\n"
]
},
{
@@ -596,16 +623,16 @@
"id": "b097a42e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:45.879794Z",
- "iopub.status.busy": "2026-09-28T16:54:45.879242Z",
- "iopub.status.idle": "2026-09-28T16:54:45.887211Z",
- "shell.execute_reply": "2026-09-28T16:54:45.885773Z"
+ "iopub.execute_input": "2026-10-01T20:38:43.344354Z",
+ "iopub.status.busy": "2026-10-01T20:38:43.343743Z",
+ "iopub.status.idle": "2026-10-01T20:38:43.352833Z",
+ "shell.execute_reply": "2026-10-01T20:38:43.351342Z"
},
"papermill": {
- "duration": 0.018493,
- "end_time": "2026-09-28T16:54:45.888508+00:00",
+ "duration": 0.020153,
+ "end_time": "2026-10-01T20:38:43.354234+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.870015+00:00",
+ "start_time": "2026-10-01T20:38:43.334081+00:00",
"status": "completed"
},
"tags": []
@@ -615,20 +642,22 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Vérification de l'organe d'alerte au jour 30 : seuil non franchi\n"
+ "Mois calme (pente mesurée), jour 30 : seuil non franchi\n",
+ "Mois tendu ($0.40/jour), jour 20 : seuil franchi -- ALERTE\n"
]
}
],
"source": [
"def verifier_alerte(cumuls, budget_usd, au_jour):\n",
- " \"\"\"L'organe d'alerte : dit si, au jour donné, on a franchi le seuil de quatre-vingts pour cent.\"\"\"\n",
+ " \"\"\"L'organe d'alerte : dit si, au jour du mois donné, on a franchi le seuil de quatre-vingts pour cent.\"\"\"\n",
" return cumuls[au_jour - 1] >= 0.8 * budget_usd\n",
"\n",
"cumuls, j80, jp = trajectoire(COUT_DISTANT, VOLUME, 0.5, BUDGET)\n",
- "SEUIL_JOUR = min(j80 or 1, 30) # on vérifie l'alerte au plus tard au seuil calculé\n",
- "franchie = verifier_alerte(cumuls, BUDGET, SEUIL_JOUR)\n",
- "print(f\"Vérification de l'organe d'alerte au jour {SEUIL_JOUR} : seuil \"\n",
- " f\"{'franchi -- ALERTE' if franchie else 'non franchi'}\")"
+ "calme = verifier_alerte(cumuls, BUDGET, JOURS_MOIS) # régime calme : vérifié au dernier jour du mois\n",
+ "cumuls_t, j80_t, _ = trajectoire(0.40 / VOLUME, VOLUME, 0.0, BUDGET)\n",
+ "tendu = verifier_alerte(cumuls_t, BUDGET, j80_t) # régime tendu : au jour d'alerte calculé\n",
+ "print(f\"Mois calme (pente mesurée), jour {JOURS_MOIS} : seuil {'franchi -- ALERTE' if calme else 'non franchi'}\")\n",
+ "print(f\"Mois tendu ($0.40/jour), jour {j80_t} : seuil {'franchi -- ALERTE' if tendu else 'non franchi'}\")\n"
]
},
{
@@ -636,20 +665,24 @@
"id": "07a09627",
"metadata": {
"papermill": {
- "duration": 0.006072,
- "end_time": "2026-09-28T16:54:45.901245+00:00",
+ "duration": 0.007263,
+ "end_time": "2026-10-01T20:38:43.370233+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.895173+00:00",
+ "start_time": "2026-10-01T20:38:43.362970+00:00",
"status": "completed"
},
"tags": []
},
"source": [
- "**Lecture.** La pente varie d'un facteur dix selon le mix : la colonne alerte montre le cas qui\n",
- "franchit le seuil en cours de période et celui qui ne l'atteint pas dans l'année.\n",
- "L'alerte ne se déclenche pas sur un sentiment : c'est une fonction testée sur la trajectoire\n",
- "simulée, avec la pente mesurée à la section précédente — ré-exécuter le notebook avec un autre\n",
- "prix de catalogue et tout se recalcule."
+ "**Lecture.** La pente varie d'un facteur dix selon le mix, mais aucun mix ne menace le budget :\n",
+ "à 0,063 $/jour, le mois complet consomme moins de 2 $ des 10 $ — et le compteur retombe à zéro à\n",
+ "chaque frontière de mois, la dépense ne s'accumule pas d'un mois sur l'autre. Le témoin à\n",
+ "0,40 $/jour montre l'autre régime : alerte au jour 20, budget épuisé au jour 25 du mois. C'est la\n",
+ "lecture mensuelle qui rend ce franchissement observable — un cumul annuel le noierait deux fois\n",
+ "(sous-alerte à pente faible, franchissement noyé à pente forte). L'alerte ne se déclenche pas sur\n",
+ "un sentiment : c'est une fonction testée sur la trajectoire simulée dans les deux régimes, avec la\n",
+ "pente mesurée à la section précédente — ré-exécuter le notebook avec un autre prix de catalogue\n",
+ "et tout se recalcule.\n"
]
},
{
@@ -657,10 +690,10 @@
"id": "34d896c9",
"metadata": {
"papermill": {
- "duration": 0.007518,
- "end_time": "2026-09-28T16:54:45.915764+00:00",
+ "duration": 0.007722,
+ "end_time": "2026-10-01T20:38:43.385427+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.908246+00:00",
+ "start_time": "2026-10-01T20:38:43.377705+00:00",
"status": "completed"
},
"tags": []
@@ -681,16 +714,16 @@
"id": "fd1ba3a8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:45.934728Z",
- "iopub.status.busy": "2026-09-28T16:54:45.933737Z",
- "iopub.status.idle": "2026-09-28T16:54:45.943869Z",
- "shell.execute_reply": "2026-09-28T16:54:45.942446Z"
+ "iopub.execute_input": "2026-10-01T20:38:43.403174Z",
+ "iopub.status.busy": "2026-10-01T20:38:43.402555Z",
+ "iopub.status.idle": "2026-10-01T20:38:43.413405Z",
+ "shell.execute_reply": "2026-10-01T20:38:43.411230Z"
},
"papermill": {
- "duration": 0.021132,
- "end_time": "2026-09-28T16:54:45.945107+00:00",
+ "duration": 0.02195,
+ "end_time": "2026-10-01T20:38:43.414769+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.923975+00:00",
+ "start_time": "2026-10-01T20:38:43.392819+00:00",
"status": "completed"
},
"tags": []
@@ -728,10 +761,10 @@
"id": "1df1ae4a",
"metadata": {
"papermill": {
- "duration": 0.007841,
- "end_time": "2026-09-28T16:54:45.960916+00:00",
+ "duration": 0.007732,
+ "end_time": "2026-10-01T20:38:43.431906+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.953075+00:00",
+ "start_time": "2026-10-01T20:38:43.424174+00:00",
"status": "completed"
},
"tags": []
@@ -748,10 +781,10 @@
"id": "af50ae5a",
"metadata": {
"papermill": {
- "duration": 0.008209,
- "end_time": "2026-09-28T16:54:45.978280+00:00",
+ "duration": 0.007552,
+ "end_time": "2026-10-01T20:38:43.448729+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.970071+00:00",
+ "start_time": "2026-10-01T20:38:43.441177+00:00",
"status": "completed"
},
"tags": []
@@ -775,16 +808,16 @@
"id": "29ac466c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:45.996894Z",
- "iopub.status.busy": "2026-09-28T16:54:45.996308Z",
- "iopub.status.idle": "2026-09-28T16:54:54.883955Z",
- "shell.execute_reply": "2026-09-28T16:54:54.882130Z"
+ "iopub.execute_input": "2026-10-01T20:38:43.467519Z",
+ "iopub.status.busy": "2026-10-01T20:38:43.466928Z",
+ "iopub.status.idle": "2026-10-01T20:38:52.526243Z",
+ "shell.execute_reply": "2026-10-01T20:38:52.524852Z"
},
"papermill": {
- "duration": 8.898438,
- "end_time": "2026-09-28T16:54:54.885238+00:00",
+ "duration": 9.071035,
+ "end_time": "2026-10-01T20:38:52.527465+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:45.986800+00:00",
+ "start_time": "2026-10-01T20:38:43.456430+00:00",
"status": "completed"
},
"tags": []
@@ -894,10 +927,10 @@
"id": "e453a7fb",
"metadata": {
"papermill": {
- "duration": 0.005748,
- "end_time": "2026-09-28T16:54:54.898092+00:00",
+ "duration": 0.007959,
+ "end_time": "2026-10-01T20:38:52.543176+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:54.892344+00:00",
+ "start_time": "2026-10-01T20:38:52.535217+00:00",
"status": "completed"
},
"tags": []
@@ -914,10 +947,10 @@
"id": "e4908495",
"metadata": {
"papermill": {
- "duration": 0.008159,
- "end_time": "2026-09-28T16:54:54.913941+00:00",
+ "duration": 0.008141,
+ "end_time": "2026-10-01T20:38:52.560005+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:54.905782+00:00",
+ "start_time": "2026-10-01T20:38:52.551864+00:00",
"status": "completed"
},
"tags": []
@@ -937,16 +970,16 @@
"id": "df79629f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:54.940526Z",
- "iopub.status.busy": "2026-09-28T16:54:54.939980Z",
- "iopub.status.idle": "2026-09-28T16:54:54.958260Z",
- "shell.execute_reply": "2026-09-28T16:54:54.956694Z"
+ "iopub.execute_input": "2026-10-01T20:38:52.577529Z",
+ "iopub.status.busy": "2026-10-01T20:38:52.576924Z",
+ "iopub.status.idle": "2026-10-01T20:38:52.593340Z",
+ "shell.execute_reply": "2026-10-01T20:38:52.591969Z"
},
"papermill": {
- "duration": 0.031663,
- "end_time": "2026-09-28T16:54:54.959722+00:00",
+ "duration": 0.02721,
+ "end_time": "2026-10-01T20:38:52.594627+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:54.928059+00:00",
+ "start_time": "2026-10-01T20:38:52.567417+00:00",
"status": "completed"
},
"tags": []
@@ -1069,10 +1102,10 @@
"id": "9fcd7655",
"metadata": {
"papermill": {
- "duration": 0.007926,
- "end_time": "2026-09-28T16:54:54.976142+00:00",
+ "duration": 0.008269,
+ "end_time": "2026-10-01T20:38:52.611860+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:54.968216+00:00",
+ "start_time": "2026-10-01T20:38:52.603591+00:00",
"status": "completed"
},
"tags": []
@@ -1090,10 +1123,10 @@
"id": "94ce2434",
"metadata": {
"papermill": {
- "duration": 0.009083,
- "end_time": "2026-09-28T16:54:54.996443+00:00",
+ "duration": 0.007737,
+ "end_time": "2026-10-01T20:38:52.628194+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:54.987360+00:00",
+ "start_time": "2026-10-01T20:38:52.620457+00:00",
"status": "completed"
},
"tags": []
@@ -1112,10 +1145,10 @@
"id": "beb6915b",
"metadata": {
"papermill": {
- "duration": 0.014271,
- "end_time": "2026-09-28T16:54:55.019505+00:00",
+ "duration": 0.007453,
+ "end_time": "2026-10-01T20:38:52.644029+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.005234+00:00",
+ "start_time": "2026-10-01T20:38:52.636576+00:00",
"status": "completed"
},
"tags": []
@@ -1129,10 +1162,10 @@
"id": "715bc248",
"metadata": {
"papermill": {
- "duration": 0.008478,
- "end_time": "2026-09-28T16:54:55.040903+00:00",
+ "duration": 0.007742,
+ "end_time": "2026-10-01T20:38:52.659745+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.032425+00:00",
+ "start_time": "2026-10-01T20:38:52.652003+00:00",
"status": "completed"
},
"tags": []
@@ -1141,8 +1174,8 @@
"### Exercice 1 : alerte prédictive\n",
"\n",
"L'alerte actuelle attend le franchissement du seuil. Écrivez `jour_franchissement_prevu(cumuls, budget)`\n",
- "qui **extrapole la pente** des premiers jours pour prédire le jour de franchissement complet du\n",
- "budget — l'exploitant veut être prévenu des semaines à l'avance, pas le jour du seuil."
+ "qui **extrapole la pente** des premiers jours du mois pour prédire le jour du mois où le budget\n",
+ "s'épuise — l'exploitant veut être prévenu des semaines à l'avance, pas le jour du seuil.\n"
]
},
{
@@ -1151,16 +1184,16 @@
"id": "5a6b4b49",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:55.060990Z",
- "iopub.status.busy": "2026-09-28T16:54:55.060344Z",
- "iopub.status.idle": "2026-09-28T16:54:55.068388Z",
- "shell.execute_reply": "2026-09-28T16:54:55.066683Z"
+ "iopub.execute_input": "2026-10-01T20:38:52.678001Z",
+ "iopub.status.busy": "2026-10-01T20:38:52.677405Z",
+ "iopub.status.idle": "2026-10-01T20:38:52.684584Z",
+ "shell.execute_reply": "2026-10-01T20:38:52.683150Z"
},
"papermill": {
- "duration": 0.020615,
- "end_time": "2026-09-28T16:54:55.069780+00:00",
+ "duration": 0.018408,
+ "end_time": "2026-10-01T20:38:52.685872+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.049165+00:00",
+ "start_time": "2026-10-01T20:38:52.667464+00:00",
"status": "completed"
},
"tags": []
@@ -1192,10 +1225,10 @@
"id": "4b76346c",
"metadata": {
"papermill": {
- "duration": 0.010291,
- "end_time": "2026-09-28T16:54:55.086498+00:00",
+ "duration": 0.008441,
+ "end_time": "2026-10-01T20:38:52.702375+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.076207+00:00",
+ "start_time": "2026-10-01T20:38:52.693934+00:00",
"status": "completed"
},
"tags": []
@@ -1215,16 +1248,16 @@
"id": "91f6f694",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:55.107714Z",
- "iopub.status.busy": "2026-09-28T16:54:55.107071Z",
- "iopub.status.idle": "2026-09-28T16:54:55.117386Z",
- "shell.execute_reply": "2026-09-28T16:54:55.112958Z"
+ "iopub.execute_input": "2026-10-01T20:38:52.721401Z",
+ "iopub.status.busy": "2026-10-01T20:38:52.720814Z",
+ "iopub.status.idle": "2026-10-01T20:38:52.727973Z",
+ "shell.execute_reply": "2026-10-01T20:38:52.726361Z"
},
"papermill": {
- "duration": 0.023126,
- "end_time": "2026-09-28T16:54:55.119032+00:00",
+ "duration": 0.01868,
+ "end_time": "2026-10-01T20:38:52.729279+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.095906+00:00",
+ "start_time": "2026-10-01T20:38:52.710599+00:00",
"status": "completed"
},
"tags": []
@@ -1256,10 +1289,10 @@
"id": "3551bcc5",
"metadata": {
"papermill": {
- "duration": 0.008139,
- "end_time": "2026-09-28T16:54:55.137227+00:00",
+ "duration": 0.007847,
+ "end_time": "2026-10-01T20:38:52.745323+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.129088+00:00",
+ "start_time": "2026-10-01T20:38:52.737476+00:00",
"status": "completed"
},
"tags": []
@@ -1278,16 +1311,16 @@
"id": "a272698a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-09-28T16:54:55.156973Z",
- "iopub.status.busy": "2026-09-28T16:54:55.156524Z",
- "iopub.status.idle": "2026-09-28T16:54:55.163928Z",
- "shell.execute_reply": "2026-09-28T16:54:55.162376Z"
+ "iopub.execute_input": "2026-10-01T20:38:52.763813Z",
+ "iopub.status.busy": "2026-10-01T20:38:52.763220Z",
+ "iopub.status.idle": "2026-10-01T20:38:52.770119Z",
+ "shell.execute_reply": "2026-10-01T20:38:52.768683Z"
},
"papermill": {
- "duration": 0.018777,
- "end_time": "2026-09-28T16:54:55.165021+00:00",
+ "duration": 0.017828,
+ "end_time": "2026-10-01T20:38:52.771494+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.146244+00:00",
+ "start_time": "2026-10-01T20:38:52.753666+00:00",
"status": "completed"
},
"tags": []
@@ -1318,10 +1351,10 @@
"id": "3901bfe8",
"metadata": {
"papermill": {
- "duration": 0.014685,
- "end_time": "2026-09-28T16:54:55.187750+00:00",
+ "duration": 0.008319,
+ "end_time": "2026-10-01T20:38:52.788391+00:00",
"exception": false,
- "start_time": "2026-09-28T16:54:55.173065+00:00",
+ "start_time": "2026-10-01T20:38:52.780072+00:00",
"status": "completed"
},
"tags": []
@@ -1352,17 +1385,17 @@
},
"papermill": {
"default_parameters": {},
- "duration": 114.791676,
- "end_time": "2026-09-28T16:54:56.330360+00:00",
+ "duration": 96.812514,
+ "end_time": "2026-10-01T20:38:53.581385+00:00",
"environment_variables": {},
"exception": null,
- "input_path": "09e_Production_Exploitation.ipynb",
- "output_path": "09e_exec.ipynb",
+ "input_path": "MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb",
+ "output_path": "MyIA.AI.Notebooks/GenAI/Texte/09e_Production_Exploitation.ipynb",
"parameters": {},
- "start_time": "2026-09-28T16:53:01.538684+00:00",
+ "start_time": "2026-10-01T20:37:16.768871+00:00",
"version": "2.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
-}
+}
\ No newline at end of file