Skip to content
Source
Sign inSign up
Open History to see the last commit

claudeModelOptions.ts

61 lines2.4 KB

1import type { ModelSelection } from "@t3tools/contracts";
2import {
3 getModelSelectionBooleanOptionValue,
4 getModelSelectionStringOptionValue,
5 getProviderOptionDescriptors,
6 resolvePromptInjectedEffort,
7} from "@t3tools/shared/model";
8​
9import {
10 BUNDLED_CLAUDE_MODEL_CATALOG,
11 getClaudeCatalogModelCapabilities,
12 normalizeClaudeCatalogEffort,
13 resolveClaudeCatalogApiModelId,
14 resolveClaudeCatalogEffort,
15 type ClaudeModelCatalog,
16} from "./provider/ClaudeModelCatalog.ts";
17​
18export interface CompiledClaudeModelSelection {
19 readonly apiModelId: string;
20 readonly effort: string | undefined;
21 readonly promptEffort: string | undefined;
22 readonly settings: Readonly<Record<string, boolean>>;
23 readonly queryIdentity: string;
25​
26export function compileClaudeModelSelection(
27 selection: ModelSelection,
28 catalog: ClaudeModelCatalog = BUNDLED_CLAUDE_MODEL_CATALOG,
29): CompiledClaudeModelSelection {
30 const capabilities = getClaudeCatalogModelCapabilities(catalog, selection.model);
31 const descriptors = getProviderOptionDescriptors({
32 caps: capabilities,
33 selections: selection.options,
34 });
35 const supportsBoolean = (id: string) =>
36 descriptors.some((descriptor) => descriptor.type === "boolean" && descriptor.id === id);
37 const rawEffort = getModelSelectionStringOptionValue(selection, "effort");
38 const resolvedEffort = resolveClaudeCatalogEffort(catalog, selection.model, rawEffort);
39 const effort = normalizeClaudeCatalogEffort(catalog, resolvedEffort, selection.model);
40 const fastMode = supportsBoolean("fastMode")
41 ? (getModelSelectionBooleanOptionValue(selection, "fastMode") ?? false)
42 : undefined;
43 const thinking = supportsBoolean("thinking")
44 ? getModelSelectionBooleanOptionValue(selection, "thinking")
45 : undefined;
46 const ultracode = descriptors.find((descriptor) => descriptor.id === "ultracode")?.currentValue;
47 const settings = {
48 ...(typeof thinking === "boolean" ? { alwaysThinkingEnabled: thinking } : {}),
49 ...(typeof fastMode === "boolean" ? { fastMode } : {}),
50 ...(typeof ultracode === "boolean" ? { ultracode } : {}),
51 };
52 const apiModelId = resolveClaudeCatalogApiModelId(catalog, selection);
53 const promptEffort = resolvePromptInjectedEffort(capabilities, rawEffort) ?? undefined;
54 return {
55 apiModelId,
56 effort,
57 promptEffort,
58 settings,
59 queryIdentity: JSON.stringify({ apiModelId, effort: effort ?? null, settings }),
60 };