File size: 1,616 Bytes
0187d9a
 
b77c0a2
0187d9a
 
fe6002b
0187d9a
 
 
 
b77c0a2
 
 
bf7f5ee
fe6002b
 
 
 
 
b77c0a2
 
fe6002b
 
 
 
b77c0a2
0187d9a
fe6002b
 
b77c0a2
 
 
 
 
 
 
 
 
01ae535
b77c0a2
 
fe6002b
b77c0a2
 
 
 
0187d9a
 
b77c0a2
0187d9a
 
 
 
b77c0a2
0187d9a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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(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": "Prediction", "description": "Predict and process CSV files"},
    ]
)

# Include Routers
app.include_router(health.router, tags=["Health"])
app.include_router(auth.router, tags=["Authentication"])
app.include_router(predict.router, tags=["Prediction"])


@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)