Skip to content

Commit 9e44085

Browse files
authored
adjust bundled provider logic, fix tree shaking stuff (#4708)
1 parent 5230b91 commit 9e44085

File tree

1 file changed

+47
-23
lines changed

1 file changed

+47
-23
lines changed

packages/opencode/src/provider/provider.ts

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,32 @@ import { Instance } from "../project/instance"
1313
import { Flag } from "../flag/flag"
1414
import { iife } from "@/util/iife"
1515

16+
// Direct imports for bundled providers
17+
import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock"
18+
import { createAnthropic } from "@ai-sdk/anthropic"
19+
import { createAzure } from "@ai-sdk/azure"
20+
import { createGoogleGenerativeAI } from "@ai-sdk/google"
21+
import { createVertex } from "@ai-sdk/google-vertex"
22+
import { createVertexAnthropic } from "@ai-sdk/google-vertex/anthropic"
23+
import { createOpenAI } from "@ai-sdk/openai"
24+
import { createOpenAICompatible } from "@ai-sdk/openai-compatible"
25+
import { createOpenRouter } from "@openrouter/ai-sdk-provider"
26+
1627
export namespace Provider {
1728
const log = Log.create({ service: "provider" })
1829

30+
const BUNDLED_PROVIDERS: Record<string, (options: any) => SDK> = {
31+
"@ai-sdk/amazon-bedrock": createAmazonBedrock,
32+
"@ai-sdk/anthropic": createAnthropic,
33+
"@ai-sdk/azure": createAzure,
34+
"@ai-sdk/google": createGoogleGenerativeAI,
35+
"@ai-sdk/google-vertex": createVertex,
36+
"@ai-sdk/google-vertex/anthropic": createVertexAnthropic,
37+
"@ai-sdk/openai": createOpenAI,
38+
"@ai-sdk/openai-compatible": createOpenAICompatible,
39+
"@openrouter/ai-sdk-provider": createOpenRouter,
40+
}
41+
1942
type CustomLoader = (provider: ModelsDev.Provider) => Promise<{
2043
autoload: boolean
2144
getModel?: (sdk: any, modelID: string, options?: Record<string, any>) => Promise<any>
@@ -530,29 +553,6 @@ export namespace Provider {
530553
const existing = s.sdk.get(key)
531554
if (existing) return existing
532555

533-
const installedPath = await (async () => {
534-
if (pkg.startsWith("file://")) {
535-
log.info("loading local provider", { pkg })
536-
return pkg
537-
}
538-
const resolved = await BunProc.resolve(pkg)
539-
if (resolved) {
540-
log.info("using preinstalled provider", { providerID: provider.id, pkg })
541-
return resolved
542-
}
543-
return BunProc.install(pkg, "latest")
544-
})()
545-
546-
// The `google-vertex-anthropic` provider points to the `@ai-sdk/google-vertex` package.
547-
// Ref: https://github.com/sst/models.dev/blob/0a87de42ab177bebad0620a889e2eb2b4a5dd4ab/providers/google-vertex-anthropic/provider.toml
548-
// However, the actual export is at the subpath `@ai-sdk/google-vertex/anthropic`.
549-
// Ref: https://ai-sdk.dev/providers/ai-sdk-providers/google-vertex#google-vertex-anthropic-provider-usage
550-
// In addition, Bun's dynamic import logic does not support subpath imports,
551-
// so we patch the import path to load directly from `dist`.
552-
const modPath =
553-
provider.id === "google-vertex-anthropic" ? `${installedPath}/dist/anthropic/index.mjs` : installedPath
554-
const mod = await import(modPath)
555-
556556
const customFetch = options["fetch"]
557557

558558
options["fetch"] = async (input: any, init?: BunFetchRequestInit) => {
@@ -576,6 +576,30 @@ export namespace Provider {
576576
timeout: false,
577577
})
578578
}
579+
580+
// Special case: google-vertex-anthropic uses a subpath import
581+
const bundledKey = provider.id === "google-vertex-anthropic" ? "@ai-sdk/google-vertex/anthropic" : pkg
582+
const bundledFn = BUNDLED_PROVIDERS[bundledKey]
583+
if (bundledFn) {
584+
log.info("using bundled provider", { providerID: provider.id, pkg: bundledKey })
585+
const loaded = bundledFn({
586+
name: provider.id,
587+
...options,
588+
})
589+
s.sdk.set(key, loaded)
590+
return loaded as SDK
591+
}
592+
593+
let installedPath: string
594+
if (!pkg.startsWith("file://")) {
595+
installedPath = await BunProc.install(pkg, "latest")
596+
} else {
597+
log.info("loading local provider", { pkg })
598+
installedPath = pkg
599+
}
600+
601+
const mod = await import(installedPath)
602+
579603
const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]
580604
const loaded = fn({
581605
name: provider.id,

0 commit comments

Comments
 (0)