97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
import argparse
|
|
import logging
|
|
import sys
|
|
import uuid
|
|
|
|
import uvicorn
|
|
from fastapi import FastAPI
|
|
|
|
import config
|
|
# 导入 API 路由模块
|
|
from api import glm, mthreads, qwen
|
|
from config import DEFAULT_LISTEN_HOST, DEFAULT_LISTEN_PORT
|
|
|
|
|
|
def setup_logging(debug: bool):
|
|
"""
|
|
配置日志系统,设置 proxy 专用日志记录器,避免与 uvicorn 等第三方库的日志冲突
|
|
"""
|
|
# 将记录器设置为最低级别(DEBUG),以便将所有消息传递给其处理器
|
|
app_logger = logging.getLogger("proxy")
|
|
app_logger.setLevel(logging.DEBUG)
|
|
app_logger.propagate = False # 防止日志消息传播到根记录器,避免重复记录
|
|
|
|
# 清除现有处理器,确保配置唯一性
|
|
app_logger.handlers.clear()
|
|
|
|
# 定义所有日志共享的格式
|
|
formatter = logging.Formatter(
|
|
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
)
|
|
|
|
# 在控制台显示 INFO 及以上级别的日志,保证控制台不会被 DEBUG 信息淹没
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(logging.INFO)
|
|
console_handler.setFormatter(formatter)
|
|
app_logger.addHandler(console_handler)
|
|
|
|
if debug:
|
|
# 在调试模式下,将 DEBUG 及以上级别的日志写入文件
|
|
file_handler = logging.FileHandler("debug.log", mode="w", encoding="utf-8")
|
|
file_handler.setLevel(logging.DEBUG)
|
|
file_handler.setFormatter(formatter)
|
|
app_logger.addHandler(file_handler)
|
|
|
|
|
|
# 命令行参数解析
|
|
parser = argparse.ArgumentParser(description="LLM API Proxy Server")
|
|
parser.add_argument(
|
|
"-p",
|
|
"--port",
|
|
type=int,
|
|
default=DEFAULT_LISTEN_PORT,
|
|
help=f"Port to run the server on (default: {DEFAULT_LISTEN_PORT})",
|
|
)
|
|
parser.add_argument(
|
|
"-d",
|
|
"--debug",
|
|
action="store_true",
|
|
help="Enable debug mode, writing detailed logs to debug.log",
|
|
)
|
|
args = parser.parse_args()
|
|
listen_port = args.port
|
|
config.DEBUG = args.debug
|
|
|
|
# 配置日志系统
|
|
setup_logging(config.DEBUG)
|
|
|
|
# 获取配置好的专用日志记录器
|
|
logger = logging.getLogger("proxy")
|
|
|
|
app = FastAPI(
|
|
title="LLM Chat API Proxy",
|
|
description="A proxy for LLM APIs, supporting GLM, Qwen, and MThreads Playground.",
|
|
version="1.0.3",
|
|
)
|
|
|
|
# 包含来自各个 API 模块的路由
|
|
app.include_router(mthreads.router, prefix="/api")
|
|
app.include_router(qwen.router, prefix="/api")
|
|
app.include_router(glm.router, prefix="/api")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logger.info(
|
|
f"Starting LLM API Proxy v1.0.3 on http://{DEFAULT_LISTEN_HOST}:{listen_port}"
|
|
)
|
|
if config.DEBUG:
|
|
logger.info("Debug mode is enabled. Logging to debug.log")
|
|
|
|
uvicorn.run(
|
|
"main:app",
|
|
host=DEFAULT_LISTEN_HOST,
|
|
port=listen_port,
|
|
reload=True,
|
|
reload_delay=1.0,
|
|
)
|