summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-09-11 16:22:44 -0400
committerDax Raad <[email protected]>2025-09-11 16:22:44 -0400
commitf5b3992479b616b5900a5f752d8928980837426e (patch)
tree03b88f0757dac3bbae80efa055538303125b6554
parent53f1f161229a5da0ccee92653a13fa0af9656a2d (diff)
downloadopencode-f5b3992479b616b5900a5f752d8928980837426e.tar.gz
opencode-f5b3992479b616b5900a5f752d8928980837426e.zip
properly support model level npm definition
-rw-r--r--packages/opencode/src/provider/provider.ts13
1 files changed, 7 insertions, 6 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index dbed1f74d..834a5b2dc 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -161,7 +161,7 @@ export namespace Provider {
string,
{ providerID: string; modelID: string; info: ModelsDev.Model; language: LanguageModel }
>()
- const sdk = new Map<string, SDK>()
+ const sdk = new Map<number, SDK>()
log.info("init")
@@ -326,23 +326,24 @@ export namespace Provider {
providerID: provider.id,
})
const s = await state()
- const existing = s.sdk.get(provider.id)
- if (existing) return existing
const pkg = model.provider?.npm ?? provider.npm ?? provider.id
+ const options = { ...s.providers[provider.id]?.options }
+ const key = Bun.hash.xxHash32(JSON.stringify({ pkg, options }))
+ const existing = s.sdk.get(key)
+ if (existing) return existing
const mod = await import(await BunProc.install(pkg, "latest"))
- const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]
- let options = { ...s.providers[provider.id]?.options }
if (options["timeout"] !== undefined) {
// Only override fetch if user explicitly sets timeout
options["fetch"] = async (input: any, init?: any) => {
return await fetch(input, { ...init, timeout: options["timeout"] })
}
}
+ const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]
const loaded = fn({
name: provider.id,
...options,
})
- s.sdk.set(provider.id, loaded)
+ s.sdk.set(key, loaded)
return loaded as SDK
})().catch((e) => {
throw new InitError({ providerID: provider.id }, { cause: e })