@node-llm/core 1.18.0 → 1.19.0

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.
Files changed (183) hide show
  1. package/README.md +14 -12
  2. package/dist/agent/Agent.d.ts +17 -3
  3. package/dist/agent/Agent.d.ts.map +1 -1
  4. package/dist/agent/Agent.js +11 -0
  5. package/dist/aliases.d.ts +341 -316
  6. package/dist/aliases.d.ts.map +1 -1
  7. package/dist/aliases.js +467 -442
  8. package/dist/chat/Chat.d.ts +12 -5
  9. package/dist/chat/Chat.d.ts.map +1 -1
  10. package/dist/chat/Chat.js +45 -13
  11. package/dist/chat/ChatOptions.d.ts +17 -0
  12. package/dist/chat/ChatOptions.d.ts.map +1 -1
  13. package/dist/chat/ChatResponse.d.ts +5 -0
  14. package/dist/chat/ChatResponse.d.ts.map +1 -1
  15. package/dist/chat/ChatResponse.js +12 -4
  16. package/dist/chat/ChatStream.d.ts.map +1 -1
  17. package/dist/chat/ChatStream.js +20 -10
  18. package/dist/chat/PromptCache.d.ts +7 -0
  19. package/dist/chat/PromptCache.d.ts.map +1 -0
  20. package/dist/chat/PromptCache.js +7 -0
  21. package/dist/chat/Temperature.d.ts +7 -0
  22. package/dist/chat/Temperature.d.ts.map +1 -0
  23. package/dist/chat/Temperature.js +17 -0
  24. package/dist/chat/Tool.d.ts +26 -3
  25. package/dist/chat/Tool.d.ts.map +1 -1
  26. package/dist/chat/Tool.js +28 -2
  27. package/dist/chat/ToolCallOutcome.d.ts +12 -0
  28. package/dist/chat/ToolCallOutcome.d.ts.map +1 -1
  29. package/dist/chat/ToolCallOutcome.js +14 -0
  30. package/dist/chat/ToolResultWindow.d.ts +16 -0
  31. package/dist/chat/ToolResultWindow.d.ts.map +1 -0
  32. package/dist/chat/ToolResultWindow.js +25 -0
  33. package/dist/config.d.ts +30 -0
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +66 -30
  36. package/dist/errors/billing.d.ts +7 -0
  37. package/dist/errors/billing.d.ts.map +1 -0
  38. package/dist/errors/billing.js +24 -0
  39. package/dist/errors/index.d.ts +28 -0
  40. package/dist/errors/index.d.ts.map +1 -1
  41. package/dist/errors/index.js +32 -0
  42. package/dist/executor/Executor.d.ts.map +1 -1
  43. package/dist/executor/Executor.js +5 -3
  44. package/dist/index.d.ts +4 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/llm.d.ts +2 -1
  48. package/dist/llm.d.ts.map +1 -1
  49. package/dist/llm.js +8 -2
  50. package/dist/models/ModelRegistry.d.ts +12 -1
  51. package/dist/models/ModelRegistry.d.ts.map +1 -1
  52. package/dist/models/ModelRegistry.js +22 -2
  53. package/dist/models/models.json +11900 -4568
  54. package/dist/models/types.d.ts +14 -1
  55. package/dist/models/types.d.ts.map +1 -1
  56. package/dist/providers/Provider.d.ts +23 -1
  57. package/dist/providers/Provider.d.ts.map +1 -1
  58. package/dist/providers/anthropic/AnthropicProvider.d.ts +2 -0
  59. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
  60. package/dist/providers/anthropic/AnthropicProvider.js +2 -0
  61. package/dist/providers/anthropic/Capabilities.d.ts +1 -0
  62. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
  63. package/dist/providers/anthropic/Capabilities.js +3 -0
  64. package/dist/providers/anthropic/Chat.d.ts.map +1 -1
  65. package/dist/providers/anthropic/Chat.js +7 -75
  66. package/dist/providers/anthropic/Errors.d.ts.map +1 -1
  67. package/dist/providers/anthropic/Errors.js +4 -3
  68. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  69. package/dist/providers/anthropic/Streaming.js +4 -66
  70. package/dist/providers/anthropic/Utils.d.ts +33 -1
  71. package/dist/providers/anthropic/Utils.d.ts.map +1 -1
  72. package/dist/providers/anthropic/Utils.js +114 -0
  73. package/dist/providers/anthropic/types.d.ts +17 -3
  74. package/dist/providers/anthropic/types.d.ts.map +1 -1
  75. package/dist/providers/azure/AzureProvider.d.ts +54 -0
  76. package/dist/providers/azure/AzureProvider.d.ts.map +1 -0
  77. package/dist/providers/azure/AzureProvider.js +110 -0
  78. package/dist/providers/azure/Capabilities.d.ts +16 -0
  79. package/dist/providers/azure/Capabilities.d.ts.map +1 -0
  80. package/dist/providers/azure/Capabilities.js +36 -0
  81. package/dist/providers/azure/Embedding.d.ts +11 -0
  82. package/dist/providers/azure/Embedding.d.ts.map +1 -0
  83. package/dist/providers/azure/Embedding.js +23 -0
  84. package/dist/providers/azure/Models.d.ts +18 -0
  85. package/dist/providers/azure/Models.d.ts.map +1 -0
  86. package/dist/providers/azure/Models.js +29 -0
  87. package/dist/providers/azure/index.d.ts +5 -0
  88. package/dist/providers/azure/index.d.ts.map +1 -0
  89. package/dist/providers/azure/index.js +28 -0
  90. package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -1
  91. package/dist/providers/bedrock/BedrockProvider.js +1 -0
  92. package/dist/providers/bedrock/Capabilities.d.ts +1 -0
  93. package/dist/providers/bedrock/Capabilities.d.ts.map +1 -1
  94. package/dist/providers/bedrock/Capabilities.js +3 -0
  95. package/dist/providers/bedrock/Chat.d.ts.map +1 -1
  96. package/dist/providers/bedrock/Chat.js +6 -2
  97. package/dist/providers/bedrock/Errors.d.ts.map +1 -1
  98. package/dist/providers/bedrock/Errors.js +4 -0
  99. package/dist/providers/bedrock/Streaming.d.ts.map +1 -1
  100. package/dist/providers/bedrock/Streaming.js +4 -1
  101. package/dist/providers/deepseek/Capabilities.d.ts +1 -0
  102. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  103. package/dist/providers/deepseek/Capabilities.js +3 -0
  104. package/dist/providers/deepseek/Chat.d.ts.map +1 -1
  105. package/dist/providers/deepseek/Chat.js +3 -2
  106. package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -0
  107. package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
  108. package/dist/providers/deepseek/DeepSeekProvider.js +1 -0
  109. package/dist/providers/deepseek/Errors.d.ts.map +1 -1
  110. package/dist/providers/deepseek/Errors.js +5 -4
  111. package/dist/providers/gemini/Capabilities.d.ts +1 -0
  112. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  113. package/dist/providers/gemini/Capabilities.js +3 -0
  114. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  115. package/dist/providers/gemini/Chat.js +3 -2
  116. package/dist/providers/gemini/Errors.d.ts.map +1 -1
  117. package/dist/providers/gemini/Errors.js +4 -3
  118. package/dist/providers/gemini/GeminiProvider.d.ts +1 -0
  119. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  120. package/dist/providers/gemini/GeminiProvider.js +1 -0
  121. package/dist/providers/mistral/Capabilities.d.ts +1 -0
  122. package/dist/providers/mistral/Capabilities.d.ts.map +1 -1
  123. package/dist/providers/mistral/Capabilities.js +3 -0
  124. package/dist/providers/mistral/Chat.d.ts.map +1 -1
  125. package/dist/providers/mistral/Chat.js +3 -2
  126. package/dist/providers/mistral/Errors.d.ts.map +1 -1
  127. package/dist/providers/mistral/Errors.js +4 -3
  128. package/dist/providers/mistral/MistralProvider.d.ts +1 -0
  129. package/dist/providers/mistral/MistralProvider.d.ts.map +1 -1
  130. package/dist/providers/mistral/MistralProvider.js +1 -0
  131. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
  132. package/dist/providers/ollama/OllamaProvider.js +1 -0
  133. package/dist/providers/openai/Capabilities.d.ts +6 -0
  134. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  135. package/dist/providers/openai/Capabilities.js +10 -0
  136. package/dist/providers/openai/Chat.d.ts +3 -0
  137. package/dist/providers/openai/Chat.d.ts.map +1 -1
  138. package/dist/providers/openai/Chat.js +26 -7
  139. package/dist/providers/openai/Embedding.d.ts +2 -0
  140. package/dist/providers/openai/Embedding.d.ts.map +1 -1
  141. package/dist/providers/openai/Embedding.js +8 -5
  142. package/dist/providers/openai/Errors.d.ts.map +1 -1
  143. package/dist/providers/openai/Errors.js +4 -3
  144. package/dist/providers/openai/Models.d.ts +10 -0
  145. package/dist/providers/openai/Models.d.ts.map +1 -1
  146. package/dist/providers/openai/Models.js +12 -8
  147. package/dist/providers/openai/OpenAIProvider.d.ts +11 -1
  148. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  149. package/dist/providers/openai/OpenAIProvider.js +36 -0
  150. package/dist/providers/openai/Responses.d.ts +30 -0
  151. package/dist/providers/openai/Responses.d.ts.map +1 -0
  152. package/dist/providers/openai/Responses.js +176 -0
  153. package/dist/providers/openai/Streaming.d.ts +2 -0
  154. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  155. package/dist/providers/openai/Streaming.js +19 -5
  156. package/dist/providers/openrouter/Capabilities.d.ts +1 -0
  157. package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
  158. package/dist/providers/openrouter/Capabilities.js +3 -0
  159. package/dist/providers/openrouter/OpenRouterProvider.d.ts +1 -0
  160. package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
  161. package/dist/providers/openrouter/OpenRouterProvider.js +1 -0
  162. package/dist/providers/registry.d.ts +2 -1
  163. package/dist/providers/registry.d.ts.map +1 -1
  164. package/dist/providers/registry.js +2 -1
  165. package/dist/providers/xai/Capabilities.d.ts +1 -0
  166. package/dist/providers/xai/Capabilities.d.ts.map +1 -1
  167. package/dist/providers/xai/Capabilities.js +3 -0
  168. package/dist/providers/xai/Chat.d.ts.map +1 -1
  169. package/dist/providers/xai/Chat.js +3 -2
  170. package/dist/providers/xai/Errors.d.ts.map +1 -1
  171. package/dist/providers/xai/Errors.js +5 -2
  172. package/dist/providers/xai/XAIProvider.d.ts +1 -0
  173. package/dist/providers/xai/XAIProvider.d.ts.map +1 -1
  174. package/dist/providers/xai/XAIProvider.js +1 -0
  175. package/dist/schema/Schema.d.ts +3 -3
  176. package/dist/schema/Schema.d.ts.map +1 -1
  177. package/dist/schema/to-json-schema.d.ts +2 -2
  178. package/dist/schema/to-json-schema.d.ts.map +1 -1
  179. package/dist/schema/to-json-schema.js +3 -8
  180. package/dist/schema/zod.d.ts +32 -0
  181. package/dist/schema/zod.d.ts.map +1 -0
  182. package/dist/schema/zod.js +31 -0
  183. package/package.json +14 -15
@@ -3,12 +3,14 @@ export interface ModelPricing {
3
3
  standard?: {
4
4
  input_per_million?: number;
5
5
  cached_input_per_million?: number;
6
+ cache_write_per_million?: number;
6
7
  output_per_million?: number;
7
8
  reasoning_output_per_million?: number;
8
9
  };
9
10
  batch?: {
10
11
  input_per_million?: number;
11
12
  cached_input_per_million?: number;
13
+ cache_write_per_million?: number;
12
14
  output_per_million?: number;
13
15
  reasoning_output_per_million?: number;
14
16
  };
@@ -30,6 +32,17 @@ export interface ModelPricing {
30
32
  };
31
33
  };
32
34
  }
35
+ /**
36
+ * A thinking control a model accepts, as published by models.dev.
37
+ * e.g. { type: "effort", values: ["low", "high"] } or { type: "budget_tokens", min: 1024 }.
38
+ */
39
+ export interface ReasoningOption {
40
+ type: "effort" | "budget_tokens" | "toggle" | (string & {});
41
+ values?: string[];
42
+ min?: number;
43
+ max?: number;
44
+ default?: string | number;
45
+ }
33
46
  export interface Model {
34
47
  id: string;
35
48
  name: string;
@@ -47,7 +60,7 @@ export interface Model {
47
60
  pricing?: ModelPricing;
48
61
  metadata?: Record<string, unknown>;
49
62
  }
50
- export type ProviderName = "openai" | "anthropic" | "gemini" | "deepseek" | "openrouter" | "ollama" | "mistral" | (string & {});
63
+ export type ProviderName = "openai" | "anthropic" | "gemini" | "deepseek" | "openrouter" | "ollama" | "mistral" | "azure" | (string & {});
51
64
  export type ModelCapability = "streaming" | "function_calling" | "structured_output" | "predicted_outputs" | "distillation" | "fine_tuning" | "batch" | "realtime" | "image_generation" | "speech_generation" | "transcription" | "translation" | "citations" | "reasoning" | "caching" | "moderation" | "json_mode" | "vision" | "chat" | "tools";
52
65
  export type ModelModality = "text" | "image" | "audio" | "pdf" | "video" | "file" | "embeddings" | "moderation";
53
66
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE;YACT,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;YAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,4BAA4B,CAAC,EAAE,MAAM,CAAC;SACvC,CAAC;QACF,KAAK,CAAC,EAAE;YACN,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;YAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,4BAA4B,CAAC,EAAE,MAAM,CAAC;SACvC,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE;YACT,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IACF,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE;YACT,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,OAAO,GACP,UAAU,GACV,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,aAAa,GACb,WAAW,GACX,WAAW,GACX,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,OAAO,GACP,MAAM,GACN,YAAY,GACZ,YAAY,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
@@ -17,14 +17,22 @@ export interface ThinkingConfig {
17
17
  /**
18
18
  * Effort level for thinking-capable models.
19
19
  * 'low', 'medium', 'high' map to provider-specific qualitative settings.
20
+ * 'xhigh' and 'max' are accepted by newer models (e.g. Claude Opus 4.7+, Sonnet 5).
20
21
  * 'none' disables thinking if the model allows it.
21
22
  */
22
- effort?: "low" | "medium" | "high" | "none";
23
+ effort?: ThinkingEffort;
23
24
  /**
24
25
  * Maximum budget (in tokens) dedicated to thinking.
26
+ * Not accepted by models that only think adaptively (e.g. Claude Opus 4.7+, Sonnet 5).
25
27
  */
26
28
  budget?: number;
29
+ /**
30
+ * How much thinking text the provider returns (Anthropic).
31
+ * Newer Claude models omit it by default; pass 'summarized' to read it.
32
+ */
33
+ display?: "summarized" | "omitted";
27
34
  }
35
+ export type ThinkingEffort = "low" | "medium" | "high" | "xhigh" | "max" | "none";
28
36
  export interface ThinkingResult {
29
37
  /**
30
38
  * The thinking text (chain of thought).
@@ -58,6 +66,10 @@ export interface ChatRequest {
58
66
  prediction?: string | ContentPart[];
59
67
  headers?: Record<string, string>;
60
68
  requestTimeout?: number;
69
+ /** Cancels the request */
70
+ signal?: AbortSignal;
71
+ /** Set only for providers that support prompt caching */
72
+ promptCache?: boolean;
61
73
  [key: string]: unknown;
62
74
  }
63
75
  export interface ChatChunk {
@@ -72,12 +84,15 @@ export interface ChatChunk {
72
84
  metadata?: Record<string, unknown>;
73
85
  }
74
86
  export interface Usage {
87
+ /** Every input token, including those read from or written to a prompt cache */
75
88
  input_tokens: number;
76
89
  output_tokens: number;
77
90
  total_tokens: number;
78
91
  reasoning_tokens?: number;
79
92
  image_tokens?: number;
93
+ /** Input tokens read from a prompt cache */
80
94
  cached_tokens?: number;
95
+ /** Input tokens written to a prompt cache */
81
96
  cache_creation_tokens?: number;
82
97
  cost?: number;
83
98
  input_cost?: number;
@@ -111,6 +126,8 @@ export interface ProviderCapabilities {
111
126
  supportsReasoning(modelId: string): boolean;
112
127
  supportsDeveloperRole(modelId: string): boolean;
113
128
  supportsPrediction?(modelId: string): boolean;
129
+ supportsTemperature?(modelId: string): boolean;
130
+ supportsPromptCaching?(modelId: string): boolean;
114
131
  supportsToolChoice?(modelId: string): boolean;
115
132
  getContextWindow(modelId: string): number | null;
116
133
  }
@@ -226,6 +243,11 @@ export interface Provider {
226
243
  embed?(request: EmbeddingRequest): Promise<EmbeddingResponse>;
227
244
  judge?(request: JudgmentRequest): Promise<JudgmentResponse>;
228
245
  defaultModel(feature?: string): string;
246
+ /**
247
+ * The model the registry knows a request's model as, for pricing: an Azure deployment's name
248
+ * maps to the model it runs. Without it, a model is priced by its own name.
249
+ */
250
+ registryModel?(model: string): string;
229
251
  capabilities?: ProviderCapabilities;
230
252
  formatToolResultMessage(toolCallId: string, content: string, options?: {
231
253
  isError?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/providers/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;IAC7C,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAE5C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChD,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACnD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAClD,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9C,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACxD,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,UAAU,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3E,QAAQ,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,KAAK,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9D,KAAK,CAAC,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,uBAAuB,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9B,OAAO,CAAC;CACZ;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,iDAAiD;IACjD,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC5C;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACf"}
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/providers/Provider.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export declare class AnthropicProvider extends BaseProvider implements Provider
20
20
  supportsModeration: (_model: string) => boolean;
21
21
  supportsReasoning: (_model: string) => boolean;
22
22
  supportsDeveloperRole: (_model: string) => boolean;
23
+ supportsTemperature: (model: string) => boolean;
24
+ supportsPromptCaching: (_model: string) => boolean;
23
25
  getContextWindow: (model: string) => number | null;
24
26
  };
25
27
  constructor(options: AnthropicProviderOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"AnthropicProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/AnthropicProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAkB,SAAQ,YAAa,YAAW,QAAQ;IAmBzD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEzC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;qCACX,MAAM;0CACD,MAAM;wCACR,MAAM;qCACT,MAAM;oCACP,MAAM;wCACF,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,wBAAwB;IAQvD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAKzC"}
1
+ {"version":3,"file":"AnthropicProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/AnthropicProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAkB,SAAQ,YAAa,YAAW,QAAQ;IAqBzD,OAAO,CAAC,QAAQ,CAAC,OAAO;IApBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEzC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;qCACX,MAAM;0CACD,MAAM;wCACR,MAAM;qCACT,MAAM;oCACP,MAAM;wCACF,MAAM;qCACT,MAAM;wCACH,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,wBAAwB;IAQvD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAKzC"}
@@ -20,6 +20,8 @@ export class AnthropicProvider extends BaseProvider {
20
20
  supportsModeration: (_model) => false,
21
21
  supportsReasoning: (_model) => false,
22
22
  supportsDeveloperRole: (_model) => true,
23
+ supportsTemperature: (model) => Capabilities.supportsTemperature(model),
24
+ supportsPromptCaching: (_model) => true,
23
25
  getContextWindow: (model) => Capabilities.getContextWindow(model)
24
26
  };
25
27
  constructor(options) {
@@ -1,5 +1,6 @@
1
1
  import { ModelPricing } from "../../models/types.js";
2
2
  export declare class Capabilities {
3
+ static supportsTemperature(modelId: string): boolean;
3
4
  static getContextWindow(modelId: string): number | null;
4
5
  static getMaxOutputTokens(modelId: string): number | null;
5
6
  static supportsVision(modelId: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO9C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
@@ -1,6 +1,9 @@
1
1
  import { ModelRegistry } from "../../models/ModelRegistry.js";
2
2
  import { PricingRegistry } from "../../models/PricingRegistry.js";
3
3
  export class Capabilities {
4
+ static supportsTemperature(modelId) {
5
+ return ModelRegistry.supportsTemperature(modelId, "anthropic");
6
+ }
4
7
  static getContextWindow(modelId) {
5
8
  return ModelRegistry.getContextWindow(modelId, "anthropic") ?? 200_000;
6
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAW3E,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAwK3D"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAS3E,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CA8E3D"}
@@ -1,10 +1,8 @@
1
- import { Capabilities } from "./Capabilities.js";
2
1
  import { handleAnthropicError } from "./Errors.js";
3
2
  import { ModelRegistry } from "../../models/ModelRegistry.js";
4
3
  import { logger } from "../../utils/logger.js";
5
4
  import { fetchWithTimeout } from "../../utils/fetch.js";
6
- import { formatSystemPrompt, formatMessages } from "./Utils.js";
7
- import { DEFAULT_MAX_TOKENS } from "../../constants.js";
5
+ import { buildMessageRequest, hasPdf, toUsage } from "./Utils.js";
8
6
  export class AnthropicChat {
9
7
  baseUrl;
10
8
  apiKey;
@@ -14,73 +12,14 @@ export class AnthropicChat {
14
12
  }
15
13
  async execute(request) {
16
14
  const model = request.model;
17
- const maxTokens = request.max_tokens || Capabilities.getMaxOutputTokens(model) || DEFAULT_MAX_TOKENS;
18
- const systemPrompt = formatSystemPrompt(request.messages);
19
- const messages = formatMessages(request.messages);
20
- let system = systemPrompt;
21
- if (request.response_format) {
22
- let schemaText = "";
23
- if (request.response_format.type === "json_schema" &&
24
- request.response_format.json_schema?.schema) {
25
- schemaText =
26
- "\nSchema:\n" + JSON.stringify(request.response_format.json_schema.schema, null, 2);
27
- }
28
- const instruction = `CRITICAL: Respond ONLY with a valid JSON object matching the requested schema.${schemaText}\n\nDo not include any other text or explanation.`;
29
- system = system ? `${system}\n\n${instruction}` : instruction;
30
- }
31
- const { model: _model, messages: _messages, tools: _tools, temperature: _temp, max_tokens: _max, response_format: _format, thinking: _thinking, headers: _headers, tool_choice: _choice, parallel_tool_calls: _parallel, requestTimeout, ...rest } = request;
32
- const body = {
33
- model: model,
34
- messages: messages,
35
- max_tokens: maxTokens,
36
- system: system,
37
- stream: false,
38
- ...rest
39
- };
40
- if (_thinking?.budget) {
41
- body.thinking = {
42
- type: "enabled",
43
- budget_tokens: _thinking.budget
44
- };
45
- // Extended thinking models require a larger max_tokens
46
- if (!request.max_tokens) {
47
- body.max_tokens = Math.max(maxTokens, _thinking.budget + 1024);
48
- }
49
- }
50
- if (request.temperature !== undefined) {
51
- body.temperature = request.temperature;
52
- }
53
- // Map tools
54
- if (request.tools && request.tools.length > 0 && request.tool_choice !== "none") {
55
- body.tools = request.tools.map((tool) => ({
56
- name: tool.function.name,
57
- description: tool.function.description,
58
- input_schema: tool.function.parameters
59
- }));
60
- }
61
- if (request.tool_choice && request.tool_choice !== "none") {
62
- if (request.tool_choice === "auto") {
63
- body.tool_choice = { type: "auto" };
64
- }
65
- else if (request.tool_choice === "required") {
66
- body.tool_choice = { type: "any" };
67
- }
68
- else if (typeof request.tool_choice === "string") {
69
- body.tool_choice = { type: "tool", name: request.tool_choice };
70
- }
71
- else if (typeof request.tool_choice === "object" && "function" in request.tool_choice) {
72
- body.tool_choice = { type: "tool", name: request.tool_choice.function.name };
73
- }
74
- }
75
- // Check if any message contains PDF content to add beta header
76
- const hasPdf = messages.some((msg) => Array.isArray(msg.content) && msg.content.some((block) => block.type === "document"));
15
+ const body = buildMessageRequest(request, false);
77
16
  const headers = {
78
17
  "x-api-key": this.apiKey,
79
18
  "anthropic-version": "2023-06-01",
80
19
  "content-type": "application/json",
81
20
  ...request.headers
82
21
  };
83
- if (hasPdf) {
22
+ if (hasPdf(body)) {
84
23
  headers["anthropic-beta"] = "pdfs-2024-09-25";
85
24
  }
86
25
  const url = `${this.baseUrl}/messages`;
@@ -88,8 +27,9 @@ export class AnthropicChat {
88
27
  const response = await fetchWithTimeout(url, {
89
28
  method: "POST",
90
29
  headers: headers,
91
- body: JSON.stringify(body)
92
- }, requestTimeout);
30
+ body: JSON.stringify(body),
31
+ signal: request.signal
32
+ }, request.requestTimeout);
93
33
  if (!response.ok) {
94
34
  await handleAnthropicError(response, model);
95
35
  }
@@ -127,15 +67,7 @@ export class AnthropicChat {
127
67
  });
128
68
  }
129
69
  }
130
- const usage = json.usage
131
- ? {
132
- input_tokens: json.usage.input_tokens,
133
- output_tokens: json.usage.output_tokens,
134
- total_tokens: json.usage.input_tokens + json.usage.output_tokens,
135
- cached_tokens: json.usage.cache_read_input_tokens,
136
- cache_creation_tokens: json.usage.cache_creation_input_tokens
137
- }
138
- : undefined;
70
+ const usage = json.usage ? toUsage(json.usage) : undefined;
139
71
  const calculatedUsage = usage
140
72
  ? ModelRegistry.calculateCost(usage, model, "anthropic")
141
73
  : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Errors.ts"],"names":[],"mappings":"AAaA,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAwD9F"}
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Errors.ts"],"names":[],"mappings":"AAcA,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAyD9F"}
@@ -1,4 +1,5 @@
1
1
  import { BadRequestError, ContextWindowExceededError, InsufficientQuotaError, InvalidModelError, NotFoundError, AuthenticationError, RateLimitError, ServerError, ServiceUnavailableError, APIError } from "../../errors/index.js";
2
+ import { isBillingProblem } from "../../errors/billing.js";
2
3
  export async function handleAnthropicError(response, modelId) {
3
4
  const status = response.status;
4
5
  let body;
@@ -19,6 +20,9 @@ export async function handleAnthropicError(response, modelId) {
19
20
  message = `Anthropic error (${status}): ${body}`;
20
21
  }
21
22
  const provider = "anthropic";
23
+ if (isBillingProblem(status, message)) {
24
+ throw new InsufficientQuotaError(message, body, provider, modelId);
25
+ }
22
26
  if (status === 400) {
23
27
  if (message.includes("prompt is too long") || message.includes("context_length")) {
24
28
  throw new ContextWindowExceededError(message, body, provider, modelId);
@@ -35,9 +39,6 @@ export async function handleAnthropicError(response, modelId) {
35
39
  throw new NotFoundError(message, status, body, provider, modelId);
36
40
  }
37
41
  if (status === 429) {
38
- if (message.includes("quota") || message.includes("credit")) {
39
- throw new InsufficientQuotaError(message, body, provider, modelId);
40
- }
41
42
  throw new RateLimitError(message, body, provider, modelId);
42
43
  }
43
44
  if (status === 502 || status === 503 || status === 529) {
@@ -1 +1 @@
1
- {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASxD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;CAsP9F"}
1
+ {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMxD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;CAgL9F"}
@@ -1,9 +1,7 @@
1
- import { Capabilities } from "./Capabilities.js";
2
1
  import { handleAnthropicError } from "./Errors.js";
3
- import { formatSystemPrompt, formatMessages } from "./Utils.js";
2
+ import { buildMessageRequest, hasPdf, toUsage } from "./Utils.js";
4
3
  import { logger } from "../../utils/logger.js";
5
4
  import { fetchWithTimeout } from "../../utils/fetch.js";
6
- import { DEFAULT_MAX_TOKENS } from "../../constants.js";
7
5
  export class AnthropicStreaming {
8
6
  baseUrl;
9
7
  apiKey;
@@ -14,69 +12,14 @@ export class AnthropicStreaming {
14
12
  async *execute(request, controller) {
15
13
  const abortController = controller || new AbortController();
16
14
  const model = request.model;
17
- const maxTokens = request.max_tokens || Capabilities.getMaxOutputTokens(model) || DEFAULT_MAX_TOKENS;
18
- const systemPrompt = formatSystemPrompt(request.messages);
19
- const messages = formatMessages(request.messages);
20
- let system = systemPrompt;
21
- if (request.response_format) {
22
- let schemaText = "";
23
- if (request.response_format.type === "json_schema" &&
24
- request.response_format.json_schema?.schema) {
25
- schemaText =
26
- "\nSchema:\n" + JSON.stringify(request.response_format.json_schema.schema, null, 2);
27
- }
28
- const instruction = `CRITICAL: Respond ONLY with a valid JSON object matching the requested schema.${schemaText}\n\nDo not include any other text or explanation.`;
29
- system = system ? `${system}\n\n${instruction}` : instruction;
30
- }
31
- const body = {
32
- model: model,
33
- messages: messages,
34
- max_tokens: maxTokens,
35
- system: system,
36
- stream: true
37
- };
38
- if (request.temperature !== undefined) {
39
- body.temperature = request.temperature;
40
- }
41
- if (request.tools && request.tools.length > 0 && request.tool_choice !== "none") {
42
- body.tools = request.tools.map((tool) => ({
43
- name: tool.function.name,
44
- description: tool.function.description,
45
- input_schema: tool.function.parameters
46
- }));
47
- }
48
- if (request.tool_choice && request.tool_choice !== "none") {
49
- if (request.tool_choice === "auto") {
50
- body.tool_choice = { type: "auto" };
51
- }
52
- else if (request.tool_choice === "required") {
53
- body.tool_choice = { type: "any" };
54
- }
55
- else if (typeof request.tool_choice === "string") {
56
- body.tool_choice = { type: "tool", name: request.tool_choice };
57
- }
58
- else if (typeof request.tool_choice === "object" && "function" in request.tool_choice) {
59
- body.tool_choice = { type: "tool", name: request.tool_choice.function.name };
60
- }
61
- }
62
- if (request.thinking?.budget) {
63
- body.thinking = {
64
- type: "enabled",
65
- budget_tokens: request.thinking.budget
66
- };
67
- if (!request.max_tokens) {
68
- body.max_tokens = Math.max(maxTokens, request.thinking.budget + 1024);
69
- }
70
- }
71
- // Check if any message contains PDF content to add beta header
72
- const hasPdf = messages.some((msg) => Array.isArray(msg.content) && msg.content.some((block) => block.type === "document"));
15
+ const body = buildMessageRequest(request, true);
73
16
  const headers = {
74
17
  "x-api-key": this.apiKey,
75
18
  "anthropic-version": "2023-06-01",
76
19
  "content-type": "application/json",
77
20
  ...request.headers
78
21
  };
79
- if (hasPdf) {
22
+ if (hasPdf(body)) {
80
23
  headers["anthropic-beta"] = "pdfs-2024-09-25";
81
24
  }
82
25
  let done = false;
@@ -172,12 +115,7 @@ export class AnthropicStreaming {
172
115
  }
173
116
  else if (eventType === "message_start") {
174
117
  if (data.message?.usage) {
175
- const usage = {
176
- input_tokens: data.message.usage.input_tokens,
177
- output_tokens: data.message.usage.output_tokens,
178
- total_tokens: data.message.usage.input_tokens + data.message.usage.output_tokens
179
- };
180
- yield { content: "", usage };
118
+ yield { content: "", usage: toUsage(data.message.usage) };
181
119
  }
182
120
  }
183
121
  else if (eventType === "message_delta") {
@@ -1,5 +1,37 @@
1
1
  import { Message } from "../../chat/Message.js";
2
- import { AnthropicMessage } from "./types.js";
2
+ import { ChatRequest, ThinkingConfig, Usage } from "../Provider.js";
3
+ import { AnthropicMessage, AnthropicMessageRequest } from "./types.js";
3
4
  export declare function formatSystemPrompt(messages: Message[]): string | undefined;
4
5
  export declare function formatMessages(requestMessages: Message[]): AnthropicMessage[];
6
+ /**
7
+ * Add the thinking fields for a ThinkingConfig to a request body.
8
+ * Call after tool_choice is set.
9
+ *
10
+ * - `budget` is sent as a fixed thinking budget, exactly as given.
11
+ * - On generations that only think adaptively (no budget option in the registry:
12
+ * Opus 4.7+, Sonnet 5+, Fable), `effort` turns on adaptive thinking and is sent
13
+ * as `output_config.effort`. Forced tool choice skips the thinking block, which
14
+ * the API rejects alongside it.
15
+ * - On generations that take a budget, `effort` alone is not sent, so calls that
16
+ * worked before keep the same request.
17
+ * - `display` is forwarded on the thinking block, and alone turns on adaptive thinking.
18
+ */
19
+ export declare function applyThinking(body: AnthropicMessageRequest, thinking: ThinkingConfig | undefined, maxTokensSet: boolean): void;
20
+ /**
21
+ * The Messages API request body for a chat request, shared by streaming and non-streaming calls.
22
+ * Fields NodeLLM doesn't map itself, such as those from `withParams()`, are sent as they are.
23
+ */
24
+ export declare function buildMessageRequest(request: ChatRequest, stream: boolean): AnthropicMessageRequest;
25
+ /** Whether the request sends a PDF, which needs the PDF beta header. */
26
+ export declare function hasPdf(body: AnthropicMessageRequest): boolean;
27
+ /**
28
+ * NodeLLM usage from Anthropic's. Anthropic's input_tokens leave out cache reads and writes;
29
+ * NodeLLM's input_tokens count every input token, so costs and totals include cached input.
30
+ */
31
+ export declare function toUsage(usage: {
32
+ input_tokens: number;
33
+ output_tokens: number;
34
+ cache_read_input_tokens?: number;
35
+ cache_creation_input_tokens?: number;
36
+ }): Usage;
5
37
  //# sourceMappingURL=Utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AAErE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAiB1E;AAED,wBAAgB,cAAc,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAyB7E"}
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAyB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAI9F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAiB1E;AAED,wBAAgB,cAAc,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAyB7E;AAgGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,YAAY,EAAE,OAAO,GACpB,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,OAAO,GACd,uBAAuB,CAqEzB;AAED,wEAAwE;AACxE,wBAAgB,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAI7D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,KAAK,CAWR"}
@@ -1,3 +1,6 @@
1
+ import { ModelRegistry } from "../../models/ModelRegistry.js";
2
+ import { Capabilities } from "./Capabilities.js";
3
+ import { DEFAULT_MAX_TOKENS } from "../../constants.js";
1
4
  export function formatSystemPrompt(messages) {
2
5
  let systemPrompt;
3
6
  for (const msg of messages) {
@@ -126,3 +129,114 @@ function formatSingleMessage(msg) {
126
129
  }
127
130
  return { role, content: blocks };
128
131
  }
132
+ /**
133
+ * Add the thinking fields for a ThinkingConfig to a request body.
134
+ * Call after tool_choice is set.
135
+ *
136
+ * - `budget` is sent as a fixed thinking budget, exactly as given.
137
+ * - On generations that only think adaptively (no budget option in the registry:
138
+ * Opus 4.7+, Sonnet 5+, Fable), `effort` turns on adaptive thinking and is sent
139
+ * as `output_config.effort`. Forced tool choice skips the thinking block, which
140
+ * the API rejects alongside it.
141
+ * - On generations that take a budget, `effort` alone is not sent, so calls that
142
+ * worked before keep the same request.
143
+ * - `display` is forwarded on the thinking block, and alone turns on adaptive thinking.
144
+ */
145
+ export function applyThinking(body, thinking, maxTokensSet) {
146
+ if (!thinking)
147
+ return;
148
+ const options = ModelRegistry.getReasoningOptions(body.model, "anthropic");
149
+ const takesEffort = options.some((option) => option.type === "effort");
150
+ const adaptiveOnly = takesEffort && !options.some((option) => option.type === "budget_tokens");
151
+ const effort = thinking.effort && thinking.effort !== "none" ? thinking.effort : undefined;
152
+ const display = thinking.display ? { display: thinking.display } : {};
153
+ const forcedTool = body.tool_choice?.type === "any" || body.tool_choice?.type === "tool";
154
+ if (thinking.budget) {
155
+ body.thinking = { type: "enabled", budget_tokens: thinking.budget, ...display };
156
+ // Extended thinking models require a larger max_tokens
157
+ if (!maxTokensSet) {
158
+ body.max_tokens = Math.max(body.max_tokens, thinking.budget + 1024);
159
+ }
160
+ }
161
+ else if (thinking.display || (effort && adaptiveOnly && !forcedTool)) {
162
+ body.thinking = { type: "adaptive", ...display };
163
+ }
164
+ if (effort && takesEffort && (thinking.budget || adaptiveOnly)) {
165
+ body.output_config = { ...body.output_config, effort };
166
+ }
167
+ }
168
+ /**
169
+ * The Messages API request body for a chat request, shared by streaming and non-streaming calls.
170
+ * Fields NodeLLM doesn't map itself, such as those from `withParams()`, are sent as they are.
171
+ */
172
+ export function buildMessageRequest(request, stream) {
173
+ const { model, messages: _messages, tools, temperature, max_tokens, response_format, thinking, headers: _headers, tool_choice, parallel_tool_calls: _parallel, requestTimeout: _timeout, signal: _signal, promptCache, ...params } = request;
174
+ let system = formatSystemPrompt(request.messages);
175
+ if (response_format) {
176
+ let schemaText = "";
177
+ if (response_format.type === "json_schema" && response_format.json_schema?.schema) {
178
+ schemaText = "\nSchema:\n" + JSON.stringify(response_format.json_schema.schema, null, 2);
179
+ }
180
+ const instruction = `CRITICAL: Respond ONLY with a valid JSON object matching the requested schema.${schemaText}\n\nDo not include any other text or explanation.`;
181
+ system = system ? `${system}\n\n${instruction}` : instruction;
182
+ }
183
+ const body = {
184
+ model,
185
+ messages: formatMessages(request.messages),
186
+ max_tokens: max_tokens || Capabilities.getMaxOutputTokens(model) || DEFAULT_MAX_TOKENS,
187
+ system,
188
+ ...params,
189
+ stream
190
+ };
191
+ if (temperature !== undefined) {
192
+ body.temperature = temperature;
193
+ }
194
+ if (tools && tools.length > 0 && tool_choice !== "none") {
195
+ body.tools = tools.map((tool) => ({
196
+ name: tool.function.name,
197
+ description: tool.function.description,
198
+ input_schema: tool.function.parameters
199
+ }));
200
+ }
201
+ if (tool_choice && tool_choice !== "none") {
202
+ if (tool_choice === "auto") {
203
+ body.tool_choice = { type: "auto" };
204
+ }
205
+ else if (tool_choice === "required") {
206
+ body.tool_choice = { type: "any" };
207
+ }
208
+ else if (typeof tool_choice === "string") {
209
+ body.tool_choice = { type: "tool", name: tool_choice };
210
+ }
211
+ else if (typeof tool_choice === "object" && "function" in tool_choice) {
212
+ body.tool_choice = { type: "tool", name: tool_choice.function.name };
213
+ }
214
+ }
215
+ // Top-level cache_control caches everything up to the last cacheable block, and moves the
216
+ // breakpoint forward as the conversation grows.
217
+ if (promptCache) {
218
+ body.cache_control = { type: "ephemeral" };
219
+ }
220
+ applyThinking(body, thinking, Boolean(max_tokens));
221
+ return body;
222
+ }
223
+ /** Whether the request sends a PDF, which needs the PDF beta header. */
224
+ export function hasPdf(body) {
225
+ return body.messages.some((msg) => Array.isArray(msg.content) && msg.content.some((block) => block.type === "document"));
226
+ }
227
+ /**
228
+ * NodeLLM usage from Anthropic's. Anthropic's input_tokens leave out cache reads and writes;
229
+ * NodeLLM's input_tokens count every input token, so costs and totals include cached input.
230
+ */
231
+ export function toUsage(usage) {
232
+ const cached = usage.cache_read_input_tokens || 0;
233
+ const written = usage.cache_creation_input_tokens || 0;
234
+ const input = usage.input_tokens + cached + written;
235
+ return {
236
+ input_tokens: input,
237
+ output_tokens: usage.output_tokens,
238
+ total_tokens: input + usage.output_tokens,
239
+ cached_tokens: usage.cache_read_input_tokens,
240
+ cache_creation_tokens: usage.cache_creation_input_tokens
241
+ };
242
+ }