@anvia/anthropic 1.0.0-rc.5 → 1.0.0-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ import {
23
23
  // src/anthropic/completion.ts
24
24
  import {
25
25
  assertCompletionRequestSupported,
26
+ CompletionProviderOutputError,
27
+ isJsonValue,
26
28
  Usage,
27
29
  withContextUsage
28
30
  } from "@anvia/core/completion";
@@ -50,7 +52,7 @@ function isPlainObject(value) {
50
52
  return typeof value === "object" && value !== null && !Array.isArray(value);
51
53
  }
52
54
  function numberFrom(value) {
53
- return typeof value === "number" && Number.isFinite(value) ? value : 0;
55
+ return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : 0;
54
56
  }
55
57
  function stringFrom(value) {
56
58
  return typeof value === "string" ? value : void 0;
@@ -102,69 +104,142 @@ var AnthropicCompletionModel = class {
102
104
  assertCompletionRequestSupported(this, request, { streaming: true });
103
105
  const params = { ...toAnthropicMessagesParams(this.modelId, request), stream: true };
104
106
  const stream = await this.createMessage(params, anthropicRequestOptions(options));
105
- const toolIdsByIndex = /* @__PURE__ */ new Map();
106
- const blocksWithInitialToolInput = /* @__PURE__ */ new Set();
107
+ const toolsByIndex = /* @__PURE__ */ new Map();
108
+ const toolIndexesById = /* @__PURE__ */ new Map();
107
109
  const streamUsage = Usage.empty();
108
110
  const streamUsageFields = emptyAnthropicStreamUsageFields();
109
111
  let hasStreamUsage = false;
112
+ let hasToolProgress = false;
113
+ let hasTerminalEvent = false;
110
114
  let streamMessageId;
115
+ let streamProviderFinishReason;
111
116
  for await (const event of stream) {
112
- if (isPlainObject(event) && event.type === "content_block_start") {
113
- const index = numberFrom(event.index);
114
- const block = isPlainObject(event.content_block) ? event.content_block : {};
115
- const id = stringFrom(block.id);
116
- if (id !== void 0) {
117
- toolIdsByIndex.set(index, id);
118
- }
119
- if (toolInputArgumentsDelta(block.input) !== void 0) {
120
- blocksWithInitialToolInput.add(index);
121
- }
122
- }
117
+ const hadProviderFinishReason = streamProviderFinishReason !== void 0;
123
118
  if (isPlainObject(event)) {
124
119
  if (event.type === "message_start" && isPlainObject(event.message)) {
125
120
  streamMessageId = stringFrom(event.message.id) ?? streamMessageId;
121
+ if (event.message.stop_reason !== void 0 && event.message.stop_reason !== null) {
122
+ streamProviderFinishReason = acceptAnthropicStreamFinishReason(
123
+ streamProviderFinishReason,
124
+ event.message.stop_reason,
125
+ streamUsage
126
+ );
127
+ }
128
+ }
129
+ if (event.type === "message_delta" && isPlainObject(event.delta)) {
130
+ if (event.delta.stop_reason !== void 0 && event.delta.stop_reason !== null) {
131
+ streamProviderFinishReason = acceptAnthropicStreamFinishReason(
132
+ streamProviderFinishReason,
133
+ event.delta.stop_reason,
134
+ streamUsage
135
+ );
136
+ }
126
137
  }
127
138
  hasStreamUsage = applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;
128
139
  }
129
- for (const mapped of fromAnthropicStreamEvent(event)) {
130
- const usageMapped = mapped.type === "final" && hasStreamUsage ? {
131
- ...mapped,
132
- response: {
133
- ...mapped.response,
134
- usage: mergeUsage(mapped.response.usage, streamUsage, streamUsageFields)
140
+ if (hadProviderFinishReason && isAnthropicSemanticProgressEvent(event)) {
141
+ throw providerOutputError("invalid-tool-call", streamUsage);
142
+ }
143
+ if (isPlainObject(event) && event.type === "content_block_start" && isPlainObject(event.content_block) && event.content_block.type === "tool_use") {
144
+ const state = startAnthropicStreamTool(event.index, event.content_block, streamUsage);
145
+ if (toolsByIndex.has(state.index) || toolIndexesById.has(state.id)) {
146
+ throw providerOutputError("invalid-tool-call", streamUsage, state.id);
147
+ }
148
+ toolsByIndex.set(state.index, state);
149
+ toolIndexesById.set(state.id, state.index);
150
+ hasToolProgress = true;
151
+ yield toolCallDelta(state.id, {
152
+ name: state.name,
153
+ argumentsDelta: state.initialInput.type === "complete" ? state.initialInput.text : void 0
154
+ });
155
+ continue;
156
+ }
157
+ if (isPlainObject(event) && event.type === "content_block_delta" && isPlainObject(event.delta) && event.delta.type === "input_json_delta") {
158
+ const index = anthropicToolStreamIndex(event.index, streamUsage);
159
+ const state = toolsByIndex.get(index);
160
+ if (state === void 0) {
161
+ throw providerOutputError("invalid-tool-call", streamUsage);
162
+ }
163
+ if (state.closed || state.finalized) {
164
+ throw providerOutputError("invalid-tool-call", streamUsage, state.id);
165
+ }
166
+ if (typeof event.delta.partial_json !== "string") {
167
+ throw providerOutputError("invalid-tool-arguments", streamUsage, state.id);
168
+ }
169
+ if (state.initialInput.type === "complete") {
170
+ throw providerOutputError("invalid-tool-arguments", streamUsage, state.id);
171
+ }
172
+ state.hasPartialJson = true;
173
+ state.partialJson += event.delta.partial_json;
174
+ yield toolCallDelta(state.id, { argumentsDelta: event.delta.partial_json });
175
+ continue;
176
+ }
177
+ if (isPlainObject(event) && event.type === "content_block_stop") {
178
+ const index = optionalAnthropicToolStreamIndex(event.index);
179
+ const state = index === void 0 ? void 0 : toolsByIndex.get(index);
180
+ if (state !== void 0) {
181
+ if (state.closed) {
182
+ throw providerOutputError("invalid-tool-call", streamUsage, state.id);
135
183
  }
136
- } : mapped;
137
- const streamMapped = usageMapped.type === "final" ? {
138
- ...usageMapped,
139
- response: withContextUsage(usageMapped.response, this.modelInfo())
140
- } : usageMapped;
141
- if (streamMapped.type === "tool_call_delta" && streamMapped.argumentsDelta !== void 0 && isPlainObject(event) && event.type === "content_block_delta" && blocksWithInitialToolInput.has(numberFrom(event.index))) {
184
+ state.closed = true;
142
185
  continue;
143
186
  }
144
- if (streamMapped.type === "tool_call_delta" && streamMapped.id.startsWith("tool_")) {
145
- const index = Number(streamMapped.id.slice("tool_".length));
146
- yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };
147
- } else {
148
- yield streamMapped;
149
- }
150
187
  }
151
- if (isPlainObject(event) && event.type === "message_stop" && !isPlainObject(event.message)) {
152
- const response = {
153
- choice: [],
154
- usage: copyUsage(streamUsage),
155
- rawResponse: event
156
- };
157
- if (streamMessageId !== void 0) {
158
- response.messageId = streamMessageId;
188
+ if (isPlainObject(event) && event.type === "message_stop") {
189
+ hasTerminalEvent = true;
190
+ const finalMessage = isPlainObject(event.message) ? event.message : void 0;
191
+ if (finalMessage?.stop_reason !== void 0 && finalMessage.stop_reason !== null) {
192
+ streamProviderFinishReason = acceptAnthropicStreamFinishReason(
193
+ streamProviderFinishReason,
194
+ finalMessage.stop_reason,
195
+ streamUsage
196
+ );
159
197
  }
198
+ const hasFinalMessageToolUse = anthropicMessageHasToolUse(finalMessage);
199
+ if (hasToolProgress || hasFinalMessageToolUse) {
200
+ const baseUsage = finalMessage === void 0 ? Usage.empty() : anthropicMessageUsage(finalMessage);
201
+ const terminalUsage = hasStreamUsage ? mergeUsage(baseUsage, streamUsage, streamUsageFields) : baseUsage;
202
+ const terminalResponse = emptyAnthropicStreamResponse(
203
+ event,
204
+ streamMessageId,
205
+ terminalUsage
206
+ );
207
+ applyAnthropicFinishReason(terminalResponse, streamProviderFinishReason);
208
+ assertAnthropicResponseIntegrity(terminalResponse, true);
209
+ }
210
+ for (const state of toolsByIndex.values()) {
211
+ const finalDelta = finalizeAnthropicStreamTool(state, streamUsage);
212
+ if (finalDelta !== void 0) yield finalDelta;
213
+ }
214
+ const baseResponse = finalMessage !== void 0 ? fromAnthropicMessageUnchecked(finalMessage) : emptyAnthropicStreamResponse(event, streamMessageId, streamUsage);
215
+ const response = hasStreamUsage ? {
216
+ ...baseResponse,
217
+ usage: mergeUsage(baseResponse.usage, streamUsage, streamUsageFields)
218
+ } : baseResponse;
219
+ applyAnthropicFinishReason(response, streamProviderFinishReason);
220
+ assertAnthropicResponseIntegrity(response, hasToolProgress || hasFinalMessageToolUse);
160
221
  yield {
161
222
  type: "final",
162
223
  response: withContextUsage(response, this.modelInfo())
163
224
  };
225
+ return;
226
+ }
227
+ if (isPlainObject(event) && event.type === "error") {
228
+ hasTerminalEvent = true;
164
229
  }
230
+ for (const mapped of fromAnthropicStreamEvent(event)) {
231
+ yield mapped;
232
+ }
233
+ if (hasTerminalEvent) return;
234
+ }
235
+ if (hasToolProgress && !hasTerminalEvent) {
236
+ throw providerOutputError("incomplete-stream", streamUsage);
165
237
  }
166
238
  }
167
239
  };
240
+ function isAnthropicSemanticProgressEvent(event) {
241
+ return isPlainObject(event) && (event.type === "content_block_start" || event.type === "content_block_delta");
242
+ }
168
243
  function emptyAnthropicStreamUsageFields() {
169
244
  return {
170
245
  inputTokens: false,
@@ -245,10 +320,107 @@ function copyUsage(usage) {
245
320
  if (usage.details !== void 0) copy = { ...copy, details: { ...usage.details } };
246
321
  return copy;
247
322
  }
323
+ function emptyAnthropicStreamResponse(rawResponse, messageId, usage) {
324
+ const response = {
325
+ choice: [],
326
+ usage: copyUsage(usage),
327
+ rawResponse
328
+ };
329
+ if (messageId !== void 0) response.messageId = messageId;
330
+ return response;
331
+ }
332
+ function startAnthropicStreamTool(indexValue, block, usage) {
333
+ const index = anthropicToolStreamIndex(indexValue, usage);
334
+ const id = requiredToolCallId(block.id, usage);
335
+ const name = requiredToolName(block.name, id, usage);
336
+ return {
337
+ index,
338
+ id,
339
+ name,
340
+ initialInput: anthropicStreamToolInput(block.input, id, usage),
341
+ partialJson: "",
342
+ hasPartialJson: false,
343
+ closed: false,
344
+ finalized: false
345
+ };
346
+ }
347
+ function anthropicStreamToolInput(input, toolCallId, usage) {
348
+ if (!isPlainObject(input) || !isJsonValue(input)) {
349
+ throw providerOutputError("invalid-tool-arguments", usage, toolCallId);
350
+ }
351
+ if (isEmptyJsonObject(input)) {
352
+ return { type: "empty" };
353
+ }
354
+ const text = JSON.stringify(input);
355
+ if (text === void 0) {
356
+ throw providerOutputError("invalid-tool-arguments", usage, toolCallId);
357
+ }
358
+ return { type: "complete", text };
359
+ }
360
+ function finalizeAnthropicStreamTool(state, usage) {
361
+ if (state.finalized) return void 0;
362
+ if (state.initialInput.type === "complete") {
363
+ state.finalized = true;
364
+ return void 0;
365
+ }
366
+ if (state.hasPartialJson) {
367
+ assertSerializedToolInput(state.partialJson, state.id, usage);
368
+ state.finalized = true;
369
+ return void 0;
370
+ }
371
+ state.finalized = true;
372
+ return toolCallDelta(state.id, { argumentsDelta: "{}" });
373
+ }
374
+ function assertSerializedToolInput(text, toolCallId, usage) {
375
+ const parsed = parseSerializedToolInput(text);
376
+ if (parsed.type === "malformed") {
377
+ throw providerOutputError("malformed-tool-arguments", usage, toolCallId);
378
+ }
379
+ if (parsed.type === "invalid") {
380
+ throw providerOutputError("invalid-tool-arguments", usage, toolCallId);
381
+ }
382
+ }
383
+ function parseSerializedToolInput(text) {
384
+ let value;
385
+ try {
386
+ value = JSON.parse(text);
387
+ } catch {
388
+ return { type: "malformed" };
389
+ }
390
+ return isJsonValue(value) ? { type: "valid", value } : { type: "invalid" };
391
+ }
392
+ function isEmptyJsonObject(value) {
393
+ return !Array.isArray(value) && typeof value === "object" && value !== null && Object.keys(value).length === 0;
394
+ }
395
+ function requiredToolCallId(value, usage) {
396
+ if (typeof value !== "string" || value.trim().length === 0) {
397
+ throw providerOutputError("invalid-tool-call", usage);
398
+ }
399
+ return value;
400
+ }
401
+ function requiredToolName(value, toolCallId, usage) {
402
+ if (typeof value !== "string" || value.trim().length === 0) {
403
+ throw providerOutputError("invalid-tool-call", usage, toolCallId);
404
+ }
405
+ return value;
406
+ }
407
+ function anthropicToolStreamIndex(value, usage) {
408
+ const index = optionalAnthropicToolStreamIndex(value);
409
+ if (index === void 0) {
410
+ throw providerOutputError("invalid-tool-call", usage);
411
+ }
412
+ return index;
413
+ }
414
+ function optionalAnthropicToolStreamIndex(value) {
415
+ return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : void 0;
416
+ }
248
417
  function toAnthropicMessagesParams(modelId, request) {
249
418
  const messages = requestMessages(request);
250
419
  const system = systemFromMessages(request, messages);
251
- const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};
420
+ if (request.providerOptions !== void 0 && (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))) {
421
+ throw new TypeError("Anthropic providerOptions must be a JSON object.");
422
+ }
423
+ const providerOptions = request.providerOptions ?? {};
252
424
  const params = {
253
425
  ...providerOptions,
254
426
  model: modelId,
@@ -299,10 +471,10 @@ function toolChoiceSummary(toolChoice) {
299
471
  function compactJsonObject(values) {
300
472
  return Object.fromEntries(
301
473
  Object.entries(values).flatMap(([key, value]) => {
302
- if (value === void 0) {
474
+ if (!isJsonValue(value)) {
303
475
  return [];
304
476
  }
305
- return [[key, toJsonValue(value)]];
477
+ return [[key, value]];
306
478
  })
307
479
  );
308
480
  }
@@ -319,9 +491,16 @@ function systemFromMessages(request, messages) {
319
491
  return systemMessages.length === 0 ? void 0 : systemMessages.join("\n\n");
320
492
  }
321
493
  function fromAnthropicMessage(response) {
322
- const raw = response;
494
+ assertAnthropicRawToolFinish(response);
495
+ const result = fromAnthropicMessageUnchecked(response);
496
+ assertAnthropicResponseIntegrity(result, false);
497
+ return result;
498
+ }
499
+ function fromAnthropicMessageUnchecked(response) {
500
+ const raw = isPlainObject(response) ? response : {};
323
501
  const content = Array.isArray(raw.content) ? raw.content : [];
324
502
  const choice = [];
503
+ const usage = anthropicMessageUsage(raw);
325
504
  for (const block of content) {
326
505
  if (!isPlainObject(block)) {
327
506
  continue;
@@ -341,34 +520,162 @@ function fromAnthropicMessage(response) {
341
520
  });
342
521
  }
343
522
  if (block.type === "tool_use") {
344
- const id = typeof block.id === "string" ? block.id : crypto.randomUUID();
345
- const name = typeof block.name === "string" ? block.name : "";
523
+ const id = requiredToolCallId(block.id, usage);
524
+ const name = requiredToolName(block.name, id, usage);
525
+ if (!isPlainObject(block.input) || !isJsonValue(block.input)) {
526
+ throw providerOutputError("invalid-tool-arguments", usage, id);
527
+ }
346
528
  choice.push({
347
529
  type: "tool-call",
348
530
  toolCallId: id,
349
531
  callId: id,
350
532
  toolName: name,
351
- input: toJsonValue(block.input)
533
+ input: block.input
352
534
  });
353
535
  }
354
536
  }
355
- const usageSource = isPlainObject(raw.usage) ? raw.usage : {};
356
- const usage = anthropicUsage(
357
- numberFrom(usageSource.input_tokens),
358
- numberFrom(usageSource.output_tokens),
359
- numberFrom(usageSource.cache_read_input_tokens),
360
- numberFrom(usageSource.cache_creation_input_tokens)
361
- );
362
537
  const result = {
363
538
  choice,
364
539
  usage,
365
540
  rawResponse: response
366
541
  };
542
+ applyAnthropicFinishReason(result, raw.stop_reason);
367
543
  if (typeof raw.id === "string") {
368
544
  result.messageId = raw.id;
369
545
  }
370
546
  return result;
371
547
  }
548
+ function applyAnthropicFinishReason(response, value) {
549
+ if (value === void 0 || value === null) return;
550
+ response.finishReason = typeof value === "string" ? anthropicFinishReason(value) : "other";
551
+ if (typeof value === "string") response.providerFinishReason = value;
552
+ }
553
+ function anthropicFinishReason(value) {
554
+ if (value === "end_turn" || value === "stop_sequence") return "stop";
555
+ if (value === "max_tokens" || value === "model_context_window_exceeded") return "length";
556
+ if (value === "tool_use") return "tool-calls";
557
+ if (value === "refusal") return "content-filter";
558
+ return "other";
559
+ }
560
+ function assertAnthropicResponseIntegrity(response, hasAccumulatedToolProgress) {
561
+ const toolCalls = response.choice.filter((content) => content.type === "tool-call");
562
+ if (hasAccumulatedToolProgress || toolCalls.length > 0) {
563
+ assertSafeToolFinishReason(response);
564
+ } else if (response.finishReason === "tool-calls") {
565
+ throw providerOutputError(
566
+ "invalid-tool-call",
567
+ response.usage,
568
+ void 0,
569
+ response.finishReason
570
+ );
571
+ }
572
+ const ids = /* @__PURE__ */ new Set();
573
+ for (const toolCall of toolCalls) {
574
+ if (ids.has(toolCall.toolCallId)) {
575
+ throw providerOutputError("invalid-tool-call", response.usage, toolCall.toolCallId);
576
+ }
577
+ ids.add(toolCall.toolCallId);
578
+ }
579
+ }
580
+ function assertAnthropicRawToolFinish(response) {
581
+ if (!isPlainObject(response) || !anthropicMessageHasToolUse(response)) return;
582
+ const usage = anthropicMessageUsage(response);
583
+ const terminal = { choice: [], usage, rawResponse: response };
584
+ applyAnthropicFinishReason(terminal, response.stop_reason);
585
+ assertAnthropicResponseIntegrity(terminal, true);
586
+ }
587
+ function anthropicMessageHasToolUse(message) {
588
+ return isPlainObject(message) && Array.isArray(message.content) && message.content.some((block) => isPlainObject(block) && block.type === "tool_use");
589
+ }
590
+ function anthropicMessageUsage(message) {
591
+ const usage = isPlainObject(message.usage) ? message.usage : {};
592
+ return anthropicUsage(
593
+ numberFrom(usage.input_tokens),
594
+ numberFrom(usage.output_tokens),
595
+ numberFrom(usage.cache_read_input_tokens),
596
+ numberFrom(usage.cache_creation_input_tokens)
597
+ );
598
+ }
599
+ function assertSafeToolFinishReason(response) {
600
+ if (response.finishReason === void 0) {
601
+ throw providerOutputError("incomplete-tool-call", response.usage);
602
+ }
603
+ if (response.finishReason === "length") {
604
+ throw providerOutputError(
605
+ "truncated-tool-call",
606
+ response.usage,
607
+ void 0,
608
+ response.finishReason
609
+ );
610
+ }
611
+ if (response.finishReason === "content-filter") {
612
+ throw providerOutputError(
613
+ "filtered-tool-call",
614
+ response.usage,
615
+ void 0,
616
+ response.finishReason
617
+ );
618
+ }
619
+ if (response.finishReason === "other") {
620
+ throw providerOutputError(
621
+ "invalid-tool-call",
622
+ response.usage,
623
+ void 0,
624
+ response.finishReason
625
+ );
626
+ }
627
+ if (response.finishReason !== "tool-calls") {
628
+ throw providerOutputError(
629
+ "invalid-tool-call",
630
+ response.usage,
631
+ void 0,
632
+ response.finishReason
633
+ );
634
+ }
635
+ }
636
+ function acceptAnthropicStreamFinishReason(current, next, usage) {
637
+ if (current === void 0) return next;
638
+ if (current !== next) {
639
+ throw providerOutputError("invalid-tool-call", usage);
640
+ }
641
+ return current;
642
+ }
643
+ function providerOutputError(kind, usage, toolCallId, finishReason) {
644
+ const copiedUsage = copyUsage(usage);
645
+ if (kind === "truncated-tool-call") {
646
+ if (finishReason !== "length") {
647
+ throw new TypeError('Anthropic truncated-tool-call errors require finish reason "length".');
648
+ }
649
+ return new CompletionProviderOutputError({
650
+ kind,
651
+ usage: copiedUsage,
652
+ toolCallId,
653
+ finishReason
654
+ });
655
+ }
656
+ if (kind === "filtered-tool-call") {
657
+ if (finishReason !== "content-filter") {
658
+ throw new TypeError(
659
+ 'Anthropic filtered-tool-call errors require finish reason "content-filter".'
660
+ );
661
+ }
662
+ return new CompletionProviderOutputError({
663
+ kind,
664
+ usage: copiedUsage,
665
+ toolCallId,
666
+ finishReason
667
+ });
668
+ }
669
+ if (finishReason === "length" || finishReason === "content-filter") {
670
+ throw new TypeError("Anthropic provider output error kind contradicts its finish reason.");
671
+ }
672
+ return new CompletionProviderOutputError({
673
+ kind,
674
+ usage: copiedUsage,
675
+ toolCallId,
676
+ finishReason
677
+ });
678
+ }
372
679
  function anthropicUsage(uncachedInputTokens, outputTokens, cachedInputTokens, cacheCreationInputTokens) {
373
680
  const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;
374
681
  const totalTokens = inputTokens + outputTokens;
@@ -399,10 +706,11 @@ function fromAnthropicStreamEvent(event) {
399
706
  if (event.type === "content_block_start" && isPlainObject(event.content_block)) {
400
707
  const block = event.content_block;
401
708
  if (block.type === "tool_use") {
709
+ const state = startAnthropicStreamTool(event.index, block, Usage.empty());
402
710
  return [
403
- toolCallDelta(stringFrom(block.id) ?? `tool_${numberFrom(event.index)}`, {
404
- name: stringFrom(block.name),
405
- argumentsDelta: toolInputArgumentsDelta(block.input)
711
+ toolCallDelta(state.id, {
712
+ name: state.name,
713
+ argumentsDelta: state.initialInput.type === "empty" ? void 0 : state.initialInput.text
406
714
  })
407
715
  ];
408
716
  }
@@ -444,11 +752,7 @@ function fromAnthropicStreamEvent(event) {
444
752
  }
445
753
  ];
446
754
  }
447
- if (delta.type === "input_json_delta" && typeof delta.partial_json === "string") {
448
- return [
449
- toolCallDelta(`tool_${numberFrom(event.index)}`, { argumentsDelta: delta.partial_json })
450
- ];
451
- }
755
+ if (delta.type === "input_json_delta") return [];
452
756
  }
453
757
  if (event.type === "message_stop" && isPlainObject(event.message)) {
454
758
  return [{ type: "final", response: fromAnthropicMessage(event.message) }];
@@ -654,33 +958,6 @@ function toolChoiceToAnthropic(toolChoice) {
654
958
  name: toolChoice.name
655
959
  };
656
960
  }
657
- function toJsonValue(value) {
658
- if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean" || Array.isArray(value) || isPlainObject(value)) {
659
- return value;
660
- }
661
- return String(value);
662
- }
663
- function toolInputArgumentsDelta(input) {
664
- if (input === void 0) {
665
- return void 0;
666
- }
667
- if (typeof input === "string") {
668
- const trimmed = input.trim();
669
- if (trimmed.length === 0 || trimmed === "{}") {
670
- return void 0;
671
- }
672
- try {
673
- JSON.parse(trimmed);
674
- return trimmed;
675
- } catch {
676
- return JSON.stringify(input);
677
- }
678
- }
679
- if (isPlainObject(input) && Object.keys(input).length === 0) {
680
- return void 0;
681
- }
682
- return JSON.stringify(toJsonValue(input));
683
- }
684
961
  function toolCallDelta(id, values) {
685
962
  const event = { type: "tool_call_delta", id };
686
963
  if (values.name !== void 0) event.name = values.name;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/anthropic/index.ts","../src/anthropic/client.ts","../src/anthropic/completion.ts","../src/request-messages.ts","../src/utils.ts","../src/anthropic/models.ts","../src/anthropic/vertex-client.ts"],"sourcesContent":["export {\n AnthropicClient,\n type AnthropicClientOptions,\n type AnthropicCompletionModelHandle,\n type AnthropicCompletionModelOptions,\n} from \"./client\";\nexport type {\n AnthropicCompletionModelId,\n KnownAnthropicCompletionModelId,\n} from \"./models\";\nexport {\n AnthropicVertexClient,\n type AnthropicVertexClientOptions,\n type AnthropicVertexCompletionModelHandle,\n type AnthropicVertexCompletionModelOptions,\n} from \"./vertex-client\";\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelId,\n} from \"./models\";\n\ntype AnthropicManagedClientOptions = {\n apiKey: string;\n baseUrl?: string | undefined;\n client?: never;\n};\n\ntype AnthropicInjectedClientOptions = {\n client: Anthropic;\n apiKey?: never;\n baseUrl?: never;\n};\n\nexport type AnthropicClientOptions = AnthropicManagedClientOptions | AnthropicInjectedClientOptions;\n\nexport type AnthropicCompletionModelOptions = {\n modelId: AnthropicCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type AnthropicCompletionModelHandle = StreamingCompletionModel<unknown>;\n\nexport class AnthropicClient implements ModelListingClient {\n private readonly sdk: Anthropic;\n\n constructor(options: AnthropicClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"baseUrl\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new Anthropic({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n maxRetries: 0,\n });\n }\n\n completionModel(options: AnthropicCompletionModelOptions): AnthropicCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new AnthropicCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const response = await this.sdk.models.list(undefined, {\n signal: options.abortSignal,\n maxRetries: 0,\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Anthropic\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`AnthropicClient cannot combine client with ${conflict}.`);\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.trim().length === 0) {\n throw new Error(\n \"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient.\",\n );\n }\n\n return apiKey;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n const createdAt =\n typeof model.created_at === \"string\"\n ? secondsFromDateString(model.created_at)\n : typeof model.created_at === \"number\"\n ? model.created_at\n : undefined;\n\n const listedModel: ModelList[\"data\"][number] = {\n id: model.id,\n };\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.name === \"string\") {\n listedModel.name = model.name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (createdAt !== undefined) {\n listedModel.createdAt = createdAt;\n }\n if (typeof model.owned_by === \"string\") {\n listedModel.ownedBy = model.owned_by;\n }\n if (typeof model.max_input_tokens === \"number\") {\n listedModel.contextLength = model.max_input_tokens;\n }\n if (typeof model.context_length === \"number\") {\n listedModel.contextLength = model.context_length;\n }\n return listedModel;\n}\n\nfunction secondsFromDateString(value: string): number | undefined {\n const time = Date.parse(value);\n return Number.isNaN(time) ? undefined : Math.floor(time / 1000);\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Anthropic } from \"@anthropic-ai/sdk\";\nimport type { AnthropicVertex } from \"@anthropic-ai/vertex-sdk\";\nimport type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n type CompletionRequest,\n type CompletionResponse,\n type FilePart,\n type ImagePart,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type ReasoningDetail,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultContentPart,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport type { AnthropicCompletionModelId } from \"./models\";\n\ntype AnthropicCreateParams = Record<string, unknown>;\ntype AnthropicMessage = Record<string, unknown>;\ntype AnthropicContentBlock = Record<string, unknown>;\ntype AnthropicMessageCreate = (\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n) => Promise<unknown>;\n\nconst DEFAULT_MAX_TOKENS = 1024;\n\nexport class AnthropicCompletionModel implements StreamingCompletionModel<unknown> {\n readonly provider = \"anthropic\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: false,\n reasoning: true,\n };\n constructor(\n private readonly client: Anthropic | AnthropicVertex,\n readonly modelId: AnthropicCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toAnthropicMessagesParams(this.modelId, request);\n if (options.stream === true) {\n params.stream = true;\n }\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toAnthropicMessagesParams(this.modelId, request);\n const response = await this.createMessage(params, anthropicRequestOptions(options));\n return withContextUsage(fromAnthropicMessage(response), this.modelInfo());\n }\n\n private createMessage(\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n ): Promise<unknown> {\n const messages = this.client.messages;\n const create = messages.create as unknown as AnthropicMessageCreate;\n return create.call(messages, params, options);\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toAnthropicMessagesParams(this.modelId, request), stream: true };\n const stream = await this.createMessage(params, anthropicRequestOptions(options));\n const toolIdsByIndex = new Map<number, string>();\n const blocksWithInitialToolInput = new Set<number>();\n const streamUsage = Usage.empty();\n const streamUsageFields = emptyAnthropicStreamUsageFields();\n let hasStreamUsage = false;\n let streamMessageId: string | undefined;\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n if (isPlainObject(event) && event.type === \"content_block_start\") {\n const index = numberFrom(event.index);\n const block = isPlainObject(event.content_block) ? event.content_block : {};\n const id = stringFrom(block.id);\n if (id !== undefined) {\n toolIdsByIndex.set(index, id);\n }\n if (toolInputArgumentsDelta(block.input) !== undefined) {\n blocksWithInitialToolInput.add(index);\n }\n }\n if (isPlainObject(event)) {\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n streamMessageId = stringFrom(event.message.id) ?? streamMessageId;\n }\n hasStreamUsage =\n applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;\n }\n for (const mapped of fromAnthropicStreamEvent(event)) {\n const usageMapped =\n mapped.type === \"final\" && hasStreamUsage\n ? {\n ...mapped,\n response: {\n ...mapped.response,\n usage: mergeUsage(mapped.response.usage, streamUsage, streamUsageFields),\n },\n }\n : mapped;\n const streamMapped =\n usageMapped.type === \"final\"\n ? {\n ...usageMapped,\n response: withContextUsage(usageMapped.response, this.modelInfo()),\n }\n : usageMapped;\n if (\n streamMapped.type === \"tool_call_delta\" &&\n streamMapped.argumentsDelta !== undefined &&\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n blocksWithInitialToolInput.has(numberFrom(event.index))\n ) {\n continue;\n }\n if (streamMapped.type === \"tool_call_delta\" && streamMapped.id.startsWith(\"tool_\")) {\n const index = Number(streamMapped.id.slice(\"tool_\".length));\n yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };\n } else {\n yield streamMapped;\n }\n }\n if (isPlainObject(event) && event.type === \"message_stop\" && !isPlainObject(event.message)) {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(streamUsage),\n rawResponse: event,\n };\n if (streamMessageId !== undefined) {\n response.messageId = streamMessageId;\n }\n yield {\n type: \"final\",\n response: withContextUsage(response, this.modelInfo()),\n };\n }\n }\n }\n}\n\ntype AnthropicStreamUsageFields = {\n inputTokens: boolean;\n outputTokens: boolean;\n cachedInputTokens: boolean;\n cacheCreationInputTokens: boolean;\n};\n\nfunction emptyAnthropicStreamUsageFields(): AnthropicStreamUsageFields {\n return {\n inputTokens: false,\n outputTokens: false,\n cachedInputTokens: false,\n cacheCreationInputTokens: false,\n };\n}\n\nfunction applyAnthropicStreamUsage(\n event: Record<string, unknown>,\n usage: Usage,\n fields: AnthropicStreamUsageFields,\n): boolean {\n let changed = false;\n let uncachedInputTokens = Math.max(\n 0,\n usage.inputTokens - usage.cachedInputTokens - usage.cacheCreationInputTokens,\n );\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const source = isPlainObject(event.message.usage) ? event.message.usage : undefined;\n if (source !== undefined) {\n if (\"input_tokens\" in source) {\n uncachedInputTokens = numberFrom(source.input_tokens);\n fields.inputTokens = true;\n changed = true;\n }\n if (\"cache_read_input_tokens\" in source) {\n usage.cachedInputTokens = numberFrom(source.cache_read_input_tokens);\n fields.cachedInputTokens = true;\n changed = true;\n }\n if (\"cache_creation_input_tokens\" in source) {\n usage.cacheCreationInputTokens = numberFrom(source.cache_creation_input_tokens);\n fields.cacheCreationInputTokens = true;\n changed = true;\n }\n }\n }\n\n if (event.type === \"message_delta\") {\n const source = isPlainObject(event.usage) ? event.usage : undefined;\n if (source !== undefined && \"output_tokens\" in source) {\n usage.outputTokens = Math.max(usage.outputTokens, numberFrom(source.output_tokens));\n fields.outputTokens = true;\n changed = true;\n }\n }\n\n if (changed) {\n Object.assign(\n usage,\n anthropicUsage(\n uncachedInputTokens,\n usage.outputTokens,\n usage.cachedInputTokens,\n usage.cacheCreationInputTokens,\n ),\n );\n }\n\n return changed;\n}\n\nfunction mergeUsage(base: Usage, stream: Usage, fields: AnthropicStreamUsageFields): Usage {\n const baseUncachedInputTokens = Math.max(\n 0,\n base.inputTokens - base.cachedInputTokens - base.cacheCreationInputTokens,\n );\n const streamUncachedInputTokens = Math.max(\n 0,\n stream.inputTokens - stream.cachedInputTokens - stream.cacheCreationInputTokens,\n );\n const uncachedInputTokens = fields.inputTokens\n ? streamUncachedInputTokens\n : baseUncachedInputTokens;\n const outputTokens = fields.outputTokens ? stream.outputTokens : base.outputTokens;\n const cachedInputTokens = fields.cachedInputTokens\n ? stream.cachedInputTokens\n : base.cachedInputTokens;\n const cacheCreationInputTokens = fields.cacheCreationInputTokens\n ? stream.cacheCreationInputTokens\n : base.cacheCreationInputTokens;\n return anthropicUsage(\n uncachedInputTokens,\n outputTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n );\n}\n\nfunction copyUsage(usage: Usage): Usage {\n let copy: Usage = { ...usage };\n if (usage.details !== undefined) copy = { ...copy, details: { ...usage.details } };\n return copy;\n}\n\nexport function toAnthropicMessagesParams(\n modelId: AnthropicCompletionModelId,\n request: CompletionRequest,\n): AnthropicCreateParams {\n const messages = requestMessages(request);\n const system = systemFromMessages(request, messages);\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const params: AnthropicCreateParams = {\n ...providerOptions,\n model: modelId,\n max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n messages: messages.flatMap(messageToAnthropicMessages),\n };\n\n delete params.tools;\n\n if (system !== undefined) {\n params.system = system;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToAnthropic);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToAnthropic(request.toolChoice);\n }\n\n return params;\n}\n\nfunction anthropicRequestOptions(options: ModelCallOptions | undefined): {\n signal?: AbortSignal | undefined;\n maxRetries: 0;\n} {\n return { signal: options?.abortSignal, maxRetries: 0 };\n}\n\nfunction providerRequestSummary(\n params: AnthropicCreateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n return compactJsonObject({\n provider: \"anthropic\",\n api: \"messages\",\n stream: options.stream === true,\n model: stringFrom(params.model),\n parameterKeys: Object.keys(params).sort(),\n messageCount: Array.isArray(params.messages) ? params.messages.length : undefined,\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystem: typeof params.system === \"string\" && params.system.length > 0,\n temperature: request.temperature,\n maxTokens: request.maxTokens ?? numberFrom(params.max_tokens),\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (value === undefined) {\n return [];\n }\n return [[key, toJsonValue(value)]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction systemFromMessages(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function fromAnthropicMessage(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const content = Array.isArray(raw.content) ? raw.content : [];\n const choice: AssistantContentPart[] = [];\n\n for (const block of content) {\n if (!isPlainObject(block)) {\n continue;\n }\n\n if (block.type === \"text\" && typeof block.text === \"string\") {\n choice.push({ type: \"text\", text: block.text });\n }\n\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n const text: Extract<ReasoningDetail, { type: \"text\" }> =\n typeof block.signature === \"string\"\n ? { type: \"text\", text: block.thinking, signature: block.signature }\n : { type: \"text\", text: block.thinking };\n choice.push({ type: \"reasoning\", text: block.thinking, details: [text] });\n }\n\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n choice.push({\n type: \"reasoning\",\n text: \"\",\n details: [{ type: \"redacted\", data: block.data }],\n });\n }\n\n if (block.type === \"tool_use\") {\n const id = typeof block.id === \"string\" ? block.id : crypto.randomUUID();\n const name = typeof block.name === \"string\" ? block.name : \"\";\n choice.push({\n type: \"tool-call\",\n toolCallId: id,\n callId: id,\n toolName: name,\n input: toJsonValue(block.input),\n });\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const usage = anthropicUsage(\n numberFrom(usageSource.input_tokens),\n numberFrom(usageSource.output_tokens),\n numberFrom(usageSource.cache_read_input_tokens),\n numberFrom(usageSource.cache_creation_input_tokens),\n );\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nfunction anthropicUsage(\n uncachedInputTokens: number,\n outputTokens: number,\n cachedInputTokens: number,\n cacheCreationInputTokens: number,\n): Usage {\n const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n details: {\n input: uncachedInputTokens,\n cache_read_input_tokens: cachedInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n output: outputTokens,\n total: totalTokens,\n },\n };\n}\n\nexport function fromAnthropicStreamEvent(event: unknown): CompletionModelStreamEvent[] {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return [];\n }\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const id = stringFrom(event.message.id);\n return id === undefined ? [] : [{ type: \"message_id\", id }];\n }\n\n if (event.type === \"content_block_start\" && isPlainObject(event.content_block)) {\n const block = event.content_block;\n if (block.type === \"tool_use\") {\n return [\n toolCallDelta(stringFrom(block.id) ?? `tool_${numberFrom(event.index)}`, {\n name: stringFrom(block.name),\n argumentsDelta: toolInputArgumentsDelta(block.input),\n }),\n ];\n }\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: block.data,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"redacted\",\n },\n ];\n }\n return [];\n }\n\n if (event.type === \"content_block_delta\" && isPlainObject(event.delta)) {\n const delta = event.delta;\n if (delta.type === \"text_delta\" && typeof delta.text === \"string\") {\n return [{ type: \"text_delta\", delta: delta.text }];\n }\n\n if (delta.type === \"thinking_delta\" && typeof delta.thinking === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: delta.thinking,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n },\n ];\n }\n\n if (delta.type === \"signature_delta\" && typeof delta.signature === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: \"\",\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n signature: delta.signature,\n },\n ];\n }\n\n if (delta.type === \"input_json_delta\" && typeof delta.partial_json === \"string\") {\n return [\n toolCallDelta(`tool_${numberFrom(event.index)}`, { argumentsDelta: delta.partial_json }),\n ];\n }\n }\n\n if (event.type === \"message_stop\" && isPlainObject(event.message)) {\n return [{ type: \"final\", response: fromAnthropicMessage(event.message) }];\n }\n\n if (event.type === \"error\") {\n return [{ type: \"error\", error: event.error ?? event }];\n }\n\n return [];\n}\n\nfunction messageToAnthropicMessages(message: MessageType): AnthropicMessage[] {\n if (message.role === \"system\") {\n return [];\n }\n\n if (message.role === \"user\") {\n if (typeof message.content === \"string\") {\n return [{ role: \"user\", content: message.content }];\n }\n return [\n {\n role: \"user\",\n content: message.content.map(userContentToAnthropicBlock),\n },\n ];\n }\n\n if (message.role === \"tool\") {\n return [\n {\n role: \"user\",\n content: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToAnthropicBlock(content);\n }),\n },\n ];\n }\n\n return [\n {\n role: \"assistant\",\n content:\n typeof message.content === \"string\"\n ? message.content\n : message.content.flatMap((content): AnthropicContentBlock[] => {\n if (content.type === \"text\") {\n return [{ type: \"text\", text: content.text }];\n }\n\n if (content.type === \"tool-call\") {\n return [\n {\n type: \"tool_use\",\n id: content.callId ?? content.toolCallId,\n name: content.toolName,\n input: content.input,\n },\n ];\n }\n\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap(reasoningContentToAnthropicBlocks);\n }\n\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Anthropic Messages does not support image or file content in assistant history\",\n );\n }\n\n return [];\n }),\n },\n ];\n}\n\nfunction toolContentToAnthropicBlock(content: ToolResultPart): AnthropicContentBlock {\n const block: AnthropicContentBlock = {\n type: \"tool_result\",\n tool_use_id: content.callId ?? content.toolCallId,\n content: toolResultToAnthropicContent(content),\n };\n if (\n content.output.type === \"error-text\" ||\n content.output.type === \"error-json\" ||\n content.output.type === \"execution-denied\"\n ) {\n block.is_error = true;\n }\n return block;\n}\n\nfunction toolResultContentToAnthropicContent(\n content: readonly ToolResultContentPart[],\n): string | AnthropicContentBlock[] {\n if (content.every((item) => item.type === \"text\")) {\n return content.map((item) => item.text).join(\"\\n\");\n }\n\n return content.map((item) => {\n if (item.type === \"text\") {\n return { type: \"text\", text: item.text };\n }\n return fileToAnthropicBlock(item);\n });\n}\n\nfunction toolResultToAnthropicContent(content: ToolResultPart): string | AnthropicContentBlock[] {\n const output = content.output;\n if (output.type === \"text\" || output.type === \"error-text\") {\n return output.value;\n }\n if (output.type === \"json\" || output.type === \"error-json\") {\n return JSON.stringify(output.value);\n }\n if (output.type === \"execution-denied\") {\n return output.reason ?? \"Tool execution was denied.\";\n }\n return toolResultContentToAnthropicContent(output.value);\n}\n\nfunction reasoningContentToAnthropicBlocks(content: ReasoningDetail): AnthropicContentBlock[] {\n if (content.type === \"text\" || content.type === \"summary\") {\n const block: AnthropicContentBlock = {\n type: \"thinking\",\n thinking: content.text,\n };\n if (content.type === \"text\" && content.signature !== undefined) {\n block.signature = content.signature;\n }\n return [block];\n }\n\n if (content.type === \"redacted\") {\n return [{ type: \"redacted_thinking\", data: content.data }];\n }\n\n return [];\n}\n\nfunction userContentToAnthropicBlock(content: UserContentPart): AnthropicContentBlock {\n if (content.type === \"text\") {\n return { type: \"text\", text: content.text };\n }\n\n if (content.type === \"image\") {\n return imageToAnthropicBlock(content);\n }\n\n if (content.type === \"file\") {\n return fileToAnthropicBlock(content);\n }\n\n throw new Error(\"Tool results must be mapped before user content blocks\");\n}\n\nfunction imageToAnthropicBlock(image: ImagePart): AnthropicContentBlock {\n if (image.image.type === \"url\") {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: image.image.url,\n },\n };\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: image.mediaType ?? \"image/png\",\n data: image.image.data,\n },\n };\n}\n\nfunction fileToAnthropicBlock(file: FilePart): AnthropicContentBlock {\n if (file.data.type === \"text\") {\n return { type: \"text\", text: file.data.text };\n }\n\n if (file.mediaType.startsWith(\"image/\")) {\n return imageToAnthropicBlock({\n type: \"image\",\n image: file.data,\n mediaType: file.mediaType,\n });\n }\n\n if (file.mediaType !== \"application/pdf\") {\n throw new Error(\"Anthropic Messages only supports image and PDF file attachments\");\n }\n\n if (file.data.type === \"url\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: file.data.url,\n },\n };\n }\n\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: file.mediaType,\n data: file.data.data,\n },\n };\n}\n\nfunction toolDefinitionToAnthropic(tool: ToolDefinition): AnthropicContentBlock {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.parameters,\n };\n}\n\nfunction toolChoiceToAnthropic(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\") {\n return { type: \"auto\" };\n }\n\n if (toolChoice === \"required\") {\n return { type: \"any\" };\n }\n\n if (toolChoice === \"none\") {\n return { type: \"none\" };\n }\n\n return {\n type: \"tool\",\n name: toolChoice.name,\n };\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n Array.isArray(value) ||\n isPlainObject(value)\n ) {\n return value as JsonValue;\n }\n\n return String(value);\n}\n\nfunction toolInputArgumentsDelta(input: unknown): string | undefined {\n if (input === undefined) {\n return undefined;\n }\n\n if (typeof input === \"string\") {\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed === \"{}\") {\n return undefined;\n }\n try {\n JSON.parse(trimmed);\n return trimmed;\n } catch {\n return JSON.stringify(input);\n }\n }\n\n if (isPlainObject(input) && Object.keys(input).length === 0) {\n return undefined;\n }\n\n return JSON.stringify(toJsonValue(input));\n}\n\nfunction toolCallDelta(\n id: string,\n values: { name?: string | undefined; argumentsDelta?: string | undefined },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const anthropicMessageHelpers = {\n messageToAnthropicMessages,\n toolDefinitionToAnthropic,\n};\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push({ role: \"system\", content: request.instructions });\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import type { JsonObject, JsonValue } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownAnthropicCompletionModelId =\n | \"claude-3-5-sonnet-20240620\"\n | \"claude-3-5-sonnet-20241022\"\n | \"claude-3-7-sonnet-20250219\"\n | \"claude-3-haiku-20240307\"\n | \"claude-3-opus-20240229\"\n | \"claude-3-sonnet-20240229\"\n | \"claude-fable-5\"\n | \"claude-haiku-4-5\"\n | \"claude-haiku-4-5-20251001\"\n | \"claude-opus-4-0\"\n | \"claude-opus-4-1\"\n | \"claude-opus-4-1-20250805\"\n | \"claude-opus-4-20250514\"\n | \"claude-opus-4-5\"\n | \"claude-opus-4-5-20251101\"\n | \"claude-opus-4-6\"\n | \"claude-opus-4-7\"\n | \"claude-opus-4-8\"\n | \"claude-sonnet-4-0\"\n | \"claude-sonnet-4-20250514\"\n | \"claude-sonnet-4-5\"\n | \"claude-sonnet-4-5-20250929\"\n | \"claude-sonnet-4-6\"\n | \"claude-sonnet-5\";\n\nexport type AnthropicCompletionModelId = ModelId<KnownAnthropicCompletionModelId>;\n\nconst CONTEXT_200K_32K = { contextWindow: 200_000, maxOutputTokens: 32_000 };\nconst CONTEXT_200K_64K = { contextWindow: 200_000, maxOutputTokens: 64_000 };\nconst CONTEXT_1M_128K = { contextWindow: 1_000_000, maxOutputTokens: 128_000 };\n\nexport const ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"claude-3-5-sonnet-20240620\": { contextWindow: 200_000, maxOutputTokens: 8_192 },\n \"claude-3-5-sonnet-20241022\": { contextWindow: 200_000, maxOutputTokens: 8_192 },\n \"claude-3-7-sonnet-20250219\": CONTEXT_200K_64K,\n \"claude-3-haiku-20240307\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-3-opus-20240229\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-3-sonnet-20240229\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-fable-5\": CONTEXT_1M_128K,\n \"claude-haiku-4-5\": CONTEXT_200K_64K,\n \"claude-haiku-4-5-20251001\": CONTEXT_200K_64K,\n \"claude-opus-4-0\": CONTEXT_200K_32K,\n \"claude-opus-4-1\": CONTEXT_200K_32K,\n \"claude-opus-4-1-20250805\": CONTEXT_200K_32K,\n \"claude-opus-4-20250514\": CONTEXT_200K_32K,\n \"claude-opus-4-5\": CONTEXT_200K_64K,\n \"claude-opus-4-5-20251101\": CONTEXT_200K_64K,\n \"claude-opus-4-6\": CONTEXT_1M_128K,\n \"claude-opus-4-7\": CONTEXT_1M_128K,\n \"claude-opus-4-8\": CONTEXT_1M_128K,\n \"claude-sonnet-4-0\": CONTEXT_200K_64K,\n \"claude-sonnet-4-20250514\": CONTEXT_200K_64K,\n \"claude-sonnet-4-5\": CONTEXT_200K_64K,\n \"claude-sonnet-4-5-20250929\": CONTEXT_200K_64K,\n \"claude-sonnet-4-6\": { contextWindow: 1_000_000, maxOutputTokens: 64_000 },\n \"claude-sonnet-5\": CONTEXT_1M_128K,\n} satisfies Readonly<Record<KnownAnthropicCompletionModelId, ModelContextLimits>>;\n","import {\n AnthropicVertex,\n type ClientOptions as AnthropicVertexSdkOptions,\n} from \"@anthropic-ai/vertex-sdk\";\nimport {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelId,\n} from \"./models\";\n\ntype AnthropicVertexManagedClientOptions = Omit<AnthropicVertexSdkOptions, \"maxRetries\"> & {\n client?: never;\n};\n\ntype AnthropicVertexInjectedClientOptions = {\n client: AnthropicVertex;\n} & {\n [Key in Exclude<keyof AnthropicVertexManagedClientOptions, \"client\">]?: never;\n};\n\nexport type AnthropicVertexClientOptions =\n | AnthropicVertexManagedClientOptions\n | AnthropicVertexInjectedClientOptions;\n\nexport type AnthropicVertexCompletionModelOptions = {\n modelId: AnthropicCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type AnthropicVertexCompletionModelHandle = StreamingCompletionModel<unknown>;\n\nexport class AnthropicVertexClient {\n private readonly sdk: AnthropicVertex;\n\n constructor(options: AnthropicVertexClientOptions) {\n const { client, ...clientOptions } = options;\n if (client !== undefined) {\n const conflict = Object.keys(clientOptions)[0];\n if (conflict !== undefined) {\n throw new TypeError(`AnthropicVertexClient cannot combine client with ${conflict}.`);\n }\n this.sdk = client;\n return;\n }\n this.sdk = new AnthropicVertex({ ...clientOptions, maxRetries: 0 });\n }\n\n completionModel(\n options: AnthropicVertexCompletionModelOptions,\n ): AnthropicVertexCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new AnthropicCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n"],"mappings":"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","names":["resolveModelContextLimits","requireModelId","resolveModelContextLimits"]}
1
+ {"version":3,"sources":["../src/anthropic/index.ts","../src/anthropic/client.ts","../src/anthropic/completion.ts","../src/request-messages.ts","../src/utils.ts","../src/anthropic/models.ts","../src/anthropic/vertex-client.ts"],"sourcesContent":["export {\n AnthropicClient,\n type AnthropicClientOptions,\n type AnthropicCompletionModelHandle,\n type AnthropicCompletionModelOptions,\n} from \"./client\";\nexport type {\n AnthropicCompletionModelId,\n KnownAnthropicCompletionModelId,\n} from \"./models\";\nexport {\n AnthropicVertexClient,\n type AnthropicVertexClientOptions,\n type AnthropicVertexCompletionModelHandle,\n type AnthropicVertexCompletionModelOptions,\n} from \"./vertex-client\";\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelId,\n} from \"./models\";\n\ntype AnthropicManagedClientOptions = {\n apiKey: string;\n baseUrl?: string | undefined;\n client?: never;\n};\n\ntype AnthropicInjectedClientOptions = {\n client: Anthropic;\n apiKey?: never;\n baseUrl?: never;\n};\n\nexport type AnthropicClientOptions = AnthropicManagedClientOptions | AnthropicInjectedClientOptions;\n\nexport type AnthropicCompletionModelOptions = {\n modelId: AnthropicCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type AnthropicCompletionModelHandle = StreamingCompletionModel<unknown>;\n\nexport class AnthropicClient implements ModelListingClient {\n private readonly sdk: Anthropic;\n\n constructor(options: AnthropicClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"baseUrl\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new Anthropic({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n maxRetries: 0,\n });\n }\n\n completionModel(options: AnthropicCompletionModelOptions): AnthropicCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new AnthropicCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const response = await this.sdk.models.list(undefined, {\n signal: options.abortSignal,\n maxRetries: 0,\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Anthropic\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`AnthropicClient cannot combine client with ${conflict}.`);\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.trim().length === 0) {\n throw new Error(\n \"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient.\",\n );\n }\n\n return apiKey;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n const createdAt =\n typeof model.created_at === \"string\"\n ? secondsFromDateString(model.created_at)\n : typeof model.created_at === \"number\"\n ? model.created_at\n : undefined;\n\n const listedModel: ModelList[\"data\"][number] = {\n id: model.id,\n };\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.name === \"string\") {\n listedModel.name = model.name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (createdAt !== undefined) {\n listedModel.createdAt = createdAt;\n }\n if (typeof model.owned_by === \"string\") {\n listedModel.ownedBy = model.owned_by;\n }\n if (typeof model.max_input_tokens === \"number\") {\n listedModel.contextLength = model.max_input_tokens;\n }\n if (typeof model.context_length === \"number\") {\n listedModel.contextLength = model.context_length;\n }\n return listedModel;\n}\n\nfunction secondsFromDateString(value: string): number | undefined {\n const time = Date.parse(value);\n return Number.isNaN(time) ? undefined : Math.floor(time / 1000);\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Anthropic } from \"@anthropic-ai/sdk\";\nimport type { AnthropicVertex } from \"@anthropic-ai/vertex-sdk\";\nimport type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionFinishReason,\n type CompletionModelCapabilities,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n CompletionProviderOutputError,\n type CompletionProviderOutputErrorKind,\n type CompletionRequest,\n type CompletionResponse,\n type FilePart,\n type ImagePart,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type ReasoningDetail,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultContentPart,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport type { AnthropicCompletionModelId } from \"./models\";\n\ntype AnthropicCreateParams = Record<string, unknown>;\ntype AnthropicMessage = Record<string, unknown>;\ntype AnthropicContentBlock = Record<string, unknown>;\ntype AnthropicMessageCreate = (\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n) => Promise<unknown>;\n\ntype AnthropicStreamToolInput = { type: \"empty\" } | { type: \"complete\"; text: string };\n\ntype AnthropicStreamToolState = {\n index: number;\n id: string;\n name: string;\n initialInput: AnthropicStreamToolInput;\n partialJson: string;\n hasPartialJson: boolean;\n closed: boolean;\n finalized: boolean;\n};\n\nconst DEFAULT_MAX_TOKENS = 1024;\n\nexport class AnthropicCompletionModel implements StreamingCompletionModel<unknown> {\n readonly provider = \"anthropic\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: false,\n reasoning: true,\n };\n constructor(\n private readonly client: Anthropic | AnthropicVertex,\n readonly modelId: AnthropicCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toAnthropicMessagesParams(this.modelId, request);\n if (options.stream === true) {\n params.stream = true;\n }\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toAnthropicMessagesParams(this.modelId, request);\n const response = await this.createMessage(params, anthropicRequestOptions(options));\n return withContextUsage(fromAnthropicMessage(response), this.modelInfo());\n }\n\n private createMessage(\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n ): Promise<unknown> {\n const messages = this.client.messages;\n const create = messages.create as unknown as AnthropicMessageCreate;\n return create.call(messages, params, options);\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toAnthropicMessagesParams(this.modelId, request), stream: true };\n const stream = await this.createMessage(params, anthropicRequestOptions(options));\n const toolsByIndex = new Map<number, AnthropicStreamToolState>();\n const toolIndexesById = new Map<string, number>();\n const streamUsage = Usage.empty();\n const streamUsageFields = emptyAnthropicStreamUsageFields();\n let hasStreamUsage = false;\n let hasToolProgress = false;\n let hasTerminalEvent = false;\n let streamMessageId: string | undefined;\n let streamProviderFinishReason: unknown;\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n const hadProviderFinishReason = streamProviderFinishReason !== undefined;\n if (isPlainObject(event)) {\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n streamMessageId = stringFrom(event.message.id) ?? streamMessageId;\n if (event.message.stop_reason !== undefined && event.message.stop_reason !== null) {\n streamProviderFinishReason = acceptAnthropicStreamFinishReason(\n streamProviderFinishReason,\n event.message.stop_reason,\n streamUsage,\n );\n }\n }\n if (event.type === \"message_delta\" && isPlainObject(event.delta)) {\n if (event.delta.stop_reason !== undefined && event.delta.stop_reason !== null) {\n streamProviderFinishReason = acceptAnthropicStreamFinishReason(\n streamProviderFinishReason,\n event.delta.stop_reason,\n streamUsage,\n );\n }\n }\n hasStreamUsage =\n applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;\n }\n\n if (hadProviderFinishReason && isAnthropicSemanticProgressEvent(event)) {\n throw providerOutputError(\"invalid-tool-call\", streamUsage);\n }\n\n if (\n isPlainObject(event) &&\n event.type === \"content_block_start\" &&\n isPlainObject(event.content_block) &&\n event.content_block.type === \"tool_use\"\n ) {\n const state = startAnthropicStreamTool(event.index, event.content_block, streamUsage);\n if (toolsByIndex.has(state.index) || toolIndexesById.has(state.id)) {\n throw providerOutputError(\"invalid-tool-call\", streamUsage, state.id);\n }\n toolsByIndex.set(state.index, state);\n toolIndexesById.set(state.id, state.index);\n hasToolProgress = true;\n yield toolCallDelta(state.id, {\n name: state.name,\n argumentsDelta:\n state.initialInput.type === \"complete\" ? state.initialInput.text : undefined,\n });\n continue;\n }\n\n if (\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n isPlainObject(event.delta) &&\n event.delta.type === \"input_json_delta\"\n ) {\n const index = anthropicToolStreamIndex(event.index, streamUsage);\n const state = toolsByIndex.get(index);\n if (state === undefined) {\n throw providerOutputError(\"invalid-tool-call\", streamUsage);\n }\n if (state.closed || state.finalized) {\n throw providerOutputError(\"invalid-tool-call\", streamUsage, state.id);\n }\n if (typeof event.delta.partial_json !== \"string\") {\n throw providerOutputError(\"invalid-tool-arguments\", streamUsage, state.id);\n }\n if (state.initialInput.type === \"complete\") {\n throw providerOutputError(\"invalid-tool-arguments\", streamUsage, state.id);\n }\n state.hasPartialJson = true;\n state.partialJson += event.delta.partial_json;\n yield toolCallDelta(state.id, { argumentsDelta: event.delta.partial_json });\n continue;\n }\n\n if (isPlainObject(event) && event.type === \"content_block_stop\") {\n const index = optionalAnthropicToolStreamIndex(event.index);\n const state = index === undefined ? undefined : toolsByIndex.get(index);\n if (state !== undefined) {\n if (state.closed) {\n throw providerOutputError(\"invalid-tool-call\", streamUsage, state.id);\n }\n state.closed = true;\n continue;\n }\n }\n\n if (isPlainObject(event) && event.type === \"message_stop\") {\n hasTerminalEvent = true;\n const finalMessage = isPlainObject(event.message) ? event.message : undefined;\n if (finalMessage?.stop_reason !== undefined && finalMessage.stop_reason !== null) {\n streamProviderFinishReason = acceptAnthropicStreamFinishReason(\n streamProviderFinishReason,\n finalMessage.stop_reason,\n streamUsage,\n );\n }\n const hasFinalMessageToolUse = anthropicMessageHasToolUse(finalMessage);\n if (hasToolProgress || hasFinalMessageToolUse) {\n const baseUsage =\n finalMessage === undefined ? Usage.empty() : anthropicMessageUsage(finalMessage);\n const terminalUsage = hasStreamUsage\n ? mergeUsage(baseUsage, streamUsage, streamUsageFields)\n : baseUsage;\n const terminalResponse = emptyAnthropicStreamResponse(\n event,\n streamMessageId,\n terminalUsage,\n );\n applyAnthropicFinishReason(terminalResponse, streamProviderFinishReason);\n assertAnthropicResponseIntegrity(terminalResponse, true);\n }\n for (const state of toolsByIndex.values()) {\n const finalDelta = finalizeAnthropicStreamTool(state, streamUsage);\n if (finalDelta !== undefined) yield finalDelta;\n }\n\n const baseResponse =\n finalMessage !== undefined\n ? fromAnthropicMessageUnchecked(finalMessage)\n : emptyAnthropicStreamResponse(event, streamMessageId, streamUsage);\n const response = hasStreamUsage\n ? {\n ...baseResponse,\n usage: mergeUsage(baseResponse.usage, streamUsage, streamUsageFields),\n }\n : baseResponse;\n applyAnthropicFinishReason(response, streamProviderFinishReason);\n assertAnthropicResponseIntegrity(response, hasToolProgress || hasFinalMessageToolUse);\n yield {\n type: \"final\",\n response: withContextUsage(response, this.modelInfo()),\n };\n return;\n }\n\n if (isPlainObject(event) && event.type === \"error\") {\n hasTerminalEvent = true;\n }\n\n for (const mapped of fromAnthropicStreamEvent(event)) {\n yield mapped;\n }\n\n if (hasTerminalEvent) return;\n }\n\n if (hasToolProgress && !hasTerminalEvent) {\n throw providerOutputError(\"incomplete-stream\", streamUsage);\n }\n }\n}\n\nfunction isAnthropicSemanticProgressEvent(event: unknown): boolean {\n return (\n isPlainObject(event) &&\n (event.type === \"content_block_start\" || event.type === \"content_block_delta\")\n );\n}\n\ntype AnthropicStreamUsageFields = {\n inputTokens: boolean;\n outputTokens: boolean;\n cachedInputTokens: boolean;\n cacheCreationInputTokens: boolean;\n};\n\nfunction emptyAnthropicStreamUsageFields(): AnthropicStreamUsageFields {\n return {\n inputTokens: false,\n outputTokens: false,\n cachedInputTokens: false,\n cacheCreationInputTokens: false,\n };\n}\n\nfunction applyAnthropicStreamUsage(\n event: Record<string, unknown>,\n usage: Usage,\n fields: AnthropicStreamUsageFields,\n): boolean {\n let changed = false;\n let uncachedInputTokens = Math.max(\n 0,\n usage.inputTokens - usage.cachedInputTokens - usage.cacheCreationInputTokens,\n );\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const source = isPlainObject(event.message.usage) ? event.message.usage : undefined;\n if (source !== undefined) {\n if (\"input_tokens\" in source) {\n uncachedInputTokens = numberFrom(source.input_tokens);\n fields.inputTokens = true;\n changed = true;\n }\n if (\"cache_read_input_tokens\" in source) {\n usage.cachedInputTokens = numberFrom(source.cache_read_input_tokens);\n fields.cachedInputTokens = true;\n changed = true;\n }\n if (\"cache_creation_input_tokens\" in source) {\n usage.cacheCreationInputTokens = numberFrom(source.cache_creation_input_tokens);\n fields.cacheCreationInputTokens = true;\n changed = true;\n }\n }\n }\n\n if (event.type === \"message_delta\") {\n const source = isPlainObject(event.usage) ? event.usage : undefined;\n if (source !== undefined && \"output_tokens\" in source) {\n usage.outputTokens = Math.max(usage.outputTokens, numberFrom(source.output_tokens));\n fields.outputTokens = true;\n changed = true;\n }\n }\n\n if (changed) {\n Object.assign(\n usage,\n anthropicUsage(\n uncachedInputTokens,\n usage.outputTokens,\n usage.cachedInputTokens,\n usage.cacheCreationInputTokens,\n ),\n );\n }\n\n return changed;\n}\n\nfunction mergeUsage(base: Usage, stream: Usage, fields: AnthropicStreamUsageFields): Usage {\n const baseUncachedInputTokens = Math.max(\n 0,\n base.inputTokens - base.cachedInputTokens - base.cacheCreationInputTokens,\n );\n const streamUncachedInputTokens = Math.max(\n 0,\n stream.inputTokens - stream.cachedInputTokens - stream.cacheCreationInputTokens,\n );\n const uncachedInputTokens = fields.inputTokens\n ? streamUncachedInputTokens\n : baseUncachedInputTokens;\n const outputTokens = fields.outputTokens ? stream.outputTokens : base.outputTokens;\n const cachedInputTokens = fields.cachedInputTokens\n ? stream.cachedInputTokens\n : base.cachedInputTokens;\n const cacheCreationInputTokens = fields.cacheCreationInputTokens\n ? stream.cacheCreationInputTokens\n : base.cacheCreationInputTokens;\n return anthropicUsage(\n uncachedInputTokens,\n outputTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n );\n}\n\nfunction copyUsage(usage: Usage): Usage {\n let copy: Usage = { ...usage };\n if (usage.details !== undefined) copy = { ...copy, details: { ...usage.details } };\n return copy;\n}\n\nfunction emptyAnthropicStreamResponse(\n rawResponse: unknown,\n messageId: string | undefined,\n usage: Usage,\n): CompletionResponse {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(usage),\n rawResponse,\n };\n if (messageId !== undefined) response.messageId = messageId;\n return response;\n}\n\nfunction startAnthropicStreamTool(\n indexValue: unknown,\n block: Record<string, unknown>,\n usage: Usage,\n): AnthropicStreamToolState {\n const index = anthropicToolStreamIndex(indexValue, usage);\n const id = requiredToolCallId(block.id, usage);\n const name = requiredToolName(block.name, id, usage);\n return {\n index,\n id,\n name,\n initialInput: anthropicStreamToolInput(block.input, id, usage),\n partialJson: \"\",\n hasPartialJson: false,\n closed: false,\n finalized: false,\n };\n}\n\nfunction anthropicStreamToolInput(\n input: unknown,\n toolCallId: string,\n usage: Usage,\n): AnthropicStreamToolInput {\n if (!isPlainObject(input) || !isJsonValue(input)) {\n throw providerOutputError(\"invalid-tool-arguments\", usage, toolCallId);\n }\n\n if (isEmptyJsonObject(input)) {\n return { type: \"empty\" };\n }\n\n const text = JSON.stringify(input);\n if (text === undefined) {\n throw providerOutputError(\"invalid-tool-arguments\", usage, toolCallId);\n }\n return { type: \"complete\", text };\n}\n\nfunction finalizeAnthropicStreamTool(\n state: AnthropicStreamToolState,\n usage: Usage,\n): CompletionModelStreamEvent | undefined {\n if (state.finalized) return undefined;\n\n if (state.initialInput.type === \"complete\") {\n state.finalized = true;\n return undefined;\n }\n\n if (state.hasPartialJson) {\n assertSerializedToolInput(state.partialJson, state.id, usage);\n state.finalized = true;\n return undefined;\n }\n state.finalized = true;\n return toolCallDelta(state.id, { argumentsDelta: \"{}\" });\n}\n\nfunction assertSerializedToolInput(text: string, toolCallId: string, usage: Usage): void {\n const parsed = parseSerializedToolInput(text);\n if (parsed.type === \"malformed\") {\n throw providerOutputError(\"malformed-tool-arguments\", usage, toolCallId);\n }\n if (parsed.type === \"invalid\") {\n throw providerOutputError(\"invalid-tool-arguments\", usage, toolCallId);\n }\n}\n\nfunction parseSerializedToolInput(\n text: string,\n): { type: \"valid\"; value: JsonValue } | { type: \"malformed\" } | { type: \"invalid\" } {\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return { type: \"malformed\" };\n }\n return isJsonValue(value) ? { type: \"valid\", value } : { type: \"invalid\" };\n}\n\nfunction isEmptyJsonObject(value: JsonValue): boolean {\n return (\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 0\n );\n}\n\nfunction requiredToolCallId(value: unknown, usage: Usage): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw providerOutputError(\"invalid-tool-call\", usage);\n }\n return value;\n}\n\nfunction requiredToolName(value: unknown, toolCallId: string, usage: Usage): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw providerOutputError(\"invalid-tool-call\", usage, toolCallId);\n }\n return value;\n}\n\nfunction anthropicToolStreamIndex(value: unknown, usage: Usage): number {\n const index = optionalAnthropicToolStreamIndex(value);\n if (index === undefined) {\n throw providerOutputError(\"invalid-tool-call\", usage);\n }\n return index;\n}\n\nfunction optionalAnthropicToolStreamIndex(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0 ? value : undefined;\n}\n\nexport function toAnthropicMessagesParams(\n modelId: AnthropicCompletionModelId,\n request: CompletionRequest,\n): AnthropicCreateParams {\n const messages = requestMessages(request);\n const system = systemFromMessages(request, messages);\n if (\n request.providerOptions !== undefined &&\n (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))\n ) {\n throw new TypeError(\"Anthropic providerOptions must be a JSON object.\");\n }\n const providerOptions = request.providerOptions ?? {};\n const params: AnthropicCreateParams = {\n ...providerOptions,\n model: modelId,\n max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n messages: messages.flatMap(messageToAnthropicMessages),\n };\n\n delete params.tools;\n\n if (system !== undefined) {\n params.system = system;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToAnthropic);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToAnthropic(request.toolChoice);\n }\n\n return params;\n}\n\nfunction anthropicRequestOptions(options: ModelCallOptions | undefined): {\n signal?: AbortSignal | undefined;\n maxRetries: 0;\n} {\n return { signal: options?.abortSignal, maxRetries: 0 };\n}\n\nfunction providerRequestSummary(\n params: AnthropicCreateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n return compactJsonObject({\n provider: \"anthropic\",\n api: \"messages\",\n stream: options.stream === true,\n model: stringFrom(params.model),\n parameterKeys: Object.keys(params).sort(),\n messageCount: Array.isArray(params.messages) ? params.messages.length : undefined,\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystem: typeof params.system === \"string\" && params.system.length > 0,\n temperature: request.temperature,\n maxTokens: request.maxTokens ?? numberFrom(params.max_tokens),\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (!isJsonValue(value)) {\n return [];\n }\n return [[key, value]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction systemFromMessages(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function fromAnthropicMessage(response: unknown): CompletionResponse {\n assertAnthropicRawToolFinish(response);\n const result = fromAnthropicMessageUnchecked(response);\n assertAnthropicResponseIntegrity(result, false);\n return result;\n}\n\nfunction fromAnthropicMessageUnchecked(response: unknown): CompletionResponse {\n const raw = isPlainObject(response) ? response : {};\n const content = Array.isArray(raw.content) ? raw.content : [];\n const choice: AssistantContentPart[] = [];\n const usage = anthropicMessageUsage(raw);\n\n for (const block of content) {\n if (!isPlainObject(block)) {\n continue;\n }\n\n if (block.type === \"text\" && typeof block.text === \"string\") {\n choice.push({ type: \"text\", text: block.text });\n }\n\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n const text: Extract<ReasoningDetail, { type: \"text\" }> =\n typeof block.signature === \"string\"\n ? { type: \"text\", text: block.thinking, signature: block.signature }\n : { type: \"text\", text: block.thinking };\n choice.push({ type: \"reasoning\", text: block.thinking, details: [text] });\n }\n\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n choice.push({\n type: \"reasoning\",\n text: \"\",\n details: [{ type: \"redacted\", data: block.data }],\n });\n }\n\n if (block.type === \"tool_use\") {\n const id = requiredToolCallId(block.id, usage);\n const name = requiredToolName(block.name, id, usage);\n if (!isPlainObject(block.input) || !isJsonValue(block.input)) {\n throw providerOutputError(\"invalid-tool-arguments\", usage, id);\n }\n choice.push({\n type: \"tool-call\",\n toolCallId: id,\n callId: id,\n toolName: name,\n input: block.input,\n });\n }\n }\n\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n applyAnthropicFinishReason(result, raw.stop_reason);\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nfunction applyAnthropicFinishReason(response: CompletionResponse, value: unknown): void {\n if (value === undefined || value === null) return;\n response.finishReason = typeof value === \"string\" ? anthropicFinishReason(value) : \"other\";\n if (typeof value === \"string\") response.providerFinishReason = value;\n}\n\nfunction anthropicFinishReason(value: string): CompletionFinishReason {\n if (value === \"end_turn\" || value === \"stop_sequence\") return \"stop\";\n if (value === \"max_tokens\" || value === \"model_context_window_exceeded\") return \"length\";\n if (value === \"tool_use\") return \"tool-calls\";\n if (value === \"refusal\") return \"content-filter\";\n return \"other\";\n}\n\nfunction assertAnthropicResponseIntegrity(\n response: CompletionResponse,\n hasAccumulatedToolProgress: boolean,\n): void {\n const toolCalls = response.choice.filter((content) => content.type === \"tool-call\");\n if (hasAccumulatedToolProgress || toolCalls.length > 0) {\n assertSafeToolFinishReason(response);\n } else if (response.finishReason === \"tool-calls\") {\n throw providerOutputError(\n \"invalid-tool-call\",\n response.usage,\n undefined,\n response.finishReason,\n );\n }\n\n const ids = new Set<string>();\n for (const toolCall of toolCalls) {\n if (ids.has(toolCall.toolCallId)) {\n throw providerOutputError(\"invalid-tool-call\", response.usage, toolCall.toolCallId);\n }\n ids.add(toolCall.toolCallId);\n }\n}\n\nfunction assertAnthropicRawToolFinish(response: unknown): void {\n if (!isPlainObject(response) || !anthropicMessageHasToolUse(response)) return;\n const usage = anthropicMessageUsage(response);\n const terminal: CompletionResponse = { choice: [], usage, rawResponse: response };\n applyAnthropicFinishReason(terminal, response.stop_reason);\n assertAnthropicResponseIntegrity(terminal, true);\n}\n\nfunction anthropicMessageHasToolUse(message: unknown): boolean {\n return (\n isPlainObject(message) &&\n Array.isArray(message.content) &&\n message.content.some((block) => isPlainObject(block) && block.type === \"tool_use\")\n );\n}\n\nfunction anthropicMessageUsage(message: Record<string, unknown>): Usage {\n const usage = isPlainObject(message.usage) ? message.usage : {};\n return anthropicUsage(\n numberFrom(usage.input_tokens),\n numberFrom(usage.output_tokens),\n numberFrom(usage.cache_read_input_tokens),\n numberFrom(usage.cache_creation_input_tokens),\n );\n}\n\nfunction assertSafeToolFinishReason(response: CompletionResponse): void {\n if (response.finishReason === undefined) {\n throw providerOutputError(\"incomplete-tool-call\", response.usage);\n }\n if (response.finishReason === \"length\") {\n throw providerOutputError(\n \"truncated-tool-call\",\n response.usage,\n undefined,\n response.finishReason,\n );\n }\n if (response.finishReason === \"content-filter\") {\n throw providerOutputError(\n \"filtered-tool-call\",\n response.usage,\n undefined,\n response.finishReason,\n );\n }\n if (response.finishReason === \"other\") {\n throw providerOutputError(\n \"invalid-tool-call\",\n response.usage,\n undefined,\n response.finishReason,\n );\n }\n if (response.finishReason !== \"tool-calls\") {\n throw providerOutputError(\n \"invalid-tool-call\",\n response.usage,\n undefined,\n response.finishReason,\n );\n }\n}\n\nfunction acceptAnthropicStreamFinishReason(current: unknown, next: unknown, usage: Usage): unknown {\n if (current === undefined) return next;\n if (current !== next) {\n throw providerOutputError(\"invalid-tool-call\", usage);\n }\n return current;\n}\n\nfunction providerOutputError(\n kind: CompletionProviderOutputErrorKind,\n usage: Usage,\n toolCallId?: string,\n finishReason?: CompletionFinishReason,\n): CompletionProviderOutputError {\n const copiedUsage = copyUsage(usage);\n if (kind === \"truncated-tool-call\") {\n if (finishReason !== \"length\") {\n throw new TypeError('Anthropic truncated-tool-call errors require finish reason \"length\".');\n }\n return new CompletionProviderOutputError({\n kind,\n usage: copiedUsage,\n toolCallId,\n finishReason,\n });\n }\n if (kind === \"filtered-tool-call\") {\n if (finishReason !== \"content-filter\") {\n throw new TypeError(\n 'Anthropic filtered-tool-call errors require finish reason \"content-filter\".',\n );\n }\n return new CompletionProviderOutputError({\n kind,\n usage: copiedUsage,\n toolCallId,\n finishReason,\n });\n }\n if (finishReason === \"length\" || finishReason === \"content-filter\") {\n throw new TypeError(\"Anthropic provider output error kind contradicts its finish reason.\");\n }\n return new CompletionProviderOutputError({\n kind,\n usage: copiedUsage,\n toolCallId,\n finishReason,\n });\n}\n\nfunction anthropicUsage(\n uncachedInputTokens: number,\n outputTokens: number,\n cachedInputTokens: number,\n cacheCreationInputTokens: number,\n): Usage {\n const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n details: {\n input: uncachedInputTokens,\n cache_read_input_tokens: cachedInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n output: outputTokens,\n total: totalTokens,\n },\n };\n}\n\nexport function fromAnthropicStreamEvent(event: unknown): CompletionModelStreamEvent[] {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return [];\n }\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const id = stringFrom(event.message.id);\n return id === undefined ? [] : [{ type: \"message_id\", id }];\n }\n\n if (event.type === \"content_block_start\" && isPlainObject(event.content_block)) {\n const block = event.content_block;\n if (block.type === \"tool_use\") {\n const state = startAnthropicStreamTool(event.index, block, Usage.empty());\n return [\n toolCallDelta(state.id, {\n name: state.name,\n argumentsDelta: state.initialInput.type === \"empty\" ? undefined : state.initialInput.text,\n }),\n ];\n }\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: block.data,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"redacted\",\n },\n ];\n }\n return [];\n }\n\n if (event.type === \"content_block_delta\" && isPlainObject(event.delta)) {\n const delta = event.delta;\n if (delta.type === \"text_delta\" && typeof delta.text === \"string\") {\n return [{ type: \"text_delta\", delta: delta.text }];\n }\n\n if (delta.type === \"thinking_delta\" && typeof delta.thinking === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: delta.thinking,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n },\n ];\n }\n\n if (delta.type === \"signature_delta\" && typeof delta.signature === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: \"\",\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n signature: delta.signature,\n },\n ];\n }\n\n // Tool argument deltas do not repeat the tool id and require stream-level state.\n if (delta.type === \"input_json_delta\") return [];\n }\n\n if (event.type === \"message_stop\" && isPlainObject(event.message)) {\n return [{ type: \"final\", response: fromAnthropicMessage(event.message) }];\n }\n\n if (event.type === \"error\") {\n return [{ type: \"error\", error: event.error ?? event }];\n }\n\n return [];\n}\n\nfunction messageToAnthropicMessages(message: MessageType): AnthropicMessage[] {\n if (message.role === \"system\") {\n return [];\n }\n\n if (message.role === \"user\") {\n if (typeof message.content === \"string\") {\n return [{ role: \"user\", content: message.content }];\n }\n return [\n {\n role: \"user\",\n content: message.content.map(userContentToAnthropicBlock),\n },\n ];\n }\n\n if (message.role === \"tool\") {\n return [\n {\n role: \"user\",\n content: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToAnthropicBlock(content);\n }),\n },\n ];\n }\n\n return [\n {\n role: \"assistant\",\n content:\n typeof message.content === \"string\"\n ? message.content\n : message.content.flatMap((content): AnthropicContentBlock[] => {\n if (content.type === \"text\") {\n return [{ type: \"text\", text: content.text }];\n }\n\n if (content.type === \"tool-call\") {\n return [\n {\n type: \"tool_use\",\n id: content.callId ?? content.toolCallId,\n name: content.toolName,\n input: content.input,\n },\n ];\n }\n\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap(reasoningContentToAnthropicBlocks);\n }\n\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Anthropic Messages does not support image or file content in assistant history\",\n );\n }\n\n return [];\n }),\n },\n ];\n}\n\nfunction toolContentToAnthropicBlock(content: ToolResultPart): AnthropicContentBlock {\n const block: AnthropicContentBlock = {\n type: \"tool_result\",\n tool_use_id: content.callId ?? content.toolCallId,\n content: toolResultToAnthropicContent(content),\n };\n if (\n content.output.type === \"error-text\" ||\n content.output.type === \"error-json\" ||\n content.output.type === \"execution-denied\"\n ) {\n block.is_error = true;\n }\n return block;\n}\n\nfunction toolResultContentToAnthropicContent(\n content: readonly ToolResultContentPart[],\n): string | AnthropicContentBlock[] {\n if (content.every((item) => item.type === \"text\")) {\n return content.map((item) => item.text).join(\"\\n\");\n }\n\n return content.map((item) => {\n if (item.type === \"text\") {\n return { type: \"text\", text: item.text };\n }\n return fileToAnthropicBlock(item);\n });\n}\n\nfunction toolResultToAnthropicContent(content: ToolResultPart): string | AnthropicContentBlock[] {\n const output = content.output;\n if (output.type === \"text\" || output.type === \"error-text\") {\n return output.value;\n }\n if (output.type === \"json\" || output.type === \"error-json\") {\n return JSON.stringify(output.value);\n }\n if (output.type === \"execution-denied\") {\n return output.reason ?? \"Tool execution was denied.\";\n }\n return toolResultContentToAnthropicContent(output.value);\n}\n\nfunction reasoningContentToAnthropicBlocks(content: ReasoningDetail): AnthropicContentBlock[] {\n if (content.type === \"text\" || content.type === \"summary\") {\n const block: AnthropicContentBlock = {\n type: \"thinking\",\n thinking: content.text,\n };\n if (content.type === \"text\" && content.signature !== undefined) {\n block.signature = content.signature;\n }\n return [block];\n }\n\n if (content.type === \"redacted\") {\n return [{ type: \"redacted_thinking\", data: content.data }];\n }\n\n return [];\n}\n\nfunction userContentToAnthropicBlock(content: UserContentPart): AnthropicContentBlock {\n if (content.type === \"text\") {\n return { type: \"text\", text: content.text };\n }\n\n if (content.type === \"image\") {\n return imageToAnthropicBlock(content);\n }\n\n if (content.type === \"file\") {\n return fileToAnthropicBlock(content);\n }\n\n throw new Error(\"Tool results must be mapped before user content blocks\");\n}\n\nfunction imageToAnthropicBlock(image: ImagePart): AnthropicContentBlock {\n if (image.image.type === \"url\") {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: image.image.url,\n },\n };\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: image.mediaType ?? \"image/png\",\n data: image.image.data,\n },\n };\n}\n\nfunction fileToAnthropicBlock(file: FilePart): AnthropicContentBlock {\n if (file.data.type === \"text\") {\n return { type: \"text\", text: file.data.text };\n }\n\n if (file.mediaType.startsWith(\"image/\")) {\n return imageToAnthropicBlock({\n type: \"image\",\n image: file.data,\n mediaType: file.mediaType,\n });\n }\n\n if (file.mediaType !== \"application/pdf\") {\n throw new Error(\"Anthropic Messages only supports image and PDF file attachments\");\n }\n\n if (file.data.type === \"url\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: file.data.url,\n },\n };\n }\n\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: file.mediaType,\n data: file.data.data,\n },\n };\n}\n\nfunction toolDefinitionToAnthropic(tool: ToolDefinition): AnthropicContentBlock {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.parameters,\n };\n}\n\nfunction toolChoiceToAnthropic(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\") {\n return { type: \"auto\" };\n }\n\n if (toolChoice === \"required\") {\n return { type: \"any\" };\n }\n\n if (toolChoice === \"none\") {\n return { type: \"none\" };\n }\n\n return {\n type: \"tool\",\n name: toolChoice.name,\n };\n}\n\nfunction toolCallDelta(\n id: string,\n values: { name?: string | undefined; argumentsDelta?: string | undefined },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const anthropicMessageHelpers = {\n messageToAnthropicMessages,\n toolDefinitionToAnthropic,\n};\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push({ role: \"system\", content: request.instructions });\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import type { JsonObject } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownAnthropicCompletionModelId =\n | \"claude-3-5-sonnet-20240620\"\n | \"claude-3-5-sonnet-20241022\"\n | \"claude-3-7-sonnet-20250219\"\n | \"claude-3-haiku-20240307\"\n | \"claude-3-opus-20240229\"\n | \"claude-3-sonnet-20240229\"\n | \"claude-fable-5\"\n | \"claude-haiku-4-5\"\n | \"claude-haiku-4-5-20251001\"\n | \"claude-opus-4-0\"\n | \"claude-opus-4-1\"\n | \"claude-opus-4-1-20250805\"\n | \"claude-opus-4-20250514\"\n | \"claude-opus-4-5\"\n | \"claude-opus-4-5-20251101\"\n | \"claude-opus-4-6\"\n | \"claude-opus-4-7\"\n | \"claude-opus-4-8\"\n | \"claude-sonnet-4-0\"\n | \"claude-sonnet-4-20250514\"\n | \"claude-sonnet-4-5\"\n | \"claude-sonnet-4-5-20250929\"\n | \"claude-sonnet-4-6\"\n | \"claude-sonnet-5\";\n\nexport type AnthropicCompletionModelId = ModelId<KnownAnthropicCompletionModelId>;\n\nconst CONTEXT_200K_32K = { contextWindow: 200_000, maxOutputTokens: 32_000 };\nconst CONTEXT_200K_64K = { contextWindow: 200_000, maxOutputTokens: 64_000 };\nconst CONTEXT_1M_128K = { contextWindow: 1_000_000, maxOutputTokens: 128_000 };\n\nexport const ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"claude-3-5-sonnet-20240620\": { contextWindow: 200_000, maxOutputTokens: 8_192 },\n \"claude-3-5-sonnet-20241022\": { contextWindow: 200_000, maxOutputTokens: 8_192 },\n \"claude-3-7-sonnet-20250219\": CONTEXT_200K_64K,\n \"claude-3-haiku-20240307\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-3-opus-20240229\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-3-sonnet-20240229\": { contextWindow: 200_000, maxOutputTokens: 4_096 },\n \"claude-fable-5\": CONTEXT_1M_128K,\n \"claude-haiku-4-5\": CONTEXT_200K_64K,\n \"claude-haiku-4-5-20251001\": CONTEXT_200K_64K,\n \"claude-opus-4-0\": CONTEXT_200K_32K,\n \"claude-opus-4-1\": CONTEXT_200K_32K,\n \"claude-opus-4-1-20250805\": CONTEXT_200K_32K,\n \"claude-opus-4-20250514\": CONTEXT_200K_32K,\n \"claude-opus-4-5\": CONTEXT_200K_64K,\n \"claude-opus-4-5-20251101\": CONTEXT_200K_64K,\n \"claude-opus-4-6\": CONTEXT_1M_128K,\n \"claude-opus-4-7\": CONTEXT_1M_128K,\n \"claude-opus-4-8\": CONTEXT_1M_128K,\n \"claude-sonnet-4-0\": CONTEXT_200K_64K,\n \"claude-sonnet-4-20250514\": CONTEXT_200K_64K,\n \"claude-sonnet-4-5\": CONTEXT_200K_64K,\n \"claude-sonnet-4-5-20250929\": CONTEXT_200K_64K,\n \"claude-sonnet-4-6\": { contextWindow: 1_000_000, maxOutputTokens: 64_000 },\n \"claude-sonnet-5\": CONTEXT_1M_128K,\n} satisfies Readonly<Record<KnownAnthropicCompletionModelId, ModelContextLimits>>;\n","import {\n AnthropicVertex,\n type ClientOptions as AnthropicVertexSdkOptions,\n} from \"@anthropic-ai/vertex-sdk\";\nimport {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelId,\n} from \"./models\";\n\ntype AnthropicVertexManagedClientOptions = Omit<AnthropicVertexSdkOptions, \"maxRetries\"> & {\n client?: never;\n};\n\ntype AnthropicVertexInjectedClientOptions = {\n client: AnthropicVertex;\n} & {\n [Key in Exclude<keyof AnthropicVertexManagedClientOptions, \"client\">]?: never;\n};\n\nexport type AnthropicVertexClientOptions =\n | AnthropicVertexManagedClientOptions\n | AnthropicVertexInjectedClientOptions;\n\nexport type AnthropicVertexCompletionModelOptions = {\n modelId: AnthropicCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type AnthropicVertexCompletionModelHandle = StreamingCompletionModel<unknown>;\n\nexport class AnthropicVertexClient {\n private readonly sdk: AnthropicVertex;\n\n constructor(options: AnthropicVertexClientOptions) {\n const { client, ...clientOptions } = options;\n if (client !== undefined) {\n const conflict = Object.keys(clientOptions)[0];\n if (conflict !== undefined) {\n throw new TypeError(`AnthropicVertexClient cannot combine client with ${conflict}.`);\n }\n this.sdk = client;\n return;\n }\n this.sdk = new AnthropicVertex({ ...clientOptions, maxRetries: 0 });\n }\n\n completionModel(\n options: AnthropicVertexCompletionModelOptions,\n ): AnthropicVertexCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new AnthropicCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n"],"mappings":"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","names":["resolveModelContextLimits","requireModelId","resolveModelContextLimits"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/anthropic",
3
- "version": "1.0.0-rc.5",
3
+ "version": "1.0.0-rc.9",
4
4
  "description": "Anthropic provider adapter for Anvia.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -34,10 +34,10 @@
34
34
  "tsup": "^8.5.0",
35
35
  "typescript": "^5.9.3",
36
36
  "vitest": "^4.0.8",
37
- "@anvia/core": "1.0.0-rc.5"
37
+ "@anvia/core": "1.0.0-rc.9"
38
38
  },
39
39
  "peerDependencies": {
40
- "@anvia/core": "1.0.0-rc.5"
40
+ "@anvia/core": "1.0.0-rc.9"
41
41
  },
42
42
  "scripts": {
43
43
  "prebuild": "test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build",