ai-tools-suite/backend/main.py
2025-12-27 15:33:06 +00:00

126 lines
4.4 KiB
Python

"""
AI Tools Suite - FastAPI Backend
"""
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from starlette.middleware.sessions import SessionMiddleware
from routers import (
drift,
costs,
security,
history,
compare,
privacy,
labels,
estimate,
audit,
content,
bias,
profitability,
emergency,
reports,
auth,
eda,
house_predictor,
)
app = FastAPI(
title="AI Tools Suite API",
description="Backend API for AI/ML operational tools",
version="0.1.0",
docs_url="/docs",
redoc_url="/redoc",
)
# CORS configuration - supports environment variable for production domains
cors_origins_env = os.getenv("CORS_ORIGINS", "")
cors_origins = [
"http://localhost:3000",
"http://localhost:5173",
"http://localhost:5174",
"http://localhost:5175",
]
# Add production domains from environment
if cors_origins_env:
cors_origins.extend([origin.strip() for origin in cors_origins_env.split(",") if origin.strip()])
app.add_middleware(
CORSMiddleware,
allow_origins=cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Session middleware for OAuth state
app.add_middleware(
SessionMiddleware,
secret_key=os.getenv("SECRET_KEY", "change-me-in-production"),
)
# Root endpoint
@app.get("/")
async def root():
return {
"name": "AI Tools Suite API",
"version": "0.1.0",
"docs": "/docs",
"health": "/api/v1/health",
"tools": [
{"name": "Model Drift Monitor", "endpoint": "/api/v1/drift"},
{"name": "Vendor Cost Tracker", "endpoint": "/api/v1/costs"},
{"name": "Security Tester", "endpoint": "/api/v1/security"},
{"name": "Data History Log", "endpoint": "/api/v1/history"},
{"name": "Model Comparator", "endpoint": "/api/v1/compare"},
{"name": "Privacy Scanner", "endpoint": "/api/v1/privacy"},
{"name": "Label Quality Scorer", "endpoint": "/api/v1/labels"},
{"name": "Inference Estimator", "endpoint": "/api/v1/estimate"},
{"name": "Data Integrity Audit", "endpoint": "/api/v1/audit"},
{"name": "Content Performance", "endpoint": "/api/v1/content"},
{"name": "Safety/Bias Checks", "endpoint": "/api/v1/bias"},
{"name": "Profitability Analysis", "endpoint": "/api/v1/profitability"},
{"name": "Emergency Control", "endpoint": "/api/v1/emergency"},
{"name": "Result Interpretation", "endpoint": "/api/v1/reports"},
{"name": "EDA Gapminder", "endpoint": "/api/v1/eda"},
]
}
# Health check
@app.get("/api/v1/health")
async def health_check():
return {"status": "healthy", "version": "0.1.0"}
# Register routers
app.include_router(drift.router, prefix="/api/v1/drift", tags=["Model Drift Monitor"])
app.include_router(costs.router, prefix="/api/v1/costs", tags=["Vendor Cost Tracker"])
app.include_router(security.router, prefix="/api/v1/security", tags=["Security Tester"])
app.include_router(history.router, prefix="/api/v1/history", tags=["Data History Log"])
app.include_router(compare.router, prefix="/api/v1/compare", tags=["Model Comparator"])
app.include_router(privacy.router, prefix="/api/v1/privacy", tags=["Privacy Scanner"])
app.include_router(labels.router, prefix="/api/v1/labels", tags=["Label Quality Scorer"])
app.include_router(estimate.router, prefix="/api/v1/estimate", tags=["Inference Estimator"])
app.include_router(audit.router, prefix="/api/v1/audit", tags=["Data Integrity Audit"])
app.include_router(content.router, prefix="/api/v1/content", tags=["Content Performance"])
app.include_router(bias.router, prefix="/api/v1/bias", tags=["Safety/Bias Checks"])
app.include_router(profitability.router, prefix="/api/v1/profitability", tags=["Profitability Analysis"])
app.include_router(emergency.router, prefix="/api/v1/emergency", tags=["Emergency Control"])
app.include_router(reports.router, prefix="/api/v1/reports", tags=["Result Interpretation"])
app.include_router(auth.router, prefix="/auth", tags=["Authentication"])
app.include_router(eda.router, prefix="/api/v1/eda", tags=["EDA Gapminder"])
app.include_router(house_predictor.router, prefix="/api/v1/house", tags=["House Price Predictor"])
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)