diff options
| author | Adam <[email protected]> | 2026-03-13 11:05:08 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 11:05:08 -0500 |
| commit | 4ad8116ce37a0e77e7f3c0e9e4e1002bba05b15e (patch) | |
| tree | b7e5ed2b05aabb5ed5134520c4eb485c52eb5333 /packages/app/src/testing/model-selection.ts | |
| parent | 5c7088338c07ad632834ebd4a87feb23d255fb8a (diff) | |
| download | opencode-4ad8116ce37a0e77e7f3c0e9e4e1002bba05b15e.tar.gz opencode-4ad8116ce37a0e77e7f3c0e9e4e1002bba05b15e.zip | |
fix(app): model selection persist by session (#17348)
Diffstat (limited to 'packages/app/src/testing/model-selection.ts')
| -rw-r--r-- | packages/app/src/testing/model-selection.ts | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/packages/app/src/testing/model-selection.ts b/packages/app/src/testing/model-selection.ts new file mode 100644 index 000000000..a5ea199ac --- /dev/null +++ b/packages/app/src/testing/model-selection.ts @@ -0,0 +1,80 @@ +type ModelKey = { + providerID: string + modelID: string +} + +type State = { + agent?: string + model?: ModelKey | null + variant?: string | null +} + +export type ModelProbeState = { + dir?: string + sessionID?: string + last?: { + type: "agent" | "model" | "variant" + agent?: string + model?: ModelKey | null + variant?: string | null + } + agent?: string + model?: (ModelKey & { name?: string }) | undefined + variant?: string | null + selected?: string | null + configured?: string + pick?: State + base?: State + current?: string +} + +export type ModelWindow = Window & { + __opencode_e2e?: { + model?: { + enabled?: boolean + current?: ModelProbeState + } + } +} + +const clone = (state?: State) => { + if (!state) return undefined + return { + ...state, + model: state.model ? { ...state.model } : state.model, + } +} + +export const modelEnabled = () => { + if (typeof window === "undefined") return false + return (window as ModelWindow).__opencode_e2e?.model?.enabled === true +} + +const root = () => { + if (!modelEnabled()) return + return (window as ModelWindow).__opencode_e2e?.model +} + +export const modelProbe = { + set(input: ModelProbeState) { + const state = root() + if (!state) return + state.current = { + ...input, + model: input.model ? { ...input.model } : undefined, + last: input.last + ? { + ...input.last, + model: input.last.model ? { ...input.last.model } : input.last.model, + } + : undefined, + pick: clone(input.pick), + base: clone(input.base), + } + }, + clear() { + const state = root() + if (!state) return + state.current = undefined + }, +} |
