Claude commited on
Hide phase marker from chat and ban excessive validation
Browse filesFix 1: Frontend strips "---\nPhase: ..." block from assistant
messages before rendering. The marker is still produced by the
LLM for backend tracking but never shown to the learner.
Fix 2: System prompt now explicitly forbids enthusiastic
expressions (Excellent, Très bien, Parfait, Bravo, Super,
Absolument, Exactement). Only brief neutral acknowledgments
are allowed before the next question.
https://claude.ai/code/session_015z3yZxNNfXF63JuQDuPbEG
- app/llm.py +2 -0
- static/app.js +8 -1
app/llm.py
CHANGED
|
@@ -33,6 +33,7 @@ Règles :
|
|
| 33 |
6. Préfère l'invitation au reproche : "Ce point semble complexe, essayons un autre angle..."
|
| 34 |
7. INTERDIT : ne propose JAMAIS d'exemples, de listes d'options ou de choix multiples dans tes questions. L'apprenant·e doit produire le contenu. Mauvais : "Par exemple, X, Y ou Z ?" — Bon : "Donne-moi un exemple concret issu de ta propre expérience."
|
| 35 |
8. Ta question doit être ouverte et exiger que l'apprenant·e formule sa propre réponse.
|
|
|
|
| 36 |
À la fin de chaque message, ajoute obligatoirement :
|
| 37 |
---
|
| 38 |
Phase: {phase}
|
|
@@ -54,6 +55,7 @@ Règles :
|
|
| 54 |
6. Préfère l'invitation au reproche : "Ce point semble complexe, essayons un autre angle..."
|
| 55 |
7. INTERDIT : ne propose JAMAIS d'exemples, de listes d'options ou de choix multiples dans tes questions. L'apprenant·e doit produire le contenu. Mauvais : "Par exemple, X, Y ou Z ?" — Bon : "Donne-moi un exemple concret issu de ta propre expérience."
|
| 56 |
8. Ta question doit être ouverte et exiger que l'apprenant·e formule sa propre réponse.
|
|
|
|
| 57 |
À la fin de chaque message, ajoute obligatoirement :
|
| 58 |
---
|
| 59 |
Phase: {phase}
|
|
|
|
| 33 |
6. Préfère l'invitation au reproche : "Ce point semble complexe, essayons un autre angle..."
|
| 34 |
7. INTERDIT : ne propose JAMAIS d'exemples, de listes d'options ou de choix multiples dans tes questions. L'apprenant·e doit produire le contenu. Mauvais : "Par exemple, X, Y ou Z ?" — Bon : "Donne-moi un exemple concret issu de ta propre expérience."
|
| 35 |
8. Ta question doit être ouverte et exiger que l'apprenant·e formule sa propre réponse.
|
| 36 |
+
9. Interdit absolu : "Excellent", "Très bien", "Parfait", "Bravo", "Super", "C'est une excellente question", "Absolument", "Exactement" et tout équivalent enthousiaste. Validation autorisée : une phrase neutre et courte maximum ("C'est une piste.", "Je vois ce que tu veux dire.") avant de poser la question suivante.
|
| 37 |
À la fin de chaque message, ajoute obligatoirement :
|
| 38 |
---
|
| 39 |
Phase: {phase}
|
|
|
|
| 55 |
6. Préfère l'invitation au reproche : "Ce point semble complexe, essayons un autre angle..."
|
| 56 |
7. INTERDIT : ne propose JAMAIS d'exemples, de listes d'options ou de choix multiples dans tes questions. L'apprenant·e doit produire le contenu. Mauvais : "Par exemple, X, Y ou Z ?" — Bon : "Donne-moi un exemple concret issu de ta propre expérience."
|
| 57 |
8. Ta question doit être ouverte et exiger que l'apprenant·e formule sa propre réponse.
|
| 58 |
+
9. Interdit absolu : "Excellent", "Très bien", "Parfait", "Bravo", "Super", "C'est une excellente question", "Absolument", "Exactement" et tout équivalent enthousiaste. Validation autorisée : une phrase neutre et courte maximum ("C'est une piste.", "Je vois ce que tu veux dire.") avant de poser la question suivante.
|
| 59 |
À la fin de chaque message, ajoute obligatoirement :
|
| 60 |
---
|
| 61 |
Phase: {phase}
|
static/app.js
CHANGED
|
@@ -95,10 +95,17 @@
|
|
| 95 |
}
|
| 96 |
|
| 97 |
/* ===== Messages ===== */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
function addMessage(role, content) {
|
| 99 |
var div = document.createElement("div");
|
| 100 |
div.className = "message " + role;
|
| 101 |
-
div.textContent = content;
|
| 102 |
messagesEl.insertBefore(div, typingEl);
|
| 103 |
messagesEl.scrollTop = messagesEl.scrollHeight;
|
| 104 |
}
|
|
|
|
| 95 |
}
|
| 96 |
|
| 97 |
/* ===== Messages ===== */
|
| 98 |
+
function stripPhaseMarker(text) {
|
| 99 |
+
// Remove "---\nPhase: ..." block from the end of assistant messages
|
| 100 |
+
var idx = text.indexOf("\n---");
|
| 101 |
+
if (idx === -1) idx = text.indexOf("---\nPhase");
|
| 102 |
+
return idx >= 0 ? text.substring(0, idx).trim() : text;
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
function addMessage(role, content) {
|
| 106 |
var div = document.createElement("div");
|
| 107 |
div.className = "message " + role;
|
| 108 |
+
div.textContent = role === "assistant" ? stripPhaseMarker(content) : content;
|
| 109 |
messagesEl.insertBefore(div, typingEl);
|
| 110 |
messagesEl.scrollTop = messagesEl.scrollHeight;
|
| 111 |
}
|