usman-ai-dev's picture
Deploy AI Code Maintainability Scoring Engine to Hugging Face Spaces
38bc0dc verified
Raw
History Blame Contribute Delete
2.14 kB
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)