Skip to content

Commit 4f32067

Browse files
committed
store model per session, set default as last selected
1 parent 635fec1 commit 4f32067

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

apps/array/src/renderer/features/sessions/components/ModelSelector.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,19 @@ export function ModelSelector({
1919
disabled,
2020
onModelChange,
2121
}: ModelSelectorProps) {
22-
const selectedModel = useSettingsStore((state) => state.selectedModel);
23-
const setSelectedModel = useSettingsStore((state) => state.setSelectedModel);
22+
const defaultModel = useSettingsStore((state) => state.defaultModel);
23+
const setDefaultModel = useSettingsStore((state) => state.setDefaultModel);
2424
const setSessionModel = useSessionStore((state) => state.setSessionModel);
2525
const session = useSessionStore((state) =>
2626
taskId ? state.getSessionForTask(taskId) : undefined,
2727
);
2828

29+
// Use session model if available, otherwise fall back to default
30+
const activeModel = session?.model ?? defaultModel;
31+
2932
const handleChange = (value: string) => {
30-
setSelectedModel(value);
33+
// Always update the default
34+
setDefaultModel(value);
3135
onModelChange?.(value);
3236

3337
// If there's an active session, update the model mid-session
@@ -41,12 +45,12 @@ export function ModelSelector({
4145
(provider) => modelsByProvider[provider].models.length > 0,
4246
);
4347

44-
const currentModel = AVAILABLE_MODELS.find((m) => m.id === selectedModel);
45-
const displayName = currentModel?.name ?? selectedModel;
48+
const currentModel = AVAILABLE_MODELS.find((m) => m.id === activeModel);
49+
const displayName = currentModel?.name ?? activeModel;
4650

4751
return (
4852
<Select.Root
49-
value={selectedModel}
53+
value={activeModel}
5054
onValueChange={handleChange}
5155
disabled={disabled}
5256
size="1"

apps/array/src/renderer/features/sessions/stores/sessionStore.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export interface AgentSession {
9696
isCloud: boolean;
9797
logUrl?: string;
9898
processedLineCount?: number;
99+
model?: string;
99100
}
100101

101102
interface ConnectParams {
@@ -321,15 +322,15 @@ export const useSessionStore = create<SessionStore>((set, get) => ({
321322
return;
322323
}
323324

324-
const selectedModel = useSettingsStore.getState().selectedModel;
325+
const defaultModel = useSettingsStore.getState().defaultModel;
325326
const result = await window.electronAPI.agentStart({
326327
taskId,
327328
taskRunId: taskRun.id,
328329
repoPath,
329330
apiKey,
330331
apiHost,
331332
projectId,
332-
model: selectedModel,
333+
model: defaultModel,
333334
});
334335

335336
set((state) => ({
@@ -344,6 +345,7 @@ export const useSessionStore = create<SessionStore>((set, get) => ({
344345
status: "connected",
345346
isPromptPending: false,
346347
isCloud: false,
348+
model: defaultModel,
347349
},
348350
},
349351
}));
@@ -510,6 +512,15 @@ export const useSessionStore = create<SessionStore>((set, get) => ({
510512

511513
try {
512514
await window.electronAPI.agentSetModel(session.taskRunId, modelId);
515+
set((state) => ({
516+
sessions: {
517+
...state.sessions,
518+
[session.taskRunId]: {
519+
...state.sessions[session.taskRunId],
520+
model: modelId,
521+
},
522+
},
523+
}));
513524
log.info("Session model changed", { taskId, modelId });
514525
} catch (error) {
515526
log.error("Failed to change session model", { taskId, modelId, error });

apps/array/src/renderer/features/settings/stores/settingsStore.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ interface SettingsStore {
1313
lastUsedLocalWorkspaceMode: LocalWorkspaceMode;
1414
lastUsedWorkspaceMode: WorkspaceMode;
1515
createPR: boolean;
16-
selectedModel: string;
16+
defaultModel: string;
1717

1818
setAutoRunTasks: (autoRun: boolean) => void;
1919
setDefaultRunMode: (mode: DefaultRunMode) => void;
2020
setLastUsedRunMode: (mode: "local" | "cloud") => void;
2121
setLastUsedLocalWorkspaceMode: (mode: LocalWorkspaceMode) => void;
2222
setLastUsedWorkspaceMode: (mode: WorkspaceMode) => void;
2323
setCreatePR: (createPR: boolean) => void;
24-
setSelectedModel: (model: string) => void;
24+
setDefaultModel: (model: string) => void;
2525
}
2626

2727
export const useSettingsStore = create<SettingsStore>()(
@@ -33,7 +33,7 @@ export const useSettingsStore = create<SettingsStore>()(
3333
lastUsedLocalWorkspaceMode: "worktree",
3434
lastUsedWorkspaceMode: "worktree",
3535
createPR: true,
36-
selectedModel: DEFAULT_MODEL,
36+
defaultModel: DEFAULT_MODEL,
3737

3838
setAutoRunTasks: (autoRun) => set({ autoRunTasks: autoRun }),
3939
setDefaultRunMode: (mode) => set({ defaultRunMode: mode }),
@@ -42,7 +42,7 @@ export const useSettingsStore = create<SettingsStore>()(
4242
set({ lastUsedLocalWorkspaceMode: mode }),
4343
setLastUsedWorkspaceMode: (mode) => set({ lastUsedWorkspaceMode: mode }),
4444
setCreatePR: (createPR) => set({ createPR }),
45-
setSelectedModel: (model) => set({ selectedModel: model }),
45+
setDefaultModel: (model) => set({ defaultModel: model }),
4646
}),
4747
{
4848
name: "settings-storage",

0 commit comments

Comments
 (0)