From c0526096370e752f44a96f3ccca36373146f0cbf Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 23 Sep 2026 15:22:31 +0200 Subject: [PATCH 1/5] fix(notebook,#16390): SL-9 re-execute sur un env LLM joignable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La cellule 1 passe de « repli deterministe (pas de .env / OPENAI_API_KEY) » a « VRAI LLM » (endpoint models.myia.io/v1, modele gpt-5.6-sol). La cellule 10 affiche une reponse brute reellement generee, la ou la version committee portait le generateur de reference hors-ligne. Les cellules de robustesse cessent d'etre triviales : la cellule 32 rejoue 3 fois le meme prompt sur le vrai modele (stabilite 3/3) au lieu d'un run unique sur un generateur deterministe, et la cellule 33 compare deux generateurs devant le meme oracle -- vrai LLM 3/3 regles validees et 6/6 de couverture, contre 2/5 et 0/6 pour la reference. Source inchangee : les 56 cellules ont une source identique a la version committee (comparaison cellule a cellule), seules les sorties et les execution_count sont regenerees, par papermill. Co-Authored-By: Claude Sonnet 5 --- .../SL-9-LLM-SymbolicLearning.ipynb | 875 ++++++++++-------- 1 file changed, 467 insertions(+), 408 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb index 42f139e50b..2f47b9f0cd 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb @@ -5,10 +5,10 @@ "id": "097196f2", "metadata": { "papermill": { - "duration": 0.005847, - "end_time": "2026-09-15T05:04:54.055277+00:00", + "duration": 0.004877, + "end_time": "2026-09-23T13:14:34.831229", "exception": false, - "start_time": "2026-09-15T05:04:54.049430+00:00", + "start_time": "2026-09-23T13:14:34.826352", "status": "completed" }, "tags": [] @@ -48,16 +48,16 @@ "id": "3dc32d19", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.177478Z", - "iopub.status.busy": "2026-09-18T15:53:11.177019Z", - "iopub.status.idle": "2026-09-18T15:53:11.206429Z", - "shell.execute_reply": "2026-09-18T15:53:11.204702Z" + "iopub.execute_input": "2026-09-23T13:14:34.840714Z", + "iopub.status.busy": "2026-09-23T13:14:34.840366Z", + "iopub.status.idle": "2026-09-23T13:14:35.904459Z", + "shell.execute_reply": "2026-09-23T13:14:35.904002Z" }, "papermill": { - "duration": 1.16293, - "end_time": "2026-09-15T05:04:55.223558+00:00", + "duration": 1.069625, + "end_time": "2026-09-23T13:14:35.905282", "exception": false, - "start_time": "2026-09-15T05:04:54.060628+00:00", + "start_time": "2026-09-23T13:14:34.835657", "status": "completed" }, "tags": [] @@ -69,8 +69,9 @@ "text": [ "Notebook : SL-9 - LLMs et Apprentissage Symbolique\n", "Chapitres AIMA : 19 (extension)\n", - "Generateur d'hypotheses : repli deterministe (pas de .env / OPENAI_API_KEY)\n", - " Copiez .env.example -> .env pour activer le vrai LLM.\n", + "Generateur d'hypotheses : VRAI LLM (la cle API n'est jamais affichee)\n", + " Endpoint : https://models.myia.io/v1\n", + " Modele : gpt-5.6-sol\n", "Verificateur : oracle symbolique deterministe (section 3) -- toujours actif.\n" ] } @@ -126,10 +127,10 @@ "id": "23731406", "metadata": { "papermill": { - "duration": 0.004923, - "end_time": "2026-09-15T05:04:55.233947+00:00", + "duration": 0.006046, + "end_time": "2026-09-23T13:14:35.916766", "exception": false, - "start_time": "2026-09-15T05:04:55.229024+00:00", + "start_time": "2026-09-23T13:14:35.910720", "status": "completed" }, "tags": [] @@ -168,16 +169,16 @@ "id": "f1d96718", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.210254Z", - "iopub.status.busy": "2026-09-18T15:53:11.209766Z", - "iopub.status.idle": "2026-09-18T15:53:11.220987Z", - "shell.execute_reply": "2026-09-18T15:53:11.219507Z" + "iopub.execute_input": "2026-09-23T13:14:35.926136Z", + "iopub.status.busy": "2026-09-23T13:14:35.925765Z", + "iopub.status.idle": "2026-09-23T13:14:35.931008Z", + "shell.execute_reply": "2026-09-23T13:14:35.930518Z" }, "papermill": { - "duration": 0.012882, - "end_time": "2026-09-15T05:04:55.251780+00:00", + "duration": 0.010945, + "end_time": "2026-09-23T13:14:35.931698", "exception": false, - "start_time": "2026-09-15T05:04:55.238898+00:00", + "start_time": "2026-09-23T13:14:35.920753", "status": "completed" }, "tags": [] @@ -260,10 +261,10 @@ "id": "3827f67e", "metadata": { "papermill": { - "duration": 0.005183, - "end_time": "2026-09-15T05:04:55.262140+00:00", + "duration": 0.003901, + "end_time": "2026-09-23T13:14:35.939570", "exception": false, - "start_time": "2026-09-15T05:04:55.256957+00:00", + "start_time": "2026-09-23T13:14:35.935669", "status": "completed" }, "tags": [] @@ -285,10 +286,10 @@ "id": "59e172f2", "metadata": { "papermill": { - "duration": 0.0067, - "end_time": "2026-09-15T05:04:55.274194+00:00", + "duration": 0.003766, + "end_time": "2026-09-23T13:14:35.947359", "exception": false, - "start_time": "2026-09-15T05:04:55.267494+00:00", + "start_time": "2026-09-23T13:14:35.943593", "status": "completed" }, "tags": [] @@ -323,16 +324,16 @@ "id": "581df035", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.224378Z", - "iopub.status.busy": "2026-09-18T15:53:11.223870Z", - "iopub.status.idle": "2026-09-18T15:53:11.238111Z", - "shell.execute_reply": "2026-09-18T15:53:11.236622Z" + "iopub.execute_input": "2026-09-23T13:14:35.956167Z", + "iopub.status.busy": "2026-09-23T13:14:35.955726Z", + "iopub.status.idle": "2026-09-23T13:14:35.961886Z", + "shell.execute_reply": "2026-09-23T13:14:35.961454Z" }, "papermill": { - "duration": 0.014963, - "end_time": "2026-09-15T05:04:55.294553+00:00", + "duration": 0.011414, + "end_time": "2026-09-23T13:14:35.962559", "exception": false, - "start_time": "2026-09-15T05:04:55.279590+00:00", + "start_time": "2026-09-23T13:14:35.951145", "status": "completed" }, "tags": [] @@ -405,10 +406,10 @@ "id": "72e21fc7", "metadata": { "papermill": { - "duration": 0.006588, - "end_time": "2026-09-15T05:04:55.306857+00:00", + "duration": 0.003917, + "end_time": "2026-09-23T13:14:35.970457", "exception": false, - "start_time": "2026-09-15T05:04:55.300269+00:00", + "start_time": "2026-09-23T13:14:35.966540", "status": "completed" }, "tags": [] @@ -432,16 +433,16 @@ "id": "eed948cc", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.241437Z", - "iopub.status.busy": "2026-09-18T15:53:11.240966Z", - "iopub.status.idle": "2026-09-18T15:53:11.250939Z", - "shell.execute_reply": "2026-09-18T15:53:11.249070Z" + "iopub.execute_input": "2026-09-23T13:14:35.979567Z", + "iopub.status.busy": "2026-09-23T13:14:35.979195Z", + "iopub.status.idle": "2026-09-23T13:14:35.983990Z", + "shell.execute_reply": "2026-09-23T13:14:35.983534Z" }, "papermill": { - "duration": 0.014115, - "end_time": "2026-09-15T05:04:55.326448+00:00", + "duration": 0.010217, + "end_time": "2026-09-23T13:14:35.984739", "exception": false, - "start_time": "2026-09-15T05:04:55.312333+00:00", + "start_time": "2026-09-23T13:14:35.974522", "status": "completed" }, "tags": [] @@ -531,10 +532,10 @@ "id": "85c22afd", "metadata": { "papermill": { - "duration": 0.006423, - "end_time": "2026-09-15T05:04:55.339052+00:00", + "duration": 0.00451, + "end_time": "2026-09-23T13:14:35.993557", "exception": false, - "start_time": "2026-09-15T05:04:55.332629+00:00", + "start_time": "2026-09-23T13:14:35.989047", "status": "completed" }, "tags": [] @@ -560,16 +561,16 @@ "id": "1c109513", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.254396Z", - "iopub.status.busy": "2026-09-18T15:53:11.253983Z", - "iopub.status.idle": "2026-09-18T15:53:11.270173Z", - "shell.execute_reply": "2026-09-18T15:53:11.268926Z" + "iopub.execute_input": "2026-09-23T13:14:36.003555Z", + "iopub.status.busy": "2026-09-23T13:14:36.003133Z", + "iopub.status.idle": "2026-09-23T13:14:46.638707Z", + "shell.execute_reply": "2026-09-23T13:14:46.636901Z" }, "papermill": { - "duration": 0.717506, - "end_time": "2026-09-15T05:04:56.063138+00:00", + "duration": 10.643771, + "end_time": "2026-09-23T13:14:46.641442", "exception": false, - "start_time": "2026-09-15T05:04:55.345632+00:00", + "start_time": "2026-09-23T13:14:35.997671", "status": "completed" }, "tags": [] @@ -579,22 +580,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "Reponse brute (generateur de reference (hors-ligne)) :\n", + "Reponse brute (gpt-5.6-sol) :\n", "============================================================\n", - "Patrons=Some => WillWait\n", - "Patrons=Full AND Hungry=Yes => WillWait\n", - "Hungry=Yes => WillWait\n", - "Patrons=None => NOT WillWait\n", - "Patrons=Full AND Price=$$$ => NOT WillWait\n", - "(generateur de reference)\n", + "**Constructing example-covering rules****Refining four decision rules**Hungry=Yes AND Patrons=Some => WillWait\n", + "Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + "Hungry=No => NOT WillWait\n", + "Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "============================================================\n", "\n", - "Regles candidates parsees : 5\n", - " R1: Patrons=Some => WillWait\n", - " R2: Patrons=Full AND Hungry=Yes => WillWait\n", - " R3: Hungry=Yes => WillWait\n", - " R4: Patrons=None => NOT WillWait\n", - " R5: Patrons=Full AND Price=$$$ => NOT WillWait\n" + "Regles candidates parsees : 3\n", + " R1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " R2: Hungry=No => NOT WillWait\n", + " R3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] } ], @@ -719,10 +716,10 @@ "id": "bf930a24", "metadata": { "papermill": { - "duration": 0.004764, - "end_time": "2026-09-15T05:04:56.073101+00:00", + "duration": 0.00386, + "end_time": "2026-09-23T13:14:46.650537", "exception": false, - "start_time": "2026-09-15T05:04:56.068337+00:00", + "start_time": "2026-09-23T13:14:46.646677", "status": "completed" }, "tags": [] @@ -747,10 +744,10 @@ "id": "d6bb9fe1", "metadata": { "papermill": { - "duration": 0.004886, - "end_time": "2026-09-15T05:04:56.082740+00:00", + "duration": 0.004847, + "end_time": "2026-09-23T13:14:46.659228", "exception": false, - "start_time": "2026-09-15T05:04:56.077854+00:00", + "start_time": "2026-09-23T13:14:46.654381", "status": "completed" }, "tags": [] @@ -777,16 +774,16 @@ "id": "2c0873ae", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.273431Z", - "iopub.status.busy": "2026-09-18T15:53:11.272980Z", - "iopub.status.idle": "2026-09-18T15:53:11.288450Z", - "shell.execute_reply": "2026-09-18T15:53:11.287119Z" + "iopub.execute_input": "2026-09-23T13:14:46.669225Z", + "iopub.status.busy": "2026-09-23T13:14:46.668810Z", + "iopub.status.idle": "2026-09-23T13:14:46.679377Z", + "shell.execute_reply": "2026-09-23T13:14:46.678971Z" }, "papermill": { - "duration": 0.015709, - "end_time": "2026-09-15T05:04:56.103455+00:00", + "duration": 0.016765, + "end_time": "2026-09-23T13:14:46.680094", "exception": false, - "start_time": "2026-09-15T05:04:56.087746+00:00", + "start_time": "2026-09-23T13:14:46.663329", "status": "completed" }, "tags": [] @@ -801,11 +798,9 @@ "\n", "Regle | TP | FP | FN | Prec | Recall | OK\n", "--------------------------------------------------------------------------------\n", - "R1: Patrons=Some => WillWait | 3 | 1 | 3 | 0.75 | 0.50 | NON\n", - "R2: Patrons=Full AND Hungry=Yes => WillWait | 3 | 1 | 3 | 0.75 | 0.50 | NON\n", - "R3: Hungry=Yes => WillWait | 6 | 1 | 0 | 0.86 | 1.00 | NON\n", - "R4: Patrons=None => NOT WillWait | 2 | 0 | 4 | 1.00 | 0.33 | OUI\n", - "R5: Patrons=Full AND Price=$$$ => NOT WillWait | 2 | 0 | 4 | 1.00 | 0.33 | OUI\n", + "R1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", + "R2: Hungry=No => NOT WillWait | 5 | 0 | 1 | 1.00 | 0.83 | OUI\n", + "R3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1 | 0 | 5 | 1.00 | 0.17 | OUI\n", "\n", "Legende : TP=Vrais Positifs, FP=Faux Positifs, FN=Faux Negatifs, OK=Consistante\n" ] @@ -908,10 +903,10 @@ "id": "0f9984a1", "metadata": { "papermill": { - "duration": 0.005221, - "end_time": "2026-09-15T05:04:56.113735+00:00", + "duration": 0.003955, + "end_time": "2026-09-23T13:14:46.688241", "exception": false, - "start_time": "2026-09-15T05:04:56.108514+00:00", + "start_time": "2026-09-23T13:14:46.684286", "status": "completed" }, "tags": [] @@ -944,16 +939,16 @@ "id": "9a30e01b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.291446Z", - "iopub.status.busy": "2026-09-18T15:53:11.291017Z", - "iopub.status.idle": "2026-09-18T15:53:11.302350Z", - "shell.execute_reply": "2026-09-18T15:53:11.300845Z" + "iopub.execute_input": "2026-09-23T13:14:46.698323Z", + "iopub.status.busy": "2026-09-23T13:14:46.697913Z", + "iopub.status.idle": "2026-09-23T13:14:46.703578Z", + "shell.execute_reply": "2026-09-23T13:14:46.703004Z" }, "papermill": { - "duration": 0.012765, - "end_time": "2026-09-15T05:04:56.131628+00:00", + "duration": 0.011349, + "end_time": "2026-09-23T13:14:46.704353", "exception": false, - "start_time": "2026-09-15T05:04:56.118863+00:00", + "start_time": "2026-09-23T13:14:46.693004", "status": "completed" }, "tags": [] @@ -964,20 +959,19 @@ "output_type": "stream", "text": [ "Synthese de la verification :\n", - " Regles candidates : 5\n", - " Regles validees : 2\n", - " Regles rejetees : 3\n", + " Regles candidates : 3\n", + " Regles validees : 3\n", + " Regles rejetees : 0\n", "\n", "Regles validees (consistantes, prises pour le modele) :\n", - " V1: Patrons=None => NOT WillWait\n", - " V2: Patrons=Full AND Price=$$$ => NOT WillWait\n", + " V1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " V2: Hungry=No => NOT WillWait\n", + " V3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", "Regles rejetees par l'oracle (au moins un faux positif) :\n", - " X Patrons=Some => WillWait (FP=1, precision=0.75)\n", - " X Patrons=Full AND Hungry=Yes => WillWait (FP=1, precision=0.75)\n", - " X Hungry=Yes => WillWait (FP=1, precision=0.86)\n", + " (aucune ce run)\n", "\n", - "Couverture des positifs par les regles validees : 0/6\n", + "Couverture des positifs par les regles validees : 3/6\n", "Le concept WillWait est DISJONCTIF : aucune clause de Horn unique ne\n", "couvre tous les positifs sans faux positif. Il faut COMBINER plusieurs\n", "clauses (section 6, pipeline iteratif) -- exactement la limite rencontree\n", @@ -1035,10 +1029,10 @@ "id": "74c02d03", "metadata": { "papermill": { - "duration": 0.005207, - "end_time": "2026-09-15T05:04:56.142021+00:00", + "duration": 0.004026, + "end_time": "2026-09-23T13:14:46.712647", "exception": false, - "start_time": "2026-09-15T05:04:56.136814+00:00", + "start_time": "2026-09-23T13:14:46.708621", "status": "completed" }, "tags": [] @@ -1074,16 +1068,16 @@ "id": "83e5f5eb", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.305851Z", - "iopub.status.busy": "2026-09-18T15:53:11.305374Z", - "iopub.status.idle": "2026-09-18T15:53:11.329191Z", - "shell.execute_reply": "2026-09-18T15:53:11.326131Z" + "iopub.execute_input": "2026-09-23T13:14:46.721932Z", + "iopub.status.busy": "2026-09-23T13:14:46.721591Z", + "iopub.status.idle": "2026-09-23T13:15:59.711668Z", + "shell.execute_reply": "2026-09-23T13:15:59.711133Z" }, "papermill": { - "duration": 1.023799, - "end_time": "2026-09-15T05:04:57.171256+00:00", + "duration": 72.999162, + "end_time": "2026-09-23T13:15:59.715772", "exception": false, - "start_time": "2026-09-15T05:04:56.147457+00:00", + "start_time": "2026-09-23T13:14:46.716610", "status": "completed" }, "tags": [] @@ -1093,28 +1087,52 @@ "name": "stdout", "output_type": "stream", "text": [ - "Traces Chain-of-Thought (reference deterministe)\n", - "=================================================================\n", + "Traces Chain-of-Thought (vrai LLM)\n", + "=================================================================\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 0 [+] Pat=Some, Type=French, Hungry=Yes\n", - " Etape 1: Patrons = Some\n", - " Raisonnement : La frequentation est 'Some'\n", + " Etape 1: 1. Avec Patrons=Some, le restaurant n’est pas bondé.\n", + " Etape 2: 2. L’attente estimée à 0-10 minutes est courte.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Some => WillWait\n", + " => Regle extraite : Patrons=Some AND WaitEstimate=0-10 => WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 1 [+] Pat=Full, Type=Thai, Hungry=Yes\n", - " Etape 1: Patrons = Full\n", - " Raisonnement : La frequentation est 'Full'\n", - " Etape 2: Hungry = Yes\n", - " Raisonnement : Si le restaurant est plein, la faim tranche\n", - " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Full AND Hungry=Yes => WillWait\n", + " Etape 1: **Identifying restaurant dataset****Checking row 2 label**1. Le restaurant est p\n", + " Raisonnement : **Identifying restaurant dataset****Checking row 2 label**1. Le restaurant est plein et l’attente estimée est de 30 à 60 minutes.\n", + " Etape 2: 2. Pour cette combinaison avec Type=Thai, le client n’attend pas.\n", + " => Decision : WillWait=False\n", + " => Regle extraite : Patrons=Full AND Type=Thai AND WaitEstimate=30-60 => NOT WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 2 [-] Pat=Some, Type=Burger, Hungry=No\n", - " Etape 1: Patrons = Some\n", - " Raisonnement : La frequentation est 'Some'\n", + " Etape 1: **J’identifie la règle Patrons=Some**1. Patrons=Some indique que le restaurant n\n", + " Raisonnement : **J’identifie la règle Patrons=Some**1. Patrons=Some indique que le restaurant n’est pas plein.\n", + " Etape 2: 2. Dans cette règle de classification, le client attend.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Some => WillWait\n", + " => Regle extraite : Patrons=Some => WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 4 [-] Pat=Full, Type=French, Hungry=No\n", " Etape 1: Patrons = Full\n", @@ -1122,21 +1140,32 @@ " Etape 2: Hungry = No\n", " Raisonnement : Si le restaurant est plein, la faim tranche\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=Full AND Hungry=No => NOT WillWait\n", + " => Regle extraite : Patrons=Full AND Hungry=No => NOT WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 6 [-] Pat=None, Type=Burger, Hungry=No\n", - " Etape 1: Patrons = None\n", - " Raisonnement : La frequentation est 'None'\n", + " Etape 1: **Checking rule validity**1. Patrons=None indique qu’il n’y a personne au restau\n", + " Raisonnement : **Checking rule validity**1. Patrons=None indique qu’il n’y a personne au restaurant.\n", + " Etape 2: 2. Dans ce cas, la règle prédit que le client n’attendra pas.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=None => NOT WillWait\n", + " => Regle extraite : Patrons=None AND WaitEstimate=0-10 => NOT WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "Ex 11 [+] Pat=Full, Type=Burger, Hungry=Yes\n", - " Etape 1: Patrons = Full\n", - " Raisonnement : La frequentation est 'Full'\n", - " Etape 2: Hungry = Yes\n", - " Raisonnement : Si le restaurant est plein, la faim tranche\n", + " Etape 1: **Inferring AIMA rows****Testing candidate rule****Selecting distinguishing cond\n", + " Raisonnement : **Inferring AIMA rows****Testing candidate rule****Selecting distinguishing conditions**Le restaurant est plein, mais ce seul critère ne suffit pas. Dans les exemples connus, un client face à un restaurant Burger avec une attente estimée à 30-60 minutes attend.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Full AND Hungry=Yes => WillWait\n" + " => Regle extraite : Type=Burger AND WaitEstimate=30-60 => WillWait\n" ] } ], @@ -1248,10 +1277,10 @@ "id": "3653b321", "metadata": { "papermill": { - "duration": 0.006184, - "end_time": "2026-09-15T05:04:57.182632+00:00", + "duration": 0.003592, + "end_time": "2026-09-23T13:15:59.723308", "exception": false, - "start_time": "2026-09-15T05:04:57.176448+00:00", + "start_time": "2026-09-23T13:15:59.719716", "status": "completed" }, "tags": [] @@ -1287,16 +1316,16 @@ "id": "dc08268f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.332521Z", - "iopub.status.busy": "2026-09-18T15:53:11.332053Z", - "iopub.status.idle": "2026-09-18T15:53:11.342174Z", - "shell.execute_reply": "2026-09-18T15:53:11.340849Z" + "iopub.execute_input": "2026-09-23T13:15:59.731690Z", + "iopub.status.busy": "2026-09-23T13:15:59.731490Z", + "iopub.status.idle": "2026-09-23T13:15:59.736165Z", + "shell.execute_reply": "2026-09-23T13:15:59.735765Z" }, "papermill": { - "duration": 0.01325, - "end_time": "2026-09-15T05:04:57.201334+00:00", + "duration": 0.009604, + "end_time": "2026-09-23T13:15:59.736817", "exception": false, - "start_time": "2026-09-15T05:04:57.188084+00:00", + "start_time": "2026-09-23T13:15:59.727213", "status": "completed" }, "tags": [] @@ -1311,16 +1340,18 @@ "\n", "Regles extraites des 6 traces CoT :\n", " Total (avant deduplication) : 6\n", - " Uniques : 4\n", + " Uniques : 6\n", "\n", - " C1: Patrons=Some => WillWait\n", - " C2: Patrons=Full AND Hungry=Yes => WillWait\n", - " C3: Patrons=Full AND Hungry=No => NOT WillWait\n", - " C4: Patrons=None => NOT WillWait\n", + " C1: Patrons=Some AND WaitEstimate=0-10 => WillWait\n", + " C2: Patrons=Full AND Type=Thai AND WaitEstimate=30-60 => NOT WillWait\n", + " C3: Patrons=Some => WillWait\n", + " C4: Patrons=Full AND Hungry=No => NOT WillWait\n", + " C5: Patrons=None AND WaitEstimate=0-10 => NOT WillWait\n", + " C6: Type=Burger AND WaitEstimate=30-60 => WillWait\n", "\n", "Verification des regles extraites (vs regles du LLM) :\n", - " Regles LLM direct : 5 candidates\n", - " Regles CoT extraites : 4 uniques\n", + " Regles LLM direct : 3 candidates\n", + " Regles CoT extraites : 6 uniques\n", "\n", "Les regles extraites des traces CoT sont plus ciblees\n", "car elles reflettent le raisonnement effectif sur chaque exemple,\n", @@ -1372,10 +1403,10 @@ "id": "a575226a", "metadata": { "papermill": { - "duration": 0.006326, - "end_time": "2026-09-15T05:04:57.213574+00:00", + "duration": 0.003881, + "end_time": "2026-09-23T13:15:59.744476", "exception": false, - "start_time": "2026-09-15T05:04:57.207248+00:00", + "start_time": "2026-09-23T13:15:59.740595", "status": "completed" }, "tags": [] @@ -1406,10 +1437,10 @@ "id": "1bd557a0", "metadata": { "papermill": { - "duration": 0.006688, - "end_time": "2026-09-15T05:04:57.226844+00:00", + "duration": 0.004697, + "end_time": "2026-09-23T13:15:59.753370", "exception": false, - "start_time": "2026-09-15T05:04:57.220156+00:00", + "start_time": "2026-09-23T13:15:59.748673", "status": "completed" }, "tags": [] @@ -1449,16 +1480,16 @@ "id": "f9d67f71", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.345529Z", - "iopub.status.busy": "2026-09-18T15:53:11.345025Z", - "iopub.status.idle": "2026-09-18T15:53:11.363036Z", - "shell.execute_reply": "2026-09-18T15:53:11.361635Z" + "iopub.execute_input": "2026-09-23T13:15:59.763236Z", + "iopub.status.busy": "2026-09-23T13:15:59.763038Z", + "iopub.status.idle": "2026-09-23T13:16:10.061660Z", + "shell.execute_reply": "2026-09-23T13:16:10.060741Z" }, "papermill": { - "duration": 0.228017, - "end_time": "2026-09-15T05:04:57.461514+00:00", + "duration": 10.304663, + "end_time": "2026-09-23T13:16:10.062596", "exception": false, - "start_time": "2026-09-15T05:04:57.233497+00:00", + "start_time": "2026-09-23T13:15:59.757933", "status": "completed" }, "tags": [] @@ -1470,19 +1501,16 @@ "text": [ "Pipeline Neuro-Symbolique - Resultat\n", "=======================================================\n", - " Candidates generees : 5\n", - " Regles validees : 2\n", - " Regles rejetees : 3\n", - " Couverture positifs : 0%\n", + " Candidates generees : 3\n", + " Regles validees : 3\n", + " Regles rejetees : 0\n", + " Couverture positifs : 50%\n", "\n", "Regles validees :\n", - " [OK] Patrons=None => NOT WillWait (TP=2, FP=0)\n", - " [OK] Patrons=Full AND Price=$$$ => NOT WillWait (TP=2, FP=0)\n", - "\n", - "Regles rejetees :\n", - " [KO] Patrons=Some => WillWait (FP=1)\n", - " [KO] Patrons=Full AND Hungry=Yes => WillWait (FP=1)\n", - " [KO] Hungry=Yes => WillWait (FP=1)\n" + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", + " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", + "\n" ] } ], @@ -1602,10 +1630,10 @@ "id": "2f9d2c01", "metadata": { "papermill": { - "duration": 0.010691, - "end_time": "2026-09-15T05:04:57.485374+00:00", + "duration": 0.004658, + "end_time": "2026-09-23T13:16:10.071848", "exception": false, - "start_time": "2026-09-15T05:04:57.474683+00:00", + "start_time": "2026-09-23T13:16:10.067190", "status": "completed" }, "tags": [] @@ -1634,16 +1662,16 @@ "id": "8917b738", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.366203Z", - "iopub.status.busy": "2026-09-18T15:53:11.365736Z", - "iopub.status.idle": "2026-09-18T15:53:11.372568Z", - "shell.execute_reply": "2026-09-18T15:53:11.371209Z" + "iopub.execute_input": "2026-09-23T13:16:10.081611Z", + "iopub.status.busy": "2026-09-23T13:16:10.081411Z", + "iopub.status.idle": "2026-09-23T13:17:39.113220Z", + "shell.execute_reply": "2026-09-23T13:17:39.112841Z" }, "papermill": { - "duration": 1.26958, - "end_time": "2026-09-15T05:04:58.765496+00:00", + "duration": 89.041358, + "end_time": "2026-09-23T13:17:39.117270", "exception": false, - "start_time": "2026-09-15T05:04:57.495916+00:00", + "start_time": "2026-09-23T13:16:10.075912", "status": "completed" }, "tags": [] @@ -1654,25 +1682,34 @@ "output_type": "stream", "text": [ "\n", - "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Pipeline Neuro-Symbolique - Resultat\n", "=======================================================\n", - " Candidates generees : 6\n", - " Regles validees : 3\n", - " Regles rejetees : 3\n", - " Couverture positifs : 0%\n", + " Candidates generees : 9\n", + " Regles validees : 5\n", + " Regles rejetees : 4\n", + " Couverture positifs : 50%\n", "\n", "Regles validees :\n", - " [OK] Patrons=None => NOT WillWait (TP=2, FP=0)\n", - " [OK] Patrons=Full AND Price=$$$ => NOT WillWait (TP=2, FP=0)\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", + " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", " [OK] Patrons=Full AND Hungry=No => NOT WillWait (TP=2, FP=0)\n", + " [OK] Patrons=None => NOT WillWait (TP=2, FP=0)\n", "\n", "Regles rejetees :\n", + " [KO] Patrons=Some AND WaitEstimate=0-10 => WillWait (FP=1)\n", + " [KO] Bar=No AND WaitEstimate=30-60 => NOT WillWait (FP=1)\n", + " [KO] Patrons=Full AND WaitEstimate=10-30 AND Price=$ => WillWait (FP=1)\n", " [KO] Patrons=Some => WillWait (FP=1)\n", - " [KO] Patrons=Full AND Hungry=Yes => WillWait (FP=1)\n", - " [KO] Hungry=Yes => WillWait (FP=1)\n", "\n", - "Comparaison : sans CoT (2 validees) vs avec CoT (3 validees)\n" + "Comparaison : sans CoT (3 validees) vs avec CoT (5 validees)\n" ] } ], @@ -1691,10 +1728,10 @@ "id": "a2edb6e2", "metadata": { "papermill": { - "duration": 0.00555, - "end_time": "2026-09-15T05:04:58.776964+00:00", + "duration": 0.004515, + "end_time": "2026-09-23T13:17:39.125978", "exception": false, - "start_time": "2026-09-15T05:04:58.771414+00:00", + "start_time": "2026-09-23T13:17:39.121463", "status": "completed" }, "tags": [] @@ -1730,16 +1767,16 @@ "id": "54a6b7c4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.375483Z", - "iopub.status.busy": "2026-09-18T15:53:11.375154Z", - "iopub.status.idle": "2026-09-18T15:53:11.384432Z", - "shell.execute_reply": "2026-09-18T15:53:11.383230Z" + "iopub.execute_input": "2026-09-23T13:17:39.135389Z", + "iopub.status.busy": "2026-09-23T13:17:39.135180Z", + "iopub.status.idle": "2026-09-23T13:17:39.139608Z", + "shell.execute_reply": "2026-09-23T13:17:39.139125Z" }, "papermill": { - "duration": 0.013935, - "end_time": "2026-09-15T05:04:58.797033+00:00", + "duration": 0.010023, + "end_time": "2026-09-23T13:17:39.140437", "exception": false, - "start_time": "2026-09-15T05:04:58.783098+00:00", + "start_time": "2026-09-23T13:17:39.130414", "status": "completed" }, "tags": [] @@ -1753,22 +1790,23 @@ "=======================================================\n", "\n", "--- Sans CoT ---\n", - " Taux d'acceptation : 2/5 (40%)\n", - " Couverture : 0% des positifs\n", - " Regles positives : 0\n", + " Taux d'acceptation : 3/3 (100%)\n", + " Couverture : 50% des positifs\n", + " Regles positives : 1\n", " Regles negatives : 2\n", "\n", "--- Avec CoT ---\n", - " Taux d'acceptation : 3/6 (50%)\n", - " Couverture : 0% des positifs\n", - " Regles positives : 0\n", - " Regles negatives : 3\n", + " Taux d'acceptation : 5/9 (56%)\n", + " Couverture : 50% des positifs\n", + " Regles positives : 1\n", + " Regles negatives : 4\n", "\n", "Metriques par regle validee (sans CoT) :\n", " Regle | Precision | Recall | F1\n", " --------------------------------------------------------------\n", - " Patrons=None => NOT WillWait | 1.00 | 0.33 | 0.50\n", - " Patrons=Full AND Price=$$$ => NOT WillWait | 1.00 | 0.33 | 0.50\n" + " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 1.00 | 0.50 | 0.67\n", + " Hungry=No => NOT WillWait | 1.00 | 0.83 | 0.91\n", + " Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1.00 | 0.17 | 0.29\n" ] } ], @@ -1800,10 +1838,10 @@ "id": "d74db354", "metadata": { "papermill": { - "duration": 0.006507, - "end_time": "2026-09-15T05:04:58.810313+00:00", + "duration": 0.004341, + "end_time": "2026-09-23T13:17:39.150053", "exception": false, - "start_time": "2026-09-15T05:04:58.803806+00:00", + "start_time": "2026-09-23T13:17:39.145712", "status": "completed" }, "tags": [] @@ -1827,10 +1865,10 @@ "id": "3c2e7728", "metadata": { "papermill": { - "duration": 0.006109, - "end_time": "2026-09-15T05:04:58.823206+00:00", + "duration": 0.004156, + "end_time": "2026-09-23T13:17:39.158283", "exception": false, - "start_time": "2026-09-15T05:04:58.817097+00:00", + "start_time": "2026-09-23T13:17:39.154127", "status": "completed" }, "tags": [] @@ -1855,16 +1893,16 @@ "id": "dada4cc8", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.387636Z", - "iopub.status.busy": "2026-09-18T15:53:11.387131Z", - "iopub.status.idle": "2026-09-18T15:53:11.415964Z", - "shell.execute_reply": "2026-09-18T15:53:11.414342Z" + "iopub.execute_input": "2026-09-23T13:17:39.167744Z", + "iopub.status.busy": "2026-09-23T13:17:39.167545Z", + "iopub.status.idle": "2026-09-23T13:17:52.928243Z", + "shell.execute_reply": "2026-09-23T13:17:52.927803Z" }, "papermill": { - "duration": 0.193618, - "end_time": "2026-09-15T05:04:59.024532+00:00", + "duration": 13.766136, + "end_time": "2026-09-23T13:17:52.928909", "exception": false, - "start_time": "2026-09-15T05:04:58.830914+00:00", + "start_time": "2026-09-23T13:17:39.162773", "status": "completed" }, "tags": [] @@ -1874,28 +1912,40 @@ "name": "stdout", "output_type": "stream", "text": [ - "Pipeline iteratif avec raffinement (re-prompt sur les erreurs residuelles)" + "Pipeline iteratif avec raffinement (re-prompt sur les erreurs residuelles)\n", + "========================================================================\n", + "(Tolerance : max 1 faux positif par regle)\n", + "\n", + "Iteration 1 : 6 positif(s) non couvert(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + " Nouvelles regles validees : 1\n", + " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", + " Positifs restants : 3\n", "\n", - "========================================================================\n", - "(Tolerance : max 1 faux positif par regle)\n", - "\n", - "Iteration 1 : 6 positif(s) non couvert(s)\n", + "Iteration 2 : 3 positif(s) non couvert(s)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " [reponse LLM recue mais aucune regle parsable -> repli deterministe]\n", " Nouvelles regles validees : 3\n", " Patrons=Some => WillWait (TP=3, FP=1)\n", " Patrons=Full AND Hungry=Yes => WillWait (TP=3, FP=1)\n", " Hungry=Yes => WillWait (TP=6, FP=1)\n", " Positifs restants : 0\n", "\n", - "Regles finales : 3\n", - " F1: Patrons=Some => WillWait (TP=3, FP=1)\n", - " F2: Patrons=Full AND Hungry=Yes => WillWait (TP=3, FP=1)\n", - " F3: Hungry=Yes => WillWait (TP=6, FP=1)\n", + "Regles finales : 4\n", + " F1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", + " F2: Patrons=Some => WillWait (TP=3, FP=1)\n", + " F3: Patrons=Full AND Hungry=Yes => WillWait (TP=3, FP=1)\n", + " F4: Hungry=Yes => WillWait (TP=6, FP=1)\n", "\n", "Couverture finale : 6/6 positifs\n", "Faux positifs totaux (union) : 2 (indices: [2, 9])\n" @@ -2006,10 +2056,10 @@ "id": "3cc1a67b", "metadata": { "papermill": { - "duration": 0.00673, - "end_time": "2026-09-15T05:04:59.037734+00:00", + "duration": 0.004159, + "end_time": "2026-09-23T13:17:52.937543", "exception": false, - "start_time": "2026-09-15T05:04:59.031004+00:00", + "start_time": "2026-09-23T13:17:52.933384", "status": "completed" }, "tags": [] @@ -2044,10 +2094,10 @@ "id": "74eec2fe", "metadata": { "papermill": { - "duration": 0.006652, - "end_time": "2026-09-15T05:04:59.050741+00:00", + "duration": 0.004251, + "end_time": "2026-09-23T13:17:52.946440", "exception": false, - "start_time": "2026-09-15T05:04:59.044089+00:00", + "start_time": "2026-09-23T13:17:52.942189", "status": "completed" }, "tags": [] @@ -2077,16 +2127,16 @@ "id": "a916457d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.419506Z", - "iopub.status.busy": "2026-09-18T15:53:11.418878Z", - "iopub.status.idle": "2026-09-18T15:53:11.429239Z", - "shell.execute_reply": "2026-09-18T15:53:11.427701Z" + "iopub.execute_input": "2026-09-23T13:17:52.955982Z", + "iopub.status.busy": "2026-09-23T13:17:52.955737Z", + "iopub.status.idle": "2026-09-23T13:18:21.849319Z", + "shell.execute_reply": "2026-09-23T13:18:21.847732Z" }, "papermill": { - "duration": 0.517515, - "end_time": "2026-09-15T05:04:59.575092+00:00", + "duration": 28.902465, + "end_time": "2026-09-23T13:18:21.853143", "exception": false, - "start_time": "2026-09-15T05:04:59.057577+00:00", + "start_time": "2026-09-23T13:17:52.950678", "status": "completed" }, "tags": [] @@ -2096,14 +2146,43 @@ "name": "stdout", "output_type": "stream", "text": [ - "Generateur : reference deterministe\n", - "On rejoue la generation 1 fois sur le meme prompt :\n", - "------------------------------------------------------------\n", - " Run 1 : 5 regles generees, 2 validees par l'oracle\n", - " [OK] Patrons=None => NOT WillWait\n", - " [OK] Patrons=Full AND Price=$$$ => NOT WillWait\n", + "Generateur : vrai LLM (gpt-5.6-sol)\n", + "On rejoue la generation 3 fois sur le meme prompt :\n", + "------------------------------------------------------------\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Run 1 : 3 regles generees, 3 validees par l'oracle\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Run 2 : 3 regles generees, 3 validees par l'oracle\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Run 3 : 3 regles generees, 3 validees par l'oracle\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", - "(1 seul run : generateur deterministe, stabilite triviale a 100%.)\n" + "Regles validees stables sur les 3 runs : 3/3 (stabilite 100%)\n", + "Le generateur varie d'un run a l'autre ; l'oracle, lui, donne toujours\n", + "le meme verdict -- c'est lui qui rend le resultat reproductible.\n" ] } ], @@ -2147,16 +2226,16 @@ "id": "426133ee", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.432952Z", - "iopub.status.busy": "2026-09-18T15:53:11.432448Z", - "iopub.status.idle": "2026-09-18T15:53:11.442821Z", - "shell.execute_reply": "2026-09-18T15:53:11.441263Z" + "iopub.execute_input": "2026-09-23T13:18:21.865956Z", + "iopub.status.busy": "2026-09-23T13:18:21.865770Z", + "iopub.status.idle": "2026-09-23T13:18:27.679302Z", + "shell.execute_reply": "2026-09-23T13:18:27.678067Z" }, "papermill": { - "duration": 0.190702, - "end_time": "2026-09-15T05:04:59.771799+00:00", + "duration": 5.820432, + "end_time": "2026-09-23T13:18:27.681110", "exception": false, - "start_time": "2026-09-15T05:04:59.581097+00:00", + "start_time": "2026-09-23T13:18:21.860678", "status": "completed" }, "tags": [] @@ -2168,7 +2247,7 @@ "text": [ "Generateur | gen | valides | couverture\n", "----------------------------------------------------------------------------\n", - "Reference (pas de cle) | 5 generees | 2 validees | couverture positifs 0/6\n", + "Vrai LLM | 3 generees | 3 validees | couverture positifs 6/6\n", "Reference deterministe | 5 generees | 2 validees | couverture positifs 0/6\n", "\n", "Deux generateurs, un seul juge : l'oracle symbolique. C'est lui qui rend\n", @@ -2207,16 +2286,16 @@ "id": "6e670307", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.446281Z", - "iopub.status.busy": "2026-09-18T15:53:11.445790Z", - "iopub.status.idle": "2026-09-18T15:53:11.455100Z", - "shell.execute_reply": "2026-09-18T15:53:11.453672Z" + "iopub.execute_input": "2026-09-23T13:18:27.692684Z", + "iopub.status.busy": "2026-09-23T13:18:27.692475Z", + "iopub.status.idle": "2026-09-23T13:18:36.529469Z", + "shell.execute_reply": "2026-09-23T13:18:36.527963Z" }, "papermill": { - "duration": 0.178074, - "end_time": "2026-09-15T05:04:59.955853+00:00", + "duration": 8.843598, + "end_time": "2026-09-23T13:18:36.530878", "exception": false, - "start_time": "2026-09-15T05:04:59.777779+00:00", + "start_time": "2026-09-23T13:18:27.687280", "status": "completed" }, "tags": [] @@ -2226,16 +2305,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Regles retenues par la boucle generique : 2" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " [OK] Patrons=None => NOT WillWait\n", - " [OK] Patrons=Full AND Price=$$$ => NOT WillWait\n", + "Regles retenues par la boucle generique : 3\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", "Memes deux lignes, autres (generateur, verificateur) ailleurs dans le depot :\n", " - Preuve Lean : un LLM propose des tactiques -> le noyau Lean verifie\n", @@ -2278,10 +2351,10 @@ "id": "d4216022", "metadata": { "papermill": { - "duration": 0.007001, - "end_time": "2026-09-15T05:04:59.970136+00:00", + "duration": 0.004441, + "end_time": "2026-09-23T13:18:36.540193", "exception": false, - "start_time": "2026-09-15T05:04:59.963135+00:00", + "start_time": "2026-09-23T13:18:36.535752", "status": "completed" }, "tags": [] @@ -2316,10 +2389,10 @@ "id": "ba9beb92", "metadata": { "papermill": { - "duration": 0.009414, - "end_time": "2026-09-15T05:04:59.986655+00:00", + "duration": 0.004433, + "end_time": "2026-09-23T13:18:36.549503", "exception": false, - "start_time": "2026-09-15T05:04:59.977241+00:00", + "start_time": "2026-09-23T13:18:36.545070", "status": "completed" }, "tags": [] @@ -2335,10 +2408,10 @@ "id": "3c800f32", "metadata": { "papermill": { - "duration": 0.008849, - "end_time": "2026-09-15T05:05:00.002685+00:00", + "duration": 0.004811, + "end_time": "2026-09-23T13:18:36.558392", "exception": false, - "start_time": "2026-09-15T05:04:59.993836+00:00", + "start_time": "2026-09-23T13:18:36.553581", "status": "completed" }, "tags": [] @@ -2361,16 +2434,16 @@ "id": "5101d0d6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.458211Z", - "iopub.status.busy": "2026-09-18T15:53:11.457808Z", - "iopub.status.idle": "2026-09-18T15:53:11.472331Z", - "shell.execute_reply": "2026-09-18T15:53:11.470833Z" + "iopub.execute_input": "2026-09-23T13:18:36.568268Z", + "iopub.status.busy": "2026-09-23T13:18:36.568082Z", + "iopub.status.idle": "2026-09-23T13:18:36.574688Z", + "shell.execute_reply": "2026-09-23T13:18:36.574329Z" }, "papermill": { - "duration": 0.027352, - "end_time": "2026-09-15T05:05:00.039128+00:00", + "duration": 0.012291, + "end_time": "2026-09-23T13:18:36.575337", "exception": false, - "start_time": "2026-09-15T05:05:00.011776+00:00", + "start_time": "2026-09-23T13:18:36.563046", "status": "completed" }, "tags": [] @@ -2380,14 +2453,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Verification des regles candidates du domaine film" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", + "Verification des regles candidates du domaine film\n", "================================================================\n", "Regle | TP | FP | FN | OK | Couv.\n", "----------------------------------------------------------------\n", @@ -2485,10 +2551,10 @@ "id": "a5281a2e", "metadata": { "papermill": { - "duration": 0.010227, - "end_time": "2026-09-15T05:05:00.060516+00:00", + "duration": 0.004948, + "end_time": "2026-09-23T13:18:36.585274", "exception": false, - "start_time": "2026-09-15T05:05:00.050289+00:00", + "start_time": "2026-09-23T13:18:36.580326", "status": "completed" }, "tags": [] @@ -2514,16 +2580,16 @@ "id": "0abbe4b6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.476863Z", - "iopub.status.busy": "2026-09-18T15:53:11.476254Z", - "iopub.status.idle": "2026-09-18T15:53:11.483171Z", - "shell.execute_reply": "2026-09-18T15:53:11.481772Z" + "iopub.execute_input": "2026-09-23T13:18:36.596217Z", + "iopub.status.busy": "2026-09-23T13:18:36.595849Z", + "iopub.status.idle": "2026-09-23T13:18:36.599851Z", + "shell.execute_reply": "2026-09-23T13:18:36.599218Z" }, "papermill": { - "duration": 0.017797, - "end_time": "2026-09-15T05:05:00.086463+00:00", + "duration": 0.010535, + "end_time": "2026-09-23T13:18:36.600681", "exception": false, - "start_time": "2026-09-15T05:05:00.068666+00:00", + "start_time": "2026-09-23T13:18:36.590146", "status": "completed" }, "tags": [] @@ -2564,10 +2630,10 @@ "id": "2936e442", "metadata": { "papermill": { - "duration": 0.0095, - "end_time": "2026-09-15T05:05:00.105410+00:00", + "duration": 0.004968, + "end_time": "2026-09-23T13:18:36.610663", "exception": false, - "start_time": "2026-09-15T05:05:00.095910+00:00", + "start_time": "2026-09-23T13:18:36.605695", "status": "completed" }, "tags": [] @@ -2589,16 +2655,16 @@ "id": "174aa8b0", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.486560Z", - "iopub.status.busy": "2026-09-18T15:53:11.486068Z", - "iopub.status.idle": "2026-09-18T15:53:11.498738Z", - "shell.execute_reply": "2026-09-18T15:53:11.497408Z" + "iopub.execute_input": "2026-09-23T13:18:36.622247Z", + "iopub.status.busy": "2026-09-23T13:18:36.621850Z", + "iopub.status.idle": "2026-09-23T13:20:07.200579Z", + "shell.execute_reply": "2026-09-23T13:20:07.199847Z" }, "papermill": { - "duration": 1.508031, - "end_time": "2026-09-15T05:05:01.621392+00:00", + "duration": 90.590286, + "end_time": "2026-09-23T13:20:07.206110", "exception": false, - "start_time": "2026-09-15T05:05:00.113361+00:00", + "start_time": "2026-09-23T13:18:36.615824", "status": "completed" }, "tags": [] @@ -2612,11 +2678,11 @@ "================================================================\n", "Metrique | Direct | CoT\n", "----------------------------------------------------------------\n", - "Candidates generees | 5 | 6\n", - "Regles validees (consistantes) | 2 | 3\n", - "Regles rejetees (inconsistantes) | 3 | 3\n", - "Taux d'acceptation | 40% | 50%\n", - "Couverture positifs | 0% | 0%\n", + "Candidates generees | 3 | 9\n", + "Regles validees (consistantes) | 3 | 5\n", + "Regles rejetees (inconsistantes) | 0 | 4\n", + "Taux d'acceptation | 100% | 56%\n", + "Couverture positifs | 50% | 100%\n", "\n", "Lecture : sur CE jeu d'exemples, le concept WillWait admet des regles\n", "POSITIVE consistantes (Patrons=Some AND Hungry=Yes, etc., cf. section 3)\n", @@ -2683,10 +2749,10 @@ "id": "sl7ex2var-md", "metadata": { "papermill": { - "duration": 0.00704, - "end_time": "2026-09-15T05:05:01.635526+00:00", + "duration": 0.004863, + "end_time": "2026-09-23T13:20:07.215893", "exception": false, - "start_time": "2026-09-15T05:05:01.628486+00:00", + "start_time": "2026-09-23T13:20:07.211030", "status": "completed" }, "tags": [] @@ -2709,16 +2775,16 @@ "id": "sl7ex2var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.502934Z", - "iopub.status.busy": "2026-09-18T15:53:11.502421Z", - "iopub.status.idle": "2026-09-18T15:53:11.510100Z", - "shell.execute_reply": "2026-09-18T15:53:11.508331Z" + "iopub.execute_input": "2026-09-23T13:20:07.226539Z", + "iopub.status.busy": "2026-09-23T13:20:07.226236Z", + "iopub.status.idle": "2026-09-23T13:20:07.229840Z", + "shell.execute_reply": "2026-09-23T13:20:07.229380Z" }, "papermill": { - "duration": 0.013385, - "end_time": "2026-09-15T05:05:01.655733+00:00", + "duration": 0.009975, + "end_time": "2026-09-23T13:20:07.230552", "exception": false, - "start_time": "2026-09-15T05:05:01.642348+00:00", + "start_time": "2026-09-23T13:20:07.220577", "status": "completed" }, "tags": [] @@ -2766,10 +2832,10 @@ "id": "0962260b", "metadata": { "papermill": { - "duration": 0.007103, - "end_time": "2026-09-15T05:05:01.669999+00:00", + "duration": 0.005238, + "end_time": "2026-09-23T13:20:07.240889", "exception": false, - "start_time": "2026-09-15T05:05:01.662896+00:00", + "start_time": "2026-09-23T13:20:07.235651", "status": "completed" }, "tags": [] @@ -2791,16 +2857,16 @@ "id": "3548d43c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.514751Z", - "iopub.status.busy": "2026-09-18T15:53:11.514241Z", - "iopub.status.idle": "2026-09-18T15:53:11.529032Z", - "shell.execute_reply": "2026-09-18T15:53:11.527440Z" + "iopub.execute_input": "2026-09-23T13:20:07.252225Z", + "iopub.status.busy": "2026-09-23T13:20:07.252026Z", + "iopub.status.idle": "2026-09-23T13:20:07.258204Z", + "shell.execute_reply": "2026-09-23T13:20:07.257756Z" }, "papermill": { - "duration": 0.018315, - "end_time": "2026-09-15T05:05:01.696386+00:00", + "duration": 0.012574, + "end_time": "2026-09-23T13:20:07.258876", "exception": false, - "start_time": "2026-09-15T05:05:01.678071+00:00", + "start_time": "2026-09-23T13:20:07.246302", "status": "completed" }, "tags": [] @@ -2810,14 +2876,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Detection d'hallucinations sur les regles problematiques" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", + "Detection d'hallucinations sur les regles problematiques\n", "==============================================================\n", "H1: Patrons=Full AND Patrons=Some => WillWait\n", " -> HALLUCINATION\n", @@ -2933,10 +2992,10 @@ "id": "sl7ex3var-md", "metadata": { "papermill": { - "duration": 0.007406, - "end_time": "2026-09-15T05:05:01.711347+00:00", + "duration": 0.004962, + "end_time": "2026-09-23T13:20:07.269042", "exception": false, - "start_time": "2026-09-15T05:05:01.703941+00:00", + "start_time": "2026-09-23T13:20:07.264080", "status": "completed" }, "tags": [] @@ -2959,16 +3018,16 @@ "id": "sl7ex3var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.532450Z", - "iopub.status.busy": "2026-09-18T15:53:11.531949Z", - "iopub.status.idle": "2026-09-18T15:53:11.540022Z", - "shell.execute_reply": "2026-09-18T15:53:11.538500Z" + "iopub.execute_input": "2026-09-23T13:20:07.279969Z", + "iopub.status.busy": "2026-09-23T13:20:07.279770Z", + "iopub.status.idle": "2026-09-23T13:20:07.282994Z", + "shell.execute_reply": "2026-09-23T13:20:07.282669Z" }, "papermill": { - "duration": 0.014502, - "end_time": "2026-09-15T05:05:01.733086+00:00", + "duration": 0.009717, + "end_time": "2026-09-23T13:20:07.283735", "exception": false, - "start_time": "2026-09-15T05:05:01.718584+00:00", + "start_time": "2026-09-23T13:20:07.274018", "status": "completed" }, "tags": [] @@ -3018,10 +3077,10 @@ "id": "3818d99f", "metadata": { "papermill": { - "duration": 0.007894, - "end_time": "2026-09-15T05:05:01.748575+00:00", + "duration": 0.005023, + "end_time": "2026-09-23T13:20:07.293726", "exception": false, - "start_time": "2026-09-15T05:05:01.740681+00:00", + "start_time": "2026-09-23T13:20:07.288703", "status": "completed" }, "tags": [] @@ -3046,16 +3105,16 @@ "id": "b1ef475c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.543719Z", - "iopub.status.busy": "2026-09-18T15:53:11.543181Z", - "iopub.status.idle": "2026-09-18T15:53:11.556699Z", - "shell.execute_reply": "2026-09-18T15:53:11.555507Z" + "iopub.execute_input": "2026-09-23T13:20:07.304614Z", + "iopub.status.busy": "2026-09-23T13:20:07.304337Z", + "iopub.status.idle": "2026-09-23T13:20:07.311156Z", + "shell.execute_reply": "2026-09-23T13:20:07.310774Z" }, "papermill": { - "duration": 0.022873, - "end_time": "2026-09-15T05:05:01.782088+00:00", + "duration": 0.013221, + "end_time": "2026-09-23T13:20:07.311830", "exception": false, - "start_time": "2026-09-15T05:05:01.759215+00:00", + "start_time": "2026-09-23T13:20:07.298609", "status": "completed" }, "tags": [] @@ -3172,10 +3231,10 @@ "id": "sl7ex4var-md", "metadata": { "papermill": { - "duration": 0.00725, - "end_time": "2026-09-15T05:05:01.797093+00:00", + "duration": 0.004981, + "end_time": "2026-09-23T13:20:07.321990", "exception": false, - "start_time": "2026-09-15T05:05:01.789843+00:00", + "start_time": "2026-09-23T13:20:07.317009", "status": "completed" }, "tags": [] @@ -3198,16 +3257,16 @@ "id": "sl7ex4var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T15:53:11.560073Z", - "iopub.status.busy": "2026-09-18T15:53:11.559573Z", - "iopub.status.idle": "2026-09-18T15:53:11.566614Z", - "shell.execute_reply": "2026-09-18T15:53:11.565181Z" + "iopub.execute_input": "2026-09-23T13:20:07.332905Z", + "iopub.status.busy": "2026-09-23T13:20:07.332534Z", + "iopub.status.idle": "2026-09-23T13:20:07.336056Z", + "shell.execute_reply": "2026-09-23T13:20:07.335567Z" }, "papermill": { - "duration": 0.013105, - "end_time": "2026-09-15T05:05:01.817125+00:00", + "duration": 0.010292, + "end_time": "2026-09-23T13:20:07.336997", "exception": false, - "start_time": "2026-09-15T05:05:01.804020+00:00", + "start_time": "2026-09-23T13:20:07.326705", "status": "completed" }, "tags": [] @@ -3256,10 +3315,10 @@ "id": "7cb00ad4", "metadata": { "papermill": { - "duration": 0.006479, - "end_time": "2026-09-15T05:05:01.830218+00:00", + "duration": 0.004951, + "end_time": "2026-09-23T13:20:07.346959", "exception": false, - "start_time": "2026-09-15T05:05:01.823739+00:00", + "start_time": "2026-09-23T13:20:07.342008", "status": "completed" }, "tags": [] @@ -3315,10 +3374,10 @@ "id": "227e37ae", "metadata": { "papermill": { - "duration": 0.00661, - "end_time": "2026-09-15T05:05:01.843177+00:00", + "duration": 0.004806, + "end_time": "2026-09-23T13:20:07.356635", "exception": false, - "start_time": "2026-09-15T05:05:01.836567+00:00", + "start_time": "2026-09-23T13:20:07.351829", "status": "completed" }, "tags": [] @@ -3346,10 +3405,10 @@ "id": "b2e6b9c6", "metadata": { "papermill": { - "duration": 0.00816, - "end_time": "2026-09-15T05:05:01.858504+00:00", + "duration": 0.00496, + "end_time": "2026-09-23T13:20:07.366607", "exception": false, - "start_time": "2026-09-15T05:05:01.850344+00:00", + "start_time": "2026-09-23T13:20:07.361647", "status": "completed" }, "tags": [] @@ -3400,21 +3459,21 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.7" + "version": "3.13.3" }, "papermill": { "default_parameters": {}, - "duration": 10.323719, - "end_time": "2026-09-15T05:05:02.325982+00:00", + "duration": 334.665881, + "end_time": "2026-09-23T13:20:07.715626", "environment_variables": {}, "exception": null, - "input_path": "SL-9-LLM-SymbolicLearning.ipynb", - "output_path": "SL-9-LLM-SymbolicLearning.ipynb", + "input_path": "MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb", + "output_path": "MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb", "parameters": {}, - "start_time": "2026-09-15T05:04:52.002263+00:00", + "start_time": "2026-09-23T13:14:33.049745", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file From 9fcb8b66dd7c331e4e2c440993c365096d9d670a Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 23 Sep 2026 20:36:38 +0200 Subject: [PATCH 2/5] =?UTF-8?q?fix(notebook,#16390):=20SL-9=20parse=20des?= =?UTF-8?q?=20titres=20de=20raisonnement=20colles=20par=20le=20gateway=20?= =?UTF-8?q?=E2=80=94=204=20brutes=20/=204=20parsees,=20re-exec=20integrale?= =?UTF-8?q?=20sans=20repli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cellule 10 parse_llm_rules : le lstrip amont mange les etoiles ouvrantes du titre colle (**...**) ; on coupe a la derniere paire fermante (body.rsplit("**", 1)) — la 1re regle n'est plus perdue - run final : 56/56, 0 erreur, 0 banniere de repli sur ~30 appels LLM (gpt-5.6-sol via CLAUDISH_PROXY_KEY, aucune valeur en clair) - cellule 29 requalifiee : iteration 1 converge (6/6 couverts, 0 FP), plus d'iteration 2 en repli - C.2 1/1 compliant, 0 fuite, 0 exec_count nul Co-Authored-By: Claude Sonnet 5 --- .../SL-9-LLM-SymbolicLearning.ipynb | 731 +++++++++--------- 1 file changed, 364 insertions(+), 367 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb index 2f47b9f0cd..bda088e9fe 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb @@ -5,10 +5,10 @@ "id": "097196f2", "metadata": { "papermill": { - "duration": 0.004877, - "end_time": "2026-09-23T13:14:34.831229", + "duration": 0.004477, + "end_time": "2026-09-23T18:30:14.493075", "exception": false, - "start_time": "2026-09-23T13:14:34.826352", + "start_time": "2026-09-23T18:30:14.488598", "status": "completed" }, "tags": [] @@ -48,16 +48,16 @@ "id": "3dc32d19", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:34.840714Z", - "iopub.status.busy": "2026-09-23T13:14:34.840366Z", - "iopub.status.idle": "2026-09-23T13:14:35.904459Z", - "shell.execute_reply": "2026-09-23T13:14:35.904002Z" + "iopub.execute_input": "2026-09-23T18:30:14.501868Z", + "iopub.status.busy": "2026-09-23T18:30:14.501660Z", + "iopub.status.idle": "2026-09-23T18:30:15.460878Z", + "shell.execute_reply": "2026-09-23T18:30:15.460328Z" }, "papermill": { - "duration": 1.069625, - "end_time": "2026-09-23T13:14:35.905282", + "duration": 0.964505, + "end_time": "2026-09-23T18:30:15.461595", "exception": false, - "start_time": "2026-09-23T13:14:34.835657", + "start_time": "2026-09-23T18:30:14.497090", "status": "completed" }, "tags": [] @@ -127,10 +127,10 @@ "id": "23731406", "metadata": { "papermill": { - "duration": 0.006046, - "end_time": "2026-09-23T13:14:35.916766", + "duration": 0.005705, + "end_time": "2026-09-23T18:30:15.472566", "exception": false, - "start_time": "2026-09-23T13:14:35.910720", + "start_time": "2026-09-23T18:30:15.466861", "status": "completed" }, "tags": [] @@ -169,16 +169,16 @@ "id": "f1d96718", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:35.926136Z", - "iopub.status.busy": "2026-09-23T13:14:35.925765Z", - "iopub.status.idle": "2026-09-23T13:14:35.931008Z", - "shell.execute_reply": "2026-09-23T13:14:35.930518Z" + "iopub.execute_input": "2026-09-23T18:30:15.480323Z", + "iopub.status.busy": "2026-09-23T18:30:15.480115Z", + "iopub.status.idle": "2026-09-23T18:30:15.485665Z", + "shell.execute_reply": "2026-09-23T18:30:15.485298Z" }, "papermill": { - "duration": 0.010945, - "end_time": "2026-09-23T13:14:35.931698", + "duration": 0.010484, + "end_time": "2026-09-23T18:30:15.486355", "exception": false, - "start_time": "2026-09-23T13:14:35.920753", + "start_time": "2026-09-23T18:30:15.475871", "status": "completed" }, "tags": [] @@ -261,10 +261,10 @@ "id": "3827f67e", "metadata": { "papermill": { - "duration": 0.003901, - "end_time": "2026-09-23T13:14:35.939570", + "duration": 0.003655, + "end_time": "2026-09-23T18:30:15.493489", "exception": false, - "start_time": "2026-09-23T13:14:35.935669", + "start_time": "2026-09-23T18:30:15.489834", "status": "completed" }, "tags": [] @@ -286,10 +286,10 @@ "id": "59e172f2", "metadata": { "papermill": { - "duration": 0.003766, - "end_time": "2026-09-23T13:14:35.947359", + "duration": 0.003685, + "end_time": "2026-09-23T18:30:15.500910", "exception": false, - "start_time": "2026-09-23T13:14:35.943593", + "start_time": "2026-09-23T18:30:15.497225", "status": "completed" }, "tags": [] @@ -324,16 +324,16 @@ "id": "581df035", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:35.956167Z", - "iopub.status.busy": "2026-09-23T13:14:35.955726Z", - "iopub.status.idle": "2026-09-23T13:14:35.961886Z", - "shell.execute_reply": "2026-09-23T13:14:35.961454Z" + "iopub.execute_input": "2026-09-23T18:30:15.509161Z", + "iopub.status.busy": "2026-09-23T18:30:15.508868Z", + "iopub.status.idle": "2026-09-23T18:30:15.514651Z", + "shell.execute_reply": "2026-09-23T18:30:15.514144Z" }, "papermill": { - "duration": 0.011414, - "end_time": "2026-09-23T13:14:35.962559", + "duration": 0.010798, + "end_time": "2026-09-23T18:30:15.515340", "exception": false, - "start_time": "2026-09-23T13:14:35.951145", + "start_time": "2026-09-23T18:30:15.504542", "status": "completed" }, "tags": [] @@ -406,10 +406,10 @@ "id": "72e21fc7", "metadata": { "papermill": { - "duration": 0.003917, - "end_time": "2026-09-23T13:14:35.970457", + "duration": 0.003768, + "end_time": "2026-09-23T18:30:15.522844", "exception": false, - "start_time": "2026-09-23T13:14:35.966540", + "start_time": "2026-09-23T18:30:15.519076", "status": "completed" }, "tags": [] @@ -433,16 +433,16 @@ "id": "eed948cc", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:35.979567Z", - "iopub.status.busy": "2026-09-23T13:14:35.979195Z", - "iopub.status.idle": "2026-09-23T13:14:35.983990Z", - "shell.execute_reply": "2026-09-23T13:14:35.983534Z" + "iopub.execute_input": "2026-09-23T18:30:15.531134Z", + "iopub.status.busy": "2026-09-23T18:30:15.530934Z", + "iopub.status.idle": "2026-09-23T18:30:15.535702Z", + "shell.execute_reply": "2026-09-23T18:30:15.535129Z" }, "papermill": { - "duration": 0.010217, - "end_time": "2026-09-23T13:14:35.984739", + "duration": 0.009867, + "end_time": "2026-09-23T18:30:15.536426", "exception": false, - "start_time": "2026-09-23T13:14:35.974522", + "start_time": "2026-09-23T18:30:15.526559", "status": "completed" }, "tags": [] @@ -532,10 +532,10 @@ "id": "85c22afd", "metadata": { "papermill": { - "duration": 0.00451, - "end_time": "2026-09-23T13:14:35.993557", + "duration": 0.004501, + "end_time": "2026-09-23T18:30:15.545090", "exception": false, - "start_time": "2026-09-23T13:14:35.989047", + "start_time": "2026-09-23T18:30:15.540589", "status": "completed" }, "tags": [] @@ -561,16 +561,16 @@ "id": "1c109513", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:36.003555Z", - "iopub.status.busy": "2026-09-23T13:14:36.003133Z", - "iopub.status.idle": "2026-09-23T13:14:46.638707Z", - "shell.execute_reply": "2026-09-23T13:14:46.636901Z" + "iopub.execute_input": "2026-09-23T18:30:15.553676Z", + "iopub.status.busy": "2026-09-23T18:30:15.553473Z", + "iopub.status.idle": "2026-09-23T18:30:26.414906Z", + "shell.execute_reply": "2026-09-23T18:30:26.414506Z" }, "papermill": { - "duration": 10.643771, - "end_time": "2026-09-23T13:14:46.641442", + "duration": 10.866662, + "end_time": "2026-09-23T18:30:26.415578", "exception": false, - "start_time": "2026-09-23T13:14:35.997671", + "start_time": "2026-09-23T18:30:15.548916", "status": "completed" }, "tags": [] @@ -582,16 +582,17 @@ "text": [ "Reponse brute (gpt-5.6-sol) :\n", "============================================================\n", - "**Constructing example-covering rules****Refining four decision rules**Hungry=Yes AND Patrons=Some => WillWait\n", - "Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", - "Hungry=No => NOT WillWait\n", + "**Generating consistent rules****Refining exception rule**Hungry=No => NOT WillWait \n", + "Hungry=Yes AND Patrons=Some => WillWait \n", + "Hungry=Yes AND Price=$ => WillWait \n", "Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "============================================================\n", "\n", - "Regles candidates parsees : 3\n", - " R1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", - " R2: Hungry=No => NOT WillWait\n", - " R3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" + "Regles candidates parsees : 4\n", + " R1: Hungry=No => NOT WillWait\n", + " R2: Hungry=Yes AND Patrons=Some => WillWait\n", + " R3: Hungry=Yes AND Price=$ => WillWait\n", + " R4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] } ], @@ -650,6 +651,12 @@ " if \"=>\" not in line:\n", " continue\n", " body, head = line.split(\"=>\", 1)\n", + " # titres de resume de raisonnement (**...**) colles en tete de la 1re\n", + " # regle par le gateway : le lstrip amont a deja mange les etoiles\n", + " # ouvrantes, donc la fermente de la DERNIERE paire marque le debut\n", + " # des vraies conditions (sans ce retrait : 4 brutes, 3 parses)\n", + " if \"**\" in body:\n", + " body = body.rsplit(\"**\", 1)[1].lstrip(\"*\").strip()\n", " head = head.strip().rstrip(\".\").strip(\"*` \")\n", " negated = head.upper().startswith(\"NOT \")\n", " if negated:\n", @@ -716,10 +723,10 @@ "id": "bf930a24", "metadata": { "papermill": { - "duration": 0.00386, - "end_time": "2026-09-23T13:14:46.650537", + "duration": 0.004194, + "end_time": "2026-09-23T18:30:26.423856", "exception": false, - "start_time": "2026-09-23T13:14:46.646677", + "start_time": "2026-09-23T18:30:26.419662", "status": "completed" }, "tags": [] @@ -744,10 +751,10 @@ "id": "d6bb9fe1", "metadata": { "papermill": { - "duration": 0.004847, - "end_time": "2026-09-23T13:14:46.659228", + "duration": 0.003706, + "end_time": "2026-09-23T18:30:26.431217", "exception": false, - "start_time": "2026-09-23T13:14:46.654381", + "start_time": "2026-09-23T18:30:26.427511", "status": "completed" }, "tags": [] @@ -774,16 +781,16 @@ "id": "2c0873ae", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:46.669225Z", - "iopub.status.busy": "2026-09-23T13:14:46.668810Z", - "iopub.status.idle": "2026-09-23T13:14:46.679377Z", - "shell.execute_reply": "2026-09-23T13:14:46.678971Z" + "iopub.execute_input": "2026-09-23T18:30:26.439833Z", + "iopub.status.busy": "2026-09-23T18:30:26.439636Z", + "iopub.status.idle": "2026-09-23T18:30:26.446544Z", + "shell.execute_reply": "2026-09-23T18:30:26.446208Z" }, "papermill": { - "duration": 0.016765, - "end_time": "2026-09-23T13:14:46.680094", + "duration": 0.012364, + "end_time": "2026-09-23T18:30:26.447215", "exception": false, - "start_time": "2026-09-23T13:14:46.663329", + "start_time": "2026-09-23T18:30:26.434851", "status": "completed" }, "tags": [] @@ -798,9 +805,10 @@ "\n", "Regle | TP | FP | FN | Prec | Recall | OK\n", "--------------------------------------------------------------------------------\n", - "R1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", - "R2: Hungry=No => NOT WillWait | 5 | 0 | 1 | 1.00 | 0.83 | OUI\n", - "R3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1 | 0 | 5 | 1.00 | 0.17 | OUI\n", + "R1: Hungry=No => NOT WillWait | 5 | 0 | 1 | 1.00 | 0.83 | OUI\n", + "R2: Hungry=Yes AND Patrons=Some => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", + "R3: Hungry=Yes AND Price=$ => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", + "R4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1 | 0 | 5 | 1.00 | 0.17 | OUI\n", "\n", "Legende : TP=Vrais Positifs, FP=Faux Positifs, FN=Faux Negatifs, OK=Consistante\n" ] @@ -903,10 +911,10 @@ "id": "0f9984a1", "metadata": { "papermill": { - "duration": 0.003955, - "end_time": "2026-09-23T13:14:46.688241", + "duration": 0.004109, + "end_time": "2026-09-23T18:30:26.455270", "exception": false, - "start_time": "2026-09-23T13:14:46.684286", + "start_time": "2026-09-23T18:30:26.451161", "status": "completed" }, "tags": [] @@ -939,16 +947,16 @@ "id": "9a30e01b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:46.698323Z", - "iopub.status.busy": "2026-09-23T13:14:46.697913Z", - "iopub.status.idle": "2026-09-23T13:14:46.703578Z", - "shell.execute_reply": "2026-09-23T13:14:46.703004Z" + "iopub.execute_input": "2026-09-23T18:30:26.463515Z", + "iopub.status.busy": "2026-09-23T18:30:26.463326Z", + "iopub.status.idle": "2026-09-23T18:30:26.468805Z", + "shell.execute_reply": "2026-09-23T18:30:26.468313Z" }, "papermill": { - "duration": 0.011349, - "end_time": "2026-09-23T13:14:46.704353", + "duration": 0.010471, + "end_time": "2026-09-23T18:30:26.469483", "exception": false, - "start_time": "2026-09-23T13:14:46.693004", + "start_time": "2026-09-23T18:30:26.459012", "status": "completed" }, "tags": [] @@ -959,23 +967,22 @@ "output_type": "stream", "text": [ "Synthese de la verification :\n", - " Regles candidates : 3\n", - " Regles validees : 3\n", + " Regles candidates : 4\n", + " Regles validees : 4\n", " Regles rejetees : 0\n", "\n", "Regles validees (consistantes, prises pour le modele) :\n", - " V1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", - " V2: Hungry=No => NOT WillWait\n", - " V3: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", + " V1: Hungry=No => NOT WillWait\n", + " V2: Hungry=Yes AND Patrons=Some => WillWait\n", + " V3: Hungry=Yes AND Price=$ => WillWait\n", + " V4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", "Regles rejetees par l'oracle (au moins un faux positif) :\n", " (aucune ce run)\n", "\n", - "Couverture des positifs par les regles validees : 3/6\n", - "Le concept WillWait est DISJONCTIF : aucune clause de Horn unique ne\n", - "couvre tous les positifs sans faux positif. Il faut COMBINER plusieurs\n", - "clauses (section 6, pipeline iteratif) -- exactement la limite rencontree\n", - "en SL-1 (Version Space vide).\n" + "Couverture des positifs par les regles validees : 6/6\n", + "Les regles validees couvrent tous les positifs : le modele disjonctif\n", + "(union de clauses) est complet sur ce run.\n" ] } ], @@ -1029,10 +1036,10 @@ "id": "74c02d03", "metadata": { "papermill": { - "duration": 0.004026, - "end_time": "2026-09-23T13:14:46.712647", + "duration": 0.003661, + "end_time": "2026-09-23T18:30:26.477084", "exception": false, - "start_time": "2026-09-23T13:14:46.708621", + "start_time": "2026-09-23T18:30:26.473423", "status": "completed" }, "tags": [] @@ -1068,16 +1075,16 @@ "id": "83e5f5eb", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:14:46.721932Z", - "iopub.status.busy": "2026-09-23T13:14:46.721591Z", - "iopub.status.idle": "2026-09-23T13:15:59.711668Z", - "shell.execute_reply": "2026-09-23T13:15:59.711133Z" + "iopub.execute_input": "2026-09-23T18:30:26.485209Z", + "iopub.status.busy": "2026-09-23T18:30:26.485025Z", + "iopub.status.idle": "2026-09-23T18:31:32.292790Z", + "shell.execute_reply": "2026-09-23T18:31:32.291726Z" }, "papermill": { - "duration": 72.999162, - "end_time": "2026-09-23T13:15:59.715772", + "duration": 65.815823, + "end_time": "2026-09-23T18:31:32.296450", "exception": false, - "start_time": "2026-09-23T13:14:46.716610", + "start_time": "2026-09-23T18:30:26.480627", "status": "completed" }, "tags": [] @@ -1097,10 +1104,10 @@ "text": [ "\n", "Ex 0 [+] Pat=Some, Type=French, Hungry=Yes\n", - " Etape 1: 1. Avec Patrons=Some, le restaurant n’est pas bondé.\n", - " Etape 2: 2. L’attente estimée à 0-10 minutes est courte.\n", + " Etape 1: **Determining restaurant rule**1. Patrons=Some suffit ici à prédire que le clien\n", + " Raisonnement : **Determining restaurant rule**1. Patrons=Some suffit ici à prédire que le client attendra.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Some AND WaitEstimate=0-10 => WillWait\n" + " => Regle extraite : Patrons=Some => WillWait\n" ] }, { @@ -1109,11 +1116,12 @@ "text": [ "\n", "Ex 1 [+] Pat=Full, Type=Thai, Hungry=Yes\n", - " Etape 1: **Identifying restaurant dataset****Checking row 2 label**1. Le restaurant est p\n", - " Raisonnement : **Identifying restaurant dataset****Checking row 2 label**1. Le restaurant est plein et l’attente estimée est de 30 à 60 minutes.\n", - " Etape 2: 2. Pour cette combinaison avec Type=Thai, le client n’attend pas.\n", + " Etape 1: **Inferring restaurant dataset rules****Comparing restaurant examples****Selecti\n", + " Raisonnement : **Inferring restaurant dataset rules****Comparing restaurant examples****Selecting a decision rule**1. Le restaurant est complet (Patrons=Full).\n", + " Etape 2: 2. L’attente estimée est de 30 à 60 minutes ; pour ce profil, le client n’attend\n", + " Raisonnement : 2. L’attente estimée est de 30 à 60 minutes ; pour ce profil, le client n’attend pas.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=Full AND Type=Thai AND WaitEstimate=30-60 => NOT WillWait\n" + " => Regle extraite : Patrons=Full AND Type=Thai => NOT WillWait\n" ] }, { @@ -1122,8 +1130,7 @@ "text": [ "\n", "Ex 2 [-] Pat=Some, Type=Burger, Hungry=No\n", - " Etape 1: **J’identifie la règle Patrons=Some**1. Patrons=Some indique que le restaurant n\n", - " Raisonnement : **J’identifie la règle Patrons=Some**1. Patrons=Some indique que le restaurant n’est pas plein.\n", + " Etape 1: **Determining restaurant rule**1. Patrons=Some indique qu’il reste des places.\n", " Etape 2: 2. Dans cette règle de classification, le client attend.\n", " => Decision : WillWait=True\n", " => Regle extraite : Patrons=Some => WillWait\n" @@ -1149,11 +1156,10 @@ "text": [ "\n", "Ex 6 [-] Pat=None, Type=Burger, Hungry=No\n", - " Etape 1: **Checking rule validity**1. Patrons=None indique qu’il n’y a personne au restau\n", - " Raisonnement : **Checking rule validity**1. Patrons=None indique qu’il n’y a personne au restaurant.\n", - " Etape 2: 2. Dans ce cas, la règle prédit que le client n’attendra pas.\n", + " Etape 1: 1. Patrons=None : il n’y a aucun client dans le restaurant.\n", + " Etape 2: 2. Dans cette règle de classification, Patrons=None conduit à WillWait=False.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=None AND WaitEstimate=0-10 => NOT WillWait\n" + " => Regle extraite : Patrons=None => NOT WillWait\n" ] }, { @@ -1162,10 +1168,11 @@ "text": [ "\n", "Ex 11 [+] Pat=Full, Type=Burger, Hungry=Yes\n", - " Etape 1: **Inferring AIMA rows****Testing candidate rule****Selecting distinguishing cond\n", - " Raisonnement : **Inferring AIMA rows****Testing candidate rule****Selecting distinguishing conditions**Le restaurant est plein, mais ce seul critère ne suffit pas. Dans les exemples connus, un client face à un restaurant Burger avec une attente estimée à 30-60 minutes attend.\n", + " Etape 1: **Inferring restaurant row matches****Checking X12 conditions****Selecting X12 c\n", + " Raisonnement : **Inferring restaurant row matches****Checking X12 conditions****Selecting X12 conditions**1. Le restaurant est complet, mais l’attente estimée est de 30 à 60 minutes.\n", + " Etape 2: 2. Cette combinaison correspond à un cas où le client attend.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Type=Burger AND WaitEstimate=30-60 => WillWait\n" + " => Regle extraite : Patrons=Full AND Type=Burger AND WaitEstimate=30-60 => WillWait\n" ] } ], @@ -1277,10 +1284,10 @@ "id": "3653b321", "metadata": { "papermill": { - "duration": 0.003592, - "end_time": "2026-09-23T13:15:59.723308", + "duration": 0.008255, + "end_time": "2026-09-23T18:31:32.311028", "exception": false, - "start_time": "2026-09-23T13:15:59.719716", + "start_time": "2026-09-23T18:31:32.302773", "status": "completed" }, "tags": [] @@ -1316,16 +1323,16 @@ "id": "dc08268f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:15:59.731690Z", - "iopub.status.busy": "2026-09-23T13:15:59.731490Z", - "iopub.status.idle": "2026-09-23T13:15:59.736165Z", - "shell.execute_reply": "2026-09-23T13:15:59.735765Z" + "iopub.execute_input": "2026-09-23T18:31:32.325230Z", + "iopub.status.busy": "2026-09-23T18:31:32.324923Z", + "iopub.status.idle": "2026-09-23T18:31:32.331583Z", + "shell.execute_reply": "2026-09-23T18:31:32.330647Z" }, "papermill": { - "duration": 0.009604, - "end_time": "2026-09-23T13:15:59.736817", + "duration": 0.01437, + "end_time": "2026-09-23T18:31:32.332463", "exception": false, - "start_time": "2026-09-23T13:15:59.727213", + "start_time": "2026-09-23T18:31:32.318093", "status": "completed" }, "tags": [] @@ -1340,18 +1347,17 @@ "\n", "Regles extraites des 6 traces CoT :\n", " Total (avant deduplication) : 6\n", - " Uniques : 6\n", + " Uniques : 5\n", "\n", - " C1: Patrons=Some AND WaitEstimate=0-10 => WillWait\n", - " C2: Patrons=Full AND Type=Thai AND WaitEstimate=30-60 => NOT WillWait\n", - " C3: Patrons=Some => WillWait\n", - " C4: Patrons=Full AND Hungry=No => NOT WillWait\n", - " C5: Patrons=None AND WaitEstimate=0-10 => NOT WillWait\n", - " C6: Type=Burger AND WaitEstimate=30-60 => WillWait\n", + " C1: Patrons=Some => WillWait\n", + " C2: Patrons=Full AND Type=Thai => NOT WillWait\n", + " C3: Patrons=Full AND Hungry=No => NOT WillWait\n", + " C4: Patrons=None => NOT WillWait\n", + " C5: Patrons=Full AND Type=Burger AND WaitEstimate=30-60 => WillWait\n", "\n", "Verification des regles extraites (vs regles du LLM) :\n", - " Regles LLM direct : 3 candidates\n", - " Regles CoT extraites : 6 uniques\n", + " Regles LLM direct : 4 candidates\n", + " Regles CoT extraites : 5 uniques\n", "\n", "Les regles extraites des traces CoT sont plus ciblees\n", "car elles reflettent le raisonnement effectif sur chaque exemple,\n", @@ -1403,10 +1409,10 @@ "id": "a575226a", "metadata": { "papermill": { - "duration": 0.003881, - "end_time": "2026-09-23T13:15:59.744476", + "duration": 0.006078, + "end_time": "2026-09-23T18:31:32.344561", "exception": false, - "start_time": "2026-09-23T13:15:59.740595", + "start_time": "2026-09-23T18:31:32.338483", "status": "completed" }, "tags": [] @@ -1437,10 +1443,10 @@ "id": "1bd557a0", "metadata": { "papermill": { - "duration": 0.004697, - "end_time": "2026-09-23T13:15:59.753370", + "duration": 0.008068, + "end_time": "2026-09-23T18:31:32.361066", "exception": false, - "start_time": "2026-09-23T13:15:59.748673", + "start_time": "2026-09-23T18:31:32.352998", "status": "completed" }, "tags": [] @@ -1480,16 +1486,16 @@ "id": "f9d67f71", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:15:59.763236Z", - "iopub.status.busy": "2026-09-23T13:15:59.763038Z", - "iopub.status.idle": "2026-09-23T13:16:10.061660Z", - "shell.execute_reply": "2026-09-23T13:16:10.060741Z" + "iopub.execute_input": "2026-09-23T18:31:32.377092Z", + "iopub.status.busy": "2026-09-23T18:31:32.376687Z", + "iopub.status.idle": "2026-09-23T18:31:37.167501Z", + "shell.execute_reply": "2026-09-23T18:31:37.166744Z" }, "papermill": { - "duration": 10.304663, - "end_time": "2026-09-23T13:16:10.062596", + "duration": 4.7998, + "end_time": "2026-09-23T18:31:37.168990", "exception": false, - "start_time": "2026-09-23T13:15:59.757933", + "start_time": "2026-09-23T18:31:32.369190", "status": "completed" }, "tags": [] @@ -1501,14 +1507,15 @@ "text": [ "Pipeline Neuro-Symbolique - Resultat\n", "=======================================================\n", - " Candidates generees : 3\n", - " Regles validees : 3\n", + " Candidates generees : 4\n", + " Regles validees : 4\n", " Regles rejetees : 0\n", - " Couverture positifs : 50%\n", + " Couverture positifs : 100%\n", "\n", "Regles validees :\n", - " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", "\n" ] @@ -1630,10 +1637,10 @@ "id": "2f9d2c01", "metadata": { "papermill": { - "duration": 0.004658, - "end_time": "2026-09-23T13:16:10.071848", + "duration": 0.008435, + "end_time": "2026-09-23T18:31:37.186305", "exception": false, - "start_time": "2026-09-23T13:16:10.067190", + "start_time": "2026-09-23T18:31:37.177870", "status": "completed" }, "tags": [] @@ -1662,16 +1669,16 @@ "id": "8917b738", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:16:10.081611Z", - "iopub.status.busy": "2026-09-23T13:16:10.081411Z", - "iopub.status.idle": "2026-09-23T13:17:39.113220Z", - "shell.execute_reply": "2026-09-23T13:17:39.112841Z" + "iopub.execute_input": "2026-09-23T18:31:37.199770Z", + "iopub.status.busy": "2026-09-23T18:31:37.199419Z", + "iopub.status.idle": "2026-09-23T18:32:53.356951Z", + "shell.execute_reply": "2026-09-23T18:32:53.356004Z" }, "papermill": { - "duration": 89.041358, - "end_time": "2026-09-23T13:17:39.117270", + "duration": 76.171982, + "end_time": "2026-09-23T18:32:53.365275", "exception": false, - "start_time": "2026-09-23T13:16:10.075912", + "start_time": "2026-09-23T18:31:37.193293", "status": "completed" }, "tags": [] @@ -1692,24 +1699,24 @@ "Pipeline Neuro-Symbolique - Resultat\n", "=======================================================\n", " Candidates generees : 9\n", - " Regles validees : 5\n", - " Regles rejetees : 4\n", - " Couverture positifs : 50%\n", + " Regles validees : 7\n", + " Regles rejetees : 2\n", + " Couverture positifs : 100%\n", "\n", "Regles validees :\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", + " [OK] Type=Thai AND Raining=Yes => WillWait (TP=2, FP=0)\n", " [OK] Patrons=Full AND Hungry=No => NOT WillWait (TP=2, FP=0)\n", " [OK] Patrons=None => NOT WillWait (TP=2, FP=0)\n", "\n", "Regles rejetees :\n", - " [KO] Patrons=Some AND WaitEstimate=0-10 => WillWait (FP=1)\n", - " [KO] Bar=No AND WaitEstimate=30-60 => NOT WillWait (FP=1)\n", - " [KO] Patrons=Full AND WaitEstimate=10-30 AND Price=$ => WillWait (FP=1)\n", " [KO] Patrons=Some => WillWait (FP=1)\n", + " [KO] Patrons=Full AND Fri/Sat=No => NOT WillWait (FP=1)\n", "\n", - "Comparaison : sans CoT (3 validees) vs avec CoT (5 validees)\n" + "Comparaison : sans CoT (4 validees) vs avec CoT (7 validees)\n" ] } ], @@ -1728,10 +1735,10 @@ "id": "a2edb6e2", "metadata": { "papermill": { - "duration": 0.004515, - "end_time": "2026-09-23T13:17:39.125978", + "duration": 0.003873, + "end_time": "2026-09-23T18:32:53.373205", "exception": false, - "start_time": "2026-09-23T13:17:39.121463", + "start_time": "2026-09-23T18:32:53.369332", "status": "completed" }, "tags": [] @@ -1767,16 +1774,16 @@ "id": "54a6b7c4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:17:39.135389Z", - "iopub.status.busy": "2026-09-23T13:17:39.135180Z", - "iopub.status.idle": "2026-09-23T13:17:39.139608Z", - "shell.execute_reply": "2026-09-23T13:17:39.139125Z" + "iopub.execute_input": "2026-09-23T18:32:53.383087Z", + "iopub.status.busy": "2026-09-23T18:32:53.382883Z", + "iopub.status.idle": "2026-09-23T18:32:53.389376Z", + "shell.execute_reply": "2026-09-23T18:32:53.387905Z" }, "papermill": { - "duration": 0.010023, - "end_time": "2026-09-23T13:17:39.140437", + "duration": 0.012762, + "end_time": "2026-09-23T18:32:53.390391", "exception": false, - "start_time": "2026-09-23T13:17:39.130414", + "start_time": "2026-09-23T18:32:53.377629", "status": "completed" }, "tags": [] @@ -1790,22 +1797,23 @@ "=======================================================\n", "\n", "--- Sans CoT ---\n", - " Taux d'acceptation : 3/3 (100%)\n", - " Couverture : 50% des positifs\n", - " Regles positives : 1\n", + " Taux d'acceptation : 4/4 (100%)\n", + " Couverture : 100% des positifs\n", + " Regles positives : 2\n", " Regles negatives : 2\n", "\n", "--- Avec CoT ---\n", - " Taux d'acceptation : 5/9 (56%)\n", - " Couverture : 50% des positifs\n", - " Regles positives : 1\n", + " Taux d'acceptation : 7/9 (78%)\n", + " Couverture : 100% des positifs\n", + " Regles positives : 3\n", " Regles negatives : 4\n", "\n", "Metriques par regle validee (sans CoT) :\n", " Regle | Precision | Recall | F1\n", " --------------------------------------------------------------\n", - " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 1.00 | 0.50 | 0.67\n", " Hungry=No => NOT WillWait | 1.00 | 0.83 | 0.91\n", + " Hungry=Yes AND Patrons=Some => WillWait | 1.00 | 0.50 | 0.67\n", + " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 1.00 | 0.50 | 0.67\n", " Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1.00 | 0.17 | 0.29\n" ] } @@ -1838,10 +1846,10 @@ "id": "d74db354", "metadata": { "papermill": { - "duration": 0.004341, - "end_time": "2026-09-23T13:17:39.150053", + "duration": 0.003884, + "end_time": "2026-09-23T18:32:53.398995", "exception": false, - "start_time": "2026-09-23T13:17:39.145712", + "start_time": "2026-09-23T18:32:53.395111", "status": "completed" }, "tags": [] @@ -1865,10 +1873,10 @@ "id": "3c2e7728", "metadata": { "papermill": { - "duration": 0.004156, - "end_time": "2026-09-23T13:17:39.158283", + "duration": 0.012073, + "end_time": "2026-09-23T18:32:53.414915", "exception": false, - "start_time": "2026-09-23T13:17:39.154127", + "start_time": "2026-09-23T18:32:53.402842", "status": "completed" }, "tags": [] @@ -1893,16 +1901,16 @@ "id": "dada4cc8", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:17:39.167744Z", - "iopub.status.busy": "2026-09-23T13:17:39.167545Z", - "iopub.status.idle": "2026-09-23T13:17:52.928243Z", - "shell.execute_reply": "2026-09-23T13:17:52.927803Z" + "iopub.execute_input": "2026-09-23T18:32:53.425773Z", + "iopub.status.busy": "2026-09-23T18:32:53.425193Z", + "iopub.status.idle": "2026-09-23T18:33:04.973707Z", + "shell.execute_reply": "2026-09-23T18:33:04.972995Z" }, "papermill": { - "duration": 13.766136, - "end_time": "2026-09-23T13:17:52.928909", + "duration": 11.555697, + "end_time": "2026-09-23T18:33:04.974595", "exception": false, - "start_time": "2026-09-23T13:17:39.162773", + "start_time": "2026-09-23T18:32:53.418898", "status": "completed" }, "tags": [] @@ -1923,32 +1931,17 @@ "name": "stdout", "output_type": "stream", "text": [ - " Nouvelles regles validees : 1\n", + " Nouvelles regles validees : 2\n", + " Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", - " Positifs restants : 3\n", - "\n", - "Iteration 2 : 3 positif(s) non couvert(s)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " [reponse LLM recue mais aucune regle parsable -> repli deterministe]\n", - " Nouvelles regles validees : 3\n", - " Patrons=Some => WillWait (TP=3, FP=1)\n", - " Patrons=Full AND Hungry=Yes => WillWait (TP=3, FP=1)\n", - " Hungry=Yes => WillWait (TP=6, FP=1)\n", " Positifs restants : 0\n", "\n", - "Regles finales : 4\n", - " F1: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", - " F2: Patrons=Some => WillWait (TP=3, FP=1)\n", - " F3: Patrons=Full AND Hungry=Yes => WillWait (TP=3, FP=1)\n", - " F4: Hungry=Yes => WillWait (TP=6, FP=1)\n", + "Regles finales : 2\n", + " F1: Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", + " F2: Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", "\n", "Couverture finale : 6/6 positifs\n", - "Faux positifs totaux (union) : 2 (indices: [2, 9])\n" + "Faux positifs totaux (union) : 0 (indices: [])\n" ] } ], @@ -2056,10 +2049,10 @@ "id": "3cc1a67b", "metadata": { "papermill": { - "duration": 0.004159, - "end_time": "2026-09-23T13:17:52.937543", + "duration": 0.008189, + "end_time": "2026-09-23T18:33:04.990868", "exception": false, - "start_time": "2026-09-23T13:17:52.933384", + "start_time": "2026-09-23T18:33:04.982679", "status": "completed" }, "tags": [] @@ -2094,10 +2087,10 @@ "id": "74eec2fe", "metadata": { "papermill": { - "duration": 0.004251, - "end_time": "2026-09-23T13:17:52.946440", + "duration": 0.003927, + "end_time": "2026-09-23T18:33:04.999018", "exception": false, - "start_time": "2026-09-23T13:17:52.942189", + "start_time": "2026-09-23T18:33:04.995091", "status": "completed" }, "tags": [] @@ -2127,16 +2120,16 @@ "id": "a916457d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:17:52.955982Z", - "iopub.status.busy": "2026-09-23T13:17:52.955737Z", - "iopub.status.idle": "2026-09-23T13:18:21.849319Z", - "shell.execute_reply": "2026-09-23T13:18:21.847732Z" + "iopub.execute_input": "2026-09-23T18:33:05.007751Z", + "iopub.status.busy": "2026-09-23T18:33:05.007552Z", + "iopub.status.idle": "2026-09-23T18:33:23.627811Z", + "shell.execute_reply": "2026-09-23T18:33:23.626946Z" }, "papermill": { - "duration": 28.902465, - "end_time": "2026-09-23T13:18:21.853143", + "duration": 18.626243, + "end_time": "2026-09-23T18:33:23.629185", "exception": false, - "start_time": "2026-09-23T13:17:52.950678", + "start_time": "2026-09-23T18:33:05.002942", "status": "completed" }, "tags": [] @@ -2155,9 +2148,10 @@ "name": "stdout", "output_type": "stream", "text": [ - " Run 1 : 3 regles generees, 3 validees par l'oracle\n", - " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " Run 1 : 4 regles generees, 4 validees par l'oracle\n", " [OK] Hungry=No => NOT WillWait\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] }, @@ -2165,9 +2159,10 @@ "name": "stdout", "output_type": "stream", "text": [ - " Run 2 : 3 regles generees, 3 validees par l'oracle\n", - " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " Run 2 : 4 regles generees, 4 validees par l'oracle\n", " [OK] Hungry=No => NOT WillWait\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", + " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] }, @@ -2175,12 +2170,13 @@ "name": "stdout", "output_type": "stream", "text": [ - " Run 3 : 3 regles generees, 3 validees par l'oracle\n", + " Run 3 : 4 regles generees, 4 validees par l'oracle\n", + " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", - "Regles validees stables sur les 3 runs : 3/3 (stabilite 100%)\n", + "Regles validees stables sur les 3 runs : 4/4 (stabilite 100%)\n", "Le generateur varie d'un run a l'autre ; l'oracle, lui, donne toujours\n", "le meme verdict -- c'est lui qui rend le resultat reproductible.\n" ] @@ -2226,16 +2222,16 @@ "id": "426133ee", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:18:21.865956Z", - "iopub.status.busy": "2026-09-23T13:18:21.865770Z", - "iopub.status.idle": "2026-09-23T13:18:27.679302Z", - "shell.execute_reply": "2026-09-23T13:18:27.678067Z" + "iopub.execute_input": "2026-09-23T18:33:23.640222Z", + "iopub.status.busy": "2026-09-23T18:33:23.639845Z", + "iopub.status.idle": "2026-09-23T18:33:31.976149Z", + "shell.execute_reply": "2026-09-23T18:33:31.975466Z" }, "papermill": { - "duration": 5.820432, - "end_time": "2026-09-23T13:18:27.681110", + "duration": 8.342814, + "end_time": "2026-09-23T18:33:31.977506", "exception": false, - "start_time": "2026-09-23T13:18:21.860678", + "start_time": "2026-09-23T18:33:23.634692", "status": "completed" }, "tags": [] @@ -2247,7 +2243,7 @@ "text": [ "Generateur | gen | valides | couverture\n", "----------------------------------------------------------------------------\n", - "Vrai LLM | 3 generees | 3 validees | couverture positifs 6/6\n", + "Vrai LLM | 4 generees | 4 validees | couverture positifs 6/6\n", "Reference deterministe | 5 generees | 2 validees | couverture positifs 0/6\n", "\n", "Deux generateurs, un seul juge : l'oracle symbolique. C'est lui qui rend\n", @@ -2286,16 +2282,16 @@ "id": "6e670307", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:18:27.692684Z", - "iopub.status.busy": "2026-09-23T13:18:27.692475Z", - "iopub.status.idle": "2026-09-23T13:18:36.529469Z", - "shell.execute_reply": "2026-09-23T13:18:36.527963Z" + "iopub.execute_input": "2026-09-23T18:33:31.990814Z", + "iopub.status.busy": "2026-09-23T18:33:31.990510Z", + "iopub.status.idle": "2026-09-23T18:33:37.488333Z", + "shell.execute_reply": "2026-09-23T18:33:37.487905Z" }, "papermill": { - "duration": 8.843598, - "end_time": "2026-09-23T13:18:36.530878", + "duration": 5.504693, + "end_time": "2026-09-23T18:33:37.489025", "exception": false, - "start_time": "2026-09-23T13:18:27.687280", + "start_time": "2026-09-23T18:33:31.984332", "status": "completed" }, "tags": [] @@ -2305,7 +2301,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Regles retenues par la boucle generique : 3\n", + "Regles retenues par la boucle generique : 4\n", + " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", @@ -2351,10 +2348,10 @@ "id": "d4216022", "metadata": { "papermill": { - "duration": 0.004441, - "end_time": "2026-09-23T13:18:36.540193", + "duration": 0.004779, + "end_time": "2026-09-23T18:33:37.498722", "exception": false, - "start_time": "2026-09-23T13:18:36.535752", + "start_time": "2026-09-23T18:33:37.493943", "status": "completed" }, "tags": [] @@ -2389,10 +2386,10 @@ "id": "ba9beb92", "metadata": { "papermill": { - "duration": 0.004433, - "end_time": "2026-09-23T13:18:36.549503", + "duration": 0.004765, + "end_time": "2026-09-23T18:33:37.508567", "exception": false, - "start_time": "2026-09-23T13:18:36.545070", + "start_time": "2026-09-23T18:33:37.503802", "status": "completed" }, "tags": [] @@ -2408,10 +2405,10 @@ "id": "3c800f32", "metadata": { "papermill": { - "duration": 0.004811, - "end_time": "2026-09-23T13:18:36.558392", + "duration": 0.005658, + "end_time": "2026-09-23T18:33:37.519588", "exception": false, - "start_time": "2026-09-23T13:18:36.553581", + "start_time": "2026-09-23T18:33:37.513930", "status": "completed" }, "tags": [] @@ -2434,16 +2431,16 @@ "id": "5101d0d6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:18:36.568268Z", - "iopub.status.busy": "2026-09-23T13:18:36.568082Z", - "iopub.status.idle": "2026-09-23T13:18:36.574688Z", - "shell.execute_reply": "2026-09-23T13:18:36.574329Z" + "iopub.execute_input": "2026-09-23T18:33:37.532952Z", + "iopub.status.busy": "2026-09-23T18:33:37.532499Z", + "iopub.status.idle": "2026-09-23T18:33:37.543557Z", + "shell.execute_reply": "2026-09-23T18:33:37.542531Z" }, "papermill": { - "duration": 0.012291, - "end_time": "2026-09-23T13:18:36.575337", + "duration": 0.020674, + "end_time": "2026-09-23T18:33:37.545277", "exception": false, - "start_time": "2026-09-23T13:18:36.563046", + "start_time": "2026-09-23T18:33:37.524603", "status": "completed" }, "tags": [] @@ -2551,10 +2548,10 @@ "id": "a5281a2e", "metadata": { "papermill": { - "duration": 0.004948, - "end_time": "2026-09-23T13:18:36.585274", + "duration": 0.008525, + "end_time": "2026-09-23T18:33:37.563989", "exception": false, - "start_time": "2026-09-23T13:18:36.580326", + "start_time": "2026-09-23T18:33:37.555464", "status": "completed" }, "tags": [] @@ -2580,16 +2577,16 @@ "id": "0abbe4b6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:18:36.596217Z", - "iopub.status.busy": "2026-09-23T13:18:36.595849Z", - "iopub.status.idle": "2026-09-23T13:18:36.599851Z", - "shell.execute_reply": "2026-09-23T13:18:36.599218Z" + "iopub.execute_input": "2026-09-23T18:33:37.584261Z", + "iopub.status.busy": "2026-09-23T18:33:37.583892Z", + "iopub.status.idle": "2026-09-23T18:33:37.589280Z", + "shell.execute_reply": "2026-09-23T18:33:37.588230Z" }, "papermill": { - "duration": 0.010535, - "end_time": "2026-09-23T13:18:36.600681", + "duration": 0.016447, + "end_time": "2026-09-23T18:33:37.590549", "exception": false, - "start_time": "2026-09-23T13:18:36.590146", + "start_time": "2026-09-23T18:33:37.574102", "status": "completed" }, "tags": [] @@ -2630,10 +2627,10 @@ "id": "2936e442", "metadata": { "papermill": { - "duration": 0.004968, - "end_time": "2026-09-23T13:18:36.610663", + "duration": 0.008147, + "end_time": "2026-09-23T18:33:37.606662", "exception": false, - "start_time": "2026-09-23T13:18:36.605695", + "start_time": "2026-09-23T18:33:37.598515", "status": "completed" }, "tags": [] @@ -2655,16 +2652,16 @@ "id": "174aa8b0", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:18:36.622247Z", - "iopub.status.busy": "2026-09-23T13:18:36.621850Z", - "iopub.status.idle": "2026-09-23T13:20:07.200579Z", - "shell.execute_reply": "2026-09-23T13:20:07.199847Z" + "iopub.execute_input": "2026-09-23T18:33:37.624420Z", + "iopub.status.busy": "2026-09-23T18:33:37.624007Z", + "iopub.status.idle": "2026-09-23T18:34:47.118091Z", + "shell.execute_reply": "2026-09-23T18:34:47.117322Z" }, "papermill": { - "duration": 90.590286, - "end_time": "2026-09-23T13:20:07.206110", + "duration": 69.509321, + "end_time": "2026-09-23T18:34:47.123688", "exception": false, - "start_time": "2026-09-23T13:18:36.615824", + "start_time": "2026-09-23T18:33:37.614367", "status": "completed" }, "tags": [] @@ -2678,11 +2675,11 @@ "================================================================\n", "Metrique | Direct | CoT\n", "----------------------------------------------------------------\n", - "Candidates generees | 3 | 9\n", - "Regles validees (consistantes) | 3 | 5\n", - "Regles rejetees (inconsistantes) | 0 | 4\n", - "Taux d'acceptation | 100% | 56%\n", - "Couverture positifs | 50% | 100%\n", + "Candidates generees | 4 | 9\n", + "Regles validees (consistantes) | 4 | 7\n", + "Regles rejetees (inconsistantes) | 0 | 2\n", + "Taux d'acceptation | 100% | 78%\n", + "Couverture positifs | 100% | 100%\n", "\n", "Lecture : sur CE jeu d'exemples, le concept WillWait admet des regles\n", "POSITIVE consistantes (Patrons=Some AND Hungry=Yes, etc., cf. section 3)\n", @@ -2749,10 +2746,10 @@ "id": "sl7ex2var-md", "metadata": { "papermill": { - "duration": 0.004863, - "end_time": "2026-09-23T13:20:07.215893", + "duration": 0.004629, + "end_time": "2026-09-23T18:34:47.132970", "exception": false, - "start_time": "2026-09-23T13:20:07.211030", + "start_time": "2026-09-23T18:34:47.128341", "status": "completed" }, "tags": [] @@ -2775,16 +2772,16 @@ "id": "sl7ex2var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:20:07.226539Z", - "iopub.status.busy": "2026-09-23T13:20:07.226236Z", - "iopub.status.idle": "2026-09-23T13:20:07.229840Z", - "shell.execute_reply": "2026-09-23T13:20:07.229380Z" + "iopub.execute_input": "2026-09-23T18:34:47.143214Z", + "iopub.status.busy": "2026-09-23T18:34:47.143020Z", + "iopub.status.idle": "2026-09-23T18:34:47.146738Z", + "shell.execute_reply": "2026-09-23T18:34:47.145999Z" }, "papermill": { - "duration": 0.009975, - "end_time": "2026-09-23T13:20:07.230552", + "duration": 0.00992, + "end_time": "2026-09-23T18:34:47.147506", "exception": false, - "start_time": "2026-09-23T13:20:07.220577", + "start_time": "2026-09-23T18:34:47.137586", "status": "completed" }, "tags": [] @@ -2832,10 +2829,10 @@ "id": "0962260b", "metadata": { "papermill": { - "duration": 0.005238, - "end_time": "2026-09-23T13:20:07.240889", + "duration": 0.004994, + "end_time": "2026-09-23T18:34:47.157613", "exception": false, - "start_time": "2026-09-23T13:20:07.235651", + "start_time": "2026-09-23T18:34:47.152619", "status": "completed" }, "tags": [] @@ -2857,16 +2854,16 @@ "id": "3548d43c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:20:07.252225Z", - "iopub.status.busy": "2026-09-23T13:20:07.252026Z", - "iopub.status.idle": "2026-09-23T13:20:07.258204Z", - "shell.execute_reply": "2026-09-23T13:20:07.257756Z" + "iopub.execute_input": "2026-09-23T18:34:47.168404Z", + "iopub.status.busy": "2026-09-23T18:34:47.168152Z", + "iopub.status.idle": "2026-09-23T18:34:47.174021Z", + "shell.execute_reply": "2026-09-23T18:34:47.173641Z" }, "papermill": { - "duration": 0.012574, - "end_time": "2026-09-23T13:20:07.258876", + "duration": 0.01183, + "end_time": "2026-09-23T18:34:47.174588", "exception": false, - "start_time": "2026-09-23T13:20:07.246302", + "start_time": "2026-09-23T18:34:47.162758", "status": "completed" }, "tags": [] @@ -2992,10 +2989,10 @@ "id": "sl7ex3var-md", "metadata": { "papermill": { - "duration": 0.004962, - "end_time": "2026-09-23T13:20:07.269042", + "duration": 0.004268, + "end_time": "2026-09-23T18:34:47.183373", "exception": false, - "start_time": "2026-09-23T13:20:07.264080", + "start_time": "2026-09-23T18:34:47.179105", "status": "completed" }, "tags": [] @@ -3018,16 +3015,16 @@ "id": "sl7ex3var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:20:07.279969Z", - "iopub.status.busy": "2026-09-23T13:20:07.279770Z", - "iopub.status.idle": "2026-09-23T13:20:07.282994Z", - "shell.execute_reply": "2026-09-23T13:20:07.282669Z" + "iopub.execute_input": "2026-09-23T18:34:47.192754Z", + "iopub.status.busy": "2026-09-23T18:34:47.192372Z", + "iopub.status.idle": "2026-09-23T18:34:47.196597Z", + "shell.execute_reply": "2026-09-23T18:34:47.196006Z" }, "papermill": { - "duration": 0.009717, - "end_time": "2026-09-23T13:20:07.283735", + "duration": 0.009796, + "end_time": "2026-09-23T18:34:47.197290", "exception": false, - "start_time": "2026-09-23T13:20:07.274018", + "start_time": "2026-09-23T18:34:47.187494", "status": "completed" }, "tags": [] @@ -3077,10 +3074,10 @@ "id": "3818d99f", "metadata": { "papermill": { - "duration": 0.005023, - "end_time": "2026-09-23T13:20:07.293726", + "duration": 0.004398, + "end_time": "2026-09-23T18:34:47.205838", "exception": false, - "start_time": "2026-09-23T13:20:07.288703", + "start_time": "2026-09-23T18:34:47.201440", "status": "completed" }, "tags": [] @@ -3105,16 +3102,16 @@ "id": "b1ef475c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:20:07.304614Z", - "iopub.status.busy": "2026-09-23T13:20:07.304337Z", - "iopub.status.idle": "2026-09-23T13:20:07.311156Z", - "shell.execute_reply": "2026-09-23T13:20:07.310774Z" + "iopub.execute_input": "2026-09-23T18:34:47.215535Z", + "iopub.status.busy": "2026-09-23T18:34:47.215322Z", + "iopub.status.idle": "2026-09-23T18:34:47.221551Z", + "shell.execute_reply": "2026-09-23T18:34:47.221149Z" }, "papermill": { - "duration": 0.013221, - "end_time": "2026-09-23T13:20:07.311830", + "duration": 0.012256, + "end_time": "2026-09-23T18:34:47.222386", "exception": false, - "start_time": "2026-09-23T13:20:07.298609", + "start_time": "2026-09-23T18:34:47.210130", "status": "completed" }, "tags": [] @@ -3231,10 +3228,10 @@ "id": "sl7ex4var-md", "metadata": { "papermill": { - "duration": 0.004981, - "end_time": "2026-09-23T13:20:07.321990", + "duration": 0.005333, + "end_time": "2026-09-23T18:34:47.232766", "exception": false, - "start_time": "2026-09-23T13:20:07.317009", + "start_time": "2026-09-23T18:34:47.227433", "status": "completed" }, "tags": [] @@ -3257,16 +3254,16 @@ "id": "sl7ex4var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T13:20:07.332905Z", - "iopub.status.busy": "2026-09-23T13:20:07.332534Z", - "iopub.status.idle": "2026-09-23T13:20:07.336056Z", - "shell.execute_reply": "2026-09-23T13:20:07.335567Z" + "iopub.execute_input": "2026-09-23T18:34:47.244098Z", + "iopub.status.busy": "2026-09-23T18:34:47.243885Z", + "iopub.status.idle": "2026-09-23T18:34:47.247477Z", + "shell.execute_reply": "2026-09-23T18:34:47.247021Z" }, "papermill": { - "duration": 0.010292, - "end_time": "2026-09-23T13:20:07.336997", + "duration": 0.009949, + "end_time": "2026-09-23T18:34:47.248179", "exception": false, - "start_time": "2026-09-23T13:20:07.326705", + "start_time": "2026-09-23T18:34:47.238230", "status": "completed" }, "tags": [] @@ -3315,10 +3312,10 @@ "id": "7cb00ad4", "metadata": { "papermill": { - "duration": 0.004951, - "end_time": "2026-09-23T13:20:07.346959", + "duration": 0.004595, + "end_time": "2026-09-23T18:34:47.257462", "exception": false, - "start_time": "2026-09-23T13:20:07.342008", + "start_time": "2026-09-23T18:34:47.252867", "status": "completed" }, "tags": [] @@ -3374,10 +3371,10 @@ "id": "227e37ae", "metadata": { "papermill": { - "duration": 0.004806, - "end_time": "2026-09-23T13:20:07.356635", + "duration": 0.004571, + "end_time": "2026-09-23T18:34:47.266828", "exception": false, - "start_time": "2026-09-23T13:20:07.351829", + "start_time": "2026-09-23T18:34:47.262257", "status": "completed" }, "tags": [] @@ -3405,10 +3402,10 @@ "id": "b2e6b9c6", "metadata": { "papermill": { - "duration": 0.00496, - "end_time": "2026-09-23T13:20:07.366607", + "duration": 0.004649, + "end_time": "2026-09-23T18:34:47.276059", "exception": false, - "start_time": "2026-09-23T13:20:07.361647", + "start_time": "2026-09-23T18:34:47.271410", "status": "completed" }, "tags": [] @@ -3463,17 +3460,17 @@ }, "papermill": { "default_parameters": {}, - "duration": 334.665881, - "end_time": "2026-09-23T13:20:07.715626", + "duration": 274.811409, + "end_time": "2026-09-23T18:34:47.622591", "environment_variables": {}, "exception": null, - "input_path": "MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb", - "output_path": "MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb", + "input_path": "SL-9-LLM-SymbolicLearning.ipynb", + "output_path": "SL-9_output.ipynb", "parameters": {}, - "start_time": "2026-09-23T13:14:33.049745", + "start_time": "2026-09-23T18:30:12.811182", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From 195d556dc8140bc2aab91f74093da26d062964fe Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 23 Sep 2026 22:31:53 +0200 Subject: [PATCH 3/5] fix(notebook,#16390): SL-9 realignement markdown des 3 cellules d'interpretation sur les sorties commitees (relecture adjoint c.5801581101) Co-Authored-By: Claude Sonnet 5 --- .../SL-9-LLM-SymbolicLearning.ipynb | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb index bda088e9fe..f9a75961f4 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb @@ -924,21 +924,22 @@ "\n", "L'oracle symbolique a identifie les règles correctes et incorrectes :\n", "\n", - "| Règle | Verdict | TP | FP | Raison |\n", + "| Règle | Verdict | TP | FP | Rappel |\n", "|-------|---------|----|----|--------|\n", - "| R1 (Patrons=Some AND Hungry=Yes => WillWait) | **Consistante** | 3 | 0 | Regle positive, aucun faux positif |\n", - "| R2 (Patrons=Full AND Hungry=Yes AND Price=$ => WillWait) | **Consistante** | 3 | 0 | Regle positive, aucun faux positif |\n", - "| R3 (Hungry=No => NOT WillWait) | **Consistante** | 5 | 0 | Regle negative correcte (recall=0.83) |\n", - "| R4 (Patrons=None => NOT WillWait) | **Consistante** | 2 | 0 | Règle negative correcte |\n", - "| R5 (Patrons=Full AND Price=$$$ => NOT) | **Consistante** | 2 | 0 | Règle negative correcte |\n", - "\n", - "**Observation importante** : 5/5 regles candidates valident l'oracle symbolique (FP=0),\n", - "dont **deux regles positives** (V1, V2) sont parfaitement consistantes sur ce run.\n", - "C'est un succes : le LLM produit des regles positives et negatives qui passent toutes\n", - "la verification symbolique -- couverture 6/6 des exemples positifs (cf. cell[15]).\n", - "Note : la generation R2 ajoute la condition `Price=$` ce qui distingue l'exemple 9\n", - "\n", - "> **Point cle** : L'oracle symbolique valide 5/5 regles candidates (cf. cell[15]), incluant les regles positives V1 et V2 -- une difference notable avec un run anterieur (offline `reference_rules_offline` cell[10]) ou la generation directe produisait des regles inconsistantes. La non-reproductibilite du LLM (meme prompt, run different) est documentee en cellule [32] (robustesse).\n" + "| R1 (Hungry=No => NOT WillWait) | **Consistante** | 5 | 0 | 0.83 |\n", + "| R2 (Hungry=Yes AND Patrons=Some => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", + "| R3 (Hungry=Yes AND Price=$ => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", + "| R4 (Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait) | **Consistante** | 1 | 0 | 0.17 |\n", + "\n", + "**Observation importante** : 4/4 règles candidates valident l'oracle symbolique (FP=0),\n", + "dont **deux règles positives** (V2, V3) parfaitement consistantes sur ce run.\n", + "Le LLM produit des règles positives et négatives qui passent toutes la vérification\n", + "symbolique -- couverture 6/6 des exemples positifs (cf. cell[15]).\n", + "Note : la génération sépare les `Patrons=Full` par prix -- R3 couvre les Full à\n", + "`Price=$` (exemples 2 et 3 positifs), R4 isole le cas `Patrons=Full AND Price=$$$`\n", + "(exemple 5 négatif).\n", + "\n", + "> **Point cle** : l'oracle symbolique valide 4/4 règles candidates (cf. cell[15]), incluant les règles positives V2 et V3 -- une différence notable avec un run antérieur (offline `reference_rules_offline` cell[10]) où la génération directe produisait des règles inconsistantes. La non-reproductibilité du LLM (même prompt, run différent) est documentée en cellule [32] (robustesse).\n" ] }, { @@ -1422,20 +1423,20 @@ "\n", "| Méthode | Nombre de règles | Verdict oracle (section 3) | Source |\n", "|---------|-----------------|----------------------------|--------|\n", - "| LLM direct | 5 candidates | 5 consistantes (FP=0), 0 rejetees (cell[15]) | Generation globale |\n", - "| CoT extraction | 5 uniques (sur 6 traces) | verification oracle en cell[15]/[19], voir cell[22]+ pour le verdict complet | Raisonnement pas-a-pas |\n", + "| LLM direct | 4 candidates | 4 consistantes (FP=0), 0 rejetées (cell[15]) | Génération globale |\n", + "| CoT extraction | 5 uniques (sur 6 traces) | fusion dans le pool : 9 candidates, 7 validées, **2 rejetées** (cell[24]) | Raisonnement pas-à-pas |\n", "\n", "Les règles extraites du CoT ont deux atouts :\n", - "1. Chaque étape du raisonnement peut etre verifiee individuellement\n", - "2. Elles sont ancrees dans des exemples concrets -- la trace sur l'exemple 4\n", - " (negatif) produit `Patrons=Full AND Hungry=No => NOT WillWait`, une règle\n", - " que la generation directe avait manquee\n", + "1. Chaque étape du raisonnement peut être vérifiée individuellement\n", + "2. Elles sont ancrées dans des exemples concrets -- la trace sur l'exemple 4\n", + " (négatif) produit `Patrons=Full AND Hungry=No => NOT WillWait` (C3), une règle\n", + " que la génération directe avait manquée\n", "\n", - "Mais l'ancrage ne garantit rien : la regle CoT `Patrons=Some AND WaitEstimate=0-10 => WillWait`\n", - "(cellule [19] output C1) reste une hypothese non verifiee par l'oracle a ce stade.\n", - "L'oracle reste indispensable.\n", + "Mais l'ancrage ne garantit rien : la règle CoT `Patrons=Some => WillWait`\n", + "(cellule [19] sortie C1) est **rejetée par l'oracle en cell[24] (FP=1)** --\n", + "elle couvre un exemple négatif. L'oracle reste indispensable.\n", "\n", - "> **Analogie EBL** : Le CoT est a l'extraction de règles ce que la preuve EBL est a la variabilisation. La trace guide la generalisation." + "> **Analogie EBL** : Le CoT est à l'extraction de règles ce que la preuve EBL est à la variabilisation. La trace guide la généralisation.\n" ] }, { @@ -1648,19 +1649,20 @@ "source": [ "### Exécution du pipeline avec Chain-of-Thought\n", "\n", - "Le pipeline `NeuroSymbolicPipeline` ci-dessus a ete execute **sans** l'option\n", + "Le pipeline `NeuroSymbolicPipeline` ci-dessus a été exécuté **sans** l'option\n", "Chain-of-Thought. Activons maintenant le CoT pour observer ce que les traces de\n", "raisonnement apportent au pool de candidats :\n", "\n", - "- **Sans CoT** : seules les 5 règles simulees par `llm_generate_rules` sont candidates\n", - "- **Avec CoT** : des traces sont generees sur 3 exemples positifs et 3 negatifs ;\n", - " après deduplication contre les candidates directes, deux règles negatives nouvelles\n", - " emerge -- `Patrons=Full AND Hungry=No => NOT WillWait` et `Patrons=None => NOT WillWait`,\n", - " issues de traces sur des exemples **negatifs**\n", + "- **Sans CoT** : seules les 4 règles générées par `llm_generate_rules` sont candidates\n", + "- **Avec CoT** : des traces sont générées sur 3 exemples positifs et 3 négatifs ;\n", + " après déduplication contre les candidates directes, deux règles négatives nouvelles\n", + " émergent -- `Patrons=Full AND Hungry=No => NOT WillWait` (C3) et\n", + " `Patrons=None => NOT WillWait` (C4), issues de traces sur des exemples **négatifs**\n", "\n", - "C'est le point interessant : la generation directe, focalisee sur \"expliquer les\n", - "positifs\", avait manque cette règle negative. Le raisonnement exemple-par-exemple\n", - "du CoT la fait apparaitre -- et l'oracle la valide.\n" + "C'est le point intéressant : la génération directe, focalisée sur « expliquer les\n", + "positifs », avait manqué ces règles négatives. Le raisonnement exemple-par-exemple\n", + "du CoT les fait apparaître -- et l'oracle les valide toutes les deux\n", + "(cell[24] : `[OK]` FP=0, TP=2 chacune).\n" ] }, { @@ -3473,4 +3475,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file From ce8085579c07ec0bba42aa90b8eb43782d688af3 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 23 Sep 2026 23:17:27 +0200 Subject: [PATCH 4/5] =?UTF-8?q?fix(sl9,#17562):=20voie=20(a)=20=E2=80=94?= =?UTF-8?q?=20marqueur=20[repli]=20+=20parseur=20tolerant,=20re-execution?= =?UTF-8?q?=20v4=20(56/56,=200=20repli)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reponse a la relecture adjointe du 22:37 (repli silencieux Ex 4 sous en-tete "vrai LLM", attribution C3 erronee, body "0 repli" faux pour cette trace) : - cellule 17 : champ CoTTrace.source + marqueur [repli] par trace + diagnostic (derniere ligne LLM) sur chaque repli — plus de repli invisible - cellule 10 : parse_llm_rules tolerant aux deux formes tueuses mesurees en v3 — valeur contenant ">" (WaitEstimate=>60 : rsplit sur le DERNIER '=>') et enrobage <...> (strip des chevrons) ; comportement inchange pour les lignes a un seul '=>' (formes deja verifiees) - diagnostic Ex 4 : ce n'etait PAS le titre colle (deja gere cellule 10) mais la valeur ">60" qui cassait le split ; Ex 5 : enrobage <...> - re-execution complete v4 : 56/56, 0 erreur, 0 [repli], en-tete VRAI LLM (models.myia.io, gpt-5.6-sol) - prose 14/20/23 reecrite sur les sorties fraiches (regles v4 V1-V4, pool 9/6/3, exclusions WaitEstimate) ; numerotation c14 corrigee (Ex 1/3/11, Ex 9) Co-Authored-By: Claude Sonnet 5 --- .../SL-9-LLM-SymbolicLearning.ipynb | 770 +++++++++--------- 1 file changed, 398 insertions(+), 372 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb index f9a75961f4..bfb043f8e8 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb @@ -5,10 +5,10 @@ "id": "097196f2", "metadata": { "papermill": { - "duration": 0.004477, - "end_time": "2026-09-23T18:30:14.493075", + "duration": 0.008054, + "end_time": "2026-09-23T21:09:47.689211", "exception": false, - "start_time": "2026-09-23T18:30:14.488598", + "start_time": "2026-09-23T21:09:47.681157", "status": "completed" }, "tags": [] @@ -48,16 +48,16 @@ "id": "3dc32d19", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:14.501868Z", - "iopub.status.busy": "2026-09-23T18:30:14.501660Z", - "iopub.status.idle": "2026-09-23T18:30:15.460878Z", - "shell.execute_reply": "2026-09-23T18:30:15.460328Z" + "iopub.execute_input": "2026-09-23T21:09:47.709357Z", + "iopub.status.busy": "2026-09-23T21:09:47.709008Z", + "iopub.status.idle": "2026-09-23T21:09:48.776971Z", + "shell.execute_reply": "2026-09-23T21:09:48.776458Z" }, "papermill": { - "duration": 0.964505, - "end_time": "2026-09-23T18:30:15.461595", + "duration": 1.079561, + "end_time": "2026-09-23T21:09:48.777727", "exception": false, - "start_time": "2026-09-23T18:30:14.497090", + "start_time": "2026-09-23T21:09:47.698166", "status": "completed" }, "tags": [] @@ -127,10 +127,10 @@ "id": "23731406", "metadata": { "papermill": { - "duration": 0.005705, - "end_time": "2026-09-23T18:30:15.472566", + "duration": 0.004861, + "end_time": "2026-09-23T21:09:48.788131", "exception": false, - "start_time": "2026-09-23T18:30:15.466861", + "start_time": "2026-09-23T21:09:48.783270", "status": "completed" }, "tags": [] @@ -169,16 +169,16 @@ "id": "f1d96718", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:15.480323Z", - "iopub.status.busy": "2026-09-23T18:30:15.480115Z", - "iopub.status.idle": "2026-09-23T18:30:15.485665Z", - "shell.execute_reply": "2026-09-23T18:30:15.485298Z" + "iopub.execute_input": "2026-09-23T21:09:48.797756Z", + "iopub.status.busy": "2026-09-23T21:09:48.797394Z", + "iopub.status.idle": "2026-09-23T21:09:48.802743Z", + "shell.execute_reply": "2026-09-23T21:09:48.802260Z" }, "papermill": { - "duration": 0.010484, - "end_time": "2026-09-23T18:30:15.486355", + "duration": 0.011526, + "end_time": "2026-09-23T21:09:48.803903", "exception": false, - "start_time": "2026-09-23T18:30:15.475871", + "start_time": "2026-09-23T21:09:48.792377", "status": "completed" }, "tags": [] @@ -261,10 +261,10 @@ "id": "3827f67e", "metadata": { "papermill": { - "duration": 0.003655, - "end_time": "2026-09-23T18:30:15.493489", + "duration": 0.005952, + "end_time": "2026-09-23T21:09:48.815428", "exception": false, - "start_time": "2026-09-23T18:30:15.489834", + "start_time": "2026-09-23T21:09:48.809476", "status": "completed" }, "tags": [] @@ -286,10 +286,10 @@ "id": "59e172f2", "metadata": { "papermill": { - "duration": 0.003685, - "end_time": "2026-09-23T18:30:15.500910", + "duration": 0.004589, + "end_time": "2026-09-23T21:09:48.824137", "exception": false, - "start_time": "2026-09-23T18:30:15.497225", + "start_time": "2026-09-23T21:09:48.819548", "status": "completed" }, "tags": [] @@ -324,16 +324,16 @@ "id": "581df035", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:15.509161Z", - "iopub.status.busy": "2026-09-23T18:30:15.508868Z", - "iopub.status.idle": "2026-09-23T18:30:15.514651Z", - "shell.execute_reply": "2026-09-23T18:30:15.514144Z" + "iopub.execute_input": "2026-09-23T21:09:48.834078Z", + "iopub.status.busy": "2026-09-23T21:09:48.833733Z", + "iopub.status.idle": "2026-09-23T21:09:48.840238Z", + "shell.execute_reply": "2026-09-23T21:09:48.839463Z" }, "papermill": { - "duration": 0.010798, - "end_time": "2026-09-23T18:30:15.515340", + "duration": 0.012822, + "end_time": "2026-09-23T21:09:48.841180", "exception": false, - "start_time": "2026-09-23T18:30:15.504542", + "start_time": "2026-09-23T21:09:48.828358", "status": "completed" }, "tags": [] @@ -406,10 +406,10 @@ "id": "72e21fc7", "metadata": { "papermill": { - "duration": 0.003768, - "end_time": "2026-09-23T18:30:15.522844", + "duration": 0.005408, + "end_time": "2026-09-23T21:09:48.851038", "exception": false, - "start_time": "2026-09-23T18:30:15.519076", + "start_time": "2026-09-23T21:09:48.845630", "status": "completed" }, "tags": [] @@ -433,16 +433,16 @@ "id": "eed948cc", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:15.531134Z", - "iopub.status.busy": "2026-09-23T18:30:15.530934Z", - "iopub.status.idle": "2026-09-23T18:30:15.535702Z", - "shell.execute_reply": "2026-09-23T18:30:15.535129Z" + "iopub.execute_input": "2026-09-23T21:09:48.863277Z", + "iopub.status.busy": "2026-09-23T21:09:48.862815Z", + "iopub.status.idle": "2026-09-23T21:09:48.867364Z", + "shell.execute_reply": "2026-09-23T21:09:48.866965Z" }, "papermill": { - "duration": 0.009867, - "end_time": "2026-09-23T18:30:15.536426", + "duration": 0.013138, + "end_time": "2026-09-23T21:09:48.869162", "exception": false, - "start_time": "2026-09-23T18:30:15.526559", + "start_time": "2026-09-23T21:09:48.856024", "status": "completed" }, "tags": [] @@ -532,10 +532,10 @@ "id": "85c22afd", "metadata": { "papermill": { - "duration": 0.004501, - "end_time": "2026-09-23T18:30:15.545090", + "duration": 0.008467, + "end_time": "2026-09-23T21:09:48.882595", "exception": false, - "start_time": "2026-09-23T18:30:15.540589", + "start_time": "2026-09-23T21:09:48.874128", "status": "completed" }, "tags": [] @@ -561,16 +561,16 @@ "id": "1c109513", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:15.553676Z", - "iopub.status.busy": "2026-09-23T18:30:15.553473Z", - "iopub.status.idle": "2026-09-23T18:30:26.414906Z", - "shell.execute_reply": "2026-09-23T18:30:26.414506Z" + "iopub.execute_input": "2026-09-23T21:09:48.899852Z", + "iopub.status.busy": "2026-09-23T21:09:48.899645Z", + "iopub.status.idle": "2026-09-23T21:09:57.402428Z", + "shell.execute_reply": "2026-09-23T21:09:57.401828Z" }, "papermill": { - "duration": 10.866662, - "end_time": "2026-09-23T18:30:26.415578", + "duration": 8.512607, + "end_time": "2026-09-23T21:09:57.403180", "exception": false, - "start_time": "2026-09-23T18:30:15.548916", + "start_time": "2026-09-23T21:09:48.890573", "status": "completed" }, "tags": [] @@ -582,17 +582,17 @@ "text": [ "Reponse brute (gpt-5.6-sol) :\n", "============================================================\n", - "**Generating consistent rules****Refining exception rule**Hungry=No => NOT WillWait \n", - "Hungry=Yes AND Patrons=Some => WillWait \n", + "**Deriving coverage rules****Simplifying coverage rules**Hungry=Yes AND Patrons=Some => WillWait \n", "Hungry=Yes AND Price=$ => WillWait \n", - "Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", + "Hungry=No => NOT WillWait \n", + "Patrons=Full AND Price=$$$ => NOT WillWait\n", "============================================================\n", "\n", "Regles candidates parsees : 4\n", - " R1: Hungry=No => NOT WillWait\n", - " R2: Hungry=Yes AND Patrons=Some => WillWait\n", - " R3: Hungry=Yes AND Price=$ => WillWait\n", - " R4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" + " R1: Hungry=Yes AND Patrons=Some => WillWait\n", + " R2: Hungry=Yes AND Price=$ => WillWait\n", + " R3: Hungry=No => NOT WillWait\n", + " R4: Patrons=Full AND Price=$$$ => NOT WillWait\n" ] } ], @@ -647,17 +647,22 @@ " \"\"\"\n", " rules = []\n", " for line in text.splitlines():\n", - " line = line.strip().strip(\"`\").lstrip(\"-*0123456789. \").strip()\n", + " line = line.strip().strip(\"`\").lstrip(\"-*0123456789. \").strip().strip(\"<>\")\n", " if \"=>\" not in line:\n", " continue\n", - " body, head = line.split(\"=>\", 1)\n", + " # rsplit sur le DERNIER '=>' : une valeur d'attribut peut contenir\n", + " # '=>' (ex. WaitEstimate=>60) ; le premier split perdait alors la\n", + " # conclusion (mesure run v3 : Ex 4 REGLE non extractible). Les\n", + " # lignes a un seul '=>' sont inchangerees par rsplit.\n", + " # strip('<>') amont : le LLM enrobe parfois la regle de chevrons (Ex 5 v3).\n", + " body, head = line.rsplit(\"=>\", 1)\n", " # titres de resume de raisonnement (**...**) colles en tete de la 1re\n", " # regle par le gateway : le lstrip amont a deja mange les etoiles\n", " # ouvrantes, donc la fermente de la DERNIERE paire marque le debut\n", " # des vraies conditions (sans ce retrait : 4 brutes, 3 parses)\n", " if \"**\" in body:\n", " body = body.rsplit(\"**\", 1)[1].lstrip(\"*\").strip()\n", - " head = head.strip().rstrip(\".\").strip(\"*` \")\n", + " head = head.strip().rstrip(\".\").strip(\"*` <>\")\n", " negated = head.upper().startswith(\"NOT \")\n", " if negated:\n", " head = head[4:].strip()\n", @@ -723,10 +728,10 @@ "id": "bf930a24", "metadata": { "papermill": { - "duration": 0.004194, - "end_time": "2026-09-23T18:30:26.423856", + "duration": 0.004296, + "end_time": "2026-09-23T21:09:57.411746", "exception": false, - "start_time": "2026-09-23T18:30:26.419662", + "start_time": "2026-09-23T21:09:57.407450", "status": "completed" }, "tags": [] @@ -751,10 +756,10 @@ "id": "d6bb9fe1", "metadata": { "papermill": { - "duration": 0.003706, - "end_time": "2026-09-23T18:30:26.431217", + "duration": 0.00412, + "end_time": "2026-09-23T21:09:57.420131", "exception": false, - "start_time": "2026-09-23T18:30:26.427511", + "start_time": "2026-09-23T21:09:57.416011", "status": "completed" }, "tags": [] @@ -781,16 +786,16 @@ "id": "2c0873ae", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:26.439833Z", - "iopub.status.busy": "2026-09-23T18:30:26.439636Z", - "iopub.status.idle": "2026-09-23T18:30:26.446544Z", - "shell.execute_reply": "2026-09-23T18:30:26.446208Z" + "iopub.execute_input": "2026-09-23T21:09:57.429760Z", + "iopub.status.busy": "2026-09-23T21:09:57.429549Z", + "iopub.status.idle": "2026-09-23T21:09:57.437211Z", + "shell.execute_reply": "2026-09-23T21:09:57.436559Z" }, "papermill": { - "duration": 0.012364, - "end_time": "2026-09-23T18:30:26.447215", + "duration": 0.014144, + "end_time": "2026-09-23T21:09:57.438492", "exception": false, - "start_time": "2026-09-23T18:30:26.434851", + "start_time": "2026-09-23T21:09:57.424348", "status": "completed" }, "tags": [] @@ -805,10 +810,10 @@ "\n", "Regle | TP | FP | FN | Prec | Recall | OK\n", "--------------------------------------------------------------------------------\n", - "R1: Hungry=No => NOT WillWait | 5 | 0 | 1 | 1.00 | 0.83 | OUI\n", - "R2: Hungry=Yes AND Patrons=Some => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", - "R3: Hungry=Yes AND Price=$ => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", - "R4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1 | 0 | 5 | 1.00 | 0.17 | OUI\n", + "R1: Hungry=Yes AND Patrons=Some => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", + "R2: Hungry=Yes AND Price=$ => WillWait | 3 | 0 | 3 | 1.00 | 0.50 | OUI\n", + "R3: Hungry=No => NOT WillWait | 5 | 0 | 1 | 1.00 | 0.83 | OUI\n", + "R4: Patrons=Full AND Price=$$$ => NOT WillWait | 2 | 0 | 4 | 1.00 | 0.33 | OUI\n", "\n", "Legende : TP=Vrais Positifs, FP=Faux Positifs, FN=Faux Negatifs, OK=Consistante\n" ] @@ -911,10 +916,10 @@ "id": "0f9984a1", "metadata": { "papermill": { - "duration": 0.004109, - "end_time": "2026-09-23T18:30:26.455270", + "duration": 0.004495, + "end_time": "2026-09-23T21:09:57.448805", "exception": false, - "start_time": "2026-09-23T18:30:26.451161", + "start_time": "2026-09-23T21:09:57.444310", "status": "completed" }, "tags": [] @@ -922,24 +927,24 @@ "source": [ "### Interpretation : Verification symbolique\n", "\n", - "L'oracle symbolique a identifie les règles correctes et incorrectes :\n", + "L'oracle symbolique a identifié les règles correctes et incorrectes :\n", "\n", "| Règle | Verdict | TP | FP | Rappel |\n", "|-------|---------|----|----|--------|\n", - "| R1 (Hungry=No => NOT WillWait) | **Consistante** | 5 | 0 | 0.83 |\n", - "| R2 (Hungry=Yes AND Patrons=Some => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", - "| R3 (Hungry=Yes AND Price=$ => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", - "| R4 (Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait) | **Consistante** | 1 | 0 | 0.17 |\n", + "| R1 (Hungry=Yes AND Patrons=Some => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", + "| R2 (Hungry=Yes AND Price=$ => WillWait) | **Consistante** | 3 | 0 | 0.50 |\n", + "| R3 (Hungry=No => NOT WillWait) | **Consistante** | 5 | 0 | 0.83 |\n", + "| R4 (Patrons=Full AND Price=$$$ => NOT WillWait) | **Consistante** | 2 | 0 | 0.33 |\n", "\n", "**Observation importante** : 4/4 règles candidates valident l'oracle symbolique (FP=0),\n", - "dont **deux règles positives** (V2, V3) parfaitement consistantes sur ce run.\n", + "dont **deux règles positives** (V1, V2) parfaitement consistantes sur ce run.\n", "Le LLM produit des règles positives et négatives qui passent toutes la vérification\n", "symbolique -- couverture 6/6 des exemples positifs (cf. cell[15]).\n", - "Note : la génération sépare les `Patrons=Full` par prix -- R3 couvre les Full à\n", - "`Price=$` (exemples 2 et 3 positifs), R4 isole le cas `Patrons=Full AND Price=$$$`\n", - "(exemple 5 négatif).\n", + "Note : la génération sépare les `Patrons=Full` par prix -- R2 couvre les `Hungry=Yes`\n", + "à `Price=$` (Ex 1, 3 et 11, tous positifs), R4 prend les `Full` à `Price=$$$`\n", + "(Ex 4 et Ex 9, deux négatifs -- elle n'exige pas `Hungry`).\n", "\n", - "> **Point cle** : l'oracle symbolique valide 4/4 règles candidates (cf. cell[15]), incluant les règles positives V2 et V3 -- une différence notable avec un run antérieur (offline `reference_rules_offline` cell[10]) où la génération directe produisait des règles inconsistantes. La non-reproductibilité du LLM (même prompt, run différent) est documentée en cellule [32] (robustesse).\n" + "> **Point cle** : l'oracle symbolique valide 4/4 règles candidates (cf. cell[15]), incluant les règles positives V1 et V2 -- une différence notable avec un run antérieur (offline `reference_rules_offline` cell[10]) où la génération directe produisait des règles inconsistantes. La non-reproductibilité du LLM (même prompt, run différent) est documentée en cellule [32] (robustesse).\n" ] }, { @@ -948,16 +953,16 @@ "id": "9a30e01b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:26.463515Z", - "iopub.status.busy": "2026-09-23T18:30:26.463326Z", - "iopub.status.idle": "2026-09-23T18:30:26.468805Z", - "shell.execute_reply": "2026-09-23T18:30:26.468313Z" + "iopub.execute_input": "2026-09-23T21:09:57.458537Z", + "iopub.status.busy": "2026-09-23T21:09:57.458329Z", + "iopub.status.idle": "2026-09-23T21:09:57.463376Z", + "shell.execute_reply": "2026-09-23T21:09:57.462951Z" }, "papermill": { - "duration": 0.010471, - "end_time": "2026-09-23T18:30:26.469483", + "duration": 0.01105, + "end_time": "2026-09-23T21:09:57.464035", "exception": false, - "start_time": "2026-09-23T18:30:26.459012", + "start_time": "2026-09-23T21:09:57.452985", "status": "completed" }, "tags": [] @@ -973,10 +978,10 @@ " Regles rejetees : 0\n", "\n", "Regles validees (consistantes, prises pour le modele) :\n", - " V1: Hungry=No => NOT WillWait\n", - " V2: Hungry=Yes AND Patrons=Some => WillWait\n", - " V3: Hungry=Yes AND Price=$ => WillWait\n", - " V4: Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", + " V1: Hungry=Yes AND Patrons=Some => WillWait\n", + " V2: Hungry=Yes AND Price=$ => WillWait\n", + " V3: Hungry=No => NOT WillWait\n", + " V4: Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", "Regles rejetees par l'oracle (au moins un faux positif) :\n", " (aucune ce run)\n", @@ -1037,10 +1042,10 @@ "id": "74c02d03", "metadata": { "papermill": { - "duration": 0.003661, - "end_time": "2026-09-23T18:30:26.477084", + "duration": 0.00444, + "end_time": "2026-09-23T21:09:57.472854", "exception": false, - "start_time": "2026-09-23T18:30:26.473423", + "start_time": "2026-09-23T21:09:57.468414", "status": "completed" }, "tags": [] @@ -1076,16 +1081,16 @@ "id": "83e5f5eb", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:30:26.485209Z", - "iopub.status.busy": "2026-09-23T18:30:26.485025Z", - "iopub.status.idle": "2026-09-23T18:31:32.292790Z", - "shell.execute_reply": "2026-09-23T18:31:32.291726Z" + "iopub.execute_input": "2026-09-23T21:09:57.483075Z", + "iopub.status.busy": "2026-09-23T21:09:57.482731Z", + "iopub.status.idle": "2026-09-23T21:11:04.397442Z", + "shell.execute_reply": "2026-09-23T21:11:04.396556Z" }, "papermill": { - "duration": 65.815823, - "end_time": "2026-09-23T18:31:32.296450", + "duration": 66.925118, + "end_time": "2026-09-23T21:11:04.402406", "exception": false, - "start_time": "2026-09-23T18:30:26.480627", + "start_time": "2026-09-23T21:09:57.477288", "status": "completed" }, "tags": [] @@ -1105,10 +1110,11 @@ "text": [ "\n", "Ex 0 [+] Pat=Some, Type=French, Hungry=Yes\n", - " Etape 1: **Determining restaurant rule**1. Patrons=Some suffit ici à prédire que le clien\n", - " Raisonnement : **Determining restaurant rule**1. Patrons=Some suffit ici à prédire que le client attendra.\n", + " Etape 1: **Checking patrons examples****Checking restaurant examples**1. Il y a quelques \n", + " Raisonnement : **Checking patrons examples****Checking restaurant examples**1. Il y a quelques clients (Patrons=Some).\n", + " Etape 2: 2. L’attente estimée est courte (WaitEstimate=0-10).\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Some => WillWait\n" + " => Regle extraite : Patrons=Some AND WaitEstimate=0-10 => WillWait\n" ] }, { @@ -1117,12 +1123,11 @@ "text": [ "\n", "Ex 1 [+] Pat=Full, Type=Thai, Hungry=Yes\n", - " Etape 1: **Inferring restaurant dataset rules****Comparing restaurant examples****Selecti\n", - " Raisonnement : **Inferring restaurant dataset rules****Comparing restaurant examples****Selecting a decision rule**1. Le restaurant est complet (Patrons=Full).\n", - " Etape 2: 2. L’attente estimée est de 30 à 60 minutes ; pour ce profil, le client n’attend\n", - " Raisonnement : 2. L’attente estimée est de 30 à 60 minutes ; pour ce profil, le client n’attend pas.\n", + " Etape 1: **Determining the restaurant label****Checking X2 rule match**1. Le restaurant e\n", + " Raisonnement : **Determining the restaurant label****Checking X2 rule match**1. Le restaurant est complet et l’attente estimée est de 30 à 60 minutes.\n", + " Etape 2: 2. Pour ce profil, le client ne va pas attendre.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=Full AND Type=Thai => NOT WillWait\n" + " => Regle extraite : Patrons=Full AND WaitEstimate=30-60 AND Type=Thai => NOT WillWait\n" ] }, { @@ -1131,10 +1136,8 @@ "text": [ "\n", "Ex 2 [-] Pat=Some, Type=Burger, Hungry=No\n", - " Etape 1: **Determining restaurant rule**1. Patrons=Some indique qu’il reste des places.\n", - " Etape 2: 2. Dans cette règle de classification, le client attend.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Some => WillWait\n" + " => Regle extraite : Patrons=Some AND WaitEstimate=0-10 => WillWait\n" ] }, { @@ -1143,12 +1146,11 @@ "text": [ "\n", "Ex 4 [-] Pat=Full, Type=French, Hungry=No\n", - " Etape 1: Patrons = Full\n", - " Raisonnement : La frequentation est 'Full'\n", - " Etape 2: Hungry = No\n", - " Raisonnement : Si le restaurant est plein, la faim tranche\n", + " Etape 1: **Identifying the dataset row****Checking restaurant rows****Verifying wait rule\n", + " Raisonnement : **Identifying the dataset row****Checking restaurant rows****Verifying wait rule**1. L’estimation d’attente est supérieure à 60 minutes.\n", + " Etape 2: 2. La règle correspondante prédit que le client n’attendra pas.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=Full AND Hungry=No => NOT WillWait\n" + " => Regle extraite : WaitEstimate=>60 => NOT WillWait\n" ] }, { @@ -1157,10 +1159,11 @@ "text": [ "\n", "Ex 6 [-] Pat=None, Type=Burger, Hungry=No\n", - " Etape 1: 1. Patrons=None : il n’y a aucun client dans le restaurant.\n", - " Etape 2: 2. Dans cette règle de classification, Patrons=None conduit à WillWait=False.\n", + " Etape 1: **Inferring the restaurant rule****Selecting rule conditions**1. Patrons=None in\n", + " Raisonnement : **Inferring the restaurant rule****Selecting rule conditions**1. Patrons=None indique que le restaurant est vide.\n", + " Etape 2: 2. Dans la règle de classification, ce cas prédit que le client n’attendra pas.\n", " => Decision : WillWait=False\n", - " => Regle extraite : Patrons=None => NOT WillWait\n" + " => Regle extraite : Patrons=None AND Hungry=No => NOT WillWait\n" ] }, { @@ -1169,11 +1172,10 @@ "text": [ "\n", "Ex 11 [+] Pat=Full, Type=Burger, Hungry=Yes\n", - " Etape 1: **Inferring restaurant row matches****Checking X12 conditions****Selecting X12 c\n", - " Raisonnement : **Inferring restaurant row matches****Checking X12 conditions****Selecting X12 conditions**1. Le restaurant est complet, mais l’attente estimée est de 30 à 60 minutes.\n", - " Etape 2: 2. Cette combinaison correspond à un cas où le client attend.\n", + " Etape 1: **Inferring restaurant label****Verifying X12 rule match****Checking rule condit\n", + " Raisonnement : **Inferring restaurant label****Verifying X12 rule match****Checking rule conditions**Le client correspond au cas où Type=Burger et WaitEstimate=30-60, associé à une attente acceptée.\n", " => Decision : WillWait=True\n", - " => Regle extraite : Patrons=Full AND Type=Burger AND WaitEstimate=30-60 => WillWait\n" + " => Regle extraite : Type=Burger AND WaitEstimate=30-60 => WillWait\n" ] } ], @@ -1194,6 +1196,7 @@ " steps: list[CoTStep]\n", " final_answer: bool\n", " extracted_rule: Optional[HornClause] = None\n", + " source: str = \"llm\" # \"llm\" ou \"repli\" (reference deterministe)\n", "\n", "\n", "def reference_cot_classification(example: dict, idx: int) -> CoTTrace:\n", @@ -1233,21 +1236,34 @@ " \"\"\"CoT par le VRAI LLM ; repli deterministe si indisponible/non parsable.\"\"\"\n", " raw = llm_chat(_build_cot_prompt(example), max_tokens=2500)\n", " if not raw:\n", - " return reference_cot_classification(example, idx)\n", + " print(f\" [repli] Ex {idx} : reponse LLM vide -> trace de reference\")\n", + " trace = reference_cot_classification(example, idx)\n", + " trace.source = \"repli\"\n", + " return trace\n", " answer = example[\"WillWait\"]\n", " rule = None\n", " steps = []\n", + " # Extraction par regex sur le texte BRUT : le gateway colle parfois un titre\n", + " # markdown directement devant REPONSE:/REGLE: (defaut #17600), ce qui cassait\n", + " # le startswith et declenchait un repli silencieux (Ex 4 de la tete 195d556dc8).\n", + " reps = re.findall(r\"REPONSE\\s*:\\s*(TRUE|FALSE)\", raw, re.IGNORECASE)\n", + " regs = re.findall(r\"REGLE\\s*:\\s*(.+)\", raw, re.IGNORECASE)\n", + " if reps:\n", + " answer = reps[-1].upper() == \"TRUE\"\n", + " if regs:\n", + " parsed = parse_llm_rules(regs[-1])\n", + " rule = parsed[0] if parsed else None\n", " for line in (l.strip() for l in raw.splitlines() if l.strip()):\n", - " up = line.upper()\n", - " if up.startswith(\"REPONSE:\"):\n", - " answer = \"TRUE\" in up.split(\":\", 1)[1]\n", - " elif up.startswith(\"REGLE:\"):\n", - " parsed = parse_llm_rules(line.split(\":\", 1)[1])\n", - " rule = parsed[0] if parsed else None\n", - " else:\n", - " steps.append(CoTStep(len(steps) + 1, line[:80], line, \"\"))\n", - " if rule is None: # le LLM n'a pas donne de regle exploitable -> référence\n", - " return reference_cot_classification(example, idx)\n", + " if re.search(r\"(REPONSE|REGLE)\\s*:\", line, re.IGNORECASE):\n", + " continue # ligne machine, pas une etape de raisonnement\n", + " steps.append(CoTStep(len(steps) + 1, line[:80], line, \"\"))\n", + " if rule is None: # le LLM n'a pas donne de regle exploitable -> reference\n", + " last = next((l.strip() for l in reversed(raw.splitlines()) if l.strip()), \"(vide)\")\n", + " print(f\" [repli] Ex {idx} : REGLE non extractible -> trace de reference\")\n", + " print(f\" [repli] derniere ligne LLM : {last[:90]}\")\n", + " trace = reference_cot_classification(example, idx)\n", + " trace.source = \"repli\"\n", + " return trace\n", " desc = f\"Pat={example['Patrons']}, Type={example['Type']}, Hungry={example['Hungry']}\"\n", " return CoTTrace(idx, desc, steps[:3], answer, rule)\n", "\n", @@ -1270,7 +1286,8 @@ " trace = cot_classify(ex, idx)\n", " cot_traces.append(trace)\n", " label = \"+\" if ex[\"WillWait\"] else \"-\"\n", - " print(f\"\\nEx {idx} [{label}] {trace.example_desc}\")\n", + " tag = \" [repli]\" if trace.source == \"repli\" else \"\"\n", + " print(f\"\\nEx {idx} [{label}] {trace.example_desc}{tag}\")\n", " for step in trace.steps:\n", " print(f\" Etape {step.step}: {step.observation}\")\n", " if step.reasoning and step.reasoning != step.observation:\n", @@ -1285,10 +1302,10 @@ "id": "3653b321", "metadata": { "papermill": { - "duration": 0.008255, - "end_time": "2026-09-23T18:31:32.311028", + "duration": 0.008391, + "end_time": "2026-09-23T21:11:04.418798", "exception": false, - "start_time": "2026-09-23T18:31:32.302773", + "start_time": "2026-09-23T21:11:04.410407", "status": "completed" }, "tags": [] @@ -1324,16 +1341,16 @@ "id": "dc08268f", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:31:32.325230Z", - "iopub.status.busy": "2026-09-23T18:31:32.324923Z", - "iopub.status.idle": "2026-09-23T18:31:32.331583Z", - "shell.execute_reply": "2026-09-23T18:31:32.330647Z" + "iopub.execute_input": "2026-09-23T21:11:04.434227Z", + "iopub.status.busy": "2026-09-23T21:11:04.433783Z", + "iopub.status.idle": "2026-09-23T21:11:04.441730Z", + "shell.execute_reply": "2026-09-23T21:11:04.440972Z" }, "papermill": { - "duration": 0.01437, - "end_time": "2026-09-23T18:31:32.332463", + "duration": 0.018647, + "end_time": "2026-09-23T21:11:04.442955", "exception": false, - "start_time": "2026-09-23T18:31:32.318093", + "start_time": "2026-09-23T21:11:04.424308", "status": "completed" }, "tags": [] @@ -1350,11 +1367,11 @@ " Total (avant deduplication) : 6\n", " Uniques : 5\n", "\n", - " C1: Patrons=Some => WillWait\n", - " C2: Patrons=Full AND Type=Thai => NOT WillWait\n", - " C3: Patrons=Full AND Hungry=No => NOT WillWait\n", - " C4: Patrons=None => NOT WillWait\n", - " C5: Patrons=Full AND Type=Burger AND WaitEstimate=30-60 => WillWait\n", + " C1: Patrons=Some AND WaitEstimate=0-10 => WillWait\n", + " C2: Patrons=Full AND WaitEstimate=30-60 AND Type=Thai => NOT WillWait\n", + " C3: WaitEstimate=>60 => NOT WillWait\n", + " C4: Patrons=None AND Hungry=No => NOT WillWait\n", + " C5: Type=Burger AND WaitEstimate=30-60 => WillWait\n", "\n", "Verification des regles extraites (vs regles du LLM) :\n", " Regles LLM direct : 4 candidates\n", @@ -1410,10 +1427,10 @@ "id": "a575226a", "metadata": { "papermill": { - "duration": 0.006078, - "end_time": "2026-09-23T18:31:32.344561", + "duration": 0.008658, + "end_time": "2026-09-23T21:11:04.460498", "exception": false, - "start_time": "2026-09-23T18:31:32.338483", + "start_time": "2026-09-23T21:11:04.451840", "status": "completed" }, "tags": [] @@ -1424,17 +1441,20 @@ "| Méthode | Nombre de règles | Verdict oracle (section 3) | Source |\n", "|---------|-----------------|----------------------------|--------|\n", "| LLM direct | 4 candidates | 4 consistantes (FP=0), 0 rejetées (cell[15]) | Génération globale |\n", - "| CoT extraction | 5 uniques (sur 6 traces) | fusion dans le pool : 9 candidates, 7 validées, **2 rejetées** (cell[24]) | Raisonnement pas-à-pas |\n", + "| CoT extraction | 5 uniques (sur 6 traces, cell[19]) | fusion dans le pool du pipeline : 9 candidates, 6 validées, **3 rejetées** (cell[24]) | Raisonnement pas-à-pas |\n", "\n", "Les règles extraites du CoT ont deux atouts :\n", "1. Chaque étape du raisonnement peut être vérifiée individuellement\n", "2. Elles sont ancrées dans des exemples concrets -- la trace sur l'exemple 4\n", - " (négatif) produit `Patrons=Full AND Hungry=No => NOT WillWait` (C3), une règle\n", - " que la génération directe avait manquée\n", + " (négatif, cell[17]) produit `WaitEstimate=>60 => NOT WillWait` (C3), une condition\n", + " temporelle qu'aucune règle de la génération directe n'utilise\n", "\n", - "Mais l'ancrage ne garantit rien : la règle CoT `Patrons=Some => WillWait`\n", - "(cellule [19] sortie C1) est **rejetée par l'oracle en cell[24] (FP=1)** --\n", - "elle couvre un exemple négatif. L'oracle reste indispensable.\n", + "Mais l'ancrage ne garantit rien : dans le pool du pipeline (cell[24]), trois\n", + "candidates sur neuf sont rejetées par l'oracle (FP=1 chacune), dont\n", + "`Patrons=Some => WillWait` -- elle couvre l'exemple négatif Ex 2 (`Patrons=Some`,\n", + "`WillWait=False`). Sa cousine CoT C1 (`Patrons=Some AND WaitEstimate=0-10`,\n", + "cell[19]) a le même défaut : Ex 2 satisfait aussi ces deux conditions. L'oracle\n", + "reste indispensable.\n", "\n", "> **Analogie EBL** : Le CoT est à l'extraction de règles ce que la preuve EBL est à la variabilisation. La trace guide la généralisation.\n" ] @@ -1444,10 +1464,10 @@ "id": "1bd557a0", "metadata": { "papermill": { - "duration": 0.008068, - "end_time": "2026-09-23T18:31:32.361066", + "duration": 0.005282, + "end_time": "2026-09-23T21:11:04.473136", "exception": false, - "start_time": "2026-09-23T18:31:32.352998", + "start_time": "2026-09-23T21:11:04.467854", "status": "completed" }, "tags": [] @@ -1487,16 +1507,16 @@ "id": "f9d67f71", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:31:32.377092Z", - "iopub.status.busy": "2026-09-23T18:31:32.376687Z", - "iopub.status.idle": "2026-09-23T18:31:37.167501Z", - "shell.execute_reply": "2026-09-23T18:31:37.166744Z" + "iopub.execute_input": "2026-09-23T21:11:04.488132Z", + "iopub.status.busy": "2026-09-23T21:11:04.487717Z", + "iopub.status.idle": "2026-09-23T21:11:10.886049Z", + "shell.execute_reply": "2026-09-23T21:11:10.884263Z" }, "papermill": { - "duration": 4.7998, - "end_time": "2026-09-23T18:31:37.168990", + "duration": 6.410604, + "end_time": "2026-09-23T21:11:10.889610", "exception": false, - "start_time": "2026-09-23T18:31:32.369190", + "start_time": "2026-09-23T21:11:04.479006", "status": "completed" }, "tags": [] @@ -1514,9 +1534,9 @@ " Couverture positifs : 100%\n", "\n", "Regles validees :\n", - " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", + " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", "\n" ] @@ -1638,10 +1658,10 @@ "id": "2f9d2c01", "metadata": { "papermill": { - "duration": 0.008435, - "end_time": "2026-09-23T18:31:37.186305", + "duration": 0.008433, + "end_time": "2026-09-23T21:11:10.912284", "exception": false, - "start_time": "2026-09-23T18:31:37.177870", + "start_time": "2026-09-23T21:11:10.903851", "status": "completed" }, "tags": [] @@ -1655,14 +1675,20 @@ "\n", "- **Sans CoT** : seules les 4 règles générées par `llm_generate_rules` sont candidates\n", "- **Avec CoT** : des traces sont générées sur 3 exemples positifs et 3 négatifs ;\n", - " après déduplication contre les candidates directes, deux règles négatives nouvelles\n", - " émergent -- `Patrons=Full AND Hungry=No => NOT WillWait` (C3) et\n", - " `Patrons=None => NOT WillWait` (C4), issues de traces sur des exemples **négatifs**\n", - "\n", - "C'est le point intéressant : la génération directe, focalisée sur « expliquer les\n", - "positifs », avait manqué ces règles négatives. Le raisonnement exemple-par-exemple\n", - "du CoT les fait apparaître -- et l'oracle les valide toutes les deux\n", - "(cell[24] : `[OK]` FP=0, TP=2 chacune).\n" + " le pool passe à 9 candidates dont 6 validées, avec **4 règles négatives**\n", + " (contre 2 sans CoT, cell[26]) -- les traces sur les exemples **négatifs**\n", + " produisent des règles d'exclusion ciblées\n", + "\n", + "C'est le point intéressant : les deux règles négatives issues du CoT validées par\n", + "l'oracle (`Patrons=Full AND WaitEstimate=>60` et `Patrons=None AND\n", + "WaitEstimate=0-10`, cell[24], FP=0 chacune) utilisent toutes deux `WaitEstimate` --\n", + "une condition temporelle qu'aucune des 4 règles directes n'exploitait. Le\n", + "raisonnement exemple-par-exemple fait apparaître des axes que la génération\n", + "globale manquait.\n", + "\n", + "> Le générateur varie, l'oracle ne varie pas : le run précédent de ce même\n", + "> notebook montrait des règles CoT différentes sur les mêmes prompts (cf. section\n", + "> robustesse, cell[32]).\n" ] }, { @@ -1671,16 +1697,16 @@ "id": "8917b738", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:31:37.199770Z", - "iopub.status.busy": "2026-09-23T18:31:37.199419Z", - "iopub.status.idle": "2026-09-23T18:32:53.356951Z", - "shell.execute_reply": "2026-09-23T18:32:53.356004Z" + "iopub.execute_input": "2026-09-23T21:11:10.927455Z", + "iopub.status.busy": "2026-09-23T21:11:10.926894Z", + "iopub.status.idle": "2026-09-23T21:12:25.594355Z", + "shell.execute_reply": "2026-09-23T21:12:25.593110Z" }, "papermill": { - "duration": 76.171982, - "end_time": "2026-09-23T18:32:53.365275", + "duration": 74.685729, + "end_time": "2026-09-23T21:12:25.604097", "exception": false, - "start_time": "2026-09-23T18:31:37.193293", + "start_time": "2026-09-23T21:11:10.918368", "status": "completed" }, "tags": [] @@ -1701,24 +1727,24 @@ "Pipeline Neuro-Symbolique - Resultat\n", "=======================================================\n", " Candidates generees : 9\n", - " Regles validees : 7\n", - " Regles rejetees : 2\n", + " Regles validees : 6\n", + " Regles rejetees : 3\n", " Couverture positifs : 100%\n", "\n", "Regles validees :\n", + " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait (TP=3, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait (TP=3, FP=0)\n", - " [OK] Hungry=No => NOT WillWait (TP=5, FP=0)\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait (TP=1, FP=0)\n", - " [OK] Type=Thai AND Raining=Yes => WillWait (TP=2, FP=0)\n", - " [OK] Patrons=Full AND Hungry=No => NOT WillWait (TP=2, FP=0)\n", - " [OK] Patrons=None => NOT WillWait (TP=2, FP=0)\n", + " [OK] Patrons=Full AND WaitEstimate=>60 => NOT WillWait (TP=1, FP=0)\n", + " [OK] Patrons=None AND WaitEstimate=0-10 => NOT WillWait (TP=2, FP=0)\n", "\n", "Regles rejetees :\n", " [KO] Patrons=Some => WillWait (FP=1)\n", - " [KO] Patrons=Full AND Fri/Sat=No => NOT WillWait (FP=1)\n", + " [KO] Type=Thai AND Raining=No => NOT WillWait (FP=1)\n", + " [KO] WaitEstimate=10-30 AND Price=$ => WillWait (FP=1)\n", "\n", - "Comparaison : sans CoT (4 validees) vs avec CoT (7 validees)\n" + "Comparaison : sans CoT (4 validees) vs avec CoT (6 validees)\n" ] } ], @@ -1737,10 +1763,10 @@ "id": "a2edb6e2", "metadata": { "papermill": { - "duration": 0.003873, - "end_time": "2026-09-23T18:32:53.373205", + "duration": 0.004094, + "end_time": "2026-09-23T21:12:25.615741", "exception": false, - "start_time": "2026-09-23T18:32:53.369332", + "start_time": "2026-09-23T21:12:25.611647", "status": "completed" }, "tags": [] @@ -1776,16 +1802,16 @@ "id": "54a6b7c4", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:32:53.383087Z", - "iopub.status.busy": "2026-09-23T18:32:53.382883Z", - "iopub.status.idle": "2026-09-23T18:32:53.389376Z", - "shell.execute_reply": "2026-09-23T18:32:53.387905Z" + "iopub.execute_input": "2026-09-23T21:12:25.626313Z", + "iopub.status.busy": "2026-09-23T21:12:25.625968Z", + "iopub.status.idle": "2026-09-23T21:12:25.631754Z", + "shell.execute_reply": "2026-09-23T21:12:25.630951Z" }, "papermill": { - "duration": 0.012762, - "end_time": "2026-09-23T18:32:53.390391", + "duration": 0.013306, + "end_time": "2026-09-23T21:12:25.633199", "exception": false, - "start_time": "2026-09-23T18:32:53.377629", + "start_time": "2026-09-23T21:12:25.619893", "status": "completed" }, "tags": [] @@ -1805,17 +1831,17 @@ " Regles negatives : 2\n", "\n", "--- Avec CoT ---\n", - " Taux d'acceptation : 7/9 (78%)\n", + " Taux d'acceptation : 6/9 (67%)\n", " Couverture : 100% des positifs\n", - " Regles positives : 3\n", + " Regles positives : 2\n", " Regles negatives : 4\n", "\n", "Metriques par regle validee (sans CoT) :\n", " Regle | Precision | Recall | F1\n", " --------------------------------------------------------------\n", - " Hungry=No => NOT WillWait | 1.00 | 0.83 | 0.91\n", " Hungry=Yes AND Patrons=Some => WillWait | 1.00 | 0.50 | 0.67\n", " Hungry=Yes AND Patrons=Full AND Price=$ => WillWait | 1.00 | 0.50 | 0.67\n", + " Hungry=No => NOT WillWait | 1.00 | 0.83 | 0.91\n", " Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait | 1.00 | 0.17 | 0.29\n" ] } @@ -1848,10 +1874,10 @@ "id": "d74db354", "metadata": { "papermill": { - "duration": 0.003884, - "end_time": "2026-09-23T18:32:53.398995", + "duration": 0.008439, + "end_time": "2026-09-23T21:12:25.650803", "exception": false, - "start_time": "2026-09-23T18:32:53.395111", + "start_time": "2026-09-23T21:12:25.642364", "status": "completed" }, "tags": [] @@ -1875,10 +1901,10 @@ "id": "3c2e7728", "metadata": { "papermill": { - "duration": 0.012073, - "end_time": "2026-09-23T18:32:53.414915", + "duration": 0.003895, + "end_time": "2026-09-23T21:12:25.659557", "exception": false, - "start_time": "2026-09-23T18:32:53.402842", + "start_time": "2026-09-23T21:12:25.655662", "status": "completed" }, "tags": [] @@ -1903,16 +1929,16 @@ "id": "dada4cc8", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:32:53.425773Z", - "iopub.status.busy": "2026-09-23T18:32:53.425193Z", - "iopub.status.idle": "2026-09-23T18:33:04.973707Z", - "shell.execute_reply": "2026-09-23T18:33:04.972995Z" + "iopub.execute_input": "2026-09-23T21:12:25.673142Z", + "iopub.status.busy": "2026-09-23T21:12:25.672401Z", + "iopub.status.idle": "2026-09-23T21:12:32.793624Z", + "shell.execute_reply": "2026-09-23T21:12:32.792848Z" }, "papermill": { - "duration": 11.555697, - "end_time": "2026-09-23T18:33:04.974595", + "duration": 7.129055, + "end_time": "2026-09-23T21:12:32.794490", "exception": false, - "start_time": "2026-09-23T18:32:53.418898", + "start_time": "2026-09-23T21:12:25.665435", "status": "completed" }, "tags": [] @@ -2051,10 +2077,10 @@ "id": "3cc1a67b", "metadata": { "papermill": { - "duration": 0.008189, - "end_time": "2026-09-23T18:33:04.990868", + "duration": 0.008047, + "end_time": "2026-09-23T21:12:32.807648", "exception": false, - "start_time": "2026-09-23T18:33:04.982679", + "start_time": "2026-09-23T21:12:32.799601", "status": "completed" }, "tags": [] @@ -2089,10 +2115,10 @@ "id": "74eec2fe", "metadata": { "papermill": { - "duration": 0.003927, - "end_time": "2026-09-23T18:33:04.999018", + "duration": 0.004757, + "end_time": "2026-09-23T21:12:32.817122", "exception": false, - "start_time": "2026-09-23T18:33:04.995091", + "start_time": "2026-09-23T21:12:32.812365", "status": "completed" }, "tags": [] @@ -2122,16 +2148,16 @@ "id": "a916457d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:05.007751Z", - "iopub.status.busy": "2026-09-23T18:33:05.007552Z", - "iopub.status.idle": "2026-09-23T18:33:23.627811Z", - "shell.execute_reply": "2026-09-23T18:33:23.626946Z" + "iopub.execute_input": "2026-09-23T21:12:32.827668Z", + "iopub.status.busy": "2026-09-23T21:12:32.827354Z", + "iopub.status.idle": "2026-09-23T21:12:55.113554Z", + "shell.execute_reply": "2026-09-23T21:12:55.112960Z" }, "papermill": { - "duration": 18.626243, - "end_time": "2026-09-23T18:33:23.629185", + "duration": 22.293443, + "end_time": "2026-09-23T21:12:55.115042", "exception": false, - "start_time": "2026-09-23T18:33:05.002942", + "start_time": "2026-09-23T21:12:32.821599", "status": "completed" }, "tags": [] @@ -2151,9 +2177,9 @@ "output_type": "stream", "text": [ " Run 1 : 4 regles generees, 4 validees par l'oracle\n", - " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", - " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=Yes AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] }, @@ -2162,9 +2188,9 @@ "output_type": "stream", "text": [ " Run 2 : 4 regles generees, 4 validees par l'oracle\n", - " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n" ] }, @@ -2173,12 +2199,12 @@ "output_type": "stream", "text": [ " Run 3 : 4 regles generees, 4 validees par l'oracle\n", + " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", - " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", - "Regles validees stables sur les 3 runs : 4/4 (stabilite 100%)\n", + "Regles validees stables sur les 3 runs : 3/5 (stabilite 60%)\n", "Le generateur varie d'un run a l'autre ; l'oracle, lui, donne toujours\n", "le meme verdict -- c'est lui qui rend le resultat reproductible.\n" ] @@ -2224,16 +2250,16 @@ "id": "426133ee", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:23.640222Z", - "iopub.status.busy": "2026-09-23T18:33:23.639845Z", - "iopub.status.idle": "2026-09-23T18:33:31.976149Z", - "shell.execute_reply": "2026-09-23T18:33:31.975466Z" + "iopub.execute_input": "2026-09-23T21:12:55.130468Z", + "iopub.status.busy": "2026-09-23T21:12:55.130274Z", + "iopub.status.idle": "2026-09-23T21:13:03.147932Z", + "shell.execute_reply": "2026-09-23T21:13:03.146852Z" }, "papermill": { - "duration": 8.342814, - "end_time": "2026-09-23T18:33:31.977506", + "duration": 8.027791, + "end_time": "2026-09-23T21:13:03.151228", "exception": false, - "start_time": "2026-09-23T18:33:23.634692", + "start_time": "2026-09-23T21:12:55.123437", "status": "completed" }, "tags": [] @@ -2284,16 +2310,16 @@ "id": "6e670307", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:31.990814Z", - "iopub.status.busy": "2026-09-23T18:33:31.990510Z", - "iopub.status.idle": "2026-09-23T18:33:37.488333Z", - "shell.execute_reply": "2026-09-23T18:33:37.487905Z" + "iopub.execute_input": "2026-09-23T21:13:03.165536Z", + "iopub.status.busy": "2026-09-23T21:13:03.165081Z", + "iopub.status.idle": "2026-09-23T21:13:09.800551Z", + "shell.execute_reply": "2026-09-23T21:13:09.799726Z" }, "papermill": { - "duration": 5.504693, - "end_time": "2026-09-23T18:33:37.489025", + "duration": 6.642408, + "end_time": "2026-09-23T21:13:09.801867", "exception": false, - "start_time": "2026-09-23T18:33:31.984332", + "start_time": "2026-09-23T21:13:03.159459", "status": "completed" }, "tags": [] @@ -2304,9 +2330,9 @@ "output_type": "stream", "text": [ "Regles retenues par la boucle generique : 4\n", - " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Some => WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$ => WillWait\n", + " [OK] Hungry=No => NOT WillWait\n", " [OK] Hungry=Yes AND Patrons=Full AND Price=$$$ => NOT WillWait\n", "\n", "Memes deux lignes, autres (generateur, verificateur) ailleurs dans le depot :\n", @@ -2350,10 +2376,10 @@ "id": "d4216022", "metadata": { "papermill": { - "duration": 0.004779, - "end_time": "2026-09-23T18:33:37.498722", + "duration": 0.004952, + "end_time": "2026-09-23T21:13:09.813281", "exception": false, - "start_time": "2026-09-23T18:33:37.493943", + "start_time": "2026-09-23T21:13:09.808329", "status": "completed" }, "tags": [] @@ -2388,10 +2414,10 @@ "id": "ba9beb92", "metadata": { "papermill": { - "duration": 0.004765, - "end_time": "2026-09-23T18:33:37.508567", + "duration": 0.004599, + "end_time": "2026-09-23T21:13:09.822082", "exception": false, - "start_time": "2026-09-23T18:33:37.503802", + "start_time": "2026-09-23T21:13:09.817483", "status": "completed" }, "tags": [] @@ -2407,10 +2433,10 @@ "id": "3c800f32", "metadata": { "papermill": { - "duration": 0.005658, - "end_time": "2026-09-23T18:33:37.519588", + "duration": 0.004148, + "end_time": "2026-09-23T21:13:09.830677", "exception": false, - "start_time": "2026-09-23T18:33:37.513930", + "start_time": "2026-09-23T21:13:09.826529", "status": "completed" }, "tags": [] @@ -2433,16 +2459,16 @@ "id": "5101d0d6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:37.532952Z", - "iopub.status.busy": "2026-09-23T18:33:37.532499Z", - "iopub.status.idle": "2026-09-23T18:33:37.543557Z", - "shell.execute_reply": "2026-09-23T18:33:37.542531Z" + "iopub.execute_input": "2026-09-23T21:13:09.840215Z", + "iopub.status.busy": "2026-09-23T21:13:09.840017Z", + "iopub.status.idle": "2026-09-23T21:13:09.846488Z", + "shell.execute_reply": "2026-09-23T21:13:09.845944Z" }, "papermill": { - "duration": 0.020674, - "end_time": "2026-09-23T18:33:37.545277", + "duration": 0.012398, + "end_time": "2026-09-23T21:13:09.847194", "exception": false, - "start_time": "2026-09-23T18:33:37.524603", + "start_time": "2026-09-23T21:13:09.834796", "status": "completed" }, "tags": [] @@ -2550,10 +2576,10 @@ "id": "a5281a2e", "metadata": { "papermill": { - "duration": 0.008525, - "end_time": "2026-09-23T18:33:37.563989", + "duration": 0.004453, + "end_time": "2026-09-23T21:13:09.856298", "exception": false, - "start_time": "2026-09-23T18:33:37.555464", + "start_time": "2026-09-23T21:13:09.851845", "status": "completed" }, "tags": [] @@ -2579,16 +2605,16 @@ "id": "0abbe4b6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:37.584261Z", - "iopub.status.busy": "2026-09-23T18:33:37.583892Z", - "iopub.status.idle": "2026-09-23T18:33:37.589280Z", - "shell.execute_reply": "2026-09-23T18:33:37.588230Z" + "iopub.execute_input": "2026-09-23T21:13:09.865993Z", + "iopub.status.busy": "2026-09-23T21:13:09.865758Z", + "iopub.status.idle": "2026-09-23T21:13:09.868865Z", + "shell.execute_reply": "2026-09-23T21:13:09.868499Z" }, "papermill": { - "duration": 0.016447, - "end_time": "2026-09-23T18:33:37.590549", + "duration": 0.008758, + "end_time": "2026-09-23T21:13:09.869484", "exception": false, - "start_time": "2026-09-23T18:33:37.574102", + "start_time": "2026-09-23T21:13:09.860726", "status": "completed" }, "tags": [] @@ -2629,10 +2655,10 @@ "id": "2936e442", "metadata": { "papermill": { - "duration": 0.008147, - "end_time": "2026-09-23T18:33:37.606662", + "duration": 0.004389, + "end_time": "2026-09-23T21:13:09.878412", "exception": false, - "start_time": "2026-09-23T18:33:37.598515", + "start_time": "2026-09-23T21:13:09.874023", "status": "completed" }, "tags": [] @@ -2654,16 +2680,16 @@ "id": "174aa8b0", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:33:37.624420Z", - "iopub.status.busy": "2026-09-23T18:33:37.624007Z", - "iopub.status.idle": "2026-09-23T18:34:47.118091Z", - "shell.execute_reply": "2026-09-23T18:34:47.117322Z" + "iopub.execute_input": "2026-09-23T21:13:09.888158Z", + "iopub.status.busy": "2026-09-23T21:13:09.887983Z", + "iopub.status.idle": "2026-09-23T21:14:31.414390Z", + "shell.execute_reply": "2026-09-23T21:14:31.413887Z" }, "papermill": { - "duration": 69.509321, - "end_time": "2026-09-23T18:34:47.123688", + "duration": 81.536483, + "end_time": "2026-09-23T21:14:31.419399", "exception": false, - "start_time": "2026-09-23T18:33:37.614367", + "start_time": "2026-09-23T21:13:09.882916", "status": "completed" }, "tags": [] @@ -2677,10 +2703,10 @@ "================================================================\n", "Metrique | Direct | CoT\n", "----------------------------------------------------------------\n", - "Candidates generees | 4 | 9\n", - "Regles validees (consistantes) | 4 | 7\n", - "Regles rejetees (inconsistantes) | 0 | 2\n", - "Taux d'acceptation | 100% | 78%\n", + "Candidates generees | 5 | 9\n", + "Regles validees (consistantes) | 5 | 6\n", + "Regles rejetees (inconsistantes) | 0 | 3\n", + "Taux d'acceptation | 100% | 67%\n", "Couverture positifs | 100% | 100%\n", "\n", "Lecture : sur CE jeu d'exemples, le concept WillWait admet des regles\n", @@ -2748,10 +2774,10 @@ "id": "sl7ex2var-md", "metadata": { "papermill": { - "duration": 0.004629, - "end_time": "2026-09-23T18:34:47.132970", + "duration": 0.004558, + "end_time": "2026-09-23T21:14:31.428855", "exception": false, - "start_time": "2026-09-23T18:34:47.128341", + "start_time": "2026-09-23T21:14:31.424297", "status": "completed" }, "tags": [] @@ -2774,16 +2800,16 @@ "id": "sl7ex2var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:34:47.143214Z", - "iopub.status.busy": "2026-09-23T18:34:47.143020Z", - "iopub.status.idle": "2026-09-23T18:34:47.146738Z", - "shell.execute_reply": "2026-09-23T18:34:47.145999Z" + "iopub.execute_input": "2026-09-23T21:14:31.440033Z", + "iopub.status.busy": "2026-09-23T21:14:31.439707Z", + "iopub.status.idle": "2026-09-23T21:14:31.443406Z", + "shell.execute_reply": "2026-09-23T21:14:31.442802Z" }, "papermill": { - "duration": 0.00992, - "end_time": "2026-09-23T18:34:47.147506", + "duration": 0.010985, + "end_time": "2026-09-23T21:14:31.444689", "exception": false, - "start_time": "2026-09-23T18:34:47.137586", + "start_time": "2026-09-23T21:14:31.433704", "status": "completed" }, "tags": [] @@ -2831,10 +2857,10 @@ "id": "0962260b", "metadata": { "papermill": { - "duration": 0.004994, - "end_time": "2026-09-23T18:34:47.157613", + "duration": 0.004698, + "end_time": "2026-09-23T21:14:31.456810", "exception": false, - "start_time": "2026-09-23T18:34:47.152619", + "start_time": "2026-09-23T21:14:31.452112", "status": "completed" }, "tags": [] @@ -2856,16 +2882,16 @@ "id": "3548d43c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:34:47.168404Z", - "iopub.status.busy": "2026-09-23T18:34:47.168152Z", - "iopub.status.idle": "2026-09-23T18:34:47.174021Z", - "shell.execute_reply": "2026-09-23T18:34:47.173641Z" + "iopub.execute_input": "2026-09-23T21:14:31.471909Z", + "iopub.status.busy": "2026-09-23T21:14:31.471605Z", + "iopub.status.idle": "2026-09-23T21:14:31.477542Z", + "shell.execute_reply": "2026-09-23T21:14:31.477036Z" }, "papermill": { - "duration": 0.01183, - "end_time": "2026-09-23T18:34:47.174588", + "duration": 0.015039, + "end_time": "2026-09-23T21:14:31.478415", "exception": false, - "start_time": "2026-09-23T18:34:47.162758", + "start_time": "2026-09-23T21:14:31.463376", "status": "completed" }, "tags": [] @@ -2991,10 +3017,10 @@ "id": "sl7ex3var-md", "metadata": { "papermill": { - "duration": 0.004268, - "end_time": "2026-09-23T18:34:47.183373", + "duration": 0.004691, + "end_time": "2026-09-23T21:14:31.489129", "exception": false, - "start_time": "2026-09-23T18:34:47.179105", + "start_time": "2026-09-23T21:14:31.484438", "status": "completed" }, "tags": [] @@ -3017,16 +3043,16 @@ "id": "sl7ex3var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:34:47.192754Z", - "iopub.status.busy": "2026-09-23T18:34:47.192372Z", - "iopub.status.idle": "2026-09-23T18:34:47.196597Z", - "shell.execute_reply": "2026-09-23T18:34:47.196006Z" + "iopub.execute_input": "2026-09-23T21:14:31.503014Z", + "iopub.status.busy": "2026-09-23T21:14:31.502803Z", + "iopub.status.idle": "2026-09-23T21:14:31.507217Z", + "shell.execute_reply": "2026-09-23T21:14:31.506615Z" }, "papermill": { - "duration": 0.009796, - "end_time": "2026-09-23T18:34:47.197290", + "duration": 0.012386, + "end_time": "2026-09-23T21:14:31.508184", "exception": false, - "start_time": "2026-09-23T18:34:47.187494", + "start_time": "2026-09-23T21:14:31.495798", "status": "completed" }, "tags": [] @@ -3076,10 +3102,10 @@ "id": "3818d99f", "metadata": { "papermill": { - "duration": 0.004398, - "end_time": "2026-09-23T18:34:47.205838", + "duration": 0.005425, + "end_time": "2026-09-23T21:14:31.519963", "exception": false, - "start_time": "2026-09-23T18:34:47.201440", + "start_time": "2026-09-23T21:14:31.514538", "status": "completed" }, "tags": [] @@ -3104,16 +3130,16 @@ "id": "b1ef475c", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:34:47.215535Z", - "iopub.status.busy": "2026-09-23T18:34:47.215322Z", - "iopub.status.idle": "2026-09-23T18:34:47.221551Z", - "shell.execute_reply": "2026-09-23T18:34:47.221149Z" + "iopub.execute_input": "2026-09-23T21:14:31.532521Z", + "iopub.status.busy": "2026-09-23T21:14:31.532218Z", + "iopub.status.idle": "2026-09-23T21:14:31.539975Z", + "shell.execute_reply": "2026-09-23T21:14:31.539502Z" }, "papermill": { - "duration": 0.012256, - "end_time": "2026-09-23T18:34:47.222386", + "duration": 0.015513, + "end_time": "2026-09-23T21:14:31.540746", "exception": false, - "start_time": "2026-09-23T18:34:47.210130", + "start_time": "2026-09-23T21:14:31.525233", "status": "completed" }, "tags": [] @@ -3230,10 +3256,10 @@ "id": "sl7ex4var-md", "metadata": { "papermill": { - "duration": 0.005333, - "end_time": "2026-09-23T18:34:47.232766", + "duration": 0.005406, + "end_time": "2026-09-23T21:14:31.551352", "exception": false, - "start_time": "2026-09-23T18:34:47.227433", + "start_time": "2026-09-23T21:14:31.545946", "status": "completed" }, "tags": [] @@ -3256,16 +3282,16 @@ "id": "sl7ex4var-code", "metadata": { "execution": { - "iopub.execute_input": "2026-09-23T18:34:47.244098Z", - "iopub.status.busy": "2026-09-23T18:34:47.243885Z", - "iopub.status.idle": "2026-09-23T18:34:47.247477Z", - "shell.execute_reply": "2026-09-23T18:34:47.247021Z" + "iopub.execute_input": "2026-09-23T21:14:31.563339Z", + "iopub.status.busy": "2026-09-23T21:14:31.562901Z", + "iopub.status.idle": "2026-09-23T21:14:31.567271Z", + "shell.execute_reply": "2026-09-23T21:14:31.566527Z" }, "papermill": { - "duration": 0.009949, - "end_time": "2026-09-23T18:34:47.248179", + "duration": 0.011763, + "end_time": "2026-09-23T21:14:31.568471", "exception": false, - "start_time": "2026-09-23T18:34:47.238230", + "start_time": "2026-09-23T21:14:31.556708", "status": "completed" }, "tags": [] @@ -3314,10 +3340,10 @@ "id": "7cb00ad4", "metadata": { "papermill": { - "duration": 0.004595, - "end_time": "2026-09-23T18:34:47.257462", + "duration": 0.006128, + "end_time": "2026-09-23T21:14:31.580507", "exception": false, - "start_time": "2026-09-23T18:34:47.252867", + "start_time": "2026-09-23T21:14:31.574379", "status": "completed" }, "tags": [] @@ -3373,10 +3399,10 @@ "id": "227e37ae", "metadata": { "papermill": { - "duration": 0.004571, - "end_time": "2026-09-23T18:34:47.266828", + "duration": 0.00673, + "end_time": "2026-09-23T21:14:31.592787", "exception": false, - "start_time": "2026-09-23T18:34:47.262257", + "start_time": "2026-09-23T21:14:31.586057", "status": "completed" }, "tags": [] @@ -3404,10 +3430,10 @@ "id": "b2e6b9c6", "metadata": { "papermill": { - "duration": 0.004649, - "end_time": "2026-09-23T18:34:47.276059", + "duration": 0.010447, + "end_time": "2026-09-23T21:14:31.610980", "exception": false, - "start_time": "2026-09-23T18:34:47.271410", + "start_time": "2026-09-23T21:14:31.600533", "status": "completed" }, "tags": [] @@ -3462,14 +3488,14 @@ }, "papermill": { "default_parameters": {}, - "duration": 274.811409, - "end_time": "2026-09-23T18:34:47.622591", + "duration": 286.024686, + "end_time": "2026-09-23T21:14:31.968894", "environment_variables": {}, "exception": null, "input_path": "SL-9-LLM-SymbolicLearning.ipynb", - "output_path": "SL-9_output.ipynb", + "output_path": "SL-9-LLM-SymbolicLearning_output.ipynb", "parameters": {}, - "start_time": "2026-09-23T18:30:12.811182", + "start_time": "2026-09-23T21:09:45.944208", "version": "2.7.0" } }, From 2bdfdc38c91be4aa1eada306b4e700ac92f347b8 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 23 Sep 2026 23:52:14 +0200 Subject: [PATCH 5/5] =?UTF-8?q?fix(sl9,#17562):=20cellule=2020=20=E2=80=94?= =?UTF-8?q?=20le=20lot=20verifie=20est=20celui=20du=20pipeline=20CoT=20reg?= =?UTF-8?q?enere,=20pas=20C1-C5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Point du preflight adjoint (adj-c58-17562-c20-po2023, 23:26Z) : la ligne « CoT extraction » attribuait a C1-C5 le verdict « 9 candidates, 6 validees, 3 rejetees », or NeuroSymbolicPipeline.run rappelle cot_classify et regenere ses propres traces — les 9 candidates verifiees sont un lot distinct de C1-C5 (verifie firsthand dans la cellule du pipeline). La ligne dit desormais que C1-C5 ne sont pas verifiees en tant que telles, que le locus des 9/6/3 est la comparaison direct vs CoT (cell[42], et non cell[24]), et le paragraphe lit la couverture de C1 et C2 a la main sur les exemples (C1 couvre Ex 2, negatif ; C2 couvre Ex 1, positif). Le prolongement (verifier C1-C5 par verify_rule sur unique_rules) est nomme comme non execute ici. Markdown seul : aucune cellule code modifiee (source, outputs et exec_count inchanges, verifie par diff) -> exemption C.2, pas de re-execution. See #17562 Co-Authored-By: Claude Sonnet 5 --- .../SL-9-LLM-SymbolicLearning.ipynb | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb index bfb043f8e8..2527be6494 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SymbolicLearning/SL-9-LLM-SymbolicLearning.ipynb @@ -1435,29 +1435,7 @@ }, "tags": [] }, - "source": [ - "### Interpretation : Extraction de règles depuis CoT\n", - "\n", - "| Méthode | Nombre de règles | Verdict oracle (section 3) | Source |\n", - "|---------|-----------------|----------------------------|--------|\n", - "| LLM direct | 4 candidates | 4 consistantes (FP=0), 0 rejetées (cell[15]) | Génération globale |\n", - "| CoT extraction | 5 uniques (sur 6 traces, cell[19]) | fusion dans le pool du pipeline : 9 candidates, 6 validées, **3 rejetées** (cell[24]) | Raisonnement pas-à-pas |\n", - "\n", - "Les règles extraites du CoT ont deux atouts :\n", - "1. Chaque étape du raisonnement peut être vérifiée individuellement\n", - "2. Elles sont ancrées dans des exemples concrets -- la trace sur l'exemple 4\n", - " (négatif, cell[17]) produit `WaitEstimate=>60 => NOT WillWait` (C3), une condition\n", - " temporelle qu'aucune règle de la génération directe n'utilise\n", - "\n", - "Mais l'ancrage ne garantit rien : dans le pool du pipeline (cell[24]), trois\n", - "candidates sur neuf sont rejetées par l'oracle (FP=1 chacune), dont\n", - "`Patrons=Some => WillWait` -- elle couvre l'exemple négatif Ex 2 (`Patrons=Some`,\n", - "`WillWait=False`). Sa cousine CoT C1 (`Patrons=Some AND WaitEstimate=0-10`,\n", - "cell[19]) a le même défaut : Ex 2 satisfait aussi ces deux conditions. L'oracle\n", - "reste indispensable.\n", - "\n", - "> **Analogie EBL** : Le CoT est à l'extraction de règles ce que la preuve EBL est à la variabilisation. La trace guide la généralisation.\n" - ] + "source": "### Interpretation : Extraction de règles depuis CoT\n\n| Méthode | Nombre de règles | Verdict oracle (section 3) | Source |\n|---------|-----------------|----------------------------|--------|\n| LLM direct | 4 candidates | 4 consistantes (FP=0), 0 rejetées (cell[15]) | Génération globale |\n| CoT extraction | 5 uniques (sur 6 traces, cell[19]) | **non vérifiées en tant que telles ici** : le pipeline CoT (cell[42]) régénère ses propres traces et vérifie un lot distinct (9 candidates, 6 validées, **3 rejetées**) | Raisonnement pas-à-pas |\n\nLes règles extraites du CoT ont deux atouts :\n1. Chaque étape du raisonnement peut être vérifiée individuellement\n2. Elles sont ancrées dans des exemples concrets -- la trace sur l'exemple 4\n (négatif, cell[17]) produit `WaitEstimate=>60 => NOT WillWait` (C3), une condition\n temporelle qu'aucune règle de la génération directe n'utilise\n\nMais l'ancrage ne garantit rien, et le notebook le montre à deux niveaux. Le pipeline CoT\n(cell[42]) rejette **3 candidates sur 9** -- mais ce lot n'est pas C1-C5 : `NeuroSymbolicPipeline.run`\nrappelle `cot_classify` et **régénère ses propres traces**, donc les règles vérifiées là sont\ndistinctes de celles extraites en cell[19]. Pour C1-C5, la couverture se lit à la main sur les\nexemples : C1 (`Patrons=Some AND WaitEstimate=0-10`) couvre Ex 2 (négatif pour `WillWait`) et\nC2 (`Patrons=Full AND WaitEstimate=30-60 AND Type=Thai`) couvre Ex 1 (positif) -- deux règles\nextraites des traces que l'oracle réfuterait. Une vérification systématique de C1-C5 par\n`verify_rule` sur `unique_rules` est le prolongement naturel de cette cellule (non exécutée ici).\n\n> **Analogie EBL** : Le CoT est à l'extraction de règles ce que la preuve EBL est à la variabilisation. La trace guide la généralisation.\n" }, { "cell_type": "markdown",