openclaw/src/agents/model-selection-display.ts

91 lines
2.5 KiB
TypeScript

type ModelDisplaySelectionParams = {
runtimeProvider?: string | null;
runtimeModel?: string | null;
overrideProvider?: string | null;
overrideModel?: string | null;
fallbackModel?: string | null;
};
export function resolveModelDisplayRef(params: ModelDisplaySelectionParams): string | undefined {
const runtimeModel = params.runtimeModel?.trim();
const runtimeProvider = params.runtimeProvider?.trim();
if (runtimeModel) {
if (runtimeModel.includes("/")) {
return runtimeModel;
}
if (runtimeProvider) {
return `${runtimeProvider}/${runtimeModel}`;
}
return runtimeModel;
}
if (runtimeProvider) {
return runtimeProvider;
}
const overrideModel = params.overrideModel?.trim();
const overrideProvider = params.overrideProvider?.trim();
if (overrideModel) {
if (overrideModel.includes("/")) {
return overrideModel;
}
if (overrideProvider) {
return `${overrideProvider}/${overrideModel}`;
}
return overrideModel;
}
if (overrideProvider) {
return overrideProvider;
}
const fallbackModel = params.fallbackModel?.trim();
return fallbackModel || undefined;
}
export function resolveModelDisplayName(params: ModelDisplaySelectionParams): string {
const modelRef = resolveModelDisplayRef(params);
if (!modelRef) {
return "model n/a";
}
const slash = modelRef.lastIndexOf("/");
if (slash >= 0 && slash < modelRef.length - 1) {
return modelRef.slice(slash + 1);
}
return modelRef;
}
type SessionInfoModelSelectionParams = {
currentProvider?: string | null;
currentModel?: string | null;
entryProvider?: string | null;
entryModel?: string | null;
overrideProvider?: string | null;
overrideModel?: string | null;
};
export function resolveSessionInfoModelSelection(params: SessionInfoModelSelectionParams): {
modelProvider?: string;
model?: string;
} {
if (params.entryProvider !== undefined || params.entryModel !== undefined) {
return {
modelProvider: params.entryProvider ?? params.currentProvider ?? undefined,
model: params.entryModel ?? params.currentModel ?? undefined,
};
}
const overrideModel = params.overrideModel?.trim();
if (overrideModel) {
const overrideProvider = params.overrideProvider?.trim();
const currentProvider = params.currentProvider ?? undefined;
return {
modelProvider: overrideProvider || currentProvider,
model: overrideModel,
};
}
return {
modelProvider: params.currentProvider ?? undefined,
model: params.currentModel ?? undefined,
};
}