ardaatahan commited on
Commit
d3a1d6c
·
1 Parent(s): 00dd4ff

Add parity, test coverage and distinguish between device support and test coverage

Browse files
.github/scripts/check_dataset_update.py CHANGED
@@ -1,8 +1,8 @@
1
  import json
2
  import os
 
3
 
4
  from github import Github
5
- from datetime import datetime, timedelta
6
  from huggingface_hub import HfApi, login
7
 
8
 
@@ -16,12 +16,17 @@ def check_dataset_updates(dataset_id):
16
  last_modified = dataset_info.lastModified.isoformat()
17
  current_sha = dataset_info.sha
18
 
19
- repo_tree = api.list_repo_tree(repo_id=dataset_id, repo_type="dataset", path_in_repo="benchmark_data", recursive=False)
 
 
 
 
 
20
  cutoff_date = datetime.now(dataset_info.lastModified.tzinfo) - timedelta(weeks=6)
21
 
22
  commit_dates_hashes = [item.path.split("/")[-1] for item in repo_tree]
23
  new_commit_hashes = []
24
-
25
  for commit_date_hash in commit_dates_hashes:
26
  commit_date, commit_hash = commit_date_hash.split("_")
27
  commit_date = datetime.strptime(commit_date, "%Y-%m-%dT%H%M%S").replace(
@@ -42,10 +47,10 @@ def check_dataset_updates(dataset_id):
42
  except Exception as e:
43
  print(f"Error processing commit {commit_hash}: {str(e)}")
44
  continue
45
-
46
  # Sort by commit date
47
  commit_info.sort(key=lambda x: x[1])
48
-
49
  # Extract sorted commits and versions
50
  new_releases = [info[0] for info in commit_info]
51
  new_versions = [info[2] for info in commit_info]
@@ -94,15 +99,15 @@ def get_commit_version(repo, commit_hash):
94
  try:
95
  releases = list(repo.get_releases())
96
  releases.sort(key=lambda x: x.created_at)
97
-
98
  commit = repo.get_commit(commit_hash)
99
  commit_date = commit.commit.author.date
100
-
101
  for i, release in enumerate(releases):
102
  if commit_date <= release.created_at:
103
- return releases[i].tag_name.lstrip('v')
104
-
105
- return releases[-1].tag_name.lstrip('v')
106
  except Exception as e:
107
  print(f"Error processing commit {commit_hash}: {str(e)}")
108
  return None
 
1
  import json
2
  import os
3
+ from datetime import datetime, timedelta
4
 
5
  from github import Github
 
6
  from huggingface_hub import HfApi, login
7
 
8
 
 
16
  last_modified = dataset_info.lastModified.isoformat()
17
  current_sha = dataset_info.sha
18
 
19
+ repo_tree = api.list_repo_tree(
20
+ repo_id=dataset_id,
21
+ repo_type="dataset",
22
+ path_in_repo="benchmark_data",
23
+ recursive=False,
24
+ )
25
  cutoff_date = datetime.now(dataset_info.lastModified.tzinfo) - timedelta(weeks=6)
26
 
27
  commit_dates_hashes = [item.path.split("/")[-1] for item in repo_tree]
28
  new_commit_hashes = []
29
+
30
  for commit_date_hash in commit_dates_hashes:
31
  commit_date, commit_hash = commit_date_hash.split("_")
32
  commit_date = datetime.strptime(commit_date, "%Y-%m-%dT%H%M%S").replace(
 
47
  except Exception as e:
48
  print(f"Error processing commit {commit_hash}: {str(e)}")
49
  continue
50
+
51
  # Sort by commit date
52
  commit_info.sort(key=lambda x: x[1])
53
+
54
  # Extract sorted commits and versions
55
  new_releases = [info[0] for info in commit_info]
56
  new_versions = [info[2] for info in commit_info]
 
99
  try:
100
  releases = list(repo.get_releases())
101
  releases.sort(key=lambda x: x.created_at)
102
+
103
  commit = repo.get_commit(commit_hash)
104
  commit_date = commit.commit.author.date
105
+
106
  for i, release in enumerate(releases):
107
  if commit_date <= release.created_at:
108
+ return releases[i].tag_name.lstrip("v")
109
+
110
+ return releases[-1].tag_name.lstrip("v")
111
  except Exception as e:
112
  print(f"Error processing commit {commit_hash}: {str(e)}")
113
  return None
.github/scripts/process_report.py CHANGED
@@ -217,17 +217,21 @@ def analyze_support_changes(prev_csv, curr_csv):
217
 
218
  def generate_report():
219
  # Load current and previous data
220
- prev_perf_data = read_json_line_by_line("dashboard_data/performance_data.json") # old data
221
- curr_perf_data = read_json_line_by_line("report_data/performance_data.json") # new data
 
 
 
 
222
 
223
  prev_dict = {(d["model"], d["device"], d["os"]): d for d in prev_perf_data}
224
  curr_dict = {(d["model"], d["device"], d["os"]): d for d in curr_perf_data}
225
  common_configs = set(curr_dict.keys()) & set(prev_dict.keys())
226
 
227
  # Load version data
228
- with open("dashboard_data/version.json", "r") as f:
229
  prev_version = json.load(f)
230
- with open("report_data/version.json", "r") as f:
231
  curr_version = json.load(f)
232
 
233
  prev_releases = set(prev_version.get("releases", []))
@@ -384,7 +388,13 @@ def generate_report():
384
  else:
385
  # If there are changes, show the metrics
386
  performance_text += f"{device_info}\n"
387
- table = format_metrics_table(config, prev_dict, curr_dict, improved_metrics, regressed_metrics)
 
 
 
 
 
 
388
  performance_text += table
389
  performance_text += "\n\n"
390
 
 
217
 
218
  def generate_report():
219
  # Load current and previous data
220
+ prev_perf_data = read_json_line_by_line(
221
+ "dashboard_data/performance_data.json"
222
+ ) # old data
223
+ curr_perf_data = read_json_line_by_line(
224
+ "report_data/performance_data.json"
225
+ ) # new data
226
 
227
  prev_dict = {(d["model"], d["device"], d["os"]): d for d in prev_perf_data}
228
  curr_dict = {(d["model"], d["device"], d["os"]): d for d in curr_perf_data}
229
  common_configs = set(curr_dict.keys()) & set(prev_dict.keys())
230
 
231
  # Load version data
232
+ with open("dashboard_data/version.json", "r") as f:
233
  prev_version = json.load(f)
234
+ with open("report_data/version.json", "r") as f:
235
  curr_version = json.load(f)
236
 
237
  prev_releases = set(prev_version.get("releases", []))
 
388
  else:
389
  # If there are changes, show the metrics
390
  performance_text += f"{device_info}\n"
391
+ table = format_metrics_table(
392
+ config,
393
+ prev_dict,
394
+ curr_dict,
395
+ improved_metrics,
396
+ regressed_metrics,
397
+ )
398
  performance_text += table
399
  performance_text += "\n\n"
400
 
Makefile CHANGED
@@ -8,4 +8,3 @@ use-huggingface-data:
8
 
9
  use-local-data:
10
  @python performance_generate.py
11
-
 
8
 
9
  use-local-data:
10
  @python performance_generate.py
 
README.md CHANGED
@@ -1,5 +1,5 @@
1
  ---
2
- title: WhisperKit Benchmarks
3
  emoji: 🏆
4
  colorFrom: green
5
  colorTo: indigo
 
1
  ---
2
+ title: Argmax OSS Regression Tests
3
  emoji: 🏆
4
  colorFrom: green
5
  colorTo: indigo
constants.py CHANGED
@@ -4,7 +4,7 @@ from iso639 import Lang
4
 
5
  BANNER_TEXT = """
6
  <div style="text-align: center;">
7
- <h1><a href='https://github.com/argmaxinc/WhisperKit'>WhisperKit Benchmarks</a></h1>
8
  </div>
9
  """
10
 
@@ -30,7 +30,7 @@ Tokens per Second (⬆️): The number of output tokens generated per second. Hi
30
  Speed (⬆️): Input audio seconds transcribed per second. Higher is better.
31
 
32
  🎯 WhisperKit is evaluated across different datasets, with a focus on per-example no-regressions (QoI) and overall accuracy (WER).
33
- \n💻 Our benchmarks include:
34
  Reference: <a href='https://platform.openai.com/docs/guides/speech-to-text'>WhisperOpenAIAPI</a> (OpenAI's Whisper API)
35
  On-device: <a href='https://github.com/argmaxinc/WhisperKit'>WhisperKit</a> (various versions and optimizations)
36
 
@@ -103,6 +103,7 @@ PERFORMANCE_TEXT = dedent(
103
  ## Metrics
104
  - **Speed factor** (⬆️): Computed as the ratio of input audio length to end-to-end WhisperKit latency for transcribing that audio. A speed factor of N means N seconds of input audio was transcribed in 1 second.
105
  - **Tok/s (Tokens per second)** (⬆️): Total number of text decoder forward passes divided by the end-to-end processing time.
 
106
 
107
  ## Data
108
 
@@ -132,6 +133,7 @@ COL_NAMES = {
132
  "device": "Device",
133
  "os": "OS",
134
  "english_wer": "English WER",
 
135
  }
136
 
137
 
 
4
 
5
  BANNER_TEXT = """
6
  <div style="text-align: center;">
7
+ <h1><a href='https://github.com/argmaxinc/WhisperKit'>Argmax OSS Regression Tests</a></h1>
8
  </div>
9
  """
10
 
 
30
  Speed (⬆️): Input audio seconds transcribed per second. Higher is better.
31
 
32
  🎯 WhisperKit is evaluated across different datasets, with a focus on per-example no-regressions (QoI) and overall accuracy (WER).
33
+ \n💻 Our regression tests include:
34
  Reference: <a href='https://platform.openai.com/docs/guides/speech-to-text'>WhisperOpenAIAPI</a> (OpenAI's Whisper API)
35
  On-device: <a href='https://github.com/argmaxinc/WhisperKit'>WhisperKit</a> (various versions and optimizations)
36
 
 
103
  ## Metrics
104
  - **Speed factor** (⬆️): Computed as the ratio of input audio length to end-to-end WhisperKit latency for transcribing that audio. A speed factor of N means N seconds of input audio was transcribed in 1 second.
105
  - **Tok/s (Tokens per second)** (⬆️): Total number of text decoder forward passes divided by the end-to-end processing time.
106
+ - **Parity**: Difference between measured WER and ground truth WER (Measured - Ground Truth). Positive values indicate performance is worse than expected, negative values indicate better than expected performance.
107
 
108
  ## Data
109
 
 
133
  "device": "Device",
134
  "os": "OS",
135
  "english_wer": "English WER",
136
+ "parity": "Parity",
137
  }
138
 
139
 
dashboard_data/Mac.json ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "date_generated": "2025-06-16T15:52:13.069236",
3
+ "xcode_version": "Developer",
4
+ "total_menu": {
5
+ "MacBook Pro 14\" (M4, 2024)": {
6
+ "sku": "Mac16,10",
7
+ "chip": "M4",
8
+ "ram": "16 GB"
9
+ },
10
+ "MacBook Pro 16\" (M4, 2024)": {
11
+ "sku": "Mac16,11",
12
+ "chip": "M4",
13
+ "ram": "16 GB"
14
+ },
15
+ "MacBook Pro 14\" (M4 Pro, 2024)": {
16
+ "sku": "Mac16,12",
17
+ "chip": "M4",
18
+ "ram": "24 GB"
19
+ },
20
+ "MacBook Pro 16\" (M4 Pro, 2024)": {
21
+ "sku": "Mac16,13",
22
+ "chip": "M4",
23
+ "ram": "24 GB"
24
+ },
25
+ "iMac 24\" (M4, 2024)": {
26
+ "sku": "Mac16,1",
27
+ "chip": "M4",
28
+ "ram": "16 GB"
29
+ },
30
+ "iMac 24\" (M4, 2024) - Higher Config": {
31
+ "sku": "Mac16,2",
32
+ "chip": "M4",
33
+ "ram": "24 GB"
34
+ },
35
+ "Mac mini (M4, 2024)": {
36
+ "sku": "Mac16,3",
37
+ "chip": "M4",
38
+ "ram": "16 GB"
39
+ },
40
+ "Mac mini (M4 Pro, 2024)": {
41
+ "sku": "Mac16,5",
42
+ "chip": "M4",
43
+ "ram": "24 GB"
44
+ },
45
+ "MacBook Air 13\" (M4, 2024)": {
46
+ "sku": "Mac16,6",
47
+ "chip": "M4",
48
+ "ram": "16 GB"
49
+ },
50
+ "MacBook Air 15\" (M4, 2024)": {
51
+ "sku": "Mac16,7",
52
+ "chip": "M4",
53
+ "ram": "16 GB"
54
+ },
55
+ "Mac Pro (M2 Ultra, 2023)": {
56
+ "sku": "Mac16,8",
57
+ "chip": "M2",
58
+ "ram": "64 GB"
59
+ },
60
+ "Mac Pro (M2 Ultra, 2023) - Higher Config": {
61
+ "sku": "Mac16,9",
62
+ "chip": "M2",
63
+ "ram": "128 GB"
64
+ },
65
+ "MacBook Pro 14\" (M3, 2023)": {
66
+ "sku": "Mac15,3",
67
+ "chip": "M3",
68
+ "ram": "16 GB"
69
+ },
70
+ "MacBook Pro 16\" (M3, 2023)": {
71
+ "sku": "Mac15,4",
72
+ "chip": "M3",
73
+ "ram": "16 GB"
74
+ },
75
+ "MacBook Pro 14\" (M3 Pro, 2023)": {
76
+ "sku": "Mac15,5",
77
+ "chip": "M3",
78
+ "ram": "24 GB"
79
+ },
80
+ "MacBook Pro 16\" (M3 Pro, 2023)": {
81
+ "sku": "Mac15,6",
82
+ "chip": "M3",
83
+ "ram": "24 GB"
84
+ },
85
+ "MacBook Pro 14\" (M3 Max, 2023)": {
86
+ "sku": "Mac15,7",
87
+ "chip": "M3",
88
+ "ram": "32 GB"
89
+ },
90
+ "MacBook Pro 16\" (M3 Max, 2023)": {
91
+ "sku": "Mac15,8",
92
+ "chip": "M3",
93
+ "ram": "32 GB"
94
+ },
95
+ "iMac 24\" (M3, 2023)": {
96
+ "sku": "Mac15,9",
97
+ "chip": "M3",
98
+ "ram": "16 GB"
99
+ },
100
+ "iMac 24\" (M3, 2023) - Higher Config": {
101
+ "sku": "Mac15,10",
102
+ "chip": "M3",
103
+ "ram": "24 GB"
104
+ },
105
+ "MacBook Air 13\" (M3, 2024)": {
106
+ "sku": "Mac15,11",
107
+ "chip": "M3",
108
+ "ram": "16 GB"
109
+ },
110
+ "MacBook Air 15\" (M3, 2024)": {
111
+ "sku": "Mac15,12",
112
+ "chip": "M3",
113
+ "ram": "16 GB"
114
+ },
115
+ "Mac mini (M3, 2024)": {
116
+ "sku": "Mac15,13",
117
+ "chip": "M3",
118
+ "ram": "16 GB"
119
+ },
120
+ "MacBook Air 13\" (M2, 2022)": {
121
+ "sku": "Mac14,2",
122
+ "chip": "M2",
123
+ "ram": "16 GB"
124
+ },
125
+ "MacBook Pro 13\" (M2, 2022)": {
126
+ "sku": "Mac14,3",
127
+ "chip": "M2",
128
+ "ram": "16 GB"
129
+ },
130
+ "Mac mini (M2, 2023)": {
131
+ "sku": "Mac14,4",
132
+ "chip": "M2",
133
+ "ram": "16 GB"
134
+ },
135
+ "MacBook Pro 14\" (M2, 2023)": {
136
+ "sku": "Mac14,5",
137
+ "chip": "M2",
138
+ "ram": "16 GB"
139
+ },
140
+ "MacBook Pro 16\" (M2, 2023)": {
141
+ "sku": "Mac14,6",
142
+ "chip": "M2",
143
+ "ram": "16 GB"
144
+ },
145
+ "MacBook Pro 14\" (M2 Pro, 2023)": {
146
+ "sku": "Mac14,7",
147
+ "chip": "M2",
148
+ "ram": "24 GB"
149
+ },
150
+ "MacBook Pro 16\" (M2 Pro, 2023)": {
151
+ "sku": "Mac14,8",
152
+ "chip": "M2",
153
+ "ram": "24 GB"
154
+ },
155
+ "MacBook Pro 14\" (M2 Max, 2023)": {
156
+ "sku": "Mac14,9",
157
+ "chip": "M2",
158
+ "ram": "32 GB"
159
+ },
160
+ "MacBook Pro 16\" (M2 Max, 2023)": {
161
+ "sku": "Mac14,10",
162
+ "chip": "M2",
163
+ "ram": "32 GB"
164
+ },
165
+ "Mac mini (M2 Pro, 2023)": {
166
+ "sku": "Mac14,12",
167
+ "chip": "M2",
168
+ "ram": "24 GB"
169
+ },
170
+ "Mac Studio (M2 Max, 2023)": {
171
+ "sku": "Mac14,13",
172
+ "chip": "M2",
173
+ "ram": "32 GB"
174
+ },
175
+ "Mac Studio (M2 Ultra, 2023)": {
176
+ "sku": "Mac14,14",
177
+ "chip": "M2",
178
+ "ram": "64 GB"
179
+ },
180
+ "MacBook Air 15\" (M2, 2023)": {
181
+ "sku": "Mac14,15",
182
+ "chip": "M2",
183
+ "ram": "16 GB"
184
+ },
185
+ "MacBook Pro 13\" (M1, 2020)": {
186
+ "sku": "MacBookPro17,1",
187
+ "chip": "M1",
188
+ "ram": "16 GB"
189
+ },
190
+ "MacBook Pro 14\" (M1 Pro, 2021)": {
191
+ "sku": "MacBookPro18,1",
192
+ "chip": "M1",
193
+ "ram": "24 GB"
194
+ },
195
+ "MacBook Pro 16\" (M1 Pro, 2021)": {
196
+ "sku": "MacBookPro18,2",
197
+ "chip": "M1",
198
+ "ram": "24 GB"
199
+ },
200
+ "MacBook Pro 14\" (M1 Max, 2021)": {
201
+ "sku": "MacBookPro18,3",
202
+ "chip": "M1",
203
+ "ram": "32 GB"
204
+ },
205
+ "MacBook Pro 16\" (M1 Max, 2021)": {
206
+ "sku": "MacBookPro18,4",
207
+ "chip": "M1",
208
+ "ram": "32 GB"
209
+ },
210
+ "MacBook Air 13\" (M1, 2020)": {
211
+ "sku": "MacBookAir10,1",
212
+ "chip": "M1",
213
+ "ram": "16 GB"
214
+ },
215
+ "Mac mini (M1, 2020)": {
216
+ "sku": "Macmini9,1",
217
+ "chip": "M1",
218
+ "ram": "16 GB"
219
+ },
220
+ "iMac 24\" (M1, 2021)": {
221
+ "sku": "iMac21,1",
222
+ "chip": "M1",
223
+ "ram": "16 GB"
224
+ },
225
+ "iMac 24\" (M1, 2021) - Higher Config": {
226
+ "sku": "iMac21,2",
227
+ "chip": "M1",
228
+ "ram": "24 GB"
229
+ },
230
+ "Mac Studio (M1 Max, 2022)": {
231
+ "sku": "Mac13,1",
232
+ "chip": "M1",
233
+ "ram": "32 GB"
234
+ },
235
+ "Mac Studio (M1 Ultra, 2022)": {
236
+ "sku": "Mac13,2",
237
+ "chip": "M1",
238
+ "ram": "64 GB"
239
+ }
240
+ }
241
+ }
dashboard_data/config.json CHANGED
@@ -1,9 +1,43 @@
1
  {
2
- "name": "whisperkit-coreml",
3
- "version": "0.2",
4
  "device_support": [
5
  {
6
- "identifiers": ["iPhone11", "iPhone12", "Watch7", "Watch8"],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  "models": {
8
  "default": "openai_whisper-tiny",
9
  "supported": [
@@ -15,27 +49,23 @@
15
  }
16
  },
17
  {
18
- "identifiers": ["iPhone13", "iPad13,18", "iPad13,1"],
19
- "models": {
20
- "default": "openai_whisper-base",
21
- "supported": [
22
- "openai_whisper-tiny",
23
- "openai_whisper-tiny.en",
24
- "openai_whisper-base",
25
- "openai_whisper-base.en",
26
- "openai_whisper-small",
27
- "openai_whisper-small.en"
28
- ]
29
- }
30
- },
31
- {
32
  "identifiers": [
33
- "iPhone14",
34
- "iPhone15",
35
- "iPhone16",
36
- "iPhone17",
37
- "iPad14,1",
38
- "iPad14,2"
 
 
 
 
 
 
 
 
 
39
  ],
40
  "models": {
41
  "default": "openai_whisper-base",
@@ -46,6 +76,8 @@
46
  "openai_whisper-base.en",
47
  "openai_whisper-small",
48
  "openai_whisper-small.en",
 
 
49
  "openai_whisper-large-v2_949MB",
50
  "openai_whisper-large-v2_turbo_955MB",
51
  "openai_whisper-large-v3_947MB",
@@ -53,24 +85,38 @@
53
  "distil-whisper_distil-large-v3_594MB",
54
  "distil-whisper_distil-large-v3_turbo_600MB",
55
  "openai_whisper-large-v3-v20240930_626MB",
56
- "openai_whisper-large-v3-v20240930_turbo_632MB"
 
57
  ]
58
  }
59
  },
60
  {
 
61
  "identifiers": [
62
- "Mac13",
63
- "iMac21",
 
 
 
64
  "MacBookAir10,1",
65
- "MacBookPro17",
66
- "MacBookPro18",
67
- "Macmini9",
68
- "iPad13,16",
 
69
  "iPad13,4",
70
- "iPad13,8"
 
 
 
 
 
 
 
 
71
  ],
72
  "models": {
73
- "default": "openai_whisper-large-v3-v20240930",
74
  "supported": [
75
  "openai_whisper-tiny",
76
  "openai_whisper-tiny.en",
@@ -78,6 +124,8 @@
78
  "openai_whisper-base.en",
79
  "openai_whisper-small",
80
  "openai_whisper-small.en",
 
 
81
  "openai_whisper-large-v2",
82
  "openai_whisper-large-v2_949MB",
83
  "openai_whisper-large-v3",
@@ -85,15 +133,51 @@
85
  "distil-whisper_distil-large-v3",
86
  "distil-whisper_distil-large-v3_594MB",
87
  "openai_whisper-large-v3-v20240930",
88
- "openai_whisper-large-v3-v20240930_626MB"
 
 
89
  ]
90
  }
91
  },
92
  {
 
93
  "identifiers": [
94
- "Mac14",
95
- "Mac15",
96
- "Mac16",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  "iPad14,3",
98
  "iPad14,4",
99
  "iPad14,5",
@@ -102,7 +186,14 @@
102
  "iPad14,9",
103
  "iPad14,10",
104
  "iPad14,11",
105
- "iPad16"
 
 
 
 
 
 
 
106
  ],
107
  "models": {
108
  "default": "openai_whisper-large-v3-v20240930",
@@ -113,6 +204,8 @@
113
  "openai_whisper-base.en",
114
  "openai_whisper-small",
115
  "openai_whisper-small.en",
 
 
116
  "openai_whisper-large-v2",
117
  "openai_whisper-large-v2_949MB",
118
  "openai_whisper-large-v2_turbo",
@@ -128,9 +221,99 @@
128
  "openai_whisper-large-v3-v20240930",
129
  "openai_whisper-large-v3-v20240930_turbo",
130
  "openai_whisper-large-v3-v20240930_626MB",
131
- "openai_whisper-large-v3-v20240930_turbo_632MB"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  ]
133
  }
134
  }
135
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  }
 
1
  {
2
+ "name": "argmax-pro-sdk",
3
+ "version": "0.5",
4
  "device_support": [
5
  {
6
+ "chips": "A12, A13, S9, S10",
7
+ "identifiers": [
8
+ "iPhone11,2",
9
+ "iPhone11,3",
10
+ "iPhone11,4",
11
+ "iPhone11,5",
12
+ "iPhone11,6",
13
+ "iPhone11,8",
14
+ "iPhone12,1",
15
+ "iPhone12,2",
16
+ "iPhone12,3",
17
+ "iPhone12,4",
18
+ "iPhone12,5",
19
+ "iPhone12,8",
20
+ "iPad8,1",
21
+ "iPad8,2",
22
+ "iPad8,3",
23
+ "iPad8,4",
24
+ "iPad8,5",
25
+ "iPad8,6",
26
+ "iPad8,7",
27
+ "iPad8,8",
28
+ "iPad8,9",
29
+ "iPad8,10",
30
+ "iPad8,11",
31
+ "iPad8,12",
32
+ "iPad11,1",
33
+ "iPad11,2",
34
+ "iPad11,3",
35
+ "iPad11,4",
36
+ "iPad11,6",
37
+ "iPad11,7",
38
+ "iPad12,1",
39
+ "iPad12,2"
40
+ ],
41
  "models": {
42
  "default": "openai_whisper-tiny",
43
  "supported": [
 
49
  }
50
  },
51
  {
52
+ "chips": "A16, A17 Pro, A18, A18 Pro",
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  "identifiers": [
54
+ "iPhone15,2",
55
+ "iPhone15,3",
56
+ "iPhone15,4",
57
+ "iPhone15,5",
58
+ "iPhone16,1",
59
+ "iPhone16,2",
60
+ "iPhone17,1",
61
+ "iPhone17,2",
62
+ "iPhone17,3",
63
+ "iPhone17,4",
64
+ "iPhone17,5",
65
+ "iPad15,7",
66
+ "iPad15,8",
67
+ "iPad16,1",
68
+ "iPad16,2"
69
  ],
70
  "models": {
71
  "default": "openai_whisper-base",
 
76
  "openai_whisper-base.en",
77
  "openai_whisper-small",
78
  "openai_whisper-small.en",
79
+ "openai_whisper-small_216MB",
80
+ "openai_whisper-small.en_217MB",
81
  "openai_whisper-large-v2_949MB",
82
  "openai_whisper-large-v2_turbo_955MB",
83
  "openai_whisper-large-v3_947MB",
 
85
  "distil-whisper_distil-large-v3_594MB",
86
  "distil-whisper_distil-large-v3_turbo_600MB",
87
  "openai_whisper-large-v3-v20240930_626MB",
88
+ "openai_whisper-large-v3-v20240930_turbo_632MB",
89
+ "nvidia_parakeet-v2_476MB"
90
  ]
91
  }
92
  },
93
  {
94
+ "chips": "M1",
95
  "identifiers": [
96
+ "MacBookPro17,1",
97
+ "MacBookPro18,1",
98
+ "MacBookPro18,2",
99
+ "MacBookPro18,3",
100
+ "MacBookPro18,4",
101
  "MacBookAir10,1",
102
+ "Macmini9,1",
103
+ "iMac21,1",
104
+ "iMac21,2",
105
+ "Mac13,1",
106
+ "Mac13,2",
107
  "iPad13,4",
108
+ "iPad13,5",
109
+ "iPad13,6",
110
+ "iPad13,7",
111
+ "iPad13,8",
112
+ "iPad13,9",
113
+ "iPad13,10",
114
+ "iPad13,11",
115
+ "iPad13,16",
116
+ "iPad13,17"
117
  ],
118
  "models": {
119
+ "default": "openai_whisper-large-v3-v20240930_626MB",
120
  "supported": [
121
  "openai_whisper-tiny",
122
  "openai_whisper-tiny.en",
 
124
  "openai_whisper-base.en",
125
  "openai_whisper-small",
126
  "openai_whisper-small.en",
127
+ "openai_whisper-small_216MB",
128
+ "openai_whisper-small.en_217MB",
129
  "openai_whisper-large-v2",
130
  "openai_whisper-large-v2_949MB",
131
  "openai_whisper-large-v3",
 
133
  "distil-whisper_distil-large-v3",
134
  "distil-whisper_distil-large-v3_594MB",
135
  "openai_whisper-large-v3-v20240930",
136
+ "openai_whisper-large-v3-v20240930_626MB",
137
+ "nvidia_parakeet-v2_476MB",
138
+ "nvidia_parakeet-v2"
139
  ]
140
  }
141
  },
142
  {
143
+ "chips": "M2, M3, M4",
144
  "identifiers": [
145
+ "Mac14,2",
146
+ "Mac14,3",
147
+ "Mac14,4",
148
+ "Mac14,5",
149
+ "Mac14,6",
150
+ "Mac14,7",
151
+ "Mac14,8",
152
+ "Mac14,9",
153
+ "Mac14,10",
154
+ "Mac14,12",
155
+ "Mac14,13",
156
+ "Mac14,14",
157
+ "Mac14,15",
158
+ "Mac15,3",
159
+ "Mac15,4",
160
+ "Mac15,5",
161
+ "Mac15,6",
162
+ "Mac15,7",
163
+ "Mac15,8",
164
+ "Mac15,9",
165
+ "Mac15,10",
166
+ "Mac15,11",
167
+ "Mac15,12",
168
+ "Mac15,13",
169
+ "Mac16,1",
170
+ "Mac16,2",
171
+ "Mac16,3",
172
+ "Mac16,5",
173
+ "Mac16,6",
174
+ "Mac16,7",
175
+ "Mac16,8",
176
+ "Mac16,9",
177
+ "Mac16,10",
178
+ "Mac16,11",
179
+ "Mac16,12",
180
+ "Mac16,13",
181
  "iPad14,3",
182
  "iPad14,4",
183
  "iPad14,5",
 
186
  "iPad14,9",
187
  "iPad14,10",
188
  "iPad14,11",
189
+ "iPad15,3",
190
+ "iPad15,4",
191
+ "iPad15,5",
192
+ "iPad15,6",
193
+ "iPad16,3",
194
+ "iPad16,4",
195
+ "iPad16,5",
196
+ "iPad16,6"
197
  ],
198
  "models": {
199
  "default": "openai_whisper-large-v3-v20240930",
 
204
  "openai_whisper-base.en",
205
  "openai_whisper-small",
206
  "openai_whisper-small.en",
207
+ "openai_whisper-small_216MB",
208
+ "openai_whisper-small.en_217MB",
209
  "openai_whisper-large-v2",
210
  "openai_whisper-large-v2_949MB",
211
  "openai_whisper-large-v2_turbo",
 
221
  "openai_whisper-large-v3-v20240930",
222
  "openai_whisper-large-v3-v20240930_turbo",
223
  "openai_whisper-large-v3-v20240930_626MB",
224
+ "openai_whisper-large-v3-v20240930_turbo_632MB",
225
+ "nvidia_parakeet-v2_476MB",
226
+ "nvidia_parakeet-v2"
227
+ ]
228
+ }
229
+ },
230
+ {
231
+ "chips": "A14",
232
+ "identifiers": [
233
+ "iPhone13,1",
234
+ "iPhone13,2",
235
+ "iPhone13,3",
236
+ "iPhone13,4",
237
+ "iPad13,1",
238
+ "iPad13,2",
239
+ "iPad13,18",
240
+ "iPad13,19"
241
+ ],
242
+ "models": {
243
+ "default": "openai_whisper-base",
244
+ "supported": [
245
+ "openai_whisper-tiny",
246
+ "openai_whisper-tiny.en",
247
+ "openai_whisper-base",
248
+ "openai_whisper-base.en",
249
+ "openai_whisper-small",
250
+ "openai_whisper-small.en",
251
+ "openai_whisper-small_216MB",
252
+ "openai_whisper-small.en_217MB",
253
+ "nvidia_parakeet-v2_476MB"
254
+ ]
255
+ }
256
+ },
257
+ {
258
+ "chips": "A15",
259
+ "identifiers": [
260
+ "iPhone14,2",
261
+ "iPhone14,3",
262
+ "iPhone14,4",
263
+ "iPhone14,5",
264
+ "iPhone14,6",
265
+ "iPhone14,7",
266
+ "iPhone14,8",
267
+ "iPad14,1",
268
+ "iPad14,2"
269
+ ],
270
+ "models": {
271
+ "default": "openai_whisper-base",
272
+ "supported": [
273
+ "openai_whisper-tiny",
274
+ "openai_whisper-tiny.en",
275
+ "openai_whisper-base",
276
+ "openai_whisper-base.en",
277
+ "openai_whisper-small",
278
+ "openai_whisper-small.en",
279
+ "openai_whisper-small_216MB",
280
+ "openai_whisper-small.en_217MB",
281
+ "openai_whisper-large-v2_949MB",
282
+ "openai_whisper-large-v2_turbo_955MB",
283
+ "openai_whisper-large-v3_947MB",
284
+ "openai_whisper-large-v3_turbo_954MB",
285
+ "distil-whisper_distil-large-v3_594MB",
286
+ "distil-whisper_distil-large-v3_turbo_600MB",
287
+ "openai_whisper-large-v3-v20240930_626MB",
288
+ "openai_whisper-large-v3-v20240930_turbo_632MB",
289
+ "nvidia_parakeet-v2_476MB"
290
  ]
291
  }
292
  }
293
+ ],
294
+ "model_checksums": {
295
+ "distil-whisper_distil-large-v3": "9cd8271143b919402ae776c30b479565",
296
+ "distil-whisper_distil-large-v3_594MB": "ca532f45ddbf8a3d241132cc5cf41639",
297
+ "distil-whisper_distil-large-v3_turbo": "b8638452c6568dfe33a33bfcc2bc6aca",
298
+ "distil-whisper_distil-large-v3_turbo_600MB": "81746b4b1afbbb01a8ae9ea452460d88",
299
+ "openai_whisper-base.en": "fbcfd586f15e2952251b1d3257f18471",
300
+ "openai_whisper-base": "36e60501ad0f01c1a5719e83a1f63f20",
301
+ "openai_whisper-large-v2": "21b86c07318aeeef54598f15b7903979",
302
+ "openai_whisper-large-v2_949MB": "71bad4e1566749d1060eda42308d9fb4",
303
+ "openai_whisper-large-v2_turbo": "7734959b6550e7b5c2d732bf2b7acd23",
304
+ "openai_whisper-large-v2_turbo_955MB": "cb6411862a48ec75325572081f01e5b5",
305
+ "openai_whisper-large-v3-v20240930": "17ebd78ff7edfa59001b554e9cc4c021",
306
+ "openai_whisper-large-v3-v20240930_547MB": "c945dad68449ac3c78ecb2d561ac189d",
307
+ "openai_whisper-large-v3-v20240930_626MB": "578fe5a07f4eb7e4187c920bca571aa5",
308
+ "openai_whisper-large-v3-v20240930_turbo": "dfbf09ab741af1d5400ddbd07bb37dad",
309
+ "openai_whisper-large-v3-v20240930_turbo_632MB": "33954440dbd785ca1828afe25514f5a5",
310
+ "openai_whisper-large-v3": "a6f24dc72785722e9cea89e227856dfe",
311
+ "openai_whisper-large-v3_947MB": "ef6b0e9622a046ce2361b4c72307877f",
312
+ "openai_whisper-large-v3_turbo": "c550fbdea70c5784d322c0a427f8b5cd",
313
+ "openai_whisper-large-v3_turbo_954MB": "e639c4bb98d905064ef5dd38757dd9d1",
314
+ "openai_whisper-small.en": "38efe6a00706bbdb995795c67a836e5e",
315
+ "openai_whisper-small": "f1d21adb950bc9be5d5343bcdeccd23b",
316
+ "openai_whisper-tiny.en": "e1183fd55448923b1ce43a2da67aa21f",
317
+ "openai_whisper-tiny": "7147518a3d68ddbea0691e04cfffa4ff"
318
+ }
319
  }
dashboard_data/device_map.json CHANGED
@@ -2,6 +2,7 @@
2
  "Mac14,12": "Apple M2 Pro",
3
  "Mac14,14": "Apple M2 Ultra",
4
  "Mac14,2": "Apple M2",
 
5
  "Mac15,10": "Apple M3 Max",
6
  "Mac15,3": "Apple M3",
7
  "Mac15,6": "Apple M3 Pro",
@@ -9,12 +10,14 @@
9
  "Mac16,10": "Apple M4",
10
  "Mac16,3": "Apple M4",
11
  "MacBookAir10,1": "Apple M1",
 
12
  "iPad13,16": "iPad Air (5th generation)",
13
  "iPad13,18": "iPad (10th generation)",
14
  "iPad13,6": "iPad Pro (11-inch) (3rd generation)",
15
  "iPad14,1": "iPad mini (6th generation)",
16
  "iPad14,8": "iPad Air 11-inch (M2)",
17
  "iPad15,3": "iPad Air 11-inch (M3)",
 
18
  "iPad15,7": "iPad (A16)",
19
  "iPad16,1": "iPad mini (A17 Pro)",
20
  "iPad16,3": "iPad Pro 11-inch (M4)",
 
2
  "Mac14,12": "Apple M2 Pro",
3
  "Mac14,14": "Apple M2 Ultra",
4
  "Mac14,2": "Apple M2",
5
+ "Mac14,3": "Apple M2",
6
  "Mac15,10": "Apple M3 Max",
7
  "Mac15,3": "Apple M3",
8
  "Mac15,6": "Apple M3 Pro",
 
10
  "Mac16,10": "Apple M4",
11
  "Mac16,3": "Apple M4",
12
  "MacBookAir10,1": "Apple M1",
13
+ "Macmini9,1": "Apple M1",
14
  "iPad13,16": "iPad Air (5th generation)",
15
  "iPad13,18": "iPad (10th generation)",
16
  "iPad13,6": "iPad Pro (11-inch) (3rd generation)",
17
  "iPad14,1": "iPad mini (6th generation)",
18
  "iPad14,8": "iPad Air 11-inch (M2)",
19
  "iPad15,3": "iPad Air 11-inch (M3)",
20
+ "iPad15,5": "iPad Air 13-inch (M3)",
21
  "iPad15,7": "iPad (A16)",
22
  "iPad16,1": "iPad mini (A17 Pro)",
23
  "iPad16,3": "iPad Pro 11-inch (M4)",
dashboard_data/iPad.json ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "date_generated": "2025-06-23T18:22:05.764459",
3
+ "xcode_version": "Version 26.0 (17A5241e)",
4
+ "total_menu": {
5
+ "iPad Pro (11-inch) (2nd generation)": {
6
+ "sku": [
7
+ "iPad8,9",
8
+ "iPad8,10"
9
+ ],
10
+ "chip": "A12Z",
11
+ "ram": "6 GB"
12
+ },
13
+ "iPad Pro (12.9-inch) (3rd generation)": {
14
+ "sku": [
15
+ "iPad8,5",
16
+ "iPad8,6",
17
+ "iPad8,7",
18
+ "iPad8,8"
19
+ ],
20
+ "chip": "A12X",
21
+ "ram": "4 GB"
22
+ },
23
+ "iPad Pro (11-inch)": {
24
+ "sku": [
25
+ "iPad8,1",
26
+ "iPad8,2",
27
+ "iPad8,3",
28
+ "iPad8,4"
29
+ ],
30
+ "chip": "A12X",
31
+ "ram": "4 GB"
32
+ },
33
+ "iPad Pro (12.9-inch) (4th generation)": {
34
+ "sku": [
35
+ "iPad8,11",
36
+ "iPad8,12"
37
+ ],
38
+ "chip": "A12Z",
39
+ "ram": "6 GB"
40
+ },
41
+ "iPad Pro 13-inch (M4)": {
42
+ "sku": [
43
+ "iPad16,5",
44
+ "iPad16,6"
45
+ ],
46
+ "chip": "M4",
47
+ "ram": "8 GB"
48
+ },
49
+ "iPad Pro 11-inch (M4)": {
50
+ "sku": [
51
+ "iPad16,3",
52
+ "iPad16,4"
53
+ ],
54
+ "chip": "M4",
55
+ "ram": "8 GB"
56
+ },
57
+ "iPad mini (A17 Pro)": {
58
+ "sku": [
59
+ "iPad16,1",
60
+ "iPad16,2"
61
+ ],
62
+ "chip": "A17 Pro",
63
+ "ram": "8 GB"
64
+ },
65
+ "iPad (A16)": {
66
+ "sku": [
67
+ "iPad15,7",
68
+ "iPad15,8"
69
+ ],
70
+ "chip": "A16",
71
+ "ram": "8 GB"
72
+ },
73
+ "iPad Air 13-inch (M3)": {
74
+ "sku": [
75
+ "iPad15,5",
76
+ "iPad15,6"
77
+ ],
78
+ "chip": "M3",
79
+ "ram": "8 GB"
80
+ },
81
+ "iPad Air 11-inch (M3)": {
82
+ "sku": [
83
+ "iPad15,3",
84
+ "iPad15,4"
85
+ ],
86
+ "chip": "M3",
87
+ "ram": "8 GB"
88
+ },
89
+ "iPad Air 11-inch (M2)": {
90
+ "sku": [
91
+ "iPad14,8",
92
+ "iPad14,9"
93
+ ],
94
+ "chip": "M2",
95
+ "ram": "8 GB"
96
+ },
97
+ "iPad Pro (12.9-inch) (6th generation)": {
98
+ "sku": [
99
+ "iPad14,5",
100
+ "iPad14,6"
101
+ ],
102
+ "chip": "M2",
103
+ "ram": "8 GB"
104
+ },
105
+ "iPad Pro (11-inch) (4th generation)": {
106
+ "sku": [
107
+ "iPad14,3",
108
+ "iPad14,4"
109
+ ],
110
+ "chip": "M2",
111
+ "ram": "8 GB"
112
+ },
113
+ "iPad mini (6th generation)": {
114
+ "sku": [
115
+ "iPad14,1",
116
+ "iPad14,2"
117
+ ],
118
+ "chip": "A15",
119
+ "ram": "4 GB"
120
+ },
121
+ "iPad Air 13-inch (M2)": {
122
+ "sku": [
123
+ "iPad14,10",
124
+ "iPad14,11"
125
+ ],
126
+ "chip": "M2",
127
+ "ram": "8 GB"
128
+ },
129
+ "iPad Pro (12.9-inch) (5th generation)": {
130
+ "sku": [
131
+ "iPad13,8",
132
+ "iPad13,9",
133
+ "iPad13,10",
134
+ "iPad13,11"
135
+ ],
136
+ "chip": "M1",
137
+ "ram": "8 GB"
138
+ },
139
+ "iPad Pro (11-inch) (3rd generation)": {
140
+ "sku": [
141
+ "iPad13,4",
142
+ "iPad13,5",
143
+ "iPad13,6",
144
+ "iPad13,7"
145
+ ],
146
+ "chip": "M1",
147
+ "ram": "8 GB"
148
+ },
149
+ "iPad Air (4th generation)": {
150
+ "sku": [
151
+ "iPad13,1",
152
+ "iPad13,2"
153
+ ],
154
+ "chip": "A14",
155
+ "ram": "4 GB"
156
+ },
157
+ "iPad (10th generation)": {
158
+ "sku": [
159
+ "iPad13,18",
160
+ "iPad13,19"
161
+ ],
162
+ "chip": "A14",
163
+ "ram": "4 GB"
164
+ },
165
+ "iPad Air (5th generation)": {
166
+ "sku": [
167
+ "iPad13,16",
168
+ "iPad13,17"
169
+ ],
170
+ "chip": "M1",
171
+ "ram": "8 GB"
172
+ },
173
+ "iPad (9th generation)": {
174
+ "sku": [
175
+ "iPad12,1",
176
+ "iPad12,2"
177
+ ],
178
+ "chip": "A13",
179
+ "ram": "3 GB"
180
+ },
181
+ "iPad (8th generation)": {
182
+ "sku": [
183
+ "iPad11,6",
184
+ "iPad11,7"
185
+ ],
186
+ "chip": "A12",
187
+ "ram": "3 GB"
188
+ },
189
+ "iPad Air (3rd generation)": {
190
+ "sku": [
191
+ "iPad11,3",
192
+ "iPad11,4"
193
+ ],
194
+ "chip": "A12",
195
+ "ram": "3 GB"
196
+ },
197
+ "iPad mini (5th generation)": {
198
+ "sku": [
199
+ "iPad11,1",
200
+ "iPad11,2"
201
+ ],
202
+ "chip": "A12",
203
+ "ram": "3 GB"
204
+ }
205
+ }
206
+ }
dashboard_data/iPhone.json ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "date_generated": "2025-06-16T15:52:13.069236",
3
+ "xcode_version": "Developer",
4
+ "total_menu": {
5
+ "iPhone 16e": {
6
+ "sku": "iPhone17,5",
7
+ "chip": "A18",
8
+ "ram": "8 GB"
9
+ },
10
+ "iPhone 16 Plus": {
11
+ "sku": "iPhone17,4",
12
+ "chip": "A18",
13
+ "ram": "8 GB"
14
+ },
15
+ "iPhone 16": {
16
+ "sku": "iPhone17,3",
17
+ "chip": "A18",
18
+ "ram": "8 GB"
19
+ },
20
+ "iPhone 16 Pro Max": {
21
+ "sku": "iPhone17,2",
22
+ "chip": "A18 Pro",
23
+ "ram": "8 GB"
24
+ },
25
+ "iPhone 16 Pro": {
26
+ "sku": "iPhone17,1",
27
+ "chip": "A18 Pro",
28
+ "ram": "8 GB"
29
+ },
30
+ "iPhone 15 Pro Max": {
31
+ "sku": "iPhone16,2",
32
+ "chip": "A17 Pro",
33
+ "ram": "8 GB"
34
+ },
35
+ "iPhone 15 Pro": {
36
+ "sku": "iPhone16,1",
37
+ "chip": "A17 Pro",
38
+ "ram": "8 GB"
39
+ },
40
+ "iPhone 15 Plus": {
41
+ "sku": "iPhone15,5",
42
+ "chip": "A16",
43
+ "ram": "6 GB"
44
+ },
45
+ "iPhone 15": {
46
+ "sku": "iPhone15,4",
47
+ "chip": "A16",
48
+ "ram": "6 GB"
49
+ },
50
+ "iPhone 14 Pro Max": {
51
+ "sku": "iPhone15,3",
52
+ "chip": "A16",
53
+ "ram": "6 GB"
54
+ },
55
+ "iPhone 14 Pro": {
56
+ "sku": "iPhone15,2",
57
+ "chip": "A16",
58
+ "ram": "6 GB"
59
+ },
60
+ "iPhone 14 Plus": {
61
+ "sku": "iPhone14,8",
62
+ "chip": "A15",
63
+ "ram": "6 GB"
64
+ },
65
+ "iPhone 14": {
66
+ "sku": "iPhone14,7",
67
+ "chip": "A15",
68
+ "ram": "6 GB"
69
+ },
70
+ "iPhone SE (3rd generation)": {
71
+ "sku": "iPhone14,6",
72
+ "chip": "A15",
73
+ "ram": "4 GB"
74
+ },
75
+ "iPhone 13": {
76
+ "sku": "iPhone14,5",
77
+ "chip": "A15",
78
+ "ram": "4 GB"
79
+ },
80
+ "iPhone 13 mini": {
81
+ "sku": "iPhone14,4",
82
+ "chip": "A15",
83
+ "ram": "4 GB"
84
+ },
85
+ "iPhone 13 Pro Max": {
86
+ "sku": "iPhone14,3",
87
+ "chip": "A15",
88
+ "ram": "6 GB"
89
+ },
90
+ "iPhone 13 Pro": {
91
+ "sku": "iPhone14,2",
92
+ "chip": "A15",
93
+ "ram": "6 GB"
94
+ },
95
+ "iPhone 12 Pro Max": {
96
+ "sku": "iPhone13,4",
97
+ "chip": "A14",
98
+ "ram": "6 GB"
99
+ },
100
+ "iPhone 12 Pro": {
101
+ "sku": "iPhone13,3",
102
+ "chip": "A14",
103
+ "ram": "6 GB"
104
+ },
105
+ "iPhone 12": {
106
+ "sku": "iPhone13,2",
107
+ "chip": "A14",
108
+ "ram": "4 GB"
109
+ },
110
+ "iPhone 12 mini": {
111
+ "sku": "iPhone13,1",
112
+ "chip": "A14",
113
+ "ram": "4 GB"
114
+ },
115
+ "iPhone SE (2nd generation)": {
116
+ "sku": "iPhone12,8",
117
+ "chip": "A13",
118
+ "ram": "3 GB"
119
+ },
120
+ "iPhone 11 Pro Max": {
121
+ "sku": "iPhone12,5",
122
+ "chip": "A13",
123
+ "ram": "4 GB"
124
+ },
125
+ "iPhone 11 Pro": {
126
+ "sku": "iPhone12,3",
127
+ "chip": "A13",
128
+ "ram": "4 GB"
129
+ },
130
+ "iPhone 11": {
131
+ "sku": "iPhone12,1",
132
+ "chip": "A13",
133
+ "ram": "4 GB"
134
+ },
135
+ "iPhone XR": {
136
+ "sku": "iPhone11,8",
137
+ "chip": "A12",
138
+ "ram": "3 GB"
139
+ },
140
+ "iPhone XS Max": {
141
+ "sku": "iPhone11,4",
142
+ "chip": "A12",
143
+ "ram": "4 GB"
144
+ },
145
+ "iPhone XS": {
146
+ "sku": "iPhone11,2",
147
+ "chip": "A12",
148
+ "ram": "4 GB"
149
+ }
150
+ }
151
+ }
dashboard_data/quality_data.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"model": "openai/whisper-large-v3/947MB", "timestamp": "2024-10-18_16:59:10_GMT-0700", "average_wer": 9.74, "dataset_wer": {"librispeech": 2.41, "earnings22-12hours": 17.08}, "qoi": 0.94}
2
+ {"model": "openai/whisper-large-v2/turbo/955MB", "timestamp": "2024-10-18_16:52:35_GMT-0700", "average_wer": 7.27, "dataset_wer": {"librispeech": 2.4, "earnings22-12hours": 12.14}, "qoi": 0.94}
3
+ {"model": "openai/whisper-tiny.en", "timestamp": "2024-10-19_15:40:06_GMT-0700", "average_wer": 12.23, "dataset_wer": {"librispeech": 5.61, "earnings22-12hours": 18.86}, "qoi": 0.63}
4
+ {"model": "distil-whisper/distil-large-v3/594MB", "timestamp": "2024-10-20_13:02:33_GMT-0700", "average_wer": 8.96, "dataset_wer": {"librispeech": 2.87, "earnings22-12hours": 15.06}, "qoi": 0.86}
5
+ {"model": "openai/whisper-large-v2/949MB", "timestamp": "2024-10-18_19:51:30_GMT-0400", "average_wer": 7.88, "dataset_wer": {"librispeech": 2.38, "earnings22-12hours": 13.39}, "qoi": 0.94}
6
+ {"model": "openai/whisper-large-v3/turbo/954MB", "timestamp": "2024-10-20_13:49:26_GMT-0700", "average_wer": 22.75, "dataset_wer": {"librispeech": 2.51, "earnings22-12hours": 43.0}, "qoi": 0.93}
7
+ {"model": "distil-whisper/distil-large-v3", "timestamp": "2024-10-20_20:32:22_GMT-0700", "average_wer": 7.2, "dataset_wer": {"librispeech": 2.38, "earnings22-12hours": 12.02}, "qoi": 0.9}
8
+ {"model": "openai/whisper-large-v3-v20240930", "timestamp": "2024-10-18_18:35:46_GMT-0700", "average_wer": 6.74, "dataset_wer": {"librispeech": 1.93, "earnings22-12hours": 11.55}, "qoi": 0.94}
9
+ {"model": "openai/whisper-tiny", "timestamp": "2024-10-20_20:19:04_GMT-0700", "average_wer": 14.21, "dataset_wer": {"librispeech": 7.46, "earnings22-12hours": 20.97}, "qoi": 0.52}
10
+ {"model": "openai/whisper-large-v3-v20240930/turbo/632MB", "timestamp": "2024-10-18_20:10:30_GMT-0700", "average_wer": 6.86, "dataset_wer": {"librispeech": 1.95, "earnings22-12hours": 11.77}, "qoi": 0.93}
11
+ {"model": "openai/whisper-large-v2/turbo", "timestamp": "2024-10-18_14:58:38_GMT-0700", "average_wer": 7.25, "dataset_wer": {"librispeech": 2.4, "earnings22-12hours": 12.1}, "qoi": 0.96}
12
+ {"model": "openai/whisper-small", "timestamp": "2024-10-18_12:40:03_GMT-0700", "average_wer": 8.11, "dataset_wer": {"librispeech": 3.21, "earnings22-12hours": 13.0}, "qoi": 0.83}
13
+ {"model": "openai/whisper-large-v3-v20240930/turbo", "timestamp": "2024-10-18_19:37:26_GMT-0700", "average_wer": 6.72, "dataset_wer": {"librispeech": 1.92, "earnings22-12hours": 11.52}, "qoi": 0.94}
14
+ {"model": "openai/whisper-large-v3", "timestamp": "2024-10-18_18:01:14_GMT-0400", "average_wer": 6.85, "dataset_wer": {"librispeech": 2.02, "earnings22-12hours": 11.69}, "qoi": 0.95}
15
+ {"model": "openai/whisper-large-v3-v20240930/626MB", "timestamp": "2024-10-18_19:21:06_GMT-0700", "average_wer": 7.15, "dataset_wer": {"librispeech": 1.96, "earnings22-12hours": 12.35}, "qoi": 0.93}
16
+ {"model": "openai/whisper-base.en", "timestamp": "2024-10-20_12:31:44_GMT-0700", "average_wer": 9.59, "dataset_wer": {"librispeech": 3.98, "earnings22-12hours": 15.2}, "qoi": 0.75}
17
+ {"model": "openai/whisper-large-v3-v20240930/547MB", "timestamp": "2024-10-18_21:59:11_GMT-0400", "average_wer": 16.82, "dataset_wer": {"librispeech": 2.16, "earnings22-12hours": 31.49}, "qoi": 0.92}
18
+ {"model": "distil-whisper/distil-large-v3/turbo/600MB", "timestamp": "2024-10-18_17:50:17_GMT-0700", "average_wer": 8.33, "dataset_wer": {"librispeech": 2.8, "earnings22-12hours": 13.87}, "qoi": 0.86}
19
+ {"model": "openai/whisper-large-v2", "timestamp": "2024-10-18_17:07:15_GMT-0400", "average_wer": 7.32, "dataset_wer": {"librispeech": 2.36, "earnings22-12hours": 12.28}, "qoi": 0.97}
20
+ {"model": "openai/whisper-small.en", "timestamp": "2024-10-18_15:39:48_GMT-0400", "average_wer": 7.85, "dataset_wer": {"librispeech": 2.88, "earnings22-12hours": 12.82}, "qoi": 0.86}
21
+ {"model": "distil-whisper/distil-large-v3/turbo", "timestamp": "2024-10-20_12:45:20_GMT-0700", "average_wer": 7.2, "dataset_wer": {"librispeech": 2.35, "earnings22-12hours": 12.05}, "qoi": 0.9}
22
+ {"model": "openai/whisper-base", "timestamp": "2024-10-18_20:25:50_GMT-0700", "average_wer": 10.67, "dataset_wer": {"librispeech": 4.94, "earnings22-12hours": 16.4}, "qoi": 0.67}
23
+ {"model": "openai/whisper-large-v3/turbo", "timestamp": "2024-10-20_16:58:25_GMT-0400", "average_wer": 6.86, "dataset_wer": {"librispeech": 1.97, "earnings22-12hours": 11.74}, "qoi": 0.95}
dashboard_data/support_data_11a1fab.csv CHANGED
@@ -1,21 +1,21 @@
1
  ,Model,"Apple M4 (Mac16,10)","iPad (10th generation) (iPad13,18)","iPad Air 11-inch (M3) (iPad15,3)","iPad (A16) (iPad15,7)","iPad mini (A17 Pro) (iPad16,1)"
2
- distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
4
- distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
5
  distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
8
- openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
10
- openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
11
  openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
12
- openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
13
- openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.4,Not Supported,? iPadOS 18.3.2,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
15
- openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
16
  openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,✅ iPadOS 18.4,✅ iPadOS 18.4
18
- openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C7_summary_2025-04-16T220030.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad16%2C1_summary_2025-04-16T220030.json>iPadOS 18.4</a>
19
  openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
 
1
  ,Model,"Apple M4 (Mac16,10)","iPad (10th generation) (iPad13,18)","iPad Air 11-inch (M3) (iPad15,3)","iPad (A16) (iPad15,7)","iPad mini (A17 Pro) (iPad16,1)"
2
+ distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,Not Supported,Not Supported
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
4
+ distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,Not Supported,Not Supported
5
  distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
8
+ openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,Not Supported,Not Supported
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
10
+ openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,Not Supported,Not Supported
11
  openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
12
+ openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,Not Supported,Not Supported
13
+ openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.4,Not Supported,? iPadOS 18.3.2,Not Supported,Not Supported
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
15
+ openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,Not Supported,Not Supported
16
  openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,✅ iPadOS 18.4,✅ iPadOS 18.4
18
+ openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.4,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-04-15T183244_11a1fab/iPad15%2C3_summary_2025-04-16T013539.json>iPadOS 18.3.2</a>,Not Supported,Not Supported
19
  openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.4,Not Supported,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.4,✅ iPadOS 18.4,✅ iPadOS 18.3.2,✅ iPadOS 18.4,✅ iPadOS 18.4
dashboard_data/support_data_8c0acbd.csv CHANGED
@@ -1,22 +1,22 @@
1
  ,Model,"Apple M2 Pro (Mac14,12)","Apple M3 Max (Mac15,10)","iPad Air (5th generation) (iPad13,16)","iPad Pro (11-inch) (3rd generation) (iPad13,6)","iPad mini (6th generation) (iPad14,1)","iPad Air 11-inch (M2) (iPad14,8)","iPad Air 11-inch (M3) (iPad15,3)","iPad (A16) (iPad15,7)","iPad mini (A17 Pro) (iPad16,1)","iPad Pro 11-inch (M4) (iPad16,3)","iPhone 11 (iPhone12,1)","iPhone 12 mini (iPhone13,1)","iPhone 13 Pro (iPhone14,2)","iPhone 13 (iPhone14,5)","iPhone 14 (iPhone14,7)","iPhone 15 (iPhone15,4)","iPhone 15 Pro Max (iPhone16,2)","iPhone 16 (iPhone17,3)","iPhone 16e (iPhone17,5)"
2
- distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,✅ iPadOS 18.5,✅ iPadOS 26.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,✅ iPadOS 18.4.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
4
- distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
5
- distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
8
- openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,✅ iPadOS 18.5,✅ iPadOS 26.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
10
- openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
11
- openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
12
- openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
13
- openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/Mac15%2C10_summary_2025-06-15T230300.json>macOS 15.5</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,? iPadOS 18.5,? iPadOS 26.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,? iPadOS 18.4.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
15
- openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
16
- openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPhone16%2C2_summary_2025-06-16T135523.json>iOS 18.5</a>,✅ iOS 18.4.1,✅ iOS 18.5
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
18
- openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C7_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C1_summary_2025-06-16T220810.json>iPadOS 18.4</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
19
- openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
22
  openai_whisper-tiny,openai_whisper-tiny,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
 
1
  ,Model,"Apple M2 Pro (Mac14,12)","Apple M3 Max (Mac15,10)","iPad Air (5th generation) (iPad13,16)","iPad Pro (11-inch) (3rd generation) (iPad13,6)","iPad mini (6th generation) (iPad14,1)","iPad Air 11-inch (M2) (iPad14,8)","iPad Air 11-inch (M3) (iPad15,3)","iPad (A16) (iPad15,7)","iPad mini (A17 Pro) (iPad16,1)","iPad Pro 11-inch (M4) (iPad16,3)","iPhone 11 (iPhone12,1)","iPhone 12 mini (iPhone13,1)","iPhone 13 Pro (iPhone14,2)","iPhone 13 (iPhone14,5)","iPhone 14 (iPhone14,7)","iPhone 15 (iPhone15,4)","iPhone 15 Pro Max (iPhone16,2)","iPhone 16 (iPhone17,3)","iPhone 16e (iPhone17,5)"
2
+ distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,✅ iPadOS 18.5,✅ iPadOS 26.0,Not Supported,Not Supported,✅ iPadOS 18.4.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
4
+ distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
5
+ distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
8
+ openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,✅ iPadOS 18.5,✅ iPadOS 26.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
10
+ openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
11
+ openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
12
+ openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.5,✅ macOS 15.5,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
13
+ openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/Mac15%2C10_summary_2025-06-15T230300.json>macOS 15.5</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad13%2C6_summary_2025-06-17T205025.json>iPadOS 18.4</a>,Not Supported,? iPadOS 18.5,? iPadOS 26.0,Not Supported,Not Supported,? iPadOS 18.4.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
15
+ openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
16
+ openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPhone16%2C2_summary_2025-06-16T135523.json>iOS 18.5</a>,✅ iOS 18.4.1,✅ iOS 18.5
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
18
+ openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad14%2C8_summary_2025-06-16T192343.json>iPadOS 18.5</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad15%2C3_summary_2025-06-17T205025.json>iPadOS 26.0</a>,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2025-06-13T034257_8c0acbd/iPad16%2C3_summary_2025-06-16T220810.json>iPadOS 18.4.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
19
+ openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.5,✅ macOS 15.5,Not Supported,Not Supported,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,Not Supported,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
22
  openai_whisper-tiny,openai_whisper-tiny,✅ macOS 15.5,✅ macOS 15.5,✅ iPadOS 18.4.1,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.5,✅ iPadOS 26.0,✅ iPadOS 18.4,✅ iPadOS 18.4,✅ iPadOS 18.4.1,✅ iOS 26.0,✅ iOS 18.4.1,✅ iOS 18.1,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.5,✅ iOS 18.4.1,✅ iOS 18.5
dashboard_data/support_data_a9b92c4.csv CHANGED
@@ -1,21 +1,21 @@
1
  ,Model,"Apple M2 Pro (Mac14,12)","Apple M2 Ultra (Mac14,14)","Apple M2 (Mac14,2)","Apple M3 Max (Mac15,10)","Apple M3 Pro (Mac15,6)","Apple M3 Max (Mac15,9)","Apple M4 (Mac16,10)","Apple M4 (Mac16,3)","Apple M1 (MacBookAir10,1)","iPad Air (5th generation) (iPad13,16)","iPad Air 11-inch (M2) (iPad14,8)","iPad mini (A17 Pro) (iPad16,1)","iPad Pro 11-inch (M4) (iPad16,3)","iPhone 11 (iPhone12,1)","iPhone 12 mini (iPhone13,1)","iPhone 12 (iPhone13,2)","iPhone 12 Pro Max (iPhone13,4)","iPhone 13 Pro (iPhone14,2)","iPhone 13 (iPhone14,5)","iPhone 14 (iPhone14,7)","iPhone 15 Pro (iPhone16,1)","iPhone 15 Pro Max (iPhone16,2)","iPhone 16 Pro (iPhone17,1)","iPhone 16 (iPhone17,3)","iPhone 16 Plus (iPhone17,4)"
2
- distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
4
- distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
5
  distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,✅ iOS 17.6.1,✅ iOS 17.7,✅ iOS 17.2.1,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,✅ iOS 17.6.1,✅ iOS 17.7,✅ iOS 17.2.1,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
8
- openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
10
- openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
11
  openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
12
- openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,✅ iPadOS 17.6.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
13
- openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
15
- openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
16
  openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C7_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone17%2C4_summary_2024-10-30T132649.json>iOS 18.0.1</a>
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
18
- openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C1_summary_2024-10-29T234233.json>iPadOS 18.0.1</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
19
  openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone17%2C4_summary_2024-10-30T132649.json>iOS 18.0.1</a>
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C1_summary_2024-10-30T022739.json>iOS 17.7</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C2_summary_2024-10-30T152729.json>iOS 17.2.1</a>,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C1_summary_2024-10-30T022739.json>iOS 17.7</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C2_summary_2024-10-30T152729.json>iOS 17.2.1</a>,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
 
1
  ,Model,"Apple M2 Pro (Mac14,12)","Apple M2 Ultra (Mac14,14)","Apple M2 (Mac14,2)","Apple M3 Max (Mac15,10)","Apple M3 Pro (Mac15,6)","Apple M3 Max (Mac15,9)","Apple M4 (Mac16,10)","Apple M4 (Mac16,3)","Apple M1 (MacBookAir10,1)","iPad Air (5th generation) (iPad13,16)","iPad Air 11-inch (M2) (iPad14,8)","iPad mini (A17 Pro) (iPad16,1)","iPad Pro 11-inch (M4) (iPad16,3)","iPhone 11 (iPhone12,1)","iPhone 12 mini (iPhone13,1)","iPhone 12 (iPhone13,2)","iPhone 12 Pro Max (iPhone13,4)","iPhone 13 Pro (iPhone14,2)","iPhone 13 (iPhone14,5)","iPhone 14 (iPhone14,7)","iPhone 15 Pro (iPhone16,1)","iPhone 15 Pro Max (iPhone16,2)","iPhone 16 Pro (iPhone17,1)","iPhone 16 (iPhone17,3)","iPhone 16 Plus (iPhone17,4)"
2
+ distil-whisper_distil-large-v3,distil-whisper_distil-large-v3,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,✅ iPadOS 17.6.1,Not Supported,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
3
  distil-whisper_distil-large-v3_594MB,distil-whisper_distil-large-v3_594MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
4
+ distil-whisper_distil-large-v3_turbo,distil-whisper_distil-large-v3_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
5
  distil-whisper_distil-large-v3_turbo_600MB,distil-whisper_distil-large-v3_turbo_600MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
6
  openai_whisper-base,openai_whisper-base,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,✅ iOS 17.6.1,✅ iOS 17.7,✅ iOS 17.2.1,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
7
  openai_whisper-base.en,openai_whisper-base.en,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,✅ iOS 17.6.1,✅ iOS 17.7,✅ iOS 17.2.1,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
8
+ openai_whisper-large-v2,openai_whisper-large-v2,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,Not Supported,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
9
  openai_whisper-large-v2_949MB,openai_whisper-large-v2_949MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
10
+ openai_whisper-large-v2_turbo,openai_whisper-large-v2_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
11
  openai_whisper-large-v2_turbo_955MB,openai_whisper-large-v2_turbo_955MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
12
+ openai_whisper-large-v3,openai_whisper-large-v3,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,✅ iPadOS 17.6.1,Not Supported,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
13
+ openai_whisper-large-v3-v20240930,openai_whisper-large-v3-v20240930,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/MacBookAir10%2C1_summary_2024-10-30T012535.json>macOS 15.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
14
  openai_whisper-large-v3-v20240930_626MB,openai_whisper-large-v3-v20240930_626MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
15
+ openai_whisper-large-v3-v20240930_turbo,openai_whisper-large-v3-v20240930_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
16
  openai_whisper-large-v3-v20240930_turbo_632MB,openai_whisper-large-v3-v20240930_turbo_632MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C7_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone17%2C4_summary_2024-10-30T132649.json>iOS 18.0.1</a>
17
  openai_whisper-large-v3_947MB,openai_whisper-large-v3_947MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
18
+ openai_whisper-large-v3_turbo,openai_whisper-large-v3_turbo,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad14%2C8_summary_2024-10-30T073931.json>iPadOS 17.6.1</a>,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPad16%2C3_summary_2024-10-30T073931.json>iPadOS 18.1</a>,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported,Not Supported
19
  openai_whisper-large-v3_turbo_954MB,openai_whisper-large-v3_turbo_954MB,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,Not Supported,Not Supported,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,Not Supported,Not Supported,Not Supported,✅ iOS 18.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone14%2C5_summary_2024-10-30T073931.json>iOS 17.3</a>,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone17%2C4_summary_2024-10-30T132649.json>iOS 18.0.1</a>
20
  openai_whisper-small,openai_whisper-small,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C1_summary_2024-10-30T022739.json>iOS 17.7</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C2_summary_2024-10-30T152729.json>iOS 17.2.1</a>,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
21
  openai_whisper-small.en,openai_whisper-small.en,✅ macOS 15.0.1,✅ macOS 15.0.1,✅ macOS 15.1,✅ macOS 15.2,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.1,✅ macOS 15.0,✅ macOS 15.1,✅ iPadOS 18.1,✅ iPadOS 17.6.1,✅ iPadOS 18.0.1,✅ iPadOS 18.1,Not Supported,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C1_summary_2024-10-30T022739.json>iOS 17.7</a>,⚠️ <a style='color: #3B82F6; text-decoration: underline; text-decoration-style: dotted;' href=https://huggingface.co/datasets/argmaxinc/whisperkit-evals-dataset/blob/main/benchmark_data/2024-10-29T190053_a9b92c4/iPhone13%2C2_summary_2024-10-30T152729.json>iOS 17.2.1</a>,✅ iOS 18.1,✅ iOS 18.1,✅ iOS 17.3,✅ iOS 17.3,✅ iOS 18.1,✅ iOS 18.2,✅ iOS 18.0,✅ iOS 18.0.1,✅ iOS 18.0.1
dashboard_data/test_coverage_112a023.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "commit_hash": "112a023",
3
+ "total_devices": 137,
4
+ "tested_devices": 49,
5
+ "skipped_devices": 88,
6
+ "coverage_percentage": 35.76642335766424,
7
+ "tested_device_list": [
8
+ "iPhone12,3",
9
+ "Mac15,10",
10
+ "iPad14,9",
11
+ "iPhone12,1",
12
+ "Mac14,15",
13
+ "iPhone14,6",
14
+ "Mac15,13",
15
+ "Mac14,6",
16
+ "iPhone14,3",
17
+ "Mac14,13",
18
+ "Mac14,5",
19
+ "iPhone14,8",
20
+ "iPhone14,5",
21
+ "iPhone14,2",
22
+ "iPad14,6",
23
+ "Mac14,12",
24
+ "Mac16,9",
25
+ "Mac14,8",
26
+ "Mac15,12",
27
+ "Mac14,2",
28
+ "iPad14,10",
29
+ "iPhone14,7",
30
+ "Mac14,10",
31
+ "iPad16,6",
32
+ "iPad16,3",
33
+ "iPad16,5",
34
+ "Mac15,5",
35
+ "iPhone14,4",
36
+ "Mac14,14",
37
+ "Mac14,7",
38
+ "Mac15,11",
39
+ "iPad14,3",
40
+ "iPad14,5",
41
+ "Mac14,9",
42
+ "Mac15,6",
43
+ "iPad16,4",
44
+ "Mac15,4",
45
+ "Mac15,8",
46
+ "Mac16,8",
47
+ "Mac14,4",
48
+ "Mac15,9",
49
+ "Mac15,3",
50
+ "iPad14,4",
51
+ "Mac14,3",
52
+ "iPhone12,8",
53
+ "iPad14,11",
54
+ "Mac15,7",
55
+ "iPhone12,5",
56
+ "iPad14,8"
57
+ ],
58
+ "skipped_device_list": [
59
+ "iPad15,5",
60
+ "iPad13,2",
61
+ "iPad8,6",
62
+ "iPad8,12",
63
+ "iPad8,9",
64
+ "iPad15,7",
65
+ "iPad15,3",
66
+ "iPad13,8",
67
+ "Mac16,6",
68
+ "iPhone11,5",
69
+ "iPad13,19",
70
+ "iPad8,2",
71
+ "iPhone16,1",
72
+ "iPhone12,2",
73
+ "iPad13,7",
74
+ "iPad8,3",
75
+ "iPhone13,1",
76
+ "iPad16,2",
77
+ "Macmini9,1",
78
+ "MacBookPro18,2",
79
+ "iPhone11,8",
80
+ "MacBookPro17,1",
81
+ "Mac16,10",
82
+ "iPhone15,5",
83
+ "iPhone17,4",
84
+ "Mac13,1",
85
+ "MacBookAir10,1",
86
+ "Mac13,2",
87
+ "iPad13,10",
88
+ "iPad8,11",
89
+ "Mac16,13",
90
+ "iPad13,1",
91
+ "iPad8,10",
92
+ "iPad13,5",
93
+ "iPad14,2",
94
+ "iPad13,9",
95
+ "iPhone15,2",
96
+ "iPad11,3",
97
+ "iPhone13,2",
98
+ "iPhone17,5",
99
+ "MacBookPro18,1",
100
+ "iMac21,2",
101
+ "MacBookPro18,4",
102
+ "iPad13,6",
103
+ "iPhone11,4",
104
+ "iPad8,1",
105
+ "iPhone17,2",
106
+ "iPhone11,6",
107
+ "iPad12,1",
108
+ "iMac21,1",
109
+ "MacBookPro18,3",
110
+ "iPhone11,3",
111
+ "iPad8,4",
112
+ "iPad11,4",
113
+ "iPad13,18",
114
+ "Mac16,3",
115
+ "iPhone12,4",
116
+ "iPhone13,3",
117
+ "Mac16,5",
118
+ "iPhone17,3",
119
+ "iPad8,7",
120
+ "iPad13,4",
121
+ "iPad15,8",
122
+ "iPad11,1",
123
+ "iPad11,2",
124
+ "iPhone13,4",
125
+ "iPad14,1",
126
+ "iPad13,17",
127
+ "iPad16,1",
128
+ "iPhone16,2",
129
+ "iPad15,4",
130
+ "iPhone11,2",
131
+ "iPhone15,4",
132
+ "iPhone17,1",
133
+ "iPad13,11",
134
+ "iPad8,5",
135
+ "Mac16,1",
136
+ "Mac16,2",
137
+ "iPad11,7",
138
+ "iPad11,6",
139
+ "Mac16,7",
140
+ "iPad13,16",
141
+ "iPhone15,3",
142
+ "iPad8,8",
143
+ "Mac16,12",
144
+ "iPad15,6",
145
+ "Mac16,11",
146
+ "iPad12,2"
147
+ ],
148
+ "tested_os_versions": [
149
+ "macOS_15.1.1",
150
+ "iPadOS_18.1",
151
+ "iPadOS_17.6.1",
152
+ "macOS_15.0.1",
153
+ "macOS_15.2.0",
154
+ "iOS_17.6.1",
155
+ "iOS_17.7.1",
156
+ "macOS_15.2"
157
+ ],
158
+ "has_target_os_coverage": false,
159
+ "covered_target_versions": [
160
+ "macOS 15",
161
+ "iOS 17",
162
+ "iOS 18"
163
+ ],
164
+ "missing_target_versions": [
165
+ "macOS 14",
166
+ "macOS 26",
167
+ "iOS 26"
168
+ ],
169
+ "has_target_chip_coverage": false,
170
+ "platform_chip_coverage": {
171
+ "iPad": {
172
+ "total_chips": 8,
173
+ "tested_chips": 2,
174
+ "coverage_percentage": 25.0,
175
+ "covered_chips": [
176
+ "M2",
177
+ "M4"
178
+ ],
179
+ "missing_chips": [
180
+ "A14",
181
+ "A15",
182
+ "A16",
183
+ "A17 Pro",
184
+ "M1",
185
+ "M3"
186
+ ]
187
+ },
188
+ "iPhone": {
189
+ "total_chips": 6,
190
+ "tested_chips": 2,
191
+ "coverage_percentage": 33.33333333333333,
192
+ "covered_chips": [
193
+ "A13",
194
+ "A15"
195
+ ],
196
+ "missing_chips": [
197
+ "A14",
198
+ "A16",
199
+ "A17 Pro",
200
+ "A18",
201
+ "A18 Pro"
202
+ ]
203
+ },
204
+ "Mac": {
205
+ "total_chips": 4,
206
+ "tested_chips": 2,
207
+ "coverage_percentage": 50.0,
208
+ "covered_chips": [
209
+ "M2",
210
+ "M3"
211
+ ],
212
+ "missing_chips": [
213
+ "M1",
214
+ "M4"
215
+ ]
216
+ }
217
+ },
218
+ "missing_target_chips": {
219
+ "iPad": [
220
+ "A14",
221
+ "A15",
222
+ "A16",
223
+ "A17 Pro",
224
+ "M1",
225
+ "M3"
226
+ ],
227
+ "iPhone": [
228
+ "A14",
229
+ "A16",
230
+ "A17 Pro",
231
+ "A18",
232
+ "A18 Pro"
233
+ ],
234
+ "Mac": [
235
+ "M1",
236
+ "M4"
237
+ ]
238
+ }
239
+ }
dashboard_data/test_coverage_11a1fab.json ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "commit_hash": "11a1fab",
3
+ "total_devices": 137,
4
+ "tested_devices": 22,
5
+ "skipped_devices": 115,
6
+ "coverage_percentage": 16.05839416058394,
7
+ "tested_device_list": [
8
+ "iPad15,5",
9
+ "iPad13,2",
10
+ "Mac16,5",
11
+ "Mac16,7",
12
+ "Mac16,13",
13
+ "iPad15,8",
14
+ "iPad13,1",
15
+ "iPad15,7",
16
+ "iPad15,3",
17
+ "iPad16,2",
18
+ "Mac16,6",
19
+ "Mac16,1",
20
+ "iPad13,19",
21
+ "Mac16,10",
22
+ "Mac16,12",
23
+ "iPad13,18",
24
+ "Mac16,2",
25
+ "iPad15,6",
26
+ "iPad16,1",
27
+ "Mac16,3",
28
+ "Mac16,11",
29
+ "iPad15,4"
30
+ ],
31
+ "skipped_device_list": [
32
+ "Mac15,10",
33
+ "iPad8,6",
34
+ "iPad8,12",
35
+ "iPad8,9",
36
+ "Mac14,13",
37
+ "Mac14,5",
38
+ "iPhone14,5",
39
+ "Mac15,12",
40
+ "iPad13,8",
41
+ "Mac14,10",
42
+ "iPhone11,5",
43
+ "iPad8,2",
44
+ "iPhone16,1",
45
+ "Mac14,9",
46
+ "iPhone12,2",
47
+ "iPad13,7",
48
+ "iPad16,4",
49
+ "iPad8,3",
50
+ "iPhone13,1",
51
+ "Macmini9,1",
52
+ "Mac15,9",
53
+ "MacBookPro18,2",
54
+ "Mac14,3",
55
+ "iPhone11,8",
56
+ "iPhone12,8",
57
+ "MacBookPro17,1",
58
+ "Mac15,7",
59
+ "iPhone15,5",
60
+ "iPhone17,4",
61
+ "Mac13,1",
62
+ "MacBookAir10,1",
63
+ "Mac13,2",
64
+ "iPad13,10",
65
+ "iPad8,11",
66
+ "Mac14,6",
67
+ "iPhone14,3",
68
+ "iPhone14,2",
69
+ "Mac16,9",
70
+ "iPad8,10",
71
+ "Mac14,2",
72
+ "iPad13,5",
73
+ "iPad14,2",
74
+ "iPad13,9",
75
+ "iPhone15,2",
76
+ "iPad16,3",
77
+ "iPad16,5",
78
+ "iPad11,3",
79
+ "iPhone13,2",
80
+ "iPhone17,5",
81
+ "MacBookPro18,1",
82
+ "iPad14,3",
83
+ "iPad14,5",
84
+ "iMac21,2",
85
+ "MacBookPro18,4",
86
+ "iPad13,6",
87
+ "iPhone11,4",
88
+ "Mac15,4",
89
+ "iPad8,1",
90
+ "iPhone17,2",
91
+ "Mac15,8",
92
+ "iPhone11,6",
93
+ "iPad12,1",
94
+ "iPad14,8",
95
+ "iPhone12,3",
96
+ "iMac21,1",
97
+ "iPhone12,1",
98
+ "Mac14,15",
99
+ "iPhone14,6",
100
+ "MacBookPro18,3",
101
+ "Mac15,13",
102
+ "iPad14,6",
103
+ "iPhone14,8",
104
+ "Mac14,8",
105
+ "Mac14,12",
106
+ "iPhone11,3",
107
+ "iPhone14,7",
108
+ "iPad8,4",
109
+ "iPad11,4",
110
+ "iPad16,6",
111
+ "Mac15,5",
112
+ "iPhone14,4",
113
+ "iPhone12,4",
114
+ "iPhone13,3",
115
+ "Mac15,11",
116
+ "iPhone17,3",
117
+ "iPad8,7",
118
+ "iPad13,4",
119
+ "Mac15,6",
120
+ "iPad11,1",
121
+ "iPad11,2",
122
+ "Mac14,4",
123
+ "iPad14,4",
124
+ "iPhone13,4",
125
+ "iPad14,1",
126
+ "iPad13,17",
127
+ "iPhone12,5",
128
+ "iPhone16,2",
129
+ "iPhone11,2",
130
+ "iPad14,9",
131
+ "iPad14,10",
132
+ "iPhone15,4",
133
+ "iPhone17,1",
134
+ "iPad13,11",
135
+ "iPad8,5",
136
+ "Mac14,14",
137
+ "Mac14,7",
138
+ "iPad11,7",
139
+ "iPad11,6",
140
+ "Mac16,8",
141
+ "iPad13,16",
142
+ "Mac15,3",
143
+ "iPhone15,3",
144
+ "iPad8,8",
145
+ "iPad14,11",
146
+ "iPad12,2"
147
+ ],
148
+ "tested_os_versions": [
149
+ "macOS_15.4",
150
+ "iPadOS_18.3.2",
151
+ "macOS_15.4.0",
152
+ "iPadOS_18.4"
153
+ ],
154
+ "has_target_os_coverage": false,
155
+ "covered_target_versions": [
156
+ "macOS 15",
157
+ "iOS 18"
158
+ ],
159
+ "missing_target_versions": [
160
+ "macOS 14",
161
+ "macOS 26",
162
+ "iOS 17",
163
+ "iOS 26"
164
+ ],
165
+ "has_target_chip_coverage": false,
166
+ "platform_chip_coverage": {
167
+ "iPad": {
168
+ "total_chips": 8,
169
+ "tested_chips": 4,
170
+ "coverage_percentage": 50.0,
171
+ "covered_chips": [
172
+ "A14",
173
+ "A16",
174
+ "A17 Pro",
175
+ "M3"
176
+ ],
177
+ "missing_chips": [
178
+ "A15",
179
+ "M1",
180
+ "M2",
181
+ "M4"
182
+ ]
183
+ },
184
+ "iPhone": {
185
+ "total_chips": 6,
186
+ "tested_chips": 0,
187
+ "coverage_percentage": 0.0,
188
+ "covered_chips": [],
189
+ "missing_chips": [
190
+ "A14",
191
+ "A15",
192
+ "A16",
193
+ "A17 Pro",
194
+ "A18",
195
+ "A18 Pro"
196
+ ]
197
+ },
198
+ "Mac": {
199
+ "total_chips": 4,
200
+ "tested_chips": 1,
201
+ "coverage_percentage": 25.0,
202
+ "covered_chips": [
203
+ "M4"
204
+ ],
205
+ "missing_chips": [
206
+ "M1",
207
+ "M2",
208
+ "M3"
209
+ ]
210
+ }
211
+ },
212
+ "missing_target_chips": {
213
+ "iPad": [
214
+ "A15",
215
+ "M1",
216
+ "M2",
217
+ "M4"
218
+ ],
219
+ "iPhone": [
220
+ "A14",
221
+ "A15",
222
+ "A16",
223
+ "A17 Pro",
224
+ "A18",
225
+ "A18 Pro"
226
+ ],
227
+ "Mac": [
228
+ "M1",
229
+ "M2",
230
+ "M3"
231
+ ]
232
+ }
233
+ }
dashboard_data/test_coverage_8c0acbd.json ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "commit_hash": "8c0acbd",
3
+ "total_devices": 137,
4
+ "tested_devices": 82,
5
+ "skipped_devices": 55,
6
+ "coverage_percentage": 59.854014598540154,
7
+ "tested_device_list": [
8
+ "iPhone12,3",
9
+ "Mac15,10",
10
+ "iPad15,5",
11
+ "iPhone12,1",
12
+ "Mac14,15",
13
+ "iPhone14,6",
14
+ "Mac15,13",
15
+ "Mac14,13",
16
+ "iPad14,6",
17
+ "Mac14,5",
18
+ "iPhone14,8",
19
+ "iPhone14,5",
20
+ "Mac14,12",
21
+ "Mac14,8",
22
+ "Mac15,12",
23
+ "iPad15,7",
24
+ "iPad15,3",
25
+ "iPad13,8",
26
+ "iPhone14,7",
27
+ "Mac14,10",
28
+ "iPad16,6",
29
+ "Mac15,5",
30
+ "iPhone14,4",
31
+ "iPhone13,3",
32
+ "Mac15,11",
33
+ "Mac14,9",
34
+ "iPhone16,1",
35
+ "iPad13,7",
36
+ "iPhone17,3",
37
+ "iPad13,4",
38
+ "Mac15,6",
39
+ "iPad16,4",
40
+ "iPad15,8",
41
+ "iPhone13,1",
42
+ "Mac14,4",
43
+ "iPad16,2",
44
+ "Mac15,9",
45
+ "iPad14,1",
46
+ "iPhone13,4",
47
+ "Mac14,3",
48
+ "iPad14,4",
49
+ "iPhone12,8",
50
+ "Mac15,7",
51
+ "iPhone15,5",
52
+ "iPad13,17",
53
+ "iPhone12,5",
54
+ "iPad16,1",
55
+ "iPhone16,2",
56
+ "iPad15,4",
57
+ "iPhone17,4",
58
+ "iPad14,9",
59
+ "iPad13,10",
60
+ "Mac14,6",
61
+ "iPhone14,3",
62
+ "iPhone14,2",
63
+ "Mac16,9",
64
+ "Mac14,2",
65
+ "iPad13,5",
66
+ "iPad14,2",
67
+ "iPad14,10",
68
+ "iPhone15,4",
69
+ "iPad13,9",
70
+ "iPad13,11",
71
+ "iPhone15,2",
72
+ "iPad16,3",
73
+ "iPad16,5",
74
+ "iPhone13,2",
75
+ "Mac14,14",
76
+ "iPhone17,5",
77
+ "Mac14,7",
78
+ "iPad14,3",
79
+ "iPad14,5",
80
+ "iPad13,6",
81
+ "Mac15,4",
82
+ "Mac15,8",
83
+ "iPad13,16",
84
+ "Mac16,8",
85
+ "Mac15,3",
86
+ "iPhone15,3",
87
+ "iPad14,11",
88
+ "iPad15,6",
89
+ "iPad14,8"
90
+ ],
91
+ "skipped_device_list": [
92
+ "Mac13,1",
93
+ "iMac21,1",
94
+ "iPad13,2",
95
+ "iPad8,6",
96
+ "MacBookAir10,1",
97
+ "Mac13,2",
98
+ "iPad8,12",
99
+ "iPad8,11",
100
+ "MacBookPro18,3",
101
+ "iPad8,9",
102
+ "Mac16,13",
103
+ "iPad13,1",
104
+ "iPhone11,3",
105
+ "iPad8,10",
106
+ "iPhone17,1",
107
+ "Mac16,6",
108
+ "iPad8,5",
109
+ "iPhone11,5",
110
+ "iPad8,4",
111
+ "iPad11,4",
112
+ "iPad11,3",
113
+ "iPad13,19",
114
+ "Mac16,1",
115
+ "Mac16,2",
116
+ "iPad13,18",
117
+ "iPad8,2",
118
+ "Mac16,3",
119
+ "iPhone12,4",
120
+ "MacBookPro18,1",
121
+ "iPad11,7",
122
+ "iMac21,2",
123
+ "iPhone12,2",
124
+ "MacBookPro18,4",
125
+ "Mac16,5",
126
+ "iPad11,6",
127
+ "iPad12,2",
128
+ "iPad8,7",
129
+ "iPhone11,4",
130
+ "Mac16,7",
131
+ "iPad8,3",
132
+ "iPad8,1",
133
+ "iPhone17,2",
134
+ "iPhone11,6",
135
+ "iPad11,1",
136
+ "iPad11,2",
137
+ "Macmini9,1",
138
+ "iPad12,1",
139
+ "MacBookPro18,2",
140
+ "iPhone11,8",
141
+ "MacBookPro17,1",
142
+ "iPad8,8",
143
+ "Mac16,10",
144
+ "Mac16,12",
145
+ "Mac16,11",
146
+ "iPhone11,2"
147
+ ],
148
+ "tested_os_versions": [
149
+ "macOS_15.5.0",
150
+ "iPadOS_18.4.1",
151
+ "iOS_18.4.1",
152
+ "iOS_19.0",
153
+ "iOS_18.1",
154
+ "iOS_26.0",
155
+ "macOS_15.5",
156
+ "iPadOS_26.0",
157
+ "iPadOS_18.5",
158
+ "iOS_18.5",
159
+ "iPadOS_18.4",
160
+ "iPadOS_19.0"
161
+ ],
162
+ "has_target_os_coverage": false,
163
+ "covered_target_versions": [
164
+ "macOS 15",
165
+ "iOS 18",
166
+ "iOS 26"
167
+ ],
168
+ "missing_target_versions": [
169
+ "macOS 14",
170
+ "macOS 26",
171
+ "iOS 17"
172
+ ],
173
+ "has_target_chip_coverage": false,
174
+ "platform_chip_coverage": {
175
+ "iPad": {
176
+ "total_chips": 8,
177
+ "tested_chips": 7,
178
+ "coverage_percentage": 87.5,
179
+ "covered_chips": [
180
+ "A15",
181
+ "A16",
182
+ "A17 Pro",
183
+ "M1",
184
+ "M2",
185
+ "M3",
186
+ "M4"
187
+ ],
188
+ "missing_chips": [
189
+ "A14"
190
+ ]
191
+ },
192
+ "iPhone": {
193
+ "total_chips": 6,
194
+ "tested_chips": 6,
195
+ "coverage_percentage": 100.0,
196
+ "covered_chips": [
197
+ "A13",
198
+ "A14",
199
+ "A15",
200
+ "A16",
201
+ "A17 Pro",
202
+ "A18"
203
+ ],
204
+ "missing_chips": [
205
+ "A18 Pro"
206
+ ]
207
+ },
208
+ "Mac": {
209
+ "total_chips": 4,
210
+ "tested_chips": 2,
211
+ "coverage_percentage": 50.0,
212
+ "covered_chips": [
213
+ "M2",
214
+ "M3"
215
+ ],
216
+ "missing_chips": [
217
+ "M1",
218
+ "M4"
219
+ ]
220
+ }
221
+ },
222
+ "missing_target_chips": {
223
+ "iPad": [
224
+ "A14"
225
+ ],
226
+ "iPhone": [
227
+ "A18 Pro"
228
+ ],
229
+ "Mac": [
230
+ "M1",
231
+ "M4"
232
+ ]
233
+ }
234
+ }
dashboard_data/test_coverage_a9b92c4.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "commit_hash": "a9b92c4",
3
+ "total_devices": 137,
4
+ "tested_devices": 93,
5
+ "skipped_devices": 44,
6
+ "coverage_percentage": 67.88321167883211,
7
+ "tested_device_list": [
8
+ "iPhone12,3",
9
+ "Mac15,10",
10
+ "iMac21,1",
11
+ "iPhone12,1",
12
+ "Mac14,15",
13
+ "iPhone14,6",
14
+ "MacBookPro18,3",
15
+ "Mac15,13",
16
+ "Mac14,13",
17
+ "iPad14,6",
18
+ "Mac14,5",
19
+ "iPhone14,8",
20
+ "iPhone14,5",
21
+ "Mac14,12",
22
+ "Mac14,8",
23
+ "Mac15,12",
24
+ "iPad13,8",
25
+ "iPhone14,7",
26
+ "Mac16,6",
27
+ "Mac14,10",
28
+ "iPad16,6",
29
+ "Mac15,5",
30
+ "iPhone14,4",
31
+ "Mac16,3",
32
+ "iPhone13,3",
33
+ "Mac15,11",
34
+ "iPhone16,1",
35
+ "Mac14,9",
36
+ "Mac16,5",
37
+ "iPad13,7",
38
+ "iPhone17,3",
39
+ "iPad13,4",
40
+ "Mac15,6",
41
+ "iPad16,4",
42
+ "iPhone13,1",
43
+ "Mac14,4",
44
+ "iPad16,2",
45
+ "Macmini9,1",
46
+ "Mac15,9",
47
+ "iPhone13,4",
48
+ "iPad14,4",
49
+ "MacBookPro18,2",
50
+ "Mac14,3",
51
+ "iPhone12,8",
52
+ "MacBookPro17,1",
53
+ "Mac16,10",
54
+ "Mac15,7",
55
+ "iPhone12,5",
56
+ "iPad16,1",
57
+ "iPhone16,2",
58
+ "iPad13,17",
59
+ "iPhone17,4",
60
+ "Mac13,1",
61
+ "MacBookAir10,1",
62
+ "iPad14,9",
63
+ "Mac13,2",
64
+ "iPad13,10",
65
+ "Mac14,6",
66
+ "iPhone14,3",
67
+ "iPhone14,2",
68
+ "Mac16,13",
69
+ "Mac16,9",
70
+ "Mac14,2",
71
+ "iPad13,5",
72
+ "iPad14,10",
73
+ "iPhone17,1",
74
+ "iPad13,9",
75
+ "iPad13,11",
76
+ "iPad16,3",
77
+ "iPad16,5",
78
+ "iPhone13,2",
79
+ "Mac16,1",
80
+ "Mac16,2",
81
+ "Mac14,14",
82
+ "MacBookPro18,1",
83
+ "Mac14,7",
84
+ "iPhone17,5",
85
+ "iPad14,3",
86
+ "iPad14,5",
87
+ "iMac21,2",
88
+ "MacBookPro18,4",
89
+ "iPad13,6",
90
+ "Mac16,7",
91
+ "Mac15,4",
92
+ "iPhone17,2",
93
+ "Mac15,8",
94
+ "iPad13,16",
95
+ "Mac16,8",
96
+ "Mac15,3",
97
+ "Mac16,12",
98
+ "iPad14,11",
99
+ "Mac16,11",
100
+ "iPad14,8"
101
+ ],
102
+ "skipped_device_list": [
103
+ "iPad15,5",
104
+ "iPad13,2",
105
+ "iPad8,6",
106
+ "iPad15,6",
107
+ "iPad8,12",
108
+ "iPad8,11",
109
+ "iPad8,9",
110
+ "iPad13,1",
111
+ "iPhone11,3",
112
+ "iPad8,10",
113
+ "iPad15,7",
114
+ "iPad15,3",
115
+ "iPad14,2",
116
+ "iPhone15,4",
117
+ "iPhone15,2",
118
+ "iPad8,5",
119
+ "iPhone11,5",
120
+ "iPad8,4",
121
+ "iPad11,4",
122
+ "iPad11,3",
123
+ "iPad13,19",
124
+ "iPad13,18",
125
+ "iPad8,2",
126
+ "iPhone12,4",
127
+ "iPad11,7",
128
+ "iPhone12,2",
129
+ "iPad11,6",
130
+ "iPad12,2",
131
+ "iPad8,7",
132
+ "iPhone11,4",
133
+ "iPad8,3",
134
+ "iPad8,1",
135
+ "iPad15,8",
136
+ "iPhone11,6",
137
+ "iPad11,1",
138
+ "iPad11,2",
139
+ "iPad12,1",
140
+ "iPad14,1",
141
+ "iPhone11,8",
142
+ "iPhone15,3",
143
+ "iPad8,8",
144
+ "iPhone15,5",
145
+ "iPad15,4",
146
+ "iPhone11,2"
147
+ ],
148
+ "tested_os_versions": [
149
+ "macOS_15.0.0",
150
+ "macOS_15.1.0",
151
+ "iPadOS_18.1",
152
+ "iOS_18.1",
153
+ "iPadOS_17.6.1",
154
+ "macOS_15.0.1",
155
+ "macOS_15.2.0",
156
+ "iOS_17.3",
157
+ "iOS_18.0",
158
+ "iPadOS_18.0.1",
159
+ "macOS_15.2",
160
+ "macOS_15.1",
161
+ "iOS_17.2.1",
162
+ "iOS_17.7",
163
+ "iOS_17.6.1",
164
+ "iOS_18.2",
165
+ "iOS_18.0.1",
166
+ "macOS_15.0"
167
+ ],
168
+ "has_target_os_coverage": false,
169
+ "covered_target_versions": [
170
+ "macOS 15",
171
+ "iOS 17",
172
+ "iOS 18"
173
+ ],
174
+ "missing_target_versions": [
175
+ "macOS 14",
176
+ "macOS 26",
177
+ "iOS 26"
178
+ ],
179
+ "has_target_chip_coverage": false,
180
+ "platform_chip_coverage": {
181
+ "iPad": {
182
+ "total_chips": 8,
183
+ "tested_chips": 4,
184
+ "coverage_percentage": 50.0,
185
+ "covered_chips": [
186
+ "A17 Pro",
187
+ "M1",
188
+ "M2",
189
+ "M4"
190
+ ],
191
+ "missing_chips": [
192
+ "A14",
193
+ "A15",
194
+ "A16",
195
+ "M3"
196
+ ]
197
+ },
198
+ "iPhone": {
199
+ "total_chips": 6,
200
+ "tested_chips": 6,
201
+ "coverage_percentage": 100.0,
202
+ "covered_chips": [
203
+ "A13",
204
+ "A14",
205
+ "A15",
206
+ "A17 Pro",
207
+ "A18",
208
+ "A18 Pro"
209
+ ],
210
+ "missing_chips": [
211
+ "A16"
212
+ ]
213
+ },
214
+ "Mac": {
215
+ "total_chips": 4,
216
+ "tested_chips": 4,
217
+ "coverage_percentage": 100.0,
218
+ "covered_chips": [
219
+ "M1",
220
+ "M2",
221
+ "M3",
222
+ "M4"
223
+ ],
224
+ "missing_chips": []
225
+ }
226
+ },
227
+ "missing_target_chips": {
228
+ "iPad": [
229
+ "A14",
230
+ "A15",
231
+ "A16",
232
+ "M3"
233
+ ],
234
+ "iPhone": [
235
+ "A16"
236
+ ],
237
+ "Mac": []
238
+ }
239
+ }
dashboard_data/test_coverage_ca49596.json ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "commit_hash": "ca49596",
3
+ "total_devices": 137,
4
+ "tested_devices": 63,
5
+ "skipped_devices": 74,
6
+ "coverage_percentage": 45.98540145985402,
7
+ "tested_device_list": [
8
+ "iPhone12,3",
9
+ "Mac15,10",
10
+ "iPad15,5",
11
+ "iPad14,9",
12
+ "iPad15,6",
13
+ "iPhone12,1",
14
+ "Mac14,15",
15
+ "iPhone14,6",
16
+ "Mac15,13",
17
+ "Mac14,6",
18
+ "iPhone14,3",
19
+ "Mac14,13",
20
+ "Mac14,5",
21
+ "iPhone14,2",
22
+ "iPhone14,8",
23
+ "iPhone14,5",
24
+ "Mac16,13",
25
+ "Mac14,12",
26
+ "Mac16,9",
27
+ "Mac14,8",
28
+ "Mac15,12",
29
+ "Mac14,2",
30
+ "iPad15,3",
31
+ "iPad14,10",
32
+ "iPhone14,7",
33
+ "Mac16,6",
34
+ "Mac14,10",
35
+ "iPad16,6",
36
+ "iPad16,3",
37
+ "iPad16,5",
38
+ "Mac16,1",
39
+ "Mac15,5",
40
+ "Mac16,2",
41
+ "iPhone14,4",
42
+ "Mac14,14",
43
+ "Mac16,3",
44
+ "Mac14,7",
45
+ "Mac15,11",
46
+ "iPad14,3",
47
+ "iPad14,5",
48
+ "Mac14,9",
49
+ "Mac16,5",
50
+ "Mac15,6",
51
+ "iPad16,4",
52
+ "Mac16,7",
53
+ "Mac15,4",
54
+ "Mac15,8",
55
+ "Mac16,8",
56
+ "Mac14,4",
57
+ "iPad14,6",
58
+ "Mac15,9",
59
+ "Mac15,3",
60
+ "iPad14,4",
61
+ "Mac14,3",
62
+ "iPhone12,8",
63
+ "Mac16,10",
64
+ "Mac15,7",
65
+ "Mac16,12",
66
+ "iPad14,11",
67
+ "iPhone12,5",
68
+ "Mac16,11",
69
+ "iPad14,8",
70
+ "iPad15,4"
71
+ ],
72
+ "skipped_device_list": [
73
+ "Mac13,1",
74
+ "iMac21,1",
75
+ "iPad13,2",
76
+ "iPad8,6",
77
+ "MacBookAir10,1",
78
+ "Mac13,2",
79
+ "iPad8,12",
80
+ "iPad13,10",
81
+ "iPad8,11",
82
+ "iPad8,9",
83
+ "MacBookPro18,3",
84
+ "iPad13,1",
85
+ "iPhone11,3",
86
+ "iPad8,10",
87
+ "iPad15,7",
88
+ "iPad13,5",
89
+ "iPad13,8",
90
+ "iPad14,2",
91
+ "iPhone15,4",
92
+ "iPad13,9",
93
+ "iPhone17,1",
94
+ "iPhone11,2",
95
+ "iPhone15,2",
96
+ "iPad13,11",
97
+ "iPhone11,5",
98
+ "iPad8,4",
99
+ "iPad11,4",
100
+ "iPad8,5",
101
+ "iPad11,3",
102
+ "iPad13,19",
103
+ "iPhone13,2",
104
+ "iPad13,18",
105
+ "iPad8,2",
106
+ "iPhone12,4",
107
+ "iPhone17,5",
108
+ "MacBookPro18,1",
109
+ "iPhone13,3",
110
+ "iPad11,7",
111
+ "iPhone16,1",
112
+ "iMac21,2",
113
+ "iPhone12,2",
114
+ "MacBookPro18,4",
115
+ "iPad13,7",
116
+ "iPhone17,3",
117
+ "iPad11,6",
118
+ "iPad8,7",
119
+ "iPad13,6",
120
+ "iPad13,4",
121
+ "iPhone11,4",
122
+ "iPad12,2",
123
+ "iPad8,3",
124
+ "iPad8,1",
125
+ "iPad13,17",
126
+ "iPhone17,2",
127
+ "iPad15,8",
128
+ "iPad13,16",
129
+ "iPhone13,1",
130
+ "iPhone11,6",
131
+ "iPad16,2",
132
+ "iPad11,1",
133
+ "Macmini9,1",
134
+ "iPad11,2",
135
+ "iPhone13,4",
136
+ "iPad12,1",
137
+ "iPad14,1",
138
+ "MacBookPro18,2",
139
+ "iPhone11,8",
140
+ "MacBookPro17,1",
141
+ "iPhone15,3",
142
+ "iPad8,8",
143
+ "iPhone15,5",
144
+ "iPad16,1",
145
+ "iPhone16,2",
146
+ "iPhone17,4"
147
+ ],
148
+ "tested_os_versions": [
149
+ "macOS_15.3",
150
+ "iOS_18.1",
151
+ "iPadOS_18.3.2",
152
+ "macOS_15.4",
153
+ "iOS_17.6.1",
154
+ "iPadOS_18.4",
155
+ "macOS_15.4.0",
156
+ "macOS_15.3.0"
157
+ ],
158
+ "has_target_os_coverage": false,
159
+ "covered_target_versions": [
160
+ "macOS 15",
161
+ "iOS 17",
162
+ "iOS 18"
163
+ ],
164
+ "missing_target_versions": [
165
+ "macOS 14",
166
+ "macOS 26",
167
+ "iOS 26"
168
+ ],
169
+ "has_target_chip_coverage": false,
170
+ "platform_chip_coverage": {
171
+ "iPad": {
172
+ "total_chips": 8,
173
+ "tested_chips": 3,
174
+ "coverage_percentage": 37.5,
175
+ "covered_chips": [
176
+ "M2",
177
+ "M3",
178
+ "M4"
179
+ ],
180
+ "missing_chips": [
181
+ "A14",
182
+ "A15",
183
+ "A16",
184
+ "A17 Pro",
185
+ "M1"
186
+ ]
187
+ },
188
+ "iPhone": {
189
+ "total_chips": 6,
190
+ "tested_chips": 2,
191
+ "coverage_percentage": 33.33333333333333,
192
+ "covered_chips": [
193
+ "A13",
194
+ "A15"
195
+ ],
196
+ "missing_chips": [
197
+ "A14",
198
+ "A16",
199
+ "A17 Pro",
200
+ "A18",
201
+ "A18 Pro"
202
+ ]
203
+ },
204
+ "Mac": {
205
+ "total_chips": 4,
206
+ "tested_chips": 3,
207
+ "coverage_percentage": 75.0,
208
+ "covered_chips": [
209
+ "M2",
210
+ "M3",
211
+ "M4"
212
+ ],
213
+ "missing_chips": [
214
+ "M1"
215
+ ]
216
+ }
217
+ },
218
+ "missing_target_chips": {
219
+ "iPad": [
220
+ "A14",
221
+ "A15",
222
+ "A16",
223
+ "A17 Pro",
224
+ "M1"
225
+ ],
226
+ "iPhone": [
227
+ "A14",
228
+ "A16",
229
+ "A17 Pro",
230
+ "A18",
231
+ "A18 Pro"
232
+ ],
233
+ "Mac": [
234
+ "M1"
235
+ ]
236
+ }
237
+ }
dashboard_data/version.json CHANGED
@@ -1 +1 @@
1
- {"last_modified": "2025-06-17T19:55:16+00:00", "sha": "c677ebea4ee6bd556ca70de12bff099044cf8950", "releases": ["a9b92c4", "112a023", "ca49596", "11a1fab", "8c0acbd"], "versions": ["0.9.1", "0.10.1", "0.11.0", "0.12.0", "0.13.0"]}
 
1
+ {"last_modified": "2025-06-17T19:55:16+00:00", "sha": "c677ebea4ee6bd556ca70de12bff099044cf8950", "releases": ["a9b92c4", "112a023", "ca49596", "11a1fab", "8c0acbd"], "versions": ["0.9.1", "0.10.1", "0.11.0", "0.12.0", "0.13.0"]}
main.py CHANGED
@@ -28,6 +28,7 @@ from constants import (
28
  )
29
  from utils import (
30
  add_datasets_to_performance_columns,
 
31
  create_initial_performance_column_dict,
32
  css,
33
  fields,
@@ -56,8 +57,11 @@ PERFORMANCE_DATA = read_json_line_by_line("dashboard_data/performance_data.json"
56
  with open("dashboard_data/version.json", "r") as file:
57
  VERSION_DATA = json.load(file)
58
 
 
 
 
59
  SHA_TO_VERSION = {
60
- VERSION_DATA["releases"][i]: VERSION_DATA["versions"][i]
61
  for i in range(len(VERSION_DATA["versions"]))
62
  }
63
 
@@ -66,7 +70,9 @@ benchmark_df = pd.json_normalize(PERFORMANCE_DATA)
66
  releases = VERSION_DATA["releases"]
67
 
68
  # Process timestamp data
69
- benchmark_df["timestamp"] = pd.to_datetime(benchmark_df["timestamp"]).dt.tz_localize(None)
 
 
70
 
71
  # Use average_wer directly from performance data
72
  benchmark_df["english_wer"] = benchmark_df["average_wer"]
@@ -106,12 +112,17 @@ performance_df = sorted_performance_df[
106
  "speed",
107
  "tokens_per_second",
108
  "timestamp",
109
- "commit_hash"
110
  ]
111
  + dataset_speed_columns
112
  + dataset_toks_columns
113
  ].copy()
114
 
 
 
 
 
 
115
  # Rename columns for clarity
116
  performance_df = performance_df.rename(
117
  lambda x: COL_NAMES[x] if x in COL_NAMES else x, axis="columns"
@@ -136,12 +147,16 @@ for col in dataset_toks_columns:
136
 
137
  # Process model names for display
138
  performance_df["model_raw"] = performance_df["Model"].copy()
139
- performance_df["Model"] = performance_df["Model"].apply(lambda x: make_model_name_clickable_link(x))
 
 
140
 
141
  # Extract unique devices and OS versions
142
  initial_release_df = benchmark_df[benchmark_df["commit_hash"] == releases[-1]]
143
  PERFORMANCE_DEVICES = initial_release_df["device"].unique().tolist()
144
- PERFORMANCE_OS = initial_release_df["os"].apply(get_os_name_and_version).unique().tolist()
 
 
145
  PERFORMANCE_OS.sort()
146
 
147
  # Create initial column dictionaries and update with dataset information
@@ -163,16 +178,18 @@ PERFORMANCE_ALWAYS_HERE_COLS = performance_column_info["ALWAYS_HERE_COLS"]
163
  PERFORMANCE_TOGGLE_COLS = performance_column_info["TOGGLE_COLS"]
164
  PERFORMANCE_SELECTED_COLS = performance_column_info["SELECTED_COLS"]
165
 
 
166
  def get_release_devices(release):
167
  """
168
  Get the list of devices for a specific release.
169
-
170
  :param release: Selected release hash
171
  :return: List of devices available in the release
172
  """
173
  release_df = benchmark_df[benchmark_df["commit_hash"] == release]
174
  return release_df["device"].unique().tolist()
175
 
 
176
  def performance_filter(
177
  df,
178
  columns,
@@ -280,43 +297,41 @@ def performance_filter(
280
  def update_performance_filters(release):
281
  """
282
  Updates the performance filters (devices and OS) based on the selected release.
283
-
284
  :param release: Selected release hash
285
  :return: Tuple containing updated device and OS choices
286
  """
287
  # Filter benchmark data for the selected release
288
  release_df = benchmark_df[benchmark_df["commit_hash"] == release]
289
-
290
  # Get unique devices and OS versions for this release
291
  release_devices = release_df["device"].unique().tolist()
292
  release_os = release_df["os"].apply(get_os_name_and_version).unique().tolist()
293
  release_os.sort()
294
-
295
  return (
296
  gr.update(choices=release_devices, value=release_devices),
297
- gr.update(choices=release_os, value=release_os)
298
  )
299
 
300
 
301
  def update_support_table(release):
302
  """
303
  Updates the support table and its column configuration for a given release.
304
-
305
  :param release: Selected release hash
306
  :return: Tuple containing (updated DataFrame, updated column choices, updated column values)
307
  """
308
  # Load new support data
309
  support_data = pd.read_csv(f"dashboard_data/support_data_{release[:7]}.csv")
310
  support_data.set_index(support_data.columns[0], inplace=True)
311
-
312
  # Process model names
313
- support_data["Model"] = support_data["Model"].apply(
314
- lambda x: x.replace("_", "/")
315
- )
316
  support_data["Model"] = support_data["Model"].apply(
317
  lambda x: make_model_name_clickable_link(x)
318
  )
319
-
320
  # Sort by model name length
321
  support_data = (
322
  support_data.assign(model_len=support_data["Model"].str.len())
@@ -326,14 +341,14 @@ def update_support_table(release):
326
  )
327
  .drop(columns=["model_len"])
328
  )
329
-
330
  # Get new columns (excluding 'Model')
331
  new_columns = support_data.columns.tolist()[1:]
332
-
333
  return (
334
  gr.update(value=support_data, datatype=["html" for _ in support_data.columns]),
335
  gr.update(choices=new_columns, value=new_columns),
336
- gr.update(value=support_data)
337
  )
338
 
339
 
@@ -350,6 +365,7 @@ font = [
350
  "sans-serif",
351
  ]
352
 
 
353
  # Macos 14, 15, 26
354
  # ios 17, 18, 26
355
 
@@ -360,7 +376,9 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
360
  gr.HTML(BANNER_TEXT, elem_classes="markdown-text")
361
  gr.Markdown("### Release")
362
  release_dropdown = gr.Dropdown(
363
- choices=[(f"{release} v{SHA_TO_VERSION[release]}", release) for release in releases],
 
 
364
  label="Select Release",
365
  value=releases[-1] if releases else None,
366
  elem_id="release-dropdown",
@@ -534,7 +552,9 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
534
  with gr.Row():
535
  gr.Markdown(PERFORMANCE_TEXT, elem_classes="markdown-text")
536
  with gr.Row():
537
- initial_df = performance_df[performance_df["commit_hash"] == releases[-1]]
 
 
538
  leaderboard_df = gr.components.Dataframe(
539
  value=initial_df[
540
  PERFORMANCE_ALWAYS_HERE_COLS + performance_shown_columns.value
@@ -611,11 +631,11 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
611
  fn=update_performance_filters,
612
  inputs=[release_dropdown],
613
  outputs=[performance_shown_devices, performance_shown_os],
614
- queue=False
615
  ).then(
616
  fn=performance_filter,
617
  inputs=performance_filter_inputs,
618
- outputs=filter_output
619
  )
620
 
621
  # Timeline Tab
@@ -880,8 +900,31 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
880
 
881
  # Device Support Tab
882
  with gr.TabItem("Device Support", elem_id="device_support", id=6):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883
  # Load device support data from CSV
884
- support_data = pd.read_csv(f"dashboard_data/support_data_{releases[-1][:7]}.csv")
 
 
885
  support_data.set_index(support_data.columns[0], inplace=True)
886
  support_data["Model"] = support_data["Model"].apply(
887
  lambda x: x.replace("_", "/")
@@ -916,7 +959,9 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
916
  with gr.Row():
917
  with gr.Column(scale=9):
918
  support_shown_columns = gr.CheckboxGroup(
919
- choices=support_data.columns.tolist()[1:], # Exclude 'Model' column
 
 
920
  value=support_data.columns.tolist()[1:],
921
  label="Toggle Columns",
922
  elem_id="support-column-select",
@@ -962,7 +1007,7 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
962
  def filter_support_data(df, columns, model_query, exclude_models):
963
  """
964
  Filters the device support data based on specified criteria.
965
-
966
  :param df: The DataFrame to be filtered
967
  :param columns: Columns to include in the output
968
  :param model_query: Query string to filter models
@@ -983,7 +1028,9 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
983
 
984
  # Exclude specified models
985
  if exclude_models:
986
- exclude_list = [re.escape(m.strip()) for m in exclude_models.split(";")]
 
 
987
  filtered_df = filtered_df[
988
  ~filtered_df["Model"].str.contains(
989
  "|".join(exclude_list), case=False, regex=True
@@ -991,7 +1038,9 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
991
  ]
992
 
993
  # Select columns
994
- selected_columns = ["Model"] + [col for col in columns if col in df.columns]
 
 
995
  filtered_df = filtered_df[selected_columns]
996
 
997
  return filtered_df
@@ -999,12 +1048,14 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
999
  def select_all_support_columns(release):
1000
  """
1001
  Returns all current columns from the support shown columns.
1002
-
1003
  :param release: Selected release hash
1004
  :return: List of all available choices
1005
  """
1006
  # Load new support data for the current release
1007
- support_data = pd.read_csv(f"dashboard_data/support_data_{release[:7]}.csv")
 
 
1008
  support_data.set_index(support_data.columns[0], inplace=True)
1009
  # Return all columns except 'Model'
1010
  return [col for col in support_data.columns if col != "Model"]
@@ -1028,23 +1079,265 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
1028
  release_dropdown.change(
1029
  update_support_table,
1030
  inputs=[release_dropdown],
1031
- outputs=[device_support_table, support_shown_columns, hidden_support_df]
 
 
 
 
1032
  ).then(
1033
  filter_support_data,
1034
- inputs=[hidden_support_df, support_shown_columns, filter_support_models, exclude_support_models],
1035
- outputs=device_support_table
 
 
 
 
 
1036
  )
1037
 
1038
  # Also connect the filter inputs to update the table
1039
- for input_elem in [filter_support_models, exclude_support_models, support_shown_columns]:
 
 
 
 
1040
  input_elem.change(
1041
  filter_support_data,
1042
- inputs=[hidden_support_df, support_shown_columns, filter_support_models, exclude_support_models],
1043
- outputs=device_support_table
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1044
  )
1045
 
1046
  # Methodology Tab
1047
- with gr.TabItem("Methodology", elem_id="methodology", id=7):
1048
  gr.Markdown(METHODOLOGY_TEXT, elem_id="methodology-text")
1049
 
1050
  # Citation section
@@ -1058,4 +1351,4 @@ with gr.Blocks(css=css, theme=gr.themes.Base(font=font)) as demo:
1058
  )
1059
 
1060
  # Launch the Gradio interface
1061
- demo.launch(debug=True)
 
28
  )
29
  from utils import (
30
  add_datasets_to_performance_columns,
31
+ calculate_quality_parity,
32
  create_initial_performance_column_dict,
33
  css,
34
  fields,
 
57
  with open("dashboard_data/version.json", "r") as file:
58
  VERSION_DATA = json.load(file)
59
 
60
+ # Load quality data (ground truth WER)
61
+ QUALITY_DATA = read_json_line_by_line("dashboard_data/quality_data.json")
62
+
63
  SHA_TO_VERSION = {
64
+ VERSION_DATA["releases"][i]: VERSION_DATA["versions"][i]
65
  for i in range(len(VERSION_DATA["versions"]))
66
  }
67
 
 
70
  releases = VERSION_DATA["releases"]
71
 
72
  # Process timestamp data
73
+ benchmark_df["timestamp"] = pd.to_datetime(benchmark_df["timestamp"]).dt.tz_localize(
74
+ None
75
+ )
76
 
77
  # Use average_wer directly from performance data
78
  benchmark_df["english_wer"] = benchmark_df["average_wer"]
 
112
  "speed",
113
  "tokens_per_second",
114
  "timestamp",
115
+ "commit_hash",
116
  ]
117
  + dataset_speed_columns
118
  + dataset_toks_columns
119
  ].copy()
120
 
121
+ # Calculate parity (difference between measured WER and ground truth WER)
122
+ performance_df["parity"] = performance_df.apply(
123
+ lambda row: calculate_quality_parity(QUALITY_DATA, row), axis=1
124
+ )
125
+
126
  # Rename columns for clarity
127
  performance_df = performance_df.rename(
128
  lambda x: COL_NAMES[x] if x in COL_NAMES else x, axis="columns"
 
147
 
148
  # Process model names for display
149
  performance_df["model_raw"] = performance_df["Model"].copy()
150
+ performance_df["Model"] = performance_df["Model"].apply(
151
+ lambda x: make_model_name_clickable_link(x)
152
+ )
153
 
154
  # Extract unique devices and OS versions
155
  initial_release_df = benchmark_df[benchmark_df["commit_hash"] == releases[-1]]
156
  PERFORMANCE_DEVICES = initial_release_df["device"].unique().tolist()
157
+ PERFORMANCE_OS = (
158
+ initial_release_df["os"].apply(get_os_name_and_version).unique().tolist()
159
+ )
160
  PERFORMANCE_OS.sort()
161
 
162
  # Create initial column dictionaries and update with dataset information
 
178
  PERFORMANCE_TOGGLE_COLS = performance_column_info["TOGGLE_COLS"]
179
  PERFORMANCE_SELECTED_COLS = performance_column_info["SELECTED_COLS"]
180
 
181
+
182
  def get_release_devices(release):
183
  """
184
  Get the list of devices for a specific release.
185
+
186
  :param release: Selected release hash
187
  :return: List of devices available in the release
188
  """
189
  release_df = benchmark_df[benchmark_df["commit_hash"] == release]
190
  return release_df["device"].unique().tolist()
191
 
192
+
193
  def performance_filter(
194
  df,
195
  columns,
 
297
  def update_performance_filters(release):
298
  """
299
  Updates the performance filters (devices and OS) based on the selected release.
300
+
301
  :param release: Selected release hash
302
  :return: Tuple containing updated device and OS choices
303
  """
304
  # Filter benchmark data for the selected release
305
  release_df = benchmark_df[benchmark_df["commit_hash"] == release]
306
+
307
  # Get unique devices and OS versions for this release
308
  release_devices = release_df["device"].unique().tolist()
309
  release_os = release_df["os"].apply(get_os_name_and_version).unique().tolist()
310
  release_os.sort()
311
+
312
  return (
313
  gr.update(choices=release_devices, value=release_devices),
314
+ gr.update(choices=release_os, value=release_os),
315
  )
316
 
317
 
318
  def update_support_table(release):
319
  """
320
  Updates the support table and its column configuration for a given release.
321
+
322
  :param release: Selected release hash
323
  :return: Tuple containing (updated DataFrame, updated column choices, updated column values)
324
  """
325
  # Load new support data
326
  support_data = pd.read_csv(f"dashboard_data/support_data_{release[:7]}.csv")
327
  support_data.set_index(support_data.columns[0], inplace=True)
328
+
329
  # Process model names
330
+ support_data["Model"] = support_data["Model"].apply(lambda x: x.replace("_", "/"))
 
 
331
  support_data["Model"] = support_data["Model"].apply(
332
  lambda x: make_model_name_clickable_link(x)
333
  )
334
+
335
  # Sort by model name length
336
  support_data = (
337
  support_data.assign(model_len=support_data["Model"].str.len())
 
341
  )
342
  .drop(columns=["model_len"])
343
  )
344
+
345
  # Get new columns (excluding 'Model')
346
  new_columns = support_data.columns.tolist()[1:]
347
+
348
  return (
349
  gr.update(value=support_data, datatype=["html" for _ in support_data.columns]),
350
  gr.update(choices=new_columns, value=new_columns),
351
+ gr.update(value=support_data),
352
  )
353
 
354
 
 
365
  "sans-serif",
366
  ]
367
 
368
+
369
  # Macos 14, 15, 26
370
  # ios 17, 18, 26
371
 
 
376
  gr.HTML(BANNER_TEXT, elem_classes="markdown-text")
377
  gr.Markdown("### Release")
378
  release_dropdown = gr.Dropdown(
379
+ choices=[
380
+ (f"{release} v{SHA_TO_VERSION[release]}", release) for release in releases
381
+ ],
382
  label="Select Release",
383
  value=releases[-1] if releases else None,
384
  elem_id="release-dropdown",
 
552
  with gr.Row():
553
  gr.Markdown(PERFORMANCE_TEXT, elem_classes="markdown-text")
554
  with gr.Row():
555
+ initial_df = performance_df[
556
+ performance_df["commit_hash"] == releases[-1]
557
+ ]
558
  leaderboard_df = gr.components.Dataframe(
559
  value=initial_df[
560
  PERFORMANCE_ALWAYS_HERE_COLS + performance_shown_columns.value
 
631
  fn=update_performance_filters,
632
  inputs=[release_dropdown],
633
  outputs=[performance_shown_devices, performance_shown_os],
634
+ queue=False,
635
  ).then(
636
  fn=performance_filter,
637
  inputs=performance_filter_inputs,
638
+ outputs=filter_output,
639
  )
640
 
641
  # Timeline Tab
 
900
 
901
  # Device Support Tab
902
  with gr.TabItem("Device Support", elem_id="device_support", id=6):
903
+ # Add clear description of what Device Support means
904
+ gr.Markdown(
905
+ """
906
+ ## Device Support
907
+
908
+ This tab shows **test results for SKUs that we actually attempted to test**. It tells you whether tests passed, failed, or couldn't be completed for the devices we tried to run tests on.
909
+
910
+ ### What You'll See Here:
911
+ - **✅ Supported**: Tests passed successfully on this device
912
+ - **⚠️ Failed**: Tests were attempted but failed (click link for details)
913
+ - **? Not Tested**: We attempted to test but couldn't get results
914
+ - **Not Supported**: Hardware incompatible (per [WhisperKit config](https://huggingface.co/argmaxinc/whisperkit-coreml/blob/main/config.json))
915
+
916
+ ### Please Note:
917
+ **This tab only shows devices we attempted to test** - it doesn't show the full universe of available devices.
918
+
919
+ **📝 For comprehensive coverage analysis**, see the **Test Coverage** tab which shows ALL available SKUs.
920
+ """,
921
+ elem_classes="markdown-text"
922
+ )
923
+
924
  # Load device support data from CSV
925
+ support_data = pd.read_csv(
926
+ f"dashboard_data/support_data_{releases[-1][:7]}.csv"
927
+ )
928
  support_data.set_index(support_data.columns[0], inplace=True)
929
  support_data["Model"] = support_data["Model"].apply(
930
  lambda x: x.replace("_", "/")
 
959
  with gr.Row():
960
  with gr.Column(scale=9):
961
  support_shown_columns = gr.CheckboxGroup(
962
+ choices=support_data.columns.tolist()[
963
+ 1:
964
+ ], # Exclude 'Model' column
965
  value=support_data.columns.tolist()[1:],
966
  label="Toggle Columns",
967
  elem_id="support-column-select",
 
1007
  def filter_support_data(df, columns, model_query, exclude_models):
1008
  """
1009
  Filters the device support data based on specified criteria.
1010
+
1011
  :param df: The DataFrame to be filtered
1012
  :param columns: Columns to include in the output
1013
  :param model_query: Query string to filter models
 
1028
 
1029
  # Exclude specified models
1030
  if exclude_models:
1031
+ exclude_list = [
1032
+ re.escape(m.strip()) for m in exclude_models.split(";")
1033
+ ]
1034
  filtered_df = filtered_df[
1035
  ~filtered_df["Model"].str.contains(
1036
  "|".join(exclude_list), case=False, regex=True
 
1038
  ]
1039
 
1040
  # Select columns
1041
+ selected_columns = ["Model"] + [
1042
+ col for col in columns if col in df.columns
1043
+ ]
1044
  filtered_df = filtered_df[selected_columns]
1045
 
1046
  return filtered_df
 
1048
  def select_all_support_columns(release):
1049
  """
1050
  Returns all current columns from the support shown columns.
1051
+
1052
  :param release: Selected release hash
1053
  :return: List of all available choices
1054
  """
1055
  # Load new support data for the current release
1056
+ support_data = pd.read_csv(
1057
+ f"dashboard_data/support_data_{release[:7]}.csv"
1058
+ )
1059
  support_data.set_index(support_data.columns[0], inplace=True)
1060
  # Return all columns except 'Model'
1061
  return [col for col in support_data.columns if col != "Model"]
 
1079
  release_dropdown.change(
1080
  update_support_table,
1081
  inputs=[release_dropdown],
1082
+ outputs=[
1083
+ device_support_table,
1084
+ support_shown_columns,
1085
+ hidden_support_df,
1086
+ ],
1087
  ).then(
1088
  filter_support_data,
1089
+ inputs=[
1090
+ hidden_support_df,
1091
+ support_shown_columns,
1092
+ filter_support_models,
1093
+ exclude_support_models,
1094
+ ],
1095
+ outputs=device_support_table,
1096
  )
1097
 
1098
  # Also connect the filter inputs to update the table
1099
+ for input_elem in [
1100
+ filter_support_models,
1101
+ exclude_support_models,
1102
+ support_shown_columns,
1103
+ ]:
1104
  input_elem.change(
1105
  filter_support_data,
1106
+ inputs=[
1107
+ hidden_support_df,
1108
+ support_shown_columns,
1109
+ filter_support_models,
1110
+ exclude_support_models,
1111
+ ],
1112
+ outputs=device_support_table,
1113
+ )
1114
+
1115
+ # Test Coverage Tab
1116
+ with gr.TabItem("Test Coverage", elem_id="test_coverage", id=7):
1117
+ # Add clear description of what Test Coverage means
1118
+ gr.Markdown(
1119
+ """
1120
+ ## Test Coverage
1121
+
1122
+ This tab shows **ALL available SKUs** and our testing coverage across the entire device ecosystem. Uses chip-based expansion where testing one device covers all devices with the same chip.
1123
+ """,
1124
+ elem_classes="markdown-text"
1125
+ )
1126
+
1127
+ def load_coverage_data(release):
1128
+ """Load test coverage data for a specific release."""
1129
+ try:
1130
+ with open(f"dashboard_data/test_coverage_{release}.json", "r") as f:
1131
+ return json.load(f)
1132
+ except FileNotFoundError:
1133
+ return {
1134
+ "commit_hash": release,
1135
+ "total_devices": 0,
1136
+ "tested_devices": 0,
1137
+ "skipped_devices": 0,
1138
+ "coverage_percentage": 0.0,
1139
+ "tested_device_list": [],
1140
+ "skipped_device_list": [],
1141
+ "tested_os_versions": [],
1142
+ "has_target_os_coverage": False,
1143
+ "covered_target_versions": [],
1144
+ "missing_target_versions": [],
1145
+ }
1146
+
1147
+ def format_coverage_devices(device_list):
1148
+ """Convert device list to DataFrame format."""
1149
+ if not device_list:
1150
+ return pd.DataFrame(columns=["Device"])
1151
+
1152
+ df = pd.DataFrame({"Device": device_list})
1153
+ return df.sort_values(["Device"])
1154
+
1155
+ def update_coverage_data(release):
1156
+ """Update coverage data when release changes."""
1157
+ coverage_data = load_coverage_data(release)
1158
+
1159
+ # Format tested and skipped devices
1160
+ tested_df = format_coverage_devices(coverage_data["tested_device_list"])
1161
+ skipped_df = format_coverage_devices(
1162
+ coverage_data["skipped_device_list"]
1163
+ )
1164
+
1165
+ # Check target OS coverage
1166
+ target_os_status = ""
1167
+ covered_versions = coverage_data.get("covered_target_versions", [])
1168
+ missing_versions = coverage_data.get("missing_target_versions", [])
1169
+
1170
+ if covered_versions or missing_versions:
1171
+ target_os_status = "\n- **Target OS Coverage**:\n"
1172
+ if covered_versions:
1173
+ unique_versions = sorted(set(covered_versions))
1174
+ target_os_status += f" - ✅ **Tested**: {', '.join(unique_versions)}\n"
1175
+ if missing_versions:
1176
+ target_os_status += f" - ❌ **Missing**: {', '.join(missing_versions)}"
1177
+
1178
+ # Create coverage summary
1179
+ coverage_summary = f"""## Test Coverage Summary for Release {release} (v{SHA_TO_VERSION.get(release, 'Unknown')})
1180
+
1181
+ - **Total Devices**: {coverage_data['total_devices']}
1182
+ - **Tested Devices**: {coverage_data['tested_devices']}
1183
+ - **Skipped Devices**: {coverage_data['skipped_devices']}
1184
+ - **Coverage Percentage**: {coverage_data['coverage_percentage']:.1f}%
1185
+ {target_os_status}"""
1186
+
1187
+ return (
1188
+ gr.update(value=coverage_summary),
1189
+ gr.update(value=tested_df),
1190
+ gr.update(value=skipped_df),
1191
+ tested_df,
1192
+ skipped_df,
1193
+ )
1194
+
1195
+ def filter_coverage_devices(df, device_query, exclude_devices):
1196
+ """Filter coverage devices based on device queries."""
1197
+ if df is None or df.empty:
1198
+ return df
1199
+
1200
+ filtered_df = df.copy()
1201
+
1202
+ # Filter devices based on query
1203
+ if device_query:
1204
+ filtered_df = filtered_df[
1205
+ filtered_df["Device"].str.contains(
1206
+ "|".join(q.strip() for q in device_query.split(";")),
1207
+ case=False,
1208
+ regex=True,
1209
+ )
1210
+ ]
1211
+
1212
+ # Exclude specified devices
1213
+ if exclude_devices:
1214
+ exclude_list = [
1215
+ re.escape(d.strip()) for d in exclude_devices.split(";")
1216
+ ]
1217
+ filtered_df = filtered_df[
1218
+ ~filtered_df["Device"].str.contains(
1219
+ "|".join(exclude_list), case=False, regex=True
1220
+ )
1221
+ ]
1222
+
1223
+ return filtered_df
1224
+
1225
+ # Load initial coverage data
1226
+ initial_coverage = load_coverage_data(releases[-1])
1227
+ initial_tested_df = format_coverage_devices(
1228
+ initial_coverage["tested_device_list"]
1229
+ )
1230
+ initial_skipped_df = format_coverage_devices(
1231
+ initial_coverage["skipped_device_list"]
1232
+ )
1233
+
1234
+ # Generate initial target OS status
1235
+ initial_target_os_status = ""
1236
+ covered_versions = initial_coverage.get("covered_target_versions", [])
1237
+ missing_versions = initial_coverage.get("missing_target_versions", [])
1238
+
1239
+ if covered_versions or missing_versions:
1240
+ initial_target_os_status = "\n- **Target OS Coverage**:\n"
1241
+ if covered_versions:
1242
+ unique_versions = sorted(set(covered_versions))
1243
+ initial_target_os_status += f" - ✅ **Tested**: {', '.join(unique_versions)}\n"
1244
+ if missing_versions:
1245
+ initial_target_os_status += f" - ❌ **Missing**: {', '.join(missing_versions)}"
1246
+
1247
+ # Create initial coverage summary content
1248
+ initial_summary_content = f"""## Test Coverage Summary for Release {releases[-1]} (v{SHA_TO_VERSION.get(releases[-1], 'Unknown')})
1249
+
1250
+ - **Total Devices**: {initial_coverage['total_devices']}
1251
+ - **Tested Devices**: {initial_coverage['tested_devices']}
1252
+ - **Skipped Devices**: {initial_coverage['skipped_devices']}
1253
+ - **Coverage Percentage**: {initial_coverage['coverage_percentage']:.1f}%
1254
+ {initial_target_os_status}"""
1255
+
1256
+ # Coverage summary
1257
+ coverage_summary_text = gr.Markdown(
1258
+ value=initial_summary_content,
1259
+ elem_classes="markdown-text"
1260
+ )
1261
+
1262
+ with gr.Row():
1263
+ with gr.Column(scale=1):
1264
+ with gr.Row():
1265
+ with gr.Column(scale=6):
1266
+ filter_coverage_devices_input = gr.Textbox(
1267
+ placeholder="🔍 Filter Device (separate multiple queries with ';')",
1268
+ label="Filter Devices",
1269
+ )
1270
+ with gr.Column(scale=4):
1271
+ exclude_coverage_devices_input = gr.Textbox(
1272
+ placeholder="🔍 Exclude Device",
1273
+ label="Exclude Device",
1274
+ )
1275
+
1276
+ # Create tabs for tested vs skipped devices
1277
+ with gr.Tabs():
1278
+ with gr.TabItem("Tested Devices", id=0):
1279
+ tested_devices_table = gr.Dataframe(
1280
+ value=initial_tested_df,
1281
+ headers=["Device"],
1282
+ datatype=["str"],
1283
+ elem_id="tested-devices-table",
1284
+ elem_classes="large-table",
1285
+ interactive=False,
1286
+ )
1287
+
1288
+ with gr.TabItem("Skipped Devices", id=1):
1289
+ skipped_devices_table = gr.Dataframe(
1290
+ value=initial_skipped_df,
1291
+ headers=["Device"],
1292
+ datatype=["str"],
1293
+ elem_id="skipped-devices-table",
1294
+ elem_classes="large-table",
1295
+ interactive=False,
1296
+ )
1297
+
1298
+ # Hidden dataframes for filtering
1299
+ hidden_tested_df = gr.Dataframe(value=initial_tested_df, visible=False)
1300
+ hidden_skipped_df = gr.Dataframe(value=initial_skipped_df, visible=False)
1301
+
1302
+ # Connect release dropdown to coverage data update
1303
+ release_dropdown.change(
1304
+ update_coverage_data,
1305
+ inputs=[release_dropdown],
1306
+ outputs=[
1307
+ coverage_summary_text,
1308
+ tested_devices_table,
1309
+ skipped_devices_table,
1310
+ hidden_tested_df,
1311
+ hidden_skipped_df,
1312
+ ],
1313
+ queue=False,
1314
+ )
1315
+
1316
+ # Connect filter inputs to update both tables
1317
+ for input_elem in [
1318
+ filter_coverage_devices_input,
1319
+ exclude_coverage_devices_input,
1320
+ ]:
1321
+ input_elem.change(
1322
+ lambda tested_df, skipped_df, device_query, exclude_devices: (
1323
+ filter_coverage_devices(
1324
+ tested_df, device_query, exclude_devices
1325
+ ),
1326
+ filter_coverage_devices(
1327
+ skipped_df, device_query, exclude_devices
1328
+ ),
1329
+ ),
1330
+ inputs=[
1331
+ hidden_tested_df,
1332
+ hidden_skipped_df,
1333
+ filter_coverage_devices_input,
1334
+ exclude_coverage_devices_input,
1335
+ ],
1336
+ outputs=[tested_devices_table, skipped_devices_table],
1337
  )
1338
 
1339
  # Methodology Tab
1340
+ with gr.TabItem("Methodology", elem_id="methodology", id=8):
1341
  gr.Markdown(METHODOLOGY_TEXT, elem_id="methodology-text")
1342
 
1343
  # Citation section
 
1351
  )
1352
 
1353
  # Launch the Gradio interface
1354
+ demo.launch(debug=True, share=True)
performance_generate.py CHANGED
@@ -10,10 +10,12 @@ from statistics import mean
10
 
11
  import pandas as pd
12
  import requests
 
 
13
 
14
  from constants import BASE_WHISPERKIT_BENCHMARK_URL
15
  from text_normalizer import text_normalizer
16
- from utils import compute_average_wer, download_dataset
17
 
18
 
19
  def fetch_evaluation_data(url):
@@ -97,7 +99,7 @@ def process_benchmark_file(file_path, dataset_dfs, results, releases):
97
 
98
  if len(test_results) == 0:
99
  return
100
-
101
  commit_hash_timestamp = file_path.split("/")[-2]
102
  commit_timestamp, commit_hash = commit_hash_timestamp.split("_")
103
 
@@ -182,7 +184,7 @@ def process_summary_file(file_path, results, releases):
182
  """
183
  with open(file_path, "r") as file:
184
  summary_data = json.load(file)
185
-
186
  if summary_data["commitHash"] not in releases:
187
  return
188
 
@@ -192,13 +194,15 @@ def process_summary_file(file_path, results, releases):
192
  commit_timestamp = summary_data["commitTimestamp"]
193
  test_file_name = file_path.split("/")[-1]
194
  test_timestamp = test_file_name.split("_")[-1].replace(".json", "")
195
-
196
  key = (device, os, commit_hash)
197
  if key in results:
198
  existing_commit_timestamp = results[key]["commitTimestamp"]
199
  existing_test_timestamp = results[key]["testTimestamp"]
200
 
201
- existing_commit_dt = datetime.strptime(existing_commit_timestamp, "%Y-%m-%dT%H%M%S")
 
 
202
  new_commit_dt = datetime.strptime(commit_timestamp, "%Y-%m-%dT%H%M%S")
203
  existing_test_dt = datetime.strptime(existing_test_timestamp, "%Y-%m-%dT%H%M%S")
204
  new_test_dt = datetime.strptime(test_timestamp, "%Y-%m-%dT%H%M%S")
@@ -325,7 +329,7 @@ def calculate_and_save_support_results(
325
  results_by_commit[commit_hash] = {
326
  "data": {},
327
  "devices": set(),
328
- "timestamp": data["commitTimestamp"]
329
  }
330
  results_by_commit[commit_hash]["data"][key] = data
331
  results_by_commit[commit_hash]["devices"].add(device)
@@ -334,7 +338,7 @@ def calculate_and_save_support_results(
334
  for commit_hash, commit_data in results_by_commit.items():
335
  commit_devices = sorted(commit_data["devices"])
336
  df = pd.DataFrame(index=all_models, columns=["Model"] + commit_devices)
337
-
338
  for model in all_models:
339
  row = {"Model": model}
340
  for device in commit_devices:
@@ -375,24 +379,27 @@ def calculate_and_save_support_results(
375
 
376
  # Mark unsupported combinations for this commit
377
  commit_not_supported = [
378
- (model, device, os)
379
- for model, device, os in not_supported
380
- if any(key[2] == commit_hash for key in support_results if key not in ["modelsTested", "devices"] and model == key[0])
 
 
 
 
381
  ]
382
  remove_unsupported_cells(df, commit_not_supported)
383
 
384
  # Format column headers
385
  cols = df.columns.tolist()
386
  cols = ["Model"] + [
387
- f"""{get_device_name(col).replace("_", " ")} ({col})""" for col in cols if col != "Model"
 
 
388
  ]
389
  df.columns = cols
390
 
391
  # Save to commit-specific file
392
- output_path = support_output_path.replace(
393
- ".csv",
394
- f"_{commit_hash[:7]}.csv"
395
- )
396
  df.to_csv(output_path, index=True)
397
 
398
 
@@ -426,6 +433,462 @@ def remove_unsupported_cells(df, not_supported):
426
  df.at[model, device] = "Not Supported"
427
 
428
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
429
  def main():
430
  """
431
  Main function to orchestrate the performance data generation process.
@@ -435,6 +898,7 @@ def main():
435
  2. Fetches evaluation data for various datasets.
436
  3. Processes benchmark files and summary files.
437
  4. Calculates and saves performance and support results.
 
438
  """
439
  source_xcresult_repo = "argmaxinc/whisperkit-evals-dataset"
440
  source_xcresult_subfolder = "benchmark_data/"
@@ -498,8 +962,10 @@ def main():
498
  elif "summary" in filename:
499
  process_summary_file(file_path, support_results, releases)
500
  else:
501
- process_benchmark_file(file_path, dataset_dfs, performance_results, releases)
502
-
 
 
503
  not_supported = calculate_and_save_performance_results(
504
  performance_results, "dashboard_data/performance_data.json"
505
  )
@@ -507,6 +973,9 @@ def main():
507
  support_results, not_supported, "dashboard_data/support_data.csv"
508
  )
509
 
 
 
 
510
 
511
  if __name__ == "__main__":
512
  main()
 
10
 
11
  import pandas as pd
12
  import requests
13
+ from dotenv import load_dotenv
14
+ from huggingface_hub import login
15
 
16
  from constants import BASE_WHISPERKIT_BENCHMARK_URL
17
  from text_normalizer import text_normalizer
18
+ from utils import compute_average_wer, download_dataset, download_json_from_github
19
 
20
 
21
  def fetch_evaluation_data(url):
 
99
 
100
  if len(test_results) == 0:
101
  return
102
+
103
  commit_hash_timestamp = file_path.split("/")[-2]
104
  commit_timestamp, commit_hash = commit_hash_timestamp.split("_")
105
 
 
184
  """
185
  with open(file_path, "r") as file:
186
  summary_data = json.load(file)
187
+
188
  if summary_data["commitHash"] not in releases:
189
  return
190
 
 
194
  commit_timestamp = summary_data["commitTimestamp"]
195
  test_file_name = file_path.split("/")[-1]
196
  test_timestamp = test_file_name.split("_")[-1].replace(".json", "")
197
+
198
  key = (device, os, commit_hash)
199
  if key in results:
200
  existing_commit_timestamp = results[key]["commitTimestamp"]
201
  existing_test_timestamp = results[key]["testTimestamp"]
202
 
203
+ existing_commit_dt = datetime.strptime(
204
+ existing_commit_timestamp, "%Y-%m-%dT%H%M%S"
205
+ )
206
  new_commit_dt = datetime.strptime(commit_timestamp, "%Y-%m-%dT%H%M%S")
207
  existing_test_dt = datetime.strptime(existing_test_timestamp, "%Y-%m-%dT%H%M%S")
208
  new_test_dt = datetime.strptime(test_timestamp, "%Y-%m-%dT%H%M%S")
 
329
  results_by_commit[commit_hash] = {
330
  "data": {},
331
  "devices": set(),
332
+ "timestamp": data["commitTimestamp"],
333
  }
334
  results_by_commit[commit_hash]["data"][key] = data
335
  results_by_commit[commit_hash]["devices"].add(device)
 
338
  for commit_hash, commit_data in results_by_commit.items():
339
  commit_devices = sorted(commit_data["devices"])
340
  df = pd.DataFrame(index=all_models, columns=["Model"] + commit_devices)
341
+
342
  for model in all_models:
343
  row = {"Model": model}
344
  for device in commit_devices:
 
379
 
380
  # Mark unsupported combinations for this commit
381
  commit_not_supported = [
382
+ (model, device, os)
383
+ for model, device, os in not_supported
384
+ if any(
385
+ key[2] == commit_hash
386
+ for key in support_results
387
+ if key not in ["modelsTested", "devices"] and model == key[0]
388
+ )
389
  ]
390
  remove_unsupported_cells(df, commit_not_supported)
391
 
392
  # Format column headers
393
  cols = df.columns.tolist()
394
  cols = ["Model"] + [
395
+ f"""{get_device_name(col).replace("_", " ")} ({col})"""
396
+ for col in cols
397
+ if col != "Model"
398
  ]
399
  df.columns = cols
400
 
401
  # Save to commit-specific file
402
+ output_path = support_output_path.replace(".csv", f"_{commit_hash[:7]}.csv")
 
 
 
403
  df.to_csv(output_path, index=True)
404
 
405
 
 
433
  df.at[model, device] = "Not Supported"
434
 
435
 
436
+ def download_device_json_safe(file_path):
437
+ """
438
+ Safely downloads a device JSON file from GitHub, returning None if it doesn't exist.
439
+
440
+ :param file_path: Path to the JSON file within the repository
441
+ :returns: The JSON data as a dictionary, or None if the file doesn't exist
442
+ """
443
+ try:
444
+ return download_json_from_github(file_path=file_path)
445
+ except SystemExit:
446
+ # File doesn't exist or other error occurred
447
+ return None
448
+
449
+
450
+ def load_device_json_local(file_path):
451
+ """
452
+ Safely loads a local device JSON file, returning None if it doesn't exist.
453
+
454
+ :param file_path: Local path to the JSON file
455
+ :returns: The JSON data as a dictionary, or None if the file doesn't exist
456
+ """
457
+ try:
458
+ with open(file_path, "r") as f:
459
+ return json.load(f)
460
+ except (FileNotFoundError, json.JSONDecodeError):
461
+ return None
462
+
463
+
464
+ def build_chip_mapping():
465
+ """
466
+ Builds a mapping from device SKUs to their chip types.
467
+
468
+ :returns: Dictionary where keys are device SKUs and values are chip types
469
+ """
470
+ sku_to_chip = {}
471
+
472
+ # Load iPad devices
473
+ ipad_data = load_device_json_local("dashboard_data/iPad.json")
474
+ if ipad_data and "total_menu" in ipad_data:
475
+ for device_info in ipad_data["total_menu"].values():
476
+ if "sku" in device_info and "chip" in device_info:
477
+ # iPad has sku as an array
478
+ skus = device_info["sku"] if isinstance(device_info["sku"], list) else [device_info["sku"]]
479
+ for sku in skus:
480
+ sku_to_chip[sku] = device_info["chip"]
481
+
482
+ # Load iPhone devices
483
+ iphone_data = load_device_json_local("dashboard_data/iPhone.json")
484
+ if iphone_data and "total_menu" in iphone_data:
485
+ for device_info in iphone_data["total_menu"].values():
486
+ if "sku" in device_info and "chip" in device_info:
487
+ # iPhone has sku as a single string
488
+ sku_to_chip[device_info["sku"]] = device_info["chip"]
489
+
490
+ # Load Mac devices
491
+ mac_data = load_device_json_local("dashboard_data/Mac.json")
492
+ if mac_data and "total_menu" in mac_data:
493
+ for device_info in mac_data["total_menu"].values():
494
+ if "sku" in device_info and "chip" in device_info:
495
+ # Mac has sku as a single string
496
+ sku_to_chip[device_info["sku"]] = device_info["chip"]
497
+
498
+ return sku_to_chip
499
+
500
+
501
+ def get_platform_from_sku(sku):
502
+ """
503
+ Determines the platform (iPad, iPhone, Mac) from a device SKU.
504
+
505
+ :param sku: Device SKU string
506
+ :returns: Platform string ('iPad', 'iPhone', 'Mac') or 'Unknown'
507
+ """
508
+ if sku.startswith("iPad"):
509
+ return "iPad"
510
+ elif sku.startswith("iPhone"):
511
+ return "iPhone"
512
+ elif sku.startswith("Mac") or sku.startswith("iMac") or sku.startswith("MacBook"):
513
+ return "Mac"
514
+ else:
515
+ return "Unknown"
516
+
517
+
518
+ def normalize_chip_name(chip):
519
+ """
520
+ Normalizes chip names for consistent grouping.
521
+
522
+ :param chip: Raw chip name from device JSON
523
+ :returns: Normalized chip name
524
+ """
525
+ # Handle variations like "A18 Pro" -> "A18", "M4 Pro" -> "M4", etc.
526
+ # But keep distinct generations separate
527
+ chip = chip.strip()
528
+
529
+ # For A-series chips, keep Pro variants separate as they have different capabilities
530
+ if chip.startswith("A") and "Pro" in chip:
531
+ return chip # Keep A17 Pro separate from A17
532
+
533
+ # For M-series chips, group Pro/Max/Ultra variants together as they're same generation
534
+ if chip.startswith("M"):
535
+ # Extract just the M number (M1, M2, M3, M4)
536
+ parts = chip.split()
537
+ if len(parts) > 0:
538
+ return parts[0] # Return just "M1", "M2", etc.
539
+
540
+ return chip
541
+
542
+
543
+ def build_sku_group_mapping():
544
+ """
545
+ Builds a mapping from individual SKUs to all SKUs that share the same chip on the same platform.
546
+ This implements chip-based coverage where testing one device with a specific chip
547
+ provides coverage for all devices with that chip on the same platform.
548
+
549
+ :returns: Dictionary where keys are individual SKUs and values are sets of all SKUs in that chip group
550
+ """
551
+ sku_to_chip = build_chip_mapping()
552
+ sku_to_group = {}
553
+
554
+ # Group SKUs by platform and normalized chip
555
+ platform_chip_groups = {}
556
+
557
+ for sku, chip in sku_to_chip.items():
558
+ platform = get_platform_from_sku(sku)
559
+ normalized_chip = normalize_chip_name(chip)
560
+
561
+ key = (platform, normalized_chip)
562
+ if key not in platform_chip_groups:
563
+ platform_chip_groups[key] = set()
564
+ platform_chip_groups[key].add(sku)
565
+
566
+ # Create reverse mapping: each SKU maps to all SKUs in its chip group
567
+ for sku, chip in sku_to_chip.items():
568
+ platform = get_platform_from_sku(sku)
569
+ normalized_chip = normalize_chip_name(chip)
570
+ key = (platform, normalized_chip)
571
+ sku_to_group[sku] = platform_chip_groups[key]
572
+
573
+ return sku_to_group
574
+
575
+
576
+ def expand_tested_devices(tested_devices, sku_mapping):
577
+ """
578
+ Expands tested devices to include all SKUs in the same group.
579
+
580
+ :param tested_devices: Set of device SKUs that were actually tested
581
+ :param sku_mapping: Dictionary mapping individual SKUs to their complete groups
582
+ :returns: Expanded set of devices including all SKUs in the same groups
583
+ """
584
+ expanded_devices = set(tested_devices)
585
+
586
+ for device in tested_devices:
587
+ if device in sku_mapping:
588
+ # Add all SKUs from the same group
589
+ expanded_devices.update(sku_mapping[device])
590
+
591
+ return expanded_devices
592
+
593
+
594
+ def get_test_iphones():
595
+ """
596
+ Gets iPhone SKU identifiers from the local iPhone.json file.
597
+ """
598
+ iphone_data = load_device_json_local("dashboard_data/iPhone.json")
599
+ if iphone_data and "total_menu" in iphone_data:
600
+ return set([device_info["sku"] for device_info in iphone_data["total_menu"].values() if "sku" in device_info])
601
+ return set()
602
+
603
+
604
+ def get_test_macs():
605
+ """
606
+ Gets Mac SKU identifiers from the local Mac.json file.
607
+ """
608
+ mac_data = load_device_json_local("dashboard_data/Mac.json")
609
+ if mac_data and "total_menu" in mac_data:
610
+ return set([device_info["sku"] for device_info in mac_data["total_menu"].values() if "sku" in device_info])
611
+ return set()
612
+
613
+
614
+ def get_all_supported_devices():
615
+ """
616
+ Gets all supported device identifiers from the config file.
617
+ Returns a set of device identifiers.
618
+ """
619
+ with open("dashboard_data/config.json", "r") as f:
620
+ config = json.load(f)
621
+
622
+ devices = set()
623
+ for device_group in config["device_support"]:
624
+ identifiers = device_group["identifiers"]
625
+ devices.update(identifiers)
626
+
627
+ return devices
628
+
629
+
630
+ def get_tested_devices_for_commit(performance_results, support_results, commit_hash):
631
+ """
632
+ Gets all device identifiers that were actually tested for a specific commit,
633
+ including all SKUs in the same chip groups as tested devices.
634
+ Uses chip-based coverage logic where testing one device with a specific chip
635
+ provides coverage for all devices with that chip on the same platform.
636
+ Returns a set of device identifiers.
637
+ """
638
+ tested_devices = set()
639
+
640
+ # From performance results (benchmark files)
641
+ for key, result in performance_results.items():
642
+ if len(key) >= 4 and result.get("commit_hash") == commit_hash:
643
+ model, device, _, _ = key
644
+ tested_devices.add(device)
645
+
646
+ # From support results (summary files)
647
+ for key, result in support_results.items():
648
+ if key in ["modelsTested", "devices"]:
649
+ continue
650
+ if len(key) >= 3 and result.get("commitHash") == commit_hash:
651
+ device, _, _ = key
652
+ tested_devices.add(device)
653
+
654
+ # Expand to include all SKUs in the same chip groups for all platforms
655
+ sku_mapping = build_sku_group_mapping()
656
+ expanded_devices = expand_tested_devices(tested_devices, sku_mapping)
657
+
658
+ return expanded_devices
659
+
660
+
661
+ def get_tested_os_versions_for_commit(
662
+ performance_results, support_results, commit_hash
663
+ ):
664
+ """
665
+ Gets all OS versions that were actually tested for a specific commit.
666
+ Returns a set of OS version strings like 'iOS_17.2', 'macOS_14.5', etc.
667
+ """
668
+ tested_os_versions = set()
669
+
670
+ # From performance results (benchmark files)
671
+ for key, result in performance_results.items():
672
+ if len(key) >= 4 and result.get("commit_hash") == commit_hash:
673
+ model, device, os_info, _ = key
674
+ tested_os_versions.add(os_info)
675
+
676
+ # From support results (summary files)
677
+ for key, result in support_results.items():
678
+ if key in ["modelsTested", "devices"]:
679
+ continue
680
+ if len(key) >= 3 and result.get("commitHash") == commit_hash:
681
+ device, os, _ = key
682
+ # Convert format like "iOS 17.2" to "iOS_17.2" for consistency
683
+ os_normalized = os.replace(" ", "_")
684
+ tested_os_versions.add(os_normalized)
685
+
686
+ return tested_os_versions
687
+
688
+
689
+ def check_target_os_coverage(tested_os_versions):
690
+ """
691
+ Check if the tested OS versions include ALL of the target OS versions:
692
+ - macOS 14, 15, 26
693
+ - iOS 17, 18, 26 (noting that iOS and iPadOS are the same under the hood)
694
+
695
+ Returns (is_fully_covered: bool, covered_versions: list, missing_versions: list)
696
+ """
697
+ target_macos_versions = {14, 15, 26}
698
+ target_ios_versions = {17, 18, 26}
699
+
700
+ covered_macos = set()
701
+ covered_ios = set()
702
+
703
+ for os_version in tested_os_versions:
704
+ # Parse OS version string like "iOS_17.2" or "macOS_14.5"
705
+ if "_" in os_version:
706
+ os_type, version_str = os_version.split("_", 1)
707
+ try:
708
+ # Extract major version number
709
+ major_version = int(version_str.split(".")[0])
710
+
711
+ if os_type == "macOS" and major_version in target_macos_versions:
712
+ covered_macos.add(major_version)
713
+ elif (
714
+ os_type in ["iOS", "iPadOS"]
715
+ and major_version in target_ios_versions
716
+ ):
717
+ covered_ios.add(major_version)
718
+ except (ValueError, IndexError):
719
+ # Skip if we can't parse the version
720
+ continue
721
+
722
+ # Check what's missing
723
+ missing_macos = target_macos_versions - covered_macos
724
+ missing_ios = target_ios_versions - covered_ios
725
+
726
+ # Format covered and missing versions
727
+ covered_versions = []
728
+ covered_versions.extend([f"macOS {v}" for v in sorted(covered_macos)])
729
+ covered_versions.extend([f"iOS {v}" for v in sorted(covered_ios)])
730
+
731
+ missing_versions = []
732
+ missing_versions.extend([f"macOS {v}" for v in sorted(missing_macos)])
733
+ missing_versions.extend([f"iOS {v}" for v in sorted(missing_ios)])
734
+
735
+ # Only fully covered if no missing versions
736
+ is_fully_covered = len(missing_versions) == 0
737
+
738
+ return is_fully_covered, covered_versions, missing_versions
739
+
740
+
741
+ def check_chip_coverage(tested_devices):
742
+ """
743
+ Check if the tested devices provide complete chip coverage for each platform.
744
+
745
+ Target coverage:
746
+ - iPad: A14, A15, A16, A17 Pro, M1, M2, M3, M4
747
+ - iPhone: A14, A15, A16, A17 Pro, A18, A18 Pro
748
+ - Mac: M1, M2, M3, M4
749
+
750
+ :param tested_devices: Set of device SKUs that were tested
751
+ :returns: (is_fully_covered: bool, platform_coverage: dict, missing_chips: dict)
752
+ """
753
+ # Define target chips for each platform
754
+ target_chips = {
755
+ "iPad": {"A14", "A15", "A16", "A17 Pro", "M1", "M2", "M3", "M4"},
756
+ "iPhone": {"A14", "A15", "A16", "A17 Pro", "A18", "A18 Pro"},
757
+ "Mac": {"M1", "M2", "M3", "M4"}
758
+ }
759
+
760
+ # Build mapping from SKUs to chips
761
+ sku_to_chip = build_chip_mapping()
762
+
763
+ # Track which chips were tested for each platform
764
+ tested_chips = {
765
+ "iPad": set(),
766
+ "iPhone": set(),
767
+ "Mac": set()
768
+ }
769
+
770
+ for device_sku in tested_devices:
771
+ if device_sku in sku_to_chip:
772
+ platform = get_platform_from_sku(device_sku)
773
+ chip = normalize_chip_name(sku_to_chip[device_sku])
774
+
775
+ if platform in tested_chips:
776
+ tested_chips[platform].add(chip)
777
+
778
+ # Calculate coverage for each platform
779
+ platform_coverage = {}
780
+ missing_chips = {}
781
+
782
+ for platform, target_set in target_chips.items():
783
+ covered_set = tested_chips[platform]
784
+ missing_set = target_set - covered_set
785
+
786
+ platform_coverage[platform] = {
787
+ "total_chips": len(target_set),
788
+ "tested_chips": len(covered_set),
789
+ "coverage_percentage": (len(covered_set) / len(target_set)) * 100 if target_set else 0,
790
+ "covered_chips": sorted(list(covered_set)),
791
+ "missing_chips": sorted(list(missing_set))
792
+ }
793
+
794
+ missing_chips[platform] = sorted(list(missing_set))
795
+
796
+ # Overall coverage is complete if all platforms have full coverage
797
+ is_fully_covered = all(
798
+ len(missing_chips[platform]) == 0
799
+ for platform in target_chips.keys()
800
+ )
801
+
802
+ return is_fully_covered, platform_coverage, missing_chips
803
+
804
+
805
+ def generate_test_coverage_report(
806
+ performance_results, support_results, output_dir="dashboard_data"
807
+ ):
808
+ """
809
+ Generates test coverage reports for each commit, showing which devices
810
+ were tested vs skipped.
811
+ """
812
+ # Get all possible devices from config
813
+ all_devices = get_all_supported_devices()
814
+
815
+ # Get all unique commit hashes from results
816
+ commit_hashes = set()
817
+
818
+ # Collect from performance results
819
+ for key, result in performance_results.items():
820
+ if len(key) >= 4 and result.get("commit_hash"):
821
+ commit_hashes.add(result["commit_hash"])
822
+
823
+ # Collect from support results
824
+ for key, result in support_results.items():
825
+ if key in ["modelsTested", "devices"]:
826
+ continue
827
+ if len(key) >= 3 and result.get("commitHash"):
828
+ commit_hashes.add(result["commitHash"])
829
+
830
+ print(f"Found {len(commit_hashes)} commit hashes to analyze")
831
+
832
+ # Generate coverage report for each commit
833
+ for commit_hash in commit_hashes:
834
+ tested_devices = get_tested_devices_for_commit(
835
+ performance_results, support_results, commit_hash
836
+ )
837
+
838
+ tested_os_versions = get_tested_os_versions_for_commit(
839
+ performance_results, support_results, commit_hash
840
+ )
841
+
842
+ # Check target OS coverage
843
+ os_fully_covered, covered_versions, missing_versions = check_target_os_coverage(
844
+ tested_os_versions
845
+ )
846
+
847
+ # Check chip coverage for all platforms
848
+ chip_fully_covered, platform_coverage, missing_chips = check_chip_coverage(
849
+ tested_devices
850
+ )
851
+
852
+ skipped_devices = all_devices - tested_devices
853
+
854
+ # Convert sets to lists for JSON serialization
855
+ tested_devices_list = list(tested_devices)
856
+ skipped_devices_list = list(skipped_devices)
857
+ tested_os_versions_list = list(tested_os_versions)
858
+
859
+ coverage_report = {
860
+ "commit_hash": commit_hash,
861
+ "total_devices": len(all_devices),
862
+ "tested_devices": len(tested_devices),
863
+ "skipped_devices": len(skipped_devices),
864
+ "coverage_percentage": (len(tested_devices) / len(all_devices)) * 100,
865
+ "tested_device_list": tested_devices_list,
866
+ "skipped_device_list": skipped_devices_list,
867
+ "tested_os_versions": tested_os_versions_list,
868
+ "has_target_os_coverage": os_fully_covered,
869
+ "covered_target_versions": covered_versions,
870
+ "missing_target_versions": missing_versions,
871
+ "has_target_chip_coverage": chip_fully_covered,
872
+ "platform_chip_coverage": platform_coverage,
873
+ "missing_target_chips": missing_chips,
874
+ }
875
+
876
+ # Save report for this commit
877
+ output_file = os.path.join(output_dir, f"test_coverage_{commit_hash}.json")
878
+ with open(output_file, "w") as f:
879
+ json.dump(coverage_report, f, indent=2)
880
+
881
+ os_coverage_info = f"OS coverage: {'✅ Complete' if os_fully_covered else '❌ Incomplete'}"
882
+ chip_coverage_info = f"Chip coverage: {'✅ Complete' if chip_fully_covered else '❌ Incomplete'}"
883
+
884
+ print(
885
+ f"Generated coverage report for commit {commit_hash}: "
886
+ f"{len(tested_devices)}/{len(all_devices)} devices tested "
887
+ f"({coverage_report['coverage_percentage']:.1f}%) "
888
+ f"({os_coverage_info}, {chip_coverage_info})"
889
+ )
890
+
891
+
892
  def main():
893
  """
894
  Main function to orchestrate the performance data generation process.
 
898
  2. Fetches evaluation data for various datasets.
899
  3. Processes benchmark files and summary files.
900
  4. Calculates and saves performance and support results.
901
+ 5. Generates test coverage reports for each commit.
902
  """
903
  source_xcresult_repo = "argmaxinc/whisperkit-evals-dataset"
904
  source_xcresult_subfolder = "benchmark_data/"
 
962
  elif "summary" in filename:
963
  process_summary_file(file_path, support_results, releases)
964
  else:
965
+ process_benchmark_file(
966
+ file_path, dataset_dfs, performance_results, releases
967
+ )
968
+
969
  not_supported = calculate_and_save_performance_results(
970
  performance_results, "dashboard_data/performance_data.json"
971
  )
 
973
  support_results, not_supported, "dashboard_data/support_data.csv"
974
  )
975
 
976
+ # Generate test coverage reports
977
+ generate_test_coverage_report(performance_results, support_results)
978
+
979
 
980
  if __name__ == "__main__":
981
  main()
quality_generate.py DELETED
@@ -1,186 +0,0 @@
1
- import json
2
- import os
3
- import shutil
4
- import sys
5
- from collections import defaultdict
6
- from statistics import mean
7
-
8
- import pandas as pd
9
- import requests
10
-
11
- from text_normalizer import text_normalizer
12
- from utils import compute_average_wer, download_dataset
13
-
14
-
15
- def fetch_evaluation_data(url):
16
- """
17
- Fetches evaluation data from the given URL.
18
- :param url: The URL to fetch the evaluation data from.
19
- :returns: The evaluation data as a dictionary.
20
- :rauses: sys.exit if the request fails
21
- """
22
- response = requests.get(url)
23
- if response.status_code == 200:
24
- return json.loads(response.text)
25
- else:
26
- sys.exit(f"Failed to fetch WhisperKit evals: {response.text}")
27
-
28
-
29
- def get_device_name(device):
30
- """
31
- Gets the device name from the device map if it exists.
32
- :param device: String representing the device name.
33
- :returns: The device name from the device map if it exists, otherwise the input device name.
34
- """
35
- with open("dashboard_data/device_map.json", "r") as f:
36
- device_map = json.load(f)
37
- return device_map.get(device, device).replace(" ", "_")
38
-
39
-
40
- def process_quality_file(file_path, dataset_dfs, quality_results):
41
- """
42
- Processes a single quality file and updates the quality_results dictionary.
43
-
44
- :param file_path: Path to the quality JSON file.
45
- :param dataset_dfs: Dictionary of DataFrames containing dataset information.
46
- :param quality_results: Dictionary to store the processed quality results.
47
-
48
- This function reads a quality JSON file, extracts relevant information,
49
- and updates the quality_results dictionary with various metrics including WER
50
- and Quality of Inference (QoI) for different datasets.
51
- """
52
- with open(file_path, "r") as file:
53
- test_results = json.load(file)
54
-
55
- if len(test_results) == 0:
56
- return
57
-
58
- metadata = test_results["metadata"]
59
- test_results = test_results["results"]
60
- model = file_path.split("/")[-3].replace("_", "/")
61
- device = metadata["inference_context"]["device_spec"]["product_name"]
62
- device = get_device_name(device)
63
- timestamp = file_path.split("/")[-1].split(".")[0]
64
- key = model
65
- dataset_name = metadata["dataset_name"]
66
-
67
- for test_result in test_results:
68
- audio_file_name = test_result["file"]
69
-
70
- dataset_key = "Earnings-22" if "earnings22" in dataset_name else "LibriSpeech"
71
- dataset_df = dataset_dfs[dataset_key]
72
-
73
- wer_entry = {
74
- "prediction": text_normalizer(test_result["prediction"]),
75
- "reference": text_normalizer(test_result["reference"]),
76
- }
77
- quality_results[key]["timestamp"] = timestamp
78
- quality_results[key]["dataset_wer"][dataset_name].append(wer_entry)
79
-
80
- audio = audio_file_name.split(".")[0]
81
- dataset_row = dataset_df.loc[dataset_df["file"].str.contains(audio)].iloc[0]
82
- reference_wer = dataset_row["wer"]
83
- prediction_wer = test_result["wer"]
84
-
85
- quality_results[key]["qoi"].append(1 if prediction_wer <= reference_wer else 0)
86
-
87
-
88
- def calculate_and_save_quality_results(quality_results, quality_output_path):
89
- """
90
- Calculates final quality metrics and saves them to a JSON file.
91
-
92
- :param quality_results: Dictionary containing raw quality data.
93
- :param quality_output_path: Path to save the processed quality results.
94
-
95
- This function processes the raw quality data, calculates average metrics,
96
- and writes the final results to a JSON file, with each entry representing
97
- a unique model's quality metrics across different datasets, including
98
- Word Error Rate (WER) and Quality of Inference (QoI).
99
- """
100
- with open(quality_output_path, "w") as quality_file:
101
- for key, data in quality_results.items():
102
- model = key
103
-
104
- dataset_wers = {
105
- dataset: compute_average_wer(wer)
106
- for dataset, wer in data["dataset_wer"].items()
107
- }
108
- average_wer = (
109
- sum(dataset_wers.values()) / len(dataset_wers)
110
- if len(dataset_wers) != 0
111
- else 0
112
- )
113
-
114
- quality_entry = {
115
- "model": model.replace("_", "/"),
116
- "timestamp": data["timestamp"],
117
- "average_wer": round(average_wer, 2),
118
- "dataset_wer": dataset_wers,
119
- "qoi": round(mean(data["qoi"]), 2),
120
- }
121
-
122
- json.dump(quality_entry, quality_file)
123
- quality_file.write("\n")
124
-
125
-
126
- def main():
127
- """
128
- Main function to orchestrate the quality data generation process.
129
-
130
- This function performs the following steps:
131
- 1. Downloads quality data if requested.
132
- 2. Fetches evaluation data for various datasets.
133
- 3. Processes quality files for specific datasets.
134
- 4. Calculates and saves quality results, including WER and QoI metrics.
135
- """
136
- if len(sys.argv) > 1 and sys.argv[1] == "download":
137
- try:
138
- shutil.rmtree("english")
139
- except:
140
- print("Nothing to remove.")
141
- download_dataset("argmaxinc/whisperkit-evals", "english", "WhisperKit")
142
-
143
- datasets = {
144
- "Earnings-22": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/earnings22/2024-03-04_13%3A39%3A42_GMT-0800.json",
145
- "LibriSpeech": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/librispeech/2024-02-28_18%3A45%3A02_GMT-0800.json?download=true",
146
- "earnings22-10mins": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/earnings22/2024-03-04_13%3A39%3A42_GMT-0800.json",
147
- "librispeech-10mins": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/librispeech/2024-02-28_18%3A45%3A02_GMT-0800.json?download=true",
148
- "earnings22-12hours": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/earnings22/2024-03-04_13%3A39%3A42_GMT-0800.json",
149
- "librispeech": "https://huggingface.co/datasets/argmaxinc/whisperkit-evals/resolve/main/WhisperOpenAIAPI/openai_whisper-large-v2/librispeech/2024-02-28_18%3A45%3A02_GMT-0800.json?download=true",
150
- }
151
-
152
- dataset_dfs = {}
153
- for dataset_name, url in datasets.items():
154
- evals = fetch_evaluation_data(url)
155
- dataset_dfs[dataset_name] = pd.json_normalize(evals["results"])
156
-
157
- source_quality_directory = "argmaxinc/english/WhisperKit/"
158
-
159
- quality_results = defaultdict(
160
- lambda: {
161
- "average_wer": [],
162
- "dataset_wer": defaultdict(list),
163
- "qoi": [],
164
- "timestamp": None,
165
- }
166
- )
167
-
168
- for subdir, _, files in os.walk(source_quality_directory):
169
- dataset = subdir.split("/")[-1]
170
- if dataset not in ["earnings22-12hours", "librispeech"]:
171
- continue
172
-
173
- for filename in files:
174
- if not filename.endswith(".json"):
175
- continue
176
-
177
- file_path = os.path.join(subdir, filename)
178
- process_quality_file(file_path, dataset_dfs, quality_results)
179
-
180
- calculate_and_save_quality_results(
181
- quality_results, "dashboard_data/quality_data.json"
182
- )
183
-
184
-
185
- if __name__ == "__main__":
186
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
utils.py CHANGED
@@ -2,6 +2,7 @@ import colorsys
2
  import json
3
  import os
4
  import random
 
5
  from concurrent.futures import ThreadPoolExecutor
6
  from dataclasses import dataclass, make_dataclass
7
  from datetime import datetime
@@ -12,6 +13,7 @@ import evaluate
12
  import numpy as np
13
  import pandas as pd
14
  import plotly.graph_objects as go
 
15
  from huggingface_hub import hf_hub_download, list_repo_files
16
  from pydub import AudioSegment
17
 
@@ -365,14 +367,11 @@ def plot_metric(
365
  with open("dashboard_data/version.json", "r") as f:
366
  version = json.load(f)
367
  releases = set(version["releases"])
368
-
369
  df = df[df["commit_hash"].isin(releases)]
370
 
371
  grouped = df.groupby(["model", "device", "os"])
372
- sorted_groups = [
373
- group.sort_values("commit_timestamp")
374
- for _, group in grouped
375
- ]
376
 
377
  if filter_input:
378
  filters = [f.strip().lower() for f in filter_input.split(";")]
@@ -504,6 +503,29 @@ def calculate_parity(m2_ultra_wer, row):
504
  return None
505
 
506
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
507
  def create_initial_performance_column_dict():
508
  """
509
  Creates the initial column dictionary for the performance table.
@@ -511,7 +533,7 @@ def create_initial_performance_column_dict():
511
  :return: A list of column dictionaries
512
 
513
  This function defines the basic structure of the performance table,
514
- including columns for model, device, OS, average WER, QoI, speed, and tokens per second.
515
  """
516
  return [
517
  [
@@ -529,6 +551,7 @@ def create_initial_performance_column_dict():
529
  ["qoi", ColumnContent, ColumnContent("QoI", "html", False)],
530
  ["speed", ColumnContent, ColumnContent("Speed", "html", False)],
531
  ["toks", ColumnContent, ColumnContent("Tok / s", "html", False)],
 
532
  ]
533
 
534
 
@@ -780,6 +803,46 @@ def generate_random_colors(base_colors, num_colors, min_distance=30):
780
  return generated_colors
781
 
782
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  @dataclass
784
  class Task:
785
  """
 
2
  import json
3
  import os
4
  import random
5
+ import sys
6
  from concurrent.futures import ThreadPoolExecutor
7
  from dataclasses import dataclass, make_dataclass
8
  from datetime import datetime
 
13
  import numpy as np
14
  import pandas as pd
15
  import plotly.graph_objects as go
16
+ import requests
17
  from huggingface_hub import hf_hub_download, list_repo_files
18
  from pydub import AudioSegment
19
 
 
367
  with open("dashboard_data/version.json", "r") as f:
368
  version = json.load(f)
369
  releases = set(version["releases"])
370
+
371
  df = df[df["commit_hash"].isin(releases)]
372
 
373
  grouped = df.groupby(["model", "device", "os"])
374
+ sorted_groups = [group.sort_values("commit_timestamp") for _, group in grouped]
 
 
 
375
 
376
  if filter_input:
377
  filters = [f.strip().lower() for f in filter_input.split(";")]
 
503
  return None
504
 
505
 
506
+ def calculate_quality_parity(quality_data, performance_row):
507
+ """
508
+ Calculates the parity between measured WER and ground truth WER from quality data.
509
+
510
+ :param quality_data: List of dictionaries containing quality evaluation data
511
+ :param performance_row: Current performance row being processed
512
+ :return: WER difference (measured - ground truth) or None if not found
513
+
514
+ This function finds the corresponding ground truth WER for a model and computes
515
+ the difference between measured and ground truth WER values.
516
+ """
517
+ model_name = performance_row.get("model", "")
518
+ measured_wer = performance_row.get("english_wer", 0)
519
+
520
+ # Find matching model in quality data
521
+ for quality_entry in quality_data:
522
+ if quality_entry.get("model", "") == model_name:
523
+ ground_truth_wer = quality_entry.get("average_wer", 0)
524
+ return round(measured_wer - ground_truth_wer, 2)
525
+
526
+ return None
527
+
528
+
529
  def create_initial_performance_column_dict():
530
  """
531
  Creates the initial column dictionary for the performance table.
 
533
  :return: A list of column dictionaries
534
 
535
  This function defines the basic structure of the performance table,
536
+ including columns for model, device, OS, average WER, QoI, speed, tokens per second, and parity.
537
  """
538
  return [
539
  [
 
551
  ["qoi", ColumnContent, ColumnContent("QoI", "html", False)],
552
  ["speed", ColumnContent, ColumnContent("Speed", "html", False)],
553
  ["toks", ColumnContent, ColumnContent("Tok / s", "html", False)],
554
+ ["parity", ColumnContent, ColumnContent("Parity", "number", False)],
555
  ]
556
 
557
 
 
803
  return generated_colors
804
 
805
 
806
+ def download_json_from_github(
807
+ url=None,
808
+ repo_owner="argmaxinc",
809
+ repo_name="device-knowledge-base",
810
+ branch="main",
811
+ file_path=None,
812
+ ):
813
+ """
814
+ Downloads a JSON file from a GitHub repository.
815
+
816
+ :param url: Full URL to the JSON file, or None if constructing from other params
817
+ :param repo_owner: GitHub repository owner (default: "argmaxinc")
818
+ :param repo_name: GitHub repository name (default: "WhisperKit")
819
+ :param branch: Git branch name (default: "main")
820
+ :param file_path: Path to the JSON file within the repository
821
+ :returns: The JSON data as a dictionary
822
+ :raises: sys.exit if the request fails or JSON parsing fails
823
+ """
824
+
825
+ # If full URL is provided, use it directly
826
+ if url:
827
+ target_url = url
828
+ elif file_path:
829
+ # Construct GitHub raw URL
830
+ target_url = f"https://raw.githubusercontent.com/{repo_owner}/{repo_name}/{branch}/{file_path}"
831
+ else:
832
+ sys.exit("Either 'url' or 'file_path' must be provided")
833
+
834
+ try:
835
+ response = requests.get(target_url)
836
+ if response.status_code == 200:
837
+ return json.loads(response.text)
838
+ else:
839
+ sys.exit(f"Failed to fetch JSON from GitHub: {response.text}")
840
+ except json.JSONDecodeError as e:
841
+ sys.exit(f"Failed to parse JSON from {target_url}: {e}")
842
+ except requests.exceptions.RequestException as e:
843
+ sys.exit(f"Network error fetching {target_url}: {e}")
844
+
845
+
846
  @dataclass
847
  class Task:
848
  """