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)