Spaces:
Running
Running
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'] | |
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() |