CodeBase-Agent / routes.py
armaanalam's picture
Upload 9 files
93df7ed verified
Raw History Blame
1.78 kB
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)