from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import uvicorn from contextlib import asynccontextmanager from router import llamindex_router from router import embedding_router from router import image_embedding_router from core.cronjob import news_scheduler @asynccontextmanager async def lifespan_manager(app: FastAPI): """ 서버 시작 시 모델을 로드하고 종료 시 정리합니다. """ # 스케줄러 시작 #news_scheduler.start() # 서버가 요청 처리를 시작하도록 제어권을 넘겨줍니다. yield # 스케줄러 종료 #news_scheduler.shutdown() # FastAPI 애플리케이션 초기화 app = FastAPI( title="RAG+LLM", description="RAG+LLM ", lifespan=lifespan_manager ) # CORS 설정 (모든 도메인 허용) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(llamindex_router.router, prefix="/llama_index") app.include_router(embedding_router.router, prefix="/embedding") app.include_router(image_embedding_router.router, prefix="/image_embedding") # 헬스 체크용 기본 엔드포인트 @app.get("/", summary="API 헬스 체크") def read_root(): """API 서버가 정상적으로 작동하는지 확인합니다.""" return {"message": "RAG+LLM API is running successfully."} if __name__ == "__main__": # --reload 옵션을 추가하여 코드가 변경될 때마다 자동 재시작되게 설정합니다. uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)