| import os |
| import csv |
| import gradio as gr |
| from gradio import inputs, outputs |
| import huggingface_hub |
| from huggingface_hub import Repository |
| from datetime import datetime |
| import pkg_resources |
|
|
| STATIC_TEMPLATE_LIB = pkg_resources.resource_filename("gradio", "templates/") |
| DATASET_REPO_URL = "https://huggingface.co/datasets/tomemojo/test" |
| DATA_FILENAME = "data.csv" |
| DATA_FILE = os.path.join("data", DATA_FILENAME) |
|
|
| HF_TOKEN = os.environ.get("HF_TOKEN") |
| print("is none?", HF_TOKEN is None) |
|
|
| 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) |
|
|
|
|
|
|
| repo = Repository( |
| local_dir="data", 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() |
| 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}) (open in new tab)", |
| ) |
|
|
| iface.launch() |