axiom / api /main.py
Nithish-05's picture
chore: finalize Axiom RAG pgvector migration, DOCX parsing, and LLM reliability
1eecc1c
Raw
History Blame Contribute Delete
2.52 kB
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"])
@app.on_event("startup")
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:
@app.get("/login", tags=["UI"])
async def serve_login():
return FileResponse("frontend/login.html")
@app.get("/app", tags=["UI"])
async def serve_app():
return FileResponse("frontend/app.html")
@app.get("/reset", tags=["UI"])
async def serve_reset():
return FileResponse("frontend/reset.html")
@app.get("/profile", tags=["UI"])
async def serve_profile():
return FileResponse("frontend/profile.html")
@app.get("/admin", tags=["UI"])
async def serve_admin():
return FileResponse("frontend/admin.html")
app.mount("/", StaticFiles(directory="frontend", html=True), name="frontend")