#! /usr/bin/python import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options import os import datetime import openai import asyncio from tornado.web import RequestHandler from tornado.options import define,options from tornado.websocket import WebSocketHandler import openai_async import config import gptAgent #define("port",default=9999,type=int) class IndexHandler(RequestHandler): def get(self): self.render("index.html") class ChatHandler(WebSocketHandler): users = set() #用来存在在线用户的容器 def open(self): print('进来了') self.users.add(self) #建立连接后添加到用户容器中 for u in self.users: print("user count{}".format(len(self.users))) u.write_message(u"[%s]-[%s]-进入" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y"))) print("{} enter".format(self.request.remote_ip)) def on_message(self,message): for u in self.users: # 向所有用户广播消息 u.write_message(u"[%s]-[%s]-说:%s" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y"),message)) print("{} says {}".format(self.request.remote_ip,message)) def on_close(self): print('离开了') self.users.remove(self) for u in self.users: u.write_message(u"[%s]-[%s]-离开" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y"))) print("{} leave".format(self.request.remote_ip)) def check_orign(self,orign): #接受所有跨域 return True # parsed_orign = urllib.parse.urlparse(orign) # return parsed_orign.netloc.endswith(".malls.iformall.com") #openai.api_key = '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'; class gptAgentStreamHandler(WebSocketHandler): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.my_replay_content = "" self.currentIsSend=False self.currentIsAll=False async def open(self): print("{} connect".format(self.request.remote_ip)) async def on_message(self,message): await gptAgent.talkGPTWithStream(self,message) def on_close(self): print("{} leave".format(self.request.remote_ip)) async def check_orign(self,orign): #接受所有跨域 return True # parsed_orign = urllib.parse.urlparse(orign) # return parsed_orign.netloc.endswith(".malls.iformall.com") class gptAgentHandler(WebSocketHandler): async def open(self): print("{} connect".format(self.request.remote_ip)) async def on_message(self,message): await gptAgent.talkGPT(self,message) def on_close(self): print("{} leave".format(self.request.remote_ip)) async def check_orign(self,orign): #接受所有跨域 return True # parsed_orign = urllib.parse.urlparse(orign) # return parsed_orign.netloc.endswith(".malls.iformall.com") async def main(): tornado.options.parse_command_line() app = tornado.web.Application([ (r"/index",IndexHandler), (r"/wss/chat",ChatHandler), #(r"/",gptAgentHandler) (r"/",gptAgentStreamHandler) ], static_path = os.path.join(os.path.dirname(__file__),"static"), template_path = os.path.join(os.path.dirname(__file__),"template"), debug = True ) http_server = tornado.httpserver.HTTPServer(app,xheaders=True) #http_server.listen(options.port) http_server.bind(config.agentServer['port']) http_server.start(config.agentServer['threads']) await asyncio.Event().wait() if __name__ == '__main__': asyncio.run(main()) #if __name__ == '__main__': #tornado.options.parse_command_line() #app = tornado.web.Application([ # (r"/index",IndexHandler), # (r"/wss/chat",ChatHandler), # #(r"/",gptAgentHandler) # (r"/",gptAgentStreamHandler) # ], # static_path = os.path.join(os.path.dirname(__file__),"static"), # template_path = os.path.join(os.path.dirname(__file__),"template"), # debug = True #) #http_server = tornado.httpserver.HTTPServer(app,xheaders=True) ##http_server.listen(options.port) #http_server.bind(options.port) #http_server.start(1) #tornado.ioloop.IOLoop.current().start()