3v324v23's picture
code agent
e1d6e8a
import uuid
import json
from typing import List
from .llm_client import ask_ollama
from .prompts import build_review_prompt
from ..models.schemas import Finding, ReviewResponse
def make_id() -> str:
return str(uuid.uuid4())[:8]
def review_single_file(path: str, filename: str, code: str, analyzer_evidence: List[dict], persona: str = "general") -> ReviewResponse:
prompt = build_review_prompt(filename, code, analyzer_evidence, persona)
raw = ask_ollama(prompt)
findings = []
try:
arr = json.loads(raw)
for item in arr:
findings.append(Finding(
id=item.get("id", make_id()),
title=item.get("title", "Untitled"),
severity=item.get("severity", "low"),
file=filename,
line_range=tuple(item.get("line_range")) if item.get("line_range") else None,
description=item.get("description", ""),
suggested_fix=item.get("suggested_fix"),
confidence=int(item.get("confidence", 50)),
evidence=item.get("evidence")
))
except Exception:
findings.append(Finding(
id=make_id(),
title="Raw Review",
severity="low",
file=filename,
line_range=None,
description=(raw or "No response from LLM")[:3000],
suggested_fix=None,
confidence=50,
evidence=None
))
summary = f"Found {len(findings)} issues (persona={persona})."
return ReviewResponse(summary=summary, findings=findings)