“shubhamdhamal”
Deploy Flask app with Docker
7644eac
// Agents interface JavaScript
const API_BASE_URL = '/agents'; // Updated to match the backend route
// Initialize agents
const agents = {
research: {
isActive: false,
currentTask: null,
progress: 0
},
teaching: {
isActive: false,
currentTask: null,
progress: 0
}
};
// Chat interface
const chatMessages = document.getElementById('chatMessages');
const chatInput = document.getElementById('chatInput');
// Progress indicators
const researchProgress = document.getElementById('researchProgress');
const teachingProgress = document.getElementById('teachingProgress');
// Status indicators
const researchStatus = document.getElementById('researchStatus');
const teachingStatus = document.getElementById('teachingStatus');
// Update progress
function updateProgress(agentType, progress) {
const progressBar = agentType === 'research' ? researchProgress : teachingProgress;
progressBar.style.width = `${progress}%`;
}
// Update status
function updateStatus(agentType, status) {
const statusElement = agentType === 'research' ? researchStatus : teachingStatus;
statusElement.textContent = status;
}
// Add message to chat
function addMessage(content, isUser = false) {
const message = document.createElement('div');
message.className = `message ${isUser ? 'user-message' : 'agent-message'}`;
message.textContent = content;
chatMessages.appendChild(message);
chatMessages.scrollTop = chatMessages.scrollHeight;
}
// Send message to agents
async function sendMessage() {
const message = chatInput.value.trim();
if (!message) return;
// Add user message to chat
addMessage(message, true);
chatInput.value = '';
try {
// Send to server
const response = await fetch(`${API_BASE_URL}/chat`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ message })
});
const data = await response.json();
addMessage(data.response);
} catch (error) {
addMessage('Sorry, I encountered an error. Please try again.');
}
}
// Start research
async function startResearch() {
console.log('startResearch function called');
const topic = prompt('What topic would you like to research?');
if (!topic) {
console.log('Research cancelled by user or no topic entered.');
return;
}
console.log(`Topic selected: ${topic}`);
try {
console.log('Updating research status to Researching...');
updateStatus('research', 'Researching...');
updateProgress('research', 0);
const apiUrl = `${API_BASE_URL}/research`;
console.log(`Sending POST request to: ${apiUrl}`);
const requestBody = JSON.stringify({ topic });
console.log(`Request body: ${requestBody}`);
const response = await fetch(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: requestBody
});
console.log(`Response status: ${response.status}`);
const responseText = await response.text(); // Get raw text first
console.log(`Raw response text: ${responseText}`);
let data;
try {
data = JSON.parse(responseText); // Try to parse as JSON
} catch (parseError) {
console.error('Failed to parse response as JSON:', parseError);
console.error('Response was not valid JSON. Check server logs for errors.');
addMessage('Error: Received invalid data from server.');
updateStatus('research', 'Error: Invalid server response');
return;
}
console.log('Parsed response data:', data);
if (response.ok && data.success) {
updateStatus('research', 'Research complete!');
updateProgress('research', 100);
addMessage(`Research findings: ${JSON.stringify(data.findings || [], null, 2)}`);
if (data.sources && data.sources.length > 0) {
addMessage(`Sources: ${JSON.stringify(data.sources, null, 2)}`);
}
if (data.related_topics && data.related_topics.length > 0) {
addMessage(`Related Topics: ${JSON.stringify(data.related_topics, null, 2)}`);
}
} else {
console.error('Research request failed or server returned an error:', data.error || 'Unknown error');
updateStatus('research', `Error: ${data.error || 'Failed'}`);
addMessage(`Sorry, research failed: ${data.message || data.error || 'Please try again.'}`);
}
} catch (error) {
console.error('Error during startResearch fetch operation:', error);
updateStatus('research', 'Network Error or other issue');
addMessage('Sorry, research failed due to a network error or other issue. Please check your connection and try again.');
}
}
// Create learning path
async function createLearningPath() {
const topic = prompt('What topic would you like to learn about?');
if (!topic) return;
const expertiseLevel = prompt('What is your expertise level? (beginner/intermediate/advanced)');
if (!expertiseLevel) return;
const learningStyle = prompt('What is your preferred learning style? (visual/auditory/kinesthetic)');
if (!learningStyle) return;
try {
updateStatus('teaching', 'Creating learning path...');
updateProgress('teaching', 0);
const response = await fetch(`${API_BASE_URL}/create-path`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
topic,
expertise_level: expertiseLevel,
learning_style: learningStyle
})
});
const data = await response.json();
updateStatus('teaching', 'Learning path created!');
updateProgress('teaching', 100);
addMessage(`Learning path created: ${JSON.stringify(data.path, null, 2)}`);
} catch (error) {
updateStatus('teaching', 'Error occurred');
addMessage('Sorry, failed to create learning path. Please try again.');
}
}
// View research history
async function viewResearchHistory() {
try {
const response = await fetch(`${API_BASE_URL}/research/history`);
const data = await response.json();
addMessage(`Research history: ${JSON.stringify(data.history, null, 2)}`);
} catch (error) {
addMessage('Sorry, failed to load research history.');
}
}
// View learning paths
async function viewPaths() {
try {
const response = await fetch(`${API_BASE_URL}/paths`);
const data = await response.json();
addMessage(`Learning paths: ${JSON.stringify(data.paths, null, 2)}`);
} catch (error) {
addMessage('Sorry, failed to load learning paths.');
}
}
// Auto-scroll chat
chatMessages.scrollTop = chatMessages.scrollHeight;
// Initialize chat input
if (chatInput) {
chatInput.addEventListener('keypress', (event) => {
if (event.key === 'Enter') {
sendMessage();
}
});
}
// Add event listeners when the DOM is fully loaded
document.addEventListener('DOMContentLoaded', () => {
console.log('DOM fully loaded and parsed');
const startResearchButton = document.getElementById('startResearchBtn');
if (startResearchButton) {
console.log('Attaching click listener to startResearchBtn');
startResearchButton.addEventListener('click', startResearch);
} else {
console.error('startResearchBtn not found');
}
const viewHistoryButton = document.getElementById('viewHistoryBtn');
if (viewHistoryButton) {
console.log('Attaching click listener to viewHistoryBtn');
viewHistoryButton.addEventListener('click', viewResearchHistory);
} else {
console.error('viewHistoryBtn not found');
}
const createPathButton = document.getElementById('createPathBtn');
if (createPathButton) {
console.log('Attaching click listener to createPathBtn');
createPathButton.addEventListener('click', createLearningPath);
} else {
console.error('createPathBtn not found');
}
const viewPathsButton = document.getElementById('viewPathsBtn');
if (viewPathsButton) {
console.log('Attaching click listener to viewPathsBtn');
viewPathsButton.addEventListener('click', viewPaths);
} else {
console.error('viewPathsBtn not found');
}
const sendMessageButton = document.getElementById('sendMessageBtn');
if (sendMessageButton) {
console.log('Attaching click listener to sendMessageBtn');
sendMessageButton.addEventListener('click', sendMessage);
} else {
console.error('sendMessageBtn not found');
}
});