mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 01:03:49 +00:00
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
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<TApi extends Api>(
|
|
model: Model<TApi>,
|
|
context: Context,
|
|
options?: ProviderStreamOptions,
|
|
): AssistantMessageEventStream {
|
|
const provider = resolveApiProvider(model.api);
|
|
return provider.stream(model, context, options as StreamOptions);
|
|
}
|
|
|
|
export async function complete<TApi extends Api>(
|
|
model: Model<TApi>,
|
|
context: Context,
|
|
options?: ProviderStreamOptions,
|
|
): Promise<AssistantMessage> {
|
|
const s = stream(model, context, options);
|
|
return s.result();
|
|
}
|
|
|
|
export function streamSimple<TApi extends Api>(
|
|
model: Model<TApi>,
|
|
context: Context,
|
|
options?: SimpleStreamOptions,
|
|
): AssistantMessageEventStream {
|
|
const provider = resolveApiProvider(model.api);
|
|
return provider.streamSimple(model, context, options);
|
|
}
|
|
|
|
export async function completeSimple<TApi extends Api>(
|
|
model: Model<TApi>,
|
|
context: Context,
|
|
options?: SimpleStreamOptions,
|
|
): Promise<AssistantMessage> {
|
|
const s = streamSimple(model, context, options);
|
|
return s.result();
|
|
}
|