Skip to content

Commit 3376229

Browse files
authored
fix(app): wrap model.set in startTransition (anomalyco#34351)
1 parent 5d6aa3b commit 3376229

2 files changed

Lines changed: 37 additions & 31 deletions

File tree

packages/app/src/context/local.tsx

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createSimpleContext } from "@opencode-ai/ui/context"
22
import { base64Encode } from "@opencode-ai/core/util/encode"
33
import { useParams } from "@solidjs/router"
4-
import { batch, createEffect, createMemo } from "solid-js"
4+
import { batch, createEffect, createMemo, startTransition } from "solid-js"
55
import { createStore } from "solid-js/store"
66
import { useModels } from "@/context/models"
77
import { useProviders } from "@/hooks/use-providers"
@@ -294,19 +294,21 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
294294
model.set({ providerID: entry.provider.id, modelID: entry.id })
295295
},
296296
set(item: ModelKey | undefined, options?: { recent?: boolean }) {
297-
batch(() => {
298-
setStore("last", {
299-
type: "model",
300-
agent: agent.current()?.name,
301-
model: item ?? null,
302-
variant: selected(),
297+
startTransition(() =>
298+
batch(() => {
299+
setStore("last", {
300+
type: "model",
301+
agent: agent.current()?.name,
302+
model: item ?? null,
303+
variant: selected(),
304+
})
305+
write({ model: item })
306+
if (!item) return
307+
models.setVisibility(item, true)
308+
if (!options?.recent) return
309+
models.recent.push(item)
303310
})
304-
write({ model: item })
305-
if (!item) return
306-
models.setVisibility(item, true)
307-
if (!options?.recent) return
308-
models.recent.push(item)
309-
})
311+
)
310312
},
311313
visible(item: ModelKey) {
312314
return models.visible(item)
@@ -335,19 +337,21 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
335337
return Object.keys(item.variants)
336338
},
337339
set(value: string | undefined) {
338-
batch(() => {
339-
const model = current()
340-
setStore("last", {
341-
type: "variant",
342-
agent: agent.current()?.name,
343-
model: model ? { providerID: model.provider.id, modelID: model.id } : null,
344-
variant: value ?? null,
340+
startTransition(() =>
341+
batch(() => {
342+
const model = current()
343+
setStore("last", {
344+
type: "variant",
345+
agent: agent.current()?.name,
346+
model: model ? { providerID: model.provider.id, modelID: model.id } : null,
347+
variant: value ?? null,
348+
})
349+
write({ variant: value ?? null })
350+
if (model) {
351+
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
352+
}
345353
})
346-
write({ variant: value ?? null })
347-
if (model) {
348-
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
349-
}
350-
})
354+
)
351355
},
352356
cycle() {
353357
const items = this.list()

packages/app/src/context/tabs.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,14 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
138138
const next = { type: "session" as const, ...tab }
139139
const existing = store.find((item) => tabKey(item) === tabKey(next))
140140
if (existing) return existing
141-
setStore(
142-
produce((tabs) => {
143-
if (tabs.some((item) => tabKey(item) === tabKey(next))) return
144-
tabs.push(next)
145-
}),
146-
)
141+
void startTransition(() => {
142+
setStore(
143+
produce((tabs) => {
144+
if (tabs.some((item) => tabKey(item) === tabKey(next))) return
145+
tabs.push(next)
146+
}),
147+
)
148+
})
147149
return next
148150
},
149151
reorder(keys: string[]) {

0 commit comments

Comments
 (0)