mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 07:30:43 +00:00
feat: add model catalog shared types
This commit is contained in:
13
src/model-catalog/refs.ts
Normal file
13
src/model-catalog/refs.ts
Normal 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)}`;
|
||||
}
|
||||
97
src/model-catalog/types.ts
Normal file
97
src/model-catalog/types.ts
Normal 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[];
|
||||
};
|
||||
Reference in New Issue
Block a user