Satyam311's picture
Clean deploy: numpy vector search, binaries excluded
d4ec2fa
Raw History Blame Contribute Delete
2.44 kB
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from api.config import IS_PRODUCTION, FRONTEND_URL
from api.routes.classify import router as classify_router
from api.routes.search import router as search_router
from api.routes.corrections import router as corrections_router
from api.routes.ask import router as ask_router
from api.routes.stats import router as stats_router
from api.routes.model_performance import router as model_performance_router
from api.services.model_service import model_service
from api.services.embedding_service import embedding_service
from api.services.vector_store import vector_store
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(title="Maintenance Log Classifier API", version="0.1.0")
# CORS: permissive in dev to make local frontend work painlessly; tighten before any
# real deployment (per Security doc's "ENV toggles debug logging and CORS rules")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"] if not IS_PRODUCTION else ([FRONTEND_URL] if FRONTEND_URL else []),
allow_methods=["*"],
allow_headers=["*"],
)
@app.on_event("startup")
def load_models_on_startup():
from api.services.model_downloader import ensure_models_available
ensure_models_available()
logger.info("Loading models...")
model_service.load()
if not model_service.loaded:
logger.error(f"Models failed to load: {model_service.load_error}")
embedding_service.load()
if not embedding_service.loaded:
logger.warning(f"Embedding model failed to load (search will degrade): {embedding_service.load_error}")
vector_store.load()
if not vector_store.loaded:
logger.warning(f"Vector store failed to load (search will degrade): {vector_store.load_error}")
@app.get("/health")
def health():
return {
"status": "ok" if model_service.loaded else "degraded",
"models_loaded": model_service.loaded,
}
app.include_router(classify_router)
app.include_router(search_router)
app.include_router(corrections_router)
app.include_router(ask_router)
app.include_router(stats_router)
app.include_router(model_performance_router)
from fastapi.staticfiles import StaticFiles
from api.config import BASE_DIR
_reports_dir = BASE_DIR / "reports"
if _reports_dir.exists():
app.mount("/reports", StaticFiles(directory=str(_reports_dir)), name="reports")