Claude commited on
Commit
b31b87f
·
unverified ·
1 Parent(s): 3092594

Hide phase marker from chat and ban excessive validation

Browse files

Fix 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

Files changed (2) hide show
  1. app/llm.py +2 -0
  2. 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
  }