-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
65 lines (45 loc) · 1.4 KB
/
Copy pathmain.py
File metadata and controls
65 lines (45 loc) · 1.4 KB
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
from fastapi import FastAPI
from pydantic import BaseModel
from github_fetcher import get_repo_files, download_file
from analyzer import analyze_code
from llm_reviewer import review_code_with_llm
app = FastAPI()
# Request model
class RepoRequest(BaseModel):
repo_url: str = "https://github.com/pallets/flask"
# Root endpoint
@app.get("/")
def home():
return {
"message": "AI GitHub Code Review Assistant API",
"usage": "POST /analyze-repo with repo_url"
}
# Main analysis endpoint
@app.post("/analyze-repo")
def analyze_repository(request: RepoRequest):
owner, repo, files = get_repo_files(request.repo_url)
results = []
total_issues = 0
for file_path in files[:8]:
code = download_file(owner, repo, file_path)
if not code:
continue
issues = analyze_code(file_path, code)
# Run AI review only if file has issues
ai_review = []
if issues:
ai_review = review_code_with_llm(code[:800])
results.append({
"file": file_path,
"issues": issues,
"ai_review": ai_review
})
total_issues += len(issues)
issue_penalty = total_issues * 0.5
quality_score = max(1, round(10 - issue_penalty))
return {
"repository": repo,
"files_analyzed": len(results),
"results": results,
"quality_score": quality_score
}