mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-18 05:20:48 +00:00
124 lines
3.5 KiB
TypeScript
124 lines
3.5 KiB
TypeScript
import {
|
|
formatThinkingLevels as formatThinkingLevelsFallback,
|
|
isBinaryThinkingProvider as isBinaryThinkingProviderFallback,
|
|
listThinkingLevelLabels as listThinkingLevelLabelsFallback,
|
|
listThinkingLevels as listThinkingLevelsFallback,
|
|
normalizeProviderId,
|
|
resolveThinkingDefaultForModel as resolveThinkingDefaultForModelFallback,
|
|
} from "./thinking.shared.js";
|
|
export {
|
|
formatXHighModelHint,
|
|
normalizeElevatedLevel,
|
|
normalizeFastMode,
|
|
normalizeNoticeLevel,
|
|
normalizeReasoningLevel,
|
|
normalizeThinkLevel,
|
|
normalizeUsageDisplay,
|
|
normalizeVerboseLevel,
|
|
resolveResponseUsageMode,
|
|
resolveElevatedMode,
|
|
} from "./thinking.shared.js";
|
|
export type {
|
|
ElevatedLevel,
|
|
ElevatedMode,
|
|
NoticeLevel,
|
|
ReasoningLevel,
|
|
ThinkLevel,
|
|
ThinkingCatalogEntry,
|
|
UsageDisplayLevel,
|
|
VerboseLevel,
|
|
} from "./thinking.shared.js";
|
|
import {
|
|
resolveProviderBinaryThinking,
|
|
resolveProviderDefaultThinkingLevel,
|
|
resolveProviderXHighThinking,
|
|
} from "../plugins/provider-runtime.js";
|
|
|
|
export function isBinaryThinkingProvider(provider?: string | null, model?: string | null): boolean {
|
|
const normalizedProvider = normalizeProviderId(provider);
|
|
if (!normalizedProvider) {
|
|
return false;
|
|
}
|
|
|
|
const pluginDecision = resolveProviderBinaryThinking({
|
|
provider: normalizedProvider,
|
|
context: {
|
|
provider: normalizedProvider,
|
|
modelId: model?.trim() ?? "",
|
|
},
|
|
});
|
|
if (typeof pluginDecision === "boolean") {
|
|
return pluginDecision;
|
|
}
|
|
return isBinaryThinkingProviderFallback(provider, model);
|
|
}
|
|
|
|
export function supportsXHighThinking(provider?: string | null, model?: string | null): boolean {
|
|
const modelKey = model?.trim().toLowerCase();
|
|
if (!modelKey) {
|
|
return false;
|
|
}
|
|
const providerKey = normalizeProviderId(provider);
|
|
if (providerKey) {
|
|
const pluginDecision = resolveProviderXHighThinking({
|
|
provider: providerKey,
|
|
context: {
|
|
provider: providerKey,
|
|
modelId: modelKey,
|
|
},
|
|
});
|
|
if (typeof pluginDecision === "boolean") {
|
|
return pluginDecision;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
export function listThinkingLevels(provider?: string | null, model?: string | null): ThinkLevel[] {
|
|
const levels = listThinkingLevelsFallback(provider, model);
|
|
if (supportsXHighThinking(provider, model)) {
|
|
levels.splice(levels.length - 1, 0, "xhigh");
|
|
}
|
|
return levels;
|
|
}
|
|
|
|
export function listThinkingLevelLabels(provider?: string | null, model?: string | null): string[] {
|
|
if (isBinaryThinkingProvider(provider, model)) {
|
|
return ["off", "on"];
|
|
}
|
|
return listThinkingLevelLabelsFallback(provider, model);
|
|
}
|
|
|
|
export function formatThinkingLevels(
|
|
provider?: string | null,
|
|
model?: string | null,
|
|
separator = ", ",
|
|
): string {
|
|
return supportsXHighThinking(provider, model)
|
|
? listThinkingLevelLabels(provider, model).join(separator)
|
|
: formatThinkingLevelsFallback(provider, model, separator);
|
|
}
|
|
|
|
export function resolveThinkingDefaultForModel(params: {
|
|
provider: string;
|
|
model: string;
|
|
catalog?: ThinkingCatalogEntry[];
|
|
}): ThinkLevel {
|
|
const normalizedProvider = normalizeProviderId(params.provider);
|
|
const candidate = params.catalog?.find(
|
|
(entry) => entry.provider === params.provider && entry.id === params.model,
|
|
);
|
|
const pluginDecision = resolveProviderDefaultThinkingLevel({
|
|
provider: normalizedProvider,
|
|
context: {
|
|
provider: normalizedProvider,
|
|
modelId: params.model,
|
|
reasoning: candidate?.reasoning,
|
|
},
|
|
});
|
|
if (pluginDecision) {
|
|
return pluginDecision;
|
|
}
|
|
return resolveThinkingDefaultForModelFallback(params);
|
|
}
|