from __future__ import annotations import gradio as gr import numpy as np import pandas as pd import requests from huggingface_hub.hf_api import SpaceInfo SHEET_ID = '1L7AHpWMVU_kZVLcsk8H2FTizgzeVxWPDoBxw7K8KHXw' SHEET_NAME = 'model' csv_url = f'https://docs.google.com/spreadsheets/d/{SHEET_ID}/gviz/tq?tqx=out:csv&sheet={SHEET_NAME}' class ModelList: def __init__(self): self.table = pd.read_csv(csv_url) self.table = self.table.astype({'Year':'string'}) self._preprocess_table() self.table_header = ''' Name Year Published Source About Task Training Data Type Publication ''' def _preprocess_table(self) -> None: self.table['name_lowercase'] = self.table['Name'].str.lower() rows = [] for row in self.table.itertuples(): source = f'Link' if isinstance( row.Source, str) else '' paper = f'Link' if isinstance( row.Source, str) else '' row = f''' {row.Name} {row.Year} {source} {row.About} {row.task} {row.data} {paper} ''' rows.append(row) self.table['html_table_content'] = rows def render(self, search_query: str, case_sensitive: bool, filter_names: list[str], data_types: list[str]) -> tuple[int, str]: df = self.table if search_query: if case_sensitive: df = df[df.name.str.contains(search_query)] else: df = df[df.name_lowercase.str.contains(search_query.lower())] df = self.filter_table(df, filter_names, data_types) result = self.to_html(df, self.table_header) return result @staticmethod def filter_table(df: pd.DataFrame, filter_names: list[str], data_types: list[str]) -> pd.DataFrame: df = df.loc[df.task.isin(set(filter_names))] df = df.loc[df.data.isin(set(data_types))] return df @staticmethod def to_html(df: pd.DataFrame, table_header: str) -> str: table_data = ''.join(df.html_table_content) html = f''' {table_header} {table_data}
''' return html model_list = ModelList() with gr.Blocks() as demo: with gr.Row(): gr.Image(value="RAII.svg",scale=1,show_download_button=False,show_share_button=False,show_label=False,height=100,container=False) gr.Markdown("# Models for Healthcare Teams") search_box = gr.Textbox(label='Search Name',placeholder='You can search for titles with regular expressions. e.g. (?