File size: 3,916 Bytes
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
import os

import gradio as gr

import gradio as gr
from find_similar_issues import get_similar_issues
import requests
from html2image import Html2Image
import io

hti = Html2Image(size=(1920, 1080 * 3))

from defaults import OWNER, REPO, TOKEN


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 find_similar_issues(issue, token):
    similar_issues = get_similar_issues(issue, token=token)
    similar_issues_summary = [f"#{issue['number']} - {issue['title']}" for issue in similar_issues]
    return similar_issues_summary


def render_issue_as_image(issue, filename="image.png"):
    url = issue["html_url"]
    print(url)
    hti.screenshot(url=url, save_as=filename)
    return filename


def run_find_similar_issues(issue, token, n_issues):
    issue_information = get_query_issue_information(issue, token=token)
    # issue_information_summary = f"#{issue_information['number']} - {issue_information['title']}\n\n{issue_information['body']}"
    similar_issues = get_similar_issues(issue, token=token, top_k=n_issues)
    # similar_issues_summary = [f"#{issue['number']} - {issue['title']}" for issue in similar_issues]

    issue_image = render_issue_as_image(issue_information, filename="query_issue.png")

    image_names = []
    for i, issue in enumerate(similar_issues):
        image_names.append(render_issue_as_image(issue, filename=f"image{i}.png"))

    # return issue_information_summary, image_names
    page_html = requests.get(issue_information["html_url"]).text

    return issue_image, page_html, image_names


with gr.Blocks(title="Github Bot") as demo:
    with gr.Tab("Find similar issues"):
        with gr.Row():
            with gr.Column():
                with gr.Row():
                    issue = gr.Textbox(label="Github Issue", placeholder="Github issue you want to find similar issues to")
                    token = gr.Textbox(label="Github Token", placeholder="Your github token for authentication. This is not stored anywhere.")
                with gr.Row():
                    n_issues = gr.Slider(1, 50, value=5, label="Number of similar issues", info="Choose between 1 and 50")

        with gr.Row():
            submit_button = gr.Button(value="Submit")

        with gr.Row():
            with gr.Column():
                issue_image = gr.Image(type="filepath", label="Your issue")
            with gr.Column():
                similar_issues_screenshots = gr.Gallery(label="Similar Issues")
                issue_text = gr.HTML(label="Issue text", elem_id="issue_text")
                submit_button.click(run_find_similar_issues, outputs=[issue_image, issue_text, similar_issues_screenshots], inputs=[issue, token, n_issues])

    with gr.Tab("Search issues"):
        with gr.Row():
            query = gr.Textbox(label="Query", placeholder="Search for issues")
        with gr.Row():
            token = gr.Textbox(label="Github Token", placeholder="Your github token for authentication. This is not stored anywhere.")
        with gr.Row():
            pass

    with gr.Tab("Find maintainers to ping"):
        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()