Spaces:
Sleeping
Sleeping
File size: 5,328 Bytes
18ec458 7d5704e 18ec458 9b744c5 b42fea9 c1fc690 9b744c5 b42fea9 9b744c5 c1fc690 9b744c5 b42fea9 9b744c5 b42fea9 e6861b3 18ec458 e6861b3 18ec458 e6861b3 18ec458 b42fea9 18ec458 9b744c5 2c3812c 9b744c5 18ec458 b42fea9 9b744c5 18ec458 9b744c5 c1fc690 b42fea9 9b744c5 e6861b3 9b744c5 ac33554 9b744c5 |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import datetime
import os
import shutil
import gradio as gr
import requests
from utils import build_issue_dict
from utils import build_embeddings
from utils.defaults import OWNER, REPO
from utils.fetch import get_issues
from utils.find_similar_issues import get_similar_issues
from utils.update_stored_issues import update_issues
def get_query_issue_information(issue_no, token):
headers = {
"Accept": "application/vnd.github+json",
"Authorization": f"{token}",
"X-GitHub-Api-Version": "2022-11-28",
"User-Agent": "amyeroberts",
}
request = requests.get(
f"https://api.github.com/repos/{OWNER}/{REPO}/issues/{issue_no}",
headers=headers,
)
if request.status_code != 200:
raise ValueError(f"Request failed with status code {request.status_code} and message {request.text}")
return request.json()
def run_find_similar_issues(token, n_issues, issue_no, query, issue_types):
if issue_no == "":
issue_no = None
if query == "":
query = None
if len(issue_types) == 0:
raise ValueError("At least one issue type must be selected")
similar_issues = []
similar_pulls = []
if "Issue" in issue_types:
similar_issues = get_similar_issues(issue_no=issue_no, query=query, token=token, top_k=n_issues, issue_type="issue")
if "Pull Request" in issue_types:
similar_pulls = get_similar_issues(issue_no=issue_no, query=query, token=token, top_k=n_issues, issue_type="pull")
issues_html = [f"<a href='{issue['html_url']}' target='_blank'>#{issue['number']} - {issue['title']}</a>" for issue in similar_issues]
issues_html = "<br>".join(issues_html)
pulls_html = [f"<a href='{issue['html_url']}' target='_blank'>#{issue['number']} - {issue['title']}</a>" for issue in similar_pulls]
pulls_html = "<br>".join(pulls_html)
final = ""
if len(issues_html) > 0:
final += f"<h2>Issues</h2>{issues_html}"
if len(pulls_html) > 0:
final += f"<h2>Pull Requests</h2>{pulls_html}"
# return issues_html
return final
def update(token):
# Archive the stored issues
if os.path.exists("issues.json"):
date_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
shutil.copy("issues.json", f"{date_time}_issues.json")
# Retrieve new issues
get_issues(overwrite=False, update=True, output_filename="issues.json", token=token)
# Update any issues that have been updated since the last update
update_issues(token=token)
# Update the dictionary of issues
build_issue_dict.build_json_file("issues.json", "issues_dict.json")
# Update the embeddings
build_embeddings.embed_issues(
input_filename="issues_dict.json",
issue_type="issue",
model_id="all-mpnet-base-v2",
update=True
)
build_embeddings.embed_issues(
input_filename="issues_dict.json",
issue_type="pull",
model_id="all-mpnet-base-v2",
update=True
)
with gr.Blocks(title="Github Bot") as demo:
with gr.Tab("Find similar issues"):
with gr.Row():
gr.Markdown("## Query settings")
with gr.Row():
gr.Markdown("Configure the settings for the query. You can either search for similar issues to a given issue or search for issues based on a query.")
with gr.Row():
with gr.Column():
gr.Markdown("Find similar issues to a given issue or query")
issue_no = gr.Textbox(label="Github Issue", placeholder="Github issue you want to find similar issues to")
query = gr.Textbox(label="Query", placeholder="Search for issues")
with gr.Column():
token = gr.Textbox(label="Github Token", placeholder="Your github token for authentication. This is not stored anywhere.")
n_issues = gr.Slider(1, 50, value=5, step=1, label="Number of similar issues", info="Choose between 1 and 50")
issue_types = gr.CheckboxGroup(["Issue", "Pull Request"], label="Issue types")
with gr.Row():
submit_button = gr.Button(value="Submit")
with gr.Row():
with gr.Row():
issues_html = gr.HTML(label="Issue text", elem_id="issue_html")
submit_button.click(run_find_similar_issues, outputs=[issues_html], inputs=[token, n_issues, issue_no, query, issue_types])
with gr.Row():
with gr.Column():
gr.Markdown("Press `Update Button` to update the stored issues. This will take a few minutes.")
update_button = gr.Button(value="Update issues")
update_button.click(update, outputs=[], inputs=[token], trigger_mode="once")
with gr.Column():
pass
with gr.Tab("Find maintainers to ping"):
gr.Markdown("Find maintainers to ping for a given issue or pull request - DO NOT CURRENTLY HAVE FUNCTIONALITY")
with gr.Row():
issue = gr.Textbox(label="Github Issue / PR", placeholder="Issue or PR you want to find maintainers to ping for")
with gr.Row():
token = gr.Textbox(label="Github Token", placeholder="Your github token for authentication. This is not stored anywhere.")
if __name__ == "__main__":
demo.launch()
|