You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

app_team.html 6.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>AutoGen FastAPI Sample: Team</title>
  7. <style>
  8. body {
  9. font-family: Arial, sans-serif;
  10. margin: 0;
  11. padding: 0;
  12. display: flex;
  13. flex-direction: column;
  14. align-items: center;
  15. justify-content: center;
  16. height: 100vh;
  17. background-color: #f0f0f0;
  18. }
  19. #chat-container {
  20. width: 90%;
  21. max-width: 600px;
  22. background-color: #fff;
  23. border-radius: 8px;
  24. box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  25. padding: 20px;
  26. }
  27. #messages {
  28. height: 600px;
  29. overflow-y: auto;
  30. border-bottom: 1px solid #ddd;
  31. margin-bottom: 20px;
  32. }
  33. .message {
  34. margin: 10px 0;
  35. }
  36. .message.user {
  37. text-align: right;
  38. }
  39. .message.assistant {
  40. text-align: left;
  41. }
  42. .label {
  43. font-weight: bold;
  44. display: block;
  45. }
  46. .content {
  47. margin-top: 5px;
  48. }
  49. #input-container {
  50. display: flex;
  51. }
  52. #input-container input {
  53. flex: 1;
  54. padding: 10px;
  55. border: 1px solid #ddd;
  56. border-radius: 4px;
  57. }
  58. #input-container button {
  59. padding: 10px 20px;
  60. border: none;
  61. background-color: #007bff;
  62. color: #fff;
  63. border-radius: 4px;
  64. cursor: pointer;
  65. }
  66. #input-container input:disabled,
  67. #input-container button:disabled {
  68. background-color: #e0e0e0;
  69. cursor: not-allowed;
  70. }
  71. .message.error {
  72. color: #721c24;
  73. background-color: #f8d7da;
  74. border: 1px solid #f5c6cb;
  75. padding: 10px;
  76. border-radius: 4px;
  77. margin: 10px 0;
  78. }
  79. .message.system {
  80. color: #0c5460;
  81. background-color: #d1ecf1;
  82. border: 1px solid #bee5eb;
  83. padding: 10px;
  84. border-radius: 4px;
  85. margin: 10px 0;
  86. }
  87. </style>
  88. </head>
  89. <body>
  90. <div id="chat-container">
  91. <div id="messages"></div>
  92. <div id="input-container">
  93. <input type="text" id="message-input" placeholder="Type a message...">
  94. <button id="send-button" onclick="sendMessage()">Send</button>
  95. </div>
  96. </div>
  97. <script>
  98. const ws = new WebSocket('ws://localhost:8002/ws/chat');
  99. ws.onmessage = function (event) {
  100. const message = JSON.parse(event.data);
  101. if (message.type === 'UserInputRequestedEvent') {
  102. // Re-enable input and send button if UserInputRequestedEvent is received
  103. enableInput();
  104. }
  105. else if (message.type === 'error') {
  106. // Display error message
  107. displayMessage(message.content, 'error');
  108. enableInput();
  109. }
  110. else {
  111. // Display regular message
  112. displayMessage(message.content, message.source);
  113. }
  114. };
  115. ws.onerror = function(error) {
  116. displayMessage("WebSocket error occurred. Please refresh the page.", 'error');
  117. enableInput();
  118. };
  119. ws.onclose = function() {
  120. displayMessage("Connection closed. Please refresh the page.", 'system');
  121. disableInput();
  122. };
  123. document.getElementById('message-input').addEventListener('keydown', function (event) {
  124. if (event.key === 'Enter' && !event.target.disabled) {
  125. sendMessage();
  126. }
  127. });
  128. async function sendMessage() {
  129. const input = document.getElementById('message-input');
  130. const button = document.getElementById('send-button');
  131. const message = input.value;
  132. if (!message) return;
  133. // Clear input and disable input and send button
  134. input.value = '';
  135. disableInput();
  136. // Send message to WebSocket
  137. ws.send(JSON.stringify({ content: message, source: 'user' }));
  138. }
  139. function displayMessage(content, source) {
  140. const messagesContainer = document.getElementById('messages');
  141. const messageElement = document.createElement('div');
  142. messageElement.className = `message ${source}`;
  143. const labelElement = document.createElement('span');
  144. labelElement.className = 'label';
  145. labelElement.textContent = source;
  146. const contentElement = document.createElement('div');
  147. contentElement.className = 'content';
  148. contentElement.textContent = content;
  149. messageElement.appendChild(labelElement);
  150. messageElement.appendChild(contentElement);
  151. messagesContainer.appendChild(messageElement);
  152. messagesContainer.scrollTop = messagesContainer.scrollHeight;
  153. }
  154. function disableInput() {
  155. const input = document.getElementById('message-input');
  156. const button = document.getElementById('send-button');
  157. input.disabled = true;
  158. button.disabled = true;
  159. }
  160. function enableInput() {
  161. const input = document.getElementById('message-input');
  162. const button = document.getElementById('send-button');
  163. input.disabled = false;
  164. button.disabled = false;
  165. }
  166. async function loadHistory() {
  167. try {
  168. const response = await fetch('http://localhost:8002/history');
  169. if (!response.ok) {
  170. throw new Error('Network response was not ok');
  171. }
  172. const history = await response.json();
  173. history.forEach(message => {
  174. displayMessage(message.content, message.source);
  175. });
  176. } catch (error) {
  177. console.error('Error loading history:', error);
  178. }
  179. }
  180. // Load chat history when the page loads
  181. window.onload = loadHistory;
  182. </script>
  183. </body>
  184. </html>