Spaces:
Paused
Paused
File size: 2,489 Bytes
ccc5ec3 ec76bbb ccc5ec3 f867f74 ccc5ec3 8e229a3 ccc5ec3 f867f74 ccc5ec3 ec76bbb ccc5ec3 f867f74 ccc5ec3 f867f74 ccc5ec3 c543299 ccc5ec3 ec76bbb ccc5ec3 ec76bbb f867f74 ec76bbb c543299 f867f74 ccc5ec3 ec76bbb f867f74 ccc5ec3 c543299 f867f74 ccc5ec3 f867f74 |
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 |
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:
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>{row['name']}</span>"
html += f"<span class='message'>{row['message']}</span>"
html += "</div>"
html += "</div>"
return html
def store_message(name: str, message: str):
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()
iface = gr.Interface(
store_message,
[
components.Textbox(placeholder="Your name"),
components.Textbox(placeholder="Your message", lines=2),
],
"html",
css="""
.name {background-color:cornflowerblue;color:white; padding:4px;margin:4px;border-radius:4px; }
""",
title="Reading/writing to a HuggingFace dataset repo from Spaces",
description=f"This is a demo of how to do simple *shared data persistence* in a Gradio Space, backed by a dataset repo.",
article=f"The dataset repo is [{DATASET_REPO_URL}]({DATASET_REPO_URL})",
allow_flagging="never"
)
iface.launch() |