working demo
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import requests
|
||||
from fastapi import FastAPI
|
||||
from openai import OpenAI
|
||||
from pydantic import BaseModel
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
class ReviewRequest(BaseModel):
|
||||
gitea_token: str
|
||||
gitea_host: str
|
||||
openrouter_key: str
|
||||
model: str
|
||||
repo: str
|
||||
pr_number: int
|
||||
|
||||
@app.post("/")
|
||||
async def review(
|
||||
request_body: ReviewRequest,
|
||||
):
|
||||
print('starting bg task with:')
|
||||
print(f'request: {request_body}')
|
||||
|
||||
gitea_host = request_body.gitea_host.rstrip("/")
|
||||
|
||||
headers = {"Authorization": f"token {request_body.gitea_token}"}
|
||||
|
||||
diff_res = requests.get(f"{gitea_host}/api/v1/repos/{request_body.repo}/pulls/{request_body.pr_number}.diff", headers=headers)
|
||||
if diff_res.status_code != 200 or not diff_res.text.strip():
|
||||
return
|
||||
|
||||
diff_text = diff_res.text
|
||||
|
||||
client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=request_body.openrouter_key)
|
||||
|
||||
prompt = (
|
||||
"You are an automated senior code reviewer. Review the following git diff.\n"
|
||||
"Focus on: critical bugs, security vulnerabilities, edge cases, and code smells.\n"
|
||||
"Keep it short and clear, don't give me long solutions."
|
||||
"Format your answer cleanly in Markdown with actionable feedback.\n\n"
|
||||
f"```diff\n{diff_text}\n```"
|
||||
)
|
||||
completion = client.chat.completions.create(
|
||||
model=request_body.model,
|
||||
messages=[{"role": "user", "content": prompt}]
|
||||
)
|
||||
|
||||
review_content = completion.choices[0].message.content
|
||||
|
||||
review_body = f"# llm review\n\n{review_content}"
|
||||
|
||||
requests.post(
|
||||
f"{gitea_host}/api/v1/repos/{request_body.repo}/pulls/{request_body.pr_number}/reviews",
|
||||
headers=headers,
|
||||
json={"body": review_body, "event": "COMMENT"}
|
||||
)
|
||||
|
||||
return {"status": "done"}
|
||||
Reference in New Issue
Block a user