Files
2026-07-13 13:30:30 +08:00

105 lines
3.2 KiB
HTML

<!doctype html>
<html>
<head>
<title>Gemini Live API Test</title>
</head>
<body>
<h1>Gemini Live API Test</h1>
<div
id="messages"
style="height: 300px; overflow-y: auto; border: 1px solid black"></div>
<br />
<form id="messageForm">
<label for="message">Message:</label>
<input type="text" id="message" name="message" />
<button type="submit" id="sendButton" disabled>Send</button>
</form>
</body>
<script>
// Connect the server with a WebSocket connection
const ws_url = "wss://" + window.location.host + "/live";
let ws = new WebSocket(ws_url);
// Get DOM elements
const messageForm = document.getElementById("messageForm");
const messageInput = document.getElementById("message");
const messagesDiv = document.getElementById("messages");
let currentMessageId = null;
// WebSocket handlers
function addWebSocketHandlers(ws) {
ws.onopen = function () {
console.log("WebSocket connection opened.");
document.getElementById("sendButton").disabled = false;
document.getElementById("messages").textContent = "Connection opened";
addSubmitHandler(this);
};
ws.onmessage = function (event) {
// Parse the incoming message
const packet = JSON.parse(event.data);
console.log(packet);
// Check if the turn is complete
// if turn complete, add new message
if (packet.turn_complete && packet.turn_complete == true) {
currentMessageId = null;
return;
}
// add a new message for a new turn
if (currentMessageId == null) {
currentMessageId = Math.random().toString(36).substring(7);
const message = document.createElement("p");
message.id = currentMessageId;
// Append the message element to the messagesDiv
messagesDiv.appendChild(message);
}
// Add message text to the existing message element
const message = document.getElementById(currentMessageId);
message.textContent += packet.text;
// Scroll down to the bottom of the messagesDiv
messagesDiv.scrollTop = messagesDiv.scrollHeight;
};
// When the connection is closed, try reconnecting
ws.onclose = function () {
console.log("WebSocket connection closed.");
document.getElementById("sendButton").disabled = true;
document.getElementById("messages").textContent = "Connection closed";
setTimeout(function () {
console.log("Reconnecting...");
ws = new WebSocket(ws_url);
addWebSocketHandlers(ws);
}, 5000);
};
ws.onerror = function (e) {
console.log("WebSocket error: ", e);
};
}
addWebSocketHandlers(ws);
// Add submit handler to the form
function addSubmitHandler(ws) {
messageForm.onsubmit = function (e) {
e.preventDefault();
const message = messageInput.value;
if (message) {
const p = document.createElement("p");
p.textContent = "> " + message;
messagesDiv.appendChild(p);
ws.send(message);
messageInput.value = "";
}
return false;
};
}
</script>
</html>