Spaces:
Runtime error
Runtime error
File size: 6,224 Bytes
1e6a278 15b5332 1e6a278 15b5332 1e6a278 15b5332 1e6a278 4bfaa35 1e6a278 e72ad7d 1e6a278 f9c615f 15b5332 1e6a278 f9c615f 1e6a278 f9c615f 1e6a278 f9c615f acdcbfe 51df2de cdc3506 f9c615f cdc3506 acdcbfe 51df2de acdcbfe 51df2de 6a17d45 15b5332 cdc3506 |
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import http.server
import asyncio
import json
import random
import datetime
import sqlite3
import time
import websockets
import gradio as gr
client_messages = [] # List to store client messages
server_responses = [] # List to store server responses
messages = [] # List to store all messages
used_ports = [] # List to store used WebSocket ports
# Set up the SQLite database
db = sqlite3.connect('chat-hub.db')
cursor = db.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY AUTOINCREMENT, sender TEXT, message TEXT, timestamp TEXT)')
db.commit()
websocket_server = None
stop = asyncio.Future()
# Global variables to store references to the textboxes
messageTextbox = None
serverMessageTextbox = None
def slow_echo(message, history):
for i in range(len(message)):
time.sleep(0.3)
yield "You typed: " + message[: i+1]
# Define a function to read the HTML file
def read_html_file(file_name):
with open(file_name, 'r') as file:
html_content = file.read()
return html_content
# Set up the HTTP server
class SimpleHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
with open('index.html', 'rb') as file:
self.wfile.write(file.read())
else:
self.send_response(404)
self.end_headers()
# Set up the SQLite database
db = sqlite3.connect('chat-hub.db')
cursor = db.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY AUTOINCREMENT, sender TEXT, message TEXT, timestamp TEXT)')
db.commit()
# Define the function for sending an error message
def sendErrorMessage(ws, errorMessage):
errorResponse = {'error': errorMessage}
ws.send(json.dumps(errorResponse))
async def handle_message(client_responses, user_input, user_message, history):
client_responses.append(user_input)
# Provide a response to the user
return "You typed: " + user_message, history + [[user_message, None]]
async def ask_question(agent_responses, user_input, user_message):
agent_responses.append(user_input)
bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
return bot_message
# Define the WebSocket server handler
async def websocket_server(ws, path):
async for message in ws:
# Handle incoming WebSocket messages using the handle_message function
response, _ = await handle_message(client_messages, message, message, [])
await ws.send(response)
async def handleWebSocket(ws):
print('New connection')
await ws.send('Hello! You are now entering a chat room for AI agents working as instances of NeuralGPT. Keep in mind that you are speaking with another chatbot')
while True:
message = await ws.recv()
message_copy = message
client_messages.append(message_copy)
print(f'Received message: {message}')
messageText = message
messages.append(message)
timestamp = datetime.datetime.now().isoformat()
sender = 'client'
db = sqlite3.connect('chat-hub.db')
db.execute('INSERT INTO messages (sender, message, timestamp) VALUES (?, ?, ?)',
(sender, messageText, timestamp))
db.commit()
try:
message = client_messages[-1]
answer = await askQuestion(message) # Use the message directly
messages.append(answer)
response = {'answer': answer}
serverMessageText = response.get('answer', '')
await ws.send(json.dumps(response))
# Append the server response to the server_responses list
server_responses.append(serverMessageText)
serverSender = 'server'
db.execute('INSERT INTO messages (sender, message, timestamp) VALUES (?, ?, ?)',
(serverSender, serverMessageText, timestamp))
db.commit()
except websockets.exceptions.ConnectionClosedError as e:
print(f"Connection closed: {e}")
except Exception as e:
print(f"Error: {e}")
# Function to stop the WebSocket server
def stop_websockets():
global websocket_server
if websocket_server:
cursor.close()
db.close()
websocket_server.close()
print("WebSocket server stopped.")
else:
print("WebSocket server is not running.")
# Start the WebSocket server
async def start_websockets(websocketPort):
global messageTextbox, serverMessageTextbox, websocket_server
# Create a WebSocket client that connects to the server
await(websockets.serve(handleWebSocket, 'localhost', websocketPort))
used_ports.append(websocketPort)
print(f"Starting WebSocket server on port {websocketPort}...")
return "Used ports:\n" + '\n'.join(map(str, used_ports))
async def start_client():
async with websockets.connect('ws://localhost:5000') as ws:
while True:
# Listen for messages from the server
server_message = await ws.recv()
server_responses.append(server_message)
messages.append(server_message)
client_response = await askQuestion2(server_message)
client_messages.append(client_response)
await ws.send(client_response)
return server_message
await asyncio.sleep(0.1)
async def start_websocket_server():
server = await websockets.serve(websocket_server, "localhost", 8765) # Set your desired WebSocket server parameters
await server.wait_closed()
if __name__ == "__main__":
demo = gr.Interface(
fn=handle_message,
inputs="text", # Change this to the appropriate input type
outputs="text", # Change this to the appropriate output type
live=False,
title="Chatbot Interface",
description="Enter your message and get a response.",
)
demo.launch(server_name="0.0.0.0", server_port=8765)
asyncio.run(start_websocket_server()) |