59 lines · 2.3 KB · TypeScript
RawDownload
import type { ModelSelection } from "@t3tools/contracts";import {  getModelSelectionBooleanOptionValue,  getModelSelectionStringOptionValue,  getProviderOptionDescriptors,  resolvePromptInjectedEffort,} from "@t3tools/shared/model"; import {  BUNDLED_CLAUDE_MODEL_CATALOG,  getClaudeCatalogModelCapabilities,  isClaudeCatalogUltracodeEffort,  normalizeClaudeCatalogEffort,  resolveClaudeCatalogApiModelId,  resolveClaudeCatalogEffort,  type ClaudeModelCatalog,} from "./provider/ClaudeModelCatalog.ts"; export interface CompiledClaudeModelSelection {  readonly apiModelId: string;  readonly effort: string | undefined;  readonly promptEffort: string | undefined;  readonly settings: Readonly<Record<string, boolean>>;  readonly queryIdentity: string;} /** Compile every Claude model option at the provider boundary. */export function compileClaudeModelSelection(  selection: ModelSelection,  catalog: ClaudeModelCatalog = BUNDLED_CLAUDE_MODEL_CATALOG,): CompiledClaudeModelSelection {  const capabilities = getClaudeCatalogModelCapabilities(catalog, selection.model);  const descriptors = getProviderOptionDescriptors({ caps: capabilities });  const supportsBoolean = (id: string) =>    descriptors.some((descriptor) => descriptor.type === "boolean" && descriptor.id === id);  const rawEffort = getModelSelectionStringOptionValue(selection, "effort");  const resolvedEffort = resolveClaudeCatalogEffort(catalog, selection.model, rawEffort);  const effort = normalizeClaudeCatalogEffort(catalog, resolvedEffort, selection.model);  const fastMode = supportsBoolean("fastMode")    ? getModelSelectionBooleanOptionValue(selection, "fastMode")    : undefined;  const thinking = supportsBoolean("thinking")    ? getModelSelectionBooleanOptionValue(selection, "thinking")    : undefined;  const settings = {    ...(typeof thinking === "boolean" ? { alwaysThinkingEnabled: thinking } : {}),    ...(typeof fastMode === "boolean" ? { fastMode } : {}),    ...(isClaudeCatalogUltracodeEffort(resolvedEffort) ? { ultracode: true } : {}),  };  const apiModelId = resolveClaudeCatalogApiModelId(catalog, selection);  const promptEffort = resolvePromptInjectedEffort(capabilities, rawEffort) ?? undefined;  return {    apiModelId,    effort,    promptEffort,    settings,    queryIdentity: JSON.stringify({ apiModelId, effort: effort ?? null, settings }),  };}