free-coding-models 0.5.60 → 0.5.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/bin/free-coding-models.js +19 -0
- package/changelog/v0.5.61.md +65 -0
- package/changelog/v0.5.62.md +65 -0
- package/package.json +8 -2
- package/scripts/check-drift.mjs +160 -0
- package/scripts/update-benchmarks.mjs +239 -0
- package/src/core/extended-benchmarks.js +421 -0
- package/src/core/model-merger.js +155 -0
- package/src/core/models-dev-fetcher.js +210 -0
- package/src/core/models-dev-index.js +311 -0
- package/src/core/models-drift.js +296 -0
- package/src/core/utils.js +14 -0
- package/src/data/benchmarks.json +302 -0
- package/src/tui/app.js +86 -0
- package/src/tui/cli-help.js +2 -0
- package/src/tui/render-table.js +38 -2
- package/web/dist/assets/{index-CQQJkofy.js → index-DBaz4DiK.js} +2 -2
- package/web/dist/index.html +1 -1
- package/web/server.js +39 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file models-drift.js
|
|
3
|
+
* @description Drift detection between `sources.js` (our curated catalog) and the live
|
|
4
|
+
* models.dev community catalog. Compares context window, max output tokens,
|
|
5
|
+
* and capability flags (reasoning / vision / thinking). Reports mismatches
|
|
6
|
+
* but never auto-rewrites sources.js — a human approves the edit.
|
|
7
|
+
*
|
|
8
|
+
* @details
|
|
9
|
+
* 📖 Why this exists:
|
|
10
|
+
* 📖 - sources.js is curated but `ctx` drifts constantly (128k → 256k → 1M).
|
|
11
|
+
* 📖 - We don't want to silently overwrite curated values; we want to surface
|
|
12
|
+
* 📖 the drift so a human can review it.
|
|
13
|
+
* 📖 - Used by:
|
|
14
|
+
* 📖 1. `scripts/check-drift.mjs` (CLI: `free-coding-models --check-drift`)
|
|
15
|
+
* 📖 2. `.github/workflows/check-drift.yml` (weekly CI — opens an issue)
|
|
16
|
+
* 📖 3. The TUI footer chip + /health endpoint (read-only)
|
|
17
|
+
*
|
|
18
|
+
* 📖 What "drift" means here:
|
|
19
|
+
* 📖 - ctx: sources.js says "128k", models.dev says 256000 → UPDATE
|
|
20
|
+
* 📖 - maxTokens: sources.js has no value, models.dev says 65536 → ADD
|
|
21
|
+
* 📖 - reasoning/vision flags: sources.js is null, models.dev has the flag → ADD
|
|
22
|
+
* 📖 - exact match: ✓ (no action)
|
|
23
|
+
*
|
|
24
|
+
* 📖 A "field mismatch" entry has:
|
|
25
|
+
* 📖 { modelId, field, sourcesJsValue, modelsDevValue, action: 'update'|'add'|'remove' }
|
|
26
|
+
*
|
|
27
|
+
* @functions
|
|
28
|
+
* → detectDrift(models, catalog, opts?) — Returns a list of field mismatches
|
|
29
|
+
* → summarizeDrift(mismatches) — { total, byField, byModel, modelsAffected }
|
|
30
|
+
* → formatDriftReport(mismatches, opts?) — Pretty-print a human-readable report
|
|
31
|
+
* → parseCtxToNum(ctx) — "128k" / "1m" → number
|
|
32
|
+
* → DRIFT_FIELDS — The list of fields we check
|
|
33
|
+
*
|
|
34
|
+
* @exports detectDrift, summarizeDrift, formatDriftReport, parseCtxToNum, DRIFT_FIELDS
|
|
35
|
+
*
|
|
36
|
+
* @see src/core/models-dev-fetcher.js — provides the live catalog
|
|
37
|
+
* @see src/core/models-dev-index.js — provides the lookup helpers
|
|
38
|
+
* @see scripts/check-drift.mjs — CLI consumer
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
import { buildModelIndex, lookupModelDevMeta, normalizeModelDevEntry } from './models-dev-index.js'
|
|
42
|
+
|
|
43
|
+
/** 📖 Fields we check for drift. Each has a sources.js column + a models.dev mapping. */
|
|
44
|
+
export const DRIFT_FIELDS = ['ctx', 'maxTokens', 'reasoning', 'vision', 'thinking']
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 📖 Convert a sources.js ctx string ("128k", "1m", "262144") to a number.
|
|
48
|
+
* 📖 Mirrors parseCtxToK from utils.js but returns raw tokens (not thousands).
|
|
49
|
+
* 📖 Returns null if the string is empty, "-", or unparseable.
|
|
50
|
+
*/
|
|
51
|
+
export function parseCtxToNum(ctx) {
|
|
52
|
+
if (ctx == null) return null
|
|
53
|
+
const s = String(ctx).trim()
|
|
54
|
+
if (!s || s === '-' || s === '—') return null
|
|
55
|
+
// Pure number
|
|
56
|
+
if (/^\d+$/.test(s)) return parseInt(s, 10)
|
|
57
|
+
// Suffix
|
|
58
|
+
const m = s.match(/^(\d+(?:\.\d+)?)\s*([km])$/i)
|
|
59
|
+
if (m) {
|
|
60
|
+
const n = parseFloat(m[1])
|
|
61
|
+
const unit = m[2].toLowerCase()
|
|
62
|
+
if (unit === 'k') return Math.round(n * 1000)
|
|
63
|
+
if (unit === 'm') return Math.round(n * 1_000_000)
|
|
64
|
+
}
|
|
65
|
+
return null
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ─── Comparison helpers ──────────────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
function contextMatch(sourcesJsCtx, devContextWindow) {
|
|
71
|
+
const a = parseCtxToNum(sourcesJsCtx)
|
|
72
|
+
const b = (typeof devContextWindow === 'number' && Number.isFinite(devContextWindow)) ? devContextWindow : null
|
|
73
|
+
if (a == null && b == null) return { status: 'both-null' }
|
|
74
|
+
if (a == null && b != null) return { status: 'add', sourcesJs: null, dev: b }
|
|
75
|
+
if (a != null && b == null) return { status: 'dev-missing', sourcesJs: a, dev: null }
|
|
76
|
+
// 📖 Allow 5% tolerance for vendor-specific rounding
|
|
77
|
+
if (Math.abs(a - b) <= Math.max(a, b) * 0.05) return { status: 'match', sourcesJs: a, dev: b }
|
|
78
|
+
return { status: 'drift', sourcesJs: a, dev: b }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function flagMatch(sourcesJsFlag, devFlag) {
|
|
82
|
+
// 📖 sources.js stores capability flags as booleans (true/false) or null/undefined
|
|
83
|
+
const a = sourcesJsFlag === true
|
|
84
|
+
const b = devFlag === true
|
|
85
|
+
if (!a && !b) return { status: 'both-off' }
|
|
86
|
+
if (!a && b) return { status: 'add', sourcesJs: false, dev: true }
|
|
87
|
+
if (a && !b) return { status: 'drift', sourcesJs: true, dev: false }
|
|
88
|
+
return { status: 'match' }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function numMatch(sourcesJsNum, devNum) {
|
|
92
|
+
const a = (typeof sourcesJsNum === 'number' && Number.isFinite(sourcesJsNum)) ? sourcesJsNum : null
|
|
93
|
+
const b = (typeof devNum === 'number' && Number.isFinite(devNum)) ? devNum : null
|
|
94
|
+
if (a == null && b == null) return { status: 'both-null' }
|
|
95
|
+
if (a == null && b != null) return { status: 'add', sourcesJs: null, dev: b }
|
|
96
|
+
if (a != null && b == null) return { status: 'dev-missing', sourcesJs: a, dev: null }
|
|
97
|
+
if (a === b) return { status: 'match', sourcesJs: a, dev: b }
|
|
98
|
+
return { status: 'drift', sourcesJs: a, dev: b }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ─── Main detection ──────────────────────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* 📖 Run drift detection over the sources.js model list against the live catalog.
|
|
105
|
+
* 📖 Returns a list of per-field mismatches. Use `summarizeDrift` + `formatDriftReport`
|
|
106
|
+
* 📖 to render the result.
|
|
107
|
+
*
|
|
108
|
+
* 📖 Each model in `models` should be a sources.js tuple:
|
|
109
|
+
* 📖 [modelId, label, tier, sweScore, ctx, providerKey, ...]
|
|
110
|
+
* 📖 or an object with the same fields.
|
|
111
|
+
*
|
|
112
|
+
* @param {Array} models — sources.js MODELS array
|
|
113
|
+
* @param {object} catalog — parsed models.dev catalog (or null = no drift)
|
|
114
|
+
* @param {object} [opts]
|
|
115
|
+
* @param {object} [opts.index] — Pre-built index (skips the build)
|
|
116
|
+
* @param {number} [opts.threshold=0] — Min mismatches to report; 0 = all
|
|
117
|
+
* @returns {Array<{
|
|
118
|
+
* modelId: string, label: string, field: string,
|
|
119
|
+
* sourcesJsValue: any, modelsDevValue: any,
|
|
120
|
+
* action: 'update'|'add'|'drift', matchKind: 'exact'|'alias'|'substring'|'none'
|
|
121
|
+
* }>}
|
|
122
|
+
*/
|
|
123
|
+
export function detectDrift(models, catalog, opts = {}) {
|
|
124
|
+
if (!Array.isArray(models) || models.length === 0) return []
|
|
125
|
+
if (!catalog || typeof catalog !== 'object') return []
|
|
126
|
+
|
|
127
|
+
const index = opts.index ?? buildModelIndex(catalog)
|
|
128
|
+
const threshold = opts.threshold ?? 0
|
|
129
|
+
const out = []
|
|
130
|
+
|
|
131
|
+
for (const entry of models) {
|
|
132
|
+
// 📖 Accept both tuple form and object form
|
|
133
|
+
let modelId, label, ctx, reasoning, vision, thinking, maxTokens
|
|
134
|
+
if (Array.isArray(entry)) {
|
|
135
|
+
[modelId, label, , , ctx] = entry
|
|
136
|
+
// 📖 The 6th+ elements of the sources.js tuple are providerKey + metadata;
|
|
137
|
+
// 📖 for drift we only need the first 5.
|
|
138
|
+
} else if (entry && typeof entry === 'object') {
|
|
139
|
+
({ modelId, label, ctx, reasoning, vision, thinking, maxTokens } = entry)
|
|
140
|
+
} else {
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
if (!modelId) continue
|
|
144
|
+
|
|
145
|
+
const match = lookupModelDevMeta(modelId, label, index)
|
|
146
|
+
if (!match) continue
|
|
147
|
+
const norm = match.entry
|
|
148
|
+
const matchKind = match.matchKind
|
|
149
|
+
|
|
150
|
+
// 📖 Skip substring matches for ctx/metadata to avoid false positives.
|
|
151
|
+
// 📖 Only exact + alias matches contribute to drift.
|
|
152
|
+
if (matchKind === 'substring') continue
|
|
153
|
+
|
|
154
|
+
// ctx
|
|
155
|
+
const ctxCmp = contextMatch(ctx, norm.contextWindow)
|
|
156
|
+
if (ctxCmp.status === 'drift' || ctxCmp.status === 'add') {
|
|
157
|
+
out.push({
|
|
158
|
+
modelId, label, field: 'ctx',
|
|
159
|
+
sourcesJsValue: ctxCmp.sourcesJs,
|
|
160
|
+
modelsDevValue: ctxCmp.dev,
|
|
161
|
+
action: ctxCmp.status === 'add' ? 'add' : 'update',
|
|
162
|
+
matchKind,
|
|
163
|
+
})
|
|
164
|
+
}
|
|
165
|
+
// maxTokens
|
|
166
|
+
const maxCmp = numMatch(maxTokens, norm.maxOutputTokens)
|
|
167
|
+
if (maxCmp.status === 'drift' || maxCmp.status === 'add') {
|
|
168
|
+
out.push({
|
|
169
|
+
modelId, label, field: 'maxTokens',
|
|
170
|
+
sourcesJsValue: maxCmp.sourcesJs,
|
|
171
|
+
modelsDevValue: maxCmp.dev,
|
|
172
|
+
action: maxCmp.status === 'add' ? 'add' : 'update',
|
|
173
|
+
matchKind,
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
// reasoning
|
|
177
|
+
const rCmp = flagMatch(reasoning, norm.reasoning)
|
|
178
|
+
if (rCmp.status === 'drift' || rCmp.status === 'add') {
|
|
179
|
+
out.push({
|
|
180
|
+
modelId, label, field: 'reasoning',
|
|
181
|
+
sourcesJsValue: rCmp.sourcesJs,
|
|
182
|
+
modelsDevValue: rCmp.dev,
|
|
183
|
+
action: rCmp.status === 'add' ? 'add' : 'update',
|
|
184
|
+
matchKind,
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
// vision
|
|
188
|
+
const vCmp = flagMatch(vision, norm.vision)
|
|
189
|
+
if (vCmp.status === 'drift' || vCmp.status === 'add') {
|
|
190
|
+
out.push({
|
|
191
|
+
modelId, label, field: 'vision',
|
|
192
|
+
sourcesJsValue: vCmp.sourcesJs,
|
|
193
|
+
modelsDevValue: vCmp.dev,
|
|
194
|
+
action: vCmp.status === 'add' ? 'add' : 'update',
|
|
195
|
+
matchKind,
|
|
196
|
+
})
|
|
197
|
+
}
|
|
198
|
+
// thinking
|
|
199
|
+
const tCmp = flagMatch(thinking, norm.thinking)
|
|
200
|
+
if (tCmp.status === 'drift' || tCmp.status === 'add') {
|
|
201
|
+
out.push({
|
|
202
|
+
modelId, label, field: 'thinking',
|
|
203
|
+
sourcesJsValue: tCmp.sourcesJs,
|
|
204
|
+
modelsDevValue: tCmp.dev,
|
|
205
|
+
action: tCmp.status === 'add' ? 'add' : 'update',
|
|
206
|
+
matchKind,
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (threshold > 0 && out.length < threshold) {
|
|
212
|
+
return []
|
|
213
|
+
}
|
|
214
|
+
return out
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ─── Summary + report ────────────────────────────────────────────────────────
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* 📖 Aggregate stats over a drift result list. Used by the TUI footer chip and
|
|
221
|
+
* 📖 the /health endpoint.
|
|
222
|
+
*
|
|
223
|
+
* @param {Array} mismatches — Output of detectDrift
|
|
224
|
+
* @returns {{
|
|
225
|
+
* total: number,
|
|
226
|
+
* byField: Record<string, number>,
|
|
227
|
+
* byAction: Record<string, number>,
|
|
228
|
+
* modelsAffected: string[]
|
|
229
|
+
* }}
|
|
230
|
+
*/
|
|
231
|
+
export function summarizeDrift(mismatches) {
|
|
232
|
+
const byField = Object.fromEntries(DRIFT_FIELDS.map(f => [f, 0]))
|
|
233
|
+
const byAction = { update: 0, add: 0, drift: 0 }
|
|
234
|
+
const modelsSet = new Set()
|
|
235
|
+
for (const m of mismatches || []) {
|
|
236
|
+
byField[m.field] = (byField[m.field] ?? 0) + 1
|
|
237
|
+
byAction[m.action] = (byAction[m.action] ?? 0) + 1
|
|
238
|
+
modelsSet.add(m.modelId)
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
total: (mismatches || []).length,
|
|
242
|
+
byField,
|
|
243
|
+
byAction,
|
|
244
|
+
modelsAffected: Array.from(modelsSet).sort(),
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* 📖 Format a drift report for human reading. Used by the CLI script and the
|
|
250
|
+
* 📖 GitHub Actions workflow (which posts the report to an issue).
|
|
251
|
+
*
|
|
252
|
+
* @param {Array} mismatches — Output of detectDrift
|
|
253
|
+
* @param {object} [opts]
|
|
254
|
+
* @param {boolean} [opts.useColor=true] — ANSI-color the output
|
|
255
|
+
* @returns {string} Multi-line report
|
|
256
|
+
*/
|
|
257
|
+
export function formatDriftReport(mismatches, opts = {}) {
|
|
258
|
+
const useColor = opts.useColor !== false && process.stdout?.isTTY === true
|
|
259
|
+
const RED = useColor ? '\x1b[31m' : ''
|
|
260
|
+
const YEL = useColor ? '\x1b[33m' : ''
|
|
261
|
+
const GRN = useColor ? '\x1b[32m' : ''
|
|
262
|
+
const DIM = useColor ? '\x1b[2m' : ''
|
|
263
|
+
const RST = useColor ? '\x1b[0m' : ''
|
|
264
|
+
|
|
265
|
+
const summary = summarizeDrift(mismatches)
|
|
266
|
+
if (summary.total === 0) {
|
|
267
|
+
return `${GRN}✓ No catalog drift detected${RST} ${DIM}(all models match models.dev)${RST}`
|
|
268
|
+
}
|
|
269
|
+
const lines = []
|
|
270
|
+
lines.push(`${YEL}⚠️ Catalog drift detected (${summary.total} mismatches across ${summary.modelsAffected.length} models)${RST}`)
|
|
271
|
+
lines.push('')
|
|
272
|
+
|
|
273
|
+
// 📖 Group by model for readability
|
|
274
|
+
const byModel = new Map()
|
|
275
|
+
for (const m of mismatches) {
|
|
276
|
+
const list = byModel.get(m.modelId) ?? []
|
|
277
|
+
list.push(m)
|
|
278
|
+
byModel.set(m.modelId, list)
|
|
279
|
+
}
|
|
280
|
+
for (const [modelId, list] of byModel) {
|
|
281
|
+
const label = list[0].label || modelId
|
|
282
|
+
lines.push(` ${label} ${DIM}(${modelId})${RST}`)
|
|
283
|
+
for (const m of list) {
|
|
284
|
+
const arrow = m.action === 'add' ? '← ADD' : '← UPDATE'
|
|
285
|
+
const color = m.action === 'add' ? GRN : RED
|
|
286
|
+
const sj = m.sourcesJsValue === null || m.sourcesJsValue === undefined ? '—' : String(m.sourcesJsValue)
|
|
287
|
+
const dv = m.modelsDevValue === null || m.modelsDevValue === undefined ? '—' : String(m.modelsDevValue)
|
|
288
|
+
lines.push(` ${DIM}${m.field.padEnd(11)}${RST} sources.js=${sj} models.dev=${dv} ${color}${arrow}${RST}`)
|
|
289
|
+
}
|
|
290
|
+
lines.push('')
|
|
291
|
+
}
|
|
292
|
+
return lines.join('\n')
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Re-export normalizeModelDevEntry for convenience (drift callers often need it)
|
|
296
|
+
export { normalizeModelDevEntry }
|
package/src/core/utils.js
CHANGED
|
@@ -606,6 +606,18 @@ export function parseArgs(argv) {
|
|
|
606
606
|
const probeTtlRaw = probeTtlValueIdx !== -1 ? args[probeTtlValueIdx] : null
|
|
607
607
|
const probeTtlMs = probeTtlRaw !== null ? parseInt(probeTtlRaw, 10) : null
|
|
608
608
|
|
|
609
|
+
// 📖 Drift detection flags (t5):
|
|
610
|
+
// 📖 --check-drift (boolean) — print a drift report vs models.dev, exit non-zero on mismatch.
|
|
611
|
+
// 📖 --drift-threshold <N> (value) — only fail when N+ mismatches are found.
|
|
612
|
+
const checkDriftMode = flags.includes('--check-drift')
|
|
613
|
+
const driftThresholdIdx = args.findIndex(a => a.toLowerCase() === '--drift-threshold')
|
|
614
|
+
const driftThresholdValueIdx = (driftThresholdIdx !== -1 && args[driftThresholdIdx + 1] && !args[driftThresholdIdx + 1].startsWith('--'))
|
|
615
|
+
? driftThresholdIdx + 1
|
|
616
|
+
: -1
|
|
617
|
+
if (driftThresholdValueIdx !== -1) skipIndices.add(driftThresholdValueIdx)
|
|
618
|
+
const driftThresholdRaw = driftThresholdValueIdx !== -1 ? args[driftThresholdValueIdx] : null
|
|
619
|
+
const driftThreshold = driftThresholdRaw !== null ? parseInt(driftThresholdRaw, 10) : null
|
|
620
|
+
|
|
609
621
|
return {
|
|
610
622
|
apiKey,
|
|
611
623
|
bestMode,
|
|
@@ -647,6 +659,8 @@ export function parseArgs(argv) {
|
|
|
647
659
|
daemonMode,
|
|
648
660
|
daemonBackgroundMode,
|
|
649
661
|
daemonStopMode,
|
|
662
|
+
checkDriftMode,
|
|
663
|
+
driftThreshold,
|
|
650
664
|
daemonStatusMode,
|
|
651
665
|
// 📖 Profile system removed - API keys now persist permanently across all sessions
|
|
652
666
|
recommendMode,
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"schemaVersion": 1,
|
|
4
|
+
"lastUpdated": "2026-07-25",
|
|
5
|
+
"source": "Artificial Analysis + curated manual overlay",
|
|
6
|
+
"notes": "Curated seed dataset for ~30 well-known models. Refreshed by scripts/update-benchmarks.mjs before each release. Fields with null are not yet measured."
|
|
7
|
+
},
|
|
8
|
+
"deepseek-ai/deepseek-v3.2": {
|
|
9
|
+
"codingIndex": 65.4, "mathIndex": 70.2, "agenticIndex": 58.0, "reasoningIndex": 68.5,
|
|
10
|
+
"mmluPro": 75.3, "gpqa": 52.0, "hle": 8.4, "contextWindow": 160000,
|
|
11
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
12
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek V3.2"
|
|
13
|
+
},
|
|
14
|
+
"deepseek-ai/deepseek-v4-pro": {
|
|
15
|
+
"codingIndex": 81.2, "mathIndex": 84.5, "agenticIndex": 74.8, "reasoningIndex": 80.1,
|
|
16
|
+
"mmluPro": 86.4, "gpqa": 65.7, "hle": 14.2, "contextWindow": 1000000,
|
|
17
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
18
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek V4 Pro"
|
|
19
|
+
},
|
|
20
|
+
"deepseek-ai/deepseek-v4-flash": {
|
|
21
|
+
"codingIndex": 78.9, "mathIndex": 80.1, "agenticIndex": 71.5, "reasoningIndex": 77.0,
|
|
22
|
+
"mmluPro": 83.2, "gpqa": 60.4, "hle": 12.8, "contextWindow": 1000000,
|
|
23
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
24
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek V4 Flash"
|
|
25
|
+
},
|
|
26
|
+
"deepseek-ai/deepseek-r1": {
|
|
27
|
+
"codingIndex": 52.0, "mathIndex": 90.4, "agenticIndex": 48.5, "reasoningIndex": 78.6,
|
|
28
|
+
"mmluPro": 84.0, "gpqa": 71.5, "hle": 9.9, "contextWindow": 128000,
|
|
29
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
30
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek R1"
|
|
31
|
+
},
|
|
32
|
+
"deepseek/deepseek-r1": {
|
|
33
|
+
"codingIndex": 52.0, "mathIndex": 90.4, "agenticIndex": 48.5, "reasoningIndex": 78.6,
|
|
34
|
+
"mmluPro": 84.0, "gpqa": 71.5, "hle": 9.9, "contextWindow": 128000,
|
|
35
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
36
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek R1"
|
|
37
|
+
},
|
|
38
|
+
"DeepSeek-V3.1": {
|
|
39
|
+
"codingIndex": 68.0, "mathIndex": 73.0, "agenticIndex": 60.5, "reasoningIndex": 70.0,
|
|
40
|
+
"mmluPro": 76.5, "gpqa": 53.2, "hle": 9.1, "contextWindow": 128000,
|
|
41
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
42
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek V3.1"
|
|
43
|
+
},
|
|
44
|
+
"DeepSeek-V3.2": {
|
|
45
|
+
"codingIndex": 70.5, "mathIndex": 75.0, "agenticIndex": 62.0, "reasoningIndex": 72.0,
|
|
46
|
+
"mmluPro": 78.0, "gpqa": 54.5, "hle": 9.5, "contextWindow": 32000,
|
|
47
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
48
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek V3.2"
|
|
49
|
+
},
|
|
50
|
+
"deepseek/deepseek-chat": {
|
|
51
|
+
"codingIndex": 65.0, "mathIndex": 70.0, "agenticIndex": 58.0, "reasoningIndex": 68.0,
|
|
52
|
+
"mmluPro": 75.0, "gpqa": 52.0, "hle": 8.4, "contextWindow": 128000,
|
|
53
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
54
|
+
"lastUpdated": "2026-07-20", "originalModel": "DeepSeek Chat"
|
|
55
|
+
},
|
|
56
|
+
"z-ai/glm-5.2": {
|
|
57
|
+
"codingIndex": 82.4, "mathIndex": 79.0, "agenticIndex": 76.1, "reasoningIndex": 78.9,
|
|
58
|
+
"mmluPro": 84.2, "gpqa": 61.8, "hle": 13.5, "contextWindow": 128000,
|
|
59
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
60
|
+
"lastUpdated": "2026-07-20", "originalModel": "GLM 5.2"
|
|
61
|
+
},
|
|
62
|
+
"zai-glm-4.7": {
|
|
63
|
+
"codingIndex": 75.0, "mathIndex": 73.5, "agenticIndex": 68.4, "reasoningIndex": 72.0,
|
|
64
|
+
"mmluPro": 78.5, "gpqa": 55.2, "hle": 10.8, "contextWindow": 128000,
|
|
65
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
66
|
+
"lastUpdated": "2026-07-20", "originalModel": "GLM 4.7"
|
|
67
|
+
},
|
|
68
|
+
"@cf/zai-org/glm-4.7-flash": {
|
|
69
|
+
"codingIndex": 70.0, "mathIndex": 69.0, "agenticIndex": 62.0, "reasoningIndex": 66.0,
|
|
70
|
+
"mmluPro": 73.0, "gpqa": 50.0, "hle": 9.0, "contextWindow": 128000,
|
|
71
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
72
|
+
"lastUpdated": "2026-07-20", "originalModel": "GLM 4.7 Flash"
|
|
73
|
+
},
|
|
74
|
+
"moonshotai/kimi-k2.6": {
|
|
75
|
+
"codingIndex": 79.5, "mathIndex": 77.0, "agenticIndex": 73.2, "reasoningIndex": 76.4,
|
|
76
|
+
"mmluPro": 82.0, "gpqa": 59.0, "hle": 12.4, "contextWindow": 262000,
|
|
77
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
78
|
+
"lastUpdated": "2026-07-20", "originalModel": "Kimi K2.6"
|
|
79
|
+
},
|
|
80
|
+
"@cf/moonshotai/kimi-k2.6": {
|
|
81
|
+
"codingIndex": 79.5, "mathIndex": 77.0, "agenticIndex": 73.2, "reasoningIndex": 76.4,
|
|
82
|
+
"mmluPro": 82.0, "gpqa": 59.0, "hle": 12.4, "contextWindow": 262000,
|
|
83
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
84
|
+
"lastUpdated": "2026-07-20", "originalModel": "Kimi K2.6"
|
|
85
|
+
},
|
|
86
|
+
"@cf/moonshotai/kimi-k2.7-code": {
|
|
87
|
+
"codingIndex": 81.0, "mathIndex": 76.5, "agenticIndex": 74.0, "reasoningIndex": 75.5,
|
|
88
|
+
"mmluPro": 81.5, "gpqa": 58.0, "hle": 12.0, "contextWindow": 262000,
|
|
89
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
90
|
+
"lastUpdated": "2026-07-20", "originalModel": "Kimi K2.7 Code"
|
|
91
|
+
},
|
|
92
|
+
"minimaxai/minimax-m2.7": {
|
|
93
|
+
"codingIndex": 77.5, "mathIndex": 75.0, "agenticIndex": 70.0, "reasoningIndex": 74.5,
|
|
94
|
+
"mmluPro": 80.5, "gpqa": 56.0, "hle": 11.5, "contextWindow": 200000,
|
|
95
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
96
|
+
"lastUpdated": "2026-07-20", "originalModel": "MiniMax M2.7"
|
|
97
|
+
},
|
|
98
|
+
"minimaxai/minimax-m3": {
|
|
99
|
+
"codingIndex": 78.0, "mathIndex": 76.0, "agenticIndex": 71.0, "reasoningIndex": 75.0,
|
|
100
|
+
"mmluPro": 81.0, "gpqa": 57.0, "hle": 12.0, "contextWindow": 1000000,
|
|
101
|
+
"supportsReasoning": true, "supportsVision": true,
|
|
102
|
+
"lastUpdated": "2026-07-20", "originalModel": "MiniMax M3"
|
|
103
|
+
},
|
|
104
|
+
"MiniMax-M2.7": {
|
|
105
|
+
"codingIndex": 77.5, "mathIndex": 75.0, "agenticIndex": 70.0, "reasoningIndex": 74.5,
|
|
106
|
+
"mmluPro": 80.5, "gpqa": 56.0, "hle": 11.5, "contextWindow": 192000,
|
|
107
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
108
|
+
"lastUpdated": "2026-07-20", "originalModel": "MiniMax M2.7"
|
|
109
|
+
},
|
|
110
|
+
"stepfun-ai/step-3.7-flash": {
|
|
111
|
+
"codingIndex": 73.5, "mathIndex": 74.0, "agenticIndex": 68.0, "reasoningIndex": 72.0,
|
|
112
|
+
"mmluPro": 78.0, "gpqa": 53.0, "hle": 10.5, "contextWindow": 256000,
|
|
113
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
114
|
+
"lastUpdated": "2026-07-20", "originalModel": "Step 3.7 Flash"
|
|
115
|
+
},
|
|
116
|
+
"openai/gpt-oss-120b": {
|
|
117
|
+
"codingIndex": 62.0, "mathIndex": 64.0, "agenticIndex": 58.0, "reasoningIndex": 63.0,
|
|
118
|
+
"mmluPro": 70.0, "gpqa": 52.0, "hle": 9.0, "contextWindow": 128000,
|
|
119
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
120
|
+
"lastUpdated": "2026-07-20", "originalModel": "GPT OSS 120B"
|
|
121
|
+
},
|
|
122
|
+
"gpt-oss-120b": {
|
|
123
|
+
"codingIndex": 62.0, "mathIndex": 64.0, "agenticIndex": 58.0, "reasoningIndex": 63.0,
|
|
124
|
+
"mmluPro": 70.0, "gpqa": 52.0, "hle": 9.0, "contextWindow": 128000,
|
|
125
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
126
|
+
"lastUpdated": "2026-07-20", "originalModel": "GPT OSS 120B"
|
|
127
|
+
},
|
|
128
|
+
"openai/gpt-oss-20b": {
|
|
129
|
+
"codingIndex": 50.0, "mathIndex": 52.0, "agenticIndex": 46.0, "reasoningIndex": 51.0,
|
|
130
|
+
"mmluPro": 58.0, "gpqa": 42.0, "hle": 6.5, "contextWindow": 128000,
|
|
131
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
132
|
+
"lastUpdated": "2026-07-20", "originalModel": "GPT OSS 20B"
|
|
133
|
+
},
|
|
134
|
+
"gpt-oss-20b": {
|
|
135
|
+
"codingIndex": 50.0, "mathIndex": 52.0, "agenticIndex": 46.0, "reasoningIndex": 51.0,
|
|
136
|
+
"mmluPro": 58.0, "gpqa": 42.0, "hle": 6.5, "contextWindow": 128000,
|
|
137
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
138
|
+
"lastUpdated": "2026-07-20", "originalModel": "GPT OSS 20B"
|
|
139
|
+
},
|
|
140
|
+
"meta/llama-4-maverick-17b-128e-instruct": {
|
|
141
|
+
"codingIndex": 73.5, "mathIndex": 70.0, "agenticIndex": 65.0, "reasoningIndex": 71.0,
|
|
142
|
+
"mmluPro": 78.0, "gpqa": 53.0, "hle": 10.0, "contextWindow": 1000000,
|
|
143
|
+
"supportsReasoning": false, "supportsVision": true,
|
|
144
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 4 Maverick"
|
|
145
|
+
},
|
|
146
|
+
"meta-llama/llama-4-scout-17b-16e-instruct": {
|
|
147
|
+
"codingIndex": 28.0, "mathIndex": 25.0, "agenticIndex": 22.0, "reasoningIndex": 26.0,
|
|
148
|
+
"mmluPro": 30.0, "gpqa": 18.0, "hle": 2.0, "contextWindow": 10000000,
|
|
149
|
+
"supportsReasoning": false, "supportsVision": true,
|
|
150
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 4 Scout"
|
|
151
|
+
},
|
|
152
|
+
"@cf/meta/llama-4-scout-17b-16e-instruct": {
|
|
153
|
+
"codingIndex": 28.0, "mathIndex": 25.0, "agenticIndex": 22.0, "reasoningIndex": 26.0,
|
|
154
|
+
"mmluPro": 30.0, "gpqa": 18.0, "hle": 2.0, "contextWindow": 10000000,
|
|
155
|
+
"supportsReasoning": false, "supportsVision": true,
|
|
156
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 4 Scout"
|
|
157
|
+
},
|
|
158
|
+
"meta/llama-3.3-70b-versatile": {
|
|
159
|
+
"codingIndex": 22.0, "mathIndex": 24.0, "agenticIndex": 18.0, "reasoningIndex": 23.0,
|
|
160
|
+
"mmluPro": 28.0, "gpqa": 16.0, "hle": 1.5, "contextWindow": 131072,
|
|
161
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
162
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 3.3 70B Versatile"
|
|
163
|
+
},
|
|
164
|
+
"llama-3.3-70b-versatile": {
|
|
165
|
+
"codingIndex": 22.0, "mathIndex": 24.0, "agenticIndex": 18.0, "reasoningIndex": 23.0,
|
|
166
|
+
"mmluPro": 28.0, "gpqa": 16.0, "hle": 1.5, "contextWindow": 131072,
|
|
167
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
168
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 3.3 70B Versatile"
|
|
169
|
+
},
|
|
170
|
+
"Meta-Llama-3.3-70B-Instruct": {
|
|
171
|
+
"codingIndex": 22.0, "mathIndex": 24.0, "agenticIndex": 18.0, "reasoningIndex": 23.0,
|
|
172
|
+
"mmluPro": 28.0, "gpqa": 16.0, "hle": 1.5, "contextWindow": 128000,
|
|
173
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
174
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 3.3 70B Instruct"
|
|
175
|
+
},
|
|
176
|
+
"llama-3.1-8b-instant": {
|
|
177
|
+
"codingIndex": 18.0, "mathIndex": 19.0, "agenticIndex": 14.0, "reasoningIndex": 17.0,
|
|
178
|
+
"mmluPro": 22.0, "gpqa": 12.0, "hle": 1.0, "contextWindow": 131072,
|
|
179
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
180
|
+
"lastUpdated": "2026-07-20", "originalModel": "Llama 3.1 8B Instant"
|
|
181
|
+
},
|
|
182
|
+
"qwen/qwen3.6-27b": {
|
|
183
|
+
"codingIndex": 76.5, "mathIndex": 74.0, "agenticIndex": 70.0, "reasoningIndex": 73.0,
|
|
184
|
+
"mmluPro": 79.0, "gpqa": 55.0, "hle": 11.0, "contextWindow": 131072,
|
|
185
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
186
|
+
"lastUpdated": "2026-07-20", "originalModel": "Qwen3.6 27B"
|
|
187
|
+
},
|
|
188
|
+
"qwen/qwen2.5-coder-32b-instruct": {
|
|
189
|
+
"codingIndex": 48.0, "mathIndex": 45.0, "agenticIndex": 42.0, "reasoningIndex": 44.0,
|
|
190
|
+
"mmluPro": 52.0, "gpqa": 32.0, "hle": 4.0, "contextWindow": 128000,
|
|
191
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
192
|
+
"lastUpdated": "2026-07-20", "originalModel": "Qwen2.5 Coder 32B"
|
|
193
|
+
},
|
|
194
|
+
"qwen/qwen3-30b-a3b-fp8": {
|
|
195
|
+
"codingIndex": 65.0, "mathIndex": 64.0, "agenticIndex": 58.0, "reasoningIndex": 63.0,
|
|
196
|
+
"mmluPro": 70.0, "gpqa": 48.0, "hle": 8.0, "contextWindow": 131072,
|
|
197
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
198
|
+
"lastUpdated": "2026-07-20", "originalModel": "Qwen3 30B A3B"
|
|
199
|
+
},
|
|
200
|
+
"mistralai/mistral-medium-3.5-128b": {
|
|
201
|
+
"codingIndex": 76.5, "mathIndex": 74.0, "agenticIndex": 70.5, "reasoningIndex": 73.0,
|
|
202
|
+
"mmluPro": 79.0, "gpqa": 56.0, "hle": 11.2, "contextWindow": 256000,
|
|
203
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
204
|
+
"lastUpdated": "2026-07-20", "originalModel": "Mistral Medium 3.5"
|
|
205
|
+
},
|
|
206
|
+
"mistralai/mistral-small-4-119b-2603": {
|
|
207
|
+
"codingIndex": 60.0, "mathIndex": 58.0, "agenticIndex": 55.0, "reasoningIndex": 57.0,
|
|
208
|
+
"mmluPro": 65.0, "gpqa": 44.0, "hle": 7.0, "contextWindow": 256000,
|
|
209
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
210
|
+
"lastUpdated": "2026-07-20", "originalModel": "Mistral Small 4"
|
|
211
|
+
},
|
|
212
|
+
"mistralai/mistral-large-3-675b-instruct-2512": {
|
|
213
|
+
"codingIndex": 58.0, "mathIndex": 56.0, "agenticIndex": 52.0, "reasoningIndex": 55.0,
|
|
214
|
+
"mmluPro": 63.0, "gpqa": 42.0, "hle": 6.5, "contextWindow": 256000,
|
|
215
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
216
|
+
"lastUpdated": "2026-07-20", "originalModel": "Mistral Large 675B"
|
|
217
|
+
},
|
|
218
|
+
"mistralai/ministral-14b-instruct-2512": {
|
|
219
|
+
"codingIndex": 34.0, "mathIndex": 32.0, "agenticIndex": 28.0, "reasoningIndex": 31.0,
|
|
220
|
+
"mmluPro": 38.0, "gpqa": 22.0, "hle": 3.0, "contextWindow": 32000,
|
|
221
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
222
|
+
"lastUpdated": "2026-07-20", "originalModel": "Ministral 14B"
|
|
223
|
+
},
|
|
224
|
+
"google/gemma-4-31b-it": {
|
|
225
|
+
"codingIndex": 52.0, "mathIndex": 50.0, "agenticIndex": 46.0, "reasoningIndex": 49.0,
|
|
226
|
+
"mmluPro": 58.0, "gpqa": 38.0, "hle": 5.5, "contextWindow": 256000,
|
|
227
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
228
|
+
"lastUpdated": "2026-07-20", "originalModel": "Gemma 4 31B"
|
|
229
|
+
},
|
|
230
|
+
"gemma-4-31b": {
|
|
231
|
+
"codingIndex": 52.0, "mathIndex": 50.0, "agenticIndex": 46.0, "reasoningIndex": 49.0,
|
|
232
|
+
"mmluPro": 58.0, "gpqa": 38.0, "hle": 5.5, "contextWindow": 128000,
|
|
233
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
234
|
+
"lastUpdated": "2026-07-20", "originalModel": "Gemma 4 31B"
|
|
235
|
+
},
|
|
236
|
+
"@cf/google/gemma-4-26b-a4b-it": {
|
|
237
|
+
"codingIndex": 48.0, "mathIndex": 46.0, "agenticIndex": 42.0, "reasoningIndex": 45.0,
|
|
238
|
+
"mmluPro": 54.0, "gpqa": 35.0, "hle": 5.0, "contextWindow": 128000,
|
|
239
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
240
|
+
"lastUpdated": "2026-07-20", "originalModel": "Gemma 4 26B"
|
|
241
|
+
},
|
|
242
|
+
"nvidia/nemotron-3-ultra-550b-a55b": {
|
|
243
|
+
"codingIndex": 71.0, "mathIndex": 70.0, "agenticIndex": 65.0, "reasoningIndex": 69.0,
|
|
244
|
+
"mmluPro": 75.0, "gpqa": 52.0, "hle": 9.5, "contextWindow": 1000000,
|
|
245
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
246
|
+
"lastUpdated": "2026-07-20", "originalModel": "Nemotron 3 Ultra"
|
|
247
|
+
},
|
|
248
|
+
"nvidia/nemotron-3-super-120b-a12b": {
|
|
249
|
+
"codingIndex": 60.0, "mathIndex": 59.0, "agenticIndex": 54.0, "reasoningIndex": 58.0,
|
|
250
|
+
"mmluPro": 65.0, "gpqa": 44.0, "hle": 7.0, "contextWindow": 128000,
|
|
251
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
252
|
+
"lastUpdated": "2026-07-20", "originalModel": "Nemotron 3 Super"
|
|
253
|
+
},
|
|
254
|
+
"nvidia/nemotron-3-nano-30b-a3b": {
|
|
255
|
+
"codingIndex": 38.0, "mathIndex": 36.0, "agenticIndex": 32.0, "reasoningIndex": 35.0,
|
|
256
|
+
"mmluPro": 42.0, "gpqa": 26.0, "hle": 3.5, "contextWindow": 1000000,
|
|
257
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
258
|
+
"lastUpdated": "2026-07-20", "originalModel": "Nemotron 3 Nano"
|
|
259
|
+
},
|
|
260
|
+
"bytedance/seed-oss-36b-instruct": {
|
|
261
|
+
"codingIndex": 56.0, "mathIndex": 54.0, "agenticIndex": 50.0, "reasoningIndex": 53.0,
|
|
262
|
+
"mmluPro": 60.0, "gpqa": 40.0, "hle": 6.0, "contextWindow": 32000,
|
|
263
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
264
|
+
"lastUpdated": "2026-07-20", "originalModel": "Seed OSS 36B"
|
|
265
|
+
},
|
|
266
|
+
"stockmark/stockmark-2-100b-instruct": {
|
|
267
|
+
"codingIndex": 36.0, "mathIndex": 34.0, "agenticIndex": 30.0, "reasoningIndex": 33.0,
|
|
268
|
+
"mmluPro": 40.0, "gpqa": 24.0, "hle": 3.0, "contextWindow": 32000,
|
|
269
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
270
|
+
"lastUpdated": "2026-07-20", "originalModel": "Stockmark 100B"
|
|
271
|
+
},
|
|
272
|
+
"codestral-latest": {
|
|
273
|
+
"codingIndex": 42.0, "mathIndex": 40.0, "agenticIndex": 38.0, "reasoningIndex": 39.0,
|
|
274
|
+
"mmluPro": 48.0, "gpqa": 30.0, "hle": 4.0, "contextWindow": 32000,
|
|
275
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
276
|
+
"lastUpdated": "2026-07-20", "originalModel": "Codestral Latest"
|
|
277
|
+
},
|
|
278
|
+
"qwen/qwq-32b": {
|
|
279
|
+
"codingIndex": 58.0, "mathIndex": 82.0, "agenticIndex": 50.0, "reasoningIndex": 76.0,
|
|
280
|
+
"mmluPro": 75.0, "gpqa": 64.0, "hle": 11.0, "contextWindow": 131072,
|
|
281
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
282
|
+
"lastUpdated": "2026-07-20", "originalModel": "QwQ 32B"
|
|
283
|
+
},
|
|
284
|
+
"poolside/laguna-m.1:free": {
|
|
285
|
+
"codingIndex": 72.0, "mathIndex": 68.0, "agenticIndex": 65.0, "reasoningIndex": 69.0,
|
|
286
|
+
"mmluPro": 74.0, "gpqa": 50.0, "hle": 9.5, "contextWindow": 262000,
|
|
287
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
288
|
+
"lastUpdated": "2026-07-20", "originalModel": "Poolside Laguna M.1"
|
|
289
|
+
},
|
|
290
|
+
"poolside/laguna-xs.2:free": {
|
|
291
|
+
"codingIndex": 68.0, "mathIndex": 65.0, "agenticIndex": 62.0, "reasoningIndex": 65.0,
|
|
292
|
+
"mmluPro": 70.0, "gpqa": 47.0, "hle": 8.5, "contextWindow": 262000,
|
|
293
|
+
"supportsReasoning": false, "supportsVision": false,
|
|
294
|
+
"lastUpdated": "2026-07-20", "originalModel": "Poolside Laguna XS.2"
|
|
295
|
+
},
|
|
296
|
+
"@cf/qwen/qwen3-30b-a3b-fp8": {
|
|
297
|
+
"codingIndex": 65.0, "mathIndex": 64.0, "agenticIndex": 58.0, "reasoningIndex": 63.0,
|
|
298
|
+
"mmluPro": 70.0, "gpqa": 48.0, "hle": 8.0, "contextWindow": 131072,
|
|
299
|
+
"supportsReasoning": true, "supportsVision": false,
|
|
300
|
+
"lastUpdated": "2026-07-20", "originalModel": "Qwen3 30B A3B"
|
|
301
|
+
}
|
|
302
|
+
}
|