eliot-christon's picture
Rename app.py to appp.py
edcd9bb verified
import sqlite3
import huggingface_hub
import gradio as gr
import pandas as pd
import shutil
import os
import datetime
from apscheduler.schedulers.background import BackgroundScheduler
DB_FILE = "./results.db"
FROM_DB_FILE = "./data/results.db"
TOKEN = os.environ.get('HUB_TOKEN')
EMAIL = os.environ.get('HUB_EMAIL')
huggingface_hub.login(token=TOKEN)
repo = huggingface_hub.Repository(
local_dir="data",
repo_type="dataset",
clone_from="eliot-christon/french_chatbot_arena_results",
git_email=EMAIL,
)
repo.git_pull()
# Set db to latest
shutil.copyfile(FROM_DB_FILE, DB_FILE)
# Create table if it doesn't already exist
db = sqlite3.connect(DB_FILE)
try:
db.execute("SELECT * FROM results").fetchall()
db.close()
except sqlite3.OperationalError:
db.execute("""
CREATE TABLE results (
date DATE,
choice TEXT,
model_1 TEXT,
model_2 TEXT
)
""")
db.commit()
db.close()
def get_latest_reviews(db: sqlite3.Connection):
results = db.execute("SELECT * FROM results limit 10").fetchall()
total_reviews = db.execute("Select COUNT(choice) from results").fetchone()[0]
results = pd.DataFrame(results, columns=["date", "choice", "model_1", "model_2"])
return results, total_reviews
def add_review(choice: str, model_1: str, model_2: str):
db = sqlite3.connect(DB_FILE)
cursor = db.cursor()
cursor.execute("INSERT INTO results(date, choice, model_1, model_2) VALUES(?,?,?,?)", [datetime.datetime.now(), choice, model_1, model_2])
db.commit()
results, total_reviews = get_latest_reviews(db)
db.close()
return results, total_reviews
def load_data():
db = sqlite3.connect(DB_FILE)
results, total_reviews = get_latest_reviews(db)
db.close()
return results, total_reviews
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
choice = gr.Textbox(label="Choice", placeholder="Enter your choice")
model_1 = gr.Textbox(label="First Model", placeholder="Enter the name of the first model")
model_2 = gr.Textbox(label="Second Model", placeholder="Enter the name of the second model")
submit = gr.Button(value="Submit Result", variant="primary")
with gr.Column():
data = gr.Dataframe()
count = gr.Number(label="Total number of results")
submit.click(add_review, [choice, model_1, model_2], [data, count])
demo.load(load_data, None, [data, count])
def backup_db():
shutil.copyfile(DB_FILE, FROM_DB_FILE)
db = sqlite3.connect(DB_FILE)
results = db.execute("SELECT * FROM results").fetchall()
pd.DataFrame(results, columns=["date", "choice", "model_1", "model_2"]).to_csv("./data/results.csv", index=False)
print("updating db")
repo.push_to_hub(blocking=False, commit_message=f"Updating data at {datetime.datetime.now()}")
scheduler = BackgroundScheduler()
scheduler.add_job(func=backup_db, trigger="interval", seconds=20)
scheduler.start()
demo.launch()