@nodetool-ai/runtime 0.7.0-rc.11

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 (198) hide show
  1. package/dist/bridge-protocol.d.ts +39 -0
  2. package/dist/bridge-protocol.d.ts.map +1 -0
  3. package/dist/bridge-protocol.js +39 -0
  4. package/dist/bridge-protocol.js.map +1 -0
  5. package/dist/comfy-executor.d.ts +41 -0
  6. package/dist/comfy-executor.d.ts.map +1 -0
  7. package/dist/comfy-executor.js +305 -0
  8. package/dist/comfy-executor.js.map +1 -0
  9. package/dist/context-packer.d.ts +22 -0
  10. package/dist/context-packer.d.ts.map +1 -0
  11. package/dist/context-packer.js +66 -0
  12. package/dist/context-packer.js.map +1 -0
  13. package/dist/context.d.ts +405 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +1455 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/index.d.ts +18 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +15 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/node-executor.d.ts +53 -0
  22. package/dist/node-executor.d.ts.map +1 -0
  23. package/dist/node-executor.js +9 -0
  24. package/dist/node-executor.js.map +1 -0
  25. package/dist/providers/aki-manifest.json +34 -0
  26. package/dist/providers/aki-provider.d.ts +65 -0
  27. package/dist/providers/aki-provider.d.ts.map +1 -0
  28. package/dist/providers/aki-provider.js +517 -0
  29. package/dist/providers/aki-provider.js.map +1 -0
  30. package/dist/providers/anthropic-provider.d.ts +55 -0
  31. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  32. package/dist/providers/anthropic-provider.js +563 -0
  33. package/dist/providers/anthropic-provider.js.map +1 -0
  34. package/dist/providers/base-provider.d.ts +194 -0
  35. package/dist/providers/base-provider.d.ts.map +1 -0
  36. package/dist/providers/base-provider.js +515 -0
  37. package/dist/providers/base-provider.js.map +1 -0
  38. package/dist/providers/cerebras-provider.d.ts +20 -0
  39. package/dist/providers/cerebras-provider.d.ts.map +1 -0
  40. package/dist/providers/cerebras-provider.js +52 -0
  41. package/dist/providers/cerebras-provider.js.map +1 -0
  42. package/dist/providers/claude-agent-provider.d.ts +107 -0
  43. package/dist/providers/claude-agent-provider.d.ts.map +1 -0
  44. package/dist/providers/claude-agent-provider.js +586 -0
  45. package/dist/providers/claude-agent-provider.js.map +1 -0
  46. package/dist/providers/cohere-provider.d.ts +36 -0
  47. package/dist/providers/cohere-provider.d.ts.map +1 -0
  48. package/dist/providers/cohere-provider.js +116 -0
  49. package/dist/providers/cohere-provider.js.map +1 -0
  50. package/dist/providers/cost-calculator.d.ts +109 -0
  51. package/dist/providers/cost-calculator.d.ts.map +1 -0
  52. package/dist/providers/cost-calculator.js +475 -0
  53. package/dist/providers/cost-calculator.js.map +1 -0
  54. package/dist/providers/deepseek-provider.d.ts +25 -0
  55. package/dist/providers/deepseek-provider.d.ts.map +1 -0
  56. package/dist/providers/deepseek-provider.js +58 -0
  57. package/dist/providers/deepseek-provider.js.map +1 -0
  58. package/dist/providers/fake-provider.d.ts +52 -0
  59. package/dist/providers/fake-provider.d.ts.map +1 -0
  60. package/dist/providers/fake-provider.js +107 -0
  61. package/dist/providers/fake-provider.js.map +1 -0
  62. package/dist/providers/fal-provider.d.ts +32 -0
  63. package/dist/providers/fal-provider.d.ts.map +1 -0
  64. package/dist/providers/fal-provider.js +445 -0
  65. package/dist/providers/fal-provider.js.map +1 -0
  66. package/dist/providers/gemini-provider.d.ts +109 -0
  67. package/dist/providers/gemini-provider.d.ts.map +1 -0
  68. package/dist/providers/gemini-provider.js +943 -0
  69. package/dist/providers/gemini-provider.js.map +1 -0
  70. package/dist/providers/groq-provider.d.ts +20 -0
  71. package/dist/providers/groq-provider.d.ts.map +1 -0
  72. package/dist/providers/groq-provider.js +52 -0
  73. package/dist/providers/groq-provider.js.map +1 -0
  74. package/dist/providers/huggingface-provider.d.ts +59 -0
  75. package/dist/providers/huggingface-provider.d.ts.map +1 -0
  76. package/dist/providers/huggingface-provider.js +305 -0
  77. package/dist/providers/huggingface-provider.js.map +1 -0
  78. package/dist/providers/index.d.ts +69 -0
  79. package/dist/providers/index.d.ts.map +1 -0
  80. package/dist/providers/index.js +137 -0
  81. package/dist/providers/index.js.map +1 -0
  82. package/dist/providers/jina-provider.d.ts +37 -0
  83. package/dist/providers/jina-provider.d.ts.map +1 -0
  84. package/dist/providers/jina-provider.js +118 -0
  85. package/dist/providers/jina-provider.js.map +1 -0
  86. package/dist/providers/kie-provider.d.ts +19 -0
  87. package/dist/providers/kie-provider.d.ts.map +1 -0
  88. package/dist/providers/kie-provider.js +118 -0
  89. package/dist/providers/kie-provider.js.map +1 -0
  90. package/dist/providers/llama-provider.d.ts +49 -0
  91. package/dist/providers/llama-provider.d.ts.map +1 -0
  92. package/dist/providers/llama-provider.js +381 -0
  93. package/dist/providers/llama-provider.js.map +1 -0
  94. package/dist/providers/lmstudio-provider.d.ts +22 -0
  95. package/dist/providers/lmstudio-provider.d.ts.map +1 -0
  96. package/dist/providers/lmstudio-provider.js +63 -0
  97. package/dist/providers/lmstudio-provider.js.map +1 -0
  98. package/dist/providers/manifest-models.d.ts +12 -0
  99. package/dist/providers/manifest-models.d.ts.map +1 -0
  100. package/dist/providers/manifest-models.js +96 -0
  101. package/dist/providers/manifest-models.js.map +1 -0
  102. package/dist/providers/meshy-provider.d.ts +53 -0
  103. package/dist/providers/meshy-provider.d.ts.map +1 -0
  104. package/dist/providers/meshy-provider.js +230 -0
  105. package/dist/providers/meshy-provider.js.map +1 -0
  106. package/dist/providers/minimax-provider.d.ts +66 -0
  107. package/dist/providers/minimax-provider.d.ts.map +1 -0
  108. package/dist/providers/minimax-provider.js +531 -0
  109. package/dist/providers/minimax-provider.js.map +1 -0
  110. package/dist/providers/mistral-provider.d.ts +26 -0
  111. package/dist/providers/mistral-provider.d.ts.map +1 -0
  112. package/dist/providers/mistral-provider.js +74 -0
  113. package/dist/providers/mistral-provider.js.map +1 -0
  114. package/dist/providers/moonshot-provider.d.ts +24 -0
  115. package/dist/providers/moonshot-provider.d.ts.map +1 -0
  116. package/dist/providers/moonshot-provider.js +43 -0
  117. package/dist/providers/moonshot-provider.js.map +1 -0
  118. package/dist/providers/ollama-provider.d.ts +71 -0
  119. package/dist/providers/ollama-provider.d.ts.map +1 -0
  120. package/dist/providers/ollama-provider.js +480 -0
  121. package/dist/providers/ollama-provider.js.map +1 -0
  122. package/dist/providers/openai-provider.d.ts +103 -0
  123. package/dist/providers/openai-provider.d.ts.map +1 -0
  124. package/dist/providers/openai-provider.js +917 -0
  125. package/dist/providers/openai-provider.js.map +1 -0
  126. package/dist/providers/openrouter-provider.d.ts +49 -0
  127. package/dist/providers/openrouter-provider.d.ts.map +1 -0
  128. package/dist/providers/openrouter-provider.js +147 -0
  129. package/dist/providers/openrouter-provider.js.map +1 -0
  130. package/dist/providers/provider-registry.d.ts +24 -0
  131. package/dist/providers/provider-registry.d.ts.map +1 -0
  132. package/dist/providers/provider-registry.js +124 -0
  133. package/dist/providers/provider-registry.js.map +1 -0
  134. package/dist/providers/python-provider.d.ts +75 -0
  135. package/dist/providers/python-provider.d.ts.map +1 -0
  136. package/dist/providers/python-provider.js +157 -0
  137. package/dist/providers/python-provider.js.map +1 -0
  138. package/dist/providers/replicate-provider.d.ts +73 -0
  139. package/dist/providers/replicate-provider.d.ts.map +1 -0
  140. package/dist/providers/replicate-provider.js +484 -0
  141. package/dist/providers/replicate-provider.js.map +1 -0
  142. package/dist/providers/rodin-provider.d.ts +41 -0
  143. package/dist/providers/rodin-provider.d.ts.map +1 -0
  144. package/dist/providers/rodin-provider.js +236 -0
  145. package/dist/providers/rodin-provider.js.map +1 -0
  146. package/dist/providers/scripted-provider.d.ts +141 -0
  147. package/dist/providers/scripted-provider.d.ts.map +1 -0
  148. package/dist/providers/scripted-provider.js +246 -0
  149. package/dist/providers/scripted-provider.js.map +1 -0
  150. package/dist/providers/together-provider.d.ts +20 -0
  151. package/dist/providers/together-provider.d.ts.map +1 -0
  152. package/dist/providers/together-provider.js +56 -0
  153. package/dist/providers/together-provider.js.map +1 -0
  154. package/dist/providers/types.d.ts +202 -0
  155. package/dist/providers/types.d.ts.map +1 -0
  156. package/dist/providers/types.js +2 -0
  157. package/dist/providers/types.js.map +1 -0
  158. package/dist/providers/vllm-provider.d.ts +22 -0
  159. package/dist/providers/vllm-provider.d.ts.map +1 -0
  160. package/dist/providers/vllm-provider.js +66 -0
  161. package/dist/providers/vllm-provider.js.map +1 -0
  162. package/dist/providers/voyage-provider.d.ts +37 -0
  163. package/dist/providers/voyage-provider.d.ts.map +1 -0
  164. package/dist/providers/voyage-provider.js +124 -0
  165. package/dist/providers/voyage-provider.js.map +1 -0
  166. package/dist/providers/xai-provider.d.ts +24 -0
  167. package/dist/providers/xai-provider.d.ts.map +1 -0
  168. package/dist/providers/xai-provider.js +57 -0
  169. package/dist/providers/xai-provider.js.map +1 -0
  170. package/dist/python-bridge-types.d.ts +70 -0
  171. package/dist/python-bridge-types.d.ts.map +1 -0
  172. package/dist/python-bridge-types.js +2 -0
  173. package/dist/python-bridge-types.js.map +1 -0
  174. package/dist/python-node-executor.d.ts +20 -0
  175. package/dist/python-node-executor.d.ts.map +1 -0
  176. package/dist/python-node-executor.js +219 -0
  177. package/dist/python-node-executor.js.map +1 -0
  178. package/dist/python-stdio-bridge.d.ts +67 -0
  179. package/dist/python-stdio-bridge.d.ts.map +1 -0
  180. package/dist/python-stdio-bridge.js +704 -0
  181. package/dist/python-stdio-bridge.js.map +1 -0
  182. package/dist/recommended-models.d.ts +17 -0
  183. package/dist/recommended-models.d.ts.map +1 -0
  184. package/dist/recommended-models.js +139 -0
  185. package/dist/recommended-models.js.map +1 -0
  186. package/dist/telemetry.d.ts +61 -0
  187. package/dist/telemetry.d.ts.map +1 -0
  188. package/dist/telemetry.js +128 -0
  189. package/dist/telemetry.js.map +1 -0
  190. package/dist/trace-exporters.d.ts +72 -0
  191. package/dist/trace-exporters.d.ts.map +1 -0
  192. package/dist/trace-exporters.js +216 -0
  193. package/dist/trace-exporters.js.map +1 -0
  194. package/dist/tracing-helpers.d.ts +99 -0
  195. package/dist/tracing-helpers.d.ts.map +1 -0
  196. package/dist/tracing-helpers.js +217 -0
  197. package/dist/tracing-helpers.js.map +1 -0
  198. package/package.json +64 -0
@@ -0,0 +1,563 @@
1
+ import Anthropic from "@anthropic-ai/sdk";
2
+ import { createLogger } from "@nodetool-ai/config";
3
+ import { BaseProvider } from "./base-provider.js";
4
+ const log = createLogger("nodetool.runtime.providers.anthropic");
5
+ function isTextContent(content) {
6
+ return content.type === "text";
7
+ }
8
+ function isImageContent(content) {
9
+ return content.type === "image_url";
10
+ }
11
+ function bytesToBase64(data) {
12
+ if (!data)
13
+ return "";
14
+ if (typeof data === "string")
15
+ return data;
16
+ return Buffer.from(data).toString("base64");
17
+ }
18
+ function parseDataUri(uri) {
19
+ const idx = uri.indexOf(",");
20
+ if (idx < 0) {
21
+ throw new Error("Invalid data URI");
22
+ }
23
+ const header = uri.slice(5, idx);
24
+ const payload = uri.slice(idx + 1);
25
+ const isBase64 = header.includes(";base64");
26
+ const mime = header.split(";")[0] || "application/octet-stream";
27
+ if (isBase64) {
28
+ return { mime, base64: payload };
29
+ }
30
+ return {
31
+ mime,
32
+ base64: Buffer.from(decodeURIComponent(payload), "utf8").toString("base64")
33
+ };
34
+ }
35
+ export class AnthropicProvider extends BaseProvider {
36
+ static requiredSecrets() {
37
+ return ["ANTHROPIC_API_KEY"];
38
+ }
39
+ apiKey;
40
+ _client;
41
+ _clientFactory;
42
+ _fetch;
43
+ constructor(secrets, options = {}) {
44
+ super("anthropic");
45
+ const apiKey = secrets.ANTHROPIC_API_KEY;
46
+ if (!apiKey || !apiKey.trim()) {
47
+ throw new Error("ANTHROPIC_API_KEY is not configured");
48
+ }
49
+ this.apiKey = apiKey;
50
+ this._client = options.client ?? null;
51
+ this._clientFactory =
52
+ options.clientFactory ??
53
+ ((key) => new Anthropic({
54
+ apiKey: key
55
+ }));
56
+ this._fetch = options.fetchFn ?? globalThis.fetch.bind(globalThis);
57
+ }
58
+ getContainerEnv() {
59
+ return { ANTHROPIC_API_KEY: this.apiKey };
60
+ }
61
+ getClient() {
62
+ if (!this._client) {
63
+ this._client = this._clientFactory(this.apiKey);
64
+ }
65
+ return this._client;
66
+ }
67
+ async hasToolSupport(_model) {
68
+ return true;
69
+ }
70
+ async getAvailableLanguageModels() {
71
+ const maxRetries = 3;
72
+ const baseDelay = 1000; // ms
73
+ let lastError = null;
74
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
75
+ try {
76
+ const controller = new AbortController();
77
+ const timeout = setTimeout(() => controller.abort(), 10_000); // 10s total timeout
78
+ const response = await this._fetch("https://api.anthropic.com/v1/models", {
79
+ headers: {
80
+ "x-api-key": this.apiKey,
81
+ "anthropic-version": "2023-06-01"
82
+ },
83
+ signal: controller.signal
84
+ });
85
+ clearTimeout(timeout);
86
+ // Don't retry on auth errors
87
+ if (response.status === 401 || response.status === 403) {
88
+ log.warn("Anthropic API auth error, not retrying", {
89
+ status: response.status
90
+ });
91
+ return [];
92
+ }
93
+ // Retry on rate limit or server errors
94
+ if ([429, 500, 502, 503, 504].includes(response.status)) {
95
+ log.warn("Anthropic API error, retrying", {
96
+ status: response.status,
97
+ attempt: attempt + 1,
98
+ maxRetries
99
+ });
100
+ if (attempt < maxRetries - 1) {
101
+ await new Promise((r) => setTimeout(r, baseDelay * 2 ** attempt));
102
+ continue;
103
+ }
104
+ return [];
105
+ }
106
+ if (!response.ok) {
107
+ log.warn("Failed to fetch Anthropic models", {
108
+ status: response.status
109
+ });
110
+ return [];
111
+ }
112
+ const payload = (await response.json());
113
+ return (payload.data ?? [])
114
+ .map((m) => m.id ?? m.name)
115
+ .filter((id) => typeof id === "string" && id.length > 0)
116
+ .map((id) => ({ id, name: id, provider: "anthropic" }));
117
+ }
118
+ catch (err) {
119
+ lastError = err instanceof Error ? err : new Error(String(err));
120
+ // AbortError means timeout
121
+ if (lastError.name === "AbortError") {
122
+ log.warn("Anthropic API timeout", {
123
+ attempt: attempt + 1,
124
+ maxRetries
125
+ });
126
+ }
127
+ else {
128
+ log.warn("Anthropic API connection error", {
129
+ error: lastError.message,
130
+ attempt: attempt + 1,
131
+ maxRetries
132
+ });
133
+ }
134
+ if (attempt < maxRetries - 1) {
135
+ await new Promise((r) => setTimeout(r, baseDelay * 2 ** attempt));
136
+ }
137
+ }
138
+ }
139
+ log.error("Failed to fetch Anthropic models after retries", {
140
+ error: lastError?.message
141
+ });
142
+ return [];
143
+ }
144
+ prepareJsonSchema(schema) {
145
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) {
146
+ return schema;
147
+ }
148
+ const obj = { ...schema };
149
+ if (obj.type === "object" && obj.additionalProperties === undefined) {
150
+ obj.additionalProperties = false;
151
+ }
152
+ if (obj.properties &&
153
+ typeof obj.properties === "object" &&
154
+ !Array.isArray(obj.properties)) {
155
+ obj.properties = Object.fromEntries(Object.entries(obj.properties).map(([k, v]) => [k, this.prepareJsonSchema(v)]));
156
+ }
157
+ if (obj.items && typeof obj.items === "object") {
158
+ obj.items = this.prepareJsonSchema(obj.items);
159
+ }
160
+ for (const defsKey of ["definitions", "$defs"]) {
161
+ const defs = obj[defsKey];
162
+ if (defs && typeof defs === "object" && !Array.isArray(defs)) {
163
+ obj[defsKey] = Object.fromEntries(Object.entries(defs).map(([k, v]) => [
164
+ k,
165
+ this.prepareJsonSchema(v)
166
+ ]));
167
+ }
168
+ }
169
+ const unsupported = [
170
+ "default",
171
+ "minimum",
172
+ "maximum",
173
+ "exclusiveMinimum",
174
+ "exclusiveMaximum",
175
+ "multipleOf",
176
+ "minLength",
177
+ "maxLength",
178
+ "minProperties",
179
+ "maxProperties",
180
+ "minItems",
181
+ "maxItems",
182
+ "uniqueItems"
183
+ ];
184
+ for (const key of unsupported) {
185
+ delete obj[key];
186
+ }
187
+ return obj;
188
+ }
189
+ async convertMessage(message) {
190
+ if (message.role === "tool") {
191
+ if (!message.toolCallId) {
192
+ throw new Error("Tool call ID must not be None");
193
+ }
194
+ const contentValue = typeof message.content === "string"
195
+ ? message.content
196
+ : JSON.stringify(message.content ?? null);
197
+ return {
198
+ role: "user",
199
+ content: [
200
+ {
201
+ type: "tool_result",
202
+ tool_use_id: message.toolCallId,
203
+ content: contentValue
204
+ }
205
+ ]
206
+ };
207
+ }
208
+ if (message.role === "system") {
209
+ return {
210
+ role: "assistant",
211
+ content: typeof message.content === "string"
212
+ ? message.content
213
+ : String(message.content ?? "")
214
+ };
215
+ }
216
+ if (message.role === "user") {
217
+ if (typeof message.content === "string") {
218
+ return { role: "user", content: message.content };
219
+ }
220
+ const parts = message.content ?? [];
221
+ const content = [];
222
+ for (const part of parts) {
223
+ if (isTextContent(part)) {
224
+ content.push({ type: "text", text: part.text });
225
+ continue;
226
+ }
227
+ if (isImageContent(part)) {
228
+ const rawData = bytesToBase64(part.image.data);
229
+ const uri = part.image.uri ?? "";
230
+ let mediaType = part.image.mimeType ?? "image/png";
231
+ let base64;
232
+ if (rawData) {
233
+ if (rawData.startsWith("data:")) {
234
+ const parsed = parseDataUri(rawData);
235
+ base64 = parsed.base64;
236
+ mediaType = part.image.mimeType ?? parsed.mime;
237
+ }
238
+ else {
239
+ base64 = rawData;
240
+ }
241
+ }
242
+ else if (uri.startsWith("data:")) {
243
+ const parsed = parseDataUri(uri);
244
+ base64 = parsed.base64;
245
+ mediaType = part.image.mimeType ?? parsed.mime;
246
+ }
247
+ else if (uri) {
248
+ const resolved = await this.resolveUri(uri);
249
+ if (resolved.startsWith("data:")) {
250
+ const parsed = parseDataUri(resolved);
251
+ base64 = parsed.base64;
252
+ mediaType = part.image.mimeType ?? parsed.mime;
253
+ }
254
+ else {
255
+ const response = await this._fetch(resolved);
256
+ if (!response.ok) {
257
+ throw new Error(`Failed to fetch URI: ${response.status}`);
258
+ }
259
+ mediaType =
260
+ part.image.mimeType ??
261
+ response.headers.get("content-type") ??
262
+ "image/png";
263
+ base64 = Buffer.from(new Uint8Array(await response.arrayBuffer())).toString("base64");
264
+ }
265
+ }
266
+ else {
267
+ throw new Error("Invalid image reference with no uri or data");
268
+ }
269
+ content.push({
270
+ type: "image",
271
+ source: {
272
+ type: "base64",
273
+ media_type: mediaType,
274
+ data: base64
275
+ }
276
+ });
277
+ }
278
+ }
279
+ return {
280
+ role: "user",
281
+ content
282
+ };
283
+ }
284
+ if (message.role !== "assistant") {
285
+ throw new Error(`Unknown message role ${message.role}`);
286
+ }
287
+ if (!message.content &&
288
+ (!message.toolCalls || message.toolCalls.length === 0)) {
289
+ return null;
290
+ }
291
+ if (message.toolCalls && message.toolCalls.length > 0) {
292
+ const contentBlocks = [];
293
+ if (typeof message.content === "string" && message.content.trim()) {
294
+ contentBlocks.push({ type: "text", text: message.content });
295
+ }
296
+ if (Array.isArray(message.content)) {
297
+ for (const part of message.content) {
298
+ if (isTextContent(part) && part.text.trim()) {
299
+ contentBlocks.push({ type: "text", text: part.text });
300
+ }
301
+ }
302
+ }
303
+ for (const tc of message.toolCalls) {
304
+ contentBlocks.push({
305
+ type: "tool_use",
306
+ name: tc.name,
307
+ id: tc.id,
308
+ input: tc.args
309
+ });
310
+ }
311
+ return {
312
+ role: "assistant",
313
+ content: contentBlocks
314
+ };
315
+ }
316
+ if (typeof message.content === "string") {
317
+ return { role: "assistant", content: message.content };
318
+ }
319
+ if (Array.isArray(message.content)) {
320
+ return {
321
+ role: "assistant",
322
+ content: message.content
323
+ .filter((part) => isTextContent(part))
324
+ .map((part) => ({
325
+ type: "text",
326
+ text: part.text
327
+ }))
328
+ };
329
+ }
330
+ throw new Error(`Unknown message content type ${typeof message.content}`);
331
+ }
332
+ formatTools(tools) {
333
+ return tools.map((tool) => ({
334
+ name: tool.name,
335
+ description: tool.description ?? "",
336
+ input_schema: this.prepareJsonSchema(tool.inputSchema ?? { type: "object", properties: {} })
337
+ }));
338
+ }
339
+ extractSystemMessage(messages) {
340
+ const system = messages.find((m) => m.role === "system");
341
+ if (!system) {
342
+ return "You are a helpful assistant.";
343
+ }
344
+ if (typeof system.content === "string") {
345
+ return system.content;
346
+ }
347
+ if (Array.isArray(system.content)) {
348
+ return system.content
349
+ .filter((part) => isTextContent(part))
350
+ .map((part) => part.text)
351
+ .join(" ");
352
+ }
353
+ return String(system.content ?? "You are a helpful assistant.");
354
+ }
355
+ async *generateMessages(args) {
356
+ const system = this.extractSystemMessage(args.messages);
357
+ const converted = await Promise.all(args.messages
358
+ .filter((m) => m.role !== "system")
359
+ .map((m) => this.convertMessage(m)));
360
+ const anthropicMessages = converted.filter((m) => m !== null);
361
+ const formattedTools = args.tools && args.tools.length > 0
362
+ ? this.formatTools(args.tools)
363
+ : undefined;
364
+ let resolvedToolChoice;
365
+ if (args.toolChoice) {
366
+ resolvedToolChoice =
367
+ args.toolChoice === "any"
368
+ ? { type: "any" }
369
+ : { type: "tool", name: args.toolChoice };
370
+ }
371
+ const request = {
372
+ model: args.model,
373
+ messages: anthropicMessages,
374
+ system,
375
+ max_tokens: args.maxTokens ?? 8192,
376
+ ...(formattedTools ? { tools: formattedTools } : {}),
377
+ ...(resolvedToolChoice ? { tool_choice: resolvedToolChoice } : {}),
378
+ ...(args.temperature != null ? { temperature: args.temperature } : {}),
379
+ ...(args.topP != null ? { top_p: args.topP } : {}),
380
+ ...(args.thinkingBudget != null
381
+ ? { thinking: { type: "enabled", budget_tokens: args.thinkingBudget } }
382
+ : {})
383
+ };
384
+ log.debug("Anthropic request", { model: args.model });
385
+ const stream = await this.getClient().messages.create({
386
+ ...request,
387
+ stream: true
388
+ });
389
+ let streamInputTokens = 0;
390
+ let streamOutputTokens = 0;
391
+ let streamCachedTokens = 0;
392
+ // Track in-flight tool_use blocks: index → { id, name, accumulated partial_json }
393
+ const activeToolBlocks = new Map();
394
+ for await (const event of stream) {
395
+ if (event.type === "message_start") {
396
+ const usage = event.message.usage;
397
+ streamInputTokens += usage.input_tokens ?? 0;
398
+ streamCachedTokens += usage.cache_read_input_tokens ?? 0;
399
+ }
400
+ if (event.type === "message_delta") {
401
+ streamOutputTokens += event.usage.output_tokens ?? 0;
402
+ }
403
+ if (event.type === "message_stop") {
404
+ this.trackUsage(args.model, {
405
+ inputTokens: streamInputTokens,
406
+ outputTokens: streamOutputTokens,
407
+ cachedTokens: streamCachedTokens
408
+ });
409
+ }
410
+ // Record the start of a tool_use content block so we can accumulate its JSON.
411
+ if (event.type === "content_block_start") {
412
+ const block = event.content_block;
413
+ if (block.type === "tool_use") {
414
+ activeToolBlocks.set(event.index, {
415
+ id: String(block.id ?? ""),
416
+ name: String(block.name ?? ""),
417
+ json: ""
418
+ });
419
+ }
420
+ continue;
421
+ }
422
+ if (event.type === "content_block_delta") {
423
+ const delta = event.delta;
424
+ if ("thinking" in delta && typeof delta.thinking === "string") {
425
+ const chunk = {
426
+ type: "chunk",
427
+ content: delta.thinking,
428
+ done: false,
429
+ thinking: true
430
+ };
431
+ yield chunk;
432
+ continue;
433
+ }
434
+ if ("partial_json" in delta &&
435
+ typeof delta.partial_json === "string") {
436
+ // Regular tool call: accumulate the JSON into the active block.
437
+ const block = activeToolBlocks.get(event.index);
438
+ if (block) {
439
+ block.json += delta.partial_json;
440
+ }
441
+ continue;
442
+ }
443
+ if ("text" in delta &&
444
+ typeof delta.text === "string") {
445
+ const chunk = {
446
+ type: "chunk",
447
+ content: delta.text,
448
+ done: false
449
+ };
450
+ yield chunk;
451
+ }
452
+ continue;
453
+ }
454
+ if (event.type === "content_block_stop") {
455
+ // content_block_stop does NOT carry the content_block in the raw API event.
456
+ // Use the block we recorded from content_block_start + accumulated partial_json.
457
+ const index = event.index;
458
+ const toolBlock = activeToolBlocks.get(index);
459
+ if (toolBlock) {
460
+ activeToolBlocks.delete(index);
461
+ let parsedArgs = {};
462
+ try {
463
+ const parsed = JSON.parse(toolBlock.json || "{}");
464
+ if (parsed &&
465
+ typeof parsed === "object" &&
466
+ !Array.isArray(parsed)) {
467
+ parsedArgs = parsed;
468
+ }
469
+ }
470
+ catch {
471
+ // malformed JSON — emit empty args
472
+ }
473
+ const toolCall = {
474
+ id: toolBlock.id,
475
+ name: toolBlock.name,
476
+ args: parsedArgs
477
+ };
478
+ yield toolCall;
479
+ }
480
+ continue;
481
+ }
482
+ if (event.type === "message_stop") {
483
+ const chunk = {
484
+ type: "chunk",
485
+ content: "",
486
+ done: true
487
+ };
488
+ yield chunk;
489
+ }
490
+ }
491
+ }
492
+ async generateMessage(args) {
493
+ const system = this.extractSystemMessage(args.messages);
494
+ const converted = await Promise.all(args.messages
495
+ .filter((m) => m.role !== "system")
496
+ .map((m) => this.convertMessage(m)));
497
+ const anthropicMessages = converted.filter((m) => m !== null);
498
+ const formattedTools = args.tools && args.tools.length > 0
499
+ ? this.formatTools(args.tools)
500
+ : undefined;
501
+ let resolvedToolChoice;
502
+ if (args.toolChoice) {
503
+ resolvedToolChoice =
504
+ args.toolChoice === "any"
505
+ ? { type: "any" }
506
+ : { type: "tool", name: args.toolChoice };
507
+ }
508
+ const request = {
509
+ model: args.model,
510
+ messages: anthropicMessages,
511
+ system,
512
+ max_tokens: args.maxTokens ?? 8192,
513
+ ...(formattedTools ? { tools: formattedTools } : {}),
514
+ ...(resolvedToolChoice ? { tool_choice: resolvedToolChoice } : {}),
515
+ ...(args.temperature != null ? { temperature: args.temperature } : {}),
516
+ ...(args.topP != null ? { top_p: args.topP } : {}),
517
+ ...(args.thinkingBudget != null
518
+ ? { thinking: { type: "enabled", budget_tokens: args.thinkingBudget } }
519
+ : {})
520
+ };
521
+ log.debug("Anthropic request", { model: args.model });
522
+ const response = await this.getClient().messages.create(request);
523
+ if (response.usage) {
524
+ this.trackUsage(args.model, {
525
+ inputTokens: response.usage.input_tokens ?? 0,
526
+ outputTokens: response.usage.output_tokens ?? 0,
527
+ cachedTokens: response.usage.cache_read_input_tokens ?? 0
528
+ });
529
+ }
530
+ const textParts = [];
531
+ const toolCalls = [];
532
+ for (const block of response.content ?? []) {
533
+ if (block.type === "tool_use") {
534
+ toolCalls.push({
535
+ id: String(block.id ?? ""),
536
+ name: String(block.name ?? ""),
537
+ args: (block.input ?? {})
538
+ });
539
+ continue;
540
+ }
541
+ if (block.type === "text") {
542
+ textParts.push(String(block.text ?? ""));
543
+ }
544
+ }
545
+ return {
546
+ role: "assistant",
547
+ content: textParts.join("\n"),
548
+ toolCalls
549
+ };
550
+ }
551
+ asHttpStatusError(error) {
552
+ return new Error(String(error));
553
+ }
554
+ isContextLengthError(error) {
555
+ const msg = String(error).toLowerCase();
556
+ return (msg.includes("context length") ||
557
+ msg.includes("context window") ||
558
+ msg.includes("token limit") ||
559
+ msg.includes("too long") ||
560
+ msg.includes("maximum context"));
561
+ }
562
+ }
563
+ //# sourceMappingURL=anthropic-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../src/providers/anthropic-provider.ts"],"names":[],"mappings":"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"}