✅ COMPLETE: Fix chat system to use AI-powered responses
- FIXED chat system still using hardcoded ai-responses.js fallbacks - REPLACED generateContextualResponse call with generateChatAIResponse - ADDED generateChatAIResponse method for chat interface - NOW BOTH systems (step-by-step AND chat) use server-side AI - ADDED debugging logs to track request/response flow - Updated cache-busting version for immediate testing Chat responses for 'thrust?' should now be contextual and educational!
This commit is contained in:
@@ -176,9 +176,9 @@
|
|||||||
}, 100);
|
}, 100);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="translations.js?v=20250629172300"></script>
|
<script src="translations.js?v=20250629173500"></script>
|
||||||
<script src="ai-responses.js?v=20250629172300"></script>
|
<script src="ai-responses.js?v=20250629173500"></script>
|
||||||
<script src="script-new.js?v=20250629172300"></script>
|
<script src="script-new.js?v=20250629173500"></script>
|
||||||
|
|
||||||
<!-- Inline debugging script -->
|
<!-- Inline debugging script -->
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -345,6 +345,8 @@ class KidsAIExplorer {
|
|||||||
|
|
||||||
// Generate AI response to user answer using server-side AI
|
// Generate AI response to user answer using server-side AI
|
||||||
async generateAIResponseToAnswer(answer, stepIndex, responseDiv) {
|
async generateAIResponseToAnswer(answer, stepIndex, responseDiv) {
|
||||||
|
console.log('🚀 generateAIResponseToAnswer called with:', { answer, stepIndex });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Show loading state
|
// Show loading state
|
||||||
responseDiv.innerHTML = `
|
responseDiv.innerHTML = `
|
||||||
@@ -365,6 +367,8 @@ class KidsAIExplorer {
|
|||||||
? this.currentSteps[stepIndex].text
|
? this.currentSteps[stepIndex].text
|
||||||
: 'the current question';
|
: 'the current question';
|
||||||
|
|
||||||
|
console.log('📤 Sending request to /api/respond-to-answer:', { answer, currentQuestion });
|
||||||
|
|
||||||
// Call server API for contextual response
|
// Call server API for contextual response
|
||||||
const response = await fetch('/api/respond-to-answer', {
|
const response = await fetch('/api/respond-to-answer', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -379,11 +383,14 @@ class KidsAIExplorer {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('📥 Server response status:', response.status);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`HTTP error! status: ${response.status}`);
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
console.log('✅ Server response data:', data);
|
||||||
|
|
||||||
if (data.success && data.response) {
|
if (data.success && data.response) {
|
||||||
responseDiv.innerHTML = `
|
responseDiv.innerHTML = `
|
||||||
@@ -441,6 +448,100 @@ class KidsAIExplorer {
|
|||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generate AI response for chat system
|
||||||
|
async generateChatAIResponse(answer, questionIndex) {
|
||||||
|
console.log('🚀 generateChatAIResponse called with:', { answer, questionIndex });
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Get current question context
|
||||||
|
const currentQuestion = this.questions && this.questions[questionIndex]
|
||||||
|
? this.questions[questionIndex]
|
||||||
|
: 'the current question';
|
||||||
|
|
||||||
|
console.log('📤 Sending chat request to /api/respond-to-answer:', { answer, currentQuestion });
|
||||||
|
|
||||||
|
// Call server API for contextual response
|
||||||
|
const response = await fetch('/api/respond-to-answer', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
answer: answer,
|
||||||
|
question: currentQuestion,
|
||||||
|
language: this.currentLanguage,
|
||||||
|
stepIndex: questionIndex
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('📥 Chat server response status:', response.status);
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
console.log('✅ Chat server response data:', data);
|
||||||
|
|
||||||
|
if (data.success && data.response) {
|
||||||
|
// Add AI response bubble
|
||||||
|
const responseBubble = document.createElement('div');
|
||||||
|
responseBubble.className = 'chat-message ai-message';
|
||||||
|
responseBubble.innerHTML = `
|
||||||
|
<div class="message-header">
|
||||||
|
<span class="ai-avatar">🤖</span>
|
||||||
|
<span class="ai-label">AI Teacher</span>
|
||||||
|
</div>
|
||||||
|
<div class="message-content">
|
||||||
|
<p>${data.response}</p>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
this.conversationContainer.appendChild(responseBubble);
|
||||||
|
|
||||||
|
// Show AI response with animation
|
||||||
|
setTimeout(() => {
|
||||||
|
responseBubble.classList.add('visible');
|
||||||
|
this.conversationContainer.scrollTop = this.conversationContainer.scrollHeight;
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
// Ask next question
|
||||||
|
setTimeout(() => {
|
||||||
|
this.askNextQuestion();
|
||||||
|
}, 2000);
|
||||||
|
} else {
|
||||||
|
throw new Error(data.error || 'Failed to generate response');
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Error generating chat AI response:', error);
|
||||||
|
|
||||||
|
// Fallback response
|
||||||
|
const responseBubble = document.createElement('div');
|
||||||
|
responseBubble.className = 'chat-message ai-message';
|
||||||
|
responseBubble.innerHTML = `
|
||||||
|
<div class="message-header">
|
||||||
|
<span class="ai-avatar">🤖</span>
|
||||||
|
<span class="ai-label">AI Teacher</span>
|
||||||
|
</div>
|
||||||
|
<div class="message-content">
|
||||||
|
<p>🌟 Great thinking! Keep exploring - every thought helps us learn!</p>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
this.conversationContainer.appendChild(responseBubble);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
responseBubble.classList.add('visible');
|
||||||
|
this.conversationContainer.scrollTop = this.conversationContainer.scrollHeight;
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.askNextQuestion();
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
askNextQuestion() {
|
askNextQuestion() {
|
||||||
if (this.currentQuestionIndex >= this.questions.length) {
|
if (this.currentQuestionIndex >= this.questions.length) {
|
||||||
// All questions asked, add and show reveal section
|
// All questions asked, add and show reveal section
|
||||||
@@ -562,36 +663,9 @@ class KidsAIExplorer {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
userBubble.classList.add('visible');
|
userBubble.classList.add('visible');
|
||||||
|
|
||||||
// Generate contextual AI response based on the answer
|
// Generate AI response using server-side AI
|
||||||
const aiResponse = this.generateContextualResponse(answer, questionIndex);
|
this.generateChatAIResponse(answer, questionIndex);
|
||||||
|
|
||||||
// Add AI response bubble
|
|
||||||
setTimeout(() => {
|
|
||||||
const responseBubble = document.createElement('div');
|
|
||||||
responseBubble.className = 'chat-message ai-message';
|
|
||||||
responseBubble.innerHTML = `
|
|
||||||
<div class="message-header">
|
|
||||||
<span class="ai-avatar">🤖</span>
|
|
||||||
<span class="ai-label">AI Teacher</span>
|
|
||||||
</div>
|
|
||||||
<div class="message-content">
|
|
||||||
<p>${aiResponse}</p>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
this.conversationContainer.appendChild(responseBubble);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
responseBubble.classList.add('visible');
|
|
||||||
responseBubble.scrollIntoView({ behavior: 'smooth' });
|
|
||||||
|
|
||||||
// Move to next question after AI response
|
|
||||||
this.currentQuestionIndex++;
|
|
||||||
setTimeout(() => {
|
|
||||||
this.askNextQuestion();
|
|
||||||
}, 1500);
|
|
||||||
}, 500);
|
|
||||||
}, 800);
|
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user