File size: 3,366 Bytes
3c48254
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import pandas as pd
import logging
import re


logging.basicConfig(level=logging.INFO)


def load_repo_df(data_path="data/repo_representations.jsonl"):
    data = pd.read_json(data_path, lines=True, orient="records")
    return data.assign(
        text=data["text"]
        .str.replace(r"<img.*\/>", "", regex=True)
        .str.replace("│", "\n")
        .str.replace("⋮", "\n")
    )


def display_representations(repo, representation1, representation2):
    repo_data = repos_df[repos_df["repo_name"] == repo]
    logging.info(f"repo_data: {repo_data}")
    text1 = (
        repo_data[repo_data["representation"] == representation1]["text"].iloc[0]
        if not repo_data[repo_data["representation"] == representation1].empty
        else "No data available"
    )
    text2 = (
        repo_data[repo_data["representation"] == representation2]["text"].iloc[0]
        if not repo_data[repo_data["representation"] == representation2].empty
        else "No data available"
    )

    return text1, text2


if __name__ == "__main__":
    repos_df = load_repo_df()
    repos = list(repos_df["repo_name"].unique())
    representation_types = list(repos_df["representation"].unique())
    logging.info(f"found {len(repos)} repositories")
    logging.info(f"representation types: {representation_types}")

    with gr.Blocks() as demo:
        gr.Markdown("# Repository Representations Viewer")
        gr.Markdown("Select a repository and two representation types to compare them.")

        with gr.Row():
            repo = gr.Dropdown(choices=repos, label="Repository", value=repos[0])
            representation1 = gr.Dropdown(
                choices=representation_types, label="Representation 1", value="readme"
            )
            representation2 = gr.Dropdown(
                choices=representation_types,
                label="Representation 2",
                value="generated_readme",
            )

        with gr.Row():
            with gr.Box(elem_id="box1"):
                text1 = gr.Markdown()
            with gr.Box(elem_id="box2"):
                text2 = gr.Markdown()

        # Add custom CSS
        gr.Markdown(
            """
            <style>
            #box1, #box2 {
                border: 2px solid #ddd;
                border-radius: 10px;
                padding: 10px;
                margin: 10px;
                background-color: #f9f9f9;
            }
            #box1 {
                border-color: #007bff;
            }
            #box2 {
                border-color: #28a745;
            }
            </style>
            """
        )

        def update_representations(*args):
            text1_content, text2_content = display_representations(*args)
            return (
                f"### Representation 1\n\n{text1_content}",
                f"### Representation 2\n\n{text2_content}",
            )

        # Initial call to populate textboxes with default values
        text1.value, text2.value = update_representations(
            repos[0], "readme", "generated_readme"
        )

        for component in [repo, representation1, representation2]:
            component.change(
                fn=update_representations,
                inputs=[repo, representation1, representation2],
                outputs=[text1, text2],
            )

    demo.launch()