Spaces:
Sleeping
Sleeping
File size: 2,565 Bytes
0187d9a b26c508 0187d9a fe6002b 5fa8be0 0187d9a de4b55b 0187d9a b77c0a2 bf7f5ee fe6002b b77c0a2 fe6002b b77c0a2 0187d9a fe6002b b77c0a2 8600f2c edf9ade 4e4ac38 5fa8be0 b26c508 b77c0a2 4e4ac38 668c994 0187d9a b77c0a2 0187d9a b26c508 0187d9a b77c0a2 ea1dcd3 |
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
import sys
import os
from fastapi import FastAPI, HTTPException, Depends
import uvicorn
import traceback
from contextlib import asynccontextmanager
from fastapi.middleware.cors import CORSMiddleware
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",
},
],
# Removed root_path since HF Spaces already handles it
)
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
expose_headers=["*"], # Expose all headers
)
# Create upload and output directories
os.makedirs("uploads", exist_ok=True)
os.makedirs("outputs", exist_ok=True)
@app.on_event("startup")
async def startup_event():
"""Load model and data on startup"""
print("Loading sentence transformer model and data...")
sentence_transformer_service.load_model_data()
print("Model and data loaded successfully!")
# 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": "Meisai Check API is running!"}
if __name__ == "__main__":
create_directories()
uvicorn.run(app, host="0.0.0.0", port=7860)
|