sasha's picture
sasha HF staff
Update app.py
7302cb8 verified
raw
history blame
4.43 kB
import os
import json
from datetime import datetime, timezone
from dataclasses import dataclass
from datasets import load_dataset, Dataset
import pandas as pd
import gradio as gr
from huggingface_hub import HfApi, snapshot_download, ModelFilter, list_models
from huggingface_hub.hf_api import ModelInfo
from enum import Enum
OWNER = "EnergyStarAI"
COMPUTE_SPACE = f"{OWNER}/launch-computation-example"
TOKEN = os.environ.get("DEBUG")
API = HfApi(token=TOKEN)
requests= load_dataset("EnergyStarAI/requests_debug", split="test", token=TOKEN)
tasks = ['ASR', 'Object Detection', 'Text Classification', 'Image Captioning', 'Question Answering', 'Text Generation', 'Image Classification',
'Sentence Similarity', 'Image Generation', 'Summarization']
@dataclass
class ModelDetails:
name: str
display_name: str = ""
symbol: str = "" # emoji
def start_compute_space():
API.restart_space(COMPUTE_SPACE)
return f"Okay! {COMPUTE_SPACE} should be running now!"
def get_model_size(model_info: ModelInfo):
"""Gets the model size from the configuration, or the model name if the configuration does not contain the information."""
try:
model_size = round(model_info.safetensors["total"] / 1e9, 3)
except (AttributeError, TypeError):
return 0 # Unknown model sizes are indicated as 0, see NUMERIC_INTERVALS in app.py
return model_size
def add_new_eval(
repo_id: str,
task: str,
):
model_owner = repo_id.split("/")[0]
model_name = repo_id.split("/")[1]
current_time = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
# Is the model info correctly filled?
try:
model_info = API.model_info(repo_id=repo_id)
except Exception:
print("Could not find information for model %s" % (model))
return
# return styled_error("Could not get your model information. Please fill it up properly.")
model_size = get_model_size(model_info=model_info)
print("Adding request")
requests_dset = requests.to_pandas()
request_dict = {
"model": repo_id,
"precision": "N/A",
"status": "PENDING",
"submitted_time": pd.to_datetime(current_time),
"task": task,
"likes": model_info.likes,
"params": model_size}
#"license": license,
#"private": False,
#}
print("Writing out request file to dataset")
df_request_dict = pd.DataFrame([request_dict])
print(df_request_dict)
df_final = pd.concat([requests_dset, df_request_dict], ignore_index=True)
updated_dset =Dataset.from_pandas(df_final)
updated_dset.push_to_hub("EnergyStarAI/requests_debug", split="test", token=TOKEN)
print("Starting compute space at %s " % COMPUTE_SPACE)
return start_compute_space()
def print_existing_models():
requests = load_dataset("EnergyStarAI/requests_debug", split="test")
requests_dset = requests.to_pandas()
model_list= requests_dset[requests_dset['status'] == 'COMPLETED']
return model_list
with gr.Blocks() as demo:
gr.Markdown("# Energy Star Submission Portal - v.0 (2024) 🌎 πŸ’» 🌟")
gr.Markdown("## βœ‰οΈβœ¨ Submit your model here!", elem_classes="markdown-text")
gr.Markdown("## Fill out below then click **Run Analysis** to create the request file and launch the job.")
gr.Markdown("## The [Project Leaderboard](https://huggingface.co/spaces/EnergyStarAI/2024_Leaderboard) will be updated quarterly, as new models get submitted.")
with gr.Row():
with gr.Column():
task = gr.Dropdown(
choices=tasks,
label="Choose a benchmark task",
value = 'Text Generation',
multiselect=False,
interactive=True,
)
with gr.Column():
model_name_textbox = gr.Textbox(label="Model name (user_name/model_name)")
with gr.Row():
with gr.Column():
submit_button = gr.Button("Run Analysis")
submission_result = gr.Markdown()
submit_button.click(
fn=add_new_eval,
inputs=[
model_name_textbox,
task,
],
outputs=submission_result,
)
with gr.Row():
gr.Markdown('## Models that have already been run:')
gr.Dataframe(print_existing_models())
demo.launch()