Spaces:
Runtime error
Runtime error
from collections import OrderedDict | |
import gradio as gr | |
import plotly.graph_objects as go | |
from datasets import load_dataset, Dataset | |
from huggingface_hub import list_datasets | |
pipelines = [d.id[20:-21] for d in list_datasets(author='open-source-metrics') if 'checkpoint-downloads' in d.id] | |
def sum_with_none(iterator): | |
return sum([v for v in iterator if v is not None]) | |
def merge_columns(dataset: Dataset, max_number_of_columns: int): | |
downloads = {col: sum_with_none(dataset[col]) for col in dataset.column_names if col != 'dates'} | |
sorted_downloads = OrderedDict(sorted(downloads.items(), key=lambda x: x[1], reverse=True)) | |
to_merge = list(sorted_downloads.keys())[max_number_of_columns:] | |
to_keep = list(sorted_downloads.keys())[:max_number_of_columns] | |
if 'no_arch' in to_merge: | |
to_merge.remove('no_arch') | |
if 'no_arch' in to_keep: | |
to_keep.remove('no_arch') | |
dictionary = dataset.to_dict() | |
dictionary['combined'] = dictionary.pop('no_arch') | |
while len(to_merge): | |
current = dictionary['combined'] | |
to_add = dictionary.pop(to_merge.pop(0)) | |
for i in range(len(current)): | |
if current[i] is None: | |
current[i] = 0 | |
if to_add[i] is None: | |
to_add[i] = 0 | |
current[i] += to_add[i] | |
dictionary['combined'] = current | |
dataset = Dataset.from_dict(dictionary) | |
return dataset | |
def plot(library: str, stacked: bool, number_of_architectures_to_show: int): | |
dataset = load_dataset(f"open-source-metrics/{library}-checkpoint-downloads")['train'] | |
n_archs = len(dataset.column_names) - 1 # Remove dates | |
if n_archs > number_of_architectures_to_show: | |
dataset = merge_columns(dataset, number_of_architectures_to_show) | |
dates = dataset['dates'] | |
axis = dataset.column_names | |
axis.remove('dates') | |
fig = go.Figure() | |
for i in axis: | |
fig.add_trace( | |
go.Scatter(x=dates, y=dataset[i], mode='lines+markers', name=i, stackgroup='one' if stacked else None) | |
) | |
return fig | |
with gr.Blocks() as demo: | |
inputs = [ | |
gr.Dropdown(pipelines), | |
gr.Checkbox(label='Stacked'), | |
gr.Slider(minimum=1, maximum=len(pipelines), value=3, step=1, label="Max number of architectures to show") | |
] | |
submit = gr.Button('Submit') | |
with gr.Row(): | |
outputs = [gr.Plot()] | |
submit.click(fn=plot, inputs=inputs, outputs=outputs) | |
demo.launch() | |