@@ -13,9 +13,32 @@ import { Instance } from "../project/instance"
1313import { Flag } from "../flag/flag"
1414import { 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+
1627export 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