Skip to content

Commit 8ce7db9

Browse files
committed
Ensure current model is shown as selected in the picker when its first loaded
1 parent 3111e87 commit 8ce7db9

3 files changed

Lines changed: 38 additions & 4 deletions

File tree

extensions/discord/src/monitor/model-picker.state.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,27 @@ export function getDiscordModelPickerModelPage(params: {
363363
provider,
364364
};
365365
}
366+
367+
export function resolveDiscordModelPickerPageForModel(params: {
368+
data: ModelsProviderData;
369+
provider: string;
370+
model: string;
371+
pageSize?: number;
372+
}): number {
373+
const provider = normalizeProviderId(params.provider);
374+
const modelSet = params.data.byProvider.get(provider);
375+
if (!modelSet) {
376+
return 1;
377+
}
378+
const sorted = [...modelSet].toSorted();
379+
const index = sorted.indexOf(params.model);
380+
if (index < 0) {
381+
return 1;
382+
}
383+
const pageSize = clampPageSize(
384+
params.pageSize,
385+
DISCORD_MODEL_PICKER_MODEL_PAGE_SIZE,
386+
DISCORD_MODEL_PICKER_MODEL_PAGE_SIZE,
387+
);
388+
return Math.floor(index / pageSize) + 1;
389+
}

extensions/discord/src/monitor/model-picker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export {
1414
loadDiscordModelPickerData,
1515
parseDiscordModelPickerCustomId,
1616
parseDiscordModelPickerData,
17+
resolveDiscordModelPickerPageForModel,
1718
} from "./model-picker.state.js";
1819
export type {
1920
DiscordModelPickerAction,

extensions/discord/src/monitor/native-command-model-picker-ui.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
import {
2828
loadDiscordModelPickerData,
2929
renderDiscordModelPickerModelsView,
30+
resolveDiscordModelPickerPageForModel,
3031
toDiscordModelPickerMessagePayload,
3132
type DiscordModelPickerCommandContext,
3233
} from "./model-picker.js";
@@ -311,18 +312,26 @@ export async function replyWithDiscordModelPickerProviders(params: {
311312
allowedModelRefs: buildDiscordModelPickerAllowedModelRefs(data),
312313
limit: 5,
313314
});
314-
const currentProvider = splitDiscordModelRef(currentModel ?? "")?.provider;
315+
const parsedCurrentRef = splitDiscordModelRef(currentModel ?? "");
315316
const initialProvider =
316-
currentProvider && data.byProvider.has(currentProvider)
317-
? currentProvider
317+
parsedCurrentRef && data.byProvider.has(parsedCurrentRef.provider)
318+
? parsedCurrentRef.provider
318319
: (data.providers[0] ?? data.resolvedDefault.provider);
320+
const initialPage =
321+
parsedCurrentRef && parsedCurrentRef.provider === initialProvider
322+
? resolveDiscordModelPickerPageForModel({
323+
data,
324+
provider: initialProvider,
325+
model: parsedCurrentRef.model,
326+
})
327+
: 1;
319328

320329
const rendered = renderDiscordModelPickerModelsView({
321330
command: params.command,
322331
userId: params.userId,
323332
data,
324333
provider: initialProvider,
325-
page: 1,
334+
page: initialPage,
326335
providerPage: 1,
327336
currentModel,
328337
currentRuntime,

0 commit comments

Comments
 (0)