fix(binary): preload Bedrock provider module for Bun bundle

refs #1814
This commit is contained in:
Mario Zechner 2026-03-04 20:47:41 +01:00
parent 12cec4f162
commit 0199abfd11
6 changed files with 30 additions and 4 deletions

1
packages/ai/bedrock-provider.d.ts vendored Normal file
View file

@ -0,0 +1 @@
export * from "./dist/bedrock-provider.js";

View file

@ -0,0 +1 @@
export * from "./dist/bedrock-provider.js";

View file

@ -13,6 +13,10 @@
"./oauth": { "./oauth": {
"types": "./oauth.d.ts", "types": "./oauth.d.ts",
"import": "./oauth.js" "import": "./oauth.js"
},
"./bedrock-provider": {
"types": "./bedrock-provider.d.ts",
"import": "./bedrock-provider.js"
} }
}, },
"bin": { "bin": {
@ -22,6 +26,8 @@
"dist", "dist",
"oauth.js", "oauth.js",
"oauth.d.ts", "oauth.d.ts",
"bedrock-provider.js",
"bedrock-provider.d.ts",
"README.md" "README.md"
], ],
"scripts": { "scripts": {

View file

@ -0,0 +1,6 @@
import { streamBedrock, streamSimpleBedrock } from "./providers/amazon-bedrock.js";
export const bedrockProviderModule = {
streamBedrock,
streamSimpleBedrock,
};

View file

@ -22,26 +22,35 @@ interface BedrockProviderModule {
model: Model<"bedrock-converse-stream">, model: Model<"bedrock-converse-stream">,
context: Context, context: Context,
options?: StreamOptions, options?: StreamOptions,
) => AssistantMessageEventStream; ) => AsyncIterable<AssistantMessageEvent>;
streamSimpleBedrock: ( streamSimpleBedrock: (
model: Model<"bedrock-converse-stream">, model: Model<"bedrock-converse-stream">,
context: Context, context: Context,
options?: SimpleStreamOptions, options?: SimpleStreamOptions,
) => AssistantMessageEventStream; ) => AsyncIterable<AssistantMessageEvent>;
} }
type DynamicImport = (specifier: string) => Promise<unknown>; type DynamicImport = (specifier: string) => Promise<unknown>;
const dynamicImport = new Function("specifier", "return import(specifier);") as DynamicImport; const dynamicImport = new Function("specifier", "return import(specifier);") as DynamicImport;
let bedrockProviderModuleOverride: BedrockProviderModule | undefined;
export function setBedrockProviderModule(module: BedrockProviderModule): void {
bedrockProviderModuleOverride = module;
}
async function loadBedrockProviderModule(): Promise<BedrockProviderModule> { async function loadBedrockProviderModule(): Promise<BedrockProviderModule> {
if (bedrockProviderModuleOverride) {
return bedrockProviderModuleOverride;
}
const module = await dynamicImport("./amazon-bedrock.js"); const module = await dynamicImport("./amazon-bedrock.js");
return module as BedrockProviderModule; return module as BedrockProviderModule;
} }
function forwardStream(target: AssistantMessageEventStream, source: AssistantMessageEventStream): void { function forwardStream(target: AssistantMessageEventStream, source: AsyncIterable<AssistantMessageEvent>): void {
(async () => { (async () => {
for await (const event of source as AsyncIterable<AssistantMessageEvent>) { for await (const event of source) {
target.push(event); target.push(event);
} }
target.end(); target.end();

View file

@ -7,9 +7,12 @@
*/ */
process.title = "pi"; process.title = "pi";
import { setBedrockProviderModule } from "@mariozechner/pi-ai";
import { bedrockProviderModule } from "@mariozechner/pi-ai/bedrock-provider";
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici"; import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
import { main } from "./main.js"; import { main } from "./main.js";
setGlobalDispatcher(new EnvHttpProxyAgent()); setGlobalDispatcher(new EnvHttpProxyAgent());
setBedrockProviderModule(bedrockProviderModule);
main(process.argv.slice(2)); main(process.argv.slice(2));