9993c96907
Move provider auth and OAuth flows onto pi-ai Models, compose models.json and extension overlays through ModelRuntime, and retain ModelRegistry as an extension compatibility facade.
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import type { Api, Model, ProviderEnv, ProviderStreams } from "../types.ts";
|
|
|
|
const CLOUDFLARE_ACCOUNT_ID = "CLOUDFLARE_ACCOUNT_ID";
|
|
const CLOUDFLARE_GATEWAY_ID = "CLOUDFLARE_GATEWAY_ID";
|
|
|
|
export function resolveCloudflareModel<TApi extends Api>(
|
|
model: Model<TApi>,
|
|
env: ProviderEnv | undefined,
|
|
): Model<TApi> {
|
|
if (!env) return model;
|
|
const baseUrl = model.baseUrl
|
|
.replaceAll(`{${CLOUDFLARE_ACCOUNT_ID}}`, env[CLOUDFLARE_ACCOUNT_ID] ?? `{${CLOUDFLARE_ACCOUNT_ID}}`)
|
|
.replaceAll(`{${CLOUDFLARE_GATEWAY_ID}}`, env[CLOUDFLARE_GATEWAY_ID] ?? `{${CLOUDFLARE_GATEWAY_ID}}`);
|
|
return baseUrl === model.baseUrl ? model : { ...model, baseUrl };
|
|
}
|
|
|
|
/**
|
|
* Wrap an API implementation so Cloudflare account/gateway endpoint
|
|
* placeholders materialize from the resolved provider env before dispatch.
|
|
*/
|
|
export function cloudflareStreams(streams: ProviderStreams): ProviderStreams {
|
|
return {
|
|
stream: (model, context, options) =>
|
|
streams.stream(resolveCloudflareModel(model, options?.env), context, options),
|
|
streamSimple: (model, context, options) =>
|
|
streams.streamSimple(resolveCloudflareModel(model, options?.env), context, options),
|
|
};
|
|
}
|