hellokawei commited on
Commit
4f244aa
·
verified ·
1 Parent(s): 4d81225

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -52
app.py CHANGED
@@ -2,7 +2,6 @@ import gradio as gr
2
  from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns
3
  import pandas as pd
4
  from apscheduler.schedulers.background import BackgroundScheduler
5
- from huggingface_hub import snapshot_download
6
  import os
7
  import json
8
  from transformers import AutoModelForCausalLM, AutoTokenizer
@@ -89,43 +88,43 @@ def get_leaderboard_df(eval_results_path: str, eval_requests_path: str, cols: li
89
  # 这里我们不再尝试从文件读取,直接生成模拟数据
90
  all_results = [
91
  {
92
- "model": "google/gemma-2b-it", # 示例模型1
93
- "model_type": ModelType.LanguageModeling.to_str(),
94
- "precision": Precision.float16.value.name,
95
- "params": 2.0,
96
- "license": "apache-2.0",
97
- "still_on_hub": True,
98
- "generalization_score": 0.0, # 初始为0,等待用户输入
99
- "relevance_score": 0.0,
100
- "artistry_score": 0.0,
101
- "consistency_score": 0.0,
102
- "efficiency_score": 0.0,
103
  },
104
  {
105
- "model": "microsoft/phi-2", # 示例模型2
106
- "model_type": ModelType.LanguageModeling.to_str(),
107
- "precision": Precision.float16.value.name,
108
- "params": 2.7,
109
- "license": "mit",
110
- "still_on_hub": True,
111
- "generalization_score": 0.0,
112
- "relevance_score": 0.0,
113
- "artistry_score": 0.0,
114
- "consistency_score": 0.0,
115
- "efficiency_score": 0.0,
116
  },
117
  {
118
- "model": "EleutherAI/gpt-neo-125m", # 示例模型3,非常小以确保能加载
119
- "model_type": ModelType.LanguageModeling.to_str(),
120
- "precision": Precision.float16.value.name,
121
- "params": 0.125,
122
- "license": "apache-2.0",
123
- "still_on_hub": True,
124
- "generalization_score": 0.0,
125
- "relevance_score": 0.0,
126
- "artistry_score": 0.0,
127
- "consistency_score": 0.0,
128
- "efficiency_score": 0.0,
129
  }
130
  ]
131
  df = pd.DataFrame(all_results)
@@ -144,8 +143,6 @@ def get_evaluation_queue_df(eval_requests_path: str, eval_cols: list):
144
  # 假设 src.envs 中的 API, EVAL_REQUESTS_PATH, EVAL_RESULTS_PATH, QUEUE_REPO, REPO_ID, RESULTS_REPO, TOKEN 可用
145
  # 如果 TOKEN 未在 src.envs 中定义,您需要在 Hugging Face Space Secrets 中设置 HF_TOKEN。
146
  # 这里为了能运行,我们直接使用 os.getenv 获取 TOKEN。
147
- # from src.envs import API, EVAL_REQUESTS_PATH, EVAL_RESULTS_PATH, QUEUE_REPO, REPO_ID, RESULTS_REPO, TOKEN
148
- # 这里需要调整为从环境变量读取,以适应 Hugging Face Space 的最佳实践
149
  TOKEN = os.getenv("HF_TOKEN") # 确保您的 Space Secrets 中设置了 HF_TOKEN
150
  # 假设这些路径是可写的,但在此场景下,我们不再依赖它们来存储评估结果
151
  EVAL_REQUESTS_PATH = "./eval_requests"
@@ -162,6 +159,7 @@ class MockSubmit:
162
 
163
  API = MockAPI()
164
  add_new_eval = MockSubmit().add_new_eval
 
165
 
166
  # 预加载模型和分词器
167
  # 考虑到免费 Space 的资源限制,这里选择较小的模型
@@ -212,11 +210,14 @@ load_models()
212
  # 模型生成函数
213
  def generate_text(prompt, max_new_tokens=100):
214
  outputs = {}
215
- for model_id, model_data in loaded_models.items():
 
 
 
 
216
  if model_data: # 确保模型已成功加载
217
  model = model_data["model"]
218
  tokenizer = model_data["tokenizer"]
219
- model_name = model_data["name"]
220
 
221
  try:
222
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
@@ -237,8 +238,11 @@ def generate_text(prompt, max_new_tokens=100):
237
  except Exception as e:
238
  outputs[model_name] = f"生成失败: {e}"
239
  else:
240
- outputs[model_data["name"]] = "模型未加载或加载失败。"
241
- return list(outputs.values()) # 返回一个列表,对应多个输出框
 
 
 
242
 
243
  # 更新排行榜数据函数
244
  def update_leaderboard(g_score, r_score, a_score, c_score, e_score, model_idx):
@@ -246,9 +250,9 @@ def update_leaderboard(g_score, r_score, a_score, c_score, e_score, model_idx):
246
  # 假设模型的索引与 MODELS_TO_COMPARE 列表中的顺序一致
247
  # 在实际应用中,您可能需要更健壮的方式来匹配模型
248
  if model_idx is not None and 0 <= model_idx < len(MODELS_TO_COMPARE):
249
- model_id_to_update = MODELS_TO_COMPARE[model_idx]["id"]
250
  # 找到 DataFrame 中对应的行
251
- row_index = LEADERBOARD_DF[LEADERBOARD_DF['Model'] == MODELS_TO_COMPARE[model_idx]["name"]].index
252
  if not row_index.empty:
253
  # 更新 GRACE 分数 (这里假设是从 0.0-1.0 的分数,Gradio 滑块可能输出 0-100)
254
  # 如果 Gradio 滑块输出 0-100,需要除以 100 转换为 0-1.0
@@ -257,8 +261,8 @@ def update_leaderboard(g_score, r_score, a_score, c_score, e_score, model_idx):
257
  LEADERBOARD_DF.loc[row_index, 'A: 创新表现力'] = a_score / 100.0
258
  LEADERBOARD_DF.loc[row_index, 'C: 一致性'] = c_score / 100.0
259
  LEADERBOARD_DF.loc[row_index, 'E: 效率性'] = e_score / 100.0
260
- # 重新排序排行榜 (如果需要根据某个分数排序)
261
- LEADERBOARD_DF = LEADERBOARD_DF.sort_values(by=AutoEvalColumn.generalization_score.value.name, ascending=False).reset_index(drop=True)
262
  return LEADERBOARD_DF
263
  return LEADERBOARD_DF # 返回更新后的 DataFrame
264
 
@@ -284,7 +288,7 @@ def init_leaderboard(dataframe):
284
  hide_columns=[c.name for c in fields(AutoEvalColumn) if c.hidden],
285
  filter_columns=[],
286
  bool_checkboxgroup_label="隐藏模型",
287
- interactive=False,
288
  )
289
 
290
  return Leaderboard(
@@ -353,7 +357,7 @@ def init_leaderboard(dataframe):
353
  ),
354
  ],
355
  bool_checkboxgroup_label="隐藏模型",
356
- interactive=False,
357
  )
358
 
359
 
@@ -388,7 +392,8 @@ with demo:
388
  model_selector = gr.Dropdown(
389
  choices=[(m["name"], idx) for idx, m in enumerate(MODELS_TO_COMPARE)],
390
  label="选择要评估的模型",
391
- interactive=True
 
392
  )
393
 
394
  # GRACE 维度滑块
@@ -401,6 +406,9 @@ with demo:
401
 
402
  update_grace_button = gr.Button("更新 GRACE 评分到排行榜")
403
 
 
 
 
404
  # 更新排行榜的逻辑
405
  update_grace_button.click(
406
  fn=update_leaderboard,
@@ -417,7 +425,8 @@ with demo:
417
 
418
 
419
  with gr.TabItem("🏅 LLM Benchmark", elem_id="llm-benchmark-tab-table", id=1): # 调整 ID
420
- leaderboard = init_leaderboard(LEADERBOARD_DF)
 
421
 
422
  with gr.TabItem("📝 关于", elem_id="llm-benchmark-tab-table", id=2):
423
  gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text")
@@ -425,10 +434,6 @@ with demo:
425
  with gr.TabItem("🚀 在此提交!", elem_id="llm-benchmark-tab-table", id=3): # 这个标签页保留,但内容将被简化
426
  gr.Markdown("## 在此演示中,模型已预先加载进行比较,无需提交新模型。", elem_classes="markdown-text")
427
  gr.Markdown("您可以在 **💬 模型比较与生成** 标签页中输入提示词并评估模型。", elem_classes="markdown-text")
428
- # 移除所有提交相关的 UI 元素和逻辑
429
- # 但是由于需要保持 add_new_eval 的引用,我们让它返回一个字符串
430
- # gr.Textbox(label="模型名称") # 示例:保留一个文本框,但它不会做任何事情
431
- # gr.Button("提交评估").click(fn=add_new_eval, inputs=[], outputs=[gr.Markdown()])
432
  gr.Markdown("(本页面仅用于保留原始结构,实际提交功能已禁用)")
433
 
434
 
 
2
  from gradio_leaderboard import Leaderboard, ColumnFilter, SelectColumns
3
  import pandas as pd
4
  from apscheduler.schedulers.background import BackgroundScheduler
 
5
  import os
6
  import json
7
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
88
  # 这里我们不再尝试从文件读取,直接生成模拟数据
89
  all_results = [
90
  {
91
+ "Model": "Gemma 2B Instruct", # 使用友好的名称
92
+ "Model type": ModelType.LanguageModeling.to_str(),
93
+ "Precision": Precision.float16.value.name,
94
+ "Params (B)": 2.0,
95
+ "License": "apache-2.0",
96
+ "On Hub": True,
97
+ "G: 泛化性": 0.0, # 初始为0,等待用户输入
98
+ "R: 相关性": 0.0,
99
+ "A: 创新表现力": 0.0,
100
+ "C: 一致性": 0.0,
101
+ "E: 效率性": 0.0,
102
  },
103
  {
104
+ "Model": "Phi-2", # 使用友好的名称
105
+ "Model type": ModelType.LanguageModeling.to_str(),
106
+ "Precision": Precision.float16.value.name,
107
+ "Params (B)": 2.7,
108
+ "License": "mit",
109
+ "On Hub": True,
110
+ "G: 泛化性": 0.0,
111
+ "R: 相关性": 0.0,
112
+ "A: 创新表现力": 0.0,
113
+ "C: 一致性": 0.0,
114
+ "E: 效率性": 0.0,
115
  },
116
  {
117
+ "Model": "GPT-Neo 125M", # 使用友好的名称
118
+ "Model type": ModelType.LanguageModeling.to_str(),
119
+ "Precision": Precision.float16.value.name,
120
+ "Params (B)": 0.125,
121
+ "License": "apache-2.0",
122
+ "On Hub": True,
123
+ "G: 泛化性": 0.0,
124
+ "R: 相关性": 0.0,
125
+ "A: 创新表现力": 0.0,
126
+ "C: 一致性": 0.0,
127
+ "E: 效率性": 0.0,
128
  }
129
  ]
130
  df = pd.DataFrame(all_results)
 
143
  # 假设 src.envs 中的 API, EVAL_REQUESTS_PATH, EVAL_RESULTS_PATH, QUEUE_REPO, REPO_ID, RESULTS_REPO, TOKEN 可用
144
  # 如果 TOKEN 未在 src.envs 中定义,您需要在 Hugging Face Space Secrets 中设置 HF_TOKEN。
145
  # 这里为了能运行,我们直接使用 os.getenv 获取 TOKEN。
 
 
146
  TOKEN = os.getenv("HF_TOKEN") # 确保您的 Space Secrets 中设置了 HF_TOKEN
147
  # 假设这些路径是可写的,但在此场景下,我们不再依赖它们来存储评估结果
148
  EVAL_REQUESTS_PATH = "./eval_requests"
 
159
 
160
  API = MockAPI()
161
  add_new_eval = MockSubmit().add_new_eval
162
+ REPO_ID = os.getenv("HF_SPACE_ID", "your-org/your-space-name") # 从环境变量获取 Space ID,或者设置默认值
163
 
164
  # 预加载模型和分词器
165
  # 考虑到免费 Space 的资源限制,这里选择较小的模型
 
210
  # 模型生成函数
211
  def generate_text(prompt, max_new_tokens=100):
212
  outputs = {}
213
+ for model_info in MODELS_TO_COMPARE: # 迭代 MODELS_TO_COMPARE 确保顺序和输出框对应
214
+ model_id = model_info["id"]
215
+ model_name = model_info["name"]
216
+ model_data = loaded_models.get(model_id) # 从 loaded_models 获取数据
217
+
218
  if model_data: # 确保模型已成功加载
219
  model = model_data["model"]
220
  tokenizer = model_data["tokenizer"]
 
221
 
222
  try:
223
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
 
238
  except Exception as e:
239
  outputs[model_name] = f"生成失败: {e}"
240
  else:
241
+ outputs[model_name] = "模型未加载或加载失败。"
242
+
243
+ # 按照 MODELS_TO_COMPARE 的顺序返回结果
244
+ ordered_outputs = [outputs.get(m["name"], "模型未加载或加载失败。") for m in MODELS_TO_COMPARE]
245
+ return ordered_outputs # 返回一个列表,对应多个输出框
246
 
247
  # 更新排行榜数据函数
248
  def update_leaderboard(g_score, r_score, a_score, c_score, e_score, model_idx):
 
250
  # 假设模型的索引与 MODELS_TO_COMPARE 列表中的顺序一致
251
  # 在实际应用中,您可能需要更健壮的方式来匹配模型
252
  if model_idx is not None and 0 <= model_idx < len(MODELS_TO_COMPARE):
253
+ model_name_to_update = MODELS_TO_COMPARE[model_idx]["name"]
254
  # 找到 DataFrame 中对应的行
255
+ row_index = LEADERBOARD_DF[LEADERBOARD_DF['Model'] == model_name_to_update].index
256
  if not row_index.empty:
257
  # 更新 GRACE 分数 (这里假设是从 0.0-1.0 的分数,Gradio 滑块可能输出 0-100)
258
  # 如果 Gradio 滑块输出 0-100,需要除以 100 转换为 0-1.0
 
261
  LEADERBOARD_DF.loc[row_index, 'A: 创新表现力'] = a_score / 100.0
262
  LEADERBOARD_DF.loc[row_index, 'C: 一致性'] = c_score / 100.0
263
  LEADERBOARD_DF.loc[row_index, 'E: 效率性'] = e_score / 100.0
264
+ # 重新排序排行榜 (如果需要根据某个分数排序,例如泛化性)
265
+ LEADERBOARD_DF = LEADERBOARD_DF.sort_values(by="G: 泛化性", ascending=False).reset_index(drop=True)
266
  return LEADERBOARD_DF
267
  return LEADERBOARD_DF # 返回更新后的 DataFrame
268
 
 
288
  hide_columns=[c.name for c in fields(AutoEvalColumn) if c.hidden],
289
  filter_columns=[],
290
  bool_checkboxgroup_label="隐藏模型",
291
+ interactive=False, # 设置为非交互式
292
  )
293
 
294
  return Leaderboard(
 
357
  ),
358
  ],
359
  bool_checkboxgroup_label="隐藏模型",
360
+ interactive=False, # 设置为非交互式
361
  )
362
 
363
 
 
392
  model_selector = gr.Dropdown(
393
  choices=[(m["name"], idx) for idx, m in enumerate(MODELS_TO_COMPARE)],
394
  label="选择要评估的模型",
395
+ interactive=True,
396
+ value=MODELS_TO_COMPARE[0]["name"] if MODELS_TO_COMPARE else None # 默认选中第一个模型
397
  )
398
 
399
  # GRACE 维度滑块
 
406
 
407
  update_grace_button = gr.Button("更新 GRACE 评分到排行榜")
408
 
409
+ # Leaderboard 组件需要在被引用的地方先定义
410
+ leaderboard = init_leaderboard(LEADERBOARD_DF) # 在这里初始化 Leaderboard 组件
411
+
412
  # 更新排行榜的逻辑
413
  update_grace_button.click(
414
  fn=update_leaderboard,
 
425
 
426
 
427
  with gr.TabItem("🏅 LLM Benchmark", elem_id="llm-benchmark-tab-table", id=1): # 调整 ID
428
+ # Leaderboard 已经在一开始初始化了,这里只是再次引用
429
+ leaderboard_display = leaderboard # 将初始化后的 Leaderboard 实例赋给一个新的变量以便在这里显示
430
 
431
  with gr.TabItem("📝 关于", elem_id="llm-benchmark-tab-table", id=2):
432
  gr.Markdown(LLM_BENCHMARKS_TEXT, elem_classes="markdown-text")
 
434
  with gr.TabItem("🚀 在此提交!", elem_id="llm-benchmark-tab-table", id=3): # 这个标签页保留,但内容将被简化
435
  gr.Markdown("## 在此演示中,模型已预先加载进行比较,无需提交新模型。", elem_classes="markdown-text")
436
  gr.Markdown("您可以在 **💬 模型比较与生成** 标签页中输入提示词并评估模型。", elem_classes="markdown-text")
 
 
 
 
437
  gr.Markdown("(本页面仅用于保留原始结构,实际提交功能已禁用)")
438
 
439