#!/usr/bin/env python from __future__ import annotations import gradio as gr from constants import (HARDWARE_CHOICES, OWNER_CHOICES, SDK_CHOICES, SLEEP_TIME_CHOICES, STATUS_CHOICES, VISIBILITY_CHOICES) from demo_list import DemoList, get_df_from_yaml from restart_scheduler import RestartScheduler from settings import HF_TOKEN, INTERVAL_MINUTES, SPACE_ID demo_list = DemoList(get_df_from_yaml('list.yaml')) if SPACE_ID is not None and INTERVAL_MINUTES > 0: scheduler = RestartScheduler(space_id=SPACE_ID, interval_minutes=INTERVAL_MINUTES, hf_token=HF_TOKEN) scheduler.start() def update_status_checkboxes(choices: list[str]) -> list[str]: if '(ALL)' in choices: return STATUS_CHOICES elif '(NONE)' in choices: return [] else: return choices def update_hardware_checkboxes(choices: list[str]) -> list[str]: if '(ALL)' in choices: return HARDWARE_CHOICES elif '(NONE)' in choices: return [] else: return choices def update_sdk_checkboxes(choices: list[str]) -> list[str]: if '(ALL)' in choices: return SDK_CHOICES elif '(NONE)' in choices: return [] else: return choices def update_sleep_time_checkboxes(choices: list[str]) -> list[str]: if '(ALL)' in choices: return SLEEP_TIME_CHOICES elif '(NONE)' in choices: return [] else: return choices with gr.Blocks(css='style.css') as demo: with gr.Accordion(label='Filter', open=False): status = gr.CheckboxGroup(label='Status', choices=['(ALL)', '(NONE)'] + STATUS_CHOICES, value=STATUS_CHOICES, type='value') hardware = gr.CheckboxGroup(label='Hardware', choices=['(ALL)', '(NONE)'] + HARDWARE_CHOICES, value=HARDWARE_CHOICES, type='value') sleep_time = gr.CheckboxGroup(label='Sleep time', choices=['(ALL)', '(NONE)'] + SLEEP_TIME_CHOICES, value=SLEEP_TIME_CHOICES, type='value') multiple_replicas = gr.Checkbox(label='Multiple replicas', value=False) sdk = gr.CheckboxGroup(label='SDK', choices=['(ALL)', '(NONE)'] + SDK_CHOICES, value=SDK_CHOICES, type='value') visibility = gr.CheckboxGroup(label='Visibility', choices=VISIBILITY_CHOICES, value=VISIBILITY_CHOICES, type='value') owner = gr.CheckboxGroup(label='Owner', choices=OWNER_CHOICES, value=OWNER_CHOICES, type='value') apply_button = gr.Button('Apply') df = gr.Dataframe(value=demo_list.df_prettified, datatype=demo_list.column_datatype, type='pandas', interactive=False) status.change(fn=update_status_checkboxes, inputs=status, outputs=status, queue=False, show_progress=False, api_name=False) hardware.change(fn=update_hardware_checkboxes, inputs=hardware, outputs=hardware, queue=False, show_progress=False, api_name=False) sdk.change(fn=update_sdk_checkboxes, inputs=sdk, outputs=sdk, queue=False, show_progress=False, api_name=False) sleep_time.change(fn=update_sleep_time_checkboxes, inputs=sleep_time, outputs=sleep_time, queue=False, show_progress=False, api_name=False) apply_button.click(fn=demo_list.filter, inputs=[ status, hardware, sleep_time, multiple_replicas, sdk, visibility, owner, ], outputs=df, api_name=False) demo.queue(api_open=False).launch()