File size: 2,142 Bytes
38bc0dc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 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
# Mount frontend dist static files if present
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)
|