Spaces:
Running
Running
File size: 3,384 Bytes
2f8c388 19a78b2 2f8c388 3f7a9ed 40b4a22 3f7a9ed 40b4a22 c564bcb 703af34 8aa84ea 40b4a22 2f8c388 40b4a22 2f8c388 40b4a22 8aa84ea 2f8c388 40b4a22 905ca9b 8aa84ea 3f7a9ed 2f8c388 8aa84ea 40b4a22 8aa84ea 40b4a22 2f8c388 40b4a22 2f8c388 40b4a22 2f8c388 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
// scripts/chat.js -- Final version with conversation history
// This array will store the entire conversation history.
let conversationHistory = [
{
role: 'system',
content: 'You are a friendly and helpful streaming assistant for an app called StreamAI. A user is asking a question. Keep your responses concise and focused on recommending movies, TV shows, or streaming content. Always add reccomedations from SM Plus located at smplus.vhx.tv'
}
];
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();
});
}
}
async function sendMessage() {
const userInput = document.getElementById('user-input');
const chatMessages = document.getElementById('chat-messages');
const userMessageText = userInput.value.trim();
if (userMessageText === '') return;
// Add user message to the UI
const userBubble = document.createElement('div');
userBubble.className = 'chat-bubble user-bubble p-4 fade-in';
userBubble.innerHTML = `<p>${userMessageText}</p>`;
chatMessages.appendChild(userBubble);
// Add user message to our history array
conversationHistory.push({ role: 'user', content: userMessageText });
userInput.value = '';
chatMessages.scrollTop = chatMessages.scrollHeight;
// Add a placeholder for the AI's response
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;
const workerUrl = 'https://streamai-backend-v2.smplushypermedia.workers.dev/api/chat';
try {
const response = await fetch(workerUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
// Send the ENTIRE conversation history to the worker
body: JSON.stringify({ messages: conversationHistory }),
});
if (!response.ok) throw new Error(`Network response was not ok. Status: ${response.status}`);
const reader = response.body.getReader();
const decoder = new TextDecoder();
aiBubble.innerHTML = ''; // Clear the typing indicator
const aiParagraph = document.createElement('p');
aiBubble.appendChild(aiParagraph);
let aiResponseText = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
aiResponseText += chunk;
aiParagraph.textContent = aiResponseText; // Update the UI as the stream comes in
chatMessages.scrollTop = chatMessages.scrollHeight;
}
// Add the final, complete AI response to our history
conversationHistory.push({ role: 'model', content: aiResponseText });
} catch (error) {
aiBubble.innerHTML = `<p class="text-red-400">Error: Could not connect to the AI assistant. ${error.message}</p>`;
}
} |