126 lines
4.4 KiB
Python
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)
|