@earendil-works/pi-ai
Version:
Unified LLM API with automatic model discovery and provider configuration
33 lines • 2.2 kB
TypeScript
import type { Api, ClassifierApi, ClassifierModel, ImageApi, ImageModel, Model, ModelType, ProviderId } from "./types.ts";
export type ModelGroups = Record<string, Record<string, object>>;
type ModelKey<TGroups extends ModelGroups> = {
[TApi in keyof TGroups]: keyof TGroups[TApi];
}[keyof TGroups] & string;
type KeyForType<TGroups extends ModelGroups, TType extends ModelType> = Extract<ModelKey<TGroups>, `${TType}:${string}`>;
type ModelId<TKey extends string> = TKey extends `${ModelType}:${infer TModelId}` ? TModelId : never;
type ApiForKey<TGroups extends ModelGroups, TKey extends ModelKey<TGroups>> = {
[TApi in keyof TGroups]: TKey extends keyof TGroups[TApi] ? TApi : never;
}[keyof TGroups];
export type ChatModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
[TKey in KeyForType<TGroups, "chat"> as ModelId<TKey>]: Model<ApiForKey<TGroups, TKey> & Api> & {
id: ModelId<TKey>;
provider: TProvider;
};
};
export type ImageModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
[TKey in KeyForType<TGroups, "image"> as ModelId<TKey>]: ImageModel<ApiForKey<TGroups, TKey> & ImageApi> & {
id: ModelId<TKey>;
provider: TProvider;
};
};
export type ClassifierModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
[TKey in KeyForType<TGroups, "classifier"> as ModelId<TKey>]: ClassifierModel<ApiForKey<TGroups, TKey> & ClassifierApi> & {
id: ModelId<TKey>;
provider: TProvider;
};
};
export declare function flattenChatModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ChatModelCatalog<TGroups, TProvider>;
export declare function flattenImageModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ImageModelCatalog<TGroups, TProvider>;
export declare function flattenClassifierModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ClassifierModelCatalog<TGroups, TProvider>;
export {};
//# sourceMappingURL=model-catalog.d.ts.map