Spaces:
Runtime error
Runtime error
import pandas as pd | |
import gradio as gr | |
from fastapi import FastAPI, Request | |
import uvicorn | |
from pathlib import Path | |
import os | |
HF_TOKEN = os.environ.get("HF_TOKEN") | |
FLAG_DIR = Path("./flagged_data") | |
DATASET_NAME = "gradio_clicks_dataset" | |
# https://huggingface.co./datasets/radames/gradio_clicks_dataset | |
# setup logger | |
# remote logging to HuggingFace | |
remote = True | |
logger = gr.CSVLogger() | |
if remote: | |
logger = gr.HuggingFaceDatasetSaver( | |
HF_TOKEN, dataset_name=DATASET_NAME, organization=None, private=False) | |
logger.setup([gr.Text(label="URL"), gr.Text(label="Host")], FLAG_DIR) | |
# dummy data | |
websites = [ | |
["https://www.google.com/"], | |
["https://www.youtube.com/"], | |
["https://www.facebook.com/"], | |
["https://www.wikipedia.org/"], | |
["https://www.amazon.com/"], | |
["https://www.yahoo.com/"], | |
["https://www.twitter.com/"], | |
["https://www.instagram.com/"], | |
["https://www.reddit.com/"], | |
["https://www.linkedin.com/"], | |
["https://www.netflix.com/"], | |
["https://www.microsoft.com/"], | |
["https://www.apple.com/"], | |
["https://www.zoom.us/"], | |
["https://www.gmail.com/"], | |
["https://www.dropbox.com/"], | |
["https://www.github.com/"], | |
["https://www.stackoverflow.com/"], | |
["https://www.medium.com/"], | |
["https://www.quora.com/"], | |
] | |
# add simple get request for tracking | |
websites = [ | |
[f"<a href={x[0]} target='_blank' onclick='fetch(\"/track?url={x[0]}\")'>{x[0]}</a>"] for x in websites] | |
df = pd.DataFrame(websites, columns=['img_code']) | |
df_html = df.to_html(escape=False, render_links=False, | |
index=False, header=False) | |
# create a FastAPI app | |
app = FastAPI() | |
# gradio app | |
def refresh(): | |
df = pd.read_csv(FLAG_DIR / DATASET_NAME / "data.csv") | |
url_counts = df.groupby('URL').count()['Host'] | |
normalized_counts = url_counts / url_counts.sum() | |
return normalized_counts.to_dict() | |
with gr.Blocks() as block: | |
gr.Markdown(""" | |
## Gradio Tracking Clicks + FastAPI + HuggingFace Datasets | |
This is a demo of how to track clicks on a Gradio app using FastAPI and HuggingFace Datasets. | |
Each click sends a request to the FastAPI server, which logs the click to a HuggingFace dataset. | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
refresh_bt = gr.Button("Refresh") | |
gr.HTML(df_html) | |
with gr.Column(): | |
labels = gr.Label() | |
refresh_bt.click(fn=refresh, inputs=[], outputs=[labels]) | |
block.load(fn=refresh, inputs=[], outputs=[labels]) | |
# custom get request handler to flag clicks | |
async def track(url: str, request: Request): | |
# host disable for privacy reasons | |
# host = request.headers.get("host") | |
logger.flag([url, "ip"]) | |
return {"message": "ok"} | |
# mount Gradio app to FastAPI app | |
app = gr.mount_gradio_app(app, block, path="/") | |
# serve the app | |
if __name__ == "__main__": | |
uvicorn.run(app, host="0.0.0.0", port=7860) | |