-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchat.html
102 lines (92 loc) · 3.31 KB
/
chat.html
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>WebSocket Stream Chat</title>
<style>
#messages {
border: 1px solid #ccc;
padding: 10px;
height: 400px;
overflow-y: scroll;
margin-bottom: 10px;
}
#chatbox {
width: calc(100% - 70px);
padding: 10px;
box-sizing: border-box;
}
#send-button {
padding: 10px;
}
.message {
margin-bottom: 10px;
}
.user-message {
color: #0066cc;
font-weight: bold;
}
.assistant-response {
color: #333;
}
</style>
<!-- Include Marked.js for Markdown rendering -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
<div id="messages"></div>
<input type="text" id="chatbox" placeholder="Type your message..." />
<button id="send-button">Send</button>
<script>
const ws = new WebSocket("ws://0.0.0.0:8000/chat");
let currentResponseDiv = null;
let currentResponseText = "";
ws.onopen = function() {
console.log("Connected to WebSocket server");
};
ws.onmessage = function(event) {
const messagesDiv = document.getElementById("messages");
if (event.data === "[DONE]") {
// Reset for the next response
currentResponseDiv = null;
currentResponseText = "";
messagesDiv.scrollTop = messagesDiv.scrollHeight;
return;
}
if (!currentResponseDiv) {
// Create a new message container for the assistant's response
currentResponseDiv = document.createElement("div");
currentResponseDiv.className = "message assistant-response";
messagesDiv.appendChild(currentResponseDiv);
currentResponseText = "";
}
// Accumulate the new chunk text and update innerHTML using marked
currentResponseText += event.data;
currentResponseDiv.innerHTML = marked.parse(currentResponseText);
messagesDiv.scrollTop = messagesDiv.scrollHeight;
};
function sendMessage() {
const chatbox = document.getElementById("chatbox");
const message = chatbox.value;
if (message.trim() !== "") {
// Add user message to chat
const messagesDiv = document.getElementById("messages");
const userMessageDiv = document.createElement("div");
userMessageDiv.className = "message user-message";
userMessageDiv.textContent = message;
messagesDiv.appendChild(userMessageDiv);
// Send message to server
ws.send(message);
chatbox.value = "";
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
}
document.getElementById("send-button").addEventListener("click", sendMessage);
document.getElementById("chatbox").addEventListener("keypress", (e) => {
if (e.key === 'Enter') {
sendMessage();
}
});
</script>
</body>
</html>