@@ -11,6 +11,7 @@ import {
1111 DISCORD_MODEL_PICKER_PROVIDER_SINGLE_PAGE_MAX ,
1212 buildDiscordModelPickerCustomId ,
1313 computeAlphaBuckets ,
14+ createDiscordModelPickerModelToken ,
1415 getDiscordModelPickerModelPage ,
1516 getDiscordModelPickerProviderPage ,
1617 findProviderBucketId ,
@@ -276,6 +277,7 @@ describe("Discord model picker custom_id", () => {
276277 } ) ;
277278
278279 it ( "keeps typical submit ids under Discord max length" , ( ) => {
280+ const modelToken = createDiscordModelPickerModelToken ( "azure-openai-responses" , "gpt-5.5" ) ;
279281 const customId = buildDiscordModelPickerCustomId ( {
280282 command : "models" ,
281283 action : "submit" ,
@@ -284,10 +286,14 @@ describe("Discord model picker custom_id", () => {
284286 page : 1 ,
285287 providerPage : 1 ,
286288 modelIndex : 10 ,
289+ modelToken,
287290 userId : "12345678901234567890" ,
288291 } ) ;
289292
290293 expect ( customId . length ) . toBeLessThanOrEqual ( DISCORD_CUSTOM_ID_MAX_CHARS ) ;
294+ const parsed = parseDiscordModelPickerCustomId ( customId ) ;
295+ expect ( parsed ?. modelToken ) . toBe ( modelToken ) ;
296+ expect ( parsed ?. modelIndex ) . toBeUndefined ( ) ;
291297 } ) ;
292298} ) ;
293299
@@ -1033,7 +1039,8 @@ describe("Discord model picker rendering", () => {
10331039 const submitState = parseDiscordModelPickerCustomId ( navButtons [ 3 ] ?. custom_id ?? "" ) ;
10341040 expect ( submitState ?. action ) . toBe ( "submit" ) ;
10351041 expect ( submitState ?. provider ) . toBe ( "openai" ) ;
1036- expect ( submitState ?. modelIndex ) . toBe ( 3 ) ;
1042+ expect ( submitState ?. modelIndex ) . toBeUndefined ( ) ;
1043+ expect ( submitState ?. modelToken ) . toBe ( createDiscordModelPickerModelToken ( "openai" , "o3" ) ) ;
10371044 } ) ;
10381045
10391046 it ( "defaults the runtime picker to the first effective runtime choice" , ( ) => {
@@ -1093,7 +1100,8 @@ describe("Discord model picker rendering", () => {
10931100 const submitState = parseDiscordModelPickerCustomId ( navButtons . at ( - 1 ) ?. custom_id ?? "" ) ;
10941101 expect ( submitState ?. action ) . toBe ( "submit" ) ;
10951102 expect ( submitState ?. runtime ) . toBeUndefined ( ) ;
1096- expect ( submitState ?. modelIndex ) . toBe ( 3 ) ;
1103+ expect ( submitState ?. modelIndex ) . toBeUndefined ( ) ;
1104+ expect ( submitState ?. modelToken ) . toBe ( createDiscordModelPickerModelToken ( "openai" , "o3" ) ) ;
10971105 } ) ;
10981106
10991107 it ( "carries only explicit runtime picker state into model submit ids" , ( ) => {
@@ -1284,7 +1292,7 @@ describe("Discord model picker recents view", () => {
12841292 } ) ;
12851293 expect ( rows ) . toHaveLength ( 4 ) ;
12861294
1287- // First row: default model button (slot 1) .
1295+ // First row: default model button.
12881296 const defaultBtn = requireValue (
12891297 rows [ 0 ] ?. components ?. [ 0 ] ,
12901298 "recents view should render a default model button" ,
@@ -1296,9 +1304,10 @@ describe("Discord model picker recents view", () => {
12961304 ) ;
12971305 expect ( defaultState . action ) . toBe ( "submit" ) ;
12981306 expect ( defaultState . view ) . toBe ( "recents" ) ;
1299- expect ( defaultState . recentSlot ) . toBe ( 1 ) ;
1307+ expect ( defaultState . recentSlot ) . toBeUndefined ( ) ;
1308+ expect ( defaultState . modelToken ) . toBe ( createDiscordModelPickerModelToken ( "openai" , "gpt-4.1" ) ) ;
13001309
1301- // Second row: first recent (slot 2) .
1310+ // Second row: first recent.
13021311 const recentBtn1 = requireValue (
13031312 rows [ 1 ] ?. components ?. [ 0 ] ,
13041313 "recents view should render first recent button" ,
@@ -1307,9 +1316,10 @@ describe("Discord model picker recents view", () => {
13071316 parseDiscordModelPickerCustomId ( recentBtn1 . custom_id ?? "" ) ,
13081317 "first recent custom id should parse" ,
13091318 ) ;
1310- expect ( recentState1 . recentSlot ) . toBe ( 2 ) ;
1319+ expect ( recentState1 . recentSlot ) . toBeUndefined ( ) ;
1320+ expect ( recentState1 . modelToken ) . toBe ( createDiscordModelPickerModelToken ( "openai" , "gpt-4o" ) ) ;
13111321
1312- // Third row: second recent (slot 3) .
1322+ // Third row: second recent.
13131323 const recentBtn2 = requireValue (
13141324 rows [ 2 ] ?. components ?. [ 0 ] ,
13151325 "recents view should render second recent button" ,
@@ -1318,7 +1328,10 @@ describe("Discord model picker recents view", () => {
13181328 parseDiscordModelPickerCustomId ( recentBtn2 . custom_id ?? "" ) ,
13191329 "second recent custom id should parse" ,
13201330 ) ;
1321- expect ( recentState2 . recentSlot ) . toBe ( 3 ) ;
1331+ expect ( recentState2 . recentSlot ) . toBeUndefined ( ) ;
1332+ expect ( recentState2 . modelToken ) . toBe (
1333+ createDiscordModelPickerModelToken ( "anthropic" , "claude-sonnet-4-5" ) ,
1334+ ) ;
13221335
13231336 // Fourth row (after divider): Back button.
13241337 const backBtn = requireValue (
0 commit comments