@anvia/anthropic 0.3.16 → 0.4.1

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
@@ -52,9 +52,62 @@ const client = new AnthropicClient({
52
52
  const model = client.completionModel("provider/model-name");
53
53
  ```
54
54
 
55
+ ## Vertex AI
56
+
57
+ Use Anthropic's official Vertex SDK through `AnthropicVertexClient`:
58
+
59
+ ```ts
60
+ import { AnthropicVertexClient } from "@anvia/anthropic";
61
+
62
+ const client = new AnthropicVertexClient({
63
+ projectId: "my-gcp-project",
64
+ region: "global",
65
+ });
66
+
67
+ const model = client.completionModel("claude-sonnet-5");
68
+ ```
69
+
70
+ The client follows the standard Google authentication flow. It reads
71
+ `ANTHROPIC_VERTEX_PROJECT_ID` and `CLOUD_ML_REGION` when project and region are omitted, and supports
72
+ Application Default Credentials such as `GOOGLE_APPLICATION_CREDENTIALS`:
73
+
74
+ ```sh
75
+ export ANTHROPIC_VERTEX_PROJECT_ID="my-gcp-project"
76
+ export CLOUD_ML_REGION="global"
77
+ export GOOGLE_APPLICATION_CREDENTIALS="/absolute/path/service-account.json"
78
+ ```
79
+
80
+ For custom authentication, pass the official SDK's `googleAuth`, `authClient`, or `accessToken`
81
+ options:
82
+
83
+ ```sh
84
+ pnpm add google-auth-library
85
+ ```
86
+
87
+ ```ts
88
+ import { GoogleAuth } from "google-auth-library";
89
+
90
+ const client = new AnthropicVertexClient({
91
+ projectId: "my-gcp-project",
92
+ region: "global",
93
+ googleAuth: new GoogleAuth({
94
+ credentials: serviceAccountJson,
95
+ scopes: "https://www.googleapis.com/auth/cloud-platform",
96
+ }),
97
+ });
98
+ ```
99
+
100
+ You can also pass a preconfigured `authClient`, including impersonated credentials. Validate
101
+ externally supplied credential configurations before using them, and never commit credential JSON
102
+ or service-account keys.
103
+
104
+ Vertex AI does not expose Anthropic's Models API, so `AnthropicVertexClient` intentionally does not
105
+ provide `listModels()`.
106
+
55
107
  ## Exports
56
108
 
57
109
  - `AnthropicClient`
110
+ - `AnthropicVertexClient`
58
111
  - `AnthropicCompletionModel`
59
112
  - `anthropic`
60
113
 
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import Anthropic$1, { Anthropic } from '@anthropic-ai/sdk';
2
2
  import { ModelId, ModelListingClient, ModelList } from '@anvia/core/model-listing';
3
+ import { AnthropicVertex, ClientOptions } from '@anthropic-ai/vertex-sdk';
3
4
  import { StreamingCompletionModel, CompletionModelCapabilities, CompletionRequest, JsonObject, CompletionResponse, CompletionStreamEvent } from '@anvia/core/completion';
4
5
 
5
- type KnownAnthropicCompletionModelName = "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";
6
+ type KnownAnthropicCompletionModelName = "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
7
  type AnthropicCompletionModelName = ModelId<KnownAnthropicCompletionModelName>;
7
8
 
8
9
  declare class AnthropicCompletionModel implements StreamingCompletionModel<unknown, AnthropicCompletionModelName> {
@@ -10,7 +11,7 @@ declare class AnthropicCompletionModel implements StreamingCompletionModel<unkno
10
11
  readonly defaultModel: AnthropicCompletionModelName;
11
12
  readonly provider = "anthropic";
12
13
  readonly capabilities: CompletionModelCapabilities;
13
- constructor(client: Anthropic, defaultModel?: AnthropicCompletionModelName);
14
+ constructor(client: Anthropic | AnthropicVertex, defaultModel?: AnthropicCompletionModelName);
14
15
  traceRequest(request: CompletionRequest<AnthropicCompletionModelName>, options?: {
15
16
  stream?: boolean | undefined;
16
17
  }): JsonObject;
@@ -30,15 +31,27 @@ declare class AnthropicClient implements ModelListingClient {
30
31
  listModels(): Promise<ModelList>;
31
32
  }
32
33
 
34
+ type AnthropicVertexClientOptions = ClientOptions & {
35
+ client?: AnthropicVertex | undefined;
36
+ };
37
+ declare class AnthropicVertexClient {
38
+ readonly client: AnthropicVertex;
39
+ constructor(options?: AnthropicVertexClientOptions);
40
+ completionModel(model?: AnthropicCompletionModelName): AnthropicCompletionModel;
41
+ }
42
+
33
43
  type index_AnthropicClient = AnthropicClient;
34
44
  declare const index_AnthropicClient: typeof AnthropicClient;
35
45
  type index_AnthropicClientOptions = AnthropicClientOptions;
36
46
  type index_AnthropicCompletionModel = AnthropicCompletionModel;
37
47
  declare const index_AnthropicCompletionModel: typeof AnthropicCompletionModel;
38
48
  type index_AnthropicCompletionModelName = AnthropicCompletionModelName;
49
+ type index_AnthropicVertexClient = AnthropicVertexClient;
50
+ declare const index_AnthropicVertexClient: typeof AnthropicVertexClient;
51
+ type index_AnthropicVertexClientOptions = AnthropicVertexClientOptions;
39
52
  type index_KnownAnthropicCompletionModelName = KnownAnthropicCompletionModelName;
40
53
  declare namespace index {
41
- export { index_AnthropicClient as AnthropicClient, type index_AnthropicClientOptions as AnthropicClientOptions, index_AnthropicCompletionModel as AnthropicCompletionModel, type index_AnthropicCompletionModelName as AnthropicCompletionModelName, type index_KnownAnthropicCompletionModelName as KnownAnthropicCompletionModelName };
54
+ export { index_AnthropicClient as AnthropicClient, type index_AnthropicClientOptions as AnthropicClientOptions, index_AnthropicCompletionModel as AnthropicCompletionModel, type index_AnthropicCompletionModelName as AnthropicCompletionModelName, index_AnthropicVertexClient as AnthropicVertexClient, type index_AnthropicVertexClientOptions as AnthropicVertexClientOptions, type index_KnownAnthropicCompletionModelName as KnownAnthropicCompletionModelName };
42
55
  }
43
56
 
44
- export { AnthropicClient, type AnthropicClientOptions, AnthropicCompletionModel, type AnthropicCompletionModelName, type KnownAnthropicCompletionModelName, index as anthropic };
57
+ export { AnthropicClient, type AnthropicClientOptions, AnthropicCompletionModel, type AnthropicCompletionModelName, AnthropicVertexClient, type AnthropicVertexClientOptions, type KnownAnthropicCompletionModelName, index as anthropic };
package/dist/index.js CHANGED
@@ -8,7 +8,8 @@ var __export = (target, all) => {
8
8
  var anthropic_exports = {};
9
9
  __export(anthropic_exports, {
10
10
  AnthropicClient: () => AnthropicClient,
11
- AnthropicCompletionModel: () => AnthropicCompletionModel
11
+ AnthropicCompletionModel: () => AnthropicCompletionModel,
12
+ AnthropicVertexClient: () => AnthropicVertexClient
12
13
  });
13
14
 
14
15
  // src/anthropic/client.ts
@@ -156,11 +157,15 @@ function emptyAnthropicStreamUsageFields() {
156
157
  }
157
158
  function applyAnthropicStreamUsage(event, usage, fields) {
158
159
  let changed = false;
160
+ let uncachedInputTokens = Math.max(
161
+ 0,
162
+ usage.inputTokens - usage.cachedInputTokens - usage.cacheCreationInputTokens
163
+ );
159
164
  if (event.type === "message_start" && isPlainObject(event.message)) {
160
165
  const source = isPlainObject(event.message.usage) ? event.message.usage : void 0;
161
166
  if (source !== void 0) {
162
167
  if ("input_tokens" in source) {
163
- usage.inputTokens = numberFrom(source.input_tokens);
168
+ uncachedInputTokens = numberFrom(source.input_tokens);
164
169
  fields.inputTokens = true;
165
170
  changed = true;
166
171
  }
@@ -185,23 +190,43 @@ function applyAnthropicStreamUsage(event, usage, fields) {
185
190
  }
186
191
  }
187
192
  if (changed) {
188
- usage.totalTokens = usage.inputTokens + usage.outputTokens;
193
+ Object.assign(
194
+ usage,
195
+ anthropicUsage(
196
+ uncachedInputTokens,
197
+ usage.outputTokens,
198
+ usage.cachedInputTokens,
199
+ usage.cacheCreationInputTokens
200
+ )
201
+ );
189
202
  }
190
203
  return changed;
191
204
  }
192
205
  function mergeUsage(base, stream, fields) {
193
- const inputTokens = fields.inputTokens ? stream.inputTokens : base.inputTokens;
206
+ const baseUncachedInputTokens = Math.max(
207
+ 0,
208
+ base.inputTokens - base.cachedInputTokens - base.cacheCreationInputTokens
209
+ );
210
+ const streamUncachedInputTokens = Math.max(
211
+ 0,
212
+ stream.inputTokens - stream.cachedInputTokens - stream.cacheCreationInputTokens
213
+ );
214
+ const uncachedInputTokens = fields.inputTokens ? streamUncachedInputTokens : baseUncachedInputTokens;
194
215
  const outputTokens = fields.outputTokens ? stream.outputTokens : base.outputTokens;
195
- return {
196
- inputTokens,
216
+ const cachedInputTokens = fields.cachedInputTokens ? stream.cachedInputTokens : base.cachedInputTokens;
217
+ const cacheCreationInputTokens = fields.cacheCreationInputTokens ? stream.cacheCreationInputTokens : base.cacheCreationInputTokens;
218
+ return anthropicUsage(
219
+ uncachedInputTokens,
197
220
  outputTokens,
198
- totalTokens: inputTokens + outputTokens,
199
- cachedInputTokens: fields.cachedInputTokens ? stream.cachedInputTokens : base.cachedInputTokens,
200
- cacheCreationInputTokens: fields.cacheCreationInputTokens ? stream.cacheCreationInputTokens : base.cacheCreationInputTokens
201
- };
221
+ cachedInputTokens,
222
+ cacheCreationInputTokens
223
+ );
202
224
  }
203
225
  function copyUsage(usage) {
204
- return { ...usage };
226
+ return {
227
+ ...usage,
228
+ ...usage.details === void 0 ? {} : { details: { ...usage.details } }
229
+ };
205
230
  }
206
231
  function toAnthropicMessagesParams(defaultModel, request) {
207
232
  const messages = requestMessages(request);
@@ -298,16 +323,15 @@ function fromAnthropicMessage(response) {
298
323
  }
299
324
  }
300
325
  const usageSource = isPlainObject(raw.usage) ? raw.usage : {};
326
+ const usage = anthropicUsage(
327
+ numberFrom(usageSource.input_tokens),
328
+ numberFrom(usageSource.output_tokens),
329
+ numberFrom(usageSource.cache_read_input_tokens),
330
+ numberFrom(usageSource.cache_creation_input_tokens)
331
+ );
301
332
  const result = {
302
333
  choice,
303
- usage: {
304
- ...Usage.empty(),
305
- inputTokens: numberFrom(usageSource.input_tokens),
306
- outputTokens: numberFrom(usageSource.output_tokens),
307
- totalTokens: numberFrom(usageSource.input_tokens) + numberFrom(usageSource.output_tokens),
308
- cachedInputTokens: numberFrom(usageSource.cache_read_input_tokens),
309
- cacheCreationInputTokens: numberFrom(usageSource.cache_creation_input_tokens)
310
- },
334
+ usage,
311
335
  rawResponse: response
312
336
  };
313
337
  if (typeof raw.id === "string") {
@@ -315,6 +339,25 @@ function fromAnthropicMessage(response) {
315
339
  }
316
340
  return result;
317
341
  }
342
+ function anthropicUsage(uncachedInputTokens, outputTokens, cachedInputTokens, cacheCreationInputTokens) {
343
+ const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;
344
+ const totalTokens = inputTokens + outputTokens;
345
+ return {
346
+ ...Usage.empty(),
347
+ inputTokens,
348
+ outputTokens,
349
+ totalTokens,
350
+ cachedInputTokens,
351
+ cacheCreationInputTokens,
352
+ details: {
353
+ input: uncachedInputTokens,
354
+ cache_read_input_tokens: cachedInputTokens,
355
+ cache_creation_input_tokens: cacheCreationInputTokens,
356
+ output: outputTokens,
357
+ total: totalTokens
358
+ }
359
+ };
360
+ }
318
361
  function fromAnthropicStreamEvent(event) {
319
362
  if (!isPlainObject(event) || typeof event.type !== "string") {
320
363
  return [];
@@ -705,9 +748,25 @@ function isObject(value) {
705
748
  function isAsyncIterable(value) {
706
749
  return isObject(value) && Symbol.asyncIterator in value;
707
750
  }
751
+
752
+ // src/anthropic/vertex-client.ts
753
+ import {
754
+ AnthropicVertex
755
+ } from "@anthropic-ai/vertex-sdk";
756
+ var AnthropicVertexClient = class {
757
+ client;
758
+ constructor(options = {}) {
759
+ const { client, ...clientOptions } = options;
760
+ this.client = client ?? new AnthropicVertex(clientOptions);
761
+ }
762
+ completionModel(model = "claude-sonnet-5") {
763
+ return new AnthropicCompletionModel(this.client, model);
764
+ }
765
+ };
708
766
  export {
709
767
  AnthropicClient,
710
768
  AnthropicCompletionModel,
769
+ AnthropicVertexClient,
711
770
  anthropic_exports as anthropic
712
771
  };
713
772
  //# sourceMappingURL=index.js.map
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"],"sourcesContent":["export { AnthropicClient, type AnthropicClientOptions } from \"./client\";\nexport { AnthropicCompletionModel } from \"./completion\";\nexport type {\n AnthropicCompletionModelName,\n KnownAnthropicCompletionModelName,\n} from \"./models\";\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport type { AnthropicCompletionModelName } from \"./models\";\n\nexport type AnthropicClientOptions = {\n apiKey?: string | undefined;\n baseUrl?: string | undefined;\n client?: Anthropic | undefined;\n};\n\nexport class AnthropicClient implements ModelListingClient {\n readonly client: Anthropic;\n\n constructor(options: AnthropicClientOptions = {}) {\n this.client =\n options.client ??\n new Anthropic({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n });\n }\n\n completionModel(\n model: AnthropicCompletionModelName = \"claude-sonnet-4-20250514\",\n ): AnthropicCompletionModel {\n return new AnthropicCompletionModel(this.client, model);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\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 requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\n \"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient.\",\n );\n }\n\n return apiKey;\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 {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ReasoningContent,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n type ToolResultContent,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport type { AnthropicCompletionModelName } from \"./models\";\n\ntype AnthropicCreateParams = Record<string, unknown>;\ntype AnthropicMessage = Record<string, unknown>;\ntype AnthropicContentBlock = Record<string, unknown>;\n\nconst DEFAULT_MAX_TOKENS = 1024;\n\nexport class AnthropicCompletionModel\n implements StreamingCompletionModel<unknown, AnthropicCompletionModelName>\n{\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\n constructor(\n private readonly client: Anthropic,\n readonly defaultModel: AnthropicCompletionModelName = \"claude-sonnet-4-20250514\",\n ) {}\n\n traceRequest(\n request: CompletionRequest<AnthropicCompletionModelName>,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toAnthropicMessagesParams(this.defaultModel, 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<AnthropicCompletionModelName>,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toAnthropicMessagesParams(this.defaultModel, request);\n const response = await this.client.messages.create(params as never);\n return fromAnthropicMessage(response);\n }\n\n async *streamCompletion(\n request: CompletionRequest<AnthropicCompletionModelName>,\n ): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toAnthropicMessagesParams(this.defaultModel, request), stream: true };\n const stream = await this.client.messages.create(params as never);\n const toolIdsByIndex = new Map<number, string>();\n const blocksWithInitialToolInput = new Set<number>();\n const streamUsage = Usage.empty();\n const streamUsageFields = emptyAnthropicStreamUsageFields();\n let hasStreamUsage = false;\n let streamMessageId: string | undefined;\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n if (isPlainObject(event) && event.type === \"content_block_start\") {\n const index = numberFrom(event.index);\n const block = isPlainObject(event.content_block) ? event.content_block : {};\n const id = stringFrom(block.id);\n if (id !== undefined) {\n toolIdsByIndex.set(index, id);\n }\n if (toolInputArgumentsDelta(block.input) !== undefined) {\n blocksWithInitialToolInput.add(index);\n }\n }\n if (isPlainObject(event)) {\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n streamMessageId = stringFrom(event.message.id) ?? streamMessageId;\n }\n hasStreamUsage =\n applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;\n }\n for (const mapped of fromAnthropicStreamEvent(event)) {\n const streamMapped =\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 (\n streamMapped.type === \"tool_call_delta\" &&\n streamMapped.argumentsDelta !== undefined &&\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n blocksWithInitialToolInput.has(numberFrom(event.index))\n ) {\n continue;\n }\n if (streamMapped.type === \"tool_call_delta\" && streamMapped.id.startsWith(\"tool_\")) {\n const index = Number(streamMapped.id.slice(\"tool_\".length));\n yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };\n } else {\n yield streamMapped;\n }\n }\n if (isPlainObject(event) && event.type === \"message_stop\" && !isPlainObject(event.message)) {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(streamUsage),\n rawResponse: event,\n };\n if (streamMessageId !== undefined) {\n response.messageId = streamMessageId;\n }\n yield { type: \"final\", response };\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\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 usage.inputTokens = 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 usage.totalTokens = usage.inputTokens + usage.outputTokens;\n }\n\n return changed;\n}\n\nfunction mergeUsage(base: Usage, stream: Usage, fields: AnthropicStreamUsageFields): Usage {\n const inputTokens = fields.inputTokens ? stream.inputTokens : base.inputTokens;\n const outputTokens = fields.outputTokens ? stream.outputTokens : base.outputTokens;\n return {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n cachedInputTokens: fields.cachedInputTokens ? stream.cachedInputTokens : base.cachedInputTokens,\n cacheCreationInputTokens: fields.cacheCreationInputTokens\n ? stream.cacheCreationInputTokens\n : base.cacheCreationInputTokens,\n };\n}\n\nfunction copyUsage(usage: Usage): Usage {\n return { ...usage };\n}\n\nexport function toAnthropicMessagesParams(\n defaultModel: AnthropicCompletionModelName,\n request: CompletionRequest<AnthropicCompletionModelName>,\n): AnthropicCreateParams {\n const messages = requestMessages(request);\n const system = systemFromMessages(request, messages);\n const params: AnthropicCreateParams = {\n model: request.model ?? defaultModel,\n max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n messages: messages.flatMap(messageToAnthropicMessages),\n };\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 if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction providerRequestSummary(\n params: AnthropicCreateParams,\n request: CompletionRequest<AnthropicCompletionModelName>,\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 additionalParamKeys: isPlainObject(request.additionalParams)\n ? Object.keys(request.additionalParams).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<AnthropicCompletionModelName>): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction systemFromMessages(\n request: CompletionRequest<AnthropicCompletionModelName>,\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: AssistantContentType[] = [];\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(AssistantContent.text(block.text));\n }\n\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n const text: Extract<ReasoningContent, { 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(AssistantContent.reasoningFromContent([text]));\n }\n\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n choice.push(AssistantContent.reasoningRedacted(block.data));\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(AssistantContent.toolCall(id, name, toJsonValue(block.input)));\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const result: CompletionResponse = {\n choice,\n usage: {\n ...Usage.empty(),\n inputTokens: numberFrom(usageSource.input_tokens),\n outputTokens: numberFrom(usageSource.output_tokens),\n totalTokens: numberFrom(usageSource.input_tokens) + numberFrom(usageSource.output_tokens),\n cachedInputTokens: numberFrom(usageSource.cache_read_input_tokens),\n cacheCreationInputTokens: numberFrom(usageSource.cache_creation_input_tokens),\n },\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromAnthropicStreamEvent(event: unknown): CompletionStreamEvent[] {\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 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(toolContentToAnthropicBlock),\n },\n ];\n }\n\n return [\n {\n role: \"assistant\",\n content: 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.id,\n name: content.function.name,\n input: content.function.arguments ?? {},\n },\n ];\n }\n\n if (content.type === \"reasoning\" && content.content !== undefined) {\n return content.content.flatMap(reasoningContentToAnthropicBlocks);\n }\n\n if (content.type === \"image\") {\n throw new Error(\"Anthropic Messages does not support image content in assistant history\");\n }\n\n return [];\n }),\n },\n ];\n}\n\nfunction toolContentToAnthropicBlock(content: ToolContent): AnthropicContentBlock {\n return {\n type: \"tool_result\",\n tool_use_id: content.callId ?? content.id,\n content: toolResultContentToAnthropicContent(content.content),\n };\n}\n\nfunction toolResultContentToAnthropicContent(\n content: ToolResultContent[],\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 {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: item.mediaType ?? \"image/png\",\n data: item.data,\n },\n };\n });\n}\n\nfunction reasoningContentToAnthropicBlocks(content: ReasoningContent): 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: UserContent): 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 === \"document\") {\n return documentToAnthropicBlock(content);\n }\n\n throw new Error(\"Tool results must be mapped before user content blocks\");\n}\n\nfunction imageToAnthropicBlock(image: ImageContent): AnthropicContentBlock {\n if (image.source.type === \"url\") {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: image.source.url,\n },\n };\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: image.source.mediaType,\n data: image.source.data,\n },\n };\n}\n\nfunction documentToAnthropicBlock(document: DocumentContent): AnthropicContentBlock {\n if (document.source.type === \"text\") {\n return { type: \"text\", text: document.source.text };\n }\n\n if (document.source.mediaType !== \"application/pdf\") {\n throw new Error(\"Anthropic Messages only supports PDF document attachments\");\n }\n\n if (document.source.type === \"url\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: document.source.url,\n },\n };\n }\n\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: document.source.mediaType,\n data: document.source.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): CompletionStreamEvent {\n const event: CompletionStreamEvent = { 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 Message,\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(Message.system(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"],"mappings":"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","names":[]}
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/vertex-client.ts"],"sourcesContent":["export { AnthropicClient, type AnthropicClientOptions } from \"./client\";\nexport { AnthropicCompletionModel } from \"./completion\";\nexport type {\n AnthropicCompletionModelName,\n KnownAnthropicCompletionModelName,\n} from \"./models\";\nexport {\n AnthropicVertexClient,\n type AnthropicVertexClientOptions,\n} from \"./vertex-client\";\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport type { AnthropicCompletionModelName } from \"./models\";\n\nexport type AnthropicClientOptions = {\n apiKey?: string | undefined;\n baseUrl?: string | undefined;\n client?: Anthropic | undefined;\n};\n\nexport class AnthropicClient implements ModelListingClient {\n readonly client: Anthropic;\n\n constructor(options: AnthropicClientOptions = {}) {\n this.client =\n options.client ??\n new Anthropic({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n });\n }\n\n completionModel(\n model: AnthropicCompletionModelName = \"claude-sonnet-4-20250514\",\n ): AnthropicCompletionModel {\n return new AnthropicCompletionModel(this.client, model);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\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 requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\n \"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient.\",\n );\n }\n\n return apiKey;\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 {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ReasoningContent,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n type ToolResultContent,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport type { AnthropicCompletionModelName } from \"./models\";\n\ntype AnthropicCreateParams = Record<string, unknown>;\ntype AnthropicMessage = Record<string, unknown>;\ntype AnthropicContentBlock = Record<string, unknown>;\n\nconst DEFAULT_MAX_TOKENS = 1024;\n\nexport class AnthropicCompletionModel\n implements StreamingCompletionModel<unknown, AnthropicCompletionModelName>\n{\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\n constructor(\n private readonly client: Anthropic | AnthropicVertex,\n readonly defaultModel: AnthropicCompletionModelName = \"claude-sonnet-4-20250514\",\n ) {}\n\n traceRequest(\n request: CompletionRequest<AnthropicCompletionModelName>,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toAnthropicMessagesParams(this.defaultModel, 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<AnthropicCompletionModelName>,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toAnthropicMessagesParams(this.defaultModel, request);\n const response = await this.client.messages.create(params as never);\n return fromAnthropicMessage(response);\n }\n\n async *streamCompletion(\n request: CompletionRequest<AnthropicCompletionModelName>,\n ): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toAnthropicMessagesParams(this.defaultModel, request), stream: true };\n const stream = await this.client.messages.create(params as never);\n const toolIdsByIndex = new Map<number, string>();\n const blocksWithInitialToolInput = new Set<number>();\n const streamUsage = Usage.empty();\n const streamUsageFields = emptyAnthropicStreamUsageFields();\n let hasStreamUsage = false;\n let streamMessageId: string | undefined;\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n if (isPlainObject(event) && event.type === \"content_block_start\") {\n const index = numberFrom(event.index);\n const block = isPlainObject(event.content_block) ? event.content_block : {};\n const id = stringFrom(block.id);\n if (id !== undefined) {\n toolIdsByIndex.set(index, id);\n }\n if (toolInputArgumentsDelta(block.input) !== undefined) {\n blocksWithInitialToolInput.add(index);\n }\n }\n if (isPlainObject(event)) {\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n streamMessageId = stringFrom(event.message.id) ?? streamMessageId;\n }\n hasStreamUsage =\n applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;\n }\n for (const mapped of fromAnthropicStreamEvent(event)) {\n const streamMapped =\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 (\n streamMapped.type === \"tool_call_delta\" &&\n streamMapped.argumentsDelta !== undefined &&\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n blocksWithInitialToolInput.has(numberFrom(event.index))\n ) {\n continue;\n }\n if (streamMapped.type === \"tool_call_delta\" && streamMapped.id.startsWith(\"tool_\")) {\n const index = Number(streamMapped.id.slice(\"tool_\".length));\n yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };\n } else {\n yield streamMapped;\n }\n }\n if (isPlainObject(event) && event.type === \"message_stop\" && !isPlainObject(event.message)) {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(streamUsage),\n rawResponse: event,\n };\n if (streamMessageId !== undefined) {\n response.messageId = streamMessageId;\n }\n yield { type: \"final\", response };\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 return {\n ...usage,\n ...(usage.details === undefined ? {} : { details: { ...usage.details } }),\n };\n}\n\nexport function toAnthropicMessagesParams(\n defaultModel: AnthropicCompletionModelName,\n request: CompletionRequest<AnthropicCompletionModelName>,\n): AnthropicCreateParams {\n const messages = requestMessages(request);\n const system = systemFromMessages(request, messages);\n const params: AnthropicCreateParams = {\n model: request.model ?? defaultModel,\n max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n messages: messages.flatMap(messageToAnthropicMessages),\n };\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 if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction providerRequestSummary(\n params: AnthropicCreateParams,\n request: CompletionRequest<AnthropicCompletionModelName>,\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 additionalParamKeys: isPlainObject(request.additionalParams)\n ? Object.keys(request.additionalParams).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<AnthropicCompletionModelName>): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction systemFromMessages(\n request: CompletionRequest<AnthropicCompletionModelName>,\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: AssistantContentType[] = [];\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(AssistantContent.text(block.text));\n }\n\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n const text: Extract<ReasoningContent, { 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(AssistantContent.reasoningFromContent([text]));\n }\n\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n choice.push(AssistantContent.reasoningRedacted(block.data));\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(AssistantContent.toolCall(id, name, toJsonValue(block.input)));\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const usage = anthropicUsage(\n numberFrom(usageSource.input_tokens),\n numberFrom(usageSource.output_tokens),\n numberFrom(usageSource.cache_read_input_tokens),\n numberFrom(usageSource.cache_creation_input_tokens),\n );\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nfunction anthropicUsage(\n uncachedInputTokens: number,\n outputTokens: number,\n cachedInputTokens: number,\n cacheCreationInputTokens: number,\n): Usage {\n const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n details: {\n input: uncachedInputTokens,\n cache_read_input_tokens: cachedInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n output: outputTokens,\n total: totalTokens,\n },\n };\n}\n\nexport function fromAnthropicStreamEvent(event: unknown): CompletionStreamEvent[] {\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 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(toolContentToAnthropicBlock),\n },\n ];\n }\n\n return [\n {\n role: \"assistant\",\n content: 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.id,\n name: content.function.name,\n input: content.function.arguments ?? {},\n },\n ];\n }\n\n if (content.type === \"reasoning\" && content.content !== undefined) {\n return content.content.flatMap(reasoningContentToAnthropicBlocks);\n }\n\n if (content.type === \"image\") {\n throw new Error(\"Anthropic Messages does not support image content in assistant history\");\n }\n\n return [];\n }),\n },\n ];\n}\n\nfunction toolContentToAnthropicBlock(content: ToolContent): AnthropicContentBlock {\n return {\n type: \"tool_result\",\n tool_use_id: content.callId ?? content.id,\n content: toolResultContentToAnthropicContent(content.content),\n };\n}\n\nfunction toolResultContentToAnthropicContent(\n content: ToolResultContent[],\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 {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: item.mediaType ?? \"image/png\",\n data: item.data,\n },\n };\n });\n}\n\nfunction reasoningContentToAnthropicBlocks(content: ReasoningContent): 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: UserContent): 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 === \"document\") {\n return documentToAnthropicBlock(content);\n }\n\n throw new Error(\"Tool results must be mapped before user content blocks\");\n}\n\nfunction imageToAnthropicBlock(image: ImageContent): AnthropicContentBlock {\n if (image.source.type === \"url\") {\n return {\n type: \"image\",\n source: {\n type: \"url\",\n url: image.source.url,\n },\n };\n }\n\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: image.source.mediaType,\n data: image.source.data,\n },\n };\n}\n\nfunction documentToAnthropicBlock(document: DocumentContent): AnthropicContentBlock {\n if (document.source.type === \"text\") {\n return { type: \"text\", text: document.source.text };\n }\n\n if (document.source.mediaType !== \"application/pdf\") {\n throw new Error(\"Anthropic Messages only supports PDF document attachments\");\n }\n\n if (document.source.type === \"url\") {\n return {\n type: \"document\",\n source: {\n type: \"url\",\n url: document.source.url,\n },\n };\n }\n\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: document.source.mediaType,\n data: document.source.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): CompletionStreamEvent {\n const event: CompletionStreamEvent = { 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 Message,\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(Message.system(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 {\n AnthropicVertex,\n type ClientOptions as AnthropicVertexSdkOptions,\n} from \"@anthropic-ai/vertex-sdk\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport type { AnthropicCompletionModelName } from \"./models\";\n\nexport type AnthropicVertexClientOptions = AnthropicVertexSdkOptions & {\n client?: AnthropicVertex | undefined;\n};\n\nexport class AnthropicVertexClient {\n readonly client: AnthropicVertex;\n\n constructor(options: AnthropicVertexClientOptions = {}) {\n const { client, ...clientOptions } = options;\n this.client = client ?? new AnthropicVertex(clientOptions);\n }\n\n completionModel(\n model: AnthropicCompletionModelName = \"claude-sonnet-5\",\n ): AnthropicCompletionModel {\n return new AnthropicCompletionModel(this.client, model);\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/anthropic",
3
- "version": "0.3.16",
3
+ "version": "0.4.1",
4
4
  "description": "Anthropic provider adapter for Anvia.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -26,14 +26,15 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@anthropic-ai/sdk": "^0.112.4"
29
+ "@anthropic-ai/sdk": "^0.112.4",
30
+ "@anthropic-ai/vertex-sdk": "^0.19.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^24.9.1",
33
34
  "tsup": "^8.5.0",
34
35
  "typescript": "^5.9.3",
35
36
  "vitest": "^4.0.8",
36
- "@anvia/core": "0.14.0"
37
+ "@anvia/core": "0.17.0"
37
38
  },
38
39
  "peerDependencies": {
39
40
  "@anvia/core": ">=0.7.1 <1.0.0"