Skip to content

Commit 342fe2e

Browse files
committed
fix(rankings): refine model series line styles
1 parent e15ab72 commit 342fe2e

3 files changed

Lines changed: 52 additions & 24 deletions

File tree

manifests/vendors/mistral-ai.json

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,23 @@
99
},
1010
"modelSeries": [
1111
{
12-
"id": "devstral",
13-
"name": "Devstral",
14-
"modelIds": ["devstral-2", "devstral-small-2"]
12+
"id": "devstral-2",
13+
"name": "Devstral 2",
14+
"modelIds": ["devstral-2"]
1515
},
1616
{
17-
"id": "mistral-medium",
18-
"name": "Mistral Medium",
17+
"id": "devstral-small-2",
18+
"name": "Devstral Small 2",
19+
"modelIds": ["devstral-small-2"]
20+
},
21+
{
22+
"id": "mistral-medium-3-5",
23+
"name": "Mistral Medium 3.5",
1924
"modelIds": ["mistral-medium-3-5"]
2025
},
2126
{
22-
"id": "mistral-small",
23-
"name": "Mistral Small",
27+
"id": "mistral-small-4",
28+
"name": "Mistral Small 4",
2429
"modelIds": ["mistral-small-4"]
2530
}
2631
],
@@ -68,9 +73,9 @@
6873
"fields": ["name", "description", "websiteUrl"]
6974
},
7075
{
71-
"url": "https://mistral.ai/models/",
72-
"title": "Mistral models",
73-
"fields": ["description"]
76+
"url": "https://docs.mistral.ai/models",
77+
"title": "Mistral model catalog",
78+
"fields": ["description", "modelSeries"]
7479
},
7580
{
7681
"url": "https://github.com/mistralai",
@@ -83,7 +88,7 @@
8388
"fields": ["communityUrls.blog"]
8489
}
8590
],
86-
"lastVerifiedAt": "2026-07-21",
91+
"lastVerifiedAt": "2026-07-30",
8792
"verifiedBy": "codex",
8893
"confidence": "high",
8994
"websiteUrl": "https://mistral.ai",

src/lib/model-intelligence-index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ const sortedSeries = Array.from(groupedSeries.values())
158158
)
159159

160160
const seriesIndexByVendor = new Map<string, number>()
161-
const DASH_PATTERNS = [null, '6 4', '10 4 2 4', '2 4']
161+
const DASH_PATTERNS = [null, '6 4', '2 4', '10 4 2 4']
162162
const MARKERS: ModelIntelligenceMarker[] = [
163163
'circle',
164164
'square',

tests/model-intelligence-index.test.ts

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ describe('model intelligence index', () => {
150150
})
151151

152152
it('assigns each vendor series the shared line-style priority', () => {
153-
const expectedDashPatterns = [null, '6 4', '10 4 2 4', '2 4']
153+
const expectedDashPatterns = [null, '6 4', '2 4', '10 4 2 4']
154154
const seriesByVendor = new Map<string, typeof modelIntelligenceSeries>()
155155

156156
for (const series of modelIntelligenceSeries) {
@@ -181,8 +181,8 @@ describe('model intelligence index', () => {
181181
expect(qwenSeries.map(series => [series.marker, series.dash])).toEqual([
182182
['circle', null],
183183
['square', '6 4'],
184-
['triangle', '10 4 2 4'],
185-
['diamond', '2 4'],
184+
['triangle', '2 4'],
185+
['diamond', '10 4 2 4'],
186186
])
187187
expect(
188188
allModelIntelligencePoints
@@ -203,8 +203,8 @@ describe('model intelligence index', () => {
203203
expect(claudeSeries.map(series => [series.marker, series.dash])).toEqual([
204204
['circle', null],
205205
['square', '6 4'],
206-
['triangle', '10 4 2 4'],
207-
['diamond', '2 4'],
206+
['triangle', '2 4'],
207+
['diamond', '10 4 2 4'],
208208
])
209209
})
210210

@@ -219,7 +219,7 @@ describe('model intelligence index', () => {
219219
expect(openAISeries.slice(0, 3).map(series => [series.marker, series.dash])).toEqual([
220220
['circle', null],
221221
['square', '6 4'],
222-
['triangle', '10 4 2 4'],
222+
['triangle', '2 4'],
223223
])
224224
})
225225

@@ -256,8 +256,8 @@ describe('model intelligence index', () => {
256256
expect(geminiSeries.map(series => [series.marker, series.dash])).toEqual([
257257
['circle', null],
258258
['square', '6 4'],
259-
['triangle', '10 4 2 4'],
260-
['diamond', '2 4'],
259+
['triangle', '2 4'],
260+
['diamond', '10 4 2 4'],
261261
])
262262
})
263263

@@ -273,7 +273,30 @@ describe('model intelligence index', () => {
273273
expect(mimoSeries.map(series => [series.marker, series.dash])).toEqual([
274274
['circle', null],
275275
['square', '6 4'],
276-
['triangle', '10 4 2 4'],
276+
['triangle', '2 4'],
277+
])
278+
})
279+
280+
it('keeps each Mistral model in its own series', () => {
281+
const mistralSeries = modelIntelligenceSeries.filter(series => series.vendor === 'Mistral AI')
282+
283+
expect(mistralSeries.map(series => series.name)).toEqual([
284+
'Devstral 2',
285+
'Devstral Small 2',
286+
'Mistral Medium 3.5',
287+
'Mistral Small 4',
288+
])
289+
expect(mistralSeries.map(series => series.points.map(point => point.modelId))).toEqual([
290+
['devstral-2'],
291+
['devstral-small-2'],
292+
['mistral-medium-3-5'],
293+
['mistral-small-4'],
294+
])
295+
expect(mistralSeries.map(series => [series.marker, series.dash])).toEqual([
296+
['circle', null],
297+
['square', '6 4'],
298+
['triangle', '2 4'],
299+
['diamond', '10 4 2 4'],
277300
])
278301
})
279302

@@ -284,7 +307,7 @@ describe('model intelligence index', () => {
284307
expect(tencentSeries[0]?.points.map(point => point.modelId)).toEqual(['hy3'])
285308
})
286309

287-
it('connects GLM Air and Flash while keeping Vision on the dash-dot series', () => {
310+
it('connects GLM Air and Flash while keeping Vision on the dotted series', () => {
288311
const glmSeries = modelIntelligenceSeries.filter(series => series.vendor === 'Z.ai')
289312

290313
expect(glmSeries.map(series => series.name)).toEqual([
@@ -296,8 +319,8 @@ describe('model intelligence index', () => {
296319
expect(glmSeries.map(series => [series.marker, series.dash])).toEqual([
297320
['circle', null],
298321
['square', '6 4'],
299-
['triangle', '10 4 2 4'],
300-
['diamond', '2 4'],
322+
['triangle', '2 4'],
323+
['diamond', '10 4 2 4'],
301324
])
302325
expect(glmSeries[1]?.points.map(point => point.modelId)).toEqual([
303326
'glm-4-5-air',

0 commit comments

Comments
 (0)