thomass commited on
Commit
383512a
β€’
1 Parent(s): 3be4c25

Big Leaderboard Update

Browse files
Files changed (4) hide show
  1. README.md +1 -1
  2. app.css +0 -37
  3. app.py +193 -206
  4. utils.py +1 -55
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: πŸš€
4
  colorFrom: green
5
  colorTo: indigo
6
  sdk: gradio
7
- sdk_version: 3.0.20
8
  app_file: app.py
9
  pinned: false
10
  ---
 
4
  colorFrom: green
5
  colorTo: indigo
6
  sdk: gradio
7
+ sdk_version: 3.11.0
8
  app_file: app.py
9
  pinned: false
10
  ---
app.css DELETED
@@ -1,37 +0,0 @@
1
-
2
- .infoPoint h1 {
3
- font-size: 30px;
4
- text-decoration: bold;
5
-
6
- }
7
-
8
- a {
9
- text-decoration: underline;
10
- color: #1f3b54 ;
11
- }
12
-
13
- table {
14
-
15
- margin: 25px 0;
16
- font-size: 0.9em;
17
- font-family: sans-serif;
18
- min-width: 400px;
19
- box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);
20
- }
21
-
22
- table th,
23
- table td {
24
- padding: 12px 15px;
25
- }
26
-
27
- tr {
28
- text-align: left;
29
- }
30
- thead tr {
31
- text-align: left;
32
- }
33
-
34
- .flex
35
- {
36
- overflow:auto;
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py CHANGED
@@ -1,238 +1,225 @@
 
 
1
  import requests
2
- import pandas as pd
3
- from tqdm.auto import tqdm
4
- from utils import *
5
- import gradio as gr
6
 
 
 
7
  from huggingface_hub import HfApi, hf_hub_download
8
  from huggingface_hub.repocard import metadata_load
 
 
9
 
10
- class DeepRL_Leaderboard:
11
- def __init__(self) -> None:
12
- self.leaderboard= {}
13
 
14
- def add_leaderboard(self,id=None, title=None):
15
- if id is not None and title is not None:
16
- id = id.strip()
17
- title = title.strip()
18
- self.leaderboard.update({id:{'title':title,'data':get_data_per_env(id)}})
19
-
20
- def get_data(self):
21
- return self.leaderboard
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
- def get_ids(self):
24
- return list(self.leaderboard.keys())
 
 
25
 
26
- # CSS file for the
27
- with open('app.css','r') as f:
28
- BLOCK_CSS = f.read()
29
 
30
- LOADED_MODEL_IDS = {}
31
- LOADED_MODEL_METADATA = {}
 
 
 
 
32
 
33
- def get_data(rl_env):
34
- global LOADED_MODEL_IDS ,LOADED_MODEL_METADATA
35
- data = []
36
  model_ids = get_model_ids(rl_env)
37
- LOADED_MODEL_IDS[rl_env]=model_ids
38
-
39
- for model_id in tqdm(model_ids):
40
- meta = get_metadata(model_id)
41
- LOADED_MODEL_METADATA[model_id] = meta if meta is not None else ''
42
- if meta is None:
43
- continue
44
- user_id = model_id.split('/')[0]
45
- row = {}
46
- row["User"] = user_id
47
- row["Model"] = model_id
48
- accuracy = parse_metrics_accuracy(meta)
49
- mean_reward, std_reward = parse_rewards(accuracy)
50
- mean_reward = mean_reward if not pd.isna(mean_reward) else 0
51
- std_reward = std_reward if not pd.isna(std_reward) else 0
52
- row["Results"] = mean_reward - std_reward
53
- row["Mean Reward"] = mean_reward
54
- row["Std Reward"] = std_reward
55
- data.append(row)
56
- return pd.DataFrame.from_records(data)
57
-
58
- def get_data_per_env(rl_env):
59
- dataframe = get_data(rl_env)
60
- dataframe = dataframe.fillna("")
61
-
62
- if not dataframe.empty:
63
- # turn the model ids into clickable links
64
- dataframe["User"] = dataframe["User"].apply(make_clickable_user)
65
- dataframe["Model"] = dataframe["Model"].apply(make_clickable_model)
66
- dataframe = dataframe.sort_values(by=['Results'], ascending=False)
67
- if not 'Ranking' in dataframe.columns:
68
- dataframe.insert(0, 'Ranking', [i for i in range(1,len(dataframe)+1)])
69
- else:
70
- dataframe['Ranking'] = [i for i in range(1,len(dataframe)+1)]
71
- table_html = dataframe.to_html(escape=False, index=False,justify = 'left')
72
- return table_html,dataframe,dataframe.empty
73
- else:
74
- html = """<div style="color: green">
75
- <p> βŒ› Please wait. Results will be out soon... </p>
76
- </div>
77
- """
78
- return html,dataframe,dataframe.empty
79
-
80
-
81
-
82
- rl_leaderboard = DeepRL_Leaderboard()
83
- rl_leaderboard.add_leaderboard('CartPole-v1','The Cartpole-v1 Leaderboard')
84
- rl_leaderboard.add_leaderboard('LunarLander-v2',"The Lunar Lander πŸŒ• Leaderboard")
85
- rl_leaderboard.add_leaderboard('FrozenLake-v1-4x4-no_slippery','The FrozenLake-v1-4x4-no_slippery Leaderboard')
86
- rl_leaderboard.add_leaderboard('FrozenLake-v1-8x8-no_slippery','The FrozenLake-v1-8x8-no_slippery Leaderboard')
87
- rl_leaderboard.add_leaderboard('FrozenLake-v1-4x4','The FrozenLake-v1-4x4 Leaderboard')
88
- rl_leaderboard.add_leaderboard('FrozenLake-v1-8x8','The FrozenLake-v1-8x8 Leaderboard')
89
- rl_leaderboard.add_leaderboard('Taxi-v3','The Taxi-v3πŸš– Leaderboard')
90
- rl_leaderboard.add_leaderboard('CarRacing-v0'," The Car Racing 🏎️ Leaderboard")
91
- rl_leaderboard.add_leaderboard('MountainCar-v0',"The Mountain Car ⛰️ πŸš— Leaderboard")
92
- rl_leaderboard.add_leaderboard('BipedalWalker-v3',"The BipedalWalker Leaderboard")
93
- rl_leaderboard.add_leaderboard('SpaceInvadersNoFrameskip-v4','The SpaceInvadersNoFrameskip-v4 Leaderboard')
94
- rl_leaderboard.add_leaderboard('Pixelcopter-PLE-v0','The Pixelcopter-PLE-v0 🚁 Leaderboard')
95
- rl_leaderboard.add_leaderboard('Pong-PLE-v0','The Pong-PLE-v0 🎾 Leaderboard')
96
- rl_leaderboard.add_leaderboard('Walker2DBulletEnv-v0','The Walker2DBulletEnv-v0 πŸ€– Leaderboard')
97
- rl_leaderboard.add_leaderboard('AntBulletEnv-v0','The AntBulletEnv-v0 πŸ•ΈοΈ Leaderboard')
98
- rl_leaderboard.add_leaderboard('HalfCheetahBulletEnv-v0','The HalfCheetahBulletEnv-v0 πŸ€– Leaderboard')
99
- RL_ENVS = rl_leaderboard.get_ids()
100
- RL_DETAILS = rl_leaderboard.get_data()
101
-
102
-
103
- def update_data(rl_env):
104
- global LOADED_MODEL_IDS,LOADED_MODEL_METADATA
105
  data = []
106
- model_ids = [x for x in get_model_ids(rl_env)] #if x not in LOADED_MODEL_IDS[rl_env]] # For now let's update all
107
-
108
- LOADED_MODEL_IDS[rl_env]+=model_ids
109
-
110
- for model_id in tqdm(model_ids):
111
  meta = get_metadata(model_id)
112
- LOADED_MODEL_METADATA[model_id] = meta if meta is not None else ''
113
  if meta is None:
114
  continue
115
  user_id = model_id.split('/')[0]
116
  row = {}
117
- row["User"] = user_id
118
- row["Model"] = model_id
119
  accuracy = parse_metrics_accuracy(meta)
120
  mean_reward, std_reward = parse_rewards(accuracy)
121
  mean_reward = mean_reward if not pd.isna(mean_reward) else 0
122
  std_reward = std_reward if not pd.isna(std_reward) else 0
123
-
124
  row["Results"] = mean_reward - std_reward
125
  row["Mean Reward"] = mean_reward
126
  row["Std Reward"] = std_reward
127
  data.append(row)
128
- return pd.DataFrame.from_records(data)
129
-
130
-
131
- def update_data_per_env(rl_env):
132
- global RL_DETAILS
133
-
134
- _,old_dataframe,_ = RL_DETAILS[rl_env]['data']
135
- new_dataframe = update_data(rl_env)
136
-
137
- new_dataframe = new_dataframe.fillna("")
138
- if not new_dataframe.empty:
139
- new_dataframe["User"] = new_dataframe["User"].apply(make_clickable_user)
140
- new_dataframe["Model"] = new_dataframe["Model"].apply(make_clickable_model)
141
-
142
- dataframe = pd.concat([old_dataframe,new_dataframe])
143
-
144
- if not dataframe.empty:
145
-
146
- dataframe = dataframe.sort_values(by=['Results'], ascending=False)
147
- if not 'Ranking' in dataframe.columns:
148
- dataframe.insert(0, 'Ranking', [i for i in range(1,len(dataframe)+1)])
149
- else:
150
- dataframe['Ranking'] = [i for i in range(1,len(dataframe)+1)]
151
- table_html = dataframe.to_html(escape=False, index=False,justify = 'left')
152
- return table_html,dataframe,dataframe.empty
153
- else:
154
- html = """<div style="color: green">
155
- <p> βŒ› Please wait. Results will be out soon... </p>
156
- </div>
157
- """
158
- return html,dataframe,dataframe.empty
159
-
160
-
161
- def get_info_display(dataframe,env_name,name_leaderboard,is_empty):
162
- if not is_empty:
163
- markdown = """
164
- <div class='infoPoint'>
165
- <h1> {name_leaderboard} </h1>
166
- <br>
167
- <p> This is a leaderboard of <b>{len_dataframe}</b> agents, from <b>{num_unique_users}</b> unique users, playing {env_name} πŸ‘©β€πŸš€. </p>
168
- <br>
169
- <p> We use <b>lower bound result to sort the models: mean_reward - std_reward.</b> </p>
170
- <br>
171
- <p> You can click on the model's name to be redirected to its model card which includes documentation. </p>
172
- <br>
173
- <p> You want to try to train your agents? <a href="http://eepurl.com/h1pElX" target="_blank">Sign up to the Hugging Face free Deep Reinforcement Learning Class πŸ€— </a>.
174
- </p>
175
- <br>
176
- <p> You want to compare two agents? <a href="https://huggingface.co/spaces/ThomasSimonini/Compare-Reinforcement-Learning-Agents" target="_blank">It's possible using this Spaces demo πŸ‘€ </a>.
177
- </p>
178
- </div>
179
- """.format(len_dataframe = len(dataframe),env_name = env_name,name_leaderboard = name_leaderboard,num_unique_users = len(set(dataframe['User'].values)))
180
-
181
- else:
182
- markdown = """
183
- <div class='infoPoint'>
184
- <h1> {name_leaderboard} </h1>
185
- <br>
186
- </div>
187
- """.format(name_leaderboard = name_leaderboard)
188
- return markdown
189
-
190
- def reload_all_data():
191
-
192
- global RL_DETAILS,RL_ENVS
193
-
194
- for rl_env in RL_ENVS:
195
- RL_DETAILS[rl_env]['data'] = update_data_per_env(rl_env)
196
-
197
- html = """<div style="color: green">
198
- <p> βœ… Leaderboard updated! </p>
199
- </div>
200
- """
201
- return html
202
-
203
-
204
- def reload_leaderboard(rl_env):
205
- global RL_DETAILS
206
-
207
- data_html,data_dataframe,is_empty = RL_DETAILS[rl_env]['data']
208
-
209
- markdown = get_info_display(data_dataframe,rl_env,RL_DETAILS[rl_env]['title'],is_empty)
210
 
211
- return markdown,data_html
212
-
213
-
214
-
215
-
 
 
 
 
216
 
217
 
218
- block = gr.Blocks(css=BLOCK_CSS)
219
  with block:
220
- notification = gr.HTML("""<div style="color: green">
221
- <p> βŒ› Updating leaderboard... </p>
222
- </div>
223
- """)
224
- block.load(reload_all_data,[],[notification])
225
 
226
- with gr.Tabs():
227
- for rl_env in RL_ENVS:
228
- with gr.TabItem(rl_env) as rl_tab:
229
- data_html,data_dataframe,is_empty = RL_DETAILS[rl_env]['data']
230
- markdown = get_info_display(data_dataframe,rl_env,RL_DETAILS[rl_env]['title'],is_empty)
231
- env_state =gr.Variable(value=f'\"{rl_env}\"')
232
- output_markdown = gr.HTML(markdown)
233
-
234
- output_html = gr.HTML(data_html)
235
 
236
- rl_tab.select(reload_leaderboard,inputs=[env_state],outputs=[output_markdown,output_html])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
- block.launch()
 
1
+ import json
2
+
3
  import requests
 
 
 
 
4
 
5
+ from datasets import load_dataset
6
+ import gradio as gr
7
  from huggingface_hub import HfApi, hf_hub_download
8
  from huggingface_hub.repocard import metadata_load
9
+ import pandas as pd
10
+ from utils import *
11
 
 
 
 
12
 
13
+ block = gr.Blocks()
14
+
15
+ # Containing the data
16
+ rl_envs = [{
17
+ "rl_env_beautiful": "CartPole-v1",
18
+ "rl_env": "CartPole-v1",
19
+ "video_link": "https://huggingface.co/sb3/ppo-CartPole-v1/resolve/main/replay.mp4",
20
+ "global": None
21
+ },
22
+ {
23
+ "rl_env_beautiful": "FrozenLake-v1-4x4-no_slippery ❄️",
24
+ "rl_env": "FrozenLake-v1-4x4-no_slippery",
25
+ "video_link": "",
26
+ "global": None
27
+ },
28
+ {
29
+ "rl_env_beautiful": "FrozenLake-v1-8x8-no_slippery ❄️",
30
+ "rl_env": "FrozenLake-v1-8x8-no_slippery",
31
+ "video_link": "",
32
+ "global": None
33
+ },
34
+ {
35
+ "rl_env_beautiful": "FrozenLake-v1-4x4 ❄️",
36
+ "rl_env": "FrozenLake-v1-4x4",
37
+ "video_link": "",
38
+ "global": None
39
+ },
40
+ {
41
+ "rl_env_beautiful": "FrozenLake-v1-8x8 ❄️",
42
+ "rl_env": "FrozenLake-v1-8x8",
43
+ "video_link": "",
44
+ "global": None
45
+ },
46
+ {
47
+ "rl_env_beautiful": "Taxi-v3 πŸš–",
48
+ "rl_env": "Taxi-v3",
49
+ "video_link": "",
50
+ "global": None
51
+ },
52
+ {
53
+ "rl_env_beautiful": "CarRacing-v0 🏎️",
54
+ "rl_env": "CarRacing-v0",
55
+ "video_link": "",
56
+ "global": None
57
+ },
58
+ {
59
+ "rl_env_beautiful": "MountainCar-v0 ⛰️",
60
+ "rl_env": "MountainCar-v0",
61
+ "video_link": "",
62
+ "global": None
63
+ },
64
+ {
65
+ "rl_env_beautiful": "SpaceInvadersNoFrameskip-v4 πŸ‘Ύ",
66
+ "rl_env": "SpaceInvadersNoFrameskip-v4",
67
+ "video_link": "",
68
+ "global": None
69
+ },
70
+ {
71
+ "rl_env_beautiful": "BipedalWalker-v3",
72
+ "rl_env": "BipedalWalker-v3",
73
+ "video_link": "",
74
+ "global": None
75
+ },
76
+ {
77
+ "rl_env_beautiful": "Walker2DBulletEnv-v0",
78
+ "rl_env": "Walker2DBulletEnv-v0",
79
+ "video_link": "",
80
+ "global": None
81
+ },
82
+ {
83
+ "rl_env_beautiful": "AntBulletEnv-v0",
84
+ "rl_env": "AntBulletEnv-v0",
85
+ "video_link": "",
86
+ "global": None
87
+ },
88
+ {
89
+ "rl_env_beautiful": "HalfCheetahBulletEnv-v0",
90
+ "rl_env": "HalfCheetahBulletEnv-v0",
91
+ "video_link": "",
92
+ "global": None
93
+ }
94
+ ]
95
+
96
+
97
+
98
+ def get_metadata(model_id):
99
+ try:
100
+ readme_path = hf_hub_download(model_id, filename="README.md")
101
+ return metadata_load(readme_path)
102
+ except requests.exceptions.HTTPError:
103
+ # 404 README.md not found
104
+ return None
105
+
106
+ def parse_metrics_accuracy(meta):
107
+ if "model-index" not in meta:
108
+ return None
109
+ result = meta["model-index"][0]["results"]
110
+ metrics = result[0]["metrics"]
111
+ accuracy = metrics[0]["value"]
112
+ return accuracy
113
+
114
+ # We keep the worst case episode
115
+ def parse_rewards(accuracy):
116
+ default_std = -1000
117
+ default_reward=-1000
118
+ if accuracy != None:
119
+ accuracy = str(accuracy)
120
+ parsed = accuracy.split(' +/- ')
121
+ if len(parsed)>1:
122
+ mean_reward = float(parsed[0])
123
+ std_reward = float(parsed[1])
124
+ elif len(parsed)==1: #only mean reward
125
+ mean_reward = float(parsed[0])
126
+ std_reward = float(0)
127
+
128
+ else:
129
+ mean_reward = float(default_std)
130
+ std_reward = float(default_reward)
131
 
132
+ else:
133
+ mean_reward = float(default_std)
134
+ std_reward = float(default_reward)
135
+ return mean_reward, std_reward
136
 
 
 
 
137
 
138
+ def get_model_ids(rl_env):
139
+ api = HfApi()
140
+ models = api.list_models(filter=rl_env)
141
+ model_ids = [x.modelId for x in models]
142
+ print(model_ids)
143
+ return model_ids
144
 
145
+ def get_model_dataframe(rl_env):
146
+ # Get model ids associated with rl_env
 
147
  model_ids = get_model_ids(rl_env)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  data = []
149
+ for model_id in model_ids:
150
+ """
151
+ readme_path = hf_hub_download(model_id, filename="README.md")
152
+ meta = metadata_load(readme_path)
153
+ """
154
  meta = get_metadata(model_id)
155
+ #LOADED_MODEL_METADATA[model_id] = meta if meta is not None else ''
156
  if meta is None:
157
  continue
158
  user_id = model_id.split('/')[0]
159
  row = {}
160
+ row["User"] = make_clickable_user(user_id)
161
+ row["Model"] = make_clickable_model(model_id)
162
  accuracy = parse_metrics_accuracy(meta)
163
  mean_reward, std_reward = parse_rewards(accuracy)
164
  mean_reward = mean_reward if not pd.isna(mean_reward) else 0
165
  std_reward = std_reward if not pd.isna(std_reward) else 0
 
166
  row["Results"] = mean_reward - std_reward
167
  row["Mean Reward"] = mean_reward
168
  row["Std Reward"] = std_reward
169
  data.append(row)
170
+ ranked_dataframe = rank_dataframe(pd.DataFrame.from_records(data))
171
+ print("RANKED", ranked_dataframe)
172
+ return ranked_dataframe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
 
174
+
175
+ def rank_dataframe(dataframe):
176
+ print("DATAFRAME", dataframe)
177
+ dataframe = dataframe.sort_values(by=['Results'], ascending=False)
178
+ if not 'Ranking' in dataframe.columns:
179
+ dataframe.insert(0, 'Ranking', [i for i in range(1,len(dataframe)+1)])
180
+ else:
181
+ dataframe['Ranking'] = [i for i in range(1,len(dataframe)+1)]
182
+ return dataframe
183
 
184
 
 
185
  with block:
186
+ gr.Markdown(f"""
187
+ # πŸ† The Deep Reinforcement Learning Course Leaderboard πŸ†
 
 
 
188
 
189
+ This is the leaderboard of trained agents during the Deep Reinforcement Learning Course. A free course from beginner to expert.
190
+
191
+ Just choose which environment you trained your agent on and with Ctrl+F find your rank πŸ†
192
+
193
+ We use **lower bound result to sort the models: mean_reward - std_reward.**
 
 
 
 
194
 
195
+ You **can click on the model's name** to be redirected to its model card which includes documentation.
196
+
197
+ πŸ€– You want to try to train your agents? <a href="http://eepurl.com/ic5ZUD" target="_blank">Sign up to the Hugging Face free Deep Reinforcement Learning Course πŸ€— </a>.
198
+
199
+ You want to compare two agents? <a href="https://huggingface.co/spaces/ThomasSimonini/Compare-Reinforcement-Learning-Agents" target="_blank">It's possible using this Spaces demo πŸ‘€ </a>.
200
+
201
+ πŸ”§ There is an **environment missing?** Please open an issue.
202
+ """)
203
+
204
+ #for rl_env in RL_ENVS:
205
+ for i in range(0, len(rl_envs)):
206
+ rl_env = rl_envs[i]
207
+
208
+ with gr.TabItem(rl_env["rl_env_beautiful"]) as rl_tab:
209
+ with gr.Row():
210
+ markdown = """
211
+ # {name_leaderboard}
212
+
213
+ """.format(name_leaderboard = rl_env["rl_env_beautiful"], video_link = rl_env["video_link"])
214
+ gr.Markdown(markdown)
215
+ with gr.Row():
216
+ rl_env["global"] = gr.components.Dataframe(value= get_model_dataframe(rl_env["rl_env"]), headers=["Ranking πŸ†", "User πŸ€—", "Model id πŸ€–", "Results", "Mean Reward", "Std Reward"], datatype=["number", "markdown", "markdown", "number", "number", "number"])
217
+ with gr.Row():
218
+ data_run = gr.Button("Refresh")
219
+ print("rl_env", rl_env["rl_env"])
220
+ val = gr.Variable(value=[rl_env["rl_env"]])
221
+ data_run.click(get_model_dataframe, inputs=[val], outputs =rl_env["global"])
222
+
223
+
224
+ block.launch()
225
 
 
utils.py CHANGED
@@ -1,10 +1,3 @@
1
- import pandas as pd
2
- import requests
3
- from tqdm.auto import tqdm
4
- from huggingface_hub import HfApi, hf_hub_download
5
- from huggingface_hub.repocard import metadata_load
6
-
7
-
8
  # Based on Omar Sanseviero work
9
  # Make model clickable link
10
  def make_clickable_model(model_name):
@@ -18,51 +11,4 @@ def make_clickable_model(model_name):
18
  def make_clickable_user(user_id):
19
  link = "https://huggingface.co/" + user_id
20
  return f'<a target="_blank" href="{link}">{user_id}</a>'
21
-
22
-
23
-
24
- def get_model_ids(rl_env):
25
- api = HfApi()
26
- models = api.list_models(filter=rl_env)
27
- model_ids = [x.modelId for x in models]
28
- return model_ids
29
-
30
- def get_metadata(model_id):
31
- try:
32
- readme_path = hf_hub_download(model_id, filename="README.md")
33
- return metadata_load(readme_path)
34
- except requests.exceptions.HTTPError:
35
- # 404 README.md not found
36
- return None
37
-
38
- def parse_metrics_accuracy(meta):
39
- if "model-index" not in meta:
40
- return None
41
- result = meta["model-index"][0]["results"]
42
- metrics = result[0]["metrics"]
43
- accuracy = metrics[0]["value"]
44
- return accuracy
45
-
46
- # We keep the worst case episode
47
- def parse_rewards(accuracy):
48
- default_std = -1000
49
- default_reward=-1000
50
- if accuracy != None:
51
- accuracy = str(accuracy)
52
- parsed = accuracy.split(' +/- ')
53
- if len(parsed)>1:
54
- mean_reward = float(parsed[0])
55
- std_reward = float(parsed[1])
56
- elif len(parsed)==1: #only mean reward
57
- mean_reward = float(parsed[0])
58
- std_reward = float(0)
59
-
60
- else:
61
- mean_reward = float(default_std)
62
- std_reward = float(default_reward)
63
-
64
- else:
65
- mean_reward = float(default_std)
66
- std_reward = float(default_reward)
67
- return mean_reward, std_reward
68
-
 
 
 
 
 
 
 
 
1
  # Based on Omar Sanseviero work
2
  # Make model clickable link
3
  def make_clickable_model(model_name):
 
11
  def make_clickable_user(user_id):
12
  link = "https://huggingface.co/" + user_id
13
  return f'<a target="_blank" href="{link}">{user_id}</a>'
14
+