Files
nekochatapi/main.py

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,
)