hpce-dev / main.py
์ด๋™ํ˜„
[DOCS] ๋ฐฑ์—”๋“œ ์ „๋ฐ˜ docstring ๋ณด๊ฐ• (Google ์Šคํƒ€์ผ Args/Returns/Raises)
58debbc
Raw
History Blame Contribute Delete
2.8 kB
from __future__ import annotations
"""
roadshow-server-v3
AX Tech Connect ์‹œ์—ฐ์šฉ ๋ฐฑ์—”๋“œ (๋งˆ์ดK Intent Taxonomy 116๊ฐœ ๊ธฐ๋ฐ˜)
์‹œ๋‚˜๋ฆฌ์˜ค: cs-myk-v3
๊ตฌ์กฐ: 3-Layer (Foundation / Inference / Serving)
"""
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from config import settings
from data.executor import init_db
from routes import sessions, intents, scenarios, admin
from ws.handler import router as ws_router
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""์•ฑ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
๊ธฐ๋™ ์‹œ DB๋ฅผ ์ดˆ๊ธฐํ™”(์Šคํ‚ค๋งˆ ์ƒ์„ฑ + ์นดํƒˆ๋กœ๊ทธ ์‹œ๋“œ)ํ•˜๊ณ ,
WARMUP_ON_START๊ฐ€ ์ผœ์ ธ ์žˆ์œผ๋ฉด ๋ชจ๋ธ์„ ๋ฏธ๋ฆฌ ํ•™์Šตยท์ค€๋น„ํ•œ๋‹ค.
์ข…๋ฃŒ ์‹œ ๋กœ๊น…ํ•œ๋‹ค.
Args:
app: FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค.
Yields:
์ œ์–ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๊ตฌ๊ฐ„์œผ๋กœ ๋„˜๊ธด๋‹ค.
"""
logger.info(f"Starting roadshow-server-v3 (scenario={settings.SCENARIO_ID})")
init_db()
logger.info(f"DB initialized: {settings.DB_PATH}")
if settings.WARMUP_ON_START: # ์ฒซ ์„ค๋ฌธ ์—†์ด ๋ชจ๋ธ ์ค€๋น„
from core.warmup import warmup_models
warmup_models()
yield
logger.info("Shutting down roadshow-server-v3")
app = FastAPI(
title="roadshow-server-v3",
description="AX Tech Connect ์‹œ์—ฐ์šฉ ๋ฐฑ์—”๋“œ (๋งˆ์ดK Intent Taxonomy 116๊ฐœ)",
version="3.0.0",
lifespan=lifespan,
)
_cors_origins = (
[o.strip() for o in settings.CORS_ORIGINS.split(",") if o.strip()]
if settings.CORS_ORIGINS
else ["*"]
)
app.add_middleware(
CORSMiddleware,
allow_origins=_cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(scenarios.router, prefix="/api/scenarios", tags=["scenarios"])
app.include_router(sessions.router, prefix="/api/sessions", tags=["sessions"])
app.include_router(intents.router, prefix="/api/intents", tags=["intents"])
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])
app.include_router(ws_router)
@app.get("/health")
async def health() -> dict:
"""ํ—ฌ์Šค ์ฒดํฌ ์—”๋“œํฌ์ธํŠธ.
Returns:
์„œ๋ฒ„ ์ƒํƒœ(status), ์‹œ๋‚˜๋ฆฌ์˜ค ID(scenario_id), ํ™˜๊ฒฝ(env)์„ ๋‹ด์€ dict.
"""
return {
"status": "ok",
"scenario_id": settings.SCENARIO_ID,
"env": settings.ENV,
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"main:app",
host="0.0.0.0",
port=settings.PORT,
reload=settings.RELOAD,
)