| 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() |