@pfoundation/ocadvisor 26.9.1 → 26.9.2

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.
Files changed (52) hide show
  1. package/README.md +388 -46
  2. package/dist/artificialAnalysis.d.ts +4 -0
  3. package/dist/artificialAnalysis.d.ts.map +1 -0
  4. package/dist/artificialAnalysis.js +77 -0
  5. package/dist/artificialAnalysis.js.map +1 -0
  6. package/dist/benchmarkConfig.d.ts +19 -0
  7. package/dist/benchmarkConfig.d.ts.map +1 -0
  8. package/dist/benchmarkConfig.js +58 -0
  9. package/dist/benchmarkConfig.js.map +1 -0
  10. package/dist/benchmarkEvidence.d.ts +37 -0
  11. package/dist/benchmarkEvidence.d.ts.map +1 -0
  12. package/dist/benchmarkEvidence.js +81 -0
  13. package/dist/benchmarkEvidence.js.map +1 -0
  14. package/dist/benchmarkMatch.d.ts +57 -0
  15. package/dist/benchmarkMatch.d.ts.map +1 -0
  16. package/dist/benchmarkMatch.js +236 -0
  17. package/dist/benchmarkMatch.js.map +1 -0
  18. package/dist/benchmarkStore.d.ts +44 -0
  19. package/dist/benchmarkStore.d.ts.map +1 -0
  20. package/dist/benchmarkStore.js +308 -0
  21. package/dist/benchmarkStore.js.map +1 -0
  22. package/dist/benchmarkTypes.d.ts +48 -0
  23. package/dist/benchmarkTypes.d.ts.map +1 -0
  24. package/dist/benchmarkTypes.js +298 -0
  25. package/dist/benchmarkTypes.js.map +1 -0
  26. package/dist/benchmarkUpdate.d.ts +33 -0
  27. package/dist/benchmarkUpdate.d.ts.map +1 -0
  28. package/dist/benchmarkUpdate.js +327 -0
  29. package/dist/benchmarkUpdate.js.map +1 -0
  30. package/dist/cli.d.ts +13 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +377 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/data/artificialAnalysis.mappings.json +197 -0
  35. package/dist/data/artificialAnalysis.snapshot.json +17684 -0
  36. package/dist/modelProfiles.d.ts +45 -0
  37. package/dist/modelProfiles.d.ts.map +1 -0
  38. package/dist/modelProfiles.js +141 -0
  39. package/dist/modelProfiles.js.map +1 -0
  40. package/dist/ocAdvisor.d.ts +105 -5
  41. package/dist/ocAdvisor.d.ts.map +1 -1
  42. package/dist/ocAdvisor.js +502 -44
  43. package/dist/ocAdvisor.js.map +1 -1
  44. package/dist/typesafeGate.d.ts +89 -0
  45. package/dist/typesafeGate.d.ts.map +1 -0
  46. package/dist/typesafeGate.js +463 -0
  47. package/dist/typesafeGate.js.map +1 -0
  48. package/dist/typesafeState.d.ts +94 -0
  49. package/dist/typesafeState.d.ts.map +1 -0
  50. package/dist/typesafeState.js +301 -0
  51. package/dist/typesafeState.js.map +1 -0
  52. package/package.json +8 -2
package/dist/cli.js ADDED
@@ -0,0 +1,377 @@
1
+ #!/usr/bin/env bun
2
+ // ocadvisor maintenance CLI: refresh the local Artificial Analysis
3
+ // snapshot between plugin releases and inspect what the advisor gate
4
+ // sees. Thin adapters over the shared benchmark modules; intentionally
5
+ // disconnected from the plugin and the TypeSafe client.
6
+ //
7
+ // Exit codes: 0 success; 1 update failed, no usable snapshot, or model
8
+ // unresolved; 2 usage error.
9
+ import { readFileSync } from "node:fs";
10
+ import { dirname, join } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ import { resolveBenchmarkPaths, } from "./benchmarkConfig.js";
13
+ import { RECOGNIZED_METRICS, } from "./benchmarkTypes.js";
14
+ import { createBenchmarkStore } from "./benchmarkStore.js";
15
+ import { updateBenchmarkSnapshot } from "./benchmarkUpdate.js";
16
+ const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
+ const DAY_MS = 24 * 60 * 60 * 1000;
18
+ function readPackageVersion() {
19
+ try {
20
+ const parsed = JSON.parse(readFileSync(join(MODULE_DIR, "..", "package.json"), "utf8"));
21
+ if (parsed &&
22
+ typeof parsed === "object" &&
23
+ typeof parsed.version === "string") {
24
+ return parsed.version;
25
+ }
26
+ }
27
+ catch { }
28
+ return "unknown";
29
+ }
30
+ const GLOBAL_HELP = `ocadvisor — benchmark-aware advisor maintenance
31
+
32
+ Usage:
33
+ ocadvisor benchmarks update [--path <file>]
34
+ ocadvisor benchmarks status [--path <file>] [--mappings-path <file>] [--model <provider/model#variant>]
35
+ ocadvisor --help | --version
36
+
37
+ Exit codes: 0 success; 1 update failed, no usable snapshot, or model
38
+ unresolved; 2 usage error.
39
+
40
+ Benchmark data: Artificial Analysis (https://artificialanalysis.ai/).`;
41
+ const UPDATE_HELP = `ocadvisor benchmarks update — refresh the local snapshot
42
+
43
+ Usage:
44
+ ocadvisor benchmarks update [--path <file>]
45
+
46
+ Fetches the Artificial Analysis models endpoint once using
47
+ ARTIFICIAL_ANALYSIS_API_KEY and atomically replaces the snapshot file.
48
+ Custom --path values must be absolute; the default lives under the
49
+ platform data directory. Prints the published path, model count,
50
+ coverage, and content hash on success.
51
+
52
+ Exit codes: 0 published; 1 fetch, validation, or write failure;
53
+ 2 usage error.`;
54
+ const STATUS_HELP = `ocadvisor benchmarks status — inspect on-disk benchmark data
55
+
56
+ Usage:
57
+ ocadvisor benchmarks status [--path <file>] [--mappings-path <file>] [--model <provider/model#variant>]
58
+
59
+ Reports the active snapshot and mappings files without network access.
60
+ With --model, resolves one exact provider/model/variant tuple against
61
+ the active data and prints its match or why it is unmatched. Status
62
+ describes on-disk candidates; a running plugin may still hold an older
63
+ in-memory copy until its next consultation.
64
+
65
+ Testing-only flags (not part of the documented surface):
66
+ --seed-snapshot <file> and --seed-mappings <file> point the fallback
67
+ seed elsewhere, which is useful for deterministic tests.
68
+
69
+ Exit codes: 0 usable snapshot (and model resolved, when requested);
70
+ 1 no usable snapshot or model unresolved; 2 usage error.
71
+
72
+ Benchmark data: Artificial Analysis (https://artificialanalysis.ai/).`;
73
+ function parseFlags(args, allowed) {
74
+ const values = {};
75
+ for (let index = 0; index < args.length; index++) {
76
+ const arg = args[index];
77
+ if (!arg.startsWith("--")) {
78
+ return { ok: false, message: `unexpected argument: ${arg}` };
79
+ }
80
+ const equals = arg.indexOf("=");
81
+ const name = equals >= 0 ? arg.slice(0, equals) : arg;
82
+ if (!allowed.includes(name)) {
83
+ return { ok: false, message: `unknown flag: ${name}` };
84
+ }
85
+ const key = name.slice("--".length);
86
+ if (equals >= 0) {
87
+ values[key] = arg.slice(equals + 1);
88
+ continue;
89
+ }
90
+ const next = args[index + 1];
91
+ if (next === undefined || next.startsWith("--")) {
92
+ return { ok: false, message: `flag ${name} needs a value` };
93
+ }
94
+ values[key] = next;
95
+ index++;
96
+ }
97
+ return { ok: true, values };
98
+ }
99
+ export function parseModelCoordinate(value) {
100
+ const text = value.trim();
101
+ const slash = text.indexOf("/");
102
+ if (slash <= 0 || slash === text.length - 1) {
103
+ return {
104
+ error: "--model expects provider/model#variant (variant optional)",
105
+ };
106
+ }
107
+ const providerID = text.slice(0, slash).trim();
108
+ let rest = text.slice(slash + 1).trim();
109
+ if (!providerID || !rest) {
110
+ return {
111
+ error: "--model expects provider/model#variant (variant optional)",
112
+ };
113
+ }
114
+ let variant = null;
115
+ const hash = rest.indexOf("#");
116
+ if (hash >= 0) {
117
+ variant = rest.slice(hash + 1).trim();
118
+ rest = rest.slice(0, hash).trim();
119
+ if (!rest || !variant || variant.includes("#")) {
120
+ return {
121
+ error: "--model expects provider/model#variant (variant optional)",
122
+ };
123
+ }
124
+ }
125
+ if (!rest || /[\s]/.test(providerID) || /[\s]/.test(rest)) {
126
+ return {
127
+ error: "--model expects provider/model#variant (variant optional)",
128
+ };
129
+ }
130
+ return { providerID, modelID: rest, variant };
131
+ }
132
+ const SHORT_METRIC_LABELS = {
133
+ artificial_analysis_coding_index: "coding_index",
134
+ artificial_analysis_intelligence_index: "intelligence_index",
135
+ hle: "hle",
136
+ gpqa: "gpqa",
137
+ artificial_analysis_math_index: "math_index",
138
+ };
139
+ function shortMetricLabel(key) {
140
+ return SHORT_METRIC_LABELS[key] ?? key;
141
+ }
142
+ function coverageLine(snapshot) {
143
+ if (!snapshot)
144
+ return "models: 0";
145
+ const counts = RECOGNIZED_METRICS.map((metric) => {
146
+ const count = snapshot.models.filter((model) => typeof model.evaluations[metric.key] === "number").length;
147
+ return `${shortMetricLabel(metric.key)}: ${count}`;
148
+ });
149
+ return `models: ${snapshot.models.length} (${counts.join(", ")})`;
150
+ }
151
+ function ageLine(fetchedAt, nowMs) {
152
+ if (!fetchedAt)
153
+ return null;
154
+ const parsed = Date.parse(fetchedAt);
155
+ if (!Number.isFinite(parsed))
156
+ return null;
157
+ const days = (nowMs - parsed) / DAY_MS;
158
+ if (days < 0)
159
+ return `${fetchedAt} (in the future)`;
160
+ return `${fetchedAt} (${days.toFixed(1)} days ago)`;
161
+ }
162
+ function matchLines(coordinate, match) {
163
+ switch (match.status) {
164
+ case "matched":
165
+ case "effort_unknown": {
166
+ const scores = Object.entries(match.record?.evaluations ?? {})
167
+ .filter((entry) => typeof entry[1] === "number")
168
+ .map(([key, value]) => `${shortMetricLabel(key)}=${value}`)
169
+ .join(", ");
170
+ const lines = [
171
+ `model: ${coordinate}`,
172
+ ` match: ${match.status} (${match.source ?? "unknown"})`,
173
+ ` aa_model: ${match.aaModelID ?? "unknown"}`,
174
+ ` evaluated_effort: ${match.evaluatedEffort ?? "unknown"}`,
175
+ ` scores: ${scores || "none"}`,
176
+ ];
177
+ if (match.status === "effort_unknown") {
178
+ lines.push(" note: evaluation effort is unreported for this binding");
179
+ }
180
+ return { lines, resolved: true };
181
+ }
182
+ case "unmapped":
183
+ return {
184
+ lines: [
185
+ `model: ${coordinate}`,
186
+ " match: unmapped (no binding for this exact provider/model/variant)",
187
+ ],
188
+ resolved: false,
189
+ };
190
+ case "missing_record":
191
+ return {
192
+ lines: [
193
+ `model: ${coordinate}`,
194
+ ` match: missing_record (binding points at ${match.aaModelID ?? "unknown"}, not in this snapshot)`,
195
+ ],
196
+ resolved: false,
197
+ };
198
+ case "unavailable":
199
+ default:
200
+ return {
201
+ lines: [
202
+ `model: ${coordinate}`,
203
+ " match: unavailable (no usable snapshot)",
204
+ ],
205
+ resolved: false,
206
+ };
207
+ }
208
+ }
209
+ async function benchmarksUpdate(args, deps, env) {
210
+ const parsed = parseFlags(args, ["--path"]);
211
+ if (!parsed.ok) {
212
+ deps.err(`ocadvisor: ${parsed.message}\n${UPDATE_HELP}`);
213
+ return 2;
214
+ }
215
+ const explicit = {};
216
+ if (parsed.values.path !== undefined)
217
+ explicit.path = parsed.values.path;
218
+ const paths = resolveBenchmarkPaths(explicit, env);
219
+ if ("error" in paths) {
220
+ deps.err(`ocadvisor: ${paths.error}`);
221
+ return 2;
222
+ }
223
+ const result = await updateBenchmarkSnapshot(paths.snapshotPath, {
224
+ fetchImpl: deps.fetchImpl,
225
+ env,
226
+ });
227
+ if (!result.ok) {
228
+ deps.err(`benchmarks update failed (${result.code}): ${result.message}`);
229
+ return 1;
230
+ }
231
+ const coverage = RECOGNIZED_METRICS.map((metric) => `${shortMetricLabel(metric.key)}: ${result.metricCoverage[metric.key] ?? 0}`).join(", ");
232
+ deps.out([
233
+ `benchmarks updated: ${result.path}`,
234
+ ` fetched_at: ${result.fetchedAt}`,
235
+ ` models: ${result.modelCount} (${coverage})`,
236
+ ` content_hash: ${result.contentHash}`,
237
+ ` unchanged: ${result.unchanged}`,
238
+ "Benchmark data: Artificial Analysis (https://artificialanalysis.ai/).",
239
+ ].join("\n"));
240
+ return 0;
241
+ }
242
+ async function benchmarksStatus(args, deps, env) {
243
+ const parsed = parseFlags(args, [
244
+ "--path",
245
+ "--mappings-path",
246
+ "--model",
247
+ "--seed-snapshot",
248
+ "--seed-mappings",
249
+ ]);
250
+ if (!parsed.ok) {
251
+ deps.err(`ocadvisor: ${parsed.message}\n${STATUS_HELP}`);
252
+ return 2;
253
+ }
254
+ const explicit = {};
255
+ if (parsed.values.path !== undefined)
256
+ explicit.path = parsed.values.path;
257
+ if (parsed.values["mappings-path"] !== undefined) {
258
+ explicit.mappingsPath = parsed.values["mappings-path"];
259
+ }
260
+ const resolved = resolveBenchmarkPaths(explicit, env);
261
+ if ("error" in resolved) {
262
+ deps.err(`ocadvisor: ${resolved.error}`);
263
+ return 2;
264
+ }
265
+ let coordinate = null;
266
+ let coordinateText = null;
267
+ if (parsed.values.model !== undefined) {
268
+ coordinateText = parsed.values.model;
269
+ const coordinateParsed = parseModelCoordinate(parsed.values.model);
270
+ if ("error" in coordinateParsed) {
271
+ deps.err(`ocadvisor: ${coordinateParsed.error}`);
272
+ return 2;
273
+ }
274
+ coordinate = coordinateParsed;
275
+ }
276
+ const store = await createBenchmarkStore({
277
+ snapshotPath: resolved.snapshotPath,
278
+ mappingsPath: resolved.mappingsPath,
279
+ // Seed overrides exist for testing the fallback path; ordinary use
280
+ // reads the bundled data relative to this module.
281
+ seedSnapshotPath: parsed.values["seed-snapshot"],
282
+ seedMappingsPath: parsed.values["seed-mappings"],
283
+ });
284
+ const view = await store.view();
285
+ const lines = ["benchmarks status (on-disk snapshot and mappings)"];
286
+ if (view.snapshotSource === "user") {
287
+ lines.push(` snapshot: user ${resolved.snapshotPath}`);
288
+ }
289
+ else if (view.snapshotSource === "seed") {
290
+ lines.push(" snapshot: bundled seed");
291
+ }
292
+ else {
293
+ lines.push(" snapshot: unavailable");
294
+ }
295
+ const age = ageLine(view.snapshot?.fetchedAt ?? null, deps.nowMs);
296
+ if (age)
297
+ lines.push(` fetched_at: ${age}`);
298
+ lines.push(` ${coverageLine(view.snapshot)}`);
299
+ if (view.snapshot) {
300
+ lines.push(` content_hash: ${view.snapshot.contentHash}`);
301
+ }
302
+ const localCount = view.localMappings?.bindings.length ?? 0;
303
+ const bundledCount = view.bundledMappings.bindings.length;
304
+ lines.push(` mappings: ${localCount} local, ${bundledCount} bundled`);
305
+ for (const note of [
306
+ view.snapshotNote,
307
+ view.localMappingsNote,
308
+ view.bundledMappingsNote,
309
+ ]) {
310
+ if (note)
311
+ lines.push(` note: ${note}`);
312
+ }
313
+ lines.push("Benchmark data: Artificial Analysis (https://artificialanalysis.ai/).");
314
+ if (coordinate && coordinateText) {
315
+ // Resolve against the same active data the plugin would use.
316
+ const { lines: modelLines, resolved: modelResolved } = matchLines(coordinateText, view.matcher.match(coordinate));
317
+ lines.push(...modelLines);
318
+ deps.out(lines.join("\n"));
319
+ return view.snapshot && modelResolved ? 0 : 1;
320
+ }
321
+ deps.out(lines.join("\n"));
322
+ return view.snapshot ? 0 : 1;
323
+ }
324
+ export async function runCli(argv, deps = {}) {
325
+ const out = deps.out ?? ((line) => console.log(line));
326
+ const err = deps.err ?? ((line) => console.error(line));
327
+ const env = deps.env ?? process.env;
328
+ const full = {
329
+ out,
330
+ err,
331
+ env,
332
+ fetchImpl: deps.fetchImpl,
333
+ nowMs: deps.nowMs ?? Date.now(),
334
+ };
335
+ if (argv.includes("--help") || argv.includes("-h") || argv[0] === "help") {
336
+ if (argv[0] === "benchmarks" && argv[1] === "update") {
337
+ out(UPDATE_HELP);
338
+ }
339
+ else if (argv[0] === "benchmarks" && argv[1] === "status") {
340
+ out(STATUS_HELP);
341
+ }
342
+ else {
343
+ out(GLOBAL_HELP);
344
+ }
345
+ return 0;
346
+ }
347
+ if (argv[0] === "--version") {
348
+ out(`ocadvisor ${readPackageVersion()}`);
349
+ return 0;
350
+ }
351
+ if (argv.length === 0 || argv[0] === "benchmarks") {
352
+ if (argv.length <= 1) {
353
+ out(GLOBAL_HELP);
354
+ return 0;
355
+ }
356
+ const [command, ...rest] = argv.slice(1);
357
+ if (command === "update")
358
+ return benchmarksUpdate(rest, full, env);
359
+ if (command === "status")
360
+ return benchmarksStatus(rest, full, env);
361
+ err(`ocadvisor: unknown benchmarks command: ${command}\n${GLOBAL_HELP}`);
362
+ return 2;
363
+ }
364
+ err(`ocadvisor: unknown command: ${argv[0]}\n${GLOBAL_HELP}`);
365
+ return 2;
366
+ }
367
+ if (import.meta.main) {
368
+ const code = await runCli(process.argv.slice(2), {
369
+ out: (line) => console.log(line),
370
+ err: (line) => console.error(line),
371
+ }).catch((error) => {
372
+ console.error(`ocadvisor: unexpected failure: ${error instanceof Error ? error.message : String(error)}`);
373
+ return 1;
374
+ });
375
+ process.exit(code);
376
+ }
377
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "bindings": [
4
+ {
5
+ "providerID": "anthropic",
6
+ "modelID": "claude-fable-5-1",
7
+ "variant": "max",
8
+ "aaModelID": "3e87c73e-a257-495e-9730-367a66229811",
9
+ "evaluatedEffort": "max",
10
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-fable-5-1"
11
+ },
12
+ {
13
+ "providerID": "anthropic",
14
+ "modelID": "claude-fable-5-1",
15
+ "variant": "xhigh",
16
+ "aaModelID": "9b166bf3-42db-4f63-8338-1c4a1244ffe8",
17
+ "evaluatedEffort": "xhigh",
18
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-fable-5-1-xhigh"
19
+ },
20
+ {
21
+ "providerID": "anthropic",
22
+ "modelID": "claude-fable-5-1",
23
+ "variant": "high",
24
+ "aaModelID": "9d7d72cd-d95d-45a0-b109-4ad292c9aabd",
25
+ "evaluatedEffort": "high",
26
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-fable-5-1-high"
27
+ },
28
+ {
29
+ "providerID": "anthropic",
30
+ "modelID": "claude-fable-5-1",
31
+ "variant": null,
32
+ "aaModelID": "3e87c73e-a257-495e-9730-367a66229811",
33
+ "evaluatedEffort": "max",
34
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-fable-5-1"
35
+ },
36
+ {
37
+ "providerID": "anthropic",
38
+ "modelID": "claude-opus-5",
39
+ "variant": null,
40
+ "aaModelID": "b8fc61f7-5e9a-49e6-8547-6ac56db24627",
41
+ "evaluatedEffort": "max",
42
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-opus-5"
43
+ },
44
+ {
45
+ "providerID": "anthropic",
46
+ "modelID": "claude-opus-5",
47
+ "variant": "max",
48
+ "aaModelID": "b8fc61f7-5e9a-49e6-8547-6ac56db24627",
49
+ "evaluatedEffort": "max",
50
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-opus-5"
51
+ },
52
+ {
53
+ "providerID": "anthropic",
54
+ "modelID": "claude-opus-5",
55
+ "variant": "xhigh",
56
+ "aaModelID": "1305c921-7aaa-4d6d-99b5-99b3acf15e19",
57
+ "evaluatedEffort": "xhigh",
58
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-opus-5-xhigh"
59
+ },
60
+ {
61
+ "providerID": "anthropic",
62
+ "modelID": "claude-opus-5",
63
+ "variant": "high",
64
+ "aaModelID": "712be54a-77ae-41b2-9a58-21181479d6ee",
65
+ "evaluatedEffort": "high",
66
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-opus-5-high"
67
+ },
68
+ {
69
+ "providerID": "anthropic",
70
+ "modelID": "claude-opus-4-8",
71
+ "variant": null,
72
+ "aaModelID": "992b7b84-5069-4c6a-9295-834252553d50",
73
+ "evaluatedEffort": "max",
74
+ "evidenceURL": "https://artificialanalysis.ai/models/claude-opus-4-8"
75
+ },
76
+ {
77
+ "providerID": "openai",
78
+ "modelID": "gpt-6-astra",
79
+ "variant": null,
80
+ "aaModelID": "2f339a97-9a0d-499a-9cb5-e0db665bfa25",
81
+ "evaluatedEffort": "max",
82
+ "evidenceURL": "https://artificialanalysis.ai/models/gpt-6-astra"
83
+ },
84
+ {
85
+ "providerID": "openai",
86
+ "modelID": "gpt-6-astra",
87
+ "variant": "max",
88
+ "aaModelID": "2f339a97-9a0d-499a-9cb5-e0db665bfa25",
89
+ "evaluatedEffort": "max",
90
+ "evidenceURL": "https://artificialanalysis.ai/models/gpt-6-astra"
91
+ },
92
+ {
93
+ "providerID": "openai",
94
+ "modelID": "gpt-6-astra",
95
+ "variant": "xhigh",
96
+ "aaModelID": "1f541ef3-913f-4eb2-9d07-0e93c7a9a5e3",
97
+ "evaluatedEffort": "xhigh",
98
+ "evidenceURL": "https://artificialanalysis.ai/models/gpt-6-astra-xhigh"
99
+ },
100
+ {
101
+ "providerID": "openai",
102
+ "modelID": "gpt-6-astra",
103
+ "variant": "high",
104
+ "aaModelID": "e05a4828-0536-4876-870d-a235023f992b",
105
+ "evaluatedEffort": "high",
106
+ "evidenceURL": "https://artificialanalysis.ai/models/gpt-6-astra-high"
107
+ },
108
+ {
109
+ "providerID": "meta",
110
+ "modelID": "muse-spark-1.3",
111
+ "variant": null,
112
+ "aaModelID": "9999672c-b687-4026-9c15-5cef02ff53bb",
113
+ "evaluatedEffort": "max",
114
+ "evidenceURL": "https://artificialanalysis.ai/models/muse-spark-1-3"
115
+ },
116
+ {
117
+ "providerID": "meta",
118
+ "modelID": "muse-spark-1.3",
119
+ "variant": "max",
120
+ "aaModelID": "9999672c-b687-4026-9c15-5cef02ff53bb",
121
+ "evaluatedEffort": "max",
122
+ "evidenceURL": "https://artificialanalysis.ai/models/muse-spark-1-3"
123
+ },
124
+ {
125
+ "providerID": "meta",
126
+ "modelID": "muse-spark-1.3",
127
+ "variant": "xhigh",
128
+ "aaModelID": "d5170215-69be-4129-849b-26d8d8825bfc",
129
+ "evaluatedEffort": "xhigh",
130
+ "evidenceURL": "https://artificialanalysis.ai/models/muse-spark-1-3-xhigh"
131
+ },
132
+ {
133
+ "providerID": "xai",
134
+ "modelID": "grok-4.6",
135
+ "variant": null,
136
+ "aaModelID": "c8adc5cf-fd5a-407b-af51-dc3bede3e49c",
137
+ "evaluatedEffort": "high",
138
+ "evidenceURL": "https://artificialanalysis.ai/models/grok-4-6"
139
+ },
140
+ {
141
+ "providerID": "xai",
142
+ "modelID": "grok-4.6",
143
+ "variant": "high",
144
+ "aaModelID": "c8adc5cf-fd5a-407b-af51-dc3bede3e49c",
145
+ "evaluatedEffort": "high",
146
+ "evidenceURL": "https://artificialanalysis.ai/models/grok-4-6"
147
+ },
148
+ {
149
+ "providerID": "xai",
150
+ "modelID": "grok-4.6",
151
+ "variant": "xhigh",
152
+ "aaModelID": "d6f43d0a-e8c4-447c-9ff7-5cf0a9d59aa3",
153
+ "evaluatedEffort": "xhigh",
154
+ "evidenceURL": "https://artificialanalysis.ai/models/grok-4-6-xhigh"
155
+ },
156
+ {
157
+ "providerID": "deepseek",
158
+ "modelID": "deepseek-v4-pro",
159
+ "variant": null,
160
+ "aaModelID": "83173329-c09a-41f1-a028-a282a5f908d7",
161
+ "evaluatedEffort": "max",
162
+ "evidenceURL": "https://artificialanalysis.ai/models/deepseek-v4-pro"
163
+ },
164
+ {
165
+ "providerID": "deepseek",
166
+ "modelID": "deepseek-v4-pro",
167
+ "variant": "max",
168
+ "aaModelID": "83173329-c09a-41f1-a028-a282a5f908d7",
169
+ "evaluatedEffort": "max",
170
+ "evidenceURL": "https://artificialanalysis.ai/models/deepseek-v4-pro"
171
+ },
172
+ {
173
+ "providerID": "deepseek",
174
+ "modelID": "deepseek-v4-1-flash",
175
+ "variant": null,
176
+ "aaModelID": "dbe7c625-3100-4463-b479-a228c41f75dd",
177
+ "evaluatedEffort": "max",
178
+ "evidenceURL": "https://artificialanalysis.ai/models/deepseek-v4-1-flash"
179
+ },
180
+ {
181
+ "providerID": "moonshot",
182
+ "modelID": "kimi-k3",
183
+ "variant": null,
184
+ "aaModelID": "f7d2fc3e-1f7b-405f-818c-07952a4af78f",
185
+ "evaluatedEffort": "max",
186
+ "evidenceURL": "https://artificialanalysis.ai/models/kimi-k3"
187
+ },
188
+ {
189
+ "providerID": "zhipu",
190
+ "modelID": "glm-5.3",
191
+ "variant": null,
192
+ "aaModelID": "cd684ea4-b475-4269-b001-d469d06d8a7a",
193
+ "evaluatedEffort": "max",
194
+ "evidenceURL": "https://artificialanalysis.ai/models/glm-5-3"
195
+ }
196
+ ]
197
+ }