import "./providers/register-builtins.js"; import { getApiProvider } from "./api-registry.js"; import type { Api, AssistantMessage, AssistantMessageEventStream, Context, Model, ProviderStreamOptions, SimpleStreamOptions, StreamOptions, } from "./types.js"; export { getEnvApiKey } from "./env-api-keys.js"; // Set up http proxy according to env variables for `fetch` based SDKs in Node.js. // Bun has builtin support for this. if (typeof process !== "undefined" && process.versions?.node) { import("undici").then((m) => { const { EnvHttpProxyAgent, setGlobalDispatcher } = m; setGlobalDispatcher(new EnvHttpProxyAgent()); }); } function resolveApiProvider(api: Api) { const provider = getApiProvider(api); if (!provider) { throw new Error(`No API provider registered for api: ${api}`); } return provider; } export function stream( model: Model, context: Context, options?: ProviderStreamOptions, ): AssistantMessageEventStream { const provider = resolveApiProvider(model.api); return provider.stream(model, context, options as StreamOptions); } export async function complete( model: Model, context: Context, options?: ProviderStreamOptions, ): Promise { const s = stream(model, context, options); return s.result(); } export function streamSimple( model: Model, context: Context, options?: SimpleStreamOptions, ): AssistantMessageEventStream { const provider = resolveApiProvider(model.api); return provider.streamSimple(model, context, options); } export async function completeSimple( model: Model, context: Context, options?: SimpleStreamOptions, ): Promise { const s = streamSimple(model, context, options); return s.result(); }