| | import os |
| | from fastapi import FastAPI, UploadFile, File, Form, HTTPException |
| | from fastapi.responses import JSONResponse |
| | from dotenv import load_dotenv |
| |
|
| | from .core.analyzer import quick_analyze |
| | from .core.reviewer import review_single_file |
| | from .utils.file_utils import save_upload_temp, read_file_text |
| | from .models.schemas import ReviewResponse |
| |
|
| | load_dotenv() |
| | app = FastAPI(title="Code Review Agent v0.1", description="Single-file code review using MiniMax-M2 (Ollama).") |
| |
|
| | @app.post("/review/file", response_model=ReviewResponse) |
| | async def review_file(file: UploadFile = File(...), persona: str = Form("general")): |
| | if not file.filename: |
| | raise HTTPException(status_code=400, detail="Missing filename") |
| | temp_path = save_upload_temp(file) |
| | code = read_file_text(temp_path) |
| | ext = os.path.splitext(file.filename)[1].lower() |
| | language = "python" if ext in (".py",) else "unknown" |
| | analyzer_evidence = quick_analyze(temp_path, language) |
| | review = review_single_file(temp_path, file.filename, code, analyzer_evidence, persona=persona) |
| | try: os.remove(temp_path) |
| | except OSError: pass |
| | return JSONResponse(status_code=200, content=review.dict()) |
| |
|
| | @app.get("/health") |
| | async def health(): |
| | return {"status": "ok", "model": os.getenv("OLLAMA_MODEL", "Minimax-M2"), "engine": "Ollama"} |
| |
|
| | @app.get("/") |
| | async def root(): |
| | return { |
| | "message": "Welcome to Code Review Agent v0.1", |
| | "usage": { |
| | "endpoint": "/review/file", |
| | "method": "POST", |
| | "params": {"file": "upload your source file", "persona": "general|security|performance|style"}, |
| | "example": "curl -F 'file=@example.py' -F 'persona=security' http://localhost:8080/review/file" |
| | } |
| | } |
| |
|