@tanstack/ai-anthropic 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/adapters/summarize.js +5 -4
- package/dist/esm/adapters/summarize.js.map +1 -1
- package/dist/esm/adapters/text.js +121 -35
- package/dist/esm/adapters/text.js.map +1 -1
- package/dist/esm/model-meta.d.ts +23 -1
- package/dist/esm/model-meta.js +5 -1
- package/dist/esm/model-meta.js.map +1 -1
- package/package.json +3 -3
- package/src/adapters/summarize.ts +8 -4
- package/src/adapters/text.ts +142 -36
- package/src/model-meta.ts +41 -0
package/dist/esm/model-meta.d.ts
CHANGED
|
@@ -239,7 +239,27 @@ declare const CLAUDE_OPUS_4_6_FAST: {
|
|
|
239
239
|
};
|
|
240
240
|
};
|
|
241
241
|
};
|
|
242
|
-
|
|
242
|
+
declare const CLAUDE_OPUS_4_7: {
|
|
243
|
+
readonly name: "claude-opus-4.7";
|
|
244
|
+
readonly id: "claude-opus-4.7";
|
|
245
|
+
readonly context_window: 1000000;
|
|
246
|
+
readonly max_output_tokens: 128000;
|
|
247
|
+
readonly supports: {
|
|
248
|
+
readonly input: ["text", "image"];
|
|
249
|
+
readonly extended_thinking: true;
|
|
250
|
+
readonly priority_tier: true;
|
|
251
|
+
};
|
|
252
|
+
readonly pricing: {
|
|
253
|
+
readonly input: {
|
|
254
|
+
readonly normal: 5;
|
|
255
|
+
readonly cached: 0.5;
|
|
256
|
+
};
|
|
257
|
+
readonly output: {
|
|
258
|
+
readonly normal: 25;
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
export declare const ANTHROPIC_MODELS: readonly ["claude-opus-4-6", "claude-opus-4-5", "claude-sonnet-4-6", "claude-sonnet-4-5", "claude-haiku-4-5", "claude-opus-4-1", "claude-sonnet-4", "claude-3-7-sonnet", "claude-opus-4", "claude-3-5-haiku", "claude-3-haiku", "claude-opus-4.6-fast", "claude-opus-4.7"];
|
|
243
263
|
export type AnthropicChatModel = (typeof ANTHROPIC_MODELS)[number];
|
|
244
264
|
export type AnthropicChatModelProviderOptionsByName = {
|
|
245
265
|
[CLAUDE_OPUS_4_6.id]: AnthropicContainerOptions & AnthropicContextManagementOptions & AnthropicMCPOptions & AnthropicServiceTierOptions & AnthropicStopSequencesOptions & AnthropicThinkingOptions & AnthropicToolChoiceOptions & AnthropicSamplingOptions;
|
|
@@ -254,6 +274,7 @@ export type AnthropicChatModelProviderOptionsByName = {
|
|
|
254
274
|
[CLAUDE_HAIKU_3_5.id]: AnthropicContainerOptions & AnthropicContextManagementOptions & AnthropicMCPOptions & AnthropicServiceTierOptions & AnthropicStopSequencesOptions & AnthropicToolChoiceOptions & AnthropicSamplingOptions;
|
|
255
275
|
[CLAUDE_HAIKU_3.id]: AnthropicContainerOptions & AnthropicContextManagementOptions & AnthropicMCPOptions & AnthropicStopSequencesOptions & AnthropicToolChoiceOptions & AnthropicSamplingOptions;
|
|
256
276
|
[CLAUDE_OPUS_4_6_FAST.id]: AnthropicContainerOptions & AnthropicContextManagementOptions & AnthropicMCPOptions & AnthropicServiceTierOptions & AnthropicStopSequencesOptions & AnthropicThinkingOptions & AnthropicToolChoiceOptions & AnthropicSamplingOptions;
|
|
277
|
+
[CLAUDE_OPUS_4_7.id]: AnthropicContainerOptions & AnthropicContextManagementOptions & AnthropicMCPOptions & AnthropicServiceTierOptions & AnthropicStopSequencesOptions & AnthropicThinkingOptions & AnthropicToolChoiceOptions & AnthropicSamplingOptions;
|
|
257
278
|
};
|
|
258
279
|
/**
|
|
259
280
|
* Type-only map from chat model name to its supported input modalities.
|
|
@@ -279,5 +300,6 @@ export type AnthropicModelInputModalitiesByName = {
|
|
|
279
300
|
[CLAUDE_HAIKU_3_5.id]: typeof CLAUDE_HAIKU_3_5.supports.input;
|
|
280
301
|
[CLAUDE_HAIKU_3.id]: typeof CLAUDE_HAIKU_3.supports.input;
|
|
281
302
|
[CLAUDE_OPUS_4_6_FAST.id]: typeof CLAUDE_OPUS_4_6_FAST.supports.input;
|
|
303
|
+
[CLAUDE_OPUS_4_7.id]: typeof CLAUDE_OPUS_4_7.supports.input;
|
|
282
304
|
};
|
|
283
305
|
export {};
|
package/dist/esm/model-meta.js
CHANGED
|
@@ -34,6 +34,9 @@ const CLAUDE_HAIKU_3 = {
|
|
|
34
34
|
const CLAUDE_OPUS_4_6_FAST = {
|
|
35
35
|
id: "claude-opus-4.6-fast"
|
|
36
36
|
};
|
|
37
|
+
const CLAUDE_OPUS_4_7 = {
|
|
38
|
+
id: "claude-opus-4.7"
|
|
39
|
+
};
|
|
37
40
|
const ANTHROPIC_MODELS = [
|
|
38
41
|
CLAUDE_OPUS_4_6.id,
|
|
39
42
|
CLAUDE_OPUS_4_5.id,
|
|
@@ -46,7 +49,8 @@ const ANTHROPIC_MODELS = [
|
|
|
46
49
|
CLAUDE_OPUS_4.id,
|
|
47
50
|
CLAUDE_HAIKU_3_5.id,
|
|
48
51
|
CLAUDE_HAIKU_3.id,
|
|
49
|
-
CLAUDE_OPUS_4_6_FAST.id
|
|
52
|
+
CLAUDE_OPUS_4_6_FAST.id,
|
|
53
|
+
CLAUDE_OPUS_4_7.id
|
|
50
54
|
];
|
|
51
55
|
export {
|
|
52
56
|
ANTHROPIC_MODELS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-meta.js","sources":["../../src/model-meta.ts"],"sourcesContent":["import type {\n AnthropicContainerOptions,\n AnthropicContextManagementOptions,\n AnthropicMCPOptions,\n AnthropicSamplingOptions,\n AnthropicServiceTierOptions,\n AnthropicStopSequencesOptions,\n AnthropicThinkingOptions,\n AnthropicToolChoiceOptions,\n} from './text/text-provider-options'\n\ninterface ModelMeta<\n TProviderOptions = unknown,\n TToolCapabilities = unknown,\n TMessageCapabilities = unknown,\n> {\n name: string\n id: string\n supports: {\n input: Array<'text' | 'image' | 'audio' | 'video' | 'document'>\n extended_thinking?: boolean\n adaptive_thinking?: boolean\n priority_tier?: boolean\n }\n context_window?: number\n max_output_tokens?: number\n knowledge_cutoff?: string\n pricing: {\n input: {\n normal: number\n cached?: number\n }\n output: {\n normal: number\n }\n }\n /**\n * Type-level description of which provider options this model supports.\n */\n providerOptions?: TProviderOptions\n /**\n * Type-level description of which tool capabilities this model supports.\n */\n toolCapabilities?: TToolCapabilities\n /**\n * Type-level description of which message/input capabilities this model supports.\n */\n messageCapabilities?: TMessageCapabilities\n}\n\nconst CLAUDE_OPUS_4_6 = {\n name: 'claude-opus-4-6',\n id: 'claude-opus-4-6',\n context_window: 200_000,\n max_output_tokens: 128_000,\n knowledge_cutoff: '2025-05-01',\n pricing: {\n input: {\n normal: 5,\n },\n output: {\n normal: 25,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4_5 = {\n name: 'claude-opus-4-5',\n id: 'claude-opus-4-5',\n context_window: 200_000,\n max_output_tokens: 32_000,\n knowledge_cutoff: '2025-11-01',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4_6 = {\n name: 'claude-sonnet-4-6',\n id: 'claude-sonnet-4-6',\n context_window: 1_000_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-08-01',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n adaptive_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4_5 = {\n name: 'claude-sonnet-4-5',\n id: 'claude-sonnet-4-5',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-09-29',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_4_5 = {\n name: 'claude-haiku-4-5',\n id: 'claude-haiku-4-5',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-10-01',\n pricing: {\n input: {\n normal: 1,\n },\n output: {\n normal: 5,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4_1 = {\n name: 'claude-opus-4-1',\n id: 'claude-opus-4-1',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-08-05',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4 = {\n name: 'claude-sonnet-4',\n id: 'claude-sonnet-4',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_3_7 = {\n name: 'claude-sonnet-3-7',\n id: 'claude-3-7-sonnet',\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4 = {\n name: 'claude-opus-4',\n id: 'claude-opus-4',\n context_window: 200_000,\n max_output_tokens: 32_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_3_5 = {\n name: 'claude-haiku-3-5',\n id: 'claude-3-5-haiku',\n context_window: 200_000,\n max_output_tokens: 8_000,\n knowledge_cutoff: '2025-10-22',\n pricing: {\n input: {\n normal: 0.8,\n },\n output: {\n normal: 4,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: false,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_3 = {\n name: 'claude-haiku-3',\n id: 'claude-3-haiku',\n context_window: 200_000,\n max_output_tokens: 4_000,\n knowledge_cutoff: '2024-03-07',\n pricing: {\n input: {\n normal: 0.25,\n },\n output: {\n normal: 1.25,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: false,\n priority_tier: false,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\n/* const ANTHROPIC_MODEL_META = {\n [CLAUDE_OPUS_4_5.name]: CLAUDE_OPUS_4_5,\n [CLAUDE_SONNET_4_5.name]: CLAUDE_SONNET_4_5,\n [CLAUDE_HAIKU_4_5.name]: CLAUDE_HAIKU_4_5,\n [CLAUDE_OPUS_4_1.name]: CLAUDE_OPUS_4_1,\n [CLAUDE_SONNET_4.name]: CLAUDE_SONNET_4,\n [CLAUDE_SONNET_3_7.name]: CLAUDE_SONNET_3_7,\n [CLAUDE_OPUS_4.name]: CLAUDE_OPUS_4,\n [CLAUDE_HAIKU_3_5.name]: CLAUDE_HAIKU_3_5,\n [CLAUDE_HAIKU_3.name]: CLAUDE_HAIKU_3,\n} as const */\n\n/* export type AnthropicModelProviderOptions<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n infer TProviderOptions,\n any,\n any\n >\n ? TProviderOptions\n : unknown */\n\n/* export type AnthropicModelToolCapabilities<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n any,\n infer TToolCapabilities,\n any\n >\n ? TToolCapabilities\n : unknown\n */\n/* export type AnthropicModelMessageCapabilities<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n any,\n any,\n infer TMessageCapabilities\n >\n ? TMessageCapabilities\n : unknown */\n\nconst CLAUDE_OPUS_4_6_FAST = {\n name: 'claude-opus-4.6-fast',\n id: 'claude-opus-4.6-fast',\n context_window: 1_000_000,\n max_output_tokens: 128_000,\n supports: {\n input: ['text', 'image'],\n extended_thinking: true,\n priority_tier: true,\n },\n pricing: {\n input: {\n normal: 30,\n cached: 3,\n },\n output: {\n normal: 150,\n },\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nexport const ANTHROPIC_MODELS = [\n CLAUDE_OPUS_4_6.id,\n CLAUDE_OPUS_4_5.id,\n CLAUDE_SONNET_4_6.id,\n CLAUDE_SONNET_4_5.id,\n CLAUDE_HAIKU_4_5.id,\n CLAUDE_OPUS_4_1.id,\n CLAUDE_SONNET_4.id,\n CLAUDE_SONNET_3_7.id,\n CLAUDE_OPUS_4.id,\n CLAUDE_HAIKU_3_5.id,\n CLAUDE_HAIKU_3.id,\n\n CLAUDE_OPUS_4_6_FAST.id,\n] as const\n\n// const ANTHROPIC_IMAGE_MODELS = [] as const\n// const ANTHROPIC_EMBEDDING_MODELS = [] as const\n// const ANTHROPIC_AUDIO_MODELS = [] as const\n// const ANTHROPIC_VIDEO_MODELS = [] as const\n\n/* type AnthropicModel = (typeof ANTHROPIC_MODELS)[number] */\nexport type AnthropicChatModel = (typeof ANTHROPIC_MODELS)[number]\n// Manual type map for per-model provider options\n// Models are differentiated by extended_thinking and priority_tier support\nexport type AnthropicChatModelProviderOptionsByName = {\n // Models with both extended_thinking and priority_tier\n [CLAUDE_OPUS_4_6.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4_6.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_HAIKU_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_1.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_3_7.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n\n // Model with priority_tier but NO extended_thinking\n [CLAUDE_HAIKU_3_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n\n // Model with neither extended_thinking nor priority_tier\n [CLAUDE_HAIKU_3.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicStopSequencesOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_6_FAST.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n}\n\n/**\n * Type-only map from chat model name to its supported input modalities.\n * All Anthropic Claude models support text, image, and document (PDF) input.\n * Used by the core AI types to constrain ContentPart types based on the selected model.\n * Note: These must be inlined as readonly arrays (not typeof) because the model\n * constants are not exported and typeof references don't work in .d.ts files\n * when consumed by external packages.\n *\n * @see https://docs.anthropic.com/claude/docs/vision\n * @see https://docs.anthropic.com/claude/docs/pdf-support\n */\nexport type AnthropicModelInputModalitiesByName = {\n [CLAUDE_OPUS_4_6.id]: typeof CLAUDE_OPUS_4_6.supports.input\n [CLAUDE_OPUS_4_5.id]: typeof CLAUDE_OPUS_4_5.supports.input\n [CLAUDE_SONNET_4_6.id]: typeof CLAUDE_SONNET_4_6.supports.input\n [CLAUDE_SONNET_4_5.id]: typeof CLAUDE_SONNET_4_5.supports.input\n [CLAUDE_HAIKU_4_5.id]: typeof CLAUDE_HAIKU_4_5.supports.input\n [CLAUDE_OPUS_4_1.id]: typeof CLAUDE_OPUS_4_1.supports.input\n [CLAUDE_SONNET_4.id]: typeof CLAUDE_SONNET_4.supports.input\n [CLAUDE_SONNET_3_7.id]: typeof CLAUDE_SONNET_3_7.supports.input\n [CLAUDE_OPUS_4.id]: typeof CLAUDE_OPUS_4.supports.input\n [CLAUDE_HAIKU_3_5.id]: typeof CLAUDE_HAIKU_3_5.supports.input\n [CLAUDE_HAIKU_3.id]: typeof CLAUDE_HAIKU_3.supports.input\n [CLAUDE_OPUS_4_6_FAST.id]: typeof CLAUDE_OPUS_4_6_FAST.supports.input\n}\n"],"names":[],"mappings":"AAkDA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAkBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAiBN;AAWA,MAAM,mBAAmB;AAAA,EAEvB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAgBN;AAWA,MAAM,gBAAgB;AAAA,EAEpB,IAAI;AAiBN;AAWA,MAAM,mBAAmB;AAAA,EAEvB,IAAI;AAiBN;AAWA,MAAM,iBAAiB;AAAA,EAErB,IAAI;AAiBN;AAwDA,MAAM,uBAAuB;AAAA,EAE3B,IAAI;AAiBN;AAWO,MAAM,mBAAmB;AAAA,EAC9B,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,eAAe;AAAA,EAEf,qBAAqB;AACvB;"}
|
|
1
|
+
{"version":3,"file":"model-meta.js","sources":["../../src/model-meta.ts"],"sourcesContent":["import type {\n AnthropicContainerOptions,\n AnthropicContextManagementOptions,\n AnthropicMCPOptions,\n AnthropicSamplingOptions,\n AnthropicServiceTierOptions,\n AnthropicStopSequencesOptions,\n AnthropicThinkingOptions,\n AnthropicToolChoiceOptions,\n} from './text/text-provider-options'\n\ninterface ModelMeta<\n TProviderOptions = unknown,\n TToolCapabilities = unknown,\n TMessageCapabilities = unknown,\n> {\n name: string\n id: string\n supports: {\n input: Array<'text' | 'image' | 'audio' | 'video' | 'document'>\n extended_thinking?: boolean\n adaptive_thinking?: boolean\n priority_tier?: boolean\n }\n context_window?: number\n max_output_tokens?: number\n knowledge_cutoff?: string\n pricing: {\n input: {\n normal: number\n cached?: number\n }\n output: {\n normal: number\n }\n }\n /**\n * Type-level description of which provider options this model supports.\n */\n providerOptions?: TProviderOptions\n /**\n * Type-level description of which tool capabilities this model supports.\n */\n toolCapabilities?: TToolCapabilities\n /**\n * Type-level description of which message/input capabilities this model supports.\n */\n messageCapabilities?: TMessageCapabilities\n}\n\nconst CLAUDE_OPUS_4_6 = {\n name: 'claude-opus-4-6',\n id: 'claude-opus-4-6',\n context_window: 200_000,\n max_output_tokens: 128_000,\n knowledge_cutoff: '2025-05-01',\n pricing: {\n input: {\n normal: 5,\n },\n output: {\n normal: 25,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4_5 = {\n name: 'claude-opus-4-5',\n id: 'claude-opus-4-5',\n context_window: 200_000,\n max_output_tokens: 32_000,\n knowledge_cutoff: '2025-11-01',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4_6 = {\n name: 'claude-sonnet-4-6',\n id: 'claude-sonnet-4-6',\n context_window: 1_000_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-08-01',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n adaptive_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4_5 = {\n name: 'claude-sonnet-4-5',\n id: 'claude-sonnet-4-5',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-09-29',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_4_5 = {\n name: 'claude-haiku-4-5',\n id: 'claude-haiku-4-5',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-10-01',\n pricing: {\n input: {\n normal: 1,\n },\n output: {\n normal: 5,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4_1 = {\n name: 'claude-opus-4-1',\n id: 'claude-opus-4-1',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-08-05',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_4 = {\n name: 'claude-sonnet-4',\n id: 'claude-sonnet-4',\n context_window: 200_000,\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_SONNET_3_7 = {\n name: 'claude-sonnet-3-7',\n id: 'claude-3-7-sonnet',\n max_output_tokens: 64_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 3,\n },\n output: {\n normal: 15,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4 = {\n name: 'claude-opus-4',\n id: 'claude-opus-4',\n context_window: 200_000,\n max_output_tokens: 32_000,\n knowledge_cutoff: '2025-05-14',\n pricing: {\n input: {\n normal: 15,\n },\n output: {\n normal: 75,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: true,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_3_5 = {\n name: 'claude-haiku-3-5',\n id: 'claude-3-5-haiku',\n context_window: 200_000,\n max_output_tokens: 8_000,\n knowledge_cutoff: '2025-10-22',\n pricing: {\n input: {\n normal: 0.8,\n },\n output: {\n normal: 4,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: false,\n priority_tier: true,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_HAIKU_3 = {\n name: 'claude-haiku-3',\n id: 'claude-3-haiku',\n context_window: 200_000,\n max_output_tokens: 4_000,\n knowledge_cutoff: '2024-03-07',\n pricing: {\n input: {\n normal: 0.25,\n },\n output: {\n normal: 1.25,\n },\n },\n supports: {\n input: ['text', 'image', 'document'],\n extended_thinking: false,\n priority_tier: false,\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\n/* const ANTHROPIC_MODEL_META = {\n [CLAUDE_OPUS_4_5.name]: CLAUDE_OPUS_4_5,\n [CLAUDE_SONNET_4_5.name]: CLAUDE_SONNET_4_5,\n [CLAUDE_HAIKU_4_5.name]: CLAUDE_HAIKU_4_5,\n [CLAUDE_OPUS_4_1.name]: CLAUDE_OPUS_4_1,\n [CLAUDE_SONNET_4.name]: CLAUDE_SONNET_4,\n [CLAUDE_SONNET_3_7.name]: CLAUDE_SONNET_3_7,\n [CLAUDE_OPUS_4.name]: CLAUDE_OPUS_4,\n [CLAUDE_HAIKU_3_5.name]: CLAUDE_HAIKU_3_5,\n [CLAUDE_HAIKU_3.name]: CLAUDE_HAIKU_3,\n} as const */\n\n/* export type AnthropicModelProviderOptions<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n infer TProviderOptions,\n any,\n any\n >\n ? TProviderOptions\n : unknown */\n\n/* export type AnthropicModelToolCapabilities<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n any,\n infer TToolCapabilities,\n any\n >\n ? TToolCapabilities\n : unknown\n */\n/* export type AnthropicModelMessageCapabilities<\n TModel extends keyof AnthropicModelMetaMap,\n> =\n AnthropicModelMetaMap[TModel] extends ModelMeta<\n any,\n any,\n infer TMessageCapabilities\n >\n ? TMessageCapabilities\n : unknown */\n\nconst CLAUDE_OPUS_4_6_FAST = {\n name: 'claude-opus-4.6-fast',\n id: 'claude-opus-4.6-fast',\n context_window: 1_000_000,\n max_output_tokens: 128_000,\n supports: {\n input: ['text', 'image'],\n extended_thinking: true,\n priority_tier: true,\n },\n pricing: {\n input: {\n normal: 30,\n cached: 3,\n },\n output: {\n normal: 150,\n },\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nconst CLAUDE_OPUS_4_7 = {\n name: 'claude-opus-4.7',\n id: 'claude-opus-4.7',\n context_window: 1_000_000,\n max_output_tokens: 128_000,\n supports: {\n input: ['text', 'image'],\n extended_thinking: true,\n priority_tier: true,\n },\n pricing: {\n input: {\n normal: 5,\n cached: 0.5,\n },\n output: {\n normal: 25,\n },\n },\n} as const satisfies ModelMeta<\n AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n>\n\nexport const ANTHROPIC_MODELS = [\n CLAUDE_OPUS_4_6.id,\n CLAUDE_OPUS_4_5.id,\n CLAUDE_SONNET_4_6.id,\n CLAUDE_SONNET_4_5.id,\n CLAUDE_HAIKU_4_5.id,\n CLAUDE_OPUS_4_1.id,\n CLAUDE_SONNET_4.id,\n CLAUDE_SONNET_3_7.id,\n CLAUDE_OPUS_4.id,\n CLAUDE_HAIKU_3_5.id,\n CLAUDE_HAIKU_3.id,\n\n CLAUDE_OPUS_4_6_FAST.id,\n\n CLAUDE_OPUS_4_7.id,\n] as const\n\n// const ANTHROPIC_IMAGE_MODELS = [] as const\n// const ANTHROPIC_EMBEDDING_MODELS = [] as const\n// const ANTHROPIC_AUDIO_MODELS = [] as const\n// const ANTHROPIC_VIDEO_MODELS = [] as const\n\n/* type AnthropicModel = (typeof ANTHROPIC_MODELS)[number] */\nexport type AnthropicChatModel = (typeof ANTHROPIC_MODELS)[number]\n// Manual type map for per-model provider options\n// Models are differentiated by extended_thinking and priority_tier support\nexport type AnthropicChatModelProviderOptionsByName = {\n // Models with both extended_thinking and priority_tier\n [CLAUDE_OPUS_4_6.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4_6.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_HAIKU_4_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_1.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_4.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_SONNET_3_7.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n\n // Model with priority_tier but NO extended_thinking\n [CLAUDE_HAIKU_3_5.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n\n // Model with neither extended_thinking nor priority_tier\n [CLAUDE_HAIKU_3.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicStopSequencesOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_6_FAST.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n [CLAUDE_OPUS_4_7.id]: AnthropicContainerOptions &\n AnthropicContextManagementOptions &\n AnthropicMCPOptions &\n AnthropicServiceTierOptions &\n AnthropicStopSequencesOptions &\n AnthropicThinkingOptions &\n AnthropicToolChoiceOptions &\n AnthropicSamplingOptions\n}\n\n/**\n * Type-only map from chat model name to its supported input modalities.\n * All Anthropic Claude models support text, image, and document (PDF) input.\n * Used by the core AI types to constrain ContentPart types based on the selected model.\n * Note: These must be inlined as readonly arrays (not typeof) because the model\n * constants are not exported and typeof references don't work in .d.ts files\n * when consumed by external packages.\n *\n * @see https://docs.anthropic.com/claude/docs/vision\n * @see https://docs.anthropic.com/claude/docs/pdf-support\n */\nexport type AnthropicModelInputModalitiesByName = {\n [CLAUDE_OPUS_4_6.id]: typeof CLAUDE_OPUS_4_6.supports.input\n [CLAUDE_OPUS_4_5.id]: typeof CLAUDE_OPUS_4_5.supports.input\n [CLAUDE_SONNET_4_6.id]: typeof CLAUDE_SONNET_4_6.supports.input\n [CLAUDE_SONNET_4_5.id]: typeof CLAUDE_SONNET_4_5.supports.input\n [CLAUDE_HAIKU_4_5.id]: typeof CLAUDE_HAIKU_4_5.supports.input\n [CLAUDE_OPUS_4_1.id]: typeof CLAUDE_OPUS_4_1.supports.input\n [CLAUDE_SONNET_4.id]: typeof CLAUDE_SONNET_4.supports.input\n [CLAUDE_SONNET_3_7.id]: typeof CLAUDE_SONNET_3_7.supports.input\n [CLAUDE_OPUS_4.id]: typeof CLAUDE_OPUS_4.supports.input\n [CLAUDE_HAIKU_3_5.id]: typeof CLAUDE_HAIKU_3_5.supports.input\n [CLAUDE_HAIKU_3.id]: typeof CLAUDE_HAIKU_3.supports.input\n [CLAUDE_OPUS_4_6_FAST.id]: typeof CLAUDE_OPUS_4_6_FAST.supports.input\n [CLAUDE_OPUS_4_7.id]: typeof CLAUDE_OPUS_4_7.supports.input\n}\n"],"names":[],"mappings":"AAkDA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAkBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAiBN;AAWA,MAAM,mBAAmB;AAAA,EAEvB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWA,MAAM,oBAAoB;AAAA,EAExB,IAAI;AAgBN;AAWA,MAAM,gBAAgB;AAAA,EAEpB,IAAI;AAiBN;AAWA,MAAM,mBAAmB;AAAA,EAEvB,IAAI;AAiBN;AAWA,MAAM,iBAAiB;AAAA,EAErB,IAAI;AAiBN;AAwDA,MAAM,uBAAuB;AAAA,EAE3B,IAAI;AAiBN;AAWA,MAAM,kBAAkB;AAAA,EAEtB,IAAI;AAiBN;AAWO,MAAM,mBAAmB;AAAA,EAC9B,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,eAAe;AAAA,EAEf,qBAAqB;AAAA,EAErB,gBAAgB;AAClB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/ai-anthropic",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"description": "Anthropic Claude adapter for TanStack AI",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"zod": "^4.0.0",
|
|
37
|
-
"@tanstack/ai": "^0.
|
|
37
|
+
"@tanstack/ai": "^0.11.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@vitest/coverage-v8": "4.0.14",
|
|
41
41
|
"zod": "^4.2.0",
|
|
42
|
-
"@tanstack/ai": "0.
|
|
42
|
+
"@tanstack/ai": "0.11.0"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "vite build",
|
|
@@ -12,6 +12,10 @@ import type {
|
|
|
12
12
|
} from '@tanstack/ai'
|
|
13
13
|
import type { AnthropicClientConfig } from '../utils'
|
|
14
14
|
|
|
15
|
+
/** Cast an event object to StreamChunk. */
|
|
16
|
+
const asChunk = (chunk: Record<string, unknown>) =>
|
|
17
|
+
chunk as unknown as StreamChunk
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* Configuration for Anthropic summarize adapter
|
|
17
21
|
*/
|
|
@@ -103,18 +107,18 @@ export class AnthropicSummarizeAdapter<
|
|
|
103
107
|
if (event.delta.type === 'text_delta') {
|
|
104
108
|
const delta = event.delta.text
|
|
105
109
|
accumulatedContent += delta
|
|
106
|
-
yield {
|
|
110
|
+
yield asChunk({
|
|
107
111
|
type: 'TEXT_MESSAGE_CONTENT',
|
|
108
112
|
messageId: id,
|
|
109
113
|
model,
|
|
110
114
|
timestamp: Date.now(),
|
|
111
115
|
delta,
|
|
112
116
|
content: accumulatedContent,
|
|
113
|
-
}
|
|
117
|
+
})
|
|
114
118
|
}
|
|
115
119
|
} else if (event.type === 'message_delta') {
|
|
116
120
|
outputTokens = event.usage.output_tokens
|
|
117
|
-
yield {
|
|
121
|
+
yield asChunk({
|
|
118
122
|
type: 'RUN_FINISHED',
|
|
119
123
|
runId: id,
|
|
120
124
|
model,
|
|
@@ -129,7 +133,7 @@ export class AnthropicSummarizeAdapter<
|
|
|
129
133
|
completionTokens: outputTokens,
|
|
130
134
|
totalTokens: inputTokens + outputTokens,
|
|
131
135
|
},
|
|
132
|
-
}
|
|
136
|
+
})
|
|
133
137
|
}
|
|
134
138
|
}
|
|
135
139
|
}
|
package/src/adapters/text.ts
CHANGED
|
@@ -45,6 +45,11 @@ import type {
|
|
|
45
45
|
} from '../message-types'
|
|
46
46
|
import type { AnthropicClientConfig } from '../utils'
|
|
47
47
|
|
|
48
|
+
/** Cast an event object to StreamChunk. Adapters construct events with string
|
|
49
|
+
* literal types which are structurally compatible with the EventType enum. */
|
|
50
|
+
const asChunk = (chunk: Record<string, unknown>) =>
|
|
51
|
+
chunk as unknown as StreamChunk
|
|
52
|
+
|
|
48
53
|
/**
|
|
49
54
|
* Configuration for Anthropic text adapter
|
|
50
55
|
*/
|
|
@@ -129,20 +134,22 @@ export class AnthropicTextAdapter<
|
|
|
129
134
|
},
|
|
130
135
|
)
|
|
131
136
|
|
|
132
|
-
yield* this.processAnthropicStream(stream, options
|
|
137
|
+
yield* this.processAnthropicStream(stream, options, () =>
|
|
133
138
|
generateId(this.name),
|
|
134
139
|
)
|
|
135
140
|
} catch (error: unknown) {
|
|
136
141
|
const err = error as Error & { status?: number; code?: string }
|
|
137
|
-
yield {
|
|
142
|
+
yield asChunk({
|
|
138
143
|
type: 'RUN_ERROR',
|
|
139
144
|
model: options.model,
|
|
140
145
|
timestamp: Date.now(),
|
|
146
|
+
message: err.message || 'Unknown error occurred',
|
|
147
|
+
code: err.code || String(err.status),
|
|
141
148
|
error: {
|
|
142
149
|
message: err.message || 'Unknown error occurred',
|
|
143
150
|
code: err.code || String(err.status),
|
|
144
151
|
},
|
|
145
|
-
}
|
|
152
|
+
})
|
|
146
153
|
}
|
|
147
154
|
}
|
|
148
155
|
|
|
@@ -523,9 +530,10 @@ export class AnthropicTextAdapter<
|
|
|
523
530
|
|
|
524
531
|
private async *processAnthropicStream(
|
|
525
532
|
stream: AsyncIterable<Anthropic_SDK.Beta.BetaRawMessageStreamEvent>,
|
|
526
|
-
|
|
533
|
+
options: TextOptions<AnthropicTextProviderOptions>,
|
|
527
534
|
genId: () => string,
|
|
528
535
|
): AsyncIterable<StreamChunk> {
|
|
536
|
+
const model = options.model
|
|
529
537
|
let accumulatedContent = ''
|
|
530
538
|
let accumulatedThinking = ''
|
|
531
539
|
const timestamp = Date.now()
|
|
@@ -536,9 +544,12 @@ export class AnthropicTextAdapter<
|
|
|
536
544
|
let currentToolIndex = -1
|
|
537
545
|
|
|
538
546
|
// AG-UI lifecycle tracking
|
|
539
|
-
const runId = genId()
|
|
547
|
+
const runId = options.runId ?? genId()
|
|
548
|
+
const threadId = options.threadId ?? genId()
|
|
540
549
|
const messageId = genId()
|
|
541
550
|
let stepId: string | null = null
|
|
551
|
+
let reasoningMessageId: string | null = null
|
|
552
|
+
let hasClosedReasoning = false
|
|
542
553
|
let hasEmittedRunStarted = false
|
|
543
554
|
let hasEmittedTextMessageStart = false
|
|
544
555
|
let hasEmittedRunFinished = false
|
|
@@ -550,12 +561,13 @@ export class AnthropicTextAdapter<
|
|
|
550
561
|
// Emit RUN_STARTED on first event
|
|
551
562
|
if (!hasEmittedRunStarted) {
|
|
552
563
|
hasEmittedRunStarted = true
|
|
553
|
-
yield {
|
|
564
|
+
yield asChunk({
|
|
554
565
|
type: 'RUN_STARTED',
|
|
555
566
|
runId,
|
|
567
|
+
threadId,
|
|
556
568
|
model,
|
|
557
569
|
timestamp,
|
|
558
|
-
}
|
|
570
|
+
})
|
|
559
571
|
}
|
|
560
572
|
|
|
561
573
|
if (event.type === 'content_block_start') {
|
|
@@ -570,77 +582,126 @@ export class AnthropicTextAdapter<
|
|
|
570
582
|
})
|
|
571
583
|
} else if (event.content_block.type === 'thinking') {
|
|
572
584
|
accumulatedThinking = ''
|
|
573
|
-
// Emit STEP_STARTED for thinking
|
|
585
|
+
// Emit REASONING and STEP_STARTED for thinking
|
|
574
586
|
stepId = genId()
|
|
575
|
-
|
|
587
|
+
reasoningMessageId = genId()
|
|
588
|
+
|
|
589
|
+
// Spec REASONING events
|
|
590
|
+
yield asChunk({
|
|
591
|
+
type: 'REASONING_START',
|
|
592
|
+
messageId: reasoningMessageId,
|
|
593
|
+
model,
|
|
594
|
+
timestamp,
|
|
595
|
+
})
|
|
596
|
+
yield asChunk({
|
|
597
|
+
type: 'REASONING_MESSAGE_START',
|
|
598
|
+
messageId: reasoningMessageId,
|
|
599
|
+
role: 'reasoning' as const,
|
|
600
|
+
model,
|
|
601
|
+
timestamp,
|
|
602
|
+
})
|
|
603
|
+
|
|
604
|
+
// Legacy STEP events (kept during transition)
|
|
605
|
+
yield asChunk({
|
|
576
606
|
type: 'STEP_STARTED',
|
|
607
|
+
stepName: stepId,
|
|
577
608
|
stepId,
|
|
578
609
|
model,
|
|
579
610
|
timestamp,
|
|
580
611
|
stepType: 'thinking',
|
|
581
|
-
}
|
|
612
|
+
})
|
|
582
613
|
}
|
|
583
614
|
} else if (event.type === 'content_block_delta') {
|
|
584
615
|
if (event.delta.type === 'text_delta') {
|
|
616
|
+
// Close reasoning before text starts
|
|
617
|
+
if (reasoningMessageId && !hasClosedReasoning) {
|
|
618
|
+
hasClosedReasoning = true
|
|
619
|
+
yield asChunk({
|
|
620
|
+
type: 'REASONING_MESSAGE_END',
|
|
621
|
+
messageId: reasoningMessageId,
|
|
622
|
+
model,
|
|
623
|
+
timestamp,
|
|
624
|
+
})
|
|
625
|
+
yield asChunk({
|
|
626
|
+
type: 'REASONING_END',
|
|
627
|
+
messageId: reasoningMessageId,
|
|
628
|
+
model,
|
|
629
|
+
timestamp,
|
|
630
|
+
})
|
|
631
|
+
}
|
|
632
|
+
|
|
585
633
|
// Emit TEXT_MESSAGE_START on first text content
|
|
586
634
|
if (!hasEmittedTextMessageStart) {
|
|
587
635
|
hasEmittedTextMessageStart = true
|
|
588
|
-
yield {
|
|
636
|
+
yield asChunk({
|
|
589
637
|
type: 'TEXT_MESSAGE_START',
|
|
590
638
|
messageId,
|
|
591
639
|
model,
|
|
592
640
|
timestamp,
|
|
593
641
|
role: 'assistant',
|
|
594
|
-
}
|
|
642
|
+
})
|
|
595
643
|
}
|
|
596
644
|
|
|
597
645
|
const delta = event.delta.text
|
|
598
646
|
accumulatedContent += delta
|
|
599
|
-
yield {
|
|
647
|
+
yield asChunk({
|
|
600
648
|
type: 'TEXT_MESSAGE_CONTENT',
|
|
601
649
|
messageId,
|
|
602
650
|
model,
|
|
603
651
|
timestamp,
|
|
604
652
|
delta,
|
|
605
653
|
content: accumulatedContent,
|
|
606
|
-
}
|
|
654
|
+
})
|
|
607
655
|
} else if (event.delta.type === 'thinking_delta') {
|
|
608
656
|
const delta = event.delta.thinking
|
|
609
657
|
accumulatedThinking += delta
|
|
610
|
-
|
|
658
|
+
|
|
659
|
+
// Spec REASONING content event
|
|
660
|
+
yield asChunk({
|
|
661
|
+
type: 'REASONING_MESSAGE_CONTENT',
|
|
662
|
+
messageId: reasoningMessageId!,
|
|
663
|
+
delta,
|
|
664
|
+
model,
|
|
665
|
+
timestamp,
|
|
666
|
+
})
|
|
667
|
+
|
|
668
|
+
// Legacy STEP event
|
|
669
|
+
yield asChunk({
|
|
611
670
|
type: 'STEP_FINISHED',
|
|
671
|
+
stepName: stepId || genId(),
|
|
612
672
|
stepId: stepId || genId(),
|
|
613
673
|
model,
|
|
614
674
|
timestamp,
|
|
615
675
|
delta,
|
|
616
676
|
content: accumulatedThinking,
|
|
617
|
-
}
|
|
677
|
+
})
|
|
618
678
|
} else if (event.delta.type === 'input_json_delta') {
|
|
619
679
|
const existing = toolCallsMap.get(currentToolIndex)
|
|
620
680
|
if (existing) {
|
|
621
681
|
// Emit TOOL_CALL_START on first args delta
|
|
622
682
|
if (!existing.started) {
|
|
623
683
|
existing.started = true
|
|
624
|
-
yield {
|
|
684
|
+
yield asChunk({
|
|
625
685
|
type: 'TOOL_CALL_START',
|
|
626
686
|
toolCallId: existing.id,
|
|
687
|
+
toolCallName: existing.name,
|
|
627
688
|
toolName: existing.name,
|
|
628
689
|
model,
|
|
629
690
|
timestamp,
|
|
630
691
|
index: currentToolIndex,
|
|
631
|
-
}
|
|
692
|
+
})
|
|
632
693
|
}
|
|
633
694
|
|
|
634
695
|
existing.input += event.delta.partial_json
|
|
635
696
|
|
|
636
|
-
yield {
|
|
697
|
+
yield asChunk({
|
|
637
698
|
type: 'TOOL_CALL_ARGS',
|
|
638
699
|
toolCallId: existing.id,
|
|
639
700
|
model,
|
|
640
701
|
timestamp,
|
|
641
702
|
delta: event.delta.partial_json,
|
|
642
703
|
args: existing.input,
|
|
643
|
-
}
|
|
704
|
+
})
|
|
644
705
|
}
|
|
645
706
|
}
|
|
646
707
|
} else if (event.type === 'content_block_stop') {
|
|
@@ -650,14 +711,15 @@ export class AnthropicTextAdapter<
|
|
|
650
711
|
// If tool call wasn't started yet (no args), start it now
|
|
651
712
|
if (!existing.started) {
|
|
652
713
|
existing.started = true
|
|
653
|
-
yield {
|
|
714
|
+
yield asChunk({
|
|
654
715
|
type: 'TOOL_CALL_START',
|
|
655
716
|
toolCallId: existing.id,
|
|
717
|
+
toolCallName: existing.name,
|
|
656
718
|
toolName: existing.name,
|
|
657
719
|
model,
|
|
658
720
|
timestamp,
|
|
659
721
|
index: currentToolIndex,
|
|
660
|
-
}
|
|
722
|
+
})
|
|
661
723
|
}
|
|
662
724
|
|
|
663
725
|
// Emit TOOL_CALL_END
|
|
@@ -669,14 +731,15 @@ export class AnthropicTextAdapter<
|
|
|
669
731
|
parsedInput = {}
|
|
670
732
|
}
|
|
671
733
|
|
|
672
|
-
yield {
|
|
734
|
+
yield asChunk({
|
|
673
735
|
type: 'TOOL_CALL_END',
|
|
674
736
|
toolCallId: existing.id,
|
|
737
|
+
toolCallName: existing.name,
|
|
675
738
|
toolName: existing.name,
|
|
676
739
|
model,
|
|
677
740
|
timestamp,
|
|
678
741
|
input: parsedInput,
|
|
679
|
-
}
|
|
742
|
+
})
|
|
680
743
|
|
|
681
744
|
// Reset so a new TEXT_MESSAGE_START is emitted if text follows tool calls
|
|
682
745
|
hasEmittedTextMessageStart = false
|
|
@@ -684,36 +747,73 @@ export class AnthropicTextAdapter<
|
|
|
684
747
|
} else {
|
|
685
748
|
// Emit TEXT_MESSAGE_END only for text blocks (not tool_use blocks)
|
|
686
749
|
if (hasEmittedTextMessageStart && accumulatedContent) {
|
|
687
|
-
yield {
|
|
750
|
+
yield asChunk({
|
|
688
751
|
type: 'TEXT_MESSAGE_END',
|
|
689
752
|
messageId,
|
|
690
753
|
model,
|
|
691
754
|
timestamp,
|
|
692
|
-
}
|
|
755
|
+
})
|
|
693
756
|
}
|
|
694
757
|
}
|
|
695
758
|
currentBlockType = null
|
|
696
759
|
} else if (event.type === 'message_stop') {
|
|
760
|
+
// Close reasoning events if still open
|
|
761
|
+
if (reasoningMessageId && !hasClosedReasoning) {
|
|
762
|
+
hasClosedReasoning = true
|
|
763
|
+
yield asChunk({
|
|
764
|
+
type: 'REASONING_MESSAGE_END',
|
|
765
|
+
messageId: reasoningMessageId,
|
|
766
|
+
model,
|
|
767
|
+
timestamp,
|
|
768
|
+
})
|
|
769
|
+
yield asChunk({
|
|
770
|
+
type: 'REASONING_END',
|
|
771
|
+
messageId: reasoningMessageId,
|
|
772
|
+
model,
|
|
773
|
+
timestamp,
|
|
774
|
+
})
|
|
775
|
+
}
|
|
776
|
+
|
|
697
777
|
// Only emit RUN_FINISHED from message_stop if message_delta didn't already emit one.
|
|
698
778
|
// message_delta carries the real stop_reason (tool_use, end_turn, etc.),
|
|
699
779
|
// while message_stop is just a completion signal.
|
|
700
780
|
if (!hasEmittedRunFinished) {
|
|
701
|
-
yield {
|
|
781
|
+
yield asChunk({
|
|
702
782
|
type: 'RUN_FINISHED',
|
|
703
783
|
runId,
|
|
784
|
+
threadId,
|
|
704
785
|
model,
|
|
705
786
|
timestamp,
|
|
706
787
|
finishReason: 'stop',
|
|
707
|
-
}
|
|
788
|
+
})
|
|
708
789
|
}
|
|
709
790
|
} else if (event.type === 'message_delta') {
|
|
710
791
|
if (event.delta.stop_reason) {
|
|
711
792
|
hasEmittedRunFinished = true
|
|
793
|
+
|
|
794
|
+
// Close reasoning events if still open
|
|
795
|
+
if (reasoningMessageId && !hasClosedReasoning) {
|
|
796
|
+
hasClosedReasoning = true
|
|
797
|
+
yield asChunk({
|
|
798
|
+
type: 'REASONING_MESSAGE_END',
|
|
799
|
+
messageId: reasoningMessageId,
|
|
800
|
+
model,
|
|
801
|
+
timestamp,
|
|
802
|
+
})
|
|
803
|
+
yield asChunk({
|
|
804
|
+
type: 'REASONING_END',
|
|
805
|
+
messageId: reasoningMessageId,
|
|
806
|
+
model,
|
|
807
|
+
timestamp,
|
|
808
|
+
})
|
|
809
|
+
}
|
|
810
|
+
|
|
712
811
|
switch (event.delta.stop_reason) {
|
|
713
812
|
case 'tool_use': {
|
|
714
|
-
yield {
|
|
813
|
+
yield asChunk({
|
|
715
814
|
type: 'RUN_FINISHED',
|
|
716
815
|
runId,
|
|
816
|
+
threadId,
|
|
717
817
|
model,
|
|
718
818
|
timestamp,
|
|
719
819
|
finishReason: 'tool_calls',
|
|
@@ -724,27 +824,31 @@ export class AnthropicTextAdapter<
|
|
|
724
824
|
(event.usage.input_tokens || 0) +
|
|
725
825
|
(event.usage.output_tokens || 0),
|
|
726
826
|
},
|
|
727
|
-
}
|
|
827
|
+
})
|
|
728
828
|
break
|
|
729
829
|
}
|
|
730
830
|
case 'max_tokens': {
|
|
731
|
-
yield {
|
|
831
|
+
yield asChunk({
|
|
732
832
|
type: 'RUN_ERROR',
|
|
733
833
|
runId,
|
|
734
834
|
model,
|
|
735
835
|
timestamp,
|
|
836
|
+
message:
|
|
837
|
+
'The response was cut off because the maximum token limit was reached.',
|
|
838
|
+
code: 'max_tokens',
|
|
736
839
|
error: {
|
|
737
840
|
message:
|
|
738
841
|
'The response was cut off because the maximum token limit was reached.',
|
|
739
842
|
code: 'max_tokens',
|
|
740
843
|
},
|
|
741
|
-
}
|
|
844
|
+
})
|
|
742
845
|
break
|
|
743
846
|
}
|
|
744
847
|
default: {
|
|
745
|
-
yield {
|
|
848
|
+
yield asChunk({
|
|
746
849
|
type: 'RUN_FINISHED',
|
|
747
850
|
runId,
|
|
851
|
+
threadId,
|
|
748
852
|
model,
|
|
749
853
|
timestamp,
|
|
750
854
|
finishReason: 'stop',
|
|
@@ -755,7 +859,7 @@ export class AnthropicTextAdapter<
|
|
|
755
859
|
(event.usage.input_tokens || 0) +
|
|
756
860
|
(event.usage.output_tokens || 0),
|
|
757
861
|
},
|
|
758
|
-
}
|
|
862
|
+
})
|
|
759
863
|
}
|
|
760
864
|
}
|
|
761
865
|
}
|
|
@@ -764,16 +868,18 @@ export class AnthropicTextAdapter<
|
|
|
764
868
|
} catch (error: unknown) {
|
|
765
869
|
const err = error as Error & { status?: number; code?: string }
|
|
766
870
|
|
|
767
|
-
yield {
|
|
871
|
+
yield asChunk({
|
|
768
872
|
type: 'RUN_ERROR',
|
|
769
873
|
runId,
|
|
770
874
|
model,
|
|
771
875
|
timestamp,
|
|
876
|
+
message: err.message || 'Unknown error occurred',
|
|
877
|
+
code: err.code || String(err.status),
|
|
772
878
|
error: {
|
|
773
879
|
message: err.message || 'Unknown error occurred',
|
|
774
880
|
code: err.code || String(err.status),
|
|
775
881
|
},
|
|
776
|
-
}
|
|
882
|
+
})
|
|
777
883
|
}
|
|
778
884
|
}
|
|
779
885
|
}
|