Skip to content

Commit

Permalink
Merge pull request #37 from dannyl1u/chore/reformat-code-with-code-fo…
Browse files Browse the repository at this point in the history
…rmatters

Chore/reformat code with code formatters
  • Loading branch information
dannyl1u authored Sep 24, 2024
2 parents c59d521 + 6b330bc commit 8f1e619
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 95 deletions.
8 changes: 5 additions & 3 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import logging

from flask import Flask

from src.webhook_handler import webhook_blueprint
import logging

app = Flask(__name__)
app.register_blueprint(webhook_blueprint)
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)

if __name__ == '__main__':
app.run(port=4000)
if __name__ == "__main__":
app.run(port=4000)
5 changes: 3 additions & 2 deletions config.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import os

from dotenv import load_dotenv

load_dotenv()

APP_ID = os.getenv("APP_ID")
PRIVATE_KEY = open('rsa.pem', 'r').read()
PRIVATE_KEY = open("rsa.pem", "r").read()
WEBHOOK_SECRET = os.getenv("WEBHOOK_SECRET")
SIMILARITY_THRESHOLD = 0.5
SIMILARITY_THRESHOLD = 0.5
30 changes: 23 additions & 7 deletions src/__init__.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
from .github_api import get_access_token, close_issue, leave_comment, fetch_existing_issues
from .github_api import (
get_access_token,
close_issue,
leave_comment,
fetch_existing_issues,
)
from .issue_handler import handle_new_issue
from .vector_db import add_issue_to_chroma, query_similar_issue, remove_issues_from_chroma, add_issues_to_chroma
from .vector_db import (
add_issue_to_chroma,
query_similar_issue,
remove_issues_from_chroma,
add_issues_to_chroma,
)
from .webhook_handler import webhook_blueprint

__all__ = [
'get_access_token', 'close_issue', 'leave_comment', 'fetch_existing_issues',
'handle_new_issue',
'add_issue_to_chroma', 'query_similar_issue', 'remove_issues_from_chroma', 'add_issues_to_chroma',
'webhook_blueprint'
]
"get_access_token",
"close_issue",
"leave_comment",
"fetch_existing_issues",
"handle_new_issue",
"add_issue_to_chroma",
"query_similar_issue",
"remove_issues_from_chroma",
"add_issues_to_chroma",
"webhook_blueprint",
]
30 changes: 13 additions & 17 deletions src/github_api.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,26 @@
import jwt
import time

import jwt
import requests

from config import APP_ID, PRIVATE_KEY


def generate_jwt():
current_time = int(time.time())
payload = {
"iat": current_time,
"exp": current_time + 600,
"iss": APP_ID
}
payload = {"iat": current_time, "exp": current_time + 600, "iss": APP_ID}
return jwt.encode(payload, PRIVATE_KEY, algorithm="RS256")


def get_access_token(installation_id):
jwt_token = generate_jwt()
headers = {
"Authorization": f"Bearer {jwt_token}",
"Accept": "application/vnd.github.v3+json"
"Accept": "application/vnd.github.v3+json",
}
response = requests.post(
f"https://api.github.com/app/installations/{installation_id}/access_tokens",
headers=headers
headers=headers,
)
response.raise_for_status()
return response.json()["token"]
Expand All @@ -32,13 +30,13 @@ def close_issue(installation_id, repo_full_name, issue_number):
access_token = get_access_token(installation_id)
headers = {
"Authorization": f"token {access_token}",
"Accept": "application/vnd.github.v3+json"
"Accept": "application/vnd.github.v3+json",
}
payload = {"state": "closed"}
response = requests.patch(
f"https://api.github.com/repos/{repo_full_name}/issues/{issue_number}",
json=payload,
headers=headers
headers=headers,
)
response.raise_for_status()

Expand All @@ -47,15 +45,13 @@ def leave_comment(installation_id, repo_full_name, issue_number, comment_text):
access_token = get_access_token(installation_id)
headers = {
"Authorization": f"token {access_token}",
"Accept": "application/vnd.github.v3+json"
}
payload = {
"body": comment_text
"Accept": "application/vnd.github.v3+json",
}
payload = {"body": comment_text}
response = requests.post(
f"https://api.github.com/repos/{repo_full_name}/issues/{issue_number}/comments",
json=payload,
headers=headers
headers=headers,
)
response.raise_for_status()

Expand All @@ -64,15 +60,15 @@ def fetch_existing_issues(installation_id, repo_full_name):
access_token = get_access_token(installation_id)
headers = {
"Authorization": f"token {access_token}",
"Accept": "application/vnd.github.v3+json"
"Accept": "application/vnd.github.v3+json",
}
issues = []
page = 1
while True:
response = requests.get(
f"https://api.github.com/repos/{repo_full_name}/issues",
headers=headers,
params={"state": "all", "per_page": 100, "page": page}
params={"state": "all", "per_page": 100, "page": page},
)
response.raise_for_status()
page_issues = response.json()
Expand Down
14 changes: 8 additions & 6 deletions src/issue_handler.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
import logging

from config import SIMILARITY_THRESHOLD
from src.github_api import close_issue, leave_comment
from src.vector_db import add_issue_to_chroma, query_similar_issue
from config import SIMILARITY_THRESHOLD

import logging

logger = logging.getLogger(__name__)


def handle_new_issue(installation_id, repo_full_name, issue_number, issue_title, issue_body):
logger.info(f'New issue opened: {issue_number} in {repo_full_name}')
def handle_new_issue(
installation_id, repo_full_name, issue_number, issue_title, issue_body
):
logger.info(f"New issue opened: {issue_number} in {repo_full_name}")
full_issue = f"{issue_title} {issue_body}"

similar_issue = query_similar_issue(full_issue)

if similar_issue and similar_issue['distance'] < 1 - SIMILARITY_THRESHOLD:
if similar_issue and similar_issue["distance"] < 1 - SIMILARITY_THRESHOLD:
comment_text = f"Closed due to high similarity with issue #{similar_issue['issue_number']} with title '{similar_issue['title']}'"
leave_comment(installation_id, repo_full_name, issue_number, comment_text)
close_issue(installation_id, repo_full_name, issue_number)
Expand Down
43 changes: 23 additions & 20 deletions src/vector_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,44 +8,47 @@

def add_issue_to_chroma(full_issue, issue_number, issue_title, repo_full_name):
embedding = model.encode(full_issue).tolist()

collection.add(
documents=[full_issue],
metadatas=[{"issue_number": str(issue_number), "title": issue_title, "repo_full_name": repo_full_name}],
metadatas=[
{
"issue_number": str(issue_number),
"title": issue_title,
"repo_full_name": repo_full_name,
}
],
embeddings=[embedding],
ids=[f"{repo_full_name}_{issue_number}"]
ids=[f"{repo_full_name}_{issue_number}"],
)


def query_similar_issue(full_issue):
embedding = model.encode(full_issue).tolist()
results = collection.query(
query_embeddings=[embedding],
n_results=1
)

if results['distances'][0]:
results = collection.query(query_embeddings=[embedding], n_results=1)

if results["distances"][0]:
return {
"issue_number": results['metadatas'][0][0]['issue_number'],
"title": results['metadatas'][0][0]['title'],
"distance": results['distances'][0][0]
"issue_number": results["metadatas"][0][0]["issue_number"],
"title": results["metadatas"][0][0]["title"],
"distance": results["distances"][0][0],
}
return None


def remove_issues_from_chroma(repo_full_name):
results = collection.get(where={"repo_full_name": repo_full_name})
if results and results['ids']:
collection.delete(ids=results['ids'])

if results and results["ids"]:
collection.delete(ids=results["ids"])


def add_issues_to_chroma(issues):
for issue in issues:
issue_number = issue['number']
issue_title = issue['title']
issue_body = issue.get('body', '')
issue_number = issue["number"]
issue_title = issue["title"]
issue_body = issue.get("body", "")
full_issue = f"{issue_title} {issue_body}"
repo_full_name = issue['repository']['full_name']
repo_full_name = issue["repository"]["full_name"]

add_issue_to_chroma(full_issue, issue_number, issue_title, repo_full_name)
Loading

0 comments on commit 8f1e619

Please sign in to comment.