CoolFace
Apppublic

matalee/hpce-dev

sourceHugging Faceapache-2.0updated 3mo agoView on Hugging Face
0likes
main.py100 linesDownload Raw Back to root
1from __future__ import annotations2"""3roadshow-server-v34AX Tech Connect 시연용 백엔드 (마이K Intent Taxonomy 116개 기반)5 6시나리오: cs-myk-v37구조: 3-Layer (Foundation / Inference / Serving)8"""9import logging10from contextlib import asynccontextmanager11 12from fastapi import FastAPI13from fastapi.middleware.cors import CORSMiddleware14 15from config import settings16from data.executor import init_db17from routes import sessions, intents, scenarios, admin18from ws.handler import router as ws_router19 20logging.basicConfig(21    level=logging.INFO,22    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",23)24logger = logging.getLogger(__name__)25 26 27@asynccontextmanager28async def lifespan(app: FastAPI):29    """앱 수명주기를 관리한다.30 31    기동 시 DB를 초기화(스키마 생성 + 카탈로그 시드)하고,32    WARMUP_ON_START가 켜져 있으면 모델을 미리 학습·준비한다.33    종료 시 로깅한다.34 35    Args:36        app: FastAPI 애플리케이션 인스턴스.37 38    Yields:39        제어를 애플리케이션 실행 구간으로 넘긴다.40    """41    logger.info(f"Starting roadshow-server-v3 (scenario={settings.SCENARIO_ID})")42    init_db()43    logger.info(f"DB initialized: {settings.DB_PATH}")44    if settings.WARMUP_ON_START:                  # 첫 설문 없이 모델 준비45        from core.warmup import warmup_models46        warmup_models()47    yield48    logger.info("Shutting down roadshow-server-v3")49 50 51app = FastAPI(52    title="roadshow-server-v3",53    description="AX Tech Connect 시연용 백엔드 (마이K Intent Taxonomy 116개)",54    version="3.0.0",55    lifespan=lifespan,56)57 58_cors_origins = (59    [o.strip() for o in settings.CORS_ORIGINS.split(",") if o.strip()]60    if settings.CORS_ORIGINS61    else ["*"]62)63app.add_middleware(64    CORSMiddleware,65    allow_origins=_cors_origins,66    allow_credentials=True,67    allow_methods=["*"],68    allow_headers=["*"],69)70 71app.include_router(scenarios.router, prefix="/api/scenarios", tags=["scenarios"])72app.include_router(sessions.router,  prefix="/api/sessions",  tags=["sessions"])73app.include_router(intents.router,   prefix="/api/intents",   tags=["intents"])74app.include_router(admin.router,     prefix="/api/admin",     tags=["admin"])75app.include_router(ws_router)76 77 78@app.get("/health")79async def health() -> dict:80    """헬스 체크 엔드포인트.81 82    Returns:83        서버 상태(status), 시나리오 ID(scenario_id), 환경(env)을 담은 dict.84    """85    return {86        "status":      "ok",87        "scenario_id": settings.SCENARIO_ID,88        "env":         settings.ENV,89    }90 91 92if __name__ == "__main__":93    import uvicorn94    uvicorn.run(95        "main:app",96        host="0.0.0.0",97        port=settings.PORT,98        reload=settings.RELOAD,99    )100