import pandas as pd import re from huggingface_hub import HfApi api = HfApi() def get_model_size(model_name, precision: str = "BF16", revision: str = "main"): if len(model_name.split("/")) == 1: return None model_info = api.model_info(repo_id=model_name, revision=revision) # model_size = get_model_size(model_info=model_info, precision=precision) size_pattern = size_pattern = re.compile(r"(\d\.)?\d+(b|m)") try: model_size = round(model_info.safetensors["total"] / 1e9, 1) except (AttributeError, TypeError): try: size_match = re.search(size_pattern, model_info.modelId.lower()) model_size = size_match.group(0) model_size = round(float(model_size[:-1]) if model_size[-1] == "b" else float(model_size[:-1]) / 1e3, 1) except AttributeError: return 0 # Unknown model sizes are indicated as 0, see NUMERIC_INTERVALS in app.py size_factor = 8 if (precision == "GPTQ" or "gptq" in model_info.modelId.lower()) else 1 model_size = size_factor * model_size return model_size def make_clickable_model(model_name, link=None): if len(model_name.split("/")) == 2: link = "https://huggingface.co/" + model_name return ( # f'{model_name.split("/")[-1]}' f'{model_name.split("/")[-1]}' ) return model_name def load_data(data_path): df = pd.read_csv(data_path, skiprows=1, header=0) columns = ['Model', 'type', 'open?', 'shot', 'id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv'] columns_sorted = ['R','Model','type','open?','avg-pub','avg-prv','id-pub','th-pub','vi-pub', 'id-prv', 'th-prv', 'vi-prv'] columns_overall = ['Model', 'type', 'open?', 'shot', 'SeaExam-pub', 'SeaExam-prv', 'SeaBench-pub', 'SeaBench-prv'] columns_overall_sorted = ['R', 'Model', 'type', 'open?', 'shot', 'SeaExam-pub', 'SeaExam-prv', 'SeaBench-pub', 'SeaBench-prv'] # Splitting into three separate DataFrames based on the groups M3Exam and MMLU and average df_seaexam = df.iloc[:, :12] # M3Exam columns df_seabench = df.iloc[:, [0, 1, 2, 3, 12, 13, 14, 15, 16, 17, 18, 19]] # MMLU columns df_overall = df.iloc[:, [0, 1, 2, 3, 7, 11, 15, 19]] df_seaexam.columns = columns df_seabench.columns = columns df_overall.columns = columns_overall # drop the row if 'avg' column is NaN df_seaexam = df_seaexam.dropna(subset=['id-pub','th-pub','vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']) df_seabench = df_seabench.dropna(subset=['id-pub','th-pub','vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']) df_overall = df_overall.dropna(subset=['SeaExam-pub', 'SeaExam-prv']) # # multiply the values in the ['en', 'zh', 'id', 'th', 'vi', 'avg', 'avg_sea'] by 100 and display as 1 decimal for df_tmp in [df_seaexam]: df_tmp[['id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']] *= 100 df_tmp[['id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']] = df_tmp[['id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']].round(2) df_seabench[['id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']] = df_seabench[['id-pub', 'th-pub', 'vi-pub', 'avg-pub', 'id-prv', 'th-prv', 'vi-prv', 'avg-prv']].round(2) df_overall[['SeaExam-pub', 'SeaExam-prv', ]] *= 100 df_overall[['SeaExam-pub', 'SeaExam-prv', 'SeaBench-pub', 'SeaBench-prv']] = df_overall[['SeaExam-pub', 'SeaExam-prv', 'SeaBench-pub', 'SeaBench-prv']].round(2) # rank the DataFrames by the 'avg' column df_seaexam['R'] = df_seaexam['avg-prv'].rank(ascending=False).astype(int) df_seabench['R'] = df_seabench['avg-prv'].rank(ascending=False).astype(int) df_overall['R'] = df_overall['SeaExam-prv'].rank(ascending=False).astype(int) # reorder the columns df_seaexam = df_seaexam[columns_sorted] df_seabench = df_seabench[columns_sorted] df_overall = df_overall[columns_overall_sorted] # sort the DataFrames by the 'avg' column in descending order df_seaexam = df_seaexam.sort_values(by='avg-prv', ascending=False) df_seabench = df_seabench.sort_values(by='avg-prv', ascending=False) df_overall = df_overall.sort_values(by='SeaExam-prv', ascending=False) # change the column name from 'avg' to 'avg ⬇️' df_seaexam = df_seaexam.rename(columns={'avg-prv': 'avg-prv ⬇️'}) df_seabench = df_seabench.rename(columns={'avg-prv': 'avg-prv ⬇️'}) df_overall = df_overall.rename(columns={'SeaExam-prv': 'SeaExam-prv ⬇️'}) # map the values in the 'type' column to the following values: {'base': 'Base', 'chat': 'Chat'} df_seaexam['type'] = df_seaexam['type'].map({'base': '🟢 base', 'chat': '🔶 chat'}) df_seabench['type'] = df_seabench['type'].map({'base': '🟢 base', 'chat': '🔶 chat'}) df_overall['type'] = df_overall['type'].map({'base': '🟢 base', 'chat': '🔶 chat'}) # get the parameters of the models # df_seaexam['params(B)'] = df_seaexam['Model'].apply(get_model_size) # df_seabench['params(B)'] = df_seabench['Model'].apply(get_model_size) # df_overall['params(B)'] = df_overall['Model'].apply(get_model_size) df_seaexam['#P(B)'] = df_seaexam['Model'].apply(get_model_size) df_seabench['#P(B)'] = df_seabench['Model'].apply(get_model_size) df_overall['#P(B)'] = df_overall['Model'].apply(get_model_size) # make the 'Model' column clickable df_seaexam['Model'] = df_seaexam['Model'].apply(make_clickable_model) df_seabench['Model'] = df_seabench['Model'].apply(make_clickable_model) df_overall['Model'] = df_overall['Model'].apply(make_clickable_model) # return df_m3exam, df_mmlu, df_avg return df_seaexam, df_seabench, df_overall if __name__ == "__main__": model_name = "SeaLLMs/SeaLLM-7B-v2" model_size = get_model_size(model_name) print(model_size)