-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
116 lines (89 loc) · 3.27 KB
/
server.py
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
# 加载环境变量
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
from config.config import Config,WebServerParameters
import argparse
import os
import sys
from typing import List
from fastapi import FastAPI,WebSocket,WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from fastapi.openapi.docs import get_swagger_ui_html
from Utils.logUtils import logging_str_to_uvicorn_level,setup_logging,_get_logging_level
from MapAgent.InitAgent import start_agent
from router import chat
from router import docs_agent
from router import map_interact
from router import biding_agent,teacher_agent,rag
import websockets
import asyncio
origins = ["*"]
app = FastAPI(
title="MapGPT OPEN API",
description="This is mapgpt, with auto docs for the API and everything",
version="0.5.0",
openapi_tags=[],
)
async def hello(websocket,path):
name = await websocket.recv()
print('receive_name',name)
await websocket.send('hello, '+name)
def start_ws(ws_func):
start_ws_server = websockets.serve(ws_func, "localhost", 8123)
print('start_ws_server',start_ws_server)
asyncio.get_event_loop().run_until_complete(start_ws_server)
asyncio.get_event_loop().run_forever()
# 添加跨域中间件
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
# allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
allow_headers=["*"],
)
def mount_routers(app: FastAPI):
"""Lazy import to avoid high time cost"""
app.include_router(chat.router, prefix="/api/v1", tags=["chat"])
app.include_router(docs_agent.router, prefix="/api/v1", tags=["chat"])
app.include_router(map_interact.router, prefix="/api/v1", tags=["chat"])
app.include_router(biding_agent.router, prefix="/api/v1", tags=["chat"])
app.include_router(teacher_agent.router, prefix="/api/v1", tags=["chat"])
app.include_router(rag.router, prefix="/api/v1", tags=["chat"])
def run_uvicorn(param: WebServerParameters):
import uvicorn
uvicorn.run(
app,
host=param.host,
port=param.port,
log_level=logging_str_to_uvicorn_level(param.log_level),
)
def _get_webserver_params(args: List[str] = None):
from Utils.parameterUtils import EnvArgumentParser
parser: argparse.ArgumentParser = EnvArgumentParser.create_argparse_option(
WebServerParameters
)
# aa = vars(parser.parse_args(args=args))
# print(aa)
return WebServerParameters(**vars(parser.parse_args(args=args)))
def run_webserver(param: WebServerParameters = None):
if not param:
param = _get_webserver_params()
if not param.log_level:
param.log_level = _get_logging_level()
setup_logging(
"mapgpt", logging_level=param.log_level, logger_filename=param.log_file
)
mount_routers(app) # 注册路由
# start_ws(hello)
run_uvicorn(param)
# @app.get('/')
# async def root():
# return {'message': 'Hello World'}
# @app.websocket("/ws")
# async def websocket_endpoint(websocket: WebSocket):
# await websocket.accept()
# while True:
# data = await websocket.receive_text()
# await websocket.send_text(f"Message text was: {data}")
run_webserver()