diff options
| author | Adam <[email protected]> | 2026-02-12 09:49:14 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-12 09:49:14 -0600 |
| commit | ff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch) | |
| tree | 78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/context/local.tsx | |
| parent | 56ad2db02055955f926fda0e4a89055b22ead6f9 (diff) | |
| download | opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.tar.gz opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.zip | |
chore: refactor packages/app files (#13236)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/app/src/context/local.tsx')
| -rw-r--r-- | packages/app/src/context/local.tsx | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx index 85f93f368..ac5da60e8 100644 --- a/packages/app/src/context/local.tsx +++ b/packages/app/src/context/local.tsx @@ -16,16 +16,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const sdk = useSDK() const sync = useSync() const providers = useProviders() + const connected = createMemo(() => new Set(providers.connected().map((provider) => provider.id))) function isModelValid(model: ModelKey) { const provider = providers.all().find((x) => x.id === model.providerID) - return ( - !!provider?.models[model.modelID] && - providers - .connected() - .map((p) => p.id) - .includes(model.providerID) - ) + return !!provider?.models[model.modelID] && connected().has(model.providerID) } function getFirstValidModel(...modelFns: (() => ModelKey | undefined)[]) { @@ -36,6 +31,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } } + let setModel: (model: ModelKey | undefined, options?: { recent?: boolean }) => void = () => undefined + const agent = (() => { const list = createMemo(() => sync.data.agent.filter((x) => x.mode !== "subagent" && !x.hidden)) const [store, setStore] = createStore<{ @@ -75,7 +72,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ if (!value) return setStore("current", value.name) if (value.model) - model.set({ + setModel({ providerID: value.model.providerID, modelID: value.model.modelID, }) @@ -92,38 +89,37 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ model: {}, }) - const fallbackModel = createMemo<ModelKey | undefined>(() => { - if (sync.data.config.model) { - const [providerID, modelID] = sync.data.config.model.split("/") - if (isModelValid({ providerID, modelID })) { - return { - providerID, - modelID, - } - } - } + const resolveConfigured = () => { + if (!sync.data.config.model) return + const [providerID, modelID] = sync.data.config.model.split("/") + const key = { providerID, modelID } + if (isModelValid(key)) return key + } + const resolveRecent = () => { for (const item of models.recent.list()) { - if (isModelValid(item)) { - return item - } + if (isModelValid(item)) return item } + } + const resolveDefault = () => { const defaults = providers.default() - for (const p of providers.connected()) { - const configured = defaults[p.id] + for (const provider of providers.connected()) { + const configured = defaults[provider.id] if (configured) { - const key = { providerID: p.id, modelID: configured } + const key = { providerID: provider.id, modelID: configured } if (isModelValid(key)) return key } - const first = Object.values(p.models)[0] + const first = Object.values(provider.models)[0] if (!first) continue - const key = { providerID: p.id, modelID: first.id } + const key = { providerID: provider.id, modelID: first.id } if (isModelValid(key)) return key } + } - return undefined + const fallbackModel = createMemo<ModelKey | undefined>(() => { + return resolveConfigured() ?? resolveRecent() ?? resolveDefault() }) const current = createMemo(() => { @@ -163,21 +159,25 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }) } + const set = (model: ModelKey | undefined, options?: { recent?: boolean }) => { + batch(() => { + const currentAgent = agent.current() + const next = model ?? fallbackModel() + if (currentAgent) setEphemeral("model", currentAgent.name, next) + if (model) models.setVisibility(model, true) + if (options?.recent && model) models.recent.push(model) + }) + } + + setModel = set + return { ready: models.ready, current, recent, list: models.list, cycle, - set(model: ModelKey | undefined, options?: { recent?: boolean }) { - batch(() => { - const currentAgent = agent.current() - const next = model ?? fallbackModel() - if (currentAgent) setEphemeral("model", currentAgent.name, next) - if (model) models.setVisibility(model, true) - if (options?.recent && model) models.recent.push(model) - }) - }, + set, visible(model: ModelKey) { return models.visible(model) }, |
