File size: 2,257 Bytes
bfb63a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import csv
import panel as pn
from datetime import datetime
import pandas as pd
# import huggingface_hub
from huggingface_hub import Repository

DATASET_REPO_URL = "https://huggingface.co/datasets/julien-c/persistent-space-dataset"
DATA_FILENAME = "data.csv"
DATA_FILE = os.path.join("data", DATA_FILENAME)

repo_dir = "data"
if not os.path.exists(repo_dir):
    os.makedirs(repo_dir)

repo = pn.widgets.TextInput(name="Repository URL", value=DATASET_REPO_URL)
name_input = pn.widgets.TextInput(name="Your name")
message_input = pn.widgets.TextAreaInput(name="Your message")

def generate_html() -> str:
    if not os.path.exists(DATA_FILE):
        return "<div class='chatbot'>no messages yet</div>"
    else:
        df = pd.read_csv(DATA_FILE)
        df = df.iloc[::-1]  # Reverse the order of rows
        html = "<div class='chatbot'>"
        for _, row in df.iterrows():
            html += "<div>"
            html += f"<span>{row['name']}</span>"
            html += f"<span class='message'>{row['message']}</span>"
            html += "</div>"
        html += "</div>"
        return html

def store_message(event):
    name = name_input.value
    message = message_input.value
    if name and message:
        with open(DATA_FILE, "a", newline="") as csvfile:
            writer = csv.writer(csvfile)
            writer.writerow([name, message, str(datetime.now())])
        pn.state.session_context.request_relayout(repo)
        pn.state.session_context.request_relayout(messages)

repo.on_change(store_message, "value")
name_input.on_change(store_message, "value")
message_input.on_change(store_message, "value")

repo_text = pn.pane.Markdown(f"The dataset repo is [{DATASET_REPO_URL}]({DATASET_REPO_URL}) (open in new tab)", sizing_mode="stretch_width")
messages = pn.pane.HTML(sizing_mode="stretch_width")
messages.object = generate_html()

template = pn.template.FastListTemplate(
    site="Persistent Space Dataset",
    title="Reading/Writing to a HuggingFace Dataset Repo from Spaces",
    main=[
        pn.Column(repo_text, name_input, message_input, messages),
    ],
    header_background="#333",
    header_color="white",
    main_max_width="800px",
    main_padding=20,
    main_min_height="600px"
)
template.servable()