File size: 2,845 Bytes
39dcb26
 
 
2c97677
93c0ec9
39dcb26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88df89c
 
f03dace
39dcb26
 
8c8ff71
39dcb26
 
a66bba3
39dcb26
 
 
88df89c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39dcb26
 
 
88df89c
 
 
 
39dcb26
 
 
 
 
 
 
 
 
 
88df89c
 
 
 
 
 
 
 
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
81
82
83
84
85
86
87
const messageList = document.getElementById('message-list');
const messageInput = document.getElementById('message-input');
const sendButton = document.getElementById('send-button');

// Send message function
sendButton.addEventListener('click', sendMessage);
messageInput.addEventListener('keydown', (event) => {
    if (event.key === 'Enter') {
        sendMessage();
    }
});

function sendMessage() {
    const message = messageInput.value.trim();
    if (message === '') {
        return;
    }

    appendMessage(message, 'user-message');
    messageInput.value = '';

    appendMessage('', 'bot-message'); // Create an empty message element for the bot's response

    fetch('/chat_api', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            model: 'qwen3:1.7b', // You can change the model here
            prompt: message
        })
    })
    .then(response => {
        const reader = response.body.getReader();
        const decoder = new TextDecoder();
        let partialResponse = '';

        function read() {
            reader.read().then(({ done, value }) => {
                if (done) {
                    return;
                }
                partialResponse += decoder.decode(value, { stream: true });
                try {
                    const jsonObjects = partialResponse.split('\n');
                    partialResponse = jsonObjects.pop(); // Keep the last partial object
                    for (const jsonObjStr of jsonObjects) {
                        if (jsonObjStr) {
                            const jsonObj = JSON.parse(jsonObjStr);
                            if (jsonObj.response) {
                                appendToLastMessage(jsonObj.response);
                            }
                        }
                    }
                } catch (e) {
                    // JSON parsing error, wait for more chunks
                }
                read();
            });
        }
        read();
    })
    .catch(error => {
        console.error('Error:', error);
        const lastMessage = messageList.lastChild;
        if (lastMessage && lastMessage.classList.contains('bot-message')) {
            lastMessage.textContent = 'Sorry, something went wrong.';
        }
    });
}

function appendMessage(message, className) {
    const li = document.createElement('li');
    li.textContent = message;
    li.classList.add(className);
    messageList.appendChild(li);
    messageList.scrollTop = messageList.scrollHeight;
}

function appendToLastMessage(text) {
    const lastMessage = messageList.lastChild;
    if (lastMessage && lastMessage.classList.contains('bot-message')) {
        lastMessage.textContent += text;
        messageList.scrollTop = messageList.scrollHeight;
    }
}