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); }