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
Unverified
parent 12cec4f162
commit 0199abfd11
6 changed files with 30 additions and 4 deletions
+1
View File
@@ -0,0 +1 @@
export * from "./dist/bedrock-provider.js";
+1
View File
@@ -0,0 +1 @@
export * from "./dist/bedrock-provider.js";
+6
View File
@@ -13,6 +13,10 @@
"./oauth": {
"types": "./oauth.d.ts",
"import": "./oauth.js"
},
"./bedrock-provider": {
"types": "./bedrock-provider.d.ts",
"import": "./bedrock-provider.js"
}
},
"bin": {
@@ -22,6 +26,8 @@
"dist",
"oauth.js",
"oauth.d.ts",
"bedrock-provider.js",
"bedrock-provider.d.ts",
"README.md"
],
"scripts": {
+6
View File
@@ -0,0 +1,6 @@
import { streamBedrock, streamSimpleBedrock } from "./providers/amazon-bedrock.js";
export const bedrockProviderModule = {
streamBedrock,
streamSimpleBedrock,
};
+13 -4
View File
@@ -22,26 +22,35 @@ interface BedrockProviderModule {
model: Model<"bedrock-converse-stream">,
context: Context,
options?: StreamOptions,
) => AssistantMessageEventStream;
) => AsyncIterable<AssistantMessageEvent>;
streamSimpleBedrock: (
model: Model<"bedrock-converse-stream">,
context: Context,
options?: SimpleStreamOptions,
) => AssistantMessageEventStream;
) => AsyncIterable<AssistantMessageEvent>;
}
type DynamicImport = (specifier: string) => Promise<unknown>;
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> {
if (bedrockProviderModuleOverride) {
return bedrockProviderModuleOverride;
}
const module = await dynamicImport("./amazon-bedrock.js");
return module as BedrockProviderModule;
}
function forwardStream(target: AssistantMessageEventStream, source: AssistantMessageEventStream): void {
function forwardStream(target: AssistantMessageEventStream, source: AsyncIterable<AssistantMessageEvent>): void {
(async () => {
for await (const event of source as AsyncIterable<AssistantMessageEvent>) {
for await (const event of source) {
target.push(event);
}
target.end();
+3
View File
@@ -7,9 +7,12 @@
*/
process.title = "pi";
import { setBedrockProviderModule } from "@mariozechner/pi-ai";
import { bedrockProviderModule } from "@mariozechner/pi-ai/bedrock-provider";
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
import { main } from "./main.js";
setGlobalDispatcher(new EnvHttpProxyAgent());
setBedrockProviderModule(bedrockProviderModule);
main(process.argv.slice(2));