Skip to content

Commit 8b3ae08

Browse files
committed
acp: handle case where big-pickle is unavailable as a fallback
1 parent 555d7fc commit 8b3ae08

File tree

1 file changed

+46
-8
lines changed

1 file changed

+46
-8
lines changed

packages/opencode/src/acp/agent.ts

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,9 @@ import type { OpencodeClient, SessionMessageResponse } from "@opencode-ai/sdk/v2
3434
export namespace ACP {
3535
const log = Log.create({ service: "acp-agent" })
3636

37-
export async function init({ sdk }: { sdk: OpencodeClient }) {
38-
const model = await defaultModel({ sdk })
37+
export async function init({ sdk: _sdk }: { sdk: OpencodeClient }) {
3938
return {
4039
create: (connection: AgentSideConnection, fullConfig: ACPConfig) => {
41-
if (!fullConfig.defaultModel) {
42-
fullConfig.defaultModel = model
43-
}
4440
return new Agent(connection, fullConfig)
4541
},
4642
}
@@ -988,8 +984,10 @@ export namespace ACP {
988984
const configured = config.defaultModel
989985
if (configured) return configured
990986

991-
const model = await sdk.config
992-
.get({ directory: cwd }, { throwOnError: true })
987+
const directory = cwd ?? process.cwd()
988+
989+
const specified = await sdk.config
990+
.get({ directory }, { throwOnError: true })
993991
.then((resp) => {
994992
const cfg = resp.data
995993
if (!cfg || !cfg.model) return undefined
@@ -1004,7 +1002,47 @@ export namespace ACP {
10041002
return undefined
10051003
})
10061004

1007-
return model ?? { providerID: "opencode", modelID: "big-pickle" }
1005+
const providers = await sdk.config
1006+
.providers({ directory }, { throwOnError: true })
1007+
.then((x) => x.data?.providers ?? [])
1008+
.catch((error) => {
1009+
log.error("failed to list providers for default model", { error })
1010+
return []
1011+
})
1012+
1013+
if (specified && providers.length) {
1014+
const provider = providers.find((p) => p.id === specified.providerID)
1015+
if (provider && provider.models[specified.modelID]) return specified
1016+
}
1017+
1018+
if (specified && !providers.length) return specified
1019+
1020+
const opencodeProvider = providers.find((p) => p.id === "opencode")
1021+
if (opencodeProvider) {
1022+
if (opencodeProvider.models["big-pickle"]) {
1023+
return { providerID: "opencode", modelID: "big-pickle" }
1024+
}
1025+
const [best] = Provider.sort(Object.values(opencodeProvider.models))
1026+
if (best) {
1027+
return {
1028+
providerID: best.providerID,
1029+
modelID: best.id,
1030+
}
1031+
}
1032+
}
1033+
1034+
const models = providers.flatMap((p) => Object.values(p.models))
1035+
const [best] = Provider.sort(models)
1036+
if (best) {
1037+
return {
1038+
providerID: best.providerID,
1039+
modelID: best.id,
1040+
}
1041+
}
1042+
1043+
if (specified) return specified
1044+
1045+
return { providerID: "opencode", modelID: "big-pickle" }
10081046
}
10091047

10101048
function parseUri(

0 commit comments

Comments
 (0)