|
import os |
|
import csv |
|
import gradio as gr |
|
from gradio import inputs |
|
|
|
|
|
import huggingface_hub |
|
print("hfh", huggingface_hub.__version__) |
|
from huggingface_hub import hf_hub_download, upload_file |
|
from datetime import datetime |
|
|
|
DATASET_REPO_ID = "datasets/cogsphere/dataset1" |
|
DATASET_REPO_URL = f"https://huggingface.co/{DATASET_REPO_ID}" |
|
DATA_DIRNAME = "dataset1" |
|
DATA_FILENAME = "data.csv" |
|
DATA_FILE = os.path.join(DATA_DIRNAME, DATA_FILENAME) |
|
|
|
HF_TOKEN = os.environ.get("HF_KEY") |
|
|
|
print("hfh", huggingface_hub.__version__) |
|
|
|
|
|
SCRIPT = """ |
|
<script> |
|
if (!window.hasBeenRun) { |
|
window.hasBeenRun = true; |
|
console.log("should only happen once"); |
|
document.querySelector("button.submit").click(); |
|
} |
|
</script> |
|
""" |
|
with open(os.path.join(gr.networking.STATIC_TEMPLATE_LIB, "frontend", "index.html"), "a") as f: |
|
f.write(SCRIPT) |
|
|
|
|
|
try: |
|
hf_hub_download( |
|
repo_id=DATASET_REPO_ID, |
|
filename=DATA_FILENAME, |
|
cache_dir=DATA_DIRNAME, |
|
force_filename=DATA_FILENAME |
|
) |
|
except: |
|
|
|
print("file not found, probably") |
|
|
|
|
|
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 = upload_file( |
|
DATA_FILE, |
|
path_in_repo=DATA_FILENAME, |
|
repo_id=DATASET_REPO_ID, |
|
token=HF_TOKEN, |
|
) |
|
|
|
print(commit_url) |
|
|
|
return generate_html() |
|
|
|
|
|
iface = gr.Interface( |
|
store_message, |
|
[ |
|
inputs.Textbox(placeholder="Your name"), |
|
inputs.Textbox(placeholder="Your message", lines=2), |
|
], |
|
"html", |
|
css=""" |
|
.message {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})", |
|
) |
|
|
|
iface.launch() |