Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
386 changes: 193 additions & 193 deletions data/artificial-analysis-index.json

Large diffs are not rendered by default.

270 changes: 135 additions & 135 deletions data/data-health.json

Large diffs are not rendered by default.

202 changes: 101 additions & 101 deletions docs/DATA-HEALTH.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions docs/DATA-TRUST.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ The localized, reader-facing source policy is published under `content/docs/*/da

## Model catalog inclusion

Intelligence Index entries use the highest-scoring measured configuration of each exact model version. When only estimated results are available, the highest-scoring estimate is retained with `estimated: true`; missing results are not replaced with zero. Reasoning settings may be compared within a model, but distinct checkpoints and text/vision releases remain separate. All entries use the index version and observation date recorded in `data/artificial-analysis-index.json`; scores from different index versions are not directly comparable.

Every new model catalog entry must have a published Artificial Analysis Intelligence Index result compatible with the index version tracked in `data/artificial-analysis-index.json`. Artificial Analysis Coding Agent Index, Agentic Index, individual benchmark scores, and provider-only measurements are different metrics and must not be substituted or mixed into the model Intelligence Index.

`legacyMissingModelIds` records the fixed baseline of older catalog models that do not yet meet this requirement. The list may shrink when a compatible result becomes available, but must not grow. Tests reject newly added model manifests without a matching Intelligence Index entry.
Expand Down
5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,8 @@
".": "9.0.2",
"glob": "12.0.0"
},
"next": {
"sharp": "0.35.2"
},
"sharp": "0.35.4",
"js-yaml@^3.0.0": "3.15.2",
"postcss": "^8.5.19"
},
"browserslist": [
Expand Down
298 changes: 154 additions & 144 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ packages:
overrides:
# OpenNext 1.20 requires the v8 minifier API.
'@node-minify/core': 8.0.5
# Next 16.2.12 still permits vulnerable transitive versions.
'next>sharp': 0.35.2
# Pin patched transitive versions used by Next, Miniflare, and gray-matter.
sharp: 0.35.4
'js-yaml@3': 3.15.2
fast-uri: 3.1.6
postcss: ^8.5.19

Expand All @@ -19,5 +20,6 @@ allowBuilds:
minimumReleaseAgeExclude:
- fast-uri@3.1.6
- brace-expansion@5.0.9
- js-yaml@3.15.1
- js-yaml@3.15.2
- sharp@0.35.4
- nanoid@3.3.18
70 changes: 35 additions & 35 deletions tests/model-intelligence-index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,20 +197,20 @@ describe('model intelligence index', () => {
point.configuration,
])
).toEqual([
['qwen3-6-max-preview', 41, true, 'Qwen3.6 Max Preview'],
['qwen3-7-max', 47, false, 'Qwen3.7 Max'],
['qwen3-8-max', 58, false, 'Qwen3.8 Max'],
['qwen3-6-max-preview', 28, true, 'Qwen3.6 Max Preview'],
['qwen3-7-max', 30, false, 'Qwen3.7 Max'],
['qwen3-8-max', 40, false, 'Qwen3.8 Max'],
])
expect(qwenSeries[3]?.points.find(point => point.modelId === 'qwen3-8-27b')).toMatchObject({
modelId: 'qwen3-8-27b',
score: 52,
score: 34,
estimated: false,
configuration: 'Qwen3.8 27B (xhigh)',
})
expect(qwenSeries[3]?.points.at(-1)).toMatchObject({
modelId: 'qwen3-8-flash-next',
score: 56,
estimated: false,
score: 42,
estimated: true,
configuration: 'Qwen3.8-Flash-Next',
})
})
Expand All @@ -222,7 +222,7 @@ describe('model intelligence index', () => {

expect(grokSeries?.points.at(-1)).toMatchObject({
modelId: 'grok-4-6',
score: 61,
score: 44,
estimated: false,
configuration: 'Grok 4.6 (high)',
})
Expand All @@ -245,7 +245,7 @@ describe('model intelligence index', () => {
])
expect(claudeSeries[3]?.points.at(-1)).toMatchObject({
modelId: 'claude-fable-5-1',
score: 66,
score: 53,
estimated: false,
configuration: 'Claude Fable 5.1 (Adaptive Reasoning, Max Effort, Default Fallback)',
})
Expand All @@ -267,7 +267,7 @@ describe('model intelligence index', () => {
expect(openAISeries.find(series => series.name === 'GPT (Astra)')?.points).toEqual([
expect.objectContaining({
modelId: 'gpt-6-astra',
score: 61,
score: 53,
estimated: false,
configuration: 'GPT-6 Astra (max)',
}),
Expand All @@ -281,7 +281,7 @@ describe('model intelligence index', () => {

expect(museSeries?.points.at(-1)).toMatchObject({
modelId: 'muse-spark-1-3',
score: 62,
score: 48,
estimated: false,
configuration: 'Muse Spark 1.3 (max)',
})
Expand All @@ -307,8 +307,8 @@ describe('model intelligence index', () => {
'deepseek-v4-pro',
])
expect(deepSeekSeries[0]?.points.slice(-2).map(point => [point.modelId, point.score])).toEqual([
['deepseek-v4-pro-preview', 45],
['deepseek-v4-pro', 53],
['deepseek-v4-pro-preview', 31],
['deepseek-v4-pro', 36],
])
expect(
deepSeekSeries[1]?.points.map(point => [
Expand All @@ -318,9 +318,9 @@ describe('model intelligence index', () => {
point.configuration,
])
).toEqual([
['deepseek-v4-flash-preview', 42, false, 'DeepSeek V4 Flash (Reasoning, Max Effort)'],
['deepseek-v4-flash', 52, false, 'DeepSeek V4 Flash 0731 (max)'],
['deepseek-v4-flash-vision', 51, false, 'DeepSeek V4 Flash Vision (max)'],
['deepseek-v4-flash-preview', 25, false, 'DeepSeek V4 Flash (Reasoning, High Effort)'],
['deepseek-v4-flash', 35, false, 'DeepSeek V4 Flash 0731 (Reasoning, Max Effort)'],
['deepseek-v4-flash-vision', 35, false, 'DeepSeek V4 Flash Vision (Reasoning, Max Effort)'],
])
})

Expand All @@ -341,7 +341,7 @@ describe('model intelligence index', () => {
])
expect(geminiSeries[1]?.points.at(-1)).toMatchObject({
modelId: 'gemini-3-8-flash',
score: 59,
score: 41,
estimated: false,
configuration: 'Gemini 3.8 Flash (high)',
})
Expand Down Expand Up @@ -503,39 +503,39 @@ describe('model intelligence index', () => {
.map(point => [point.modelId, point.score, point.estimated])

expect(haikuPoints).toEqual([
['claude-haiku-3', 3, true],
['claude-haiku-3-5', 12, true],
['claude-haiku-4-5', 24, true],
['claude-haiku-3', 6, true],
['claude-haiku-3-5', 9, true],
['claude-haiku-4-5', 18, false],
])

expect(
allModelIntelligencePoints
.filter(point => point.modelId.startsWith('deepseek-r1'))
.map(point => [point.modelId, point.score])
).toEqual([
['deepseek-r1', 19],
['deepseek-r1-0528', 20],
['deepseek-r1', 11],
['deepseek-r1-0528', 13],
])

expect(
allModelIntelligencePoints
.filter(point => point.vendor === 'Z.ai')
.map(point => [point.modelId, point.series, point.score])
).toEqual([
['glm-4-5', 'GLM', 20],
['glm-4-5-air', 'GLM Air / Flash', 17],
['glm-4-5v', 'GLM Vision', 7],
['glm-4-6', 'GLM', 23],
['glm-4-5', 'GLM', 13],
['glm-4-5-air', 'GLM Air / Flash', 11],
['glm-4-5v', 'GLM Vision', 8],
['glm-4-6', 'GLM', 19],
['glm-4-6v', 'GLM Vision', 11],
['glm-4-7', 'GLM', 34],
['glm-4-7-flash', 'GLM Air / Flash', 23],
['glm-5', 'GLM', 41],
['glm-5-turbo', 'GLM Turbo', 39],
['glm-5v-turbo', 'GLM Vision', 35],
['glm-5-1', 'GLM', 41],
['glm-5-2', 'GLM', 53],
['glm-5-3', 'GLM', 60],
['glm-5-3-flash', 'GLM Air / Flash', 57],
['glm-4-7', 'GLM', 22],
['glm-4-7-flash', 'GLM Air / Flash', 15],
['glm-5', 'GLM', 28],
['glm-5-turbo', 'GLM Turbo', 27],
['glm-5v-turbo', 'GLM Vision', 23],
['glm-5-1', 'GLM', 27],
['glm-5-2', 'GLM', 39],
['glm-5-3', 'GLM', 45],
['glm-5-3-flash', 'GLM Air / Flash', 42],
])
})

Expand All @@ -546,7 +546,7 @@ describe('model intelligence index', () => {
expect(modelIntelligenceMeta.methodologyUrl).toBe(
'https://artificialanalysis.ai/methodology/intelligence-benchmarking'
)
expect(modelIntelligenceMeta.indexVersion).toBe('4.1.1')
expect(modelIntelligenceMeta.indexVersion).toBe('4.3')
expect(modelIntelligenceMeta.observedAt).toMatch(/^\d{4}-\d{2}-\d{2}$/)
})
})
2 changes: 1 addition & 1 deletion tests/model-price-intelligence-index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ describe('model price-intelligence index', () => {
)

const hy3 = modelPriceIntelligencePoints.find(point => point.modelId === 'hy3')
expect(hy3).toMatchObject({ inputPrice: 0.14, outputPrice: 0.58, score: 42 })
expect(hy3).toMatchObject({ inputPrice: 0.14, outputPrice: 0.58, score: 26 })
expect(hy3?.blendedPrice).toBeCloseTo(0.184)
})

Expand Down
Loading