feat(quick-pane): promote active runtime
This commit is contained in:
+31
-13
@@ -3,8 +3,21 @@ import type { Model } from "./workspace/types";
|
||||
export type ModelIdentity = { provider: string; modelId: string };
|
||||
export type ThinkingLevelOption = { value: string; label: string };
|
||||
|
||||
const DEFAULT_THINKING_LEVELS = [
|
||||
"off",
|
||||
"minimal",
|
||||
"low",
|
||||
"medium",
|
||||
"high",
|
||||
"xhigh",
|
||||
] as const;
|
||||
const OFF_THINKING_LEVEL: ThinkingLevelOption = { value: "off", label: "Off" };
|
||||
|
||||
function thinkingLevelLabel(level: string) {
|
||||
if (level === "xhigh") return "XHigh";
|
||||
return level[0].toUpperCase() + level.slice(1);
|
||||
}
|
||||
|
||||
export function modelIdentity(model: Model): ModelIdentity | undefined {
|
||||
if (!model.provider || !model.id) return undefined;
|
||||
return { provider: model.provider, modelId: model.id };
|
||||
@@ -49,22 +62,29 @@ export function reconcileModelIdentity(
|
||||
}
|
||||
|
||||
export function thinkingLevelOptions(model?: Model): ThinkingLevelOption[] {
|
||||
const map = model?.thinkingLevelMap;
|
||||
if (!map || typeof map !== "object") return [OFF_THINKING_LEVEL];
|
||||
const options = Object.keys(map)
|
||||
.filter((level) => level.trim() && typeof map[level] === "string")
|
||||
.map((level) => ({
|
||||
value: level,
|
||||
label: level === "off" ? "Off" : level[0].toUpperCase() + level.slice(1),
|
||||
}));
|
||||
return options.length ? options : [OFF_THINKING_LEVEL];
|
||||
if (!model || model.reasoning === false) return [OFF_THINKING_LEVEL];
|
||||
const map = model.thinkingLevelMap;
|
||||
const levels = [
|
||||
...DEFAULT_THINKING_LEVELS.filter((level) => {
|
||||
if (level === "xhigh") return map?.xhigh !== undefined && map.xhigh !== null;
|
||||
return map?.[level] !== null;
|
||||
}),
|
||||
...(map?.max == null ? [] : ["max"]),
|
||||
];
|
||||
return levels.length
|
||||
? levels.map((value) => ({ value, label: thinkingLevelLabel(value) }))
|
||||
: [OFF_THINKING_LEVEL];
|
||||
}
|
||||
|
||||
export function reconcileThinkingLevel(model: Model | undefined, level: string) {
|
||||
export function reconcileThinkingLevel(
|
||||
model: Model | undefined,
|
||||
level: string,
|
||||
) {
|
||||
const options = thinkingLevelOptions(model);
|
||||
return options.some((option) => option.value === level)
|
||||
? level
|
||||
: options.find((option) => option.value === "off")?.value ?? options[0].value;
|
||||
: (options.find((option) => option.value === "off")?.value ??
|
||||
options[0].value);
|
||||
}
|
||||
|
||||
export function catalogModels(
|
||||
@@ -85,8 +105,6 @@ export function catalogModels(
|
||||
available.unshift({
|
||||
provider: identity.provider,
|
||||
id: identity.modelId,
|
||||
// Configured/local models are not catalog-confirmed. Do not imply thinking support.
|
||||
thinkingLevelMap: { off: "off" },
|
||||
});
|
||||
keys.add(key);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user