File size: 2,451 Bytes
ccc5ec3
 
 
 
 
ec76bbb
ccc5ec3
f867f74
ccc5ec3
 
 
8e229a3
 
ccc5ec3
 
 
f867f74
 
 
 
 
 
 
 
 
 
 
 
ccc5ec3
 
 
 
 
 
ec76bbb
ccc5ec3
f867f74
ccc5ec3
f867f74
 
 
ccc5ec3
 
c543299
ccc5ec3
1556bff
ccc5ec3
 
ec76bbb
 
 
ccc5ec3
ec76bbb
 
 
 
 
 
d76757a
ec76bbb
 
 
 
c543299
f867f74
 
1556bff
ccc5ec3
 
 
ec76bbb
 
 
f867f74
ccc5ec3
 
c543299
1556bff
 
 
 
 
 
 
ccc5ec3
1556bff
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
import os
import csv
import gradio as gr
from gradio import components
from huggingface_hub import Repository, hf_hub_download
from datetime import datetime


DATASET_REPO_URL = "https://huggingface.co/datasets/sjw/data.csv"
DATASET_REPO_ID = "sjw/data.csv"
DATA_FILENAME = "data.csv"
DIRNAME = "data"
DATA_FILE = os.path.join(DIRNAME, DATA_FILENAME)
HF_TOKEN = os.environ.get("HF_TOKEN")


# overriding/appending to the gradio template
SCRIPT = """
<script>
if (!window.hasBeenRun) {
    window.hasBeenRun = true;
    console.log("should only happen once");
    document.querySelector("button.submit").click();
}
</script>
"""


try:
    hf_hub_download(
        repo_id=DATASET_REPO_ID,
        filename=DATA_FILENAME,
    )
except:
    print("file not found")


repo = Repository(
    local_dir=DIRNAME, 
    clone_from=DATASET_REPO_URL, 
    use_auth_token=HF_TOKEN
)


def generate_html() -> str:
    """Generate HTML content for the chat."""
    with open(DATA_FILE) as csvfile:
        reader = csv.DictReader(csvfile)
        rows = []
        for row in reader:
            rows.append(row)
        rows.reverse()
        if len(rows) == 0:
            return "no messages yet"
        else:
            html = "<div class='chatbot'>"
            for row in rows:
                html += "<div>"
                html += f"<span><b>{row['name']}</b></span> "  # Make the name bold and add a space after it
                html += f"<span class='message'>{row['message']}</span>"
                html += "</div>"
            html += "</div>"
            return html


def store_message(name: str, message: str):
    """Store the message and regenerate HTML content."""
    if name and message:
        with open(DATA_FILE, "a") as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"])
            writer.writerow(
                {"name": name, "message": message, "time": str(datetime.now())}
            )
        commit_url = repo.push_to_hub()
    return generate_html()


with gr.Blocks() as feedback_page:
    gr.Markdown(f"Live Dataset: [{DATASET_REPO_URL}]({DATASET_REPO_URL})")
    name_input = components.Textbox(label="Your Username")
    message_input = components.Textbox(label="Your Feedback", lines=2)
    output_html = gr.HTML()
    submit_button = gr.Button("Submit")
    submit_button.click(store_message, inputs=[name_input, message_input], outputs=output_html)

feedback_page.launch()