chore(vendor): import pi 0.85.1

Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
This commit is contained in:
alexion committed 2026-09-14 10:48:47 -04:00
1 parent 5ebc7018c3
commit 4def357d09
1669 files changed
+397627

No files matched your search

+53
View File
@@ -0,0 +1,53 @@
import type { AssistantImages, ImagesApi, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "./types.ts";
export type ImagesApiFunction = (
model: ImagesModel<ImagesApi>,
context: ImagesContext,
options?: ImagesOptions,
) => Promise<AssistantImages>;
export interface ImagesApiProvider<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> {
api: TApi;
generateImages: ImagesFunction<TApi, TOptions>;
}
interface ImagesApiProviderInternal {
api: ImagesApi;
generateImages: ImagesApiFunction;
}
type RegisteredImagesApiProvider = {
provider: ImagesApiProviderInternal;
sourceId?: string;
};
const imagesApiProviderRegistry = new Map<string, RegisteredImagesApiProvider>();
function wrapGenerateImages<TApi extends ImagesApi, TOptions extends ImagesOptions>(
api: TApi,
generateImages: ImagesFunction<TApi, TOptions>,
): ImagesApiFunction {
return (model, context, options) => {
if (model.api !== api) {
throw new Error(`Mismatched api: ${model.api} expected ${api}`);
}
return generateImages(model as ImagesModel<TApi>, context, options as TOptions);
};
}
export function registerImagesApiProvider<TApi extends ImagesApi, TOptions extends ImagesOptions>(
provider: ImagesApiProvider<TApi, TOptions>,
sourceId?: string,
): void {
imagesApiProviderRegistry.set(provider.api, {
provider: {
api: provider.api,
generateImages: wrapGenerateImages(provider.api, provider.generateImages),
},
sourceId,
});
}
export function getImagesApiProvider(api: ImagesApi): ImagesApiProviderInternal | undefined {
return imagesApiProviderRegistry.get(api)?.provider;
}