| import math |
| import os |
| import psutil |
|
|
| from fastapi import FastAPI |
| from fastapi.middleware.cors import CORSMiddleware |
| from fastapi.staticfiles import StaticFiles |
| from pydantic import BaseModel |
|
|
| from scoring_api import evaluate |
| from phase2.optimization import IterativeOptimizer |
|
|
| app = FastAPI(title="AI Code Maintainability Scoring Engine API") |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
|
|
| class ScoreRequest(BaseModel): |
| code: str |
|
|
|
|
| class RefactorRequest(BaseModel): |
| code: str |
| target_score: float = 20.0 |
| max_iterations: int = 3 |
|
|
|
|
| @app.get("/api/health") |
| def health(): |
| proc = psutil.Process() |
| mem_info = proc.memory_info() |
| sys_mem = psutil.virtual_memory() |
| return { |
| "status": "ok", |
| "service": "AI Code Maintainability Scoring Engine", |
| "memory": { |
| "process_rss_mb": round(mem_info.rss / (1024 * 1024), 2), |
| "process_vms_mb": round(mem_info.vms / (1024 * 1024), 2), |
| "process_memory_percent": round(proc.memory_percent(), 2), |
| "system_total_gb": round(sys_mem.total / (1024**3), 2), |
| "system_available_gb": round(sys_mem.available / (1024**3), 2), |
| "system_used_percent": sys_mem.percent, |
| }, |
| } |
|
|
|
|
| @app.post("/api/score") |
| def score(request: ScoreRequest): |
| return evaluate(request.code) |
|
|
|
|
| @app.post("/api/refactor") |
| def refactor(request: RefactorRequest): |
| optimizer = IterativeOptimizer( |
| target_score=request.target_score, |
| max_iterations=request.max_iterations, |
| ) |
| result = optimizer.optimize(request.code) |
| if not math.isfinite(result["final_score"]): |
| result["final_score"] = None |
| return result |
|
|
|
|
| |
| frontend_dist = os.path.join(os.path.dirname(__file__), "frontend", "dist") |
| if os.path.exists(frontend_dist): |
| app.mount("/", StaticFiles(directory=frontend_dist, html=True), name="frontend") |
|
|
|
|
| if __name__ == "__main__": |
| import uvicorn |
|
|
| port = int(os.environ.get("PORT", 7860)) |
| uvicorn.run("api_server:app", host="0.0.0.0", port=port) |
|
|