File size: 1,781 Bytes
93df7ed | 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 | from fastapi import APIRouter
from pydantic import BaseModel
from rag.rag_chain import run_rag_query
from services.code_analysis import detect_bugs, explain_function, analyze_complexity
from services.documentation import generate_module_docs, generate_readme
from services.file_creator import propose_new_file, apply_approved_file, FileProposal
router = APIRouter()
class QueryRequest(BaseModel):
query: str
k: int = 5
class ExplainRequest(BaseModel):
file_path: str
function_name: str
class FileProposalRequest(BaseModel):
description: str
context_query: str | None = None
class FileApprovalRequest(BaseModel):
proposal: dict
approved: bool
@router.post("/query")
def query(req: QueryRequest):
return run_rag_query(req.query, req.k)
@router.post("/analyze/bugs")
def bugs(file_path: str):
return {"bugs": detect_bugs(file_path)}
@router.post("/analyze/complexity")
def complexity(file_path: str):
return analyze_complexity(file_path)
@router.post("/analyze/explain")
def explain(req: ExplainRequest):
return {"explanation": explain_function(req.file_path, req.function_name)}
@router.post("/docs/module")
def module_docs(file_path: str):
return {"docs": generate_module_docs(file_path)}
@router.post("/docs/readme")
def readme(root_path: str):
return {"readme": generate_readme(root_path)}
@router.post("/files/propose")
def propose(req: FileProposalRequest):
proposal = propose_new_file(req.description, req.context_query)
return proposal
@router.post("/files/approve")
async def approve(req: FileApprovalRequest):
proposal = FileProposal(**req.proposal)
return await apply_approved_file(proposal, req.approved) |