import sys import os from fastapi import FastAPI import uvicorn import traceback from contextlib import asynccontextmanager current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(current_dir) sys.path.append(os.path.join(current_dir, "meisai-check-ai")) from routes import auth, predict, health from services.sentence_transformer_service import sentence_transformer_service from utils import create_directories @asynccontextmanager async def lifespan(app: FastAPI): """Lifespan context manager for startup and shutdown events""" try: # Load models and data ONCE at startup sentence_transformer_service.load_model_data() except Exception as e: print(f"Error during startup: {e}") traceback.print_exc() yield # App chạy tại đây print("Shutting down application") # Initialize FastAPI app = FastAPI( title="MeisaiCheck API", description="API for MeisaiCheck AI System", version="1.0", lifespan=lifespan, openapi_tags=[ { "name": "Health", "description": "Health check endpoints", }, { "name": "Authentication", "description": "User authentication and token management", }, { "name": "AI Model", "description": "AI model endpoints for prediction and embedding", }, ], ) # Include Routers app.include_router(health.router, tags=["Health"]) app.include_router(auth.router, tags=["Authentication"]) app.include_router(predict.router, tags=["AI Model"]) @app.get("/", tags=["Health"]) async def root(): return {"message": "Hello World"} if __name__ == "__main__": create_directories() uvicorn.run(app, host="0.0.0.0", port=8000)