Spaces:
Running
Running
File size: 2,609 Bytes
3f7a9ed 40b4a22 3f7a9ed 40b4a22 c564bcb 703af34 905ca9b 703af34 8aa84ea 40b4a22 905ca9b 40b4a22 8aa84ea 905ca9b 40b4a22 905ca9b 8aa84ea 3f7a9ed 8aa84ea 40b4a22 8aa84ea 905ca9b 40b4a22 c564bcb 40b4a22 8aa84ea 40b4a22 8aa84ea 703af34 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
// scripts/chat.js
export function initChat() {
const sendBtn = document.getElementById('send-btn');
const userInput = document.getElementById('user-input');
if (sendBtn && userInput) {
sendBtn.addEventListener('click', sendMessage);
userInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') sendMessage();
});
}
}
// In scripts/chat.js
async function sendMessage() {
const userInput = document.getElementById('user-input');
const chatMessages = document.getElementById('chat-messages');
const userMessageText = userInput.value.trim();
if (userMessageText === '') return;
// Create and add the user's message bubble
const userBubble = document.createElement('div');
userBubble.className = 'chat-bubble user-bubble p-4 fade-in';
userBubble.innerHTML = `<p>${userMessageText}</p>`;
chatMessages.appendChild(userBubble);
userInput.value = '';
chatMessages.scrollTop = chatMessages.scrollHeight;
// Create the AI's response bubble
const aiBubble = document.createElement('div');
aiBubble.className = 'chat-bubble ai-bubble p-4 fade-in';
aiBubble.innerHTML = '<div class="typing-indicator"><span></span><span></span><span></span></div>';
chatMessages.appendChild(aiBubble);
chatMessages.scrollTop = chatMessages.scrollHeight;
// --- THIS IS THE CRUCIAL UPDATE ---
// This now points to your new worker's chat endpoint.
const workerUrl = 'https://streamai-backend-v2.smplushypermedia.workers.dev/api/chat';
try {
const response = await fetch(workerUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ prompt: userMessageText }),
});
if (!response.ok) throw new Error(`Network response was not ok. Status: ${response.status}`);
// Handle the streaming response from Gemini
const reader = response.body.getReader();
const decoder = new TextDecoder();
aiBubble.innerHTML = ''; // Clear the typing indicator
const aiParagraph = document.createElement('p');
aiBubble.appendChild(aiParagraph);
while (true) {
const { done, value } = await reader.read();
if (done) break;
aiParagraph.textContent += decoder.decode(value, { stream: true });
chatMessages.scrollTop = chatMessages.scrollHeight;
}
} catch (error) {
aiBubble.innerHTML = `<p class="text-red-400">Error: Could not connect to the AI assistant. ${error.message}</p>`;
}
} |