Skip to content

Commit 69c0cfe

Browse files
Sync public snapshot from freebuff-private
Source: CodebuffAI/freebuff-private@b12cb0ef4c6f05a5e4a0b1545b875e5d447e3fa2
1 parent 744a8bf commit 69c0cfe

2 files changed

Lines changed: 52 additions & 22 deletions

File tree

‎common/src/__tests__/freebuff-desktop-sessions.test.ts‎

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
import { describe, expect, test } from 'bun:test'
22

3+
import { freebuffLegacyModelDigest } from '../types/freebuff-model-catalog'
34
import {
5+
FREEBUFF_DEEPSEEK_V4_FLASH_FAST_MODEL_ID,
46
FREEBUFF_DEEPSEEK_V4_FLASH_MODEL_ID,
57
FREEBUFF_GEMINI_38_FLASH_MODEL_ID,
68
FREEBUFF_GLM_V53_FLASH_MODEL_ID,
79
FREEBUFF_GPT_6_LUNA_MODEL_ID,
10+
FREEBUFF_MIMO_V26_PRO_MODEL_ID,
811
FREEBUFF_MODELS,
912
FREEBUFF_MUSE_SPARK_MODEL_IDS,
1013
FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
1114
FREEBUFF_SOLAR_PRO_4_MODEL_ID,
1215
FREEBUFF_WEB_PREMIUM_MODEL_IDS,
1316
} from '../constants/freebuff-models'
1417
import {
18+
FREEBUFF_CLAUDE_HAIKU_55_CATALOG_KEY,
19+
FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID,
1520
FREEBUFF_DESKTOP_UNCAPPED_TAB_LIMIT,
1621
freebuffDesktopConcurrencyLimits,
1722
freebuffDesktopModelTabLimit,
@@ -49,14 +54,20 @@ describe('Freebuff Desktop session concurrency', () => {
4954

5055
test('classifies models by tier and plan', () => {
5156
const cases = [
52-
[
53-
// GPT-6 Luna since 2026-09-22, when it took 5.6's slot-bound entry.
54-
`${FREEBUFF_GPT_6_LUNA_MODEL_ID}-20260922`,
55-
'full',
56-
false,
57-
'slot-bound',
58-
],
5957
[FREEBUFF_GEMINI_38_FLASH_MODEL_ID, 'full', false, 'slot-bound'],
58+
[`${FREEBUFF_GEMINI_38_FLASH_MODEL_ID}-20260922`, 'full', true, 'slot-bound'],
59+
// Claude Haiku 5.5 with full context is slot-bound since 2026-10-14,
60+
// under both of its names; its 100k-context row is not.
61+
[FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID, 'full', false, 'slot-bound'],
62+
[FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID, 'full', true, 'slot-bound'],
63+
[FREEBUFF_CLAUDE_HAIKU_55_CATALOG_KEY, 'full', true, 'slot-bound'],
64+
[`${FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID}-100k`, 'full', true, 'multi-tab'],
65+
// GPT-6 Luna, MiMo 2.6 Pro and DeepSeek Flash fast mode are multi-tab
66+
// since 2026-10-14.
67+
[`${FREEBUFF_GPT_6_LUNA_MODEL_ID}-20260922`, 'full', false, 'multi-tab'],
68+
[FREEBUFF_MIMO_V26_PRO_MODEL_ID, 'full', true, 'multi-tab'],
69+
[FREEBUFF_DEEPSEEK_V4_FLASH_FAST_MODEL_ID, 'full', false, 'multi-tab'],
70+
[FREEBUFF_GPT_6_LUNA_MODEL_ID, 'limited', false, 'slot-bound'],
6071
[FREEBUFF_GLM_V53_FLASH_MODEL_ID, 'full', false, 'multi-tab'],
6172
[FREEBUFF_SOLAR_PRO_4_MODEL_ID, 'full', false, 'multi-tab'],
6273
[FREEBUFF_SOLAR_PRO_4_MODEL_ID, 'limited', false, 'slot-bound'],
@@ -74,14 +85,30 @@ describe('Freebuff Desktop session concurrency', () => {
7485
)
7586
}
7687

88+
// Premium rows are slot-bound unless named multi-tab here, so a new
89+
// premium row takes one tab until someone decides otherwise.
90+
const multiTabPremium = new Set<string>([
91+
FREEBUFF_GPT_6_LUNA_MODEL_ID,
92+
FREEBUFF_MIMO_V26_PRO_MODEL_ID,
93+
FREEBUFF_DEEPSEEK_V4_FLASH_FAST_MODEL_ID,
94+
])
7795
const desktopModels = new Set<string>(FREEBUFF_MODELS.map(({ id }) => id))
7896
for (const id of FREEBUFF_WEB_PREMIUM_MODEL_IDS) {
7997
if (desktopModels.has(id)) {
80-
expect(getFreebuffDesktopConcurrency(id, 'full')).toBe('slot-bound')
98+
expect(getFreebuffDesktopConcurrency(id, 'full')).toBe(
99+
multiTabPremium.has(id) ? 'multi-tab' : 'slot-bound',
100+
)
81101
}
82102
}
83103
for (const id of FREEBUFF_MUSE_SPARK_MODEL_IDS) {
84104
expect(getFreebuffDesktopConcurrency(id, 'full')).toBe('multi-tab')
85105
}
86106
})
107+
108+
test("Haiku 5.5's catalog key is the default catalog's key for its id", () => {
109+
// packages/internal's defaultCatalogKey, which common cannot import.
110+
expect(FREEBUFF_CLAUDE_HAIKU_55_CATALOG_KEY).toBe(
111+
`m-${freebuffLegacyModelDigest(`key:${FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID}`).slice(0, 10)}`,
112+
)
113+
})
87114
})

‎common/src/constants/freebuff-desktop-sessions.ts‎

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,36 @@ import {
33
type FreebuffDesktopConcurrency,
44
} from './freebuff-model-entitlements'
55
import {
6-
FREEBUFF_DEEPSEEK_V4_FLASH_FAST_MODEL_ID,
76
FREEBUFF_GEMINI_38_FLASH_MODEL_ID,
8-
FREEBUFF_GPT_5_6_LUNA_MODEL_ID,
9-
FREEBUFF_GPT_6_LUNA_MODEL_ID,
107
FREEBUFF_GPT_61_SOL_MODEL_ID,
118
FREEBUFF_GEMINI_4_ARGON_MODEL_ID,
12-
FREEBUFF_MIMO_V26_PRO_MODEL_ID,
139
freebuffModelIdMatches,
1410
} from './freebuff-models'
1511

12+
/**
13+
* Claude Haiku 5.5 with full context, a catalog-only model: the server's
14+
* sessions name it by model id, Desktop's catalog picker by row key. The
15+
* 100k-context row (`fbc/claude-haiku-5.5-100k`) is a different model and
16+
* stays multi-tab.
17+
*/
18+
export const FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID = 'fbc/claude-haiku-5.5'
19+
export const FREEBUFF_CLAUDE_HAIKU_55_CATALOG_KEY = 'm-79293c5b7d'
20+
1621
/** Models that always use constrained Desktop concurrency. */
1722
const FREEBUFF_DESKTOP_SLOT_BOUND_MODEL_IDS = [
18-
// Every quota-metered Desktop model must stay slot-bound until admit stamps
19-
// identify the tab; same-millisecond parallel admits otherwise pair
20-
// ambiguously when usage is finalized.
21-
// GPT-6 Luna, 2026-09-22, in 5.6's slot: quota-metered, so slot-bound.
22-
FREEBUFF_GPT_6_LUNA_MODEL_ID,
23+
// A product choice per model. Metered admits stopped pairing ambiguously on
24+
// 2026-08-07, so being quota-metered no longer requires a slot; every other
25+
// row runs multi-tab, each tab buying its own session. GPT-6 Luna, MiMo 2.6
26+
// Pro and DeepSeek Flash fast mode sat here until 2026-10-14.
2327
FREEBUFF_GEMINI_38_FLASH_MODEL_ID,
2428
// GPT-6.1 Sol, the dearest row of all (2026-09-29), and Gemini 4 Argon on
2529
// the same card (2026-10-13).
2630
FREEBUFF_GPT_61_SOL_MODEL_ID,
2731
FREEBUFF_GEMINI_4_ARGON_MODEL_ID,
28-
// MiMo 2.6 Pro, the dearest row after Gemini and paid-only.
29-
FREEBUFF_MIMO_V26_PRO_MODEL_ID,
30-
// DeepSeek Flash fast mode (2026-09-26): premium and metered like the rows
31-
// above, and a fan-out besides — one tab of it is already several requests.
32-
FREEBUFF_DEEPSEEK_V4_FLASH_FAST_MODEL_ID,
32+
// Claude Haiku 5.5 with full context, since 2026-10-14. Both names, so
33+
// the server and Desktop's catalog picker agree.
34+
FREEBUFF_CLAUDE_HAIKU_55_MODEL_ID,
35+
FREEBUFF_CLAUDE_HAIKU_55_CATALOG_KEY,
3336
// Muse Spark sat here from 2026-09-04 to 2026-10-10, held to one tab because
3437
// Meta rate-limited the Contributor tier per team. That limit is gone, so it
3538
// runs multi-tab like DeepSeek V4 Flash, each tab buying its own session.

0 commit comments

Comments
 (0)