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>`;
    }
}