- 添加rich库依赖以改进日志显示 - 在各模块添加详细调试日志,包括消息处理、命令执行和工具调用过程 - 使用RichHandler美化日志输出并抑制第三方库的噪音日志 - 在关键路径添加日志记录,便于问题排查
66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
"""PhoneWork entry point: FastAPI app + Feishu long-connection client."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import logging
|
|
|
|
import uvicorn
|
|
from fastapi import FastAPI
|
|
from rich.logging import RichHandler
|
|
|
|
from agent.manager import manager
|
|
from bot.handler import start_websocket_client
|
|
|
|
logging.basicConfig(
|
|
level=logging.DEBUG,
|
|
format="%(message)s",
|
|
datefmt="[%X]",
|
|
handlers=[RichHandler(rich_tracebacks=True, markup=True)],
|
|
)
|
|
# Suppress noisy third-party debug output
|
|
for _noisy in ("httpcore", "httpx", "openai._base_client", "urllib3", "lark_oapi", "websockets"):
|
|
logging.getLogger(_noisy).setLevel(logging.WARNING)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
app = FastAPI(title="PhoneWork", version="0.1.0")
|
|
|
|
|
|
@app.get("/health")
|
|
async def health() -> dict:
|
|
sessions = manager.list_sessions()
|
|
return {"status": "ok", "active_sessions": len(sessions)}
|
|
|
|
|
|
@app.get("/sessions")
|
|
async def list_sessions() -> list:
|
|
return manager.list_sessions()
|
|
|
|
|
|
@app.on_event("startup")
|
|
async def startup_event() -> None:
|
|
# Start the session manager's idle-reaper
|
|
await manager.start()
|
|
|
|
# Start the Feishu WebSocket client in a background thread,
|
|
# passing the running event loop so async work can be scheduled
|
|
loop = asyncio.get_event_loop()
|
|
start_websocket_client(loop)
|
|
logger.info("PhoneWork started")
|
|
|
|
|
|
@app.on_event("shutdown")
|
|
async def shutdown_event() -> None:
|
|
await manager.stop()
|
|
logger.info("PhoneWork shut down")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run(
|
|
"main:app",
|
|
host="0.0.0.0",
|
|
port=8000,
|
|
reload=False,
|
|
log_level="info",
|
|
)
|