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:
27
third_party/pi/packages/ai/src/model-catalog.ts
vendored
Normal file
27
third_party/pi/packages/ai/src/model-catalog.ts
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { Api, Model, ProviderId } from "./types.ts";
|
||||
|
||||
export type ModelGroups = Record<string, Record<string, object>>;
|
||||
|
||||
type ModelId<TGroups extends ModelGroups> = {
|
||||
[TApi in keyof TGroups]: keyof TGroups[TApi];
|
||||
}[keyof TGroups] &
|
||||
string;
|
||||
|
||||
type ModelApi<TGroups extends ModelGroups, TModelId extends ModelId<TGroups>> = {
|
||||
[TApi in keyof TGroups]: TModelId extends keyof TGroups[TApi] ? TApi : never;
|
||||
}[keyof TGroups] &
|
||||
Api;
|
||||
|
||||
export type ModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
|
||||
[TModelId in ModelId<TGroups>]: Model<ModelApi<TGroups, TModelId>> & {
|
||||
id: TModelId;
|
||||
provider: TProvider;
|
||||
};
|
||||
};
|
||||
|
||||
export function flattenModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(
|
||||
_provider: TProvider,
|
||||
groups: TGroups,
|
||||
): ModelCatalog<TGroups, TProvider> {
|
||||
return Object.assign({}, ...Object.values(groups)) as ModelCatalog<TGroups, TProvider>;
|
||||
}
|
||||
Reference in New Issue
Block a user