@anvia/anthropic 1.0.0-rc.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,7 @@ const client = new AnthropicClient({
26
26
  apiKey,
27
27
  });
28
28
 
29
- const model = client.completionModel({ modelId: "claude-sonnet-4-20250514" });
29
+ const model = client.completionModel({ modelId: "claude-opus-5" });
30
30
 
31
31
  const agent = new Agent({
32
32
  id: "assistant",
@@ -35,7 +35,7 @@ const agent = new Agent({
35
35
  });
36
36
 
37
37
  const result = await agent.generate({ prompt: "Summarize Anvia in one sentence." });
38
- if (result.status === "completed") console.log(result.output);
38
+ if (result.type === "response") console.log(result.output);
39
39
  ```
40
40
 
41
41
  ## Anthropic-Compatible APIs
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { ModelContextLimits, StreamingCompletionModel } from '@anvia/core/comple
3
3
  import { ModelId, ModelListingClient, ModelList } from '@anvia/core/model-listing';
4
4
  import { ClientOptions, AnthropicVertex } from '@anthropic-ai/vertex-sdk';
5
5
 
6
- type KnownAnthropicCompletionModelId = "claude-3-5-sonnet-20240620" | "claude-3-5-sonnet-20241022" | "claude-3-7-sonnet-20250219" | "claude-3-haiku-20240307" | "claude-3-opus-20240229" | "claude-3-sonnet-20240229" | "claude-fable-5" | "claude-haiku-4-5" | "claude-haiku-4-5-20251001" | "claude-opus-4-0" | "claude-opus-4-1" | "claude-opus-4-1-20250805" | "claude-opus-4-20250514" | "claude-opus-4-5" | "claude-opus-4-5-20251101" | "claude-opus-4-6" | "claude-opus-4-7" | "claude-opus-4-8" | "claude-sonnet-4-0" | "claude-sonnet-4-20250514" | "claude-sonnet-4-5" | "claude-sonnet-4-5-20250929" | "claude-sonnet-4-6" | "claude-sonnet-5";
6
+ type KnownAnthropicCompletionModelId = "claude-3-5-sonnet-20240620" | "claude-3-5-sonnet-20241022" | "claude-3-7-sonnet-20250219" | "claude-3-haiku-20240307" | "claude-3-opus-20240229" | "claude-3-sonnet-20240229" | "claude-fable-5" | "claude-haiku-4-5" | "claude-haiku-4-5-20251001" | "claude-opus-4-0" | "claude-opus-4-1" | "claude-opus-4-1-20250805" | "claude-opus-4-20250514" | "claude-opus-4-5" | "claude-opus-4-5-20251101" | "claude-opus-4-6" | "claude-opus-4-7" | "claude-opus-4-8" | "claude-opus-5" | "claude-mythos-5" | "claude-mythos-preview" | "claude-sonnet-4-0" | "claude-sonnet-4-20250514" | "claude-sonnet-4-5" | "claude-sonnet-4-5-20250929" | "claude-sonnet-4-6" | "claude-sonnet-5";
7
7
  type AnthropicCompletionModelId = ModelId<KnownAnthropicCompletionModelId>;
8
8
 
9
9
  type AnthropicManagedClientOptions = {
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,78 +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;
111
115
  let streamProviderFinishReason;
112
116
  for await (const event of stream) {
113
- if (isPlainObject(event) && event.type === "content_block_start") {
114
- const index = numberFrom(event.index);
115
- const block = isPlainObject(event.content_block) ? event.content_block : {};
116
- const id = stringFrom(block.id);
117
- if (id !== void 0) {
118
- toolIdsByIndex.set(index, id);
119
- }
120
- if (toolInputArgumentsDelta(block.input) !== void 0) {
121
- blocksWithInitialToolInput.add(index);
122
- }
123
- }
117
+ const hadProviderFinishReason = streamProviderFinishReason !== void 0;
124
118
  if (isPlainObject(event)) {
125
119
  if (event.type === "message_start" && isPlainObject(event.message)) {
126
120
  streamMessageId = stringFrom(event.message.id) ?? streamMessageId;
127
- streamProviderFinishReason = stringFrom(event.message.stop_reason) ?? streamProviderFinishReason;
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
128
  }
129
129
  if (event.type === "message_delta" && isPlainObject(event.delta)) {
130
- streamProviderFinishReason = stringFrom(event.delta.stop_reason) ?? streamProviderFinishReason;
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
+ }
131
137
  }
132
138
  hasStreamUsage = applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;
133
139
  }
134
- for (const mapped of fromAnthropicStreamEvent(event)) {
135
- const usageMapped = mapped.type === "final" && hasStreamUsage ? {
136
- ...mapped,
137
- response: {
138
- ...mapped.response,
139
- usage: mergeUsage(mapped.response.usage, streamUsage, streamUsageFields)
140
- }
141
- } : mapped;
142
- if (usageMapped.type === "final") {
143
- applyAnthropicFinishReason(usageMapped.response, streamProviderFinishReason);
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);
144
147
  }
145
- const streamMapped = usageMapped.type === "final" ? {
146
- ...usageMapped,
147
- response: withContextUsage(usageMapped.response, this.modelInfo())
148
- } : usageMapped;
149
- if (streamMapped.type === "tool_call_delta" && streamMapped.argumentsDelta !== void 0 && isPlainObject(event) && event.type === "content_block_delta" && blocksWithInitialToolInput.has(numberFrom(event.index))) {
150
- continue;
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);
151
165
  }
152
- if (streamMapped.type === "tool_call_delta" && streamMapped.id.startsWith("tool_")) {
153
- const index = Number(streamMapped.id.slice("tool_".length));
154
- yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };
155
- } else {
156
- yield streamMapped;
166
+ if (typeof event.delta.partial_json !== "string") {
167
+ throw providerOutputError("invalid-tool-arguments", streamUsage, state.id);
157
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;
158
176
  }
159
- if (isPlainObject(event) && event.type === "message_stop" && !isPlainObject(event.message)) {
160
- const response = {
161
- choice: [],
162
- usage: copyUsage(streamUsage),
163
- rawResponse: event
164
- };
165
- if (streamMessageId !== void 0) {
166
- response.messageId = streamMessageId;
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);
183
+ }
184
+ state.closed = true;
185
+ continue;
186
+ }
187
+ }
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
+ );
167
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;
168
219
  applyAnthropicFinishReason(response, streamProviderFinishReason);
220
+ assertAnthropicResponseIntegrity(response, hasToolProgress || hasFinalMessageToolUse);
169
221
  yield {
170
222
  type: "final",
171
223
  response: withContextUsage(response, this.modelInfo())
172
224
  };
225
+ return;
226
+ }
227
+ if (isPlainObject(event) && event.type === "error") {
228
+ hasTerminalEvent = true;
229
+ }
230
+ for (const mapped of fromAnthropicStreamEvent(event)) {
231
+ yield mapped;
173
232
  }
233
+ if (hasTerminalEvent) return;
234
+ }
235
+ if (hasToolProgress && !hasTerminalEvent) {
236
+ throw providerOutputError("incomplete-stream", streamUsage);
174
237
  }
175
238
  }
176
239
  };
240
+ function isAnthropicSemanticProgressEvent(event) {
241
+ return isPlainObject(event) && (event.type === "content_block_start" || event.type === "content_block_delta");
242
+ }
177
243
  function emptyAnthropicStreamUsageFields() {
178
244
  return {
179
245
  inputTokens: false,
@@ -254,10 +320,107 @@ function copyUsage(usage) {
254
320
  if (usage.details !== void 0) copy = { ...copy, details: { ...usage.details } };
255
321
  return copy;
256
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
+ }
257
417
  function toAnthropicMessagesParams(modelId, request) {
258
418
  const messages = requestMessages(request);
259
419
  const system = systemFromMessages(request, messages);
260
- 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 ?? {};
261
424
  const params = {
262
425
  ...providerOptions,
263
426
  model: modelId,
@@ -308,10 +471,10 @@ function toolChoiceSummary(toolChoice) {
308
471
  function compactJsonObject(values) {
309
472
  return Object.fromEntries(
310
473
  Object.entries(values).flatMap(([key, value]) => {
311
- if (value === void 0) {
474
+ if (!isJsonValue(value)) {
312
475
  return [];
313
476
  }
314
- return [[key, toJsonValue(value)]];
477
+ return [[key, value]];
315
478
  })
316
479
  );
317
480
  }
@@ -328,9 +491,16 @@ function systemFromMessages(request, messages) {
328
491
  return systemMessages.length === 0 ? void 0 : systemMessages.join("\n\n");
329
492
  }
330
493
  function fromAnthropicMessage(response) {
331
- 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 : {};
332
501
  const content = Array.isArray(raw.content) ? raw.content : [];
333
502
  const choice = [];
503
+ const usage = anthropicMessageUsage(raw);
334
504
  for (const block of content) {
335
505
  if (!isPlainObject(block)) {
336
506
  continue;
@@ -350,24 +520,20 @@ function fromAnthropicMessage(response) {
350
520
  });
351
521
  }
352
522
  if (block.type === "tool_use") {
353
- const id = typeof block.id === "string" ? block.id : crypto.randomUUID();
354
- 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
+ }
355
528
  choice.push({
356
529
  type: "tool-call",
357
530
  toolCallId: id,
358
531
  callId: id,
359
532
  toolName: name,
360
- input: toJsonValue(block.input)
533
+ input: block.input
361
534
  });
362
535
  }
363
536
  }
364
- const usageSource = isPlainObject(raw.usage) ? raw.usage : {};
365
- const usage = anthropicUsage(
366
- numberFrom(usageSource.input_tokens),
367
- numberFrom(usageSource.output_tokens),
368
- numberFrom(usageSource.cache_read_input_tokens),
369
- numberFrom(usageSource.cache_creation_input_tokens)
370
- );
371
537
  const result = {
372
538
  choice,
373
539
  usage,
@@ -380,9 +546,9 @@ function fromAnthropicMessage(response) {
380
546
  return result;
381
547
  }
382
548
  function applyAnthropicFinishReason(response, value) {
383
- if (typeof value !== "string") return;
384
- response.finishReason = anthropicFinishReason(value);
385
- response.providerFinishReason = 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;
386
552
  }
387
553
  function anthropicFinishReason(value) {
388
554
  if (value === "end_turn" || value === "stop_sequence") return "stop";
@@ -391,6 +557,125 @@ function anthropicFinishReason(value) {
391
557
  if (value === "refusal") return "content-filter";
392
558
  return "other";
393
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
+ }
394
679
  function anthropicUsage(uncachedInputTokens, outputTokens, cachedInputTokens, cacheCreationInputTokens) {
395
680
  const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;
396
681
  const totalTokens = inputTokens + outputTokens;
@@ -421,10 +706,11 @@ function fromAnthropicStreamEvent(event) {
421
706
  if (event.type === "content_block_start" && isPlainObject(event.content_block)) {
422
707
  const block = event.content_block;
423
708
  if (block.type === "tool_use") {
709
+ const state = startAnthropicStreamTool(event.index, block, Usage.empty());
424
710
  return [
425
- toolCallDelta(stringFrom(block.id) ?? `tool_${numberFrom(event.index)}`, {
426
- name: stringFrom(block.name),
427
- argumentsDelta: toolInputArgumentsDelta(block.input)
711
+ toolCallDelta(state.id, {
712
+ name: state.name,
713
+ argumentsDelta: state.initialInput.type === "empty" ? void 0 : state.initialInput.text
428
714
  })
429
715
  ];
430
716
  }
@@ -466,11 +752,7 @@ function fromAnthropicStreamEvent(event) {
466
752
  }
467
753
  ];
468
754
  }
469
- if (delta.type === "input_json_delta" && typeof delta.partial_json === "string") {
470
- return [
471
- toolCallDelta(`tool_${numberFrom(event.index)}`, { argumentsDelta: delta.partial_json })
472
- ];
473
- }
755
+ if (delta.type === "input_json_delta") return [];
474
756
  }
475
757
  if (event.type === "message_stop" && isPlainObject(event.message)) {
476
758
  return [{ type: "final", response: fromAnthropicMessage(event.message) }];
@@ -676,33 +958,6 @@ function toolChoiceToAnthropic(toolChoice) {
676
958
  name: toolChoice.name
677
959
  };
678
960
  }
679
- function toJsonValue(value) {
680
- if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean" || Array.isArray(value) || isPlainObject(value)) {
681
- return value;
682
- }
683
- return String(value);
684
- }
685
- function toolInputArgumentsDelta(input) {
686
- if (input === void 0) {
687
- return void 0;
688
- }
689
- if (typeof input === "string") {
690
- const trimmed = input.trim();
691
- if (trimmed.length === 0 || trimmed === "{}") {
692
- return void 0;
693
- }
694
- try {
695
- JSON.parse(trimmed);
696
- return trimmed;
697
- } catch {
698
- return JSON.stringify(input);
699
- }
700
- }
701
- if (isPlainObject(input) && Object.keys(input).length === 0) {
702
- return void 0;
703
- }
704
- return JSON.stringify(toJsonValue(input));
705
- }
706
961
  function toolCallDelta(id, values) {
707
962
  const event = { type: "tool_call_delta", id };
708
963
  if (values.name !== void 0) event.name = values.name;
@@ -733,6 +988,9 @@ var ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS = {
733
988
  "claude-opus-4-6": CONTEXT_1M_128K,
734
989
  "claude-opus-4-7": CONTEXT_1M_128K,
735
990
  "claude-opus-4-8": CONTEXT_1M_128K,
991
+ "claude-opus-5": CONTEXT_1M_128K,
992
+ "claude-mythos-5": CONTEXT_1M_128K,
993
+ "claude-mythos-preview": CONTEXT_1M_128K,
736
994
  "claude-sonnet-4-0": CONTEXT_200K_64K,
737
995
  "claude-sonnet-4-20250514": CONTEXT_200K_64K,
738
996
  "claude-sonnet-4-5": CONTEXT_200K_64K,
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 CompletionFinishReason,\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 let streamProviderFinishReason: 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 streamProviderFinishReason =\n stringFrom(event.message.stop_reason) ?? streamProviderFinishReason;\n }\n if (event.type === \"message_delta\" && isPlainObject(event.delta)) {\n streamProviderFinishReason =\n stringFrom(event.delta.stop_reason) ?? streamProviderFinishReason;\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 if (usageMapped.type === \"final\") {\n applyAnthropicFinishReason(usageMapped.response, streamProviderFinishReason);\n }\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 applyAnthropicFinishReason(response, streamProviderFinishReason);\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 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 (typeof value !== \"string\") return;\n response.finishReason = anthropicFinishReason(value);\n 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 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-opus-5\"\n | \"claude-mythos-5\"\n | \"claude-mythos-preview\"\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-opus-5\": CONTEXT_1M_128K,\n \"claude-mythos-5\": CONTEXT_1M_128K,\n \"claude-mythos-preview\": 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.6",
3
+ "version": "1.0.0",
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.6"
37
+ "@anvia/core": "1.0.0"
38
38
  },
39
39
  "peerDependencies": {
40
- "@anvia/core": "1.0.0-rc.6"
40
+ "@anvia/core": "1.0.0"
41
41
  },
42
42
  "scripts": {
43
43
  "prebuild": "test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build",