mirror of https://github.com/microsoft/autogen.git
218 lines
6.3 KiB
HTML
218 lines
6.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>AutoGen FastAPI Sample: Team</title>
|
|
<style>
|
|
body {
|
|
font-family: Arial, sans-serif;
|
|
margin: 0;
|
|
padding: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100vh;
|
|
background-color: #f0f0f0;
|
|
}
|
|
|
|
#chat-container {
|
|
width: 90%;
|
|
max-width: 600px;
|
|
background-color: #fff;
|
|
border-radius: 8px;
|
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
|
padding: 20px;
|
|
}
|
|
|
|
#messages {
|
|
height: 600px;
|
|
overflow-y: auto;
|
|
border-bottom: 1px solid #ddd;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.message {
|
|
margin: 10px 0;
|
|
}
|
|
|
|
.message.user {
|
|
text-align: right;
|
|
}
|
|
|
|
.message.assistant {
|
|
text-align: left;
|
|
}
|
|
|
|
.label {
|
|
font-weight: bold;
|
|
display: block;
|
|
}
|
|
|
|
.content {
|
|
margin-top: 5px;
|
|
}
|
|
|
|
#input-container {
|
|
display: flex;
|
|
}
|
|
|
|
#input-container input {
|
|
flex: 1;
|
|
padding: 10px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
#input-container button {
|
|
padding: 10px 20px;
|
|
border: none;
|
|
background-color: #007bff;
|
|
color: #fff;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
#input-container input:disabled,
|
|
#input-container button:disabled {
|
|
background-color: #e0e0e0;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.message.error {
|
|
color: #721c24;
|
|
background-color: #f8d7da;
|
|
border: 1px solid #f5c6cb;
|
|
padding: 10px;
|
|
border-radius: 4px;
|
|
margin: 10px 0;
|
|
}
|
|
|
|
.message.system {
|
|
color: #0c5460;
|
|
background-color: #d1ecf1;
|
|
border: 1px solid #bee5eb;
|
|
padding: 10px;
|
|
border-radius: 4px;
|
|
margin: 10px 0;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="chat-container">
|
|
<div id="messages"></div>
|
|
<div id="input-container">
|
|
<input type="text" id="message-input" placeholder="Type a message...">
|
|
<button id="send-button" onclick="sendMessage()">Send</button>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
const ws = new WebSocket('ws://localhost:8002/ws/chat');
|
|
|
|
ws.onmessage = function (event) {
|
|
const message = JSON.parse(event.data);
|
|
|
|
if (message.type === 'UserInputRequestedEvent') {
|
|
// Re-enable input and send button if UserInputRequestedEvent is received
|
|
enableInput();
|
|
}
|
|
else if (message.type === 'error') {
|
|
// Display error message
|
|
displayMessage(message.content, 'error');
|
|
enableInput();
|
|
}
|
|
else {
|
|
// Display regular message
|
|
displayMessage(message.content, message.source);
|
|
}
|
|
};
|
|
|
|
ws.onerror = function(error) {
|
|
displayMessage("WebSocket error occurred. Please refresh the page.", 'error');
|
|
enableInput();
|
|
};
|
|
|
|
ws.onclose = function() {
|
|
displayMessage("Connection closed. Please refresh the page.", 'system');
|
|
disableInput();
|
|
};
|
|
|
|
document.getElementById('message-input').addEventListener('keydown', function (event) {
|
|
if (event.key === 'Enter' && !event.target.disabled) {
|
|
sendMessage();
|
|
}
|
|
});
|
|
|
|
async function sendMessage() {
|
|
const input = document.getElementById('message-input');
|
|
const button = document.getElementById('send-button');
|
|
const message = input.value;
|
|
if (!message) return;
|
|
|
|
// Clear input and disable input and send button
|
|
input.value = '';
|
|
disableInput();
|
|
|
|
// Send message to WebSocket
|
|
ws.send(JSON.stringify({ content: message, source: 'user' }));
|
|
}
|
|
|
|
function displayMessage(content, source) {
|
|
const messagesContainer = document.getElementById('messages');
|
|
const messageElement = document.createElement('div');
|
|
messageElement.className = `message ${source}`;
|
|
|
|
const labelElement = document.createElement('span');
|
|
labelElement.className = 'label';
|
|
labelElement.textContent = source;
|
|
|
|
const contentElement = document.createElement('div');
|
|
contentElement.className = 'content';
|
|
contentElement.textContent = content;
|
|
|
|
messageElement.appendChild(labelElement);
|
|
messageElement.appendChild(contentElement);
|
|
messagesContainer.appendChild(messageElement);
|
|
messagesContainer.scrollTop = messagesContainer.scrollHeight;
|
|
}
|
|
|
|
function disableInput() {
|
|
const input = document.getElementById('message-input');
|
|
const button = document.getElementById('send-button');
|
|
input.disabled = true;
|
|
button.disabled = true;
|
|
}
|
|
|
|
function enableInput() {
|
|
const input = document.getElementById('message-input');
|
|
const button = document.getElementById('send-button');
|
|
input.disabled = false;
|
|
button.disabled = false;
|
|
}
|
|
|
|
async function loadHistory() {
|
|
try {
|
|
const response = await fetch('http://localhost:8002/history');
|
|
if (!response.ok) {
|
|
throw new Error('Network response was not ok');
|
|
}
|
|
const history = await response.json();
|
|
history.forEach(message => {
|
|
displayMessage(message.content, message.source);
|
|
});
|
|
} catch (error) {
|
|
console.error('Error loading history:', error);
|
|
}
|
|
}
|
|
|
|
// Load chat history when the page loads
|
|
window.onload = loadHistory;
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|