diff --git a/api/chatbot.php b/api/chatbot.php index 93ea5ad..f78d6b5 100644 --- a/api/chatbot.php +++ b/api/chatbot.php @@ -96,31 +96,23 @@ $historique = $db->fetchAll( [$id_conversation] ); -// Construire le prompt système -$system_prompt = "Tu es un assistant pédagogique en mathématiques pour élèves de collège/lycée. +$prompt_systeme = "Tu es un assistant pédagogique en mathématiques. Ton rôle est d'AIDER l'élève à COMPRENDRE, PAS de donner la réponse. RÈGLES ABSOLUES : -- NE JAMAIS donner la réponse finale ou les calculs complets -- Utiliser la méthode socratique : poser des questions pour guider la réflexion -- Donner des INDICES progressifs (formules, méthodes, étapes) -- Encourager l'élève à décomposer le problème lui-même -- Rester positif et encourageant -- Répondre en français simple et clair -- Réponses courtes (max 3-4 lignes) +- JAMAIS donner la réponse finale ou résoudre l'exercice +- Poser des QUESTIONS pour guider la réflexion +- Donner des INDICES progressifs +- Rappeler les formules/théorèmes pertinents +- Encourager l'élève à décomposer le problème -STRICTEMENT INTERDIT : -- Résoudre l'exercice complètement -- Donner les chiffres de la réponse finale -- Faire les calculs à la place de l'élève +UTILISE LA NOTATION MATHÉMATIQUE : +- Fractions : 1/2 (sera converti automatiquement) +- Puissances : x^2, 10^3 +- Symboles : × (multiplication), ÷ (division) +- Tu peux aussi utiliser LaTeX entre dollars : \$\\frac{1}{2}\$ -CONTEXTE : -Évaluation : {$question['titre_eval']} -Type de question : {$question['type_question']} - -ÉNONCÉ : -{$question['enonce']} - -Aide l'élève avec des questions et indices, PAS avec la réponse."; +ÉNONCÉ DE LA QUESTION (NE CONTIENT PAS LA RÉPONSE) : +" . $enonce_question; // Construire l'historique pour Ollama $messages_ollama = []; diff --git a/assets/js/chatbot.js b/assets/js/chatbot.js index e3cea2c..0e423d4 100644 --- a/assets/js/chatbot.js +++ b/assets/js/chatbot.js @@ -243,13 +243,71 @@ async loadHelpRemaining() { } ajouterMessage(texte, type) { - const msgDiv = document.createElement('div'); - msgDiv.className = `message message-${type}`; - msgDiv.textContent = texte; - this.chatMessages.appendChild(msgDiv); - this.scrollToBottom(); + const msgDiv = document.createElement('div'); + msgDiv.className = `message message-${type}`; + + // Convertir le texte brut en HTML avec support LaTeX + const htmlContent = this.formatMathText(texte); + msgDiv.innerHTML = htmlContent; + + this.chatMessages.appendChild(msgDiv); + + // Rendre les formules mathématiques avec KaTeX + if (typeof renderMathInElement !== 'undefined') { + renderMathInElement(msgDiv, { + delimiters: [ + {left: '$$', right: '$$', display: true}, // Mode display (centré) + {left: '$', right: '$', display: false}, // Mode inline + {left: '\\(', right: '\\)', display: false}, + {left: '\\[', right: '\\]', display: true} + ], + throwOnError: false, + trust: true + }); } + this.scrollToBottom(); +} + +// NOUVELLE MÉTHODE : Formater le texte avec support maths +formatMathText(texte) { + // Convertir les retours à la ligne en
+ let html = texte.replace(/\n/g, '
'); + + // Détecter et convertir les fractions communes + // 1/2 → $\frac{1}{2}$ + html = html.replace(/(\d+)\/(\d+)/g, '$\\frac{$1}{$2}$'); + + // Convertir les puissances + // x^2 → $x^2$ + html = html.replace(/([a-z0-9]+)\^([0-9]+)/gi, '$$$1^{$2}$$'); + + // Convertir les indices + // x_1 → $x_1$ + html = html.replace(/([a-z0-9]+)_([0-9]+)/gi, '$$$1_{$2}$$'); + + // Symboles mathématiques courants + const symbols = { + '×': '\\times', + '÷': '\\div', + '≤': '\\leq', + '≥': '\\geq', + '≠': '\\neq', + '≈': '\\approx', + '∞': '\\infty', + '√': '\\sqrt', + 'π': '\\pi', + '∑': '\\sum', + '∫': '\\int' + }; + + for (let [symbol, latex] of Object.entries(symbols)) { + html = html.replace(new RegExp(symbol, 'g'), '$' + latex + '$'); + } + + return html; +} + afficherTypingIndicator() { const typingDiv = document.createElement('div'); typingDiv.className = 'typing-indicator'; diff --git a/passer_evaluation.php b/passer_evaluation.php index 50638f7..951d5aa 100644 --- a/passer_evaluation.php +++ b/passer_evaluation.php @@ -595,6 +595,9 @@ $reponses_sauvegardees = json_decode($tentative['reponses_json'] ?? '{}', true) + + + @@ -997,6 +1000,11 @@ $reponses_sauvegardees = json_decode($tentative['reponses_json'] ?? '{}', true) + + + + +