feat(docs): 更新 README 文档内容与使用说明
Browse files新增关于数据处理脚本的详细使用说明,包括合并 CSV、统计类别和筛选处理流程。
更新配置参数及字典映射示例,完善模型类型与数据集名称显示映射。
fix(gitignore): 忽略 data 和 outdata 目录
将生成的数据目录 `data` 与输出目录 `outdata` 添加至 `.gitignore` 文件中,
避免误提交临时数据文件。
chore(config): 重命名配置文件
将 `tsconfig.app.json` 重命名为 `config.app.json`,便于统一管理非 TypeScript 配置。
- .gitignore +3 -0
- README.md +63 -36
- tsconfig.app.json → config.app.json +0 -0
- finalData/filtered.csv +244 -0
- package-lock.json +26 -0
- package.json +1 -0
- scripts/count_column.js +135 -0
- scripts/encrypt_csv.js +0 -0
- scripts/filter_by_series.js +143 -0
- scripts/merge_csv.js +248 -0
- src/App.vue +7 -108
- src/components/Chart.vue +230 -0
- src/composables/useLeaderboardData.js +254 -0
- src/main.js +2 -0
- src/router/index.js +17 -0
- src/utils/csvUtils.js +42 -0
- src/views/Leaderboard.vue +174 -0
- tsconfig.json +0 -11
.gitignore
CHANGED
|
@@ -28,3 +28,6 @@ coverage
|
|
| 28 |
*.sw?
|
| 29 |
|
| 30 |
*.tsbuildinfo
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
*.sw?
|
| 29 |
|
| 30 |
*.tsbuildinfo
|
| 31 |
+
|
| 32 |
+
data
|
| 33 |
+
outdata
|
README.md
CHANGED
|
@@ -1,50 +1,77 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
--
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
|
| 24 |
-
##
|
| 25 |
|
| 26 |
-
|
| 27 |
|
| 28 |
-
|
| 29 |
|
| 30 |
```sh
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
### Compile and Hot-Reload for Development
|
| 35 |
|
| 36 |
-
|
| 37 |
-
npm run
|
| 38 |
```
|
| 39 |
|
| 40 |
-
|
| 41 |
|
|
|
|
| 42 |
```sh
|
| 43 |
-
|
| 44 |
```
|
|
|
|
|
|
|
| 45 |
|
| 46 |
-
##
|
|
|
|
| 47 |
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
|
|
|
|
|
|
|
|
| 1 |
+
# 使用
|
| 2 |
+
1. 配置参数及字典映射: `src/composables/useLeaderboardData.js`
|
| 3 |
+
```js
|
| 4 |
+
DEFAULT_HIDDEN: new Set(['seq_len', 'uniform_entropy', 'entropy_gain', 'information_capacity', 'data_name']) // 默认隐藏的列
|
| 5 |
+
|
| 6 |
+
// 模型类型映射对象:键为模型类型,值为包含的 model_series 数组
|
| 7 |
+
const modelTypeMapping = {
|
| 8 |
+
'Qwen1.5':['Qwen1.5'],
|
| 9 |
+
'Qwen2.5':['Qwen2.5'],
|
| 10 |
+
'Gemma-3': ['gemma-3'],
|
| 11 |
+
'Qwen2': ['Qwen2'],
|
| 12 |
+
'Hunyuan': ['Hunyuan'],
|
| 13 |
+
'Qwen3': ['Qwen3'],
|
| 14 |
+
'InternLM2.5': ['internlm2.5'],
|
| 15 |
+
'Llama-3': ['Llama-3.1','Llama-3.2'],
|
| 16 |
+
'DeepSeek-V2': ['DeepSeek-V2'],
|
| 17 |
+
'DeepSeek-V3.1': ['DeepSeek-V3.1-Base'],
|
| 18 |
+
'GLM-4': ['glm-4','GLM-4'],
|
| 19 |
+
'GLM-4.5': ['GLM-4.5-Air-Base','GLM-4.5-Base'],
|
| 20 |
+
'Llama-4': ['Llama-4'],
|
| 21 |
+
'Seed-OSS': ['Seed-OSS'],
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
const autoShowSeries = ['Qwen3','Llama-3','InternLM2.5','GLM-4','Seed-OSS','Gemma-3','Hunyuan','DeepSeek-V3.1','DeepSeek-V2','GLM-4.5']
|
| 25 |
+
|
| 26 |
+
// 表头显示名称映射(raw header -> 显示名),可以在此添加或由用户修改
|
| 27 |
+
const headerDisplayMap = reactive({
|
| 28 |
+
'model_name': 'MODEL NAME',
|
| 29 |
+
'model_series': 'MODEL SERIES',
|
| 30 |
+
'model_size (B)': 'MODEL SIZE (B)',
|
| 31 |
+
'BF16_TFLOPs': 'BF16 TFLOPs',
|
| 32 |
+
'ic': 'IC',
|
| 33 |
+
})
|
| 34 |
+
|
| 35 |
+
// 数据集名称显示映射(raw data_name -> 显示名)
|
| 36 |
+
const dataNameDisplayMap = reactive({
|
| 37 |
+
'data_part_0000': 'Data Part 0000',
|
| 38 |
+
'NextCoderDataset_v1_lo': 'NextCoder v1',
|
| 39 |
+
'IndustryCorpus_batch_aa_long': 'Industry Corpus AA',
|
| 40 |
+
'CC-MAIN-2013-20_train-00000-of-00014_long': 'CC-MAIN (2013-20)',
|
| 41 |
+
'NextCoderDataset_v1_long': 'NextCoder v1',
|
| 42 |
+
})
|
| 43 |
+
```
|
| 44 |
|
| 45 |
+
# 安装
|
| 46 |
|
| 47 |
+
## 1 合并 CSV(脚本)
|
| 48 |
|
| 49 |
+
仓库包含一个小脚本 `scripts/merge_csv.js`,用于把多个 CSV 合并为一个文件(简单合并,保留首次出现的列顺序)。
|
| 50 |
|
| 51 |
+
示例:
|
| 52 |
|
| 53 |
```sh
|
| 54 |
+
# 使用目录
|
| 55 |
+
npm run merge-csv -- --inputDir ./data --out ./merged.csv
|
|
|
|
|
|
|
| 56 |
|
| 57 |
+
# 或直接传文件
|
| 58 |
+
npm run merge-csv -- file1.csv file2.csv --out merged.csv
|
| 59 |
```
|
| 60 |
|
| 61 |
+
说明:`npm run merge-csv` 后面的参数会传递给脚本(注意 `--`),脚本会把所有 CSV 的表头合并成最终输出的表头,行数按各文件合并。该实现为轻量版,能处理普通带引号字段的 CSV,但不保证支持所有复杂嵌套换行场景。
|
| 62 |
|
| 63 |
+
## 2 统计类别
|
| 64 |
```sh
|
| 65 |
+
node .\scripts\count_column.js --file .\data\entropy_calc4_part3.csv --column model_series --out .\p3_model_series.csv
|
| 66 |
```
|
| 67 |
+
统计后需要手动合并类目,如Llama-3.2 Llama-3.1合并为Llama-3
|
| 68 |
+
删除TingLLama
|
| 69 |
|
| 70 |
+
## 3. 筛选处理
|
| 71 |
+
因为在步骤`2`中我们删除了TinyLlama,执行此脚本从merged.csv中提取出最终表
|
| 72 |
|
| 73 |
+
使用默认路径(merged.csv 在 outdata):
|
| 74 |
+
`node .\scripts\filter_by_series.js`
|
| 75 |
+
|
| 76 |
+
指定输入文件与 series 列表并输出到自定义文件:
|
| 77 |
+
`node .\scripts\filter_by_series.js --file .\outdata\merged.csv --series .\outdata\p3_model_series.csv --out .\outdata\filtered.csv`
|
tsconfig.app.json → config.app.json
RENAMED
|
File without changes
|
finalData/filtered.csv
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name,model_series,model_size (B),data_name,seq_len,uniform_entropy,constant,conditional_entropy,entropy_gain,BF16_TFLOPs,information_capacity,ic
|
| 2 |
+
DeepSeek-V2-236B-A21B,DeepSeek-V2,236.0,data_part_0000,1024,16.643856189774723,32.12,2.251732349395752,29.868267650604245,37.7957122048,0.8508680957071698,0.16717145364366684
|
| 3 |
+
DeepSeek-V3.1-Base-671B-A37B,DeepSeek-V3.1-Base,671.0,data_part_0000,1024,16.980139577639157,34.94,2.2772045135498047,32.66279548645019,78.006806642688,0.9035685069448164,0.2396435781777227
|
| 4 |
+
GLM-4-32B-Base-0414,GLM-4,32.0,data_part_0000,1024,17.20945336562895,34.82,2.760892629623413,32.05910737037659,65.5704981504,0.8930583115634292,0.22449947647473625
|
| 5 |
+
GLM-4.5-Air-Base-106B-A12B,GLM-4.5-Air-Base,106.0,data_part_0000,1024,17.20945336562895,34.82,2.5816900730133057,32.238309926986695,17.749377810432,0.9478278177014319,0.2422118075460074
|
| 6 |
+
GLM-4.5-Base-355B-A32B,GLM-4.5-Base,355.0,data_part_0000,1024,17.20945336562895,34.82,2.2813751697540283,32.53862483024597,48.828658745344,0.9172839724996397,0.2407091186192849
|
| 7 |
+
Hunyuan-0.5B-Pretrain,Hunyuan,0.5,data_part_0000,1024,16.882475884200698,34.95,3.9885313510894775,30.961468648910525,1.000647688192,1.0367464096541894,0.23310514464022852
|
| 8 |
+
Hunyuan-1.8B-Pretrain,Hunyuan,1.8,data_part_0000,1024,16.882475884200698,34.95,3.584585189819336,31.365414810180667,3.805148086272,0.9866102441707987,0.23168173442848555
|
| 9 |
+
Hunyuan-4B-Pretrain,Hunyuan,4.0,data_part_0000,1024,16.882475884200698,34.95,3.2984426021575928,31.65155739784241,8.297562243072,0.961590897404844,0.23245832273762004
|
| 10 |
+
Hunyuan-7B-Pretrain,Hunyuan,7.0,data_part_0000,1024,16.967654067617747,34.95,2.9976937770843506,31.952306222915652,15.643394965504,0.9444789153560366,0.23506239279253738
|
| 11 |
+
Llama-3.1-8B,Llama-3.1,8.0,data_part_0000,1024,16.968666793195208,32.84,2.821995973587036,30.018004026412967,15.644149940224,0.8873010085049908,0.177885945951797
|
| 12 |
+
Llama-3.1-70B,Llama-3.1,70.0,data_part_0000,1024,16.968666793195208,32.84,2.4085302352905273,30.431469764709476,143.712558514176,0.8218018438545803,0.1736818416001239
|
| 13 |
+
Llama-3.2-1B,Llama-3.2,1.0,data_part_0000,1024,16.968666793195208,32.84,3.366785764694214,29.47321423530579,2.59946184704,0.9434039861539558,0.1751913478264881
|
| 14 |
+
Llama-3.2-3B,Llama-3.2,3.0,data_part_0000,1024,16.968666793195208,32.84,3.0805253982543945,29.75947460174561,6.759565492224,0.91230572910113,0.17656231321626759
|
| 15 |
+
Llama-4-109B-A17B,Llama-4,109.0,data_part_0000,1024,17.624338545312984,34.45,3.977431058883667,30.472568941116336,41.80362133504,0.8645020910276588,0.18362578470913662
|
| 16 |
+
Qwen1.5-0.5B,Qwen1.5,0.5,data_part_0000,1024,17.213104219641906,33.8,3.7239813804626465,30.07601861953735,1.001482354688,1.0070565057479184,0.20344760911524865
|
| 17 |
+
Qwen1.5-1.8B,Qwen1.5,1.8,data_part_0000,1024,17.213104219641906,33.8,3.41902232170105,30.380977678298947,3.227030388736,0.9628449329246426,0.20222825248457876
|
| 18 |
+
Qwen1.5-4B,Qwen1.5,4.0,data_part_0000,1024,17.213104219641906,33.8,3.1751632690429688,30.62483673095703,7.50725890048,0.9344982175271936,0.20215285295643626
|
| 19 |
+
Qwen1.5-7B,Qwen1.5,7.0,data_part_0000,1024,17.213104219641906,33.8,3.0355875492095947,30.764412450790402,14.812000026624,0.9114886780861936,0.2004161585293765
|
| 20 |
+
Qwen1.5-14B,Qwen1.5,14.0,data_part_0000,1024,17.214319120800766,33.8,2.944247007369995,30.855752992630002,27.84707477504,0.8901744527733408,0.1977853585365842
|
| 21 |
+
Qwen1.5-14.3B-A2.7B,Qwen1.5,14.3,data_part_0000,1024,17.213104219641906,33.8,2.895214319229126,30.90478568077087,4.966492143616,0.960510822111029,0.2145985233239858
|
| 22 |
+
Qwen1.5-32B,Qwen1.5,32.0,data_part_0000,1024,17.214319120800766,33.8,2.716146230697632,31.083853769302365,65.67474757632,0.865835765616715,0.19731961157010755
|
| 23 |
+
Qwen1.5-72B,Qwen1.5,72.0,data_part_0000,1024,17.214319120800766,33.8,2.5710153579711914,31.228984642028806,146.860769542144,0.8426273405857749,0.19505405551515287
|
| 24 |
+
Qwen2-0.5B,Qwen2,0.5,data_part_0000,1024,17.213104219641906,33.8,3.6743340492248535,30.125665950775144,1.056685686784,1.0061110923598948,0.2045797251830582
|
| 25 |
+
Qwen2-1.5B,Qwen2,1.5,data_part_0000,1024,17.213104219641906,33.8,3.2716164588928223,30.528383541107175,3.251336380416,0.9671847407204981,0.2068289313132992
|
| 26 |
+
Qwen2-7B,Qwen2,7.0,data_part_0000,1024,17.214319120800766,33.8,2.885551691055298,30.9144483089447,14.69019324416,0.9162573469250713,0.20493375782388282
|
| 27 |
+
Qwen2-57B-A14B,Qwen2,57.0,data_part_0000,1024,17.213104219641906,33.8,2.667733907699585,31.132266092300412,27.316457570304,0.8988714835216332,0.20592752818731272
|
| 28 |
+
Qwen2-72B,Qwen2,72.0,data_part_0000,1024,17.214319120800766,33.8,2.5179216861724854,31.282078313827512,147.719763001344,0.8438683484691111,0.19644204385857722
|
| 29 |
+
Qwen2.5-0.5B,Qwen2.5,0.5,data_part_0000,1024,17.213104219641906,33.8,3.647934675216675,30.152065324783322,1.056685686784,1.0069927559574525,0.20546138878061604
|
| 30 |
+
Qwen2.5-1.5B,Qwen2.5,1.5,data_part_0000,1024,17.213104219641906,33.8,3.237604856491089,30.56239514350891,3.251336380416,0.96826227903189,0.20790646962469111
|
| 31 |
+
Qwen2.5-3B,Qwen2.5,3.0,data_part_0000,1024,17.213104219641906,33.8,3.0671043395996094,30.732895660400388,6.473975332864,0.943949100891232,0.20679830743116587
|
| 32 |
+
Qwen2.5-7B,Qwen2.5,7.0,data_part_0000,1024,17.214319120800766,33.8,2.9005396366119385,30.89946036338806,14.69019324416,0.9158131269572962,0.20448953785610768
|
| 33 |
+
Qwen2.5-14B,Qwen2.5,14.0,data_part_0000,1024,17.214319120800766,33.8,2.7024266719818115,31.097573328018186,29.16769333248,0.8954240676966669,0.20436764994853804
|
| 34 |
+
Qwen2.5-32B,Qwen2.5,32.0,data_part_0000,1024,17.214319120800766,33.8,2.6616430282592773,31.13835697174072,66.19014365184,0.8670815610326332,0.19877534681365405
|
| 35 |
+
Qwen2.5-72B,Qwen2.5,72.0,data_part_0000,1024,17.214319120800766,33.8,2.5070900917053223,31.292909908294675,147.719763001344,0.8441605426015659,0.19673423799103204
|
| 36 |
+
Qwen3-0.6B-Base,Qwen3,0.6,data_part_0000,1024,17.213104219641906,33.8,3.590059757232666,30.20994024276733,1.100258213888,1.0069651380399516,0.2069912513406959
|
| 37 |
+
Qwen3-1.7B-Base,Qwen3,1.7,data_part_0000,1024,17.213104219641906,33.8,3.2383148670196533,30.561685132980344,3.643625439232,0.9632246645425145,0.20680721411621455
|
| 38 |
+
Qwen3-4B-Base,Qwen3,4.0,data_part_0000,1024,17.213104219641906,33.8,3.0264272689819336,30.773572731018064,7.70592210944,0.9379583189755558,0.2064540554902994
|
| 39 |
+
Qwen3-8B-Base,Qwen3,8.0,data_part_0000,1024,17.213104219641906,33.8,2.868133306503296,30.9318666934967,15.808398884864,0.9139067907596993,0.20480755676991014
|
| 40 |
+
Seed-OSS-36B-Base,Seed-OSS,36.0,data_part_0000,1024,17.24317398347295,32.94,2.6119723320007324,30.328027667999265,65.5351611392,0.8448545883860521,0.17628126923611978
|
| 41 |
+
gemma-3-0.27b-pt,gemma-3,0.27,data_part_0000,1024,18.0,32.35,4.019983768463135,28.330016231536867,0.550436864,0.9768369471156615,0.14930170890150166
|
| 42 |
+
gemma-3-1b-pt,gemma-3,1.0,data_part_0000,1024,18.0,32.35,3.4504594802856445,28.899540519714357,2.129873338368,0.9336314991259737,0.15828505499348264
|
| 43 |
+
gemma-3-4b-pt,gemma-3,4.0,data_part_0000,1024,18.000352177480302,32.35,3.0016162395477295,29.348383760452272,8.4021870592,0.8911298673762733,0.16239751224568966
|
| 44 |
+
gemma-3-12b-pt,gemma-3,12.0,data_part_0000,1024,18.000352177480302,32.35,2.7593374252319336,29.590662574768068,24.19152912384,0.8587067389873845,0.1622383282641156
|
| 45 |
+
gemma-3-27b-pt,gemma-3,27.0,data_part_0000,1024,18.000352177480302,32.35,2.646754026412964,29.703245973587038,58.631962755072,0.8311680223788541,0.15959049328217387
|
| 46 |
+
glm-4-9b-hf,glm-4,9.0,data_part_0000,1024,17.20945336562895,34.82,3.027162790298462,31.79283720970154,18.321994940416,0.9334734300010908,0.2288064582471567
|
| 47 |
+
internlm2.5-1.8b,internlm2.5,1.8,data_part_0000,1024,16.497851836951117,33.59,3.6355276107788086,29.954472389221195,3.583512674304,0.944801571812738,0.18781151607517943
|
| 48 |
+
internlm2.5-7b,internlm2.5,7.0,data_part_0000,1024,16.497851836951117,33.59,3.1548197269439697,30.435180273056034,15.344575971328,0.9003746927416127,0.1903742119845155
|
| 49 |
+
internlm2.5-20b,internlm2.5,20.0,data_part_0000,1024,16.497851836951117,33.59,2.840322256088257,30.749677743911747,40.127812337664,0.8738268849599932,0.19180851020833786
|
| 50 |
+
DeepSeek-V2-236B-A21B,DeepSeek-V2,236.0,eng_Latn_000_00027_long,1024,16.643856189774723,33.77,2.3624660968780518,31.40753390312195,37.7957122048,0.8947177277108376,0.1255590053893968
|
| 51 |
+
DeepSeek-V3.1-Base-671B-A37B,DeepSeek-V3.1-Base,671.0,eng_Latn_000_00027_long,1024,16.980139577639157,37.28,2.3429439067840576,34.93705609321594,78.006806642688,0.9664826032508479,0.21956705838786758
|
| 52 |
+
GLM-4-32B-Base-0414,GLM-4,32.0,eng_Latn_000_00027_long,1024,17.20945336562895,36.64,2.7358038425445557,33.904196157455445,65.5704981504,0.9444562453186229,0.19232755584384342
|
| 53 |
+
GLM-4.5-Air-Base-106B-A12B,GLM-4.5-Air-Base,106.0,eng_Latn_000_00027_long,1024,17.20945336562895,36.64,2.6314516067504883,34.00854839324951,17.749377810432,0.9998740095175996,0.20605599809274716
|
| 54 |
+
GLM-4.5-Base-355B-A32B,GLM-4.5-Base,355.0,eng_Latn_000_00027_long,1024,17.20945336562895,36.64,2.410081386566162,34.22991861343384,48.828658745344,0.9649625910091848,0.20381588039378568
|
| 55 |
+
Hunyuan-0.5B-Pretrain,Hunyuan,0.5,eng_Latn_000_00027_long,1024,16.882475884200698,36.61,3.9755191802978516,32.63448081970215,1.000647688192,1.0927673103758033,0.18867088723509726
|
| 56 |
+
Hunyuan-1.8B-Pretrain,Hunyuan,1.8,eng_Latn_000_00027_long,1024,16.882475884200698,36.61,3.5614101886749268,33.04858981132507,3.805148086272,1.0395551106395262,0.190260537179424
|
| 57 |
+
Hunyuan-4B-Pretrain,Hunyuan,4.0,eng_Latn_000_00027_long,1024,16.882475884200698,36.61,3.2879159450531006,33.3220840549469,8.297562243072,1.0123423725108784,0.1920682260102515
|
| 58 |
+
Hunyuan-7B-Pretrain,Hunyuan,7.0,eng_Latn_000_00027_long,1024,16.967654067617747,36.61,3.0015690326690674,33.60843096733093,15.643394965504,0.9934323427358054,0.19533875485186877
|
| 59 |
+
Llama-3.1-8B,Llama-3.1,8.0,eng_Latn_000_00027_long,1024,16.968666793195208,36.74,2.777745246887207,33.962254753112795,15.644149940224,1.003888961671959,0.20579701629961603
|
| 60 |
+
Llama-3.1-70B,Llama-3.1,70.0,eng_Latn_000_00027_long,1024,16.968666793195208,36.74,2.4633891582489014,34.2766108417511,143.712558514176,0.9256398790012853,0.19650487646502188
|
| 61 |
+
Llama-3.2-1B,Llama-3.2,1.0,eng_Latn_000_00027_long,1024,16.968666793195208,36.74,3.2581868171691895,33.48181318283081,2.59946184704,1.071714668382077,0.2074754502636758
|
| 62 |
+
Llama-3.2-3B,Llama-3.2,3.0,eng_Latn_000_00027_long,1024,16.968666793195208,36.74,3.0010647773742676,33.738935222625734,6.759565492224,1.0342999770421983,0.20658863417172807
|
| 63 |
+
Llama-4-109B-A17B,Llama-4,109.0,eng_Latn_000_00027_long,1024,17.624338545312984,37.49,3.8621890544891357,33.627810945510866,41.80362133504,0.9540158210898754,0.18802997648153794
|
| 64 |
+
Qwen1.5-0.5B,Qwen1.5,0.5,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.7834298610687256,31.676570138931275,1.001482354688,1.0606488991022474,0.15658889039049387
|
| 65 |
+
Qwen1.5-1.8B,Qwen1.5,1.8,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.4750893115997314,31.98491068840027,3.227030388736,1.0136773579992886,0.15798359250421692
|
| 66 |
+
Qwen1.5-4B,Qwen1.5,4.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.1637372970581055,32.296262702941895,7.50725890048,0.9855007618107892,0.161612226668687
|
| 67 |
+
Qwen1.5-7B,Qwen1.5,7.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.029648780822754,32.43035121917725,14.812000026624,0.9608471479805359,0.16089056347911662
|
| 68 |
+
Qwen1.5-14B,Qwen1.5,14.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.9397261142730713,32.52027388572693,27.84707477504,0.9381951241695716,0.1592573931532204
|
| 69 |
+
Qwen1.5-14.3B-A2.7B,Qwen1.5,14.3,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,2.9040884971618652,32.555911502838136,4.966492143616,1.0118272828412307,0.17267594670580705
|
| 70 |
+
Qwen1.5-32B,Qwen1.5,32.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.746184825897217,32.713815174102784,65.67474757632,0.9112380793492809,0.1591574060468475
|
| 71 |
+
Qwen1.5-72B,Qwen1.5,72.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.643311023712158,32.81668897628784,146.860769542144,0.8854671285631495,0.15694718285869966
|
| 72 |
+
Qwen2-0.5B,Qwen2,0.5,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.685828685760498,31.774171314239503,1.056685686784,1.0611664572672252,0.1594436691932843
|
| 73 |
+
Qwen2-1.5B,Qwen2,1.5,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.272855758666992,32.18714424133301,3.251336380416,1.0197367546718759,0.16433646908877708
|
| 74 |
+
Qwen2-7B,Qwen2,7.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.875864267349243,32.58413573265076,14.69019324416,0.965744349046226,0.16550531130738882
|
| 75 |
+
Qwen2-57B-A14B,Qwen2,57.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,2.706306219100952,32.75369378089905,27.316457570304,0.945686421681055,0.16612447192994448
|
| 76 |
+
Qwen2-72B,Qwen2,72.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.5860800743103027,32.8739199256897,147.719763001344,0.8868100206479949,0.15845542796114429
|
| 77 |
+
Qwen2.5-0.5B,Qwen2.5,0.5,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.5750572681427,31.8849427318573,1.056685686784,1.06486590584253,0.16314311776858886
|
| 78 |
+
Qwen2.5-1.5B,Qwen2.5,1.5,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.1653454303741455,32.294654569625855,3.251336380416,1.0231428422839066,0.16774255670080795
|
| 79 |
+
Qwen2.5-3B,Qwen2.5,3.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.0068860054016113,32.45311399459839,6.473975332864,0.9967849471403407,0.1674903044977664
|
| 80 |
+
Qwen2.5-7B,Qwen2.5,7.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.85302734375,32.60697265625,14.69019324416,0.9664212008153361,0.16618216307649897
|
| 81 |
+
Qwen2.5-14B,Qwen2.5,14.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.686429977416992,32.77357002258301,29.16769333248,0.9436827456926532,0.16624427572600822
|
| 82 |
+
Qwen2.5-32B,Qwen2.5,32.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.6482460498809814,32.81175395011902,66.19014365184,0.913679127678695,0.16183463668234332
|
| 83 |
+
Qwen2.5-72B,Qwen2.5,72.0,eng_Latn_000_00027_long,1024,17.214319120800766,35.46,2.540452718734741,32.91954728126526,147.719763001344,0.888040868573388,0.15968627588653747
|
| 84 |
+
Qwen3-0.6B-Base,Qwen3,0.6,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.4984476566314697,31.96155234336853,1.100258213888,1.0653503022110928,0.16537967967443015
|
| 85 |
+
Qwen3-1.7B-Base,Qwen3,1.7,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,3.1593053340911865,32.300694665908814,3.643625439232,1.018033712757714,0.1670640810281264
|
| 86 |
+
Qwen3-4B-Base,Qwen3,4.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,2.9608263969421387,32.49917360305786,7.70592210944,0.9905535020993471,0.16761120567843357
|
| 87 |
+
Qwen3-8B-Base,Qwen3,8.0,eng_Latn_000_00027_long,1024,17.213104219641906,35.46,2.8185057640075684,32.64149423599243,15.808398884864,0.9644191066260146,0.16668246838750186
|
| 88 |
+
Seed-OSS-36B-Base,Seed-OSS,36.0,eng_Latn_000_00027_long,1024,17.24317398347295,34.98,2.6390929222106934,32.3409070777893,65.5351611392,0.9009278162215472,0.14878283217787336
|
| 89 |
+
gemma-3-0.27b-pt,gemma-3,0.27,eng_Latn_000_00027_long,1024,18.0,35.77,3.8199846744537354,31.950015325546268,0.550436864,1.101656814307166,0.17067967131623638
|
| 90 |
+
gemma-3-1b-pt,gemma-3,1.0,eng_Latn_000_00027_long,1024,18.0,35.77,3.2813682556152344,32.48863174438477,2.129873338368,1.0495810457391124,0.17731629609006008
|
| 91 |
+
gemma-3-4b-pt,gemma-3,4.0,eng_Latn_000_00027_long,1024,18.000352177480302,35.77,2.840498447418213,32.92950155258179,8.4021870592,0.9998663841537142,0.18004248463180753
|
| 92 |
+
gemma-3-12b-pt,gemma-3,12.0,eng_Latn_000_00027_long,1024,18.000352177480302,35.77,2.6129720211029053,33.1570279788971,24.19152912384,0.9622009408653925,0.17867397880171507
|
| 93 |
+
gemma-3-27b-pt,gemma-3,27.0,eng_Latn_000_00027_long,1024,18.000352177480302,35.77,2.5094683170318604,33.26053168296814,58.631962755072,0.9307094035037331,0.17518468326996775
|
| 94 |
+
glm-4-9b-hf,glm-4,9.0,eng_Latn_000_00027_long,1024,17.20945336562895,36.64,2.98236083984375,33.65763916015625,18.321994940416,0.9882261109739138,0.19547576775073794
|
| 95 |
+
internlm2.5-1.8b,internlm2.5,1.8,eng_Latn_000_00027_long,1024,16.497851836951117,35.25,3.5973238945007324,31.652676105499268,3.583512674304,0.9983650437226992,0.14675123101794574
|
| 96 |
+
internlm2.5-7b,internlm2.5,7.0,eng_Latn_000_00027_long,1024,16.497851836951117,35.25,3.087465524673462,32.16253447532654,15.344575971328,0.9514756224936899,0.15272508164195545
|
| 97 |
+
internlm2.5-20b,internlm2.5,20.0,eng_Latn_000_00027_long,1024,16.497851836951117,35.25,2.8226184844970703,32.42738151550293,40.127812337664,0.921502918277299,0.15423224668168684
|
| 98 |
+
DeepSeek-V2-236B-A21B,DeepSeek-V2,236.0,IndustryCorpus_batch_aa_long,1024,16.643856189774723,30.81,2.1160805225372314,28.693919477462767,37.7957122048,0.8174140164325766,0.28470038282476384
|
| 99 |
+
DeepSeek-V3.1-Base-671B-A37B,DeepSeek-V3.1-Base,671.0,IndustryCorpus_batch_aa_long,1024,16.980139577639157,33.98,2.5056979656219482,31.47430203437805,78.006806642688,0.8706905723403515,0.3533823986759911
|
| 100 |
+
GLM-4-32B-Base-0414,GLM-4,32.0,IndustryCorpus_batch_aa_long,1024,17.20945336562895,33.23,3.1385788917541504,30.091421108245846,65.5704981504,0.8382452267621728,0.3173264677555663
|
| 101 |
+
GLM-4.5-Air-Base-106B-A12B,GLM-4.5-Air-Base,106.0,IndustryCorpus_batch_aa_long,1024,17.20945336562895,33.23,2.8672702312469482,30.36272976875305,17.749377810432,0.8926845098689524,0.3428920352895176
|
| 102 |
+
GLM-4.5-Base-355B-A32B,GLM-4.5-Base,355.0,IndustryCorpus_batch_aa_long,1024,17.20945336562895,33.23,2.4935522079467773,30.73644779205322,48.828658745344,0.866479486404565,0.3393149127561219
|
| 103 |
+
Hunyuan-0.5B-Pretrain,Hunyuan,0.5,IndustryCorpus_batch_aa_long,1024,16.882475884200698,35.12,4.691961765289307,30.42803823471069,1.000647688192,1.0188844641181696,0.39271397846145845
|
| 104 |
+
Hunyuan-1.8B-Pretrain,Hunyuan,1.8,IndustryCorpus_batch_aa_long,1024,16.882475884200698,35.12,4.18785285949707,30.932147140502927,3.805148086272,0.9729816559962429,0.3847665254886905
|
| 105 |
+
Hunyuan-4B-Pretrain,Hunyuan,4.0,IndustryCorpus_batch_aa_long,1024,16.882475884200698,35.12,3.870864152908325,31.249135847091672,8.297562243072,0.9493651198464914,0.3812493220849461
|
| 106 |
+
Hunyuan-7B-Pretrain,Hunyuan,7.0,IndustryCorpus_batch_aa_long,1024,16.967654067617747,35.12,3.29822039604187,31.821779603958127,15.643394965504,0.9406206761842525,0.3878669690201927
|
| 107 |
+
Llama-3.1-8B,Llama-3.1,8.0,IndustryCorpus_batch_aa_long,1024,16.968666793195208,23.9,3.213531494140625,20.686468505859374,15.644149940224,0.6114705145453709,0.05871794497267406
|
| 108 |
+
Llama-3.1-70B,Llama-3.1,70.0,IndustryCorpus_batch_aa_long,1024,16.968666793195208,23.9,2.785083770751953,21.114916229248045,143.712558514176,0.5702083147542876,0.06521481299769029
|
| 109 |
+
Llama-3.2-1B,Llama-3.2,1.0,IndustryCorpus_batch_aa_long,1024,16.968666793195208,23.9,3.962632656097412,19.937367343902586,2.59946184704,0.6381723986901376,0.039606717993319066
|
| 110 |
+
Llama-3.2-3B,Llama-3.2,3.0,IndustryCorpus_batch_aa_long,1024,16.968666793195208,23.9,3.5783565044403076,20.32164349555969,6.759565492224,0.6229798084090618,0.04971306353210651
|
| 111 |
+
Llama-4-109B-A17B,Llama-4,109.0,IndustryCorpus_batch_aa_long,1024,17.624338545312984,29.49,4.475708484649658,25.01429151535034,41.80362133504,0.7096516005061037,0.17913547849958852
|
| 112 |
+
Qwen1.5-0.5B,Qwen1.5,0.5,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,4.202773571014404,26.957226428985596,1.001482354688,0.9026277911197566,0.27648252582680144
|
| 113 |
+
Qwen1.5-1.8B,Qwen1.5,1.8,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.8544676303863525,27.305532369613648,3.227030388736,0.8653768078593433,0.27272964434979374
|
| 114 |
+
Qwen1.5-4B,Qwen1.5,4.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.698274850845337,27.461725149154663,7.50725890048,0.8379777965041504,0.2673586999427686
|
| 115 |
+
Qwen1.5-7B,Qwen1.5,7.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.5112204551696777,27.648779544830322,14.812000026624,0.8191786389005619,0.26513463407920856
|
| 116 |
+
Qwen1.5-14B,Qwen1.5,14.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,3.409911870956421,27.75008812904358,27.84707477504,0.8005774326941106,0.26109093010130446
|
| 117 |
+
Qwen1.5-14.3B-A2.7B,Qwen1.5,14.3,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.3413312435150146,27.818668756484985,4.966492143616,0.8645952983893754,0.28340529891780436
|
| 118 |
+
Qwen1.5-32B,Qwen1.5,32.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,3.0849609375,28.0750390625,65.67474757632,0.7820257141154489,0.2611402107541339
|
| 119 |
+
Qwen1.5-72B,Qwen1.5,72.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,2.940380811691284,28.219619188308716,146.860769542144,0.7614279792172932,0.2568604612664335
|
| 120 |
+
Qwen2-0.5B,Qwen2,0.5,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,4.184194564819336,26.975805435180664,1.056685686784,0.9009147587981956,0.27638823520624384
|
| 121 |
+
Qwen2-1.5B,Qwen2,1.5,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.7292630672454834,27.430736932754517,3.251336380416,0.8690466742975209,0.2766027728010786
|
| 122 |
+
Qwen2-7B,Qwen2,7.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,3.2501893043518066,27.909810695648194,14.69019324416,0.8272044464651339,0.27296481662379113
|
| 123 |
+
Qwen2-57B-A14B,Qwen2,57.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.0333728790283203,28.12662712097168,27.316457570304,0.8120906769758203,0.27217184511116227
|
| 124 |
+
Qwen2-72B,Qwen2,72.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,2.81121826171875,28.34878173828125,147.719763001344,0.764739458376084,0.2602864627003764
|
| 125 |
+
Qwen2.5-0.5B,Qwen2.5,0.5,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,4.130499839782715,27.029500160217285,1.056685686784,0.9027080090635617,0.27818148547161
|
| 126 |
+
Qwen2.5-1.5B,Qwen2.5,1.5,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.6513099670410156,27.508690032958985,3.251336380416,0.8715163448225947,0.2790724433261523
|
| 127 |
+
Qwen2.5-3B,Qwen2.5,3.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.4603397846221924,27.699660215377808,6.473975332864,0.8507844377641656,0.2764211111931975
|
| 128 |
+
Qwen2.5-7B,Qwen2.5,7.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,3.2639808654785156,27.896019134521485,14.69019324416,0.8267956855168023,0.27255605567545954
|
| 129 |
+
Qwen2.5-14B,Qwen2.5,14.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,3.025247812271118,28.134752187728882,29.16769333248,0.8101125442118022,0.27166441871638514
|
| 130 |
+
Qwen2.5-32B,Qwen2.5,32.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,2.9765195846557617,28.18348041534424,66.19014365184,0.7847997958288938,0.26407787058327253
|
| 131 |
+
Qwen2.5-72B,Qwen2.5,72.0,IndustryCorpus_batch_aa_long,1024,17.214319120800766,31.16,2.777780532836914,28.382219467163086,147.719763001344,0.765641477761273,0.2611884820855654
|
| 132 |
+
Qwen3-0.6B-Base,Qwen3,0.6,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.992006778717041,27.16799322128296,1.100258213888,0.9055702137936984,0.28225722707386164
|
| 133 |
+
Qwen3-1.7B-Base,Qwen3,1.7,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.562650203704834,27.597349796295166,3.643625439232,0.869796540476515,0.28042127701935626
|
| 134 |
+
Qwen3-4B-Base,Qwen3,4.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.315218687057495,27.844781312942505,7.70592210944,0.8486906769263349,0.2787269382940727
|
| 135 |
+
Qwen3-8B-Base,Qwen3,8.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,3.1017580032348633,28.058241996765137,15.808398884864,0.8290032461252621,0.2764967596415514
|
| 136 |
+
Qwen3-14B-Base,Qwen3,14.0,IndustryCorpus_batch_aa_long,1024,17.213104219641906,31.16,2.942368745803833,28.217631254196167,29.08053569536,0.8125999853290552,0.2740849133598717
|
| 137 |
+
Seed-OSS-36B-Base,Seed-OSS,36.0,IndustryCorpus_batch_aa_long,1024,17.24317398347295,31.93,2.844463586807251,29.08553641319275,65.5351611392,0.8102422341260206,0.2893121896216983
|
| 138 |
+
gemma-3-0.27b-pt,gemma-3,0.27,IndustryCorpus_batch_aa_long,1024,18.0,28.58,5.01190185546875,23.56809814453125,0.550436864,0.8126429880120569,0.16785511490352403
|
| 139 |
+
gemma-3-1b-pt,gemma-3,1.0,IndustryCorpus_batch_aa_long,1024,18.0,28.58,4.134049415588379,24.44595058441162,2.129873338368,0.7897533691275891,0.18562926474102326
|
| 140 |
+
gemma-3-4b-pt,gemma-3,4.0,IndustryCorpus_batch_aa_long,1024,18.000352177480302,28.58,3.670428991317749,24.90957100868225,8.4021870592,0.7563504311020635,0.18854647106281708
|
| 141 |
+
gemma-3-12b-pt,gemma-3,12.0,IndustryCorpus_batch_aa_long,1024,18.000352177480302,28.58,3.340955972671509,25.23904402732849,24.19152912384,0.7324248700786702,0.18975990005678986
|
| 142 |
+
gemma-3-27b-pt,gemma-3,27.0,IndustryCorpus_batch_aa_long,1024,18.000352177480302,28.58,3.1846868991851807,25.395313100814818,58.631962755072,0.7106217342867404,0.18735090953224365
|
| 143 |
+
glm-4-9b-hf,glm-4,9.0,IndustryCorpus_batch_aa_long,1024,17.20945336562895,33.23,3.481240749359131,29.748759250640866,18.321994940416,0.8734570039410805,0.3244039884494736
|
| 144 |
+
internlm2.5-1.8b,internlm2.5,1.8,IndustryCorpus_batch_aa_long,1024,16.497851836951117,32.52,4.206731796264648,28.313268203735355,3.583512674304,0.893035936485753,0.3032145180569053
|
| 145 |
+
internlm2.5-7b,internlm2.5,7.0,IndustryCorpus_batch_aa_long,1024,16.497851836951117,32.52,3.602144718170166,28.917855281829837,15.344575971328,0.8554871313568062,0.3022784234335679
|
| 146 |
+
internlm2.5-20b,internlm2.5,20.0,IndustryCorpus_batch_aa_long,1024,16.497851836951117,32.52,3.216423988342285,29.303576011657718,40.127812337664,0.8327323869117662,0.3013264032511015
|
| 147 |
+
DeepSeek-V2-236B-A21B,DeepSeek-V2,236.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.643856189774723,36.61,2.476067304611206,34.13393269538879,37.7957122048,0.9723856318441222,0.20322690952268135
|
| 148 |
+
DeepSeek-V3.1-Base-671B-A37B,DeepSeek-V3.1-Base,671.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.980139577639157,38.51,2.215646266937256,36.29435373306274,78.006806642688,1.0040302590363075,0.25711471417332715
|
| 149 |
+
GLM-4-32B-Base-0414,GLM-4,32.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.20945336562895,37.99,2.6497623920440674,35.340237607955935,65.5704981504,0.984459503622193,0.23233081414741358
|
| 150 |
+
GLM-4.5-Air-Base-106B-A12B,GLM-4.5-Air-Base,106.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.20945336562895,37.99,2.375840187072754,35.61415981292725,17.749377810432,1.0470800563431408,0.2532620449182884
|
| 151 |
+
GLM-4.5-Base-355B-A32B,GLM-4.5-Base,355.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.20945336562895,37.99,1.9201092720031738,36.06989072799683,48.828658745344,1.0168325436989507,0.2556858330835516
|
| 152 |
+
Hunyuan-0.5B-Pretrain,Hunyuan,0.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.882475884200698,38.16,4.17264461517334,33.98735538482666,1.000647688192,1.138068386497548,0.23397196335684195
|
| 153 |
+
Hunyuan-1.8B-Pretrain,Hunyuan,1.8,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.882475884200698,38.16,3.7287282943725586,34.43127170562744,3.805148086272,1.0830478598859163,0.23375328642581414
|
| 154 |
+
Hunyuan-4B-Pretrain,Hunyuan,4.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.882475884200698,38.16,3.449779510498047,34.71022048950195,8.297562243072,1.054514684699066,0.23424053819843918
|
| 155 |
+
Hunyuan-7B-Pretrain,Hunyuan,7.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.967654067617747,38.16,3.1347908973693848,35.02520910263061,15.643394965504,1.0353109184853178,0.23721733060138117
|
| 156 |
+
Llama-3.1-8B,Llama-3.1,8.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.968666793195208,38.02,2.9178566932678223,35.10214330673218,15.644149940224,1.0375828829040243,0.2394909375316813
|
| 157 |
+
Llama-3.1-70B,Llama-3.1,70.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.968666793195208,38.02,2.35628604888916,35.66371395111084,143.712558514176,0.9630985985998436,0.2339635960635802
|
| 158 |
+
Llama-3.2-1B,Llama-3.2,1.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.968666793195208,38.02,3.465826988220215,34.55417301177979,2.59946184704,1.1060396839417972,0.241800465823396
|
| 159 |
+
Llama-3.2-3B,Llama-3.2,3.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.968666793195208,38.02,3.1911160945892334,34.82888390541077,6.759565492224,1.0677134173343428,0.2400020744638726
|
| 160 |
+
Llama-4-109B-A17B,Llama-4,109.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.624338545312984,38.38,4.081301689147949,34.29869831085205,41.80362133504,0.9730487923927618,0.2070629477844243
|
| 161 |
+
Qwen1.5-0.5B,Qwen1.5,0.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,4.016155242919922,33.27384475708008,1.001482354688,1.114131569665161,0.21007156095340754
|
| 162 |
+
Qwen1.5-1.8B,Qwen1.5,1.8,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.6896677017211914,33.60033229827881,3.227030388736,1.0648738839333285,0.20918011843825682
|
| 163 |
+
Qwen1.5-4B,Qwen1.5,4.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.4003915786743164,33.88960842132568,7.50725890048,1.034120734769832,0.2102321996277299
|
| 164 |
+
Qwen1.5-7B,Qwen1.5,7.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.2589685916900635,34.031031408309936,14.812000026624,1.0082721352760053,0.20831555077458594
|
| 165 |
+
Qwen1.5-14B,Qwen1.5,14.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,3.168458938598633,34.121541061401366,27.84707477504,0.9843909545610829,0.20545322354473175
|
| 166 |
+
Qwen1.5-14.3B-A2.7B,Qwen1.5,14.3,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.10791015625,34.18208984375,4.966492143616,1.0623683838623668,0.22321704772694323
|
| 167 |
+
Qwen1.5-32B,Qwen1.5,32.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.9246299266815186,34.36537007331848,65.67474757632,0.9572418764084689,0.20516120310603542
|
| 168 |
+
Qwen1.5-72B,Qwen1.5,72.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.7939274311065674,34.49607256889343,146.860769542144,0.9307806264780372,0.20226068077358736
|
| 169 |
+
Qwen2-0.5B,Qwen2,0.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.9345626831054688,33.35543731689453,1.056685686784,1.1139762198079894,0.21225343173404826
|
| 170 |
+
Qwen2-1.5B,Qwen2,1.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.5078747272491455,33.782125272750854,3.251336380416,1.070268133552411,0.21486784796931227
|
| 171 |
+
Qwen2-7B,Qwen2,7.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,3.1015849113464355,34.188415088653564,14.69019324416,1.0132927552725952,0.21305371753375799
|
| 172 |
+
Qwen2-57B-A14B,Qwen2,57.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,2.859682321548462,34.43031767845154,27.316457570304,0.9940950214801411,0.21453307172903058
|
| 173 |
+
Qwen2-72B,Qwen2,72.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.7257165908813477,34.56428340911865,147.719763001344,0.9324094282948697,0.20405483560801915
|
| 174 |
+
Qwen2.5-0.5B,Qwen2.5,0.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.751422166824341,33.53857783317566,1.056685686784,1.1200925893246678,0.21836980125072677
|
| 175 |
+
Qwen2.5-1.5B,Qwen2.5,1.5,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.292654037475586,33.99734596252441,3.251336380416,1.0770866461263255,0.22168636054322688
|
| 176 |
+
Qwen2.5-3B,Qwen2.5,3.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.1040964126586914,34.18590358734131,6.473975332864,1.0500069147732485,0.22071227213067415
|
| 177 |
+
Qwen2.5-7B,Qwen2.5,7.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.892796277999878,34.39720372200012,14.69019324416,1.019480933607412,0.21924189586857487
|
| 178 |
+
Qwen2.5-14B,Qwen2.5,14.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.553492784500122,34.73650721549988,29.16769333248,1.000203593392724,0.22276512342607901
|
| 179 |
+
Qwen2.5-32B,Qwen2.5,32.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.436856508255005,34.853143491744994,66.19014365184,0.9705238491916229,0.21867935819527135
|
| 180 |
+
Qwen2.5-72B,Qwen2.5,72.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.214319120800766,37.29,2.0375590324401855,35.252440967559814,147.719763001344,0.9509732326720101,0.22261863998515952
|
| 181 |
+
Qwen3-0.6B-Base,Qwen3,0.6,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.7444427013397217,33.54555729866028,1.100258213888,1.1181487439042437,0.21817812136758097
|
| 182 |
+
Qwen3-1.7B-Base,Qwen3,1.7,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.383861541748047,33.90613845825195,3.643625439232,1.0686331169330026,0.217663485203415
|
| 183 |
+
Qwen3-4B-Base,Qwen3,4.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,3.1635825634002686,34.12641743659973,7.70592210944,1.0401508271812625,0.21720853076034896
|
| 184 |
+
Qwen3-8B-Base,Qwen3,8.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,2.99318528175354,34.29681471824646,15.808398884864,1.0133268768749288,0.21559023863641597
|
| 185 |
+
Qwen3-14B-Base,Qwen3,14.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.213104219641906,37.29,2.8621976375579834,34.427802362442016,29.08053569536,0.9914379928850957,0.21390286223440289
|
| 186 |
+
Seed-OSS-36B-Base,Seed-OSS,36.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.24317398347295,36.91,2.808408737182617,34.10159126281738,65.5351611392,0.9499755857865061,0.1978306017428323
|
| 187 |
+
gemma-3-0.27b-pt,gemma-3,0.27,CC-MAIN-2013-20_train-00000-of-00014_long,1024,18.0,37.53,4.112582206726074,33.41741779327393,0.550436864,1.1522537830857935,0.22127664009486364
|
| 188 |
+
gemma-3-1b-pt,gemma-3,1.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,18.0,37.53,3.5602779388427734,33.96972206115723,2.129873338368,1.0974293003453037,0.22516455069625135
|
| 189 |
+
gemma-3-4b-pt,gemma-3,4.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,18.000352177480302,37.53,3.136937379837036,34.393062620162965,8.4021870592,1.044305730139375,0.22448183061746838
|
| 190 |
+
gemma-3-12b-pt,gemma-3,12.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,18.000352177480302,37.53,2.879539966583252,34.65046003341675,24.19152912384,1.0055396179293294,0.22201265586565205
|
| 191 |
+
gemma-3-27b-pt,gemma-3,27.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,18.000352177480302,37.53,2.744044065475464,34.78595593452454,58.631962755072,0.9733944305739163,0.2178697103401509
|
| 192 |
+
glm-4-9b-hf,glm-4,9.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,17.20945336562895,37.99,3.060659170150757,34.929340829849245,18.321994940416,1.025564701163788,0.23281435794061228
|
| 193 |
+
internlm2.5-1.8b,internlm2.5,1.8,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.497851836951117,36.59,3.7362446784973145,32.85375532150269,3.583512674304,1.0362485863338513,0.18463477362909794
|
| 194 |
+
internlm2.5-7b,internlm2.5,7.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.497851836951117,36.59,3.211712121963501,33.3782878780365,15.344575971328,0.9874416850106128,0.18869114415887844
|
| 195 |
+
internlm2.5-20b,internlm2.5,20.0,CC-MAIN-2013-20_train-00000-of-00014_long,1024,16.497851836951117,36.59,2.9276952743530273,33.662304725646976,40.127812337664,0.9565962649741965,0.1893255933785843
|
| 196 |
+
DeepSeek-V2-236B-A21B,DeepSeek-V2,236.0,NextCoderDataset_v1_long,1024,16.643856189774723,28.37,0.4581535756587982,27.911846424341203,37.7957122048,0.7951348197547613,0.025976097433320515
|
| 197 |
+
DeepSeek-V3.1-Base-671B-A37B,DeepSeek-V3.1-Base,671.0,NextCoderDataset_v1_long,1024,16.980139577639157,32.97,0.41526371240615845,32.55473628759384,78.006806642688,0.9005792071155108,0.15366366225253045
|
| 198 |
+
GLM-4-32B-Base-0414,GLM-4,32.0,NextCoderDataset_v1_long,1024,17.20945336562895,35.01,0.47286882996559143,34.53713117003441,65.5704981504,0.9620876742643162,0.20995898478953665
|
| 199 |
+
GLM-4.5-Air-Base-106B-A12B,GLM-4.5-Air-Base,106.0,NextCoderDataset_v1_long,1024,17.20945336562895,35.01,0.5217994451522827,34.488200554847715,17.749377810432,1.013976103039656,0.22015809161480335
|
| 200 |
+
GLM-4.5-Base-355B-A32B,GLM-4.5-Base,355.0,NextCoderDataset_v1_long,1024,17.20945336562895,35.01,0.47699496150016785,34.53300503849983,48.828658745344,0.9735067849155241,0.21236007430012496
|
| 201 |
+
Hunyuan-0.5B-Pretrain,Hunyuan,0.5,NextCoderDataset_v1_long,1024,16.882475884200698,33.73,0.8001349568367004,32.929865043163296,1.000647688192,1.1026582666677818,0.19856184352707576
|
| 202 |
+
Hunyuan-1.8B-Pretrain,Hunyuan,1.8,NextCoderDataset_v1_long,1024,16.882475884200698,33.73,0.6687179803848267,33.06128201961517,3.805148086272,1.0399543485516005,0.19065977509149828
|
| 203 |
+
Hunyuan-4B-Pretrain,Hunyuan,4.0,NextCoderDataset_v1_long,1024,16.882475884200698,33.73,0.5728369951248169,33.15716300487518,8.297562243072,1.0073319846002278,0.1870578380996009
|
| 204 |
+
Hunyuan-7B-Pretrain,Hunyuan,7.0,NextCoderDataset_v1_long,1024,16.967654067617747,33.73,0.5430698990821838,33.18693010091781,15.643394965504,0.9809731894479596,0.18287960156402308
|
| 205 |
+
Llama-3.1-8B,Llama-3.1,8.0,NextCoderDataset_v1_long,1024,16.968666793195208,34.97,0.5863305926322937,34.383669407367705,15.644149940224,1.016345540976504,0.21825359560416102
|
| 206 |
+
Llama-3.1-70B,Llama-3.1,70.0,NextCoderDataset_v1_long,1024,16.968666793195208,34.97,0.5053007006645203,34.46469929933548,143.712558514176,0.9307192078160197,0.20158420527975623
|
| 207 |
+
Llama-3.2-1B,Llama-3.2,1.0,NextCoderDataset_v1_long,1024,16.968666793195208,34.97,0.7732560038566589,34.19674399614334,2.59946184704,1.0945987886452613,0.23035957052685993
|
| 208 |
+
Llama-3.2-3B,Llama-3.2,3.0,NextCoderDataset_v1_long,1024,16.968666793195208,34.97,0.658105731010437,34.31189426898956,6.759565492224,1.0518645956227757,0.22415325275230538
|
| 209 |
+
Llama-4-109B-A17B,Llama-4,109.0,NextCoderDataset_v1_long,1024,17.624338545312984,34.67,0.6906706690788269,33.979329330921175,41.80362133504,0.9639883435840929,0.1980024989757555
|
| 210 |
+
Qwen1.5-0.5B,Qwen1.5,0.5,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,1.0023809671401978,33.7276190328598,1.001482354688,1.1293256132101457,0.22526560449839214
|
| 211 |
+
Qwen1.5-1.8B,Qwen1.5,1.8,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.8330395221710205,33.896960477828976,3.227030388736,1.0742747314855965,0.21858096599052468
|
| 212 |
+
Qwen1.5-4B,Qwen1.5,4.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.7091187834739685,34.02088121652603,7.50725890048,1.0381264440639661,0.21423790892186406
|
| 213 |
+
Qwen1.5-7B,Qwen1.5,7.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.6437075138092041,34.08629248619079,14.812000026624,1.0099094116877623,0.20995282718634287
|
| 214 |
+
Qwen1.5-14B,Qwen1.5,14.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.6092844605445862,34.12071553945541,27.84707477504,0.9843671386280649,0.20542940761171372
|
| 215 |
+
Qwen1.5-14.3B-A2.7B,Qwen1.5,14.3,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.6294852495193481,34.10051475048065,4.966492143616,1.0598330561396874,0.2206817200042637
|
| 216 |
+
Qwen1.5-32B,Qwen1.5,32.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.5840258002281189,34.14597419977188,65.67474757632,0.9511306395085909,0.19904996620615747
|
| 217 |
+
Qwen1.5-72B,Qwen1.5,72.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.5431849360466003,34.1868150639534,146.860769542144,0.9224361723777554,0.19391622667330558
|
| 218 |
+
Qwen2-0.5B,Qwen2,0.5,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.8169111013412476,33.91308889865875,1.056685686784,1.1326001879221477,0.2308773998482066
|
| 219 |
+
Qwen2-1.5B,Qwen2,1.5,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.6744095087051392,34.05559049129486,3.251336380416,1.0789319197020253,0.22353163411892654
|
| 220 |
+
Qwen2-7B,Qwen2,7.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.5678777694702148,34.16212223052978,14.69019324416,1.0125134748472477,0.21227443710841062
|
| 221 |
+
Qwen2-57B-A14B,Qwen2,57.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.5394113063812256,34.19058869361877,27.316457570304,0.9871734068568786,0.20761145710576814
|
| 222 |
+
Qwen2-72B,Qwen2,72.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.498881459236145,34.23111854076385,147.719763001344,0.9234219408138279,0.19506734812697735
|
| 223 |
+
Qwen2.5-0.5B,Qwen2.5,0.5,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.7577647566795349,33.97223524332046,1.056685686784,1.13457550669299,0.23285271861904888
|
| 224 |
+
Qwen2.5-1.5B,Qwen2.5,1.5,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.6171697378158569,34.11283026218414,3.251336380416,1.080745361048892,0.22534507546579333
|
| 225 |
+
Qwen2.5-3B,Qwen2.5,3.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.5702103972434998,34.1597896027565,6.473975332864,1.0492048337542028,0.21991019111162846
|
| 226 |
+
Qwen2.5-7B,Qwen2.5,7.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.518409252166748,34.21159074783325,14.69019324416,1.0139796466504067,0.21374060891156962
|
| 227 |
+
Qwen2.5-14B,Qwen2.5,14.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.4861307442188263,34.24386925578117,29.16769333248,0.9860185674056425,0.2085800974389975
|
| 228 |
+
Qwen2.5-32B,Qwen2.5,32.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.46853765845298767,34.26146234154701,66.19014365184,0.9540478412952252,0.20220335029887357
|
| 229 |
+
Qwen2.5-72B,Qwen2.5,72.0,NextCoderDataset_v1_long,1024,17.214319120800766,34.73,0.4511546492576599,34.27884535074234,147.719763001344,0.9247094238227954,0.19635483113594485
|
| 230 |
+
Qwen3-0.6B-Base,Qwen3,0.6,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.7059367895126343,34.02406321048736,1.100258213888,1.1340984203247806,0.23412779778811782
|
| 231 |
+
Qwen3-1.7B-Base,Qwen3,1.7,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.5859696269035339,34.14403037309646,3.643625439232,1.076130850087324,0.22516121835773648
|
| 232 |
+
Qwen3-4B-Base,Qwen3,4.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.5191898941993713,34.210810105800626,7.70592210944,1.0427230604032356,0.2197807639823221
|
| 233 |
+
Qwen3-8B-Base,Qwen3,8.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.4935953617095947,34.2364046382904,15.808398884864,1.0115420126490078,0.21380537441049505
|
| 234 |
+
Qwen3-14B-Base,Qwen3,14.0,NextCoderDataset_v1_long,1024,17.213104219641906,34.73,0.47131988406181335,34.25868011593818,29.08053569536,0.9865676785135663,0.2090325478628734
|
| 235 |
+
Seed-OSS-36B-Base,Seed-OSS,36.0,NextCoderDataset_v1_long,1024,17.24317398347295,30.29,0.4337354302406311,29.856264569759368,65.5351611392,0.8317125792009394,0.0795675951572656
|
| 236 |
+
gemma-3-0.27b-pt,gemma-3,0.27,NextCoderDataset_v1_long,1024,18.0,29.05,1.393586277961731,27.65641372203827,0.550436864,0.9536107049006791,0.022633561909749286
|
| 237 |
+
gemma-3-1b-pt,gemma-3,1.0,NextCoderDataset_v1_long,1024,18.0,29.05,0.951468288898468,28.098531711101533,2.129873338368,0.9077540269811087,0.035489277332056424
|
| 238 |
+
gemma-3-4b-pt,gemma-3,4.0,NextCoderDataset_v1_long,1024,18.000352177480302,29.05,0.5508195757865906,28.49918042421341,8.4021870592,0.8653447862428527,0.04552088672094608
|
| 239 |
+
gemma-3-12b-pt,gemma-3,12.0,NextCoderDataset_v1_long,1024,18.000352177480302,29.05,0.48889875411987305,28.561101245880128,24.19152912384,0.8288293663843544,0.045302404320676976
|
| 240 |
+
gemma-3-27b-pt,gemma-3,27.0,NextCoderDataset_v1_long,1024,18.000352177480302,29.05,0.4688594937324524,28.58114050626755,58.631962755072,0.799768821665175,0.04424410143140975
|
| 241 |
+
glm-4-9b-hf,glm-4,9.0,NextCoderDataset_v1_long,1024,17.20945336562895,35.01,0.6237372159957886,34.38626278400421,18.321994940416,1.0096193194141354,0.21686897619095954
|
| 242 |
+
internlm2.5-1.8b,internlm2.5,1.8,NextCoderDataset_v1_long,1024,16.497851836951117,34.28,0.9094681143760681,33.37053188562393,3.583512674304,1.0525483663371016,0.20093455363234813
|
| 243 |
+
internlm2.5-7b,internlm2.5,7.0,NextCoderDataset_v1_long,1024,16.497851836951117,34.28,0.6683759689331055,33.611624031066896,15.344575971328,0.9943445508785125,0.19559401002677804
|
| 244 |
+
internlm2.5-20b,internlm2.5,20.0,NextCoderDataset_v1_long,1024,16.497851836951117,34.28,0.5986665487289429,33.68133345127106,40.127812337664,0.9571370124960186,0.18986634090040644
|
package-lock.json
CHANGED
|
@@ -8,6 +8,7 @@
|
|
| 8 |
"name": "vue",
|
| 9 |
"version": "0.0.0",
|
| 10 |
"dependencies": {
|
|
|
|
| 11 |
"pinia": "^3.0.1",
|
| 12 |
"vue": "^3.5.13",
|
| 13 |
"vue-router": "^4.5.0"
|
|
@@ -2905,6 +2906,16 @@
|
|
| 2905 |
"dev": true,
|
| 2906 |
"license": "MIT"
|
| 2907 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2908 |
"node_modules/electron-to-chromium": {
|
| 2909 |
"version": "1.5.249",
|
| 2910 |
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.249.tgz",
|
|
@@ -5512,6 +5523,12 @@
|
|
| 5512 |
"dev": true,
|
| 5513 |
"license": "Apache-2.0"
|
| 5514 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5515 |
"node_modules/type-check": {
|
| 5516 |
"version": "0.4.0",
|
| 5517 |
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
|
@@ -6130,6 +6147,15 @@
|
|
| 6130 |
"funding": {
|
| 6131 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 6132 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6133 |
}
|
| 6134 |
}
|
| 6135 |
}
|
|
|
|
| 8 |
"name": "vue",
|
| 9 |
"version": "0.0.0",
|
| 10 |
"dependencies": {
|
| 11 |
+
"echarts": "^6.0.0",
|
| 12 |
"pinia": "^3.0.1",
|
| 13 |
"vue": "^3.5.13",
|
| 14 |
"vue-router": "^4.5.0"
|
|
|
|
| 2906 |
"dev": true,
|
| 2907 |
"license": "MIT"
|
| 2908 |
},
|
| 2909 |
+
"node_modules/echarts": {
|
| 2910 |
+
"version": "6.0.0",
|
| 2911 |
+
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz",
|
| 2912 |
+
"integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
|
| 2913 |
+
"license": "Apache-2.0",
|
| 2914 |
+
"dependencies": {
|
| 2915 |
+
"tslib": "2.3.0",
|
| 2916 |
+
"zrender": "6.0.0"
|
| 2917 |
+
}
|
| 2918 |
+
},
|
| 2919 |
"node_modules/electron-to-chromium": {
|
| 2920 |
"version": "1.5.249",
|
| 2921 |
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.249.tgz",
|
|
|
|
| 5523 |
"dev": true,
|
| 5524 |
"license": "Apache-2.0"
|
| 5525 |
},
|
| 5526 |
+
"node_modules/tslib": {
|
| 5527 |
+
"version": "2.3.0",
|
| 5528 |
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
|
| 5529 |
+
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
|
| 5530 |
+
"license": "0BSD"
|
| 5531 |
+
},
|
| 5532 |
"node_modules/type-check": {
|
| 5533 |
"version": "0.4.0",
|
| 5534 |
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
|
|
|
| 6147 |
"funding": {
|
| 6148 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 6149 |
}
|
| 6150 |
+
},
|
| 6151 |
+
"node_modules/zrender": {
|
| 6152 |
+
"version": "6.0.0",
|
| 6153 |
+
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz",
|
| 6154 |
+
"integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
|
| 6155 |
+
"license": "BSD-3-Clause",
|
| 6156 |
+
"dependencies": {
|
| 6157 |
+
"tslib": "2.3.0"
|
| 6158 |
+
}
|
| 6159 |
}
|
| 6160 |
}
|
| 6161 |
}
|
package.json
CHANGED
|
@@ -13,6 +13,7 @@
|
|
| 13 |
"format": "prettier --write src/"
|
| 14 |
},
|
| 15 |
"dependencies": {
|
|
|
|
| 16 |
"pinia": "^3.0.1",
|
| 17 |
"vue": "^3.5.13",
|
| 18 |
"vue-router": "^4.5.0"
|
|
|
|
| 13 |
"format": "prettier --write src/"
|
| 14 |
},
|
| 15 |
"dependencies": {
|
| 16 |
+
"echarts": "^6.0.0",
|
| 17 |
"pinia": "^3.0.1",
|
| 18 |
"vue": "^3.5.13",
|
| 19 |
"vue-router": "^4.5.0"
|
scripts/count_column.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env node
|
| 2 |
+
import fs from 'fs/promises'
|
| 3 |
+
import path from 'path'
|
| 4 |
+
|
| 5 |
+
function usage() {
|
| 6 |
+
console.log(`Usage:
|
| 7 |
+
node scripts/count_column.js --file <file.csv> --column <columnName|index> [--out <out.txt>]
|
| 8 |
+
|
| 9 |
+
Options:
|
| 10 |
+
--file CSV 文件路径(必需)。
|
| 11 |
+
--column 指定列名或列序号(1 表示第一列)。如果为数字则按 1-based 处理。
|
| 12 |
+
--out 可选,将统计结果写入指定文件(默认:打印到控制台)。
|
| 13 |
+
--help 显示帮助。
|
| 14 |
+
`)
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
function parseArgs(argv) {
|
| 18 |
+
const args = argv.slice(2)
|
| 19 |
+
const opts = { file: null, column: null, out: null }
|
| 20 |
+
for (let i = 0; i < args.length; i++) {
|
| 21 |
+
const a = args[i]
|
| 22 |
+
if (a === '--help' || a === '-h') { opts.help = true; break }
|
| 23 |
+
if (a === '--file') { opts.file = args[++i]; continue }
|
| 24 |
+
if (a === '--column') { opts.column = args[++i]; continue }
|
| 25 |
+
if (a === '--out') { opts.out = args[++i]; continue }
|
| 26 |
+
// positional file
|
| 27 |
+
if (!opts.file) opts.file = a
|
| 28 |
+
}
|
| 29 |
+
return opts
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
// 重用一个简单的 CSV 单行解析(支持双引号与双引号转义)
|
| 33 |
+
function parseCSVLine(line) {
|
| 34 |
+
const res = []
|
| 35 |
+
let cur = ''
|
| 36 |
+
let inQuotes = false
|
| 37 |
+
for (let i = 0; i < line.length; i++) {
|
| 38 |
+
const ch = line[i]
|
| 39 |
+
if (inQuotes) {
|
| 40 |
+
if (ch === '"') {
|
| 41 |
+
if (i + 1 < line.length && line[i + 1] === '"') { cur += '"'; i++ } else { inQuotes = false }
|
| 42 |
+
} else { cur += ch }
|
| 43 |
+
} else {
|
| 44 |
+
if (ch === ',') { res.push(cur); cur = '' }
|
| 45 |
+
else if (ch === '"') { inQuotes = true }
|
| 46 |
+
else { cur += ch }
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
res.push(cur)
|
| 50 |
+
return res
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
async function readCSV(filePath) {
|
| 54 |
+
const txt = await fs.readFile(filePath, 'utf8')
|
| 55 |
+
const lines = txt.split(/\r?\n/)
|
| 56 |
+
let headerLineIndex = null
|
| 57 |
+
for (let i = 0; i < lines.length; i++) { if (lines[i].trim().length > 0) { headerLineIndex = i; break } }
|
| 58 |
+
if (headerLineIndex === null) return { headers: [], rows: [] }
|
| 59 |
+
const headers = parseCSVLine(lines[headerLineIndex])
|
| 60 |
+
const rows = []
|
| 61 |
+
for (let i = headerLineIndex + 1; i < lines.length; i++) {
|
| 62 |
+
const l = lines[i]
|
| 63 |
+
if (l == null || l.trim() === '') continue
|
| 64 |
+
const vals = parseCSVLine(l)
|
| 65 |
+
rows.push(vals)
|
| 66 |
+
}
|
| 67 |
+
return { headers, rows }
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
function normalizeKey(k) {
|
| 71 |
+
if (k == null) return ''
|
| 72 |
+
return String(k).trim()
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
async function main() {
|
| 76 |
+
const opts = parseArgs(process.argv)
|
| 77 |
+
if (opts.help) { usage(); return }
|
| 78 |
+
if (!opts.file || !opts.column) { console.error('Missing --file or --column'); usage(); process.exit(1) }
|
| 79 |
+
|
| 80 |
+
const filePath = path.isAbsolute(opts.file) ? opts.file : path.join(process.cwd(), opts.file)
|
| 81 |
+
let stat
|
| 82 |
+
try { stat = await fs.stat(filePath) } catch (e) { console.error('File not found:', filePath); process.exit(2) }
|
| 83 |
+
if (!stat.isFile()) { console.error('Not a file:', filePath); process.exit(3) }
|
| 84 |
+
|
| 85 |
+
const { headers, rows } = await readCSV(filePath)
|
| 86 |
+
if (!headers || headers.length === 0) { console.error('No header found in CSV'); process.exit(4) }
|
| 87 |
+
|
| 88 |
+
// 决定列索引:如果 opts.column 是纯数字则按 1-based 处理,否则按列名匹配(优先精确匹配,其次大小写忽略)
|
| 89 |
+
let colIndex = -1
|
| 90 |
+
if (/^\d+$/.test(opts.column)) {
|
| 91 |
+
const idx = parseInt(opts.column, 10)
|
| 92 |
+
colIndex = idx - 1
|
| 93 |
+
if (colIndex < 0 || colIndex >= headers.length) { console.error('Column index out of range'); process.exit(5) }
|
| 94 |
+
} else {
|
| 95 |
+
// 尝试精确匹配
|
| 96 |
+
colIndex = headers.indexOf(opts.column)
|
| 97 |
+
if (colIndex === -1) {
|
| 98 |
+
// 尝试不区分大小写匹配
|
| 99 |
+
const lower = opts.column.toLowerCase()
|
| 100 |
+
colIndex = headers.findIndex(h => String(h).toLowerCase() === lower)
|
| 101 |
+
if (colIndex === -1) { console.error(`Column name not found: ${opts.column}`); process.exit(6) }
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
const counts = new Map()
|
| 106 |
+
for (const vals of rows) {
|
| 107 |
+
const v = normalizeKey(vals[colIndex])
|
| 108 |
+
counts.set(v, (counts.get(v) || 0) + 1)
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
// 排序:按计数降序,再按值字母升序
|
| 112 |
+
const items = Array.from(counts.entries()).sort((a, b) => {
|
| 113 |
+
if (b[1] !== a[1]) return b[1] - a[1]
|
| 114 |
+
return String(a[0]).localeCompare(String(b[0]))
|
| 115 |
+
})
|
| 116 |
+
|
| 117 |
+
const outLines = []
|
| 118 |
+
outLines.push(`File: ${filePath}`)
|
| 119 |
+
outLines.push(`Column: ${headers[colIndex]} (index ${colIndex + 1})`)
|
| 120 |
+
outLines.push(`Total distinct classes: ${items.length}`)
|
| 121 |
+
outLines.push('')
|
| 122 |
+
outLines.push('Value,Count')
|
| 123 |
+
for (const [val, cnt] of items) outLines.push(`${val},${cnt}`)
|
| 124 |
+
|
| 125 |
+
if (opts.out) {
|
| 126 |
+
const outPath = path.isAbsolute(opts.out) ? opts.out : path.join(process.cwd(), opts.out)
|
| 127 |
+
await fs.mkdir(path.dirname(outPath), { recursive: true })
|
| 128 |
+
await fs.writeFile(outPath, outLines.join('\n'), 'utf8')
|
| 129 |
+
console.log(`Wrote counts to ${outPath} (${items.length} distinct)`)
|
| 130 |
+
} else {
|
| 131 |
+
console.log(outLines.join('\n'))
|
| 132 |
+
}
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
main().catch(err => { console.error('Error:', err && err.stack ? err.stack : err); process.exit(10) })
|
scripts/encrypt_csv.js
ADDED
|
File without changes
|
scripts/filter_by_series.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env node
|
| 2 |
+
import fs from 'fs/promises'
|
| 3 |
+
import path from 'path'
|
| 4 |
+
|
| 5 |
+
function usage() {
|
| 6 |
+
console.log(`Usage:
|
| 7 |
+
node scripts/filter_by_series.js --file <merged.csv> --series <p3_list.txt> --out <out.csv>
|
| 8 |
+
|
| 9 |
+
Options:
|
| 10 |
+
--file 合并后的 CSV 文件(默认: outdata/merged.csv)
|
| 11 |
+
--series 包含待匹配 series 列表的文件(每行一个值,默认: outdata/p3_model_series.csv)
|
| 12 |
+
--out 输出筛选后的 CSV(默认: outdata/filtered.csv)
|
| 13 |
+
--help 显示帮助
|
| 14 |
+
`)
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
function parseArgs(argv) {
|
| 18 |
+
const args = argv.slice(2)
|
| 19 |
+
const opts = { file: null, series: null, out: null }
|
| 20 |
+
for (let i = 0; i < args.length; i++) {
|
| 21 |
+
const a = args[i]
|
| 22 |
+
if (a === '--help' || a === '-h') { opts.help = true; break }
|
| 23 |
+
if (a === '--file') { opts.file = args[++i]; continue }
|
| 24 |
+
if (a === '--series') { opts.series = args[++i]; continue }
|
| 25 |
+
if (a === '--out') { opts.out = args[++i]; continue }
|
| 26 |
+
if (!opts.file) opts.file = a
|
| 27 |
+
}
|
| 28 |
+
return opts
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
function parseCSVLine(line) {
|
| 32 |
+
const res = []
|
| 33 |
+
let cur = ''
|
| 34 |
+
let inQuotes = false
|
| 35 |
+
for (let i = 0; i < line.length; i++) {
|
| 36 |
+
const ch = line[i]
|
| 37 |
+
if (inQuotes) {
|
| 38 |
+
if (ch === '"') {
|
| 39 |
+
if (i + 1 < line.length && line[i + 1] === '"') { cur += '"'; i++ } else { inQuotes = false }
|
| 40 |
+
} else { cur += ch }
|
| 41 |
+
} else {
|
| 42 |
+
if (ch === ',') { res.push(cur); cur = '' }
|
| 43 |
+
else if (ch === '"') { inQuotes = true }
|
| 44 |
+
else { cur += ch }
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
res.push(cur)
|
| 48 |
+
return res
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
function csvEscape(val) {
|
| 52 |
+
if (val == null) return ''
|
| 53 |
+
const s = String(val)
|
| 54 |
+
if (s.includes('"')) return '"' + s.replace(/"/g, '""') + '"'
|
| 55 |
+
if (s.includes(',') || s.includes('\n') || s.includes('\r')) return '"' + s + '"'
|
| 56 |
+
return s
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
async function readLinesTrim(filePath) {
|
| 60 |
+
const txt = await fs.readFile(filePath, 'utf8')
|
| 61 |
+
return txt.split(/\r?\n/).map(l => l.trim()).filter(l => l.length > 0)
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
async function readCSV(filePath) {
|
| 65 |
+
const txt = await fs.readFile(filePath, 'utf8')
|
| 66 |
+
const lines = txt.split(/\r?\n/)
|
| 67 |
+
let headerIdx = null
|
| 68 |
+
for (let i = 0; i < lines.length; i++) if (lines[i].trim().length > 0) { headerIdx = i; break }
|
| 69 |
+
if (headerIdx === null) return { headers: [], rows: [] }
|
| 70 |
+
const headers = parseCSVLine(lines[headerIdx])
|
| 71 |
+
const rows = []
|
| 72 |
+
for (let i = headerIdx + 1; i < lines.length; i++) {
|
| 73 |
+
const l = lines[i]
|
| 74 |
+
if (!l || l.trim() === '') continue
|
| 75 |
+
rows.push(parseCSVLine(l))
|
| 76 |
+
}
|
| 77 |
+
return { headers, rows }
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
async function main() {
|
| 81 |
+
const opts = parseArgs(process.argv)
|
| 82 |
+
if (opts.help) { usage(); return }
|
| 83 |
+
const cwd = process.cwd()
|
| 84 |
+
const file = opts.file ? (path.isAbsolute(opts.file) ? opts.file : path.join(cwd, opts.file)) : path.join(cwd, 'outdata', 'merged.csv')
|
| 85 |
+
const seriesFile = opts.series ? (path.isAbsolute(opts.series) ? opts.series : path.join(cwd, opts.series)) : path.join(cwd, 'outdata', 'p3_model_series.csv')
|
| 86 |
+
const outPath = opts.out ? (path.isAbsolute(opts.out) ? opts.out : path.join(cwd, opts.out)) : path.join(cwd, 'outdata', 'filtered.csv')
|
| 87 |
+
|
| 88 |
+
// read series list
|
| 89 |
+
let seriesList
|
| 90 |
+
try { seriesList = await readLinesTrim(seriesFile) } catch (e) { console.error('Failed to read series list:', seriesFile); process.exit(2) }
|
| 91 |
+
// normalize to lowercase for case-insensitive contains
|
| 92 |
+
const seriesLower = seriesList.map(s => s.toLowerCase())
|
| 93 |
+
|
| 94 |
+
// read CSV
|
| 95 |
+
let headers, rows
|
| 96 |
+
try { ({ headers, rows } = await readCSV(file)) } catch (e) { console.error('Failed to read CSV:', file); process.exit(3) }
|
| 97 |
+
if (!headers || headers.length === 0) { console.error('No header found in CSV'); process.exit(4) }
|
| 98 |
+
|
| 99 |
+
// find model_series column index (case-insensitive)
|
| 100 |
+
let colIndex = headers.indexOf('model_series')
|
| 101 |
+
if (colIndex === -1) {
|
| 102 |
+
colIndex = headers.findIndex(h => String(h).toLowerCase() === 'model_series')
|
| 103 |
+
}
|
| 104 |
+
if (colIndex === -1) {
|
| 105 |
+
console.error('Could not find column "model_series" in CSV headers:', headers)
|
| 106 |
+
process.exit(5)
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
const kept = []
|
| 110 |
+
const removed = []
|
| 111 |
+
for (let i = 0; i < rows.length; i++) {
|
| 112 |
+
const row = rows[i]
|
| 113 |
+
const cell = (row[colIndex] || '').toString()
|
| 114 |
+
const cellLower = cell.toLowerCase()
|
| 115 |
+
const matched = seriesLower.some(s => cellLower.includes(s))
|
| 116 |
+
if (matched) kept.push(row)
|
| 117 |
+
else removed.push({ index: i + 1, row, value: cell })
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
// write out CSV: header then kept rows
|
| 121 |
+
const outLines = []
|
| 122 |
+
outLines.push(headers.map(csvEscape).join(','))
|
| 123 |
+
for (const r of kept) outLines.push(r.map(csvEscape).join(','))
|
| 124 |
+
await fs.mkdir(path.dirname(outPath), { recursive: true })
|
| 125 |
+
await fs.writeFile(outPath, outLines.join('\n'), 'utf8')
|
| 126 |
+
console.log(`Wrote filtered CSV to ${outPath} (${kept.length} rows kept, ${removed.length} removed)`)
|
| 127 |
+
|
| 128 |
+
// write removed rows log
|
| 129 |
+
if (removed.length > 0) {
|
| 130 |
+
const logPath = path.join(path.dirname(outPath), 'filtered_removed_rows.log')
|
| 131 |
+
const logLines = []
|
| 132 |
+
logLines.push(`Removed ${removed.length} rows from ${file} by series filtering:`)
|
| 133 |
+
for (const it of removed) {
|
| 134 |
+
logLines.push(`row=${it.index} value="${it.value}" csv=${JSON.stringify(it.row)}`)
|
| 135 |
+
}
|
| 136 |
+
await fs.writeFile(logPath, logLines.join('\n'), 'utf8')
|
| 137 |
+
console.log(`Wrote removal log to ${logPath}`)
|
| 138 |
+
} else {
|
| 139 |
+
console.log('No rows were removed by series filtering.')
|
| 140 |
+
}
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
main().catch(err => { console.error('Error:', err && err.stack ? err.stack : err); process.exit(10) })
|
scripts/merge_csv.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env node
|
| 2 |
+
/*
|
| 3 |
+
scripts/merge_csv.js
|
| 4 |
+
简单的 Node 脚本:合并指定目录或指定多个 CSV 文件为一个 CSV 文件(基本合并,处理不同表头)
|
| 5 |
+
|
| 6 |
+
用法示例:
|
| 7 |
+
node scripts/merge_csv.js --inputDir ./data --out merged.csv
|
| 8 |
+
node scripts/merge_csv.js file1.csv file2.csv --out merged.csv
|
| 9 |
+
|
| 10 |
+
限制说明:这是一个轻量实现,处理常见 CSV(含双引号字段)。不保证对包含任意换行的复杂嵌套引用字段 100% 兼容。
|
| 11 |
+
*/
|
| 12 |
+
|
| 13 |
+
import fs from 'fs/promises'
|
| 14 |
+
import path from 'path'
|
| 15 |
+
|
| 16 |
+
function usage() {
|
| 17 |
+
console.log(`Usage:\n node scripts/merge_csv.js --inputDir <dir> --out <out.csv>\n node scripts/merge_csv.js <file1.csv> <file2.csv> --out <out.csv>\n\nOptions:\n --inputDir 读取指定目录下的所有 .csv 文件(非递归)\n --out 输出文件路径(默认: merged.csv)\n --help 显示帮助\n`)
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
function parseArgs(argv) {
|
| 21 |
+
const args = argv.slice(2)
|
| 22 |
+
const opts = { files: [], inputDir: null, out: 'merged.csv' }
|
| 23 |
+
for (let i = 0; i < args.length; i++) {
|
| 24 |
+
const a = args[i]
|
| 25 |
+
if (a === '--help' || a === '-h') { opts.help = true; break }
|
| 26 |
+
if (a === '--inputDir') { opts.inputDir = args[++i]; continue }
|
| 27 |
+
if (a === '--out') { opts.out = args[++i]; continue }
|
| 28 |
+
if (a.startsWith('--')) {
|
| 29 |
+
console.warn('Unknown option', a)
|
| 30 |
+
continue
|
| 31 |
+
}
|
| 32 |
+
opts.files.push(a)
|
| 33 |
+
}
|
| 34 |
+
return opts
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
// 基本的单行 CSV 字段解析,支持双引号包含和双引号转义("")
|
| 38 |
+
function parseCSVLine(line) {
|
| 39 |
+
const res = []
|
| 40 |
+
let cur = ''
|
| 41 |
+
let inQuotes = false
|
| 42 |
+
for (let i = 0; i < line.length; i++) {
|
| 43 |
+
const ch = line[i]
|
| 44 |
+
if (inQuotes) {
|
| 45 |
+
if (ch === '"') {
|
| 46 |
+
if (i + 1 < line.length && line[i + 1] === '"') {
|
| 47 |
+
cur += '"'
|
| 48 |
+
i++
|
| 49 |
+
} else {
|
| 50 |
+
inQuotes = false
|
| 51 |
+
}
|
| 52 |
+
} else {
|
| 53 |
+
cur += ch
|
| 54 |
+
}
|
| 55 |
+
} else {
|
| 56 |
+
if (ch === ',') {
|
| 57 |
+
res.push(cur)
|
| 58 |
+
cur = ''
|
| 59 |
+
} else if (ch === '"') {
|
| 60 |
+
inQuotes = true
|
| 61 |
+
} else {
|
| 62 |
+
cur += ch
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
res.push(cur)
|
| 67 |
+
return res
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
function csvEscape(value) {
|
| 71 |
+
if (value == null) return ''
|
| 72 |
+
const s = String(value)
|
| 73 |
+
if (s.includes('"')) return '"' + s.replace(/"/g, '""') + '"'
|
| 74 |
+
if (s.includes(',') || s.includes('\n') || s.includes('\r')) return '"' + s + '"'
|
| 75 |
+
return s
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
async function readCSVFile(filePath) {
|
| 79 |
+
const txt = await fs.readFile(filePath, 'utf8')
|
| 80 |
+
// 兼容 CRLF
|
| 81 |
+
const lines = txt.split(/\r?\n/)
|
| 82 |
+
// 找到第一行非空作为 header
|
| 83 |
+
let headerLineIndex = null
|
| 84 |
+
for (let i = 0; i < lines.length; i++) {
|
| 85 |
+
if (lines[i].trim().length > 0) { headerLineIndex = i; break }
|
| 86 |
+
}
|
| 87 |
+
if (headerLineIndex === null) return { headers: [], rows: [] }
|
| 88 |
+
const headers = parseCSVLine(lines[headerLineIndex])
|
| 89 |
+
const rows = []
|
| 90 |
+
for (let i = headerLineIndex + 1; i < lines.length; i++) {
|
| 91 |
+
const l = lines[i]
|
| 92 |
+
if (l == null || l.trim() === '') continue
|
| 93 |
+
const vals = parseCSVLine(l)
|
| 94 |
+
const obj = {}
|
| 95 |
+
for (let j = 0; j < headers.length; j++) {
|
| 96 |
+
obj[headers[j]] = vals[j] ?? ''
|
| 97 |
+
}
|
| 98 |
+
rows.push(obj)
|
| 99 |
+
}
|
| 100 |
+
return { headers, rows }
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
async function main() {
|
| 104 |
+
const opts = parseArgs(process.argv)
|
| 105 |
+
if (opts.help) { usage(); return }
|
| 106 |
+
|
| 107 |
+
const cwd = process.cwd()
|
| 108 |
+
let files = []
|
| 109 |
+
if (opts.inputDir) {
|
| 110 |
+
const dir = path.isAbsolute(opts.inputDir) ? opts.inputDir : path.join(cwd, opts.inputDir)
|
| 111 |
+
try {
|
| 112 |
+
const names = await fs.readdir(dir)
|
| 113 |
+
files = names.filter(n => n.toLowerCase().endsWith('.csv')).map(n => path.join(dir, n))
|
| 114 |
+
} catch (e) {
|
| 115 |
+
console.error('Failed to read inputDir', e.message)
|
| 116 |
+
process.exit(2)
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
if (opts.files && opts.files.length) {
|
| 120 |
+
const explicit = opts.files.map(f => path.isAbsolute(f) ? f : path.join(cwd, f))
|
| 121 |
+
files = files.concat(explicit)
|
| 122 |
+
}
|
| 123 |
+
// 去重并保持顺序
|
| 124 |
+
files = [...new Set(files)]
|
| 125 |
+
if (files.length === 0) {
|
| 126 |
+
console.error('No CSV files specified. Use --inputDir or pass file paths.')
|
| 127 |
+
usage();
|
| 128 |
+
process.exit(1)
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
const allRows = []
|
| 132 |
+
const headerOrder = []
|
| 133 |
+
const headerSet = new Set()
|
| 134 |
+
|
| 135 |
+
// 先读取所有文件内容到内存,标记文件名最后字符
|
| 136 |
+
const fileDatas = []
|
| 137 |
+
for (const f of files) {
|
| 138 |
+
try {
|
| 139 |
+
const stat = await fs.stat(f)
|
| 140 |
+
if (!stat.isFile()) { console.warn('Skipping (not a file):', f); continue }
|
| 141 |
+
} catch (e) { console.warn('Skipping (not found):', f); continue }
|
| 142 |
+
const { headers, rows } = await readCSVFile(f)
|
| 143 |
+
const base = path.basename(f)
|
| 144 |
+
const nameNoExt = base.replace(/\.[^/.]+$/, '')
|
| 145 |
+
const lastChar = nameNoExt.slice(-1)
|
| 146 |
+
fileDatas.push({ path: f, headers, rows, nameNoExt, lastChar })
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
// 找到文件3(末尾字符为 '3')并创建第一列值的集合
|
| 150 |
+
let file3Set = null
|
| 151 |
+
const file3 = fileDatas.find(d => d.lastChar === '3')
|
| 152 |
+
if (file3) {
|
| 153 |
+
const firstHdr = file3.headers && file3.headers.length > 0 ? file3.headers[0] : null
|
| 154 |
+
file3Set = new Set()
|
| 155 |
+
if (firstHdr) {
|
| 156 |
+
for (const r of file3.rows) {
|
| 157 |
+
const v = r[firstHdr]
|
| 158 |
+
if (v != null) file3Set.add(String(v))
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
// 现在按原顺序合并表头并收集行。对文件0(末尾字符为 '0')如果存在 file3Set,进行过滤:
|
| 164 |
+
const removedRows = []
|
| 165 |
+
for (const d of fileDatas) {
|
| 166 |
+
const { headers, rows, lastChar } = d
|
| 167 |
+
for (const h of headers) {
|
| 168 |
+
if (!headerSet.has(h)) {
|
| 169 |
+
headerSet.add(h)
|
| 170 |
+
headerOrder.push(h)
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
if (lastChar === '0' && file3Set) {
|
| 174 |
+
// 使用此文件自身的第一列作为 model_name 字段
|
| 175 |
+
const firstHdr = headers && headers.length > 0 ? headers[0] : null
|
| 176 |
+
if (!firstHdr) continue
|
| 177 |
+
for (const r of rows) {
|
| 178 |
+
const val = r[firstHdr]
|
| 179 |
+
if (val != null && file3Set.has(String(val))) {
|
| 180 |
+
allRows.push(r)
|
| 181 |
+
} else {
|
| 182 |
+
// 记录被删除的行信息,便于日志输出
|
| 183 |
+
removedRows.push({ source: d.path, key: firstHdr, value: val, row: r })
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
} else {
|
| 187 |
+
for (const r of rows) allRows.push(r)
|
| 188 |
+
}
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
// 另外一遍,确保所有行都有 headerOrder 中的字段(填空)
|
| 192 |
+
const outRows = allRows.map(r => {
|
| 193 |
+
const o = {}
|
| 194 |
+
for (const h of headerOrder) o[h] = (h in r) ? r[h] : ''
|
| 195 |
+
// 也把那些在 headerOrder 之后才出现的字段加上(理论上我们已把所有文件头收集到 headerOrder)
|
| 196 |
+
for (const k of Object.keys(r)) if (!headerSet.has(k)) { headerSet.add(k); headerOrder.push(k); o[k] = r[k] }
|
| 197 |
+
return o
|
| 198 |
+
})
|
| 199 |
+
|
| 200 |
+
// 写出 CSV
|
| 201 |
+
let outPath = path.isAbsolute(opts.out) ? opts.out : path.join(cwd, opts.out)
|
| 202 |
+
// 如果用户传入的 out 以路径分隔符结尾或显式是目录,写入该目录下的 merged.csv
|
| 203 |
+
const looksLikeDir = opts.out.endsWith('/') || opts.out.endsWith('\\')
|
| 204 |
+
if (looksLikeDir) {
|
| 205 |
+
outPath = path.join(outPath, 'merged.csv')
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
try {
|
| 209 |
+
const st = await fs.stat(outPath)
|
| 210 |
+
if (st.isDirectory()) {
|
| 211 |
+
outPath = path.join(outPath, 'merged.csv')
|
| 212 |
+
}
|
| 213 |
+
} catch (e) {
|
| 214 |
+
// not exists -> will create parent directory below
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
const headerLine = headerOrder.map(csvEscape).join(',')
|
| 218 |
+
const lines = [headerLine]
|
| 219 |
+
for (const r of outRows) {
|
| 220 |
+
const vals = headerOrder.map(h => csvEscape(r[h]))
|
| 221 |
+
lines.push(vals.join(','))
|
| 222 |
+
}
|
| 223 |
+
await fs.mkdir(path.dirname(outPath), { recursive: true })
|
| 224 |
+
await fs.writeFile(outPath, lines.join('\n'), 'utf8')
|
| 225 |
+
console.log(`Wrote merged CSV to ${outPath} (${outRows.length} rows, ${headerOrder.length} columns)`)
|
| 226 |
+
|
| 227 |
+
// 如果有被删除的行,打印并写日志
|
| 228 |
+
if (removedRows.length > 0) {
|
| 229 |
+
console.log(`Removed ${removedRows.length} rows from files (not present in file3). Logging to removed_rows.log`)
|
| 230 |
+
const logLines = []
|
| 231 |
+
logLines.push(`Removed ${removedRows.length} rows - details:`)
|
| 232 |
+
for (const it of removedRows) {
|
| 233 |
+
logLines.push(`source=${it.source} ${it.key}=${it.value} row=${JSON.stringify(it.row)}`)
|
| 234 |
+
}
|
| 235 |
+
// 写入到输出目录下的 removed_rows.log
|
| 236 |
+
const logPath = path.join(path.dirname(outPath), 'removed_rows.log')
|
| 237 |
+
await fs.writeFile(logPath, logLines.join('\n'), 'utf8')
|
| 238 |
+
for (let i = 0; i < Math.min(50, logLines.length); i++) console.log(logLines[i])
|
| 239 |
+
if (logLines.length > 50) console.log(`... see ${logPath} for full log`)
|
| 240 |
+
} else {
|
| 241 |
+
console.log('No rows were removed by file3 filtering.')
|
| 242 |
+
}
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
main().catch(err => {
|
| 246 |
+
console.error('Error:', err && err.stack ? err.stack : err)
|
| 247 |
+
process.exit(3)
|
| 248 |
+
})
|
src/App.vue
CHANGED
|
@@ -1,114 +1,13 @@
|
|
| 1 |
-
<script setup
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
// Mock data for LLM leaderboard
|
| 5 |
-
const leaderboard = [
|
| 6 |
-
{ rank: 1, name: 'GPT-5', score: 95.2, provider: 'OpenAI' },
|
| 7 |
-
{ rank: 2, name: 'Claude sonnect 4.5', score: 94.8, provider: 'Anthropic' },
|
| 8 |
-
{ rank: 3, name: 'Gemini-2.5', score: 94.1, provider: 'Google' },
|
| 9 |
-
{ rank: 4, name: 'Llama-4', score: 93.5, provider: 'Meta' },
|
| 10 |
-
{ rank: 5, name: 'Mistral-7B', score: 92.9, provider: 'Mistral AI' },
|
| 11 |
-
{ rank: 6, name: 'PaLM-2', score: 92.3, provider: 'Google' },
|
| 12 |
-
{ rank: 7, name: 'Falcon-180B', score: 91.7, provider: 'Technology Innovation Institute' },
|
| 13 |
-
{ rank: 8, name: 'Qwen3', score: 91.2, provider: 'Alibaba' },
|
| 14 |
-
{ rank: 9, name: 'Vicuna-13B', score: 90.8, provider: 'LMSYS' },
|
| 15 |
-
{ rank: 10, name: 'ChatGLM-6B', score: 90.3, provider: 'Tsinghua University' },
|
| 16 |
-
]
|
| 17 |
-
|
| 18 |
-
// theme (dark mode) support: sync with document root class and localStorage
|
| 19 |
-
const isDark = ref(false)
|
| 20 |
-
|
| 21 |
-
onMounted(() => {
|
| 22 |
-
const stored = localStorage.getItem('theme')
|
| 23 |
-
if (stored === 'dark') {
|
| 24 |
-
isDark.value = true
|
| 25 |
-
} else if (stored === 'light') {
|
| 26 |
-
isDark.value = false
|
| 27 |
-
} else {
|
| 28 |
-
// follow system preference when no stored preference
|
| 29 |
-
isDark.value = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
| 30 |
-
}
|
| 31 |
-
})
|
| 32 |
-
|
| 33 |
-
watch(isDark, (val) => {
|
| 34 |
-
try {
|
| 35 |
-
if (val) document.documentElement.classList.add('dark')
|
| 36 |
-
else document.documentElement.classList.remove('dark')
|
| 37 |
-
localStorage.setItem('theme', val ? 'dark' : 'light')
|
| 38 |
-
} catch (e) {
|
| 39 |
-
// ignore if SSR or unavailable
|
| 40 |
-
}
|
| 41 |
-
})
|
| 42 |
-
|
| 43 |
-
function toggleTheme() {
|
| 44 |
-
isDark.value = !isDark.value
|
| 45 |
-
}
|
| 46 |
</script>
|
| 47 |
|
| 48 |
<template>
|
| 49 |
-
<div
|
| 50 |
-
<
|
| 51 |
-
<header class="mb-6 flex items-start justify-between">
|
| 52 |
-
<div>
|
| 53 |
-
<h1 class="text-3xl font-extrabold text-gray-900 dark:text-gray-100">LLM Leaderboard</h1>
|
| 54 |
-
<p class="mt-1 text-sm text-gray-600 dark:text-gray-300">按分数排序的顶级大模型(演示数据)</p>
|
| 55 |
-
</div>
|
| 56 |
-
</header>
|
| 57 |
-
|
| 58 |
-
<div class="bg-white dark:bg-gray-900/60 shadow rounded-lg overflow-hidden">
|
| 59 |
-
<div
|
| 60 |
-
class="px-6 py-4 border-b bg-gradient-to-r from-indigo-50 via-white to-white dark:bg-gradient-to-r dark:from-gray-800 dark:via-gray-900 dark:to-gray-900">
|
| 61 |
-
<div class="flex items-center justify-between">
|
| 62 |
-
<h2 class="text-lg font-medium text-gray-800 dark:text-gray-50">排行榜</h2>
|
| 63 |
-
<div class="text-sm text-gray-500 dark:text-gray-300">更新于模拟数据</div>
|
| 64 |
-
</div>
|
| 65 |
-
</div>
|
| 66 |
-
|
| 67 |
-
<div class="p-4 overflow-x-auto">
|
| 68 |
-
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
|
| 69 |
-
<thead class="bg-gray-50 dark:bg-gradient-to-r dark:from-gray-800 dark:to-gray-900">
|
| 70 |
-
<tr>
|
| 71 |
-
<th
|
| 72 |
-
class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 73 |
-
排名</th>
|
| 74 |
-
<th
|
| 75 |
-
class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 76 |
-
模型名称</th>
|
| 77 |
-
<th
|
| 78 |
-
class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 79 |
-
分数</th>
|
| 80 |
-
<th
|
| 81 |
-
class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 82 |
-
提供商</th>
|
| 83 |
-
</tr>
|
| 84 |
-
</thead>
|
| 85 |
-
<tbody class="bg-white dark:bg-transparent divide-y divide-gray-100 dark:divide-gray-700">
|
| 86 |
-
<tr v-for="model in leaderboard" :key="model.rank" :class="{
|
| 87 |
-
'bg-yellow-50 dark:bg-yellow-700/25': model.rank === 1,
|
| 88 |
-
'bg-gray-50 dark:bg-gray-800/60': model.rank === 2,
|
| 89 |
-
'bg-indigo-50 dark:bg-indigo-700/25': model.rank === 3
|
| 90 |
-
}" class="hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-150">
|
| 91 |
-
<td class="px-4 py-3 whitespace-nowrap font-medium text-gray-800 dark:text-gray-50">#{{ model.rank }}
|
| 92 |
-
</td>
|
| 93 |
-
<td class="px-4 py-3 whitespace-nowrap">
|
| 94 |
-
<div class="text-sm font-semibold text-gray-900 dark:text-gray-50">{{ model.name }}</div>
|
| 95 |
-
</td>
|
| 96 |
-
<td class="px-4 py-3 whitespace-nowrap">
|
| 97 |
-
<div class="text-sm text-gray-800 dark:text-gray-50">{{ model.score.toFixed(1) }}</div>
|
| 98 |
-
</td>
|
| 99 |
-
<td class="px-4 py-3 whitespace-nowrap">
|
| 100 |
-
<span
|
| 101 |
-
class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 dark:bg-gray-700/60 dark:border dark:border-gray-600 text-gray-800 dark:text-gray-100">
|
| 102 |
-
{{ model.provider }}
|
| 103 |
-
</span>
|
| 104 |
-
</td>
|
| 105 |
-
</tr>
|
| 106 |
-
</tbody>
|
| 107 |
-
</table>
|
| 108 |
-
</div>
|
| 109 |
-
</div>
|
| 110 |
-
</div>
|
| 111 |
</div>
|
| 112 |
</template>
|
| 113 |
|
| 114 |
-
<style
|
|
|
|
|
|
|
|
|
| 1 |
+
<script setup>
|
| 2 |
+
// 这里可以添加全局的逻辑,比如主题切换等,如果需要的话
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
</script>
|
| 4 |
|
| 5 |
<template>
|
| 6 |
+
<div id="app">
|
| 7 |
+
<router-view />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
</div>
|
| 9 |
</template>
|
| 10 |
|
| 11 |
+
<style>
|
| 12 |
+
/* 全局样式 */
|
| 13 |
+
</style>
|
src/components/Chart.vue
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script setup>
|
| 2 |
+
import { ref, onMounted, onBeforeUnmount, watch } from 'vue'
|
| 3 |
+
import { useLeaderboardData } from '@/composables/useLeaderboardData.js'
|
| 4 |
+
import * as echarts from 'echarts'
|
| 5 |
+
|
| 6 |
+
const chartRef = ref(null)
|
| 7 |
+
let chart = null
|
| 8 |
+
|
| 9 |
+
const { leaderboard, selectedDataName } = useLeaderboardData()
|
| 10 |
+
|
| 11 |
+
// 接受一个可选 prop:autoShowSeries(数组),用于指定哪些模型类型在图表加载时自动显示。
|
| 12 |
+
// 例如:<Chart :autoShowSeries="['gemma-3','Hunyuan']" />
|
| 13 |
+
const props = defineProps({
|
| 14 |
+
autoShowSeries: { type: Array, default: () => [] }
|
| 15 |
+
})
|
| 16 |
+
|
| 17 |
+
// 把 leaderboard 转成 ECharts 所需的 series 数组(每个 model_series 一条线)
|
| 18 |
+
function buildSeriesFromLeaderboard(rows = []) {
|
| 19 |
+
const groups = {}
|
| 20 |
+
rows.forEach(r => {
|
| 21 |
+
// 按 model_type 分组;如果 model_type 未填则标记为 未知
|
| 22 |
+
const seriesName = r.model_type || '未知'
|
| 23 |
+
if (!groups[seriesName]) groups[seriesName] = []
|
| 24 |
+
// 数据原本单位为 TFLOPs,转换为 FLOPs(1 TFLOP = 1e12 FLOPs)用于对数尺度显示
|
| 25 |
+
const xRaw = parseFloat(r.BF16_TFLOPs) || 0
|
| 26 |
+
const x = xRaw > 0 ? xRaw * 1e12 : 0
|
| 27 |
+
const y = parseFloat(r.information_capacity ?? r.ic) || 0
|
| 28 |
+
const rank = Number(r.rank) || 0
|
| 29 |
+
groups[seriesName].push({ x, y, rank })
|
| 30 |
+
})
|
| 31 |
+
|
| 32 |
+
return Object.keys(groups).map(name => {
|
| 33 |
+
// 过滤掉 x<=0 的点(对数坐标轴不能显示 0 或负值),并按 rank 排序
|
| 34 |
+
const data = groups[name]
|
| 35 |
+
.filter(p => Number.isFinite(p.x) && p.x > 0 && Number.isFinite(p.y))
|
| 36 |
+
.sort((a, b) => a.rank - b.rank)
|
| 37 |
+
.map(d => [d.x, d.y])
|
| 38 |
+
return { name, rawCount: groups[name].length, type: 'line', showSymbol: true, symbolSize: 6, data }
|
| 39 |
+
})
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
function getChartOption(series) {
|
| 43 |
+
// 计算数据范围以自动缩放坐标轴,避免留太多空白
|
| 44 |
+
const allX = []
|
| 45 |
+
const allY = []
|
| 46 |
+
series.forEach(s => {
|
| 47 |
+
if (Array.isArray(s.data)) {
|
| 48 |
+
s.data.forEach(d => {
|
| 49 |
+
const x = Number(d[0])
|
| 50 |
+
const y = Number(d[1])
|
| 51 |
+
if (Number.isFinite(x)) allX.push(x)
|
| 52 |
+
if (Number.isFinite(y)) allY.push(y)
|
| 53 |
+
})
|
| 54 |
+
}
|
| 55 |
+
})
|
| 56 |
+
let xMin = allX.length ? Math.min(...allX) : undefined
|
| 57 |
+
let xMax = allX.length ? Math.max(...allX) : undefined
|
| 58 |
+
let yMin = allY.length ? Math.min(...allY) : undefined
|
| 59 |
+
let yMax = allY.length ? Math.max(...allY) : undefined
|
| 60 |
+
|
| 61 |
+
// 对数轴不能为 0 或负值,确保 min>0;并添加一些 padding
|
| 62 |
+
if (xMin !== undefined && xMax !== undefined) {
|
| 63 |
+
// 防止极值过于接近或相等
|
| 64 |
+
if (xMin <= 0) xMin = Math.min(...allX.filter(v => v > 0)) || xMax
|
| 65 |
+
if (xMin === xMax) {
|
| 66 |
+
xMin = xMin / 10
|
| 67 |
+
xMax = xMax * 10
|
| 68 |
+
} else {
|
| 69 |
+
xMin = xMin * 0.8
|
| 70 |
+
xMax = xMax * 1.15
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
if (yMin !== undefined && yMax !== undefined) {
|
| 75 |
+
if (yMin === yMax) {
|
| 76 |
+
// small symmetric padding
|
| 77 |
+
const v = yMin || 1
|
| 78 |
+
yMin = v - Math.abs(v) * 0.05
|
| 79 |
+
yMax = v + Math.abs(v) * 0.05
|
| 80 |
+
} else {
|
| 81 |
+
const pad = (yMax - yMin) * 0.08
|
| 82 |
+
yMin = yMin - pad
|
| 83 |
+
yMax = yMax + pad
|
| 84 |
+
}
|
| 85 |
+
// 如果 yMin 变为负但原数据全为正,可以下限为 0
|
| 86 |
+
if (yMin < 0 && Math.min(...allY) >= 0) yMin = 0
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
// helper: 将整数指数转换为 Unicode 上标字符,例如 9 -> '⁹', -3 -> '⁻³'
|
| 90 |
+
function toSuperscript(n) {
|
| 91 |
+
const map = { '0': '⁰', '1': '¹', '2': '²', '3': '³', '4': '⁴', '5': '⁵', '6': '⁶', '7': '⁷', '8': '⁸', '9': '⁹', '-': '⁻' }
|
| 92 |
+
const s = String(n)
|
| 93 |
+
return s.split('').map(ch => map[ch] || ch).join('')
|
| 94 |
+
}
|
| 95 |
+
// 可循环使用的视觉样式(颜色/符号/线型)
|
| 96 |
+
const colors = ['#1f77b4','#ff7f0e','#2ca02c','#d62728','#9467bd','#8c564b','#e377c2','#7f7f7f','#bcbd22','#17becf']
|
| 97 |
+
const symbols = ['circle','rect','triangle','diamond','pin','arrow','star','roundRect','triangle','circle']
|
| 98 |
+
const lineStyles = ['solid','solid','solid','solid','dash','solid','solid','dash','solid','dash']
|
| 99 |
+
|
| 100 |
+
// 给每个 series 注入视觉样式
|
| 101 |
+
const styledSeries = series.map((s, idx) => {
|
| 102 |
+
const color = colors[idx % colors.length]
|
| 103 |
+
return Object.assign({}, s, {
|
| 104 |
+
lineStyle: { width: 2, type: lineStyles[idx % lineStyles.length], color },
|
| 105 |
+
itemStyle: { color },
|
| 106 |
+
symbol: symbols[idx % symbols.length],
|
| 107 |
+
emphasis: { focus: 'series' }
|
| 108 |
+
})
|
| 109 |
+
})
|
| 110 |
+
|
| 111 |
+
// 构建 legend.selected 映射:只有 props.autoShowSeries 中的系列会默认显示,其他需手动点击 legend 打开
|
| 112 |
+
const legendSelected = {}
|
| 113 |
+
styledSeries.forEach(s => {
|
| 114 |
+
const name = String(s.name)
|
| 115 |
+
legendSelected[name] = Array.isArray(props.autoShowSeries) && props.autoShowSeries.includes(name)
|
| 116 |
+
})
|
| 117 |
+
|
| 118 |
+
return {
|
| 119 |
+
color: colors,
|
| 120 |
+
title: { text: 'BF16_TFLOPs vs IC', left: '6%', textStyle: { color: '#cfd8dc' } },
|
| 121 |
+
tooltip: {
|
| 122 |
+
trigger: 'item',
|
| 123 |
+
formatter: params => {
|
| 124 |
+
if (!params) return ''
|
| 125 |
+
const x = params.data && Array.isArray(params.data) ? params.data[0] : ''
|
| 126 |
+
const y = params.data && Array.isArray(params.data) ? params.data[1] : ''
|
| 127 |
+
// 显示 X 为 mantissa×10^n,并把指数用上标显示
|
| 128 |
+
let xStr = ''
|
| 129 |
+
if (typeof x === 'number' && Number.isFinite(x) && x > 0) {
|
| 130 |
+
const exp = Math.floor(Math.log10(x))
|
| 131 |
+
const mant = x / Math.pow(10, exp)
|
| 132 |
+
const mantStr = mant >= 10 ? mant.toFixed(0) : mant.toFixed(2)
|
| 133 |
+
xStr = `${mantStr}×10${toSuperscript(exp)}`
|
| 134 |
+
} else {
|
| 135 |
+
xStr = String(x)
|
| 136 |
+
}
|
| 137 |
+
const yStr = (typeof y === 'number' && Number.isFinite(y)) ? Number(y).toFixed(2) : String(y)
|
| 138 |
+
return `${params.seriesName}<br/>FLOPs: ${xStr}<br/>IC: ${yStr}`
|
| 139 |
+
}
|
| 140 |
+
},
|
| 141 |
+
legend: Object.assign({
|
| 142 |
+
orient: 'vertical',
|
| 143 |
+
right: 10,
|
| 144 |
+
top: '10%',
|
| 145 |
+
align: 'left',
|
| 146 |
+
itemWidth: 14,
|
| 147 |
+
itemHeight: 10,
|
| 148 |
+
textStyle: { color: '#cfd8dc' },
|
| 149 |
+
tooltip: { show: true }
|
| 150 |
+
}, { selected: legendSelected }),
|
| 151 |
+
grid: { left: '6%', right: '20%', bottom: '8%', containLabel: true },
|
| 152 |
+
xAxis: {
|
| 153 |
+
type: 'log',
|
| 154 |
+
name: 'FLOPs',
|
| 155 |
+
nameLocation: 'middle',
|
| 156 |
+
nameGap: 30,
|
| 157 |
+
axisLine: { lineStyle: { color: '#78909c' } },
|
| 158 |
+
axisLabel: {
|
| 159 |
+
color: '#b0bec5',
|
| 160 |
+
formatter: value => {
|
| 161 |
+
if (!Number.isFinite(value) || value <= 0) return String(value)
|
| 162 |
+
const exp = Math.floor(Math.log10(value))
|
| 163 |
+
const mant = value / Math.pow(10, exp)
|
| 164 |
+
if (Math.abs(mant - 1) < 1e-6) return `10${toSuperscript(exp)}`
|
| 165 |
+
return `${mant.toFixed(2)}×10${toSuperscript(exp)}`
|
| 166 |
+
}
|
| 167 |
+
},
|
| 168 |
+
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#37474f' } },
|
| 169 |
+
min: xMin,
|
| 170 |
+
max: xMax
|
| 171 |
+
},
|
| 172 |
+
yAxis: {
|
| 173 |
+
type: 'value',
|
| 174 |
+
name: 'Information capacity',
|
| 175 |
+
axisLine: { lineStyle: { color: '#78909c' } },
|
| 176 |
+
axisLabel: { color: '#b0bec5', formatter: v => (Number.isFinite(v) ? Number(v).toFixed(2) : String(v)) },
|
| 177 |
+
splitLine: { show: true, lineStyle: { type: 'dashed', color: '#37474f' } },
|
| 178 |
+
min: yMin,
|
| 179 |
+
max: yMax
|
| 180 |
+
},
|
| 181 |
+
series: styledSeries
|
| 182 |
+
}
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
let resizeHandler = null
|
| 186 |
+
|
| 187 |
+
function renderChart() {
|
| 188 |
+
if (!chart) return
|
| 189 |
+
let rows = leaderboard.value || []
|
| 190 |
+
// 根据 selectedDataName 过滤数据集(如果未选择或为 'all' 则使用全部)
|
| 191 |
+
const sel = selectedDataName && selectedDataName.value ? String(selectedDataName.value) : ''
|
| 192 |
+
if (sel && sel !== 'all') {
|
| 193 |
+
rows = rows.filter(r => String(r.data_name ?? '') === sel)
|
| 194 |
+
}
|
| 195 |
+
const series = buildSeriesFromLeaderboard(rows)
|
| 196 |
+
const option = getChartOption(series)
|
| 197 |
+
chart.setOption(option, { notMerge: true })
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
onMounted(() => {
|
| 201 |
+
if (!chartRef.value) return
|
| 202 |
+
chart = echarts.init(chartRef.value)
|
| 203 |
+
// 首次渲染(如果数据尚未加载,后续会由 watcher 更新)
|
| 204 |
+
renderChart()
|
| 205 |
+
|
| 206 |
+
resizeHandler = () => chart && chart.resize()
|
| 207 |
+
window.addEventListener('resize', resizeHandler)
|
| 208 |
+
})
|
| 209 |
+
|
| 210 |
+
// 当 leaderboard 变化时重新渲染(不受 visibleColumns 影响)
|
| 211 |
+
watch(leaderboard, () => {
|
| 212 |
+
renderChart()
|
| 213 |
+
}, { deep: true })
|
| 214 |
+
|
| 215 |
+
// 当所选数据集变化时也要重新渲染图表
|
| 216 |
+
watch(selectedDataName, () => {
|
| 217 |
+
renderChart()
|
| 218 |
+
})
|
| 219 |
+
|
| 220 |
+
onBeforeUnmount(() => {
|
| 221 |
+
if (resizeHandler) window.removeEventListener('resize', resizeHandler)
|
| 222 |
+
if (chart) { chart.dispose(); chart = null }
|
| 223 |
+
})
|
| 224 |
+
</script>
|
| 225 |
+
|
| 226 |
+
<template>
|
| 227 |
+
<div ref="chartRef" style="width: 100%; height: 480px;"></div>
|
| 228 |
+
</template>
|
| 229 |
+
|
| 230 |
+
<style scoped></style>
|
src/composables/useLeaderboardData.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { ref, computed, reactive } from 'vue'
|
| 2 |
+
import { parseCsvContent } from '@/utils/csvUtils.js'
|
| 3 |
+
|
| 4 |
+
// 全局状态对象,用于在多个组件间共享
|
| 5 |
+
const globalState = reactive({
|
| 6 |
+
leaderboard: [],
|
| 7 |
+
csvHeaders: [],
|
| 8 |
+
loading: true,
|
| 9 |
+
error: null,
|
| 10 |
+
visibleColumns: [],
|
| 11 |
+
dataGroups: [],
|
| 12 |
+
selectedDataName: '',
|
| 13 |
+
modelTypeGroups: [],
|
| 14 |
+
selectedModelType: '',
|
| 15 |
+
DEFAULT_CSV_PATH: '/finalData/filtered.csv',
|
| 16 |
+
DEFAULT_HIDDEN: new Set(['seq_len', 'uniform_entropy', 'entropy_gain', 'information_capacity', 'data_name']) // 默认隐藏的列
|
| 17 |
+
})
|
| 18 |
+
|
| 19 |
+
// 模型类型映射对象:键为模型类型,值为包含的 model_series 数组
|
| 20 |
+
const modelTypeMapping = {
|
| 21 |
+
'Qwen1.5':['Qwen1.5'],
|
| 22 |
+
'Qwen2.5':['Qwen2.5'],
|
| 23 |
+
'Gemma-3': ['gemma-3'],
|
| 24 |
+
'Qwen2': ['Qwen2'],
|
| 25 |
+
'Hunyuan': ['Hunyuan'],
|
| 26 |
+
'Qwen3': ['Qwen3'],
|
| 27 |
+
'InternLM2.5': ['internlm2.5'],
|
| 28 |
+
'Llama-3': ['Llama-3.1','Llama-3.2'],
|
| 29 |
+
'DeepSeek-V2': ['DeepSeek-V2'],
|
| 30 |
+
'DeepSeek-V3.1': ['DeepSeek-V3.1-Base'],
|
| 31 |
+
'GLM-4': ['glm-4','GLM-4'],
|
| 32 |
+
'GLM-4.5': ['GLM-4.5-Air-Base','GLM-4.5-Base'],
|
| 33 |
+
'Llama-4': ['Llama-4'],
|
| 34 |
+
'Seed-OSS': ['Seed-OSS'],
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
const autoShowSeries = ['Qwen3','Llama-3','InternLM2.5','GLM-4','Seed-OSS','Gemma-3','Hunyuan','DeepSeek-V3.1','DeepSeek-V2','GLM-4.5']
|
| 38 |
+
|
| 39 |
+
// 表头显示名称映射(raw header -> 显示名),可以在此添加或由用户修改
|
| 40 |
+
const headerDisplayMap = reactive({
|
| 41 |
+
'model_name': 'MODEL NAME',
|
| 42 |
+
'model_series': 'MODEL SERIES',
|
| 43 |
+
'model_size (B)': 'MODEL SIZE (B)',
|
| 44 |
+
'BF16_TFLOPs': 'BF16 TFLOPs',
|
| 45 |
+
'ic': 'IC',
|
| 46 |
+
})
|
| 47 |
+
|
| 48 |
+
// 数据集名称显示映射(raw data_name -> 显示名)
|
| 49 |
+
const dataNameDisplayMap = reactive({
|
| 50 |
+
'data_part_0000': 'Data Part 0000',
|
| 51 |
+
'NextCoderDataset_v1_lo': 'NextCoder v1',
|
| 52 |
+
'IndustryCorpus_batch_aa_long': 'Industry Corpus AA',
|
| 53 |
+
'CC-MAIN-2013-20_train-00000-of-00014_long': 'CC-MAIN (2013-20)',
|
| 54 |
+
'NextCoderDataset_v1_long': 'NextCoder v1',
|
| 55 |
+
})
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
// 可选择的列(不包含 rank,也不包含被默认隐藏的列)
|
| 59 |
+
const selectableColumns = computed(() => {
|
| 60 |
+
if (!globalState.csvHeaders || globalState.csvHeaders.length === 0) return []
|
| 61 |
+
return globalState.csvHeaders.slice(1).filter(h => !globalState.DEFAULT_HIDDEN.has(h))
|
| 62 |
+
})
|
| 63 |
+
|
| 64 |
+
// 模型类型分组(从映射对象中获取)
|
| 65 |
+
const modelTypeGroups = computed(() => {
|
| 66 |
+
return Object.keys(modelTypeMapping)
|
| 67 |
+
})
|
| 68 |
+
|
| 69 |
+
// 根据 selectedDataName 和 selectedModelType 过滤 leaderboard,用于表格渲染
|
| 70 |
+
const filteredLeaderboard = computed(() => {
|
| 71 |
+
if (!globalState.leaderboard || globalState.leaderboard.length === 0) return []
|
| 72 |
+
let filtered = globalState.leaderboard
|
| 73 |
+
|
| 74 |
+
// 过滤数据集
|
| 75 |
+
if (globalState.selectedDataName && globalState.selectedDataName !== 'all') {
|
| 76 |
+
filtered = filtered.filter(r => String(r['data_name'] ?? '') === String(globalState.selectedDataName))
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
// 过滤模型类型
|
| 80 |
+
if (globalState.selectedModelType && globalState.selectedModelType !== 'all') {
|
| 81 |
+
filtered = filtered.filter(r => String(r['model_type'] ?? '') === String(globalState.selectedModelType))
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
return filtered
|
| 85 |
+
})
|
| 86 |
+
|
| 87 |
+
// 计算当前应该显示的列(不含 rank)
|
| 88 |
+
const displayedColumns = computed(() => {
|
| 89 |
+
if (!globalState.csvHeaders || globalState.csvHeaders.length === 0) return []
|
| 90 |
+
// csvHeaders includes 'rank' at idx 0
|
| 91 |
+
const all = globalState.csvHeaders.slice(1)
|
| 92 |
+
return all.filter(h => globalState.visibleColumns.includes(h))
|
| 93 |
+
})
|
| 94 |
+
|
| 95 |
+
async function fetchAndLoadCsv(path = globalState.DEFAULT_CSV_PATH) {
|
| 96 |
+
globalState.loading = true
|
| 97 |
+
globalState.error = null
|
| 98 |
+
try {
|
| 99 |
+
const res = await fetch(path)
|
| 100 |
+
if (!res.ok) throw new Error(`Failed to fetch CSV (${res.status})`)
|
| 101 |
+
const txt = await res.text()
|
| 102 |
+
const { headers, rows } = parseCsvContent(txt)
|
| 103 |
+
if (!headers || headers.length === 0) { globalState.leaderboard = []; globalState.loading = false; return }
|
| 104 |
+
|
| 105 |
+
// 选择用于排序/显示的分数字段(优先 information_capacity, ic, 然后尝试 numeric-like fields)
|
| 106 |
+
const scoreKey = headers.find(h => ['information_capacity', 'ic', 'score'].includes(h)) || headers.find(h => /capacity|score|ic/i.test(h)) || headers[0]
|
| 107 |
+
|
| 108 |
+
// 按 scoreKey 排序(保持所有字段),然后把每行写入 leaderboard,同时记录 headers
|
| 109 |
+
rows.sort((a, b) => (Number(b[scoreKey]) || 0) - (Number(a[scoreKey]) || 0))
|
| 110 |
+
|
| 111 |
+
// 我们希望确保一些关键列按顺序显示
|
| 112 |
+
const preferred = ['model_name', 'model_series', 'model_size (B)', 'seq_len', 'uniform_entropy', 'constant', 'conditional_entropy', 'entropy_gain', 'BF16_TFLOPs', 'information_capacity', 'ic']
|
| 113 |
+
const ordered = []
|
| 114 |
+
for (const p of preferred) if (headers.includes(p) && !ordered.includes(p)) ordered.push(p)
|
| 115 |
+
for (const h of headers) if (!ordered.includes(h)) ordered.push(h)
|
| 116 |
+
globalState.csvHeaders = ['rank', ...ordered]
|
| 117 |
+
globalState.leaderboard = rows.map((r, idx) => {
|
| 118 |
+
// 根据 model_series 推断 model_type
|
| 119 |
+
let modelType = ''
|
| 120 |
+
for (const [type, series] of Object.entries(modelTypeMapping)) {
|
| 121 |
+
if (series.includes(r['model_series'])) {
|
| 122 |
+
modelType = type
|
| 123 |
+
break
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
return { rank: idx + 1, model_type: modelType, ...r }
|
| 127 |
+
})
|
| 128 |
+
|
| 129 |
+
// 构建 data_name 分组(保持出现顺序,不包含空)
|
| 130 |
+
const seen = new Set()
|
| 131 |
+
const groups = []
|
| 132 |
+
for (const r of rows) {
|
| 133 |
+
const dn = r['data_name']
|
| 134 |
+
if (dn == null) continue
|
| 135 |
+
const s = String(dn)
|
| 136 |
+
if (s.trim() === '') continue
|
| 137 |
+
if (!seen.has(s)) { seen.add(s); groups.push(s) }
|
| 138 |
+
}
|
| 139 |
+
globalState.dataGroups = groups
|
| 140 |
+
|
| 141 |
+
// 构建 model_type 分组
|
| 142 |
+
globalState.modelTypeGroups = Object.keys(modelTypeMapping)
|
| 143 |
+
|
| 144 |
+
// 默认显示第一个数据集
|
| 145 |
+
if (globalState.dataGroups.length > 0) {
|
| 146 |
+
globalState.selectedDataName = globalState.dataGroups[0]
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
// 默认显示第一个模型类型
|
| 150 |
+
if (globalState.modelTypeGroups.length > 0) {
|
| 151 |
+
globalState.selectedModelType = 'all'
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// 初始化可见列:优先使用 localStorage,否则默认显示所有列(除了 rank)
|
| 155 |
+
try {
|
| 156 |
+
const saved = localStorage.getItem('visible_columns')
|
| 157 |
+
if (saved) {
|
| 158 |
+
const parsed = JSON.parse(saved)
|
| 159 |
+
if (Array.isArray(parsed)) {
|
| 160 |
+
// 仅保留当前 CSV 中存在且不是默认隐藏的列
|
| 161 |
+
globalState.visibleColumns = parsed.filter(h => ordered.includes(h) && !globalState.DEFAULT_HIDDEN.has(h))
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
+
} catch (e) {
|
| 165 |
+
// ignore malformed localStorage
|
| 166 |
+
}
|
| 167 |
+
if (!globalState.visibleColumns || globalState.visibleColumns.length === 0) {
|
| 168 |
+
// 默认显示所有可选列(不包含默认隐藏列)
|
| 169 |
+
globalState.visibleColumns = ordered.filter(h => !globalState.DEFAULT_HIDDEN.has(h))
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
// 格式化 helper
|
| 173 |
+
const numericFloatCols = new Set(['uniform_entropy','conditional_entropy','entropy_gain','information_capacity','ic','constant','BF16_TFLOPs'])
|
| 174 |
+
const numericIntCols = new Set(['seq_len'])
|
| 175 |
+
// attach formatter per row for rendering convenience (non-reactive simple values)
|
| 176 |
+
for (const row of globalState.leaderboard) {
|
| 177 |
+
row._formatted = {}
|
| 178 |
+
for (const h of ordered) {
|
| 179 |
+
const raw = row[h]
|
| 180 |
+
if (raw == null || raw === '') { row._formatted[h] = '' ; continue }
|
| 181 |
+
if (numericIntCols.has(h)) {
|
| 182 |
+
const n = Number(raw)
|
| 183 |
+
row._formatted[h] = Number.isFinite(n) ? String(Math.round(n)) : raw
|
| 184 |
+
} else if (numericFloatCols.has(h)) {
|
| 185 |
+
const n = Number(raw)
|
| 186 |
+
row._formatted[h] = Number.isFinite(n) ? n.toFixed(3) : raw
|
| 187 |
+
} else {
|
| 188 |
+
row._formatted[h] = raw
|
| 189 |
+
}
|
| 190 |
+
}
|
| 191 |
+
}
|
| 192 |
+
} catch (e) {
|
| 193 |
+
console.error(e)
|
| 194 |
+
globalState.error = e && e.message ? e.message : String(e)
|
| 195 |
+
} finally {
|
| 196 |
+
globalState.loading = false
|
| 197 |
+
}
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
function selectAll() {
|
| 201 |
+
// 复制一份可选列到 visibleColumns
|
| 202 |
+
globalState.visibleColumns = [...selectableColumns.value]
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
function clearAll() {
|
| 206 |
+
globalState.visibleColumns = []
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
function formatCell(h, model) {
|
| 210 |
+
if (!model) return ''
|
| 211 |
+
if (model._formatted && model._formatted[h] !== undefined) return model._formatted[h]
|
| 212 |
+
return model[h]
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
// 初始化函数,在组件挂载时调用
|
| 216 |
+
function init() {
|
| 217 |
+
fetchAndLoadCsv()
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
export function useLeaderboardData() {
|
| 221 |
+
return {
|
| 222 |
+
// 状态
|
| 223 |
+
leaderboard: computed(() => globalState.leaderboard),
|
| 224 |
+
csvHeaders: computed(() => globalState.csvHeaders),
|
| 225 |
+
loading: computed(() => globalState.loading),
|
| 226 |
+
error: computed(() => globalState.error),
|
| 227 |
+
visibleColumns: computed({
|
| 228 |
+
get: () => globalState.visibleColumns,
|
| 229 |
+
set: (v) => globalState.visibleColumns = v
|
| 230 |
+
}),
|
| 231 |
+
selectableColumns,
|
| 232 |
+
autoShowSeries,
|
| 233 |
+
headerDisplayMap: computed(() => headerDisplayMap),
|
| 234 |
+
dataNameDisplayMap: computed(() => dataNameDisplayMap),
|
| 235 |
+
dataGroups: computed(() => globalState.dataGroups),
|
| 236 |
+
selectedDataName: computed({
|
| 237 |
+
get: () => globalState.selectedDataName,
|
| 238 |
+
set: (v) => globalState.selectedDataName = v
|
| 239 |
+
}),
|
| 240 |
+
modelTypeGroups: computed(() => globalState.modelTypeGroups),
|
| 241 |
+
selectedModelType: computed({
|
| 242 |
+
get: () => globalState.selectedModelType,
|
| 243 |
+
set: (v) => globalState.selectedModelType = v
|
| 244 |
+
}),
|
| 245 |
+
filteredLeaderboard,
|
| 246 |
+
displayedColumns,
|
| 247 |
+
// 函数
|
| 248 |
+
fetchAndLoadCsv,
|
| 249 |
+
selectAll,
|
| 250 |
+
clearAll,
|
| 251 |
+
formatCell,
|
| 252 |
+
init
|
| 253 |
+
}
|
| 254 |
+
}
|
src/main.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
| 1 |
import { createApp } from 'vue'
|
| 2 |
import './main.css'
|
| 3 |
import App from './App.vue'
|
|
|
|
| 4 |
|
| 5 |
const app = createApp(App)
|
|
|
|
| 6 |
app.mount('#app')
|
|
|
|
| 1 |
import { createApp } from 'vue'
|
| 2 |
import './main.css'
|
| 3 |
import App from './App.vue'
|
| 4 |
+
import router from './router'
|
| 5 |
|
| 6 |
const app = createApp(App)
|
| 7 |
+
app.use(router)
|
| 8 |
app.mount('#app')
|
src/router/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { createRouter, createWebHistory } from 'vue-router'
|
| 2 |
+
import Leaderboard from '@/views/Leaderboard.vue'
|
| 3 |
+
|
| 4 |
+
const routes = [
|
| 5 |
+
{
|
| 6 |
+
path: '/',
|
| 7 |
+
name: 'Leaderboard',
|
| 8 |
+
component: Leaderboard
|
| 9 |
+
}
|
| 10 |
+
]
|
| 11 |
+
|
| 12 |
+
const router = createRouter({
|
| 13 |
+
history: createWebHistory(),
|
| 14 |
+
routes
|
| 15 |
+
})
|
| 16 |
+
|
| 17 |
+
export default router
|
src/utils/csvUtils.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Lightweight CSV parsing helpers used by the app.
|
| 2 |
+
// Exports:
|
| 3 |
+
// - parseCSVLine(line): parse a single CSV line into array of values (handles quoted fields)
|
| 4 |
+
// - parseCsvContent(text): parse CSV text into { headers: string[], rows: Array<object> }
|
| 5 |
+
|
| 6 |
+
export function parseCSVLine(line) {
|
| 7 |
+
const res = []
|
| 8 |
+
let cur = ''
|
| 9 |
+
let inQuotes = false
|
| 10 |
+
for (let i = 0; i < line.length; i++) {
|
| 11 |
+
const ch = line[i]
|
| 12 |
+
if (inQuotes) {
|
| 13 |
+
if (ch === '"') {
|
| 14 |
+
if (i + 1 < line.length && line[i + 1] === '"') { cur += '"'; i++ } else { inQuotes = false }
|
| 15 |
+
} else { cur += ch }
|
| 16 |
+
} else {
|
| 17 |
+
if (ch === ',') { res.push(cur); cur = '' }
|
| 18 |
+
else if (ch === '"') { inQuotes = true }
|
| 19 |
+
else { cur += ch }
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
res.push(cur)
|
| 23 |
+
return res
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
export function parseCsvContent(txt) {
|
| 27 |
+
const lines = txt.split(/\r?\n/)
|
| 28 |
+
let headerIdx = null
|
| 29 |
+
for (let i = 0; i < lines.length; i++) if (lines[i].trim().length > 0) { headerIdx = i; break }
|
| 30 |
+
if (headerIdx === null) return { headers: [], rows: [] }
|
| 31 |
+
const headers = parseCSVLine(lines[headerIdx])
|
| 32 |
+
const rows = []
|
| 33 |
+
for (let i = headerIdx + 1; i < lines.length; i++) {
|
| 34 |
+
const l = lines[i]
|
| 35 |
+
if (!l || l.trim() === '') continue
|
| 36 |
+
const vals = parseCSVLine(l)
|
| 37 |
+
const obj = {}
|
| 38 |
+
for (let j = 0; j < headers.length; j++) obj[headers[j]] = vals[j] ?? ''
|
| 39 |
+
rows.push(obj)
|
| 40 |
+
}
|
| 41 |
+
return { headers, rows }
|
| 42 |
+
}
|
src/views/Leaderboard.vue
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script setup>
|
| 2 |
+
import { ref, onMounted, watch } from 'vue'
|
| 3 |
+
import { useLeaderboardData } from '@/composables/useLeaderboardData.js'
|
| 4 |
+
import Chart from '@/components/Chart.vue'
|
| 5 |
+
|
| 6 |
+
// 使用数据管理 composable
|
| 7 |
+
const {
|
| 8 |
+
leaderboard,
|
| 9 |
+
csvHeaders,
|
| 10 |
+
loading,
|
| 11 |
+
error,
|
| 12 |
+
visibleColumns,
|
| 13 |
+
selectableColumns,
|
| 14 |
+
dataGroups,
|
| 15 |
+
selectedDataName,
|
| 16 |
+
autoShowSeries,
|
| 17 |
+
headerDisplayMap,
|
| 18 |
+
dataNameDisplayMap,
|
| 19 |
+
modelTypeGroups,
|
| 20 |
+
selectedModelType,
|
| 21 |
+
filteredLeaderboard,
|
| 22 |
+
displayedColumns,
|
| 23 |
+
fetchAndLoadCsv,
|
| 24 |
+
selectAll,
|
| 25 |
+
clearAll,
|
| 26 |
+
formatCell,
|
| 27 |
+
init
|
| 28 |
+
} = useLeaderboardData()
|
| 29 |
+
|
| 30 |
+
// 当 visibleColumns 改变时持久化
|
| 31 |
+
watch(visibleColumns, (v) => {
|
| 32 |
+
try { localStorage.setItem('visible_columns', JSON.stringify(v)) } catch (e) { }
|
| 33 |
+
}, { deep: true })
|
| 34 |
+
|
| 35 |
+
// theme (dark mode) support: sync with document root class and localStorage
|
| 36 |
+
const isDark = ref(false)
|
| 37 |
+
|
| 38 |
+
onMounted(() => {
|
| 39 |
+
init()
|
| 40 |
+
})
|
| 41 |
+
|
| 42 |
+
onMounted(() => {
|
| 43 |
+
const stored = localStorage.getItem('theme')
|
| 44 |
+
if (stored === 'dark') {
|
| 45 |
+
isDark.value = true
|
| 46 |
+
} else if (stored === 'light') {
|
| 47 |
+
isDark.value = false
|
| 48 |
+
} else {
|
| 49 |
+
// follow system preference when no stored preference
|
| 50 |
+
isDark.value = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
| 51 |
+
}
|
| 52 |
+
})
|
| 53 |
+
|
| 54 |
+
watch(isDark, (val) => {
|
| 55 |
+
try {
|
| 56 |
+
if (val) document.documentElement.classList.add('dark')
|
| 57 |
+
else document.documentElement.classList.remove('dark')
|
| 58 |
+
localStorage.setItem('theme', val ? 'dark' : 'light')
|
| 59 |
+
} catch (e) {
|
| 60 |
+
// ignore if SSR or unavailable
|
| 61 |
+
}
|
| 62 |
+
})
|
| 63 |
+
|
| 64 |
+
function toggleTheme() {
|
| 65 |
+
isDark.value = !isDark.value
|
| 66 |
+
}
|
| 67 |
+
</script>
|
| 68 |
+
|
| 69 |
+
<template>
|
| 70 |
+
<div class="min-h-screen bg-gray-50 dark:bg-gradient-to-b dark:from-gray-900 dark:via-gray-800 dark:to-gray-800 py-12 px-4 sm:px-6 lg:px-8">
|
| 71 |
+
<div class=" mx-auto">
|
| 72 |
+
<header class="mb-6 flex items-start justify-between">
|
| 73 |
+
<div>
|
| 74 |
+
<h1 class="text-3xl font-extrabold text-gray-900 dark:text-gray-100">LLM Leaderboard</h1>
|
| 75 |
+
<p class="mt-1 text-sm text-gray-600 dark:text-gray-300">按分数排序的顶级大模型(演示数据)</p>
|
| 76 |
+
</div>
|
| 77 |
+
</header>
|
| 78 |
+
|
| 79 |
+
<Chart :autoShowSeries="autoShowSeries" />
|
| 80 |
+
|
| 81 |
+
<div class="bg-white dark:bg-gray-900/60 shadow rounded-lg overflow-hidden">
|
| 82 |
+
<div
|
| 83 |
+
class="px-6 py-4 border-b bg-gradient-to-r from-indigo-50 via-white to-white dark:bg-gradient-to-r dark:from-gray-800 dark:via-gray-900 dark:to-gray-900">
|
| 84 |
+
<div class="flex items-center justify-between">
|
| 85 |
+
<h2 class="text-lg font-medium text-gray-800 dark:text-gray-50">排行榜</h2>
|
| 86 |
+
<div class="text-sm text-gray-500 dark:text-gray-300">更新于模拟数据</div>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
|
| 90 |
+
<!-- 数据集筛选区域(独立于列筛选) -->
|
| 91 |
+
<div class="px-6 py-3 border-b bg-gray-50 dark:bg-gradient-to-b dark:from-gray-900 dark:to-gray-800">
|
| 92 |
+
<div class="flex items-center gap-3">
|
| 93 |
+
<span class="text-sm font-medium text-gray-700 dark:text-gray-200">数据集筛选</span>
|
| 94 |
+
<div v-if="dataGroups.length > 0" class="flex gap-2 items-center overflow-x-auto">
|
| 95 |
+
<!-- <label class="px-2 py-1 rounded-full border border-gray-200 dark:border-gray-700 text-sm cursor-pointer" :class="{'bg-gray-100 dark:bg-gray-700': selectedDataName==='all'}">
|
| 96 |
+
<input type="radio" class="hidden" value="all" v-model="selectedDataName" /> 全部
|
| 97 |
+
</label> -->
|
| 98 |
+
<label v-for="g in dataGroups" :key="g" class="px-2 py-1 rounded-full border border-gray-200 dark:border-gray-700 text-sm cursor-pointer dark:text-slate-300" :class="{'bg-gray-100 dark:bg-gray-700 dark:text-white': selectedDataName===g}">
|
| 99 |
+
<input type="radio" class="hidden" :value="g" v-model="selectedDataName" /> {{ dataNameDisplayMap[g] ? dataNameDisplayMap[g] : g }}
|
| 100 |
+
</label>
|
| 101 |
+
</div>
|
| 102 |
+
<div v-else class="text-sm text-gray-500 dark:text-gray-400">(数据集中未检测到 data_name 列)</div>
|
| 103 |
+
</div>
|
| 104 |
+
</div>
|
| 105 |
+
|
| 106 |
+
<!-- 模型类型筛选区域 -->
|
| 107 |
+
<div class="px-6 py-3 border-b bg-gray-50 dark:bg-gradient-to-b dark:from-gray-900 dark:to-gray-800">
|
| 108 |
+
<div class="flex items-center gap-3">
|
| 109 |
+
<span class="text-sm font-medium text-gray-700 dark:text-gray-200">模型类型筛选</span>
|
| 110 |
+
<div v-if="modelTypeGroups.length > 0" class="flex gap-2 items-center overflow-x-auto">
|
| 111 |
+
<label class="px-2 py-1 rounded-full border border-gray-200 dark:border-gray-700 text-sm cursor-pointer dark:text-slate-300" :class="{'bg-gray-100 dark:bg-gray-700 dark:text-white': selectedModelType==='all'}">
|
| 112 |
+
<input type="radio" class="hidden" value="all" v-model="selectedModelType" /> 全部
|
| 113 |
+
</label>
|
| 114 |
+
<label v-for="g in modelTypeGroups" :key="g" class="px-2 py-1 rounded-full border border-gray-200 dark:border-gray-700 text-sm cursor-pointer dark:text-slate-300" :class="{'bg-gray-100 dark:bg-gray-700 dark:text-white': selectedModelType===g}">
|
| 115 |
+
<input type="radio" class="hidden" :value="g" v-model="selectedModelType" /> {{ g }}
|
| 116 |
+
</label>
|
| 117 |
+
</div>
|
| 118 |
+
<div v-else class="text-sm text-gray-500 dark:text-gray-400">(未配置模型类型映射)</div>
|
| 119 |
+
</div>
|
| 120 |
+
</div>
|
| 121 |
+
|
| 122 |
+
<!-- 美化后的内联列选择区域:pills 风格,支持水平滚动,并兼容深色/浅色模式 -->
|
| 123 |
+
<div class="px-6 py-3 border-b bg-gray-50 dark:bg-gradient-to-b dark:from-gray-900 dark:to-gray-800">
|
| 124 |
+
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3">
|
| 125 |
+
<div class="flex items-center gap-3">
|
| 126 |
+
<span class="text-sm font-medium text-gray-700 dark:text-gray-200">显示列</span>
|
| 127 |
+
<div class="flex items-center gap-2">
|
| 128 |
+
<button @click.prevent="selectAll" class="text-sm px-2 py-1 bg-white/90 dark:bg-gray-700/60 border border-gray-200 dark:border-gray-600 rounded text-gray-700 dark:text-gray-200 hover:bg-white dark:hover:bg-gray-600 transition">全选</button>
|
| 129 |
+
<button @click.prevent="clearAll" class="text-sm px-2 py-1 bg-transparent border border-gray-200 dark:border-gray-700 rounded text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition">清除</button>
|
| 130 |
+
</div>
|
| 131 |
+
</div>
|
| 132 |
+
|
| 133 |
+
<div class="flex-1 overflow-x-auto">
|
| 134 |
+
<div class="flex gap-2 items-center px-1 py-2">
|
| 135 |
+
<label v-for="h in selectableColumns" :key="h" class="flex items-center gap-2 text-sm bg-white dark:bg-gray-800 px-3 py-1 rounded-full border border-gray-200 dark:border-gray-700 hover:shadow-sm whitespace-nowrap">
|
| 136 |
+
<input type="checkbox" :value="h" v-model="visibleColumns" class="h-4 w-4 text-indigo-600 dark:text-indigo-400 bg-white dark:bg-gray-700 border-gray-300 dark:border-gray-600 rounded" />
|
| 137 |
+
<span class="truncate text-gray-800 dark:text-gray-50">{{ headerDisplayMap[h] || h }}</span>
|
| 138 |
+
</label>
|
| 139 |
+
</div>
|
| 140 |
+
</div>
|
| 141 |
+
</div>
|
| 142 |
+
</div>
|
| 143 |
+
|
| 144 |
+
<div class="p-4 overflow-x-auto">
|
| 145 |
+
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
|
| 146 |
+
<thead class="bg-gray-50 dark:bg-gradient-to-r dark:from-gray-800 dark:to-gray-900">
|
| 147 |
+
<tr>
|
| 148 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">#</th>
|
| 149 |
+
<th v-for="h in displayedColumns" :key="h" class="px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 150 |
+
{{ headerDisplayMap[h] || h }}
|
| 151 |
+
</th>
|
| 152 |
+
</tr>
|
| 153 |
+
</thead>
|
| 154 |
+
<tbody class="bg-white dark:bg-transparent divide-y divide-gray-100 dark:divide-gray-700">
|
| 155 |
+
<tr v-for="model in filteredLeaderboard" :key="model.rank" :class="{
|
| 156 |
+
'bg-yellow-50 dark:bg-yellow-700/25': model.rank === 1,
|
| 157 |
+
'bg-gray-50 dark:bg-gray-800/60': model.rank === 2,
|
| 158 |
+
'bg-indigo-50 dark:bg-indigo-700/25': model.rank === 3
|
| 159 |
+
}" class="hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-150">
|
| 160 |
+
<td class="px-4 py-3 whitespace-nowrap font-medium text-gray-800 dark:text-gray-50">#{{ model.rank }}
|
| 161 |
+
</td>
|
| 162 |
+
<td v-for="h in displayedColumns" :key="h" class="px-4 py-3 whitespace-nowrap">
|
| 163 |
+
<div class="text-sm text-gray-800 dark:text-gray-50">{{ formatCell(h, model) }}</div>
|
| 164 |
+
</td>
|
| 165 |
+
</tr>
|
| 166 |
+
</tbody>
|
| 167 |
+
</table>
|
| 168 |
+
</div>
|
| 169 |
+
</div>
|
| 170 |
+
</div>
|
| 171 |
+
</div>
|
| 172 |
+
</template>
|
| 173 |
+
|
| 174 |
+
<style scoped></style>
|
tsconfig.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"files": [],
|
| 3 |
-
"references": [
|
| 4 |
-
{
|
| 5 |
-
"path": "./tsconfig.node.json"
|
| 6 |
-
},
|
| 7 |
-
{
|
| 8 |
-
"path": "./tsconfig.app.json"
|
| 9 |
-
}
|
| 10 |
-
]
|
| 11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|