229
230
export function transitionModelSelection(input: IModelSelectionTransitionInput): IModelSelectionTransitionResult {
232
>
const sessionKey = session.kind === 'none' ? undefined : session.key;
233
>
const chatKey = session.kind === 'none' ? undefined : session.chatKey;
234
>
const sessionModelId = session.kind === 'none' ? undefined : session.modelId;
235
>
const sessionChanged = sessionKey !== previous.sessionKey;
236
>
const currentModel = sessionChanged ? undefined : previous.currentModel;
237
>
const currentReason = sessionChanged ? undefined : previous.currentReason;
238
>
const sessionModel = sessionModelId ? models.available.find(model => model.identifier === sessionModelId) : undefined;
239
>
const fallbackModel = models.available.find(model => model.identifier === models.rememberedModelId) ?? models.fallbackModel;
240
>
const newConversation = session.kind === 'untitled' && !sessionChanged && chatKey !== previous.lastPushedChatKey;
241
>
const automaticSelection = currentReason === ModelSelectionReason.ConfiguredDefault
242
>
|| currentReason === ModelSelectionReason.FirstAvailable
243
|| currentReason === ModelSelectionReason.Remembered
244
|| currentReason === ModelSelectionReason.NewChatRepush;
246
&& (newConversation
247
|| (!newConversation && (!sessionModelId || automaticSelection) && !isAuthoritativeModelSelectionReason(currentReason)))
248
? models.configuredModel
249
: undefined;
251
? resolveConfiguredModel(models.configuredModel, models.available)
252
: undefined;
254
if (chatKey === previous.lastPushedChatKey && currentReason === ModelSelectionReason.ConfiguredDefault && currentModel?.identifier === configuredModel.identifier) {
255
return { currentModel, currentReason, pendingSelection: undefined, effect: { kind: 'none' }, sessionKey, lastPushedChatKey: previous.lastPushedChatKey };