feat: add model catalog shared types

This commit is contained in:
Shakker
2026-04-25 03:14:30 +01:00
committed by Shakker
parent 9a3dece879
commit efcd96a8eb
2 changed files with 110 additions and 0 deletions

13
src/model-catalog/refs.ts Normal file
View File

@@ -0,0 +1,13 @@
import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js";
export function normalizeModelCatalogProviderId(provider: string): string {
return normalizeLowercaseStringOrEmpty(provider);
}
export function buildModelCatalogRef(provider: string, modelId: string): string {
return `${normalizeModelCatalogProviderId(provider)}/${modelId}`;
}
export function buildModelCatalogMergeKey(provider: string, modelId: string): string {
return `${normalizeModelCatalogProviderId(provider)}::${normalizeLowercaseStringOrEmpty(modelId)}`;
}

View File

@@ -0,0 +1,97 @@
import type { ModelApi, ModelCompatConfig } from "../config/types.models.js";
export type ModelCatalogInput = "text" | "image" | "document";
export type ModelCatalogDiscovery = "static" | "refreshable" | "runtime";
export type ModelCatalogStatus = "available" | "preview" | "deprecated" | "disabled";
export type ModelCatalogSource =
| "manifest"
| "provider-index"
| "cache"
| "config"
| "runtime-refresh";
export type ModelCatalogTieredCost = {
input: number;
output: number;
cacheRead: number;
cacheWrite: number;
range: [number, number] | [number];
};
export type ModelCatalogCost = {
input?: number;
output?: number;
cacheRead?: number;
cacheWrite?: number;
tieredPricing?: ModelCatalogTieredCost[];
};
export type ModelCatalogModel = {
id: string;
name?: string;
api?: ModelApi;
baseUrl?: string;
headers?: Record<string, string>;
input?: ModelCatalogInput[];
reasoning?: boolean;
contextWindow?: number;
contextTokens?: number;
maxTokens?: number;
cost?: ModelCatalogCost;
compat?: ModelCompatConfig;
status?: ModelCatalogStatus;
statusReason?: string;
replaces?: string[];
replacedBy?: string;
tags?: string[];
};
export type ModelCatalogProvider = {
baseUrl?: string;
api?: ModelApi;
headers?: Record<string, string>;
models: ModelCatalogModel[];
};
export type ModelCatalogAlias = {
provider: string;
api?: ModelApi;
baseUrl?: string;
};
export type ModelCatalogSuppression = {
provider: string;
model: string;
reason?: string;
};
export type ModelCatalog = {
providers?: Record<string, ModelCatalogProvider>;
aliases?: Record<string, ModelCatalogAlias>;
suppressions?: ModelCatalogSuppression[];
discovery?: Record<string, ModelCatalogDiscovery>;
};
export type NormalizedModelCatalogRow = {
provider: string;
id: string;
ref: string;
mergeKey: string;
name: string;
source: ModelCatalogSource;
input: ModelCatalogInput[];
reasoning: boolean;
status: ModelCatalogStatus;
api?: ModelApi;
baseUrl?: string;
headers?: Record<string, string>;
contextWindow?: number;
contextTokens?: number;
maxTokens?: number;
cost?: ModelCatalogCost;
compat?: ModelCompatConfig;
statusReason?: string;
replaces?: string[];
replacedBy?: string;
tags?: string[];
};