import type { AssistantImages, ImagesApi, ImagesContext, ImagesFunction, ImagesModel, ImagesOptions } from "./types.ts"; export type ImagesApiFunction = ( model: ImagesModel, context: ImagesContext, options?: ImagesOptions, ) => Promise; export interface ImagesApiProvider { api: TApi; generateImages: ImagesFunction; } interface ImagesApiProviderInternal { api: ImagesApi; generateImages: ImagesApiFunction; } type RegisteredImagesApiProvider = { provider: ImagesApiProviderInternal; sourceId?: string; }; const imagesApiProviderRegistry = new Map(); function wrapGenerateImages( api: TApi, generateImages: ImagesFunction, ): ImagesApiFunction { return (model, context, options) => { if (model.api !== api) { throw new Error(`Mismatched api: ${model.api} expected ${api}`); } return generateImages(model as ImagesModel, context, options as TOptions); }; } export function registerImagesApiProvider( provider: ImagesApiProvider, 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; }