@workglow/anthropic 0.2.28

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 (49) hide show
  1. package/dist/ai-provider/AnthropicProvider.d.ts +31 -0
  2. package/dist/ai-provider/AnthropicProvider.d.ts.map +1 -0
  3. package/dist/ai-provider/AnthropicQueuedProvider.d.ts +18 -0
  4. package/dist/ai-provider/AnthropicQueuedProvider.d.ts.map +1 -0
  5. package/dist/ai-provider/common/Anthropic_Chat.d.ts +10 -0
  6. package/dist/ai-provider/common/Anthropic_Chat.d.ts.map +1 -0
  7. package/dist/ai-provider/common/Anthropic_Client.d.ts +13 -0
  8. package/dist/ai-provider/common/Anthropic_Client.d.ts.map +1 -0
  9. package/dist/ai-provider/common/Anthropic_Constants.d.ts +7 -0
  10. package/dist/ai-provider/common/Anthropic_Constants.d.ts.map +1 -0
  11. package/dist/ai-provider/common/Anthropic_CountTokens.d.ts +10 -0
  12. package/dist/ai-provider/common/Anthropic_CountTokens.d.ts.map +1 -0
  13. package/dist/ai-provider/common/Anthropic_JobRunFns.d.ts +12 -0
  14. package/dist/ai-provider/common/Anthropic_JobRunFns.d.ts.map +1 -0
  15. package/dist/ai-provider/common/Anthropic_ModelInfo.d.ts +9 -0
  16. package/dist/ai-provider/common/Anthropic_ModelInfo.d.ts.map +1 -0
  17. package/dist/ai-provider/common/Anthropic_ModelSchema.d.ts +170 -0
  18. package/dist/ai-provider/common/Anthropic_ModelSchema.d.ts.map +1 -0
  19. package/dist/ai-provider/common/Anthropic_ModelSearch.d.ts +8 -0
  20. package/dist/ai-provider/common/Anthropic_ModelSearch.d.ts.map +1 -0
  21. package/dist/ai-provider/common/Anthropic_StructuredGeneration.d.ts +10 -0
  22. package/dist/ai-provider/common/Anthropic_StructuredGeneration.d.ts.map +1 -0
  23. package/dist/ai-provider/common/Anthropic_TextGeneration.d.ts +10 -0
  24. package/dist/ai-provider/common/Anthropic_TextGeneration.d.ts.map +1 -0
  25. package/dist/ai-provider/common/Anthropic_TextRewriter.d.ts +10 -0
  26. package/dist/ai-provider/common/Anthropic_TextRewriter.d.ts.map +1 -0
  27. package/dist/ai-provider/common/Anthropic_TextSummary.d.ts +10 -0
  28. package/dist/ai-provider/common/Anthropic_TextSummary.d.ts.map +1 -0
  29. package/dist/ai-provider/common/Anthropic_ToolCalling.d.ts +11 -0
  30. package/dist/ai-provider/common/Anthropic_ToolCalling.d.ts.map +1 -0
  31. package/dist/ai-provider/index.d.ts +10 -0
  32. package/dist/ai-provider/index.d.ts.map +1 -0
  33. package/dist/ai-provider/registerAnthropic.d.ts +10 -0
  34. package/dist/ai-provider/registerAnthropic.d.ts.map +1 -0
  35. package/dist/ai-provider/registerAnthropicInline.d.ts +8 -0
  36. package/dist/ai-provider/registerAnthropicInline.d.ts.map +1 -0
  37. package/dist/ai-provider/registerAnthropicWorker.d.ts +7 -0
  38. package/dist/ai-provider/registerAnthropicWorker.d.ts.map +1 -0
  39. package/dist/ai-provider/runtime.d.ts +16 -0
  40. package/dist/ai-provider/runtime.d.ts.map +1 -0
  41. package/dist/ai-provider-runtime.d.ts +7 -0
  42. package/dist/ai-provider-runtime.d.ts.map +1 -0
  43. package/dist/ai-provider-runtime.js +706 -0
  44. package/dist/ai-provider-runtime.js.map +25 -0
  45. package/dist/ai-provider.d.ts +7 -0
  46. package/dist/ai-provider.d.ts.map +1 -0
  47. package/dist/ai-provider.js +202 -0
  48. package/dist/ai-provider.js.map +15 -0
  49. package/package.json +60 -0
@@ -0,0 +1,706 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined")
5
+ return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+
9
+ // src/ai-provider/common/Anthropic_Client.ts
10
+ var _sdk;
11
+ async function loadAnthropicSDK() {
12
+ if (!_sdk) {
13
+ try {
14
+ _sdk = await import("@anthropic-ai/sdk");
15
+ } catch {
16
+ throw new Error("@anthropic-ai/sdk is required for Anthropic tasks. Install it with: bun add @anthropic-ai/sdk");
17
+ }
18
+ }
19
+ return _sdk.default;
20
+ }
21
+ async function getClient(model) {
22
+ const Anthropic = await loadAnthropicSDK();
23
+ const config = model?.provider_config;
24
+ const apiKey = config?.credential_key || config?.api_key || (typeof process !== "undefined" ? process.env?.ANTHROPIC_API_KEY : undefined);
25
+ if (!apiKey) {
26
+ throw new Error("Missing Anthropic API key: set provider_config.credential_key or the ANTHROPIC_API_KEY environment variable.");
27
+ }
28
+ try {
29
+ return new Anthropic({
30
+ apiKey,
31
+ baseURL: config?.base_url || undefined,
32
+ dangerouslyAllowBrowser: typeof globalThis.document !== "undefined" || "WorkerGlobalScope" in globalThis
33
+ });
34
+ } catch (err) {
35
+ throw new Error(`Failed to create Anthropic client: ${err instanceof Error ? err.message : "unknown error"}`);
36
+ }
37
+ }
38
+ function getModelName(model) {
39
+ const name = model?.provider_config?.model_name;
40
+ if (!name) {
41
+ throw new Error("Missing model name in provider_config.model_name.");
42
+ }
43
+ return name;
44
+ }
45
+ function getMaxTokens(input, model) {
46
+ return input.maxTokens ?? model?.provider_config?.max_tokens ?? 1024;
47
+ }
48
+
49
+ // src/ai-provider/registerAnthropicInline.ts
50
+ import { registerProviderInline } from "@workglow/ai-provider/common";
51
+
52
+ // src/ai-provider/AnthropicQueuedProvider.ts
53
+ import { AiProvider } from "@workglow/ai";
54
+
55
+ // src/ai-provider/common/Anthropic_Constants.ts
56
+ var ANTHROPIC = "ANTHROPIC";
57
+
58
+ // src/ai-provider/AnthropicQueuedProvider.ts
59
+ class AnthropicQueuedProvider extends AiProvider {
60
+ name = ANTHROPIC;
61
+ displayName = "Anthropic";
62
+ isLocal = false;
63
+ supportsBrowser = true;
64
+ taskTypes = [
65
+ "CountTokensTask",
66
+ "ModelInfoTask",
67
+ "TextGenerationTask",
68
+ "TextRewriterTask",
69
+ "TextSummaryTask",
70
+ "StructuredGenerationTask",
71
+ "ToolCallingTask",
72
+ "ModelSearchTask"
73
+ ];
74
+ constructor(tasks, streamTasks, previewTasks) {
75
+ super(tasks, streamTasks, previewTasks);
76
+ }
77
+ }
78
+
79
+ // src/ai-provider/common/Anthropic_ModelSearch.ts
80
+ import { filterLabeledModelsByQuery } from "@workglow/ai-provider/common";
81
+ var ANTHROPIC_FALLBACK = [
82
+ { label: "claude-opus-4-7", value: "claude-opus-4-7" },
83
+ { label: "claude-sonnet-4-6", value: "claude-sonnet-4-6" },
84
+ { label: "claude-haiku-4-5-20251001", value: "claude-haiku-4-5-20251001" },
85
+ { label: "claude-opus-4-6", value: "claude-opus-4-6" },
86
+ { label: "claude-sonnet-4-5-20250929", value: "claude-sonnet-4-5-20250929" },
87
+ { label: "claude-3-5-sonnet-20241022", value: "claude-3-5-sonnet-20241022" },
88
+ { label: "claude-3-5-haiku-20241022", value: "claude-3-5-haiku-20241022" }
89
+ ];
90
+ async function listAnthropicModels(credentialKey) {
91
+ const client = await getClient({
92
+ provider: ANTHROPIC,
93
+ provider_config: { model_name: "", credential_key: credentialKey }
94
+ });
95
+ const models = [];
96
+ for await (const m of client.beta.models.list()) {
97
+ models.push({ label: `${m.id} ${m.display_name}`, value: m.id });
98
+ }
99
+ return models;
100
+ }
101
+ function mapModelList(models) {
102
+ return models.map((m) => ({
103
+ id: m.value,
104
+ label: m.label,
105
+ description: "",
106
+ record: {
107
+ model_id: m.value,
108
+ provider: ANTHROPIC,
109
+ title: m.value,
110
+ description: "",
111
+ tasks: [],
112
+ provider_config: { model_name: m.value },
113
+ metadata: {}
114
+ },
115
+ raw: m
116
+ }));
117
+ }
118
+ var Anthropic_ModelSearch = async (input) => {
119
+ let models;
120
+ if (!input.credential_key) {
121
+ models = ANTHROPIC_FALLBACK;
122
+ } else {
123
+ models = await listAnthropicModels(input.credential_key);
124
+ }
125
+ models = filterLabeledModelsByQuery(models, input.query);
126
+ return { results: mapModelList(models) };
127
+ };
128
+
129
+ // src/ai-provider/common/Anthropic_ToolCalling.ts
130
+ import { buildToolDescription, filterValidToolCalls } from "@workglow/ai/worker";
131
+ import { parsePartialJson } from "@workglow/util/worker";
132
+ function buildAnthropicMessages(messages, prompt) {
133
+ if (!messages || messages.length === 0) {
134
+ return [{ role: "user", content: prompt }];
135
+ }
136
+ const out = [];
137
+ for (const msg of messages) {
138
+ if (msg.role === "user") {
139
+ const blocks = msg.content.map((b) => {
140
+ if (b.type === "text")
141
+ return { type: "text", text: b.text };
142
+ if (b.type === "image") {
143
+ return {
144
+ type: "image",
145
+ source: { type: "base64", media_type: b.mimeType, data: b.data }
146
+ };
147
+ }
148
+ return b;
149
+ });
150
+ out.push({ role: "user", content: blocks });
151
+ } else if (msg.role === "assistant") {
152
+ const blocks = msg.content.map((b) => {
153
+ if (b.type === "text")
154
+ return { type: "text", text: b.text };
155
+ if (b.type === "tool_use") {
156
+ return { type: "tool_use", id: b.id, name: b.name, input: b.input };
157
+ }
158
+ return b;
159
+ });
160
+ out.push({ role: "assistant", content: blocks });
161
+ } else if (msg.role === "tool") {
162
+ const blocks = msg.content.filter((b) => b.type === "tool_result").map((b) => {
163
+ const content = b.content.map((inner) => {
164
+ if (inner.type === "text")
165
+ return { type: "text", text: inner.text };
166
+ if (inner.type === "image") {
167
+ return {
168
+ type: "image",
169
+ source: { type: "base64", media_type: inner.mimeType, data: inner.data }
170
+ };
171
+ }
172
+ return inner;
173
+ });
174
+ return {
175
+ type: "tool_result",
176
+ tool_use_id: b.tool_use_id,
177
+ content,
178
+ ...b.is_error ? { is_error: true } : {}
179
+ };
180
+ });
181
+ out.push({ role: "user", content: blocks });
182
+ } else if (msg.role === "system") {
183
+ continue;
184
+ }
185
+ }
186
+ return out;
187
+ }
188
+ function mapAnthropicToolChoice(toolChoice) {
189
+ if (!toolChoice || toolChoice === "auto")
190
+ return { type: "auto" };
191
+ if (toolChoice === "none")
192
+ return;
193
+ if (toolChoice === "required")
194
+ return { type: "any" };
195
+ return { type: "tool", name: toolChoice };
196
+ }
197
+ var Anthropic_ToolCalling = async (input, model, update_progress, signal, _outputSchema, sessionId) => {
198
+ update_progress(0, "Starting Anthropic tool calling");
199
+ const client = await getClient(model);
200
+ const modelName = getModelName(model);
201
+ const tools = input.tools.map((t) => ({
202
+ name: t.name,
203
+ description: buildToolDescription(t),
204
+ input_schema: t.inputSchema
205
+ }));
206
+ const toolChoice = mapAnthropicToolChoice(input.toolChoice);
207
+ const messages = buildAnthropicMessages(input.messages, input.prompt);
208
+ const params = {
209
+ model: modelName,
210
+ messages,
211
+ max_tokens: getMaxTokens(input, model),
212
+ temperature: input.temperature
213
+ };
214
+ if (input.systemPrompt) {
215
+ params.system = input.systemPrompt;
216
+ }
217
+ if (toolChoice !== undefined) {
218
+ params.tools = tools;
219
+ params.tool_choice = toolChoice;
220
+ }
221
+ if (sessionId) {
222
+ if (params.system) {
223
+ params.system = [
224
+ {
225
+ type: "text",
226
+ text: params.system,
227
+ cache_control: { type: "ephemeral" }
228
+ }
229
+ ];
230
+ }
231
+ if (params.tools && params.tools.length > 0) {
232
+ const lastIdx = params.tools.length - 1;
233
+ params.tools[lastIdx] = {
234
+ ...params.tools[lastIdx],
235
+ cache_control: { type: "ephemeral" }
236
+ };
237
+ }
238
+ }
239
+ const response = await client.messages.create(params, { signal });
240
+ const text = response.content.filter((b) => b.type === "text").map((b) => b.text).join("");
241
+ const toolCalls = [];
242
+ response.content.filter((b) => b.type === "tool_use").forEach((b) => {
243
+ toolCalls.push({
244
+ id: b.id,
245
+ name: b.name,
246
+ input: b.input ?? {}
247
+ });
248
+ });
249
+ update_progress(100, "Completed Anthropic tool calling");
250
+ return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
251
+ };
252
+ var Anthropic_ToolCalling_Stream = async function* (input, model, signal, _outputSchema, sessionId) {
253
+ const client = await getClient(model);
254
+ const modelName = getModelName(model);
255
+ const tools = input.tools.map((t) => ({
256
+ name: t.name,
257
+ description: buildToolDescription(t),
258
+ input_schema: t.inputSchema
259
+ }));
260
+ const toolChoice = mapAnthropicToolChoice(input.toolChoice);
261
+ const messages = buildAnthropicMessages(input.messages, input.prompt);
262
+ const params = {
263
+ model: modelName,
264
+ messages,
265
+ max_tokens: getMaxTokens(input, model),
266
+ temperature: input.temperature
267
+ };
268
+ if (input.systemPrompt) {
269
+ params.system = input.systemPrompt;
270
+ }
271
+ if (toolChoice !== undefined) {
272
+ params.tools = tools;
273
+ params.tool_choice = toolChoice;
274
+ }
275
+ if (sessionId) {
276
+ if (params.system) {
277
+ params.system = [
278
+ {
279
+ type: "text",
280
+ text: params.system,
281
+ cache_control: { type: "ephemeral" }
282
+ }
283
+ ];
284
+ }
285
+ if (params.tools && params.tools.length > 0) {
286
+ const lastIdx = params.tools.length - 1;
287
+ params.tools[lastIdx] = {
288
+ ...params.tools[lastIdx],
289
+ cache_control: { type: "ephemeral" }
290
+ };
291
+ }
292
+ }
293
+ const stream = client.messages.stream(params, { signal });
294
+ const blockMeta = new Map;
295
+ const toolCallsByBlockIndex = new Map;
296
+ const toolCallsInStreamOrder = () => [...toolCallsByBlockIndex.entries()].sort((a, b) => a[0] - b[0]).map(([, tc]) => tc);
297
+ for await (const event of stream) {
298
+ if (event.type === "content_block_start") {
299
+ const block = event.content_block;
300
+ const index = event.index;
301
+ if (block.type === "tool_use") {
302
+ blockMeta.set(index, {
303
+ type: "tool_use",
304
+ id: block.id,
305
+ name: block.name,
306
+ json: ""
307
+ });
308
+ } else if (block.type === "text") {
309
+ blockMeta.set(index, { type: "text", json: "" });
310
+ }
311
+ } else if (event.type === "content_block_delta") {
312
+ const index = event.index;
313
+ const delta = event.delta;
314
+ if (delta.type === "text_delta") {
315
+ yield { type: "text-delta", port: "text", textDelta: delta.text };
316
+ } else if (delta.type === "input_json_delta") {
317
+ const meta = blockMeta.get(index);
318
+ if (meta) {
319
+ meta.json += delta.partial_json;
320
+ let parsedInput;
321
+ try {
322
+ parsedInput = JSON.parse(meta.json);
323
+ } catch {
324
+ const partial = parsePartialJson(meta.json);
325
+ parsedInput = partial ?? {};
326
+ }
327
+ toolCallsByBlockIndex.set(index, {
328
+ id: meta.id ?? "",
329
+ name: meta.name ?? "",
330
+ input: parsedInput
331
+ });
332
+ yield {
333
+ type: "object-delta",
334
+ port: "toolCalls",
335
+ objectDelta: toolCallsInStreamOrder()
336
+ };
337
+ }
338
+ }
339
+ } else if (event.type === "content_block_stop") {
340
+ const index = event.index;
341
+ const meta = blockMeta.get(index);
342
+ if (meta?.type === "tool_use") {
343
+ let finalInput;
344
+ try {
345
+ finalInput = JSON.parse(meta.json);
346
+ } catch {
347
+ finalInput = parsePartialJson(meta.json) ?? {};
348
+ }
349
+ const id = meta.id ?? "";
350
+ toolCallsByBlockIndex.set(index, { id, name: meta.name ?? "", input: finalInput });
351
+ yield {
352
+ type: "object-delta",
353
+ port: "toolCalls",
354
+ objectDelta: toolCallsInStreamOrder()
355
+ };
356
+ }
357
+ blockMeta.delete(index);
358
+ }
359
+ }
360
+ yield { type: "finish", data: { text: "", toolCalls: [] } };
361
+ };
362
+
363
+ // src/ai-provider/common/Anthropic_Chat.ts
364
+ function buildParams(input, model, sessionId) {
365
+ const messages = buildAnthropicMessages(input.messages, input.prompt);
366
+ const params = {
367
+ model: getModelName(model),
368
+ messages,
369
+ max_tokens: getMaxTokens({ maxTokens: input.maxTokens }, model)
370
+ };
371
+ if (input.temperature !== undefined)
372
+ params.temperature = input.temperature;
373
+ if (input.systemPrompt) {
374
+ params.system = sessionId ? [
375
+ {
376
+ type: "text",
377
+ text: input.systemPrompt,
378
+ cache_control: { type: "ephemeral" }
379
+ }
380
+ ] : input.systemPrompt;
381
+ }
382
+ if (sessionId && messages.length > 0) {
383
+ const last = messages[messages.length - 1];
384
+ if (Array.isArray(last.content) && last.content.length > 0) {
385
+ const blocks = last.content;
386
+ blocks[blocks.length - 1] = {
387
+ ...blocks[blocks.length - 1],
388
+ cache_control: { type: "ephemeral" }
389
+ };
390
+ }
391
+ }
392
+ return params;
393
+ }
394
+ var Anthropic_Chat = async (input, model, update_progress, signal, _outputSchema, sessionId) => {
395
+ update_progress(0, "Anthropic chat turn");
396
+ const client = await getClient(model);
397
+ const params = buildParams(input, model, sessionId);
398
+ const response = await client.messages.create(params, { signal });
399
+ const text = response.content.filter((b) => b.type === "text").map((b) => b.text).join("");
400
+ update_progress(100, "Turn complete");
401
+ return { text };
402
+ };
403
+ var Anthropic_Chat_Stream = async function* (input, model, signal, _outputSchema, sessionId) {
404
+ const client = await getClient(model);
405
+ const params = buildParams(input, model, sessionId);
406
+ const stream = client.messages.stream(params, { signal });
407
+ for await (const event of stream) {
408
+ const e = event;
409
+ if (e.type === "content_block_delta" && e.delta?.type === "text_delta") {
410
+ yield { type: "text-delta", port: "text", textDelta: e.delta.text ?? "" };
411
+ }
412
+ }
413
+ yield { type: "finish", data: {} };
414
+ };
415
+
416
+ // src/ai-provider/common/Anthropic_CountTokens.ts
417
+ var Anthropic_CountTokens = async (input, model, onProgress, signal) => {
418
+ const client = await getClient(model);
419
+ const result = await client.messages.countTokens({
420
+ model: getModelName(model),
421
+ messages: [{ role: "user", content: input.text }]
422
+ });
423
+ return { count: result.input_tokens };
424
+ };
425
+ var Anthropic_CountTokens_Preview = async (input, _model) => {
426
+ return { count: Math.ceil(input.text.length / 4) };
427
+ };
428
+
429
+ // src/ai-provider/common/Anthropic_ModelInfo.ts
430
+ var Anthropic_ModelInfo = async (input) => {
431
+ if (input.detail === "dimensions") {
432
+ return {
433
+ model: input.model,
434
+ is_local: false,
435
+ is_remote: true,
436
+ supports_browser: true,
437
+ supports_node: true,
438
+ is_cached: false,
439
+ is_loaded: false,
440
+ file_sizes: null
441
+ };
442
+ }
443
+ return {
444
+ model: input.model,
445
+ is_local: false,
446
+ is_remote: true,
447
+ supports_browser: true,
448
+ supports_node: true,
449
+ is_cached: false,
450
+ is_loaded: false,
451
+ file_sizes: null
452
+ };
453
+ };
454
+
455
+ // src/ai-provider/common/Anthropic_StructuredGeneration.ts
456
+ import { parsePartialJson as parsePartialJson2 } from "@workglow/util/worker";
457
+ var Anthropic_StructuredGeneration = async (input, model, update_progress, signal, outputSchema) => {
458
+ update_progress(0, "Starting Anthropic structured generation");
459
+ const client = await getClient(model);
460
+ const modelName = getModelName(model);
461
+ const schema = input.outputSchema ?? outputSchema;
462
+ const response = await client.messages.create({
463
+ model: modelName,
464
+ messages: [{ role: "user", content: input.prompt }],
465
+ tools: [
466
+ {
467
+ name: "structured_output",
468
+ description: "Output structured data conforming to the schema",
469
+ input_schema: schema
470
+ }
471
+ ],
472
+ tool_choice: { type: "tool", name: "structured_output" },
473
+ max_tokens: getMaxTokens(input, model)
474
+ }, { signal });
475
+ const toolBlock = response.content.find((b) => b.type === "tool_use");
476
+ const object = toolBlock?.input ?? {};
477
+ update_progress(100, "Completed Anthropic structured generation");
478
+ return { object };
479
+ };
480
+ var Anthropic_StructuredGeneration_Stream = async function* (input, model, signal, outputSchema) {
481
+ const client = await getClient(model);
482
+ const modelName = getModelName(model);
483
+ const schema = input.outputSchema ?? outputSchema;
484
+ const stream = client.messages.stream({
485
+ model: modelName,
486
+ messages: [{ role: "user", content: input.prompt }],
487
+ tools: [
488
+ {
489
+ name: "structured_output",
490
+ description: "Output structured data conforming to the schema",
491
+ input_schema: schema
492
+ }
493
+ ],
494
+ tool_choice: { type: "tool", name: "structured_output" },
495
+ max_tokens: getMaxTokens(input, model)
496
+ }, { signal });
497
+ let accumulatedJson = "";
498
+ for await (const event of stream) {
499
+ if (event.type === "content_block_delta" && event.delta.type === "input_json_delta") {
500
+ accumulatedJson += event.delta.partial_json;
501
+ const partial = parsePartialJson2(accumulatedJson);
502
+ if (partial !== undefined) {
503
+ yield { type: "object-delta", port: "object", objectDelta: partial };
504
+ }
505
+ }
506
+ }
507
+ let finalObject;
508
+ try {
509
+ finalObject = JSON.parse(accumulatedJson);
510
+ } catch {
511
+ finalObject = parsePartialJson2(accumulatedJson) ?? {};
512
+ }
513
+ yield { type: "finish", data: { object: finalObject } };
514
+ };
515
+
516
+ // src/ai-provider/common/Anthropic_TextGeneration.ts
517
+ import { getLogger } from "@workglow/util/worker";
518
+ var Anthropic_TextGeneration = async (input, model, update_progress, signal, _outputSchema, sessionId) => {
519
+ const logger = getLogger();
520
+ const timerLabel = `anthropic:TextGeneration:${model?.provider_config?.model_name}`;
521
+ logger.time(timerLabel, { model: model?.provider_config?.model_name });
522
+ update_progress(0, "Starting Anthropic text generation");
523
+ const client = await getClient(model);
524
+ const modelName = getModelName(model);
525
+ const params = {
526
+ model: modelName,
527
+ messages: [{ role: "user", content: input.prompt }],
528
+ max_tokens: getMaxTokens(input, model),
529
+ temperature: input.temperature,
530
+ top_p: input.topP
531
+ };
532
+ if (sessionId && params.system) {
533
+ params.system = [
534
+ {
535
+ type: "text",
536
+ text: params.system,
537
+ cache_control: { type: "ephemeral" }
538
+ }
539
+ ];
540
+ }
541
+ const response = await client.messages.create(params, { signal });
542
+ const text = response.content[0]?.type === "text" ? response.content[0].text : "";
543
+ update_progress(100, "Completed Anthropic text generation");
544
+ logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });
545
+ return { text };
546
+ };
547
+ var Anthropic_TextGeneration_Stream = async function* (input, model, signal, _outputSchema, sessionId) {
548
+ const client = await getClient(model);
549
+ const modelName = getModelName(model);
550
+ const params = {
551
+ model: modelName,
552
+ messages: [{ role: "user", content: input.prompt }],
553
+ max_tokens: getMaxTokens(input, model),
554
+ temperature: input.temperature,
555
+ top_p: input.topP
556
+ };
557
+ if (sessionId && params.system) {
558
+ params.system = [
559
+ {
560
+ type: "text",
561
+ text: params.system,
562
+ cache_control: { type: "ephemeral" }
563
+ }
564
+ ];
565
+ }
566
+ const stream = client.messages.stream(params, { signal });
567
+ for await (const event of stream) {
568
+ if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
569
+ yield { type: "text-delta", port: "text", textDelta: event.delta.text };
570
+ }
571
+ }
572
+ yield { type: "finish", data: {} };
573
+ };
574
+
575
+ // src/ai-provider/common/Anthropic_TextRewriter.ts
576
+ var Anthropic_TextRewriter = async (input, model, update_progress, signal) => {
577
+ update_progress(0, "Starting Anthropic text rewriting");
578
+ const client = await getClient(model);
579
+ const modelName = getModelName(model);
580
+ const response = await client.messages.create({
581
+ model: modelName,
582
+ system: input.prompt,
583
+ messages: [{ role: "user", content: input.text }],
584
+ max_tokens: getMaxTokens({}, model)
585
+ }, { signal });
586
+ const text = response.content[0]?.type === "text" ? response.content[0].text : "";
587
+ update_progress(100, "Completed Anthropic text rewriting");
588
+ return { text };
589
+ };
590
+ var Anthropic_TextRewriter_Stream = async function* (input, model, signal) {
591
+ const client = await getClient(model);
592
+ const modelName = getModelName(model);
593
+ const stream = client.messages.stream({
594
+ model: modelName,
595
+ system: input.prompt,
596
+ messages: [{ role: "user", content: input.text }],
597
+ max_tokens: getMaxTokens({}, model)
598
+ }, { signal });
599
+ for await (const event of stream) {
600
+ if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
601
+ yield { type: "text-delta", port: "text", textDelta: event.delta.text };
602
+ }
603
+ }
604
+ yield { type: "finish", data: {} };
605
+ };
606
+
607
+ // src/ai-provider/common/Anthropic_TextSummary.ts
608
+ var Anthropic_TextSummary = async (input, model, update_progress, signal) => {
609
+ update_progress(0, "Starting Anthropic text summarization");
610
+ const client = await getClient(model);
611
+ const modelName = getModelName(model);
612
+ const response = await client.messages.create({
613
+ model: modelName,
614
+ system: "Summarize the following text concisely.",
615
+ messages: [{ role: "user", content: input.text }],
616
+ max_tokens: getMaxTokens({}, model)
617
+ }, { signal });
618
+ const text = response.content[0]?.type === "text" ? response.content[0].text : "";
619
+ update_progress(100, "Completed Anthropic text summarization");
620
+ return { text };
621
+ };
622
+ var Anthropic_TextSummary_Stream = async function* (input, model, signal) {
623
+ const client = await getClient(model);
624
+ const modelName = getModelName(model);
625
+ const stream = client.messages.stream({
626
+ model: modelName,
627
+ system: "Summarize the following text concisely.",
628
+ messages: [{ role: "user", content: input.text }],
629
+ max_tokens: getMaxTokens({}, model)
630
+ }, { signal });
631
+ for await (const event of stream) {
632
+ if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
633
+ yield { type: "text-delta", port: "text", textDelta: event.delta.text };
634
+ }
635
+ }
636
+ yield { type: "finish", data: {} };
637
+ };
638
+
639
+ // src/ai-provider/common/Anthropic_JobRunFns.ts
640
+ var ANTHROPIC_TASKS = {
641
+ AiChatTask: Anthropic_Chat,
642
+ CountTokensTask: Anthropic_CountTokens,
643
+ ModelInfoTask: Anthropic_ModelInfo,
644
+ TextGenerationTask: Anthropic_TextGeneration,
645
+ TextRewriterTask: Anthropic_TextRewriter,
646
+ TextSummaryTask: Anthropic_TextSummary,
647
+ StructuredGenerationTask: Anthropic_StructuredGeneration,
648
+ ToolCallingTask: Anthropic_ToolCalling,
649
+ ModelSearchTask: Anthropic_ModelSearch
650
+ };
651
+ var ANTHROPIC_STREAM_TASKS = {
652
+ AiChatTask: Anthropic_Chat_Stream,
653
+ TextGenerationTask: Anthropic_TextGeneration_Stream,
654
+ TextRewriterTask: Anthropic_TextRewriter_Stream,
655
+ TextSummaryTask: Anthropic_TextSummary_Stream,
656
+ StructuredGenerationTask: Anthropic_StructuredGeneration_Stream,
657
+ ToolCallingTask: Anthropic_ToolCalling_Stream
658
+ };
659
+ var ANTHROPIC_PREVIEW_TASKS = {
660
+ CountTokensTask: Anthropic_CountTokens_Preview
661
+ };
662
+
663
+ // src/ai-provider/registerAnthropicInline.ts
664
+ async function registerAnthropicInline(options) {
665
+ await registerProviderInline(new AnthropicQueuedProvider(ANTHROPIC_TASKS, ANTHROPIC_STREAM_TASKS, ANTHROPIC_PREVIEW_TASKS), "Anthropic", options);
666
+ }
667
+
668
+ // src/ai-provider/registerAnthropicWorker.ts
669
+ import { registerProviderWorker } from "@workglow/ai-provider/common";
670
+
671
+ // src/ai-provider/AnthropicProvider.ts
672
+ import { AiProvider as AiProvider2 } from "@workglow/ai/worker";
673
+ class AnthropicProvider extends AiProvider2 {
674
+ name = ANTHROPIC;
675
+ displayName = "Anthropic";
676
+ isLocal = false;
677
+ supportsBrowser = true;
678
+ taskTypes = [
679
+ "CountTokensTask",
680
+ "ModelInfoTask",
681
+ "TextGenerationTask",
682
+ "TextRewriterTask",
683
+ "TextSummaryTask",
684
+ "StructuredGenerationTask",
685
+ "ToolCallingTask",
686
+ "ModelSearchTask"
687
+ ];
688
+ constructor(tasks, streamTasks, previewTasks) {
689
+ super(tasks, streamTasks, previewTasks);
690
+ }
691
+ }
692
+
693
+ // src/ai-provider/registerAnthropicWorker.ts
694
+ async function registerAnthropicWorker() {
695
+ await registerProviderWorker((ws) => new AnthropicProvider(ANTHROPIC_TASKS, ANTHROPIC_STREAM_TASKS, ANTHROPIC_PREVIEW_TASKS).registerOnWorkerServer(ws), "Anthropic");
696
+ }
697
+ export {
698
+ registerAnthropicWorker,
699
+ registerAnthropicInline,
700
+ loadAnthropicSDK,
701
+ getModelName,
702
+ getMaxTokens,
703
+ getClient
704
+ };
705
+
706
+ //# debugId=5CF7CD36576BBE7E64756E2164756E21