Spaces:
Running
Running
| import logging | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.staticfiles import StaticFiles | |
| from api.routes import generate, health, chat, auth, documents, tenant, leads | |
| from core.rate_limiter import RateLimitMiddleware | |
| import threading | |
| from fastapi.responses import FileResponse | |
| logger = logging.getLogger("axiom.main") | |
| app = FastAPI(title="Axiom RAG System", version="3.0.0") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Rate-limit auth endpoints: 20 req/min per IP | |
| app.add_middleware( | |
| RateLimitMiddleware, | |
| rate_limited_paths=["/auth/"], | |
| max_requests=20, | |
| window_seconds=60, | |
| ) | |
| # Rate-limit heavy API endpoints (Generation, Document Upload): 30 req/min per IP | |
| app.add_middleware( | |
| RateLimitMiddleware, | |
| rate_limited_paths=["/generate/", "/documents/upload", "/chat/sessions"], | |
| max_requests=30, | |
| window_seconds=60, | |
| ) | |
| app.include_router(health.router, tags=["Health"]) | |
| app.include_router(auth.router, tags=["Auth"]) | |
| #app.include_router(google_auth.router, tags=["Auth"]) | |
| app.include_router(generate.router, tags=["Generate"]) | |
| app.include_router(chat.router, prefix="/chat", tags=["Chat"]) | |
| app.include_router(documents.router, tags=["Documents"]) | |
| app.include_router(tenant.router, tags=["Tenant"]) | |
| app.include_router(leads.router, tags=["Leads"]) | |
| async def startup_event(): | |
| def load_pipeline(): | |
| try: | |
| from api.routes.generate import get_pipeline | |
| get_pipeline() | |
| except Exception as e: | |
| logger.error(f"Pipeline load error: {e}") | |
| threading.Thread(target=load_pipeline, daemon=True).start() | |
| logger.info("Pipeline loading in background...") | |
| # Add these explicit UI routes: | |
| async def serve_login(): | |
| return FileResponse("frontend/login.html") | |
| async def serve_app(): | |
| return FileResponse("frontend/app.html") | |
| async def serve_reset(): | |
| return FileResponse("frontend/reset.html") | |
| async def serve_profile(): | |
| return FileResponse("frontend/profile.html") | |
| async def serve_admin(): | |
| return FileResponse("frontend/admin.html") | |
| app.mount("/", StaticFiles(directory="frontend", html=True), name="frontend") |