@anvia/anthropic 1.0.0-rc.1 → 1.0.0-rc.2
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 +7 -7
- package/dist/index.d.ts +49 -38
- package/dist/index.js +207 -127
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ const client = new AnthropicClient({
|
|
|
26
26
|
apiKey,
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
const model = client.completionModel("claude-sonnet-4-20250514");
|
|
29
|
+
const model = client.completionModel({ modelId: "claude-sonnet-4-20250514" });
|
|
30
30
|
|
|
31
31
|
const agent = new Agent({
|
|
32
32
|
id: "assistant",
|
|
@@ -34,9 +34,8 @@ const agent = new Agent({
|
|
|
34
34
|
instructions: "Answer clearly and concisely.",
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
console.log(response.output);
|
|
37
|
+
const result = await agent.generate({ prompt: "Summarize Anvia in one sentence." });
|
|
38
|
+
if (result.status === "completed") console.log(result.output);
|
|
40
39
|
```
|
|
41
40
|
|
|
42
41
|
## Anthropic-Compatible APIs
|
|
@@ -51,7 +50,7 @@ const client = new AnthropicClient({
|
|
|
51
50
|
baseUrl,
|
|
52
51
|
});
|
|
53
52
|
|
|
54
|
-
const model = client.completionModel("provider/model-name");
|
|
53
|
+
const model = client.completionModel({ modelId: "provider/model-name" });
|
|
55
54
|
```
|
|
56
55
|
|
|
57
56
|
## Vertex AI
|
|
@@ -66,7 +65,7 @@ const client = new AnthropicVertexClient({
|
|
|
66
65
|
region: "global",
|
|
67
66
|
});
|
|
68
67
|
|
|
69
|
-
const model = client.completionModel("claude-sonnet-5");
|
|
68
|
+
const model = client.completionModel({ modelId: "claude-sonnet-5" });
|
|
70
69
|
```
|
|
71
70
|
|
|
72
71
|
The client follows the standard Google authentication flow. It reads
|
|
@@ -110,7 +109,8 @@ provide `listModels()`.
|
|
|
110
109
|
|
|
111
110
|
- `AnthropicClient`
|
|
112
111
|
- `AnthropicVertexClient`
|
|
113
|
-
-
|
|
112
|
+
- structural Anthropic and Vertex completion handle types
|
|
113
|
+
- `AnthropicCompletionModelId`
|
|
114
114
|
- `anthropic`
|
|
115
115
|
|
|
116
116
|
## Development
|
package/dist/index.d.ts
CHANGED
|
@@ -1,59 +1,70 @@
|
|
|
1
|
-
import Anthropic
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { ModelContextLimits, StreamingCompletionModel } from '@anvia/core/completion';
|
|
2
3
|
import { ModelId, ModelListingClient, ModelList } from '@anvia/core/model-listing';
|
|
3
|
-
import {
|
|
4
|
-
import { StreamingCompletionModel, CompletionModelCapabilities, CompletionModelMetadataOptions, CompletionModelInfo, CompletionRequest, JsonObject, CompletionResponse, CompletionStreamEvent } from '@anvia/core/completion';
|
|
4
|
+
import { ClientOptions, AnthropicVertex } from '@anthropic-ai/vertex-sdk';
|
|
5
5
|
|
|
6
|
-
type
|
|
7
|
-
type
|
|
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";
|
|
7
|
+
type AnthropicCompletionModelId = ModelId<KnownAnthropicCompletionModelId>;
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
readonly defaultModel: AnthropicCompletionModelName;
|
|
12
|
-
private readonly metadataOptions;
|
|
13
|
-
readonly provider = "anthropic";
|
|
14
|
-
readonly capabilities: CompletionModelCapabilities;
|
|
15
|
-
constructor(client: Anthropic | AnthropicVertex, defaultModel?: AnthropicCompletionModelName, metadataOptions?: CompletionModelMetadataOptions);
|
|
16
|
-
getModelInfo(model?: AnthropicCompletionModelName): CompletionModelInfo<AnthropicCompletionModelName> | undefined;
|
|
17
|
-
traceRequest(request: CompletionRequest<AnthropicCompletionModelName>, options?: {
|
|
18
|
-
stream?: boolean | undefined;
|
|
19
|
-
}): JsonObject;
|
|
20
|
-
completion(request: CompletionRequest<AnthropicCompletionModelName>): Promise<CompletionResponse>;
|
|
21
|
-
streamCompletion(request: CompletionRequest<AnthropicCompletionModelName>): AsyncIterable<CompletionStreamEvent>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
type AnthropicClientOptions = {
|
|
25
|
-
apiKey?: string | undefined;
|
|
9
|
+
type AnthropicManagedClientOptions = {
|
|
10
|
+
apiKey: string;
|
|
26
11
|
baseUrl?: string | undefined;
|
|
27
|
-
client?:
|
|
12
|
+
client?: never;
|
|
13
|
+
};
|
|
14
|
+
type AnthropicInjectedClientOptions = {
|
|
15
|
+
client: Anthropic;
|
|
16
|
+
apiKey?: never;
|
|
17
|
+
baseUrl?: never;
|
|
28
18
|
};
|
|
19
|
+
type AnthropicClientOptions = AnthropicManagedClientOptions | AnthropicInjectedClientOptions;
|
|
20
|
+
type AnthropicCompletionModelOptions = {
|
|
21
|
+
modelId: AnthropicCompletionModelId;
|
|
22
|
+
contextLimits?: ModelContextLimits | undefined;
|
|
23
|
+
};
|
|
24
|
+
type AnthropicCompletionModelHandle = StreamingCompletionModel<unknown>;
|
|
29
25
|
declare class AnthropicClient implements ModelListingClient {
|
|
30
|
-
readonly
|
|
31
|
-
constructor(options
|
|
32
|
-
completionModel(
|
|
33
|
-
listModels(
|
|
26
|
+
private readonly sdk;
|
|
27
|
+
constructor(options: AnthropicClientOptions);
|
|
28
|
+
completionModel(options: AnthropicCompletionModelOptions): AnthropicCompletionModelHandle;
|
|
29
|
+
listModels(options?: {
|
|
30
|
+
abortSignal?: AbortSignal | undefined;
|
|
31
|
+
}): Promise<ModelList>;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
|
-
type
|
|
37
|
-
client?:
|
|
34
|
+
type AnthropicVertexManagedClientOptions = Omit<ClientOptions, "maxRetries"> & {
|
|
35
|
+
client?: never;
|
|
36
|
+
};
|
|
37
|
+
type AnthropicVertexInjectedClientOptions = {
|
|
38
|
+
client: AnthropicVertex;
|
|
39
|
+
} & {
|
|
40
|
+
[Key in Exclude<keyof AnthropicVertexManagedClientOptions, "client">]?: never;
|
|
41
|
+
};
|
|
42
|
+
type AnthropicVertexClientOptions = AnthropicVertexManagedClientOptions | AnthropicVertexInjectedClientOptions;
|
|
43
|
+
type AnthropicVertexCompletionModelOptions = {
|
|
44
|
+
modelId: AnthropicCompletionModelId;
|
|
45
|
+
contextLimits?: ModelContextLimits | undefined;
|
|
38
46
|
};
|
|
47
|
+
type AnthropicVertexCompletionModelHandle = StreamingCompletionModel<unknown>;
|
|
39
48
|
declare class AnthropicVertexClient {
|
|
40
|
-
readonly
|
|
41
|
-
constructor(options
|
|
42
|
-
completionModel(
|
|
49
|
+
private readonly sdk;
|
|
50
|
+
constructor(options: AnthropicVertexClientOptions);
|
|
51
|
+
completionModel(options: AnthropicVertexCompletionModelOptions): AnthropicVertexCompletionModelHandle;
|
|
43
52
|
}
|
|
44
53
|
|
|
45
54
|
type index_AnthropicClient = AnthropicClient;
|
|
46
55
|
declare const index_AnthropicClient: typeof AnthropicClient;
|
|
47
56
|
type index_AnthropicClientOptions = AnthropicClientOptions;
|
|
48
|
-
type
|
|
49
|
-
|
|
50
|
-
type
|
|
57
|
+
type index_AnthropicCompletionModelHandle = AnthropicCompletionModelHandle;
|
|
58
|
+
type index_AnthropicCompletionModelId = AnthropicCompletionModelId;
|
|
59
|
+
type index_AnthropicCompletionModelOptions = AnthropicCompletionModelOptions;
|
|
51
60
|
type index_AnthropicVertexClient = AnthropicVertexClient;
|
|
52
61
|
declare const index_AnthropicVertexClient: typeof AnthropicVertexClient;
|
|
53
62
|
type index_AnthropicVertexClientOptions = AnthropicVertexClientOptions;
|
|
54
|
-
type
|
|
63
|
+
type index_AnthropicVertexCompletionModelHandle = AnthropicVertexCompletionModelHandle;
|
|
64
|
+
type index_AnthropicVertexCompletionModelOptions = AnthropicVertexCompletionModelOptions;
|
|
65
|
+
type index_KnownAnthropicCompletionModelId = KnownAnthropicCompletionModelId;
|
|
55
66
|
declare namespace index {
|
|
56
|
-
export { index_AnthropicClient as AnthropicClient, type index_AnthropicClientOptions as AnthropicClientOptions,
|
|
67
|
+
export { index_AnthropicClient as AnthropicClient, type index_AnthropicClientOptions as AnthropicClientOptions, type index_AnthropicCompletionModelHandle as AnthropicCompletionModelHandle, type index_AnthropicCompletionModelId as AnthropicCompletionModelId, type index_AnthropicCompletionModelOptions as AnthropicCompletionModelOptions, index_AnthropicVertexClient as AnthropicVertexClient, type index_AnthropicVertexClientOptions as AnthropicVertexClientOptions, type index_AnthropicVertexCompletionModelHandle as AnthropicVertexCompletionModelHandle, type index_AnthropicVertexCompletionModelOptions as AnthropicVertexCompletionModelOptions, type index_KnownAnthropicCompletionModelId as KnownAnthropicCompletionModelId };
|
|
57
68
|
}
|
|
58
69
|
|
|
59
|
-
export { AnthropicClient, type AnthropicClientOptions,
|
|
70
|
+
export { AnthropicClient, type AnthropicClientOptions, type AnthropicCompletionModelHandle, type AnthropicCompletionModelId, type AnthropicCompletionModelOptions, AnthropicVertexClient, type AnthropicVertexClientOptions, type AnthropicVertexCompletionModelHandle, type AnthropicVertexCompletionModelOptions, type KnownAnthropicCompletionModelId, index as anthropic };
|
package/dist/index.js
CHANGED
|
@@ -8,34 +8,33 @@ var __export = (target, all) => {
|
|
|
8
8
|
var anthropic_exports = {};
|
|
9
9
|
__export(anthropic_exports, {
|
|
10
10
|
AnthropicClient: () => AnthropicClient,
|
|
11
|
-
AnthropicCompletionModel: () => AnthropicCompletionModel,
|
|
12
11
|
AnthropicVertexClient: () => AnthropicVertexClient
|
|
13
12
|
});
|
|
14
13
|
|
|
15
14
|
// src/anthropic/client.ts
|
|
16
15
|
import Anthropic from "@anthropic-ai/sdk";
|
|
16
|
+
import {
|
|
17
|
+
resolveModelContextLimits
|
|
18
|
+
} from "@anvia/core/completion";
|
|
17
19
|
import {
|
|
18
20
|
ModelListingError
|
|
19
21
|
} from "@anvia/core/model-listing";
|
|
20
22
|
|
|
21
23
|
// src/anthropic/completion.ts
|
|
22
24
|
import {
|
|
23
|
-
AssistantContent,
|
|
24
25
|
assertCompletionRequestSupported,
|
|
25
|
-
resolveCompletionModelInfo,
|
|
26
26
|
Usage,
|
|
27
27
|
withContextUsage
|
|
28
28
|
} from "@anvia/core/completion";
|
|
29
29
|
|
|
30
30
|
// src/request-messages.ts
|
|
31
31
|
import {
|
|
32
|
-
Message,
|
|
33
32
|
normalizeDocuments
|
|
34
33
|
} from "@anvia/core/completion";
|
|
35
34
|
function orderedRequestMessages(request, options = {}) {
|
|
36
35
|
const messages = [];
|
|
37
36
|
if (options.includeInstructionsAsSystem === true && request.instructions !== void 0) {
|
|
38
|
-
messages.push(
|
|
37
|
+
messages.push({ role: "system", content: request.instructions });
|
|
39
38
|
}
|
|
40
39
|
messages.push(...request.chatHistory.filter((message) => message.role === "system"));
|
|
41
40
|
const documents = normalizeDocuments(request.documents);
|
|
@@ -57,48 +56,17 @@ function stringFrom(value) {
|
|
|
57
56
|
return typeof value === "string" ? value : void 0;
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
// src/anthropic/models.ts
|
|
61
|
-
var CONTEXT_200K_32K = { contextWindow: 2e5, maxOutputTokens: 32e3 };
|
|
62
|
-
var CONTEXT_200K_64K = { contextWindow: 2e5, maxOutputTokens: 64e3 };
|
|
63
|
-
var CONTEXT_1M_128K = { contextWindow: 1e6, maxOutputTokens: 128e3 };
|
|
64
|
-
var ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS = {
|
|
65
|
-
"claude-3-5-sonnet-20240620": { contextWindow: 2e5, maxOutputTokens: 8192 },
|
|
66
|
-
"claude-3-5-sonnet-20241022": { contextWindow: 2e5, maxOutputTokens: 8192 },
|
|
67
|
-
"claude-3-7-sonnet-20250219": CONTEXT_200K_64K,
|
|
68
|
-
"claude-3-haiku-20240307": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
69
|
-
"claude-3-opus-20240229": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
70
|
-
"claude-3-sonnet-20240229": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
71
|
-
"claude-fable-5": CONTEXT_1M_128K,
|
|
72
|
-
"claude-haiku-4-5": CONTEXT_200K_64K,
|
|
73
|
-
"claude-haiku-4-5-20251001": CONTEXT_200K_64K,
|
|
74
|
-
"claude-opus-4-0": CONTEXT_200K_32K,
|
|
75
|
-
"claude-opus-4-1": CONTEXT_200K_32K,
|
|
76
|
-
"claude-opus-4-1-20250805": CONTEXT_200K_32K,
|
|
77
|
-
"claude-opus-4-20250514": CONTEXT_200K_32K,
|
|
78
|
-
"claude-opus-4-5": CONTEXT_200K_64K,
|
|
79
|
-
"claude-opus-4-5-20251101": CONTEXT_200K_64K,
|
|
80
|
-
"claude-opus-4-6": CONTEXT_1M_128K,
|
|
81
|
-
"claude-opus-4-7": CONTEXT_1M_128K,
|
|
82
|
-
"claude-opus-4-8": CONTEXT_1M_128K,
|
|
83
|
-
"claude-sonnet-4-0": CONTEXT_200K_64K,
|
|
84
|
-
"claude-sonnet-4-20250514": CONTEXT_200K_64K,
|
|
85
|
-
"claude-sonnet-4-5": CONTEXT_200K_64K,
|
|
86
|
-
"claude-sonnet-4-5-20250929": CONTEXT_200K_64K,
|
|
87
|
-
"claude-sonnet-4-6": { contextWindow: 1e6, maxOutputTokens: 64e3 },
|
|
88
|
-
"claude-sonnet-5": CONTEXT_1M_128K
|
|
89
|
-
};
|
|
90
|
-
|
|
91
59
|
// src/anthropic/completion.ts
|
|
92
60
|
var DEFAULT_MAX_TOKENS = 1024;
|
|
93
61
|
var AnthropicCompletionModel = class {
|
|
94
|
-
constructor(client,
|
|
62
|
+
constructor(client, modelId, contextLimits) {
|
|
95
63
|
this.client = client;
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
64
|
+
this.modelId = modelId;
|
|
65
|
+
this.contextLimits = contextLimits;
|
|
98
66
|
}
|
|
99
67
|
client;
|
|
100
|
-
|
|
101
|
-
|
|
68
|
+
modelId;
|
|
69
|
+
contextLimits;
|
|
102
70
|
provider = "anthropic";
|
|
103
71
|
capabilities = {
|
|
104
72
|
streaming: true,
|
|
@@ -109,33 +77,31 @@ var AnthropicCompletionModel = class {
|
|
|
109
77
|
outputSchema: false,
|
|
110
78
|
reasoning: true
|
|
111
79
|
};
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
model,
|
|
115
|
-
ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,
|
|
116
|
-
this.metadataOptions.modelOverrides
|
|
117
|
-
);
|
|
80
|
+
modelInfo() {
|
|
81
|
+
return this.contextLimits === void 0 ? void 0 : { modelId: this.modelId, context: this.contextLimits };
|
|
118
82
|
}
|
|
119
83
|
traceRequest(request, options = {}) {
|
|
120
|
-
const params = toAnthropicMessagesParams(this.
|
|
84
|
+
const params = toAnthropicMessagesParams(this.modelId, request);
|
|
121
85
|
if (options.stream === true) {
|
|
122
86
|
params.stream = true;
|
|
123
87
|
}
|
|
124
88
|
return providerRequestSummary(params, request, options);
|
|
125
89
|
}
|
|
126
|
-
async completion(request) {
|
|
90
|
+
async completion(request, options) {
|
|
127
91
|
assertCompletionRequestSupported(this, request);
|
|
128
|
-
const params = toAnthropicMessagesParams(this.
|
|
129
|
-
const response = await this.
|
|
130
|
-
return withContextUsage(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
92
|
+
const params = toAnthropicMessagesParams(this.modelId, request);
|
|
93
|
+
const response = await this.createMessage(params, anthropicRequestOptions(options));
|
|
94
|
+
return withContextUsage(fromAnthropicMessage(response), this.modelInfo());
|
|
95
|
+
}
|
|
96
|
+
createMessage(params, options) {
|
|
97
|
+
const messages = this.client.messages;
|
|
98
|
+
const create = messages.create;
|
|
99
|
+
return create.call(messages, params, options);
|
|
134
100
|
}
|
|
135
|
-
async *streamCompletion(request) {
|
|
101
|
+
async *streamCompletion(request, options) {
|
|
136
102
|
assertCompletionRequestSupported(this, request, { streaming: true });
|
|
137
|
-
const params = { ...toAnthropicMessagesParams(this.
|
|
138
|
-
const stream = await this.
|
|
103
|
+
const params = { ...toAnthropicMessagesParams(this.modelId, request), stream: true };
|
|
104
|
+
const stream = await this.createMessage(params, anthropicRequestOptions(options));
|
|
139
105
|
const toolIdsByIndex = /* @__PURE__ */ new Map();
|
|
140
106
|
const blocksWithInitialToolInput = /* @__PURE__ */ new Set();
|
|
141
107
|
const streamUsage = Usage.empty();
|
|
@@ -170,10 +136,7 @@ var AnthropicCompletionModel = class {
|
|
|
170
136
|
} : mapped;
|
|
171
137
|
const streamMapped = usageMapped.type === "final" ? {
|
|
172
138
|
...usageMapped,
|
|
173
|
-
response: withContextUsage(
|
|
174
|
-
usageMapped.response,
|
|
175
|
-
this.getModelInfo(request.model ?? this.defaultModel)
|
|
176
|
-
)
|
|
139
|
+
response: withContextUsage(usageMapped.response, this.modelInfo())
|
|
177
140
|
} : usageMapped;
|
|
178
141
|
if (streamMapped.type === "tool_call_delta" && streamMapped.argumentsDelta !== void 0 && isPlainObject(event) && event.type === "content_block_delta" && blocksWithInitialToolInput.has(numberFrom(event.index))) {
|
|
179
142
|
continue;
|
|
@@ -196,10 +159,7 @@ var AnthropicCompletionModel = class {
|
|
|
196
159
|
}
|
|
197
160
|
yield {
|
|
198
161
|
type: "final",
|
|
199
|
-
response: withContextUsage(
|
|
200
|
-
response,
|
|
201
|
-
this.getModelInfo(request.model ?? this.defaultModel)
|
|
202
|
-
)
|
|
162
|
+
response: withContextUsage(response, this.modelInfo())
|
|
203
163
|
};
|
|
204
164
|
}
|
|
205
165
|
}
|
|
@@ -286,14 +246,16 @@ function copyUsage(usage) {
|
|
|
286
246
|
...usage.details === void 0 ? {} : { details: { ...usage.details } }
|
|
287
247
|
};
|
|
288
248
|
}
|
|
289
|
-
function toAnthropicMessagesParams(
|
|
249
|
+
function toAnthropicMessagesParams(modelId, request) {
|
|
290
250
|
const messages = requestMessages(request);
|
|
291
251
|
const system = systemFromMessages(request, messages);
|
|
292
252
|
const params = {
|
|
293
|
-
|
|
253
|
+
...isPlainObject(request.providerOptions) ? request.providerOptions : {},
|
|
254
|
+
model: modelId,
|
|
294
255
|
max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
295
256
|
messages: messages.flatMap(messageToAnthropicMessages)
|
|
296
257
|
};
|
|
258
|
+
delete params.tools;
|
|
297
259
|
if (system !== void 0) {
|
|
298
260
|
params.system = system;
|
|
299
261
|
}
|
|
@@ -306,11 +268,11 @@ function toAnthropicMessagesParams(defaultModel, request) {
|
|
|
306
268
|
if (request.toolChoice !== void 0) {
|
|
307
269
|
params.tool_choice = toolChoiceToAnthropic(request.toolChoice);
|
|
308
270
|
}
|
|
309
|
-
if (request.additionalParams !== void 0 && isPlainObject(request.additionalParams)) {
|
|
310
|
-
Object.assign(params, request.additionalParams);
|
|
311
|
-
}
|
|
312
271
|
return params;
|
|
313
272
|
}
|
|
273
|
+
function anthropicRequestOptions(options) {
|
|
274
|
+
return { signal: options?.abortSignal, maxRetries: 0 };
|
|
275
|
+
}
|
|
314
276
|
function providerRequestSummary(params, request, options) {
|
|
315
277
|
return compactJsonObject({
|
|
316
278
|
provider: "anthropic",
|
|
@@ -325,7 +287,7 @@ function providerRequestSummary(params, request, options) {
|
|
|
325
287
|
temperature: request.temperature,
|
|
326
288
|
maxTokens: request.maxTokens ?? numberFrom(params.max_tokens),
|
|
327
289
|
toolChoice: toolChoiceSummary(request.toolChoice),
|
|
328
|
-
|
|
290
|
+
providerOptionKeys: isPlainObject(request.providerOptions) ? Object.keys(request.providerOptions).sort() : void 0
|
|
329
291
|
});
|
|
330
292
|
}
|
|
331
293
|
function toolChoiceSummary(toolChoice) {
|
|
@@ -365,19 +327,29 @@ function fromAnthropicMessage(response) {
|
|
|
365
327
|
continue;
|
|
366
328
|
}
|
|
367
329
|
if (block.type === "text" && typeof block.text === "string") {
|
|
368
|
-
choice.push(
|
|
330
|
+
choice.push({ type: "text", text: block.text });
|
|
369
331
|
}
|
|
370
332
|
if (block.type === "thinking" && typeof block.thinking === "string") {
|
|
371
333
|
const text = typeof block.signature === "string" ? { type: "text", text: block.thinking, signature: block.signature } : { type: "text", text: block.thinking };
|
|
372
|
-
choice.push(
|
|
334
|
+
choice.push({ type: "reasoning", text: block.thinking, details: [text] });
|
|
373
335
|
}
|
|
374
336
|
if (block.type === "redacted_thinking" && typeof block.data === "string") {
|
|
375
|
-
choice.push(
|
|
337
|
+
choice.push({
|
|
338
|
+
type: "reasoning",
|
|
339
|
+
text: "",
|
|
340
|
+
details: [{ type: "redacted", data: block.data }]
|
|
341
|
+
});
|
|
376
342
|
}
|
|
377
343
|
if (block.type === "tool_use") {
|
|
378
344
|
const id = typeof block.id === "string" ? block.id : crypto.randomUUID();
|
|
379
345
|
const name = typeof block.name === "string" ? block.name : "";
|
|
380
|
-
choice.push(
|
|
346
|
+
choice.push({
|
|
347
|
+
type: "tool-call",
|
|
348
|
+
toolCallId: id,
|
|
349
|
+
callId: id,
|
|
350
|
+
toolName: name,
|
|
351
|
+
input: toJsonValue(block.input)
|
|
352
|
+
});
|
|
381
353
|
}
|
|
382
354
|
}
|
|
383
355
|
const usageSource = isPlainObject(raw.usage) ? raw.usage : {};
|
|
@@ -491,6 +463,9 @@ function messageToAnthropicMessages(message) {
|
|
|
491
463
|
return [];
|
|
492
464
|
}
|
|
493
465
|
if (message.role === "user") {
|
|
466
|
+
if (typeof message.content === "string") {
|
|
467
|
+
return [{ role: "user", content: message.content }];
|
|
468
|
+
}
|
|
494
469
|
return [
|
|
495
470
|
{
|
|
496
471
|
role: "user",
|
|
@@ -509,25 +484,27 @@ function messageToAnthropicMessages(message) {
|
|
|
509
484
|
return [
|
|
510
485
|
{
|
|
511
486
|
role: "assistant",
|
|
512
|
-
content: message.content.flatMap((content) => {
|
|
487
|
+
content: typeof message.content === "string" ? message.content : message.content.flatMap((content) => {
|
|
513
488
|
if (content.type === "text") {
|
|
514
489
|
return [{ type: "text", text: content.text }];
|
|
515
490
|
}
|
|
516
|
-
if (content.type === "
|
|
491
|
+
if (content.type === "tool-call") {
|
|
517
492
|
return [
|
|
518
493
|
{
|
|
519
494
|
type: "tool_use",
|
|
520
|
-
id: content.callId ?? content.
|
|
521
|
-
name: content.
|
|
522
|
-
input: content.
|
|
495
|
+
id: content.callId ?? content.toolCallId,
|
|
496
|
+
name: content.toolName,
|
|
497
|
+
input: content.input
|
|
523
498
|
}
|
|
524
499
|
];
|
|
525
500
|
}
|
|
526
|
-
if (content.type === "reasoning" && content.
|
|
527
|
-
return content.
|
|
501
|
+
if (content.type === "reasoning" && content.details !== void 0) {
|
|
502
|
+
return content.details.flatMap(reasoningContentToAnthropicBlocks);
|
|
528
503
|
}
|
|
529
|
-
if (content.type === "image") {
|
|
530
|
-
throw new Error(
|
|
504
|
+
if (content.type === "image" || content.type === "file") {
|
|
505
|
+
throw new Error(
|
|
506
|
+
"Anthropic Messages does not support image or file content in assistant history"
|
|
507
|
+
);
|
|
531
508
|
}
|
|
532
509
|
return [];
|
|
533
510
|
})
|
|
@@ -535,11 +512,15 @@ function messageToAnthropicMessages(message) {
|
|
|
535
512
|
];
|
|
536
513
|
}
|
|
537
514
|
function toolContentToAnthropicBlock(content) {
|
|
538
|
-
|
|
515
|
+
const block = {
|
|
539
516
|
type: "tool_result",
|
|
540
|
-
tool_use_id: content.callId ?? content.
|
|
541
|
-
content:
|
|
517
|
+
tool_use_id: content.callId ?? content.toolCallId,
|
|
518
|
+
content: toolResultToAnthropicContent(content)
|
|
542
519
|
};
|
|
520
|
+
if (content.output.type === "error-text" || content.output.type === "error-json" || content.output.type === "execution-denied") {
|
|
521
|
+
block.is_error = true;
|
|
522
|
+
}
|
|
523
|
+
return block;
|
|
543
524
|
}
|
|
544
525
|
function toolResultContentToAnthropicContent(content) {
|
|
545
526
|
if (content.every((item) => item.type === "text")) {
|
|
@@ -549,16 +530,22 @@ function toolResultContentToAnthropicContent(content) {
|
|
|
549
530
|
if (item.type === "text") {
|
|
550
531
|
return { type: "text", text: item.text };
|
|
551
532
|
}
|
|
552
|
-
return
|
|
553
|
-
type: "image",
|
|
554
|
-
source: {
|
|
555
|
-
type: "base64",
|
|
556
|
-
media_type: item.mediaType ?? "image/png",
|
|
557
|
-
data: item.data
|
|
558
|
-
}
|
|
559
|
-
};
|
|
533
|
+
return fileToAnthropicBlock(item);
|
|
560
534
|
});
|
|
561
535
|
}
|
|
536
|
+
function toolResultToAnthropicContent(content) {
|
|
537
|
+
const output = content.output;
|
|
538
|
+
if (output.type === "text" || output.type === "error-text") {
|
|
539
|
+
return output.value;
|
|
540
|
+
}
|
|
541
|
+
if (output.type === "json" || output.type === "error-json") {
|
|
542
|
+
return JSON.stringify(output.value);
|
|
543
|
+
}
|
|
544
|
+
if (output.type === "execution-denied") {
|
|
545
|
+
return output.reason ?? "Tool execution was denied.";
|
|
546
|
+
}
|
|
547
|
+
return toolResultContentToAnthropicContent(output.value);
|
|
548
|
+
}
|
|
562
549
|
function reasoningContentToAnthropicBlocks(content) {
|
|
563
550
|
if (content.type === "text" || content.type === "summary") {
|
|
564
551
|
const block = {
|
|
@@ -582,18 +569,18 @@ function userContentToAnthropicBlock(content) {
|
|
|
582
569
|
if (content.type === "image") {
|
|
583
570
|
return imageToAnthropicBlock(content);
|
|
584
571
|
}
|
|
585
|
-
if (content.type === "
|
|
586
|
-
return
|
|
572
|
+
if (content.type === "file") {
|
|
573
|
+
return fileToAnthropicBlock(content);
|
|
587
574
|
}
|
|
588
575
|
throw new Error("Tool results must be mapped before user content blocks");
|
|
589
576
|
}
|
|
590
577
|
function imageToAnthropicBlock(image) {
|
|
591
|
-
if (image.
|
|
578
|
+
if (image.image.type === "url") {
|
|
592
579
|
return {
|
|
593
580
|
type: "image",
|
|
594
581
|
source: {
|
|
595
582
|
type: "url",
|
|
596
|
-
url: image.
|
|
583
|
+
url: image.image.url
|
|
597
584
|
}
|
|
598
585
|
};
|
|
599
586
|
}
|
|
@@ -601,24 +588,31 @@ function imageToAnthropicBlock(image) {
|
|
|
601
588
|
type: "image",
|
|
602
589
|
source: {
|
|
603
590
|
type: "base64",
|
|
604
|
-
media_type: image.
|
|
605
|
-
data: image.
|
|
591
|
+
media_type: image.mediaType ?? "image/png",
|
|
592
|
+
data: image.image.data
|
|
606
593
|
}
|
|
607
594
|
};
|
|
608
595
|
}
|
|
609
|
-
function
|
|
610
|
-
if (
|
|
611
|
-
return { type: "text", text:
|
|
596
|
+
function fileToAnthropicBlock(file) {
|
|
597
|
+
if (file.data.type === "text") {
|
|
598
|
+
return { type: "text", text: file.data.text };
|
|
599
|
+
}
|
|
600
|
+
if (file.mediaType.startsWith("image/")) {
|
|
601
|
+
return imageToAnthropicBlock({
|
|
602
|
+
type: "image",
|
|
603
|
+
image: file.data,
|
|
604
|
+
mediaType: file.mediaType
|
|
605
|
+
});
|
|
612
606
|
}
|
|
613
|
-
if (
|
|
614
|
-
throw new Error("Anthropic Messages only supports PDF
|
|
607
|
+
if (file.mediaType !== "application/pdf") {
|
|
608
|
+
throw new Error("Anthropic Messages only supports image and PDF file attachments");
|
|
615
609
|
}
|
|
616
|
-
if (
|
|
610
|
+
if (file.data.type === "url") {
|
|
617
611
|
return {
|
|
618
612
|
type: "document",
|
|
619
613
|
source: {
|
|
620
614
|
type: "url",
|
|
621
|
-
url:
|
|
615
|
+
url: file.data.url
|
|
622
616
|
}
|
|
623
617
|
};
|
|
624
618
|
}
|
|
@@ -626,8 +620,8 @@ function documentToAnthropicBlock(document) {
|
|
|
626
620
|
type: "document",
|
|
627
621
|
source: {
|
|
628
622
|
type: "base64",
|
|
629
|
-
media_type:
|
|
630
|
-
data:
|
|
623
|
+
media_type: file.mediaType,
|
|
624
|
+
data: file.data.data
|
|
631
625
|
}
|
|
632
626
|
};
|
|
633
627
|
}
|
|
@@ -687,21 +681,70 @@ function toolCallDelta(id, values) {
|
|
|
687
681
|
return event;
|
|
688
682
|
}
|
|
689
683
|
|
|
684
|
+
// src/anthropic/models.ts
|
|
685
|
+
var CONTEXT_200K_32K = { contextWindow: 2e5, maxOutputTokens: 32e3 };
|
|
686
|
+
var CONTEXT_200K_64K = { contextWindow: 2e5, maxOutputTokens: 64e3 };
|
|
687
|
+
var CONTEXT_1M_128K = { contextWindow: 1e6, maxOutputTokens: 128e3 };
|
|
688
|
+
var ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS = {
|
|
689
|
+
"claude-3-5-sonnet-20240620": { contextWindow: 2e5, maxOutputTokens: 8192 },
|
|
690
|
+
"claude-3-5-sonnet-20241022": { contextWindow: 2e5, maxOutputTokens: 8192 },
|
|
691
|
+
"claude-3-7-sonnet-20250219": CONTEXT_200K_64K,
|
|
692
|
+
"claude-3-haiku-20240307": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
693
|
+
"claude-3-opus-20240229": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
694
|
+
"claude-3-sonnet-20240229": { contextWindow: 2e5, maxOutputTokens: 4096 },
|
|
695
|
+
"claude-fable-5": CONTEXT_1M_128K,
|
|
696
|
+
"claude-haiku-4-5": CONTEXT_200K_64K,
|
|
697
|
+
"claude-haiku-4-5-20251001": CONTEXT_200K_64K,
|
|
698
|
+
"claude-opus-4-0": CONTEXT_200K_32K,
|
|
699
|
+
"claude-opus-4-1": CONTEXT_200K_32K,
|
|
700
|
+
"claude-opus-4-1-20250805": CONTEXT_200K_32K,
|
|
701
|
+
"claude-opus-4-20250514": CONTEXT_200K_32K,
|
|
702
|
+
"claude-opus-4-5": CONTEXT_200K_64K,
|
|
703
|
+
"claude-opus-4-5-20251101": CONTEXT_200K_64K,
|
|
704
|
+
"claude-opus-4-6": CONTEXT_1M_128K,
|
|
705
|
+
"claude-opus-4-7": CONTEXT_1M_128K,
|
|
706
|
+
"claude-opus-4-8": CONTEXT_1M_128K,
|
|
707
|
+
"claude-sonnet-4-0": CONTEXT_200K_64K,
|
|
708
|
+
"claude-sonnet-4-20250514": CONTEXT_200K_64K,
|
|
709
|
+
"claude-sonnet-4-5": CONTEXT_200K_64K,
|
|
710
|
+
"claude-sonnet-4-5-20250929": CONTEXT_200K_64K,
|
|
711
|
+
"claude-sonnet-4-6": { contextWindow: 1e6, maxOutputTokens: 64e3 },
|
|
712
|
+
"claude-sonnet-5": CONTEXT_1M_128K
|
|
713
|
+
};
|
|
714
|
+
|
|
690
715
|
// src/anthropic/client.ts
|
|
691
716
|
var AnthropicClient = class {
|
|
692
|
-
|
|
693
|
-
constructor(options
|
|
694
|
-
|
|
717
|
+
sdk;
|
|
718
|
+
constructor(options) {
|
|
719
|
+
if (options.client !== void 0) {
|
|
720
|
+
rejectManagedOptionsWithInjectedClient(options, ["apiKey", "baseUrl"]);
|
|
721
|
+
this.sdk = options.client;
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
this.sdk = new Anthropic({
|
|
695
725
|
apiKey: requireApiKey(options.apiKey),
|
|
696
|
-
baseURL: options.baseUrl
|
|
726
|
+
baseURL: options.baseUrl,
|
|
727
|
+
maxRetries: 0
|
|
697
728
|
});
|
|
698
729
|
}
|
|
699
|
-
completionModel(
|
|
700
|
-
|
|
730
|
+
completionModel(options) {
|
|
731
|
+
const modelId = requireModelId(options.modelId);
|
|
732
|
+
return new AnthropicCompletionModel(
|
|
733
|
+
this.sdk,
|
|
734
|
+
modelId,
|
|
735
|
+
resolveModelContextLimits(
|
|
736
|
+
modelId,
|
|
737
|
+
ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,
|
|
738
|
+
options.contextLimits
|
|
739
|
+
)
|
|
740
|
+
);
|
|
701
741
|
}
|
|
702
|
-
async listModels() {
|
|
742
|
+
async listModels(options = {}) {
|
|
703
743
|
try {
|
|
704
|
-
const response = await this.
|
|
744
|
+
const response = await this.sdk.models.list(void 0, {
|
|
745
|
+
signal: options.abortSignal,
|
|
746
|
+
maxRetries: 0
|
|
747
|
+
});
|
|
705
748
|
const data = (await collectModelsFromResponse(response)).map(toListedModel).filter(isListedModel);
|
|
706
749
|
return { data };
|
|
707
750
|
} catch (error) {
|
|
@@ -709,14 +752,26 @@ var AnthropicClient = class {
|
|
|
709
752
|
}
|
|
710
753
|
}
|
|
711
754
|
};
|
|
755
|
+
function rejectManagedOptionsWithInjectedClient(options, keys) {
|
|
756
|
+
const conflict = keys.find((key) => key in options);
|
|
757
|
+
if (conflict !== void 0) {
|
|
758
|
+
throw new TypeError(`AnthropicClient cannot combine client with ${conflict}.`);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
712
761
|
function requireApiKey(apiKey) {
|
|
713
|
-
if (apiKey === void 0 || apiKey.length === 0) {
|
|
762
|
+
if (apiKey === void 0 || apiKey.trim().length === 0) {
|
|
714
763
|
throw new Error(
|
|
715
764
|
"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient."
|
|
716
765
|
);
|
|
717
766
|
}
|
|
718
767
|
return apiKey;
|
|
719
768
|
}
|
|
769
|
+
function requireModelId(modelId) {
|
|
770
|
+
if (modelId.trim().length === 0) {
|
|
771
|
+
throw new TypeError("modelId must be a non-empty string");
|
|
772
|
+
}
|
|
773
|
+
return modelId;
|
|
774
|
+
}
|
|
720
775
|
async function collectModelsFromResponse(response) {
|
|
721
776
|
if (isAsyncIterable(response)) {
|
|
722
777
|
const models = [];
|
|
@@ -811,19 +866,44 @@ function isAsyncIterable(value) {
|
|
|
811
866
|
import {
|
|
812
867
|
AnthropicVertex
|
|
813
868
|
} from "@anthropic-ai/vertex-sdk";
|
|
869
|
+
import {
|
|
870
|
+
resolveModelContextLimits as resolveModelContextLimits2
|
|
871
|
+
} from "@anvia/core/completion";
|
|
814
872
|
var AnthropicVertexClient = class {
|
|
815
|
-
|
|
816
|
-
constructor(options
|
|
873
|
+
sdk;
|
|
874
|
+
constructor(options) {
|
|
817
875
|
const { client, ...clientOptions } = options;
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
876
|
+
if (client !== void 0) {
|
|
877
|
+
const conflict = Object.keys(clientOptions)[0];
|
|
878
|
+
if (conflict !== void 0) {
|
|
879
|
+
throw new TypeError(`AnthropicVertexClient cannot combine client with ${conflict}.`);
|
|
880
|
+
}
|
|
881
|
+
this.sdk = client;
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
this.sdk = new AnthropicVertex({ ...clientOptions, maxRetries: 0 });
|
|
885
|
+
}
|
|
886
|
+
completionModel(options) {
|
|
887
|
+
const modelId = requireModelId2(options.modelId);
|
|
888
|
+
return new AnthropicCompletionModel(
|
|
889
|
+
this.sdk,
|
|
890
|
+
modelId,
|
|
891
|
+
resolveModelContextLimits2(
|
|
892
|
+
modelId,
|
|
893
|
+
ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,
|
|
894
|
+
options.contextLimits
|
|
895
|
+
)
|
|
896
|
+
);
|
|
822
897
|
}
|
|
823
898
|
};
|
|
899
|
+
function requireModelId2(modelId) {
|
|
900
|
+
if (modelId.trim().length === 0) {
|
|
901
|
+
throw new TypeError("modelId must be a non-empty string");
|
|
902
|
+
}
|
|
903
|
+
return modelId;
|
|
904
|
+
}
|
|
824
905
|
export {
|
|
825
906
|
AnthropicClient,
|
|
826
|
-
AnthropicCompletionModel,
|
|
827
907
|
AnthropicVertexClient,
|
|
828
908
|
anthropic_exports as anthropic
|
|
829
909
|
};
|
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 { 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 CompletionModelInfo,\n type CompletionModelMetadataOptions,\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 resolveCompletionModelInfo,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n type ToolResultContent,\n Usage,\n type UserContent,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelName,\n} 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 private readonly metadataOptions: CompletionModelMetadataOptions = {},\n ) {}\n\n getModelInfo(\n model: AnthropicCompletionModelName = this.defaultModel,\n ): CompletionModelInfo<AnthropicCompletionModelName> | undefined {\n return resolveCompletionModelInfo(\n model,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n this.metadataOptions.modelOverrides,\n );\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 withContextUsage(\n fromAnthropicMessage(response),\n this.getModelInfo(request.model ?? this.defaultModel),\n );\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 usageMapped =\n mapped.type === \"final\" && hasStreamUsage\n ? {\n ...mapped,\n response: {\n ...mapped.response,\n usage: mergeUsage(mapped.response.usage, streamUsage, streamUsageFields),\n },\n }\n : mapped;\n const streamMapped =\n usageMapped.type === \"final\"\n ? {\n ...usageMapped,\n response: withContextUsage(\n usageMapped.response,\n this.getModelInfo(request.model ?? this.defaultModel),\n ),\n }\n : usageMapped;\n if (\n streamMapped.type === \"tool_call_delta\" &&\n streamMapped.argumentsDelta !== undefined &&\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n blocksWithInitialToolInput.has(numberFrom(event.index))\n ) {\n continue;\n }\n if (streamMapped.type === \"tool_call_delta\" && streamMapped.id.startsWith(\"tool_\")) {\n const index = Number(streamMapped.id.slice(\"tool_\".length));\n yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };\n } else {\n yield streamMapped;\n }\n }\n if (isPlainObject(event) && event.type === \"message_stop\" && !isPlainObject(event.message)) {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(streamUsage),\n rawResponse: event,\n };\n if (streamMessageId !== undefined) {\n response.messageId = streamMessageId;\n }\n yield {\n type: \"final\",\n response: withContextUsage(\n response,\n this.getModelInfo(request.model ?? this.defaultModel),\n ),\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 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 type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownAnthropicCompletionModelName =\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 AnthropicCompletionModelName = ModelId<KnownAnthropicCompletionModelName>;\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<KnownAnthropicCompletionModelName, ModelContextLimits>>;\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":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,OAAO,eAAe;AACtB;AAAA,EAGE;AAAA,OACK;;;ACHP;AAAA,EACE;AAAA,EAEA;AAAA,EAaA;AAAA,EAMA;AAAA,EAEA;AAAA,OACK;;;AC3BP;AAAA,EAEE;AAAA,EAEA;AAAA,OACK;AAMA,SAAS,uBACd,SACA,UAAyC,CAAC,GAC3B;AACf,QAAM,WAA0B,CAAC;AACjC,MAAI,QAAQ,gCAAgC,QAAQ,QAAQ,iBAAiB,QAAW;AACtF,aAAS,KAAK,QAAQ,OAAO,QAAQ,YAAY,CAAC;AAAA,EACpD;AACA,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,QAAM,YAAY,mBAAmB,QAAQ,SAAS;AACtD,MAAI,cAAc,QAAW;AAC3B,aAAS,KAAK,SAAS;AAAA,EACzB;AACA,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,SAAO;AACT;;;ACxBO,SAAS,cAAc,OAAkD;AAC9E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,WAAW,OAAwB;AACjD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEO,SAAS,WAAW,OAAoC;AAC7D,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;;;ACmBA,IAAM,mBAAmB,EAAE,eAAe,KAAS,iBAAiB,KAAO;AAC3E,IAAM,mBAAmB,EAAE,eAAe,KAAS,iBAAiB,KAAO;AAC3E,IAAM,kBAAkB,EAAE,eAAe,KAAW,iBAAiB,MAAQ;AAEtE,IAAM,4CAA4C;AAAA,EACvD,8BAA8B,EAAE,eAAe,KAAS,iBAAiB,KAAM;AAAA,EAC/E,8BAA8B,EAAE,eAAe,KAAS,iBAAiB,KAAM;AAAA,EAC/E,8BAA8B;AAAA,EAC9B,2BAA2B,EAAE,eAAe,KAAS,iBAAiB,KAAM;AAAA,EAC5E,0BAA0B,EAAE,eAAe,KAAS,iBAAiB,KAAM;AAAA,EAC3E,4BAA4B,EAAE,eAAe,KAAS,iBAAiB,KAAM;AAAA,EAC7E,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,6BAA6B;AAAA,EAC7B,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,8BAA8B;AAAA,EAC9B,qBAAqB,EAAE,eAAe,KAAW,iBAAiB,KAAO;AAAA,EACzE,mBAAmB;AACrB;;;AHrBA,IAAM,qBAAqB;AAEpB,IAAM,2BAAN,MAEP;AAAA,EAYE,YACmB,QACR,eAA6C,4BACrC,kBAAkD,CAAC,GACpE;AAHiB;AACR;AACQ;AAAA,EAChB;AAAA,EAHgB;AAAA,EACR;AAAA,EACQ;AAAA,EAdV,WAAW;AAAA,EACX,eAA4C;AAAA,IACnD,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EAQA,aACE,QAAsC,KAAK,cACoB;AAC/D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,aACE,SACA,UAA4C,CAAC,GACjC;AACZ,UAAM,SAAS,0BAA0B,KAAK,cAAc,OAAO;AACnE,QAAI,QAAQ,WAAW,MAAM;AAC3B,aAAO,SAAS;AAAA,IAClB;AACA,WAAO,uBAAuB,QAAQ,SAAS,OAAO;AAAA,EACxD;AAAA,EAEA,MAAM,WACJ,SAC6B;AAC7B,qCAAiC,MAAM,OAAO;AAC9C,UAAM,SAAS,0BAA0B,KAAK,cAAc,OAAO;AACnE,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,OAAO,MAAe;AAClE,WAAO;AAAA,MACL,qBAAqB,QAAQ;AAAA,MAC7B,KAAK,aAAa,QAAQ,SAAS,KAAK,YAAY;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,OAAO,iBACL,SACsC;AACtC,qCAAiC,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AACnE,UAAM,SAAS,EAAE,GAAG,0BAA0B,KAAK,cAAc,OAAO,GAAG,QAAQ,KAAK;AACxF,UAAM,SAAS,MAAM,KAAK,OAAO,SAAS,OAAO,MAAe;AAChE,UAAM,iBAAiB,oBAAI,IAAoB;AAC/C,UAAM,6BAA6B,oBAAI,IAAY;AACnD,UAAM,cAAc,MAAM,MAAM;AAChC,UAAM,oBAAoB,gCAAgC;AAC1D,QAAI,iBAAiB;AACrB,QAAI;AACJ,qBAAiB,SAAS,QAA6C;AACrE,UAAI,cAAc,KAAK,KAAK,MAAM,SAAS,uBAAuB;AAChE,cAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,cAAM,QAAQ,cAAc,MAAM,aAAa,IAAI,MAAM,gBAAgB,CAAC;AAC1E,cAAM,KAAK,WAAW,MAAM,EAAE;AAC9B,YAAI,OAAO,QAAW;AACpB,yBAAe,IAAI,OAAO,EAAE;AAAA,QAC9B;AACA,YAAI,wBAAwB,MAAM,KAAK,MAAM,QAAW;AACtD,qCAA2B,IAAI,KAAK;AAAA,QACtC;AAAA,MACF;AACA,UAAI,cAAc,KAAK,GAAG;AACxB,YAAI,MAAM,SAAS,mBAAmB,cAAc,MAAM,OAAO,GAAG;AAClE,4BAAkB,WAAW,MAAM,QAAQ,EAAE,KAAK;AAAA,QACpD;AACA,yBACE,0BAA0B,OAAO,aAAa,iBAAiB,KAAK;AAAA,MACxE;AACA,iBAAW,UAAU,yBAAyB,KAAK,GAAG;AACpD,cAAM,cACJ,OAAO,SAAS,WAAW,iBACvB;AAAA,UACE,GAAG;AAAA,UACH,UAAU;AAAA,YACR,GAAG,OAAO;AAAA,YACV,OAAO,WAAW,OAAO,SAAS,OAAO,aAAa,iBAAiB;AAAA,UACzE;AAAA,QACF,IACA;AACN,cAAM,eACJ,YAAY,SAAS,UACjB;AAAA,UACE,GAAG;AAAA,UACH,UAAU;AAAA,YACR,YAAY;AAAA,YACZ,KAAK,aAAa,QAAQ,SAAS,KAAK,YAAY;AAAA,UACtD;AAAA,QACF,IACA;AACN,YACE,aAAa,SAAS,qBACtB,aAAa,mBAAmB,UAChC,cAAc,KAAK,KACnB,MAAM,SAAS,yBACf,2BAA2B,IAAI,WAAW,MAAM,KAAK,CAAC,GACtD;AACA;AAAA,QACF;AACA,YAAI,aAAa,SAAS,qBAAqB,aAAa,GAAG,WAAW,OAAO,GAAG;AAClF,gBAAM,QAAQ,OAAO,aAAa,GAAG,MAAM,QAAQ,MAAM,CAAC;AAC1D,gBAAM,EAAE,GAAG,cAAc,IAAI,eAAe,IAAI,KAAK,KAAK,aAAa,GAAG;AAAA,QAC5E,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AACA,UAAI,cAAc,KAAK,KAAK,MAAM,SAAS,kBAAkB,CAAC,cAAc,MAAM,OAAO,GAAG;AAC1F,cAAM,WAA+B;AAAA,UACnC,QAAQ,CAAC;AAAA,UACT,OAAO,UAAU,WAAW;AAAA,UAC5B,aAAa;AAAA,QACf;AACA,YAAI,oBAAoB,QAAW;AACjC,mBAAS,YAAY;AAAA,QACvB;AACA,cAAM;AAAA,UACJ,MAAM;AAAA,UACN,UAAU;AAAA,YACR;AAAA,YACA,KAAK,aAAa,QAAQ,SAAS,KAAK,YAAY;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,SAAS,kCAA8D;AACrE,SAAO;AAAA,IACL,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAC5B;AACF;AAEA,SAAS,0BACP,OACA,OACA,QACS;AACT,MAAI,UAAU;AACd,MAAI,sBAAsB,KAAK;AAAA,IAC7B;AAAA,IACA,MAAM,cAAc,MAAM,oBAAoB,MAAM;AAAA,EACtD;AAEA,MAAI,MAAM,SAAS,mBAAmB,cAAc,MAAM,OAAO,GAAG;AAClE,UAAM,SAAS,cAAc,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,QAAQ;AAC1E,QAAI,WAAW,QAAW;AACxB,UAAI,kBAAkB,QAAQ;AAC5B,8BAAsB,WAAW,OAAO,YAAY;AACpD,eAAO,cAAc;AACrB,kBAAU;AAAA,MACZ;AACA,UAAI,6BAA6B,QAAQ;AACvC,cAAM,oBAAoB,WAAW,OAAO,uBAAuB;AACnE,eAAO,oBAAoB;AAC3B,kBAAU;AAAA,MACZ;AACA,UAAI,iCAAiC,QAAQ;AAC3C,cAAM,2BAA2B,WAAW,OAAO,2BAA2B;AAC9E,eAAO,2BAA2B;AAClC,kBAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,iBAAiB;AAClC,UAAM,SAAS,cAAc,MAAM,KAAK,IAAI,MAAM,QAAQ;AAC1D,QAAI,WAAW,UAAa,mBAAmB,QAAQ;AACrD,YAAM,eAAe,KAAK,IAAI,MAAM,cAAc,WAAW,OAAO,aAAa,CAAC;AAClF,aAAO,eAAe;AACtB,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,SAAS;AACX,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,WAAW,MAAa,QAAe,QAA2C;AACzF,QAAM,0BAA0B,KAAK;AAAA,IACnC;AAAA,IACA,KAAK,cAAc,KAAK,oBAAoB,KAAK;AAAA,EACnD;AACA,QAAM,4BAA4B,KAAK;AAAA,IACrC;AAAA,IACA,OAAO,cAAc,OAAO,oBAAoB,OAAO;AAAA,EACzD;AACA,QAAM,sBAAsB,OAAO,cAC/B,4BACA;AACJ,QAAM,eAAe,OAAO,eAAe,OAAO,eAAe,KAAK;AACtE,QAAM,oBAAoB,OAAO,oBAC7B,OAAO,oBACP,KAAK;AACT,QAAM,2BAA2B,OAAO,2BACpC,OAAO,2BACP,KAAK;AACT,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,UAAU,OAAqB;AACtC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,MAAM,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,EAAE;AAAA,EACzE;AACF;AAEO,SAAS,0BACd,cACA,SACuB;AACvB,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,SAAS,mBAAmB,SAAS,QAAQ;AACnD,QAAM,SAAgC;AAAA,IACpC,OAAO,QAAQ,SAAS;AAAA,IACxB,YAAY,QAAQ,aAAa;AAAA,IACjC,UAAU,SAAS,QAAQ,0BAA0B;AAAA,EACvD;AAEA,MAAI,WAAW,QAAW;AACxB,WAAO,SAAS;AAAA,EAClB;AAEA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,QAAQ,QAAQ,MAAM,IAAI,yBAAyB;AAAA,EAC5D;AAEA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO,cAAc,QAAQ;AAAA,EAC/B;AAEA,MAAI,QAAQ,eAAe,QAAW;AACpC,WAAO,cAAc,sBAAsB,QAAQ,UAAU;AAAA,EAC/D;AAEA,MAAI,QAAQ,qBAAqB,UAAa,cAAc,QAAQ,gBAAgB,GAAG;AACrF,WAAO,OAAO,QAAQ,QAAQ,gBAAgB;AAAA,EAChD;AAEA,SAAO;AACT;AAEA,SAAS,uBACP,QACA,SACA,SACY;AACZ,SAAO,kBAAkB;AAAA,IACvB,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ,QAAQ,WAAW;AAAA,IAC3B,OAAO,WAAW,OAAO,KAAK;AAAA,IAC9B,eAAe,OAAO,KAAK,MAAM,EAAE,KAAK;AAAA,IACxC,cAAc,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,SAAS,SAAS;AAAA,IACxE,WAAW,QAAQ,MAAM;AAAA,IACzB,WAAW,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,IAChD,WAAW,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,SAAS;AAAA,IACvE,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ,aAAa,WAAW,OAAO,UAAU;AAAA,IAC5D,YAAY,kBAAkB,QAAQ,UAAU;AAAA,IAChD,qBAAqB,cAAc,QAAQ,gBAAgB,IACvD,OAAO,KAAK,QAAQ,gBAAgB,EAAE,KAAK,IAC3C;AAAA,EACN,CAAC;AACH;AAEA,SAAS,kBAAkB,YAA2D;AACpF,MAAI,eAAe,UAAa,OAAO,eAAe,UAAU;AAC9D,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,WAAW,MAAM,MAAM,WAAW,KAAK;AACxD;AAEA,SAAS,kBAAkB,QAA6C;AACtE,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,UAAU,QAAW;AACvB,eAAO,CAAC;AAAA,MACV;AACA,aAAO,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,SAAyE;AAChG,SAAO,uBAAuB,OAAO;AACvC;AAEA,SAAS,mBACP,SACA,UACoB;AACpB,QAAM,iBAAiB,SAAS;AAAA,IAAQ,CAAC,YACvC,QAAQ,SAAS,WAAW,CAAC,QAAQ,OAAO,IAAI,CAAC;AAAA,EACnD;AACA,MAAI,QAAQ,iBAAiB,QAAW;AACtC,mBAAe,QAAQ,QAAQ,YAAY;AAAA,EAC7C;AACA,SAAO,eAAe,WAAW,IAAI,SAAY,eAAe,KAAK,MAAM;AAC7E;AAEO,SAAS,qBAAqB,UAAuC;AAC1E,QAAM,MAAM;AACZ,QAAM,UAAU,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,UAAU,CAAC;AAC5D,QAAM,SAAiC,CAAC;AAExC,aAAW,SAAS,SAAS;AAC3B,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,UAAU,OAAO,MAAM,SAAS,UAAU;AAC3D,aAAO,KAAK,iBAAiB,KAAK,MAAM,IAAI,CAAC;AAAA,IAC/C;AAEA,QAAI,MAAM,SAAS,cAAc,OAAO,MAAM,aAAa,UAAU;AACnE,YAAM,OACJ,OAAO,MAAM,cAAc,WACvB,EAAE,MAAM,QAAQ,MAAM,MAAM,UAAU,WAAW,MAAM,UAAU,IACjE,EAAE,MAAM,QAAQ,MAAM,MAAM,SAAS;AAC3C,aAAO,KAAK,iBAAiB,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAAA,IAC3D;AAEA,QAAI,MAAM,SAAS,uBAAuB,OAAO,MAAM,SAAS,UAAU;AACxE,aAAO,KAAK,iBAAiB,kBAAkB,MAAM,IAAI,CAAC;AAAA,IAC5D;AAEA,QAAI,MAAM,SAAS,YAAY;AAC7B,YAAM,KAAK,OAAO,MAAM,OAAO,WAAW,MAAM,KAAK,OAAO,WAAW;AACvE,YAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,aAAO,KAAK,iBAAiB,SAAS,IAAI,MAAM,YAAY,MAAM,KAAK,CAAC,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,cAAc,cAAc,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC;AAC5D,QAAM,QAAQ;AAAA,IACZ,WAAW,YAAY,YAAY;AAAA,IACnC,WAAW,YAAY,aAAa;AAAA,IACpC,WAAW,YAAY,uBAAuB;AAAA,IAC9C,WAAW,YAAY,2BAA2B;AAAA,EACpD;AACA,QAAM,SAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf;AAEA,MAAI,OAAO,IAAI,OAAO,UAAU;AAC9B,WAAO,YAAY,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;AAEA,SAAS,eACP,qBACA,cACA,mBACA,0BACO;AACP,QAAM,cAAc,sBAAsB,oBAAoB;AAC9D,QAAM,cAAc,cAAc;AAClC,SAAO;AAAA,IACL,GAAG,MAAM,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,yBAAyB;AAAA,MACzB,6BAA6B;AAAA,MAC7B,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB,OAAyC;AAChF,MAAI,CAAC,cAAc,KAAK,KAAK,OAAO,MAAM,SAAS,UAAU;AAC3D,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,MAAM,SAAS,mBAAmB,cAAc,MAAM,OAAO,GAAG;AAClE,UAAM,KAAK,WAAW,MAAM,QAAQ,EAAE;AACtC,WAAO,OAAO,SAAY,CAAC,IAAI,CAAC,EAAE,MAAM,cAAc,GAAG,CAAC;AAAA,EAC5D;AAEA,MAAI,MAAM,SAAS,yBAAyB,cAAc,MAAM,aAAa,GAAG;AAC9E,UAAM,QAAQ,MAAM;AACpB,QAAI,MAAM,SAAS,YAAY;AAC7B,aAAO;AAAA,QACL,cAAc,WAAW,MAAM,EAAE,KAAK,QAAQ,WAAW,MAAM,KAAK,CAAC,IAAI;AAAA,UACvE,MAAM,WAAW,MAAM,IAAI;AAAA,UAC3B,gBAAgB,wBAAwB,MAAM,KAAK;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI,MAAM,SAAS,uBAAuB,OAAO,MAAM,SAAS,UAAU;AACxE,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb,IAAI,YAAY,WAAW,MAAM,KAAK,CAAC;AAAA,UACvC,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,MAAM,SAAS,yBAAyB,cAAc,MAAM,KAAK,GAAG;AACtE,UAAM,QAAQ,MAAM;AACpB,QAAI,MAAM,SAAS,gBAAgB,OAAO,MAAM,SAAS,UAAU;AACjE,aAAO,CAAC,EAAE,MAAM,cAAc,OAAO,MAAM,KAAK,CAAC;AAAA,IACnD;AAEA,QAAI,MAAM,SAAS,oBAAoB,OAAO,MAAM,aAAa,UAAU;AACzE,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb,IAAI,YAAY,WAAW,MAAM,KAAK,CAAC;AAAA,UACvC,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,qBAAqB,OAAO,MAAM,cAAc,UAAU;AAC3E,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,IAAI,YAAY,WAAW,MAAM,KAAK,CAAC;AAAA,UACvC,aAAa;AAAA,UACb,WAAW,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,sBAAsB,OAAO,MAAM,iBAAiB,UAAU;AAC/E,aAAO;AAAA,QACL,cAAc,QAAQ,WAAW,MAAM,KAAK,CAAC,IAAI,EAAE,gBAAgB,MAAM,aAAa,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,kBAAkB,cAAc,MAAM,OAAO,GAAG;AACjE,WAAO,CAAC,EAAE,MAAM,SAAS,UAAU,qBAAqB,MAAM,OAAO,EAAE,CAAC;AAAA,EAC1E;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,WAAO,CAAC,EAAE,MAAM,SAAS,OAAO,MAAM,SAAS,MAAM,CAAC;AAAA,EACxD;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,2BAA2B,SAA0C;AAC5E,MAAI,QAAQ,SAAS,UAAU;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS,QAAQ,QAAQ,IAAI,2BAA2B;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS,QAAQ,QAAQ,IAAI,2BAA2B;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS,QAAQ,QAAQ,QAAQ,CAAC,YAAqC;AACrE,YAAI,QAAQ,SAAS,QAAQ;AAC3B,iBAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC9C;AAEA,YAAI,QAAQ,SAAS,aAAa;AAChC,iBAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,IAAI,QAAQ,UAAU,QAAQ;AAAA,cAC9B,MAAM,QAAQ,SAAS;AAAA,cACvB,OAAO,QAAQ,SAAS,aAAa,CAAC;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AAEA,YAAI,QAAQ,SAAS,eAAe,QAAQ,YAAY,QAAW;AACjE,iBAAO,QAAQ,QAAQ,QAAQ,iCAAiC;AAAA,QAClE;AAEA,YAAI,QAAQ,SAAS,SAAS;AAC5B,gBAAM,IAAI,MAAM,wEAAwE;AAAA,QAC1F;AAEA,eAAO,CAAC;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,4BAA4B,SAA6C;AAChF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa,QAAQ,UAAU,QAAQ;AAAA,IACvC,SAAS,oCAAoC,QAAQ,OAAO;AAAA,EAC9D;AACF;AAEA,SAAS,oCACP,SACkC;AAClC,MAAI,QAAQ,MAAM,CAAC,SAAS,KAAK,SAAS,MAAM,GAAG;AACjD,WAAO,QAAQ,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,IAAI;AAAA,EACnD;AAEA,SAAO,QAAQ,IAAI,CAAC,SAAS;AAC3B,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,IACzC;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,YAAY,KAAK,aAAa;AAAA,QAC9B,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,kCAAkC,SAAoD;AAC7F,MAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,WAAW;AACzD,UAAM,QAA+B;AAAA,MACnC,MAAM;AAAA,MACN,UAAU,QAAQ;AAAA,IACpB;AACA,QAAI,QAAQ,SAAS,UAAU,QAAQ,cAAc,QAAW;AAC9D,YAAM,YAAY,QAAQ;AAAA,IAC5B;AACA,WAAO,CAAC,KAAK;AAAA,EACf;AAEA,MAAI,QAAQ,SAAS,YAAY;AAC/B,WAAO,CAAC,EAAE,MAAM,qBAAqB,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC3D;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,4BAA4B,SAA6C;AAChF,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,EAAE,MAAM,QAAQ,MAAM,QAAQ,KAAK;AAAA,EAC5C;AAEA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO,sBAAsB,OAAO;AAAA,EACtC;AAEA,MAAI,QAAQ,SAAS,YAAY;AAC/B,WAAO,yBAAyB,OAAO;AAAA,EACzC;AAEA,QAAM,IAAI,MAAM,wDAAwD;AAC1E;AAEA,SAAS,sBAAsB,OAA4C;AACzE,MAAI,MAAM,OAAO,SAAS,OAAO;AAC/B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,MAAM,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,YAAY,MAAM,OAAO;AAAA,MACzB,MAAM,MAAM,OAAO;AAAA,IACrB;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,UAAkD;AAClF,MAAI,SAAS,OAAO,SAAS,QAAQ;AACnC,WAAO,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,KAAK;AAAA,EACpD;AAEA,MAAI,SAAS,OAAO,cAAc,mBAAmB;AACnD,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AAEA,MAAI,SAAS,OAAO,SAAS,OAAO;AAClC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,SAAS,OAAO;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,YAAY,SAAS,OAAO;AAAA,MAC5B,MAAM,SAAS,OAAO;AAAA,IACxB;AAAA,EACF;AACF;AAEA,SAAS,0BAA0B,MAA6C;AAC9E,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,cAAc,KAAK;AAAA,EACrB;AACF;AAEA,SAAS,sBAAsB,YAAiC;AAC9D,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,MAAI,eAAe,YAAY;AAC7B,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAEA,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,WAAW;AAAA,EACnB;AACF;AAEA,SAAS,YAAY,OAA2B;AAC9C,MACE,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,aACjB,MAAM,QAAQ,KAAK,KACnB,cAAc,KAAK,GACnB;AACA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,wBAAwB,OAAoC;AACnE,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,QAAQ,WAAW,KAAK,YAAY,MAAM;AAC5C,aAAO;AAAA,IACT;AACA,QAAI;AACF,WAAK,MAAM,OAAO;AAClB,aAAO;AAAA,IACT,QAAQ;AACN,aAAO,KAAK,UAAU,KAAK;AAAA,IAC7B;AAAA,EACF;AAEA,MAAI,cAAc,KAAK,KAAK,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,UAAU,YAAY,KAAK,CAAC;AAC1C;AAEA,SAAS,cACP,IACA,QACuB;AACvB,QAAM,QAA+B,EAAE,MAAM,mBAAmB,GAAG;AACnE,MAAI,OAAO,SAAS,OAAW,OAAM,OAAO,OAAO;AACnD,MAAI,OAAO,mBAAmB,OAAW,OAAM,iBAAiB,OAAO;AACvE,SAAO;AACT;;;ADpwBO,IAAM,kBAAN,MAAoD;AAAA,EAChD;AAAA,EAET,YAAY,UAAkC,CAAC,GAAG;AAChD,SAAK,SACH,QAAQ,UACR,IAAI,UAAU;AAAA,MACZ,QAAQ,cAAc,QAAQ,MAAM;AAAA,MACpC,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACL;AAAA,EAEA,gBACE,QAAsC,4BACZ;AAC1B,WAAO,IAAI,yBAAyB,KAAK,QAAQ,KAAK;AAAA,EACxD;AAAA,EAEA,MAAM,aAAiC;AACrC,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,OAAO,OAAO,KAAK;AAC/C,YAAM,QAAQ,MAAM,0BAA0B,QAAQ,GACnD,IAAI,aAAa,EACjB,OAAO,aAAa;AACvB,aAAO,EAAE,KAAK;AAAA,IAChB,SAAS,OAAO;AACd,YAAM,oBAAoB,aAAa,KAAK;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,SAAS,cAAc,QAAoC;AACzD,MAAI,WAAW,UAAa,OAAO,WAAW,GAAG;AAC/C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,0BAA0B,UAAuC;AAC9E,MAAI,gBAAgB,QAAQ,GAAG;AAC7B,UAAM,SAAoB,CAAC;AAC3B,qBAAiB,SAAS,UAAU;AAClC,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,IAAI,GAAG;AACtD,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,cAAc,OAAuD;AAC5E,MAAI,CAAC,SAAS,KAAK,KAAK,OAAO,MAAM,OAAO,UAAU;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,YACJ,OAAO,MAAM,eAAe,WACxB,sBAAsB,MAAM,UAAU,IACtC,OAAO,MAAM,eAAe,WAC1B,MAAM,aACN;AAER,QAAM,cAAyC;AAAA,IAC7C,IAAI,MAAM;AAAA,EACZ;AACA,MAAI,OAAO,MAAM,iBAAiB,UAAU;AAC1C,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,SAAS,UAAU;AAClC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,gBAAgB,UAAU;AACzC,gBAAY,cAAc,MAAM;AAAA,EAClC;AACA,MAAI,OAAO,MAAM,SAAS,UAAU;AAClC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,cAAc,QAAW;AAC3B,gBAAY,YAAY;AAAA,EAC1B;AACA,MAAI,OAAO,MAAM,aAAa,UAAU;AACtC,gBAAY,UAAU,MAAM;AAAA,EAC9B;AACA,MAAI,OAAO,MAAM,qBAAqB,UAAU;AAC9C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,MAAI,OAAO,MAAM,mBAAmB,UAAU;AAC5C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAmC;AAChE,QAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,SAAO,OAAO,MAAM,IAAI,IAAI,SAAY,KAAK,MAAM,OAAO,GAAI;AAChE;AAEA,SAAS,cACP,OACoC;AACpC,SAAO,UAAU;AACnB;AAEA,SAAS,oBAAoB,UAAkB,OAAmC;AAChF,MAAI,iBAAiB,mBAAmB;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,cAAc,KAAK;AACtC,SAAO,IAAI,kBAAkB,GAAG,QAAQ,0BAA0B,gBAAgB,KAAK,CAAC,IAAI;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,MAAM,WAAW,UAAU;AACpC,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,OAAO,MAAM,eAAe,UAAU;AACxC,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBAAgB,OAAiD;AACxE,SAAO,SAAS,KAAK,KAAK,OAAO,iBAAiB;AACpD;;;AKxKA;AAAA,EACE;AAAA,OAEK;AAQA,IAAM,wBAAN,MAA4B;AAAA,EACxB;AAAA,EAET,YAAY,UAAwC,CAAC,GAAG;AACtD,UAAM,EAAE,QAAQ,GAAG,cAAc,IAAI;AACrC,SAAK,SAAS,UAAU,IAAI,gBAAgB,aAAa;AAAA,EAC3D;AAAA,EAEA,gBACE,QAAsC,mBACZ;AAC1B,WAAO,IAAI,yBAAyB,KAAK,QAAQ,KAAK;AAAA,EACxD;AACF;","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/models.ts","../src/anthropic/vertex-client.ts"],"sourcesContent":["export {\n AnthropicClient,\n type AnthropicClientOptions,\n type AnthropicCompletionModelHandle,\n type AnthropicCompletionModelOptions,\n} from \"./client\";\nexport type {\n AnthropicCompletionModelId,\n KnownAnthropicCompletionModelId,\n} from \"./models\";\nexport {\n AnthropicVertexClient,\n type AnthropicVertexClientOptions,\n type AnthropicVertexCompletionModelHandle,\n type AnthropicVertexCompletionModelOptions,\n} from \"./vertex-client\";\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport { AnthropicCompletionModel } from \"./completion\";\nimport {\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n type AnthropicCompletionModelId,\n} from \"./models\";\n\ntype AnthropicManagedClientOptions = {\n apiKey: string;\n baseUrl?: string | undefined;\n client?: never;\n};\n\ntype AnthropicInjectedClientOptions = {\n client: Anthropic;\n apiKey?: never;\n baseUrl?: never;\n};\n\nexport type AnthropicClientOptions = AnthropicManagedClientOptions | AnthropicInjectedClientOptions;\n\nexport type AnthropicCompletionModelOptions = {\n modelId: AnthropicCompletionModelId;\n contextLimits?: ModelContextLimits | undefined;\n};\n\nexport type AnthropicCompletionModelHandle = StreamingCompletionModel<unknown>;\n\nexport class AnthropicClient implements ModelListingClient {\n private readonly sdk: Anthropic;\n\n constructor(options: AnthropicClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"baseUrl\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new Anthropic({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n maxRetries: 0,\n });\n }\n\n completionModel(options: AnthropicCompletionModelOptions): AnthropicCompletionModelHandle {\n const modelId = requireModelId(options.modelId);\n return new AnthropicCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n ANTHROPIC_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n );\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const response = await this.sdk.models.list(undefined, {\n signal: options.abortSignal,\n maxRetries: 0,\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Anthropic\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`AnthropicClient cannot combine client with ${conflict}.`);\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.trim().length === 0) {\n throw new Error(\n \"Missing Anthropic credentials. Pass apiKey when constructing AnthropicClient.\",\n );\n }\n\n return apiKey;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n const createdAt =\n typeof model.created_at === \"string\"\n ? secondsFromDateString(model.created_at)\n : typeof model.created_at === \"number\"\n ? model.created_at\n : undefined;\n\n const listedModel: ModelList[\"data\"][number] = {\n id: model.id,\n };\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.name === \"string\") {\n listedModel.name = model.name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (createdAt !== undefined) {\n listedModel.createdAt = createdAt;\n }\n if (typeof model.owned_by === \"string\") {\n listedModel.ownedBy = model.owned_by;\n }\n if (typeof model.max_input_tokens === \"number\") {\n listedModel.contextLength = model.max_input_tokens;\n }\n if (typeof model.context_length === \"number\") {\n listedModel.contextLength = model.context_length;\n }\n return listedModel;\n}\n\nfunction secondsFromDateString(value: string): number | undefined {\n const time = Date.parse(value);\n return Number.isNaN(time) ? undefined : Math.floor(time / 1000);\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Anthropic } from \"@anthropic-ai/sdk\";\nimport type { AnthropicVertex } from \"@anthropic-ai/vertex-sdk\";\nimport type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n type CompletionRequest,\n type CompletionResponse,\n type FilePart,\n type ImagePart,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type ReasoningDetail,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultContentPart,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, stringFrom } from \"../utils\";\nimport type { AnthropicCompletionModelId } from \"./models\";\n\ntype AnthropicCreateParams = Record<string, unknown>;\ntype AnthropicMessage = Record<string, unknown>;\ntype AnthropicContentBlock = Record<string, unknown>;\ntype AnthropicMessageCreate = (\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n) => Promise<unknown>;\n\nconst DEFAULT_MAX_TOKENS = 1024;\n\nexport class AnthropicCompletionModel implements StreamingCompletionModel<unknown> {\n readonly provider = \"anthropic\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: false,\n reasoning: true,\n };\n constructor(\n private readonly client: Anthropic | AnthropicVertex,\n readonly modelId: AnthropicCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toAnthropicMessagesParams(this.modelId, request);\n if (options.stream === true) {\n params.stream = true;\n }\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toAnthropicMessagesParams(this.modelId, request);\n const response = await this.createMessage(params, anthropicRequestOptions(options));\n return withContextUsage(fromAnthropicMessage(response), this.modelInfo());\n }\n\n private createMessage(\n params: AnthropicCreateParams,\n options: ReturnType<typeof anthropicRequestOptions>,\n ): Promise<unknown> {\n const messages = this.client.messages;\n const create = messages.create as unknown as AnthropicMessageCreate;\n return create.call(messages, params, options);\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toAnthropicMessagesParams(this.modelId, request), stream: true };\n const stream = await this.createMessage(params, anthropicRequestOptions(options));\n const toolIdsByIndex = new Map<number, string>();\n const blocksWithInitialToolInput = new Set<number>();\n const streamUsage = Usage.empty();\n const streamUsageFields = emptyAnthropicStreamUsageFields();\n let hasStreamUsage = false;\n let streamMessageId: string | undefined;\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n if (isPlainObject(event) && event.type === \"content_block_start\") {\n const index = numberFrom(event.index);\n const block = isPlainObject(event.content_block) ? event.content_block : {};\n const id = stringFrom(block.id);\n if (id !== undefined) {\n toolIdsByIndex.set(index, id);\n }\n if (toolInputArgumentsDelta(block.input) !== undefined) {\n blocksWithInitialToolInput.add(index);\n }\n }\n if (isPlainObject(event)) {\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n streamMessageId = stringFrom(event.message.id) ?? streamMessageId;\n }\n hasStreamUsage =\n applyAnthropicStreamUsage(event, streamUsage, streamUsageFields) || hasStreamUsage;\n }\n for (const mapped of fromAnthropicStreamEvent(event)) {\n const usageMapped =\n mapped.type === \"final\" && hasStreamUsage\n ? {\n ...mapped,\n response: {\n ...mapped.response,\n usage: mergeUsage(mapped.response.usage, streamUsage, streamUsageFields),\n },\n }\n : mapped;\n const streamMapped =\n usageMapped.type === \"final\"\n ? {\n ...usageMapped,\n response: withContextUsage(usageMapped.response, this.modelInfo()),\n }\n : usageMapped;\n if (\n streamMapped.type === \"tool_call_delta\" &&\n streamMapped.argumentsDelta !== undefined &&\n isPlainObject(event) &&\n event.type === \"content_block_delta\" &&\n blocksWithInitialToolInput.has(numberFrom(event.index))\n ) {\n continue;\n }\n if (streamMapped.type === \"tool_call_delta\" && streamMapped.id.startsWith(\"tool_\")) {\n const index = Number(streamMapped.id.slice(\"tool_\".length));\n yield { ...streamMapped, id: toolIdsByIndex.get(index) ?? streamMapped.id };\n } else {\n yield streamMapped;\n }\n }\n if (isPlainObject(event) && event.type === \"message_stop\" && !isPlainObject(event.message)) {\n const response: CompletionResponse = {\n choice: [],\n usage: copyUsage(streamUsage),\n rawResponse: event,\n };\n if (streamMessageId !== undefined) {\n response.messageId = streamMessageId;\n }\n yield {\n type: \"final\",\n response: withContextUsage(response, this.modelInfo()),\n };\n }\n }\n }\n}\n\ntype AnthropicStreamUsageFields = {\n inputTokens: boolean;\n outputTokens: boolean;\n cachedInputTokens: boolean;\n cacheCreationInputTokens: boolean;\n};\n\nfunction emptyAnthropicStreamUsageFields(): AnthropicStreamUsageFields {\n return {\n inputTokens: false,\n outputTokens: false,\n cachedInputTokens: false,\n cacheCreationInputTokens: false,\n };\n}\n\nfunction applyAnthropicStreamUsage(\n event: Record<string, unknown>,\n usage: Usage,\n fields: AnthropicStreamUsageFields,\n): boolean {\n let changed = false;\n let uncachedInputTokens = Math.max(\n 0,\n usage.inputTokens - usage.cachedInputTokens - usage.cacheCreationInputTokens,\n );\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const source = isPlainObject(event.message.usage) ? event.message.usage : undefined;\n if (source !== undefined) {\n if (\"input_tokens\" in source) {\n uncachedInputTokens = numberFrom(source.input_tokens);\n fields.inputTokens = true;\n changed = true;\n }\n if (\"cache_read_input_tokens\" in source) {\n usage.cachedInputTokens = numberFrom(source.cache_read_input_tokens);\n fields.cachedInputTokens = true;\n changed = true;\n }\n if (\"cache_creation_input_tokens\" in source) {\n usage.cacheCreationInputTokens = numberFrom(source.cache_creation_input_tokens);\n fields.cacheCreationInputTokens = true;\n changed = true;\n }\n }\n }\n\n if (event.type === \"message_delta\") {\n const source = isPlainObject(event.usage) ? event.usage : undefined;\n if (source !== undefined && \"output_tokens\" in source) {\n usage.outputTokens = Math.max(usage.outputTokens, numberFrom(source.output_tokens));\n fields.outputTokens = true;\n changed = true;\n }\n }\n\n if (changed) {\n Object.assign(\n usage,\n anthropicUsage(\n uncachedInputTokens,\n usage.outputTokens,\n usage.cachedInputTokens,\n usage.cacheCreationInputTokens,\n ),\n );\n }\n\n return changed;\n}\n\nfunction mergeUsage(base: Usage, stream: Usage, fields: AnthropicStreamUsageFields): Usage {\n const baseUncachedInputTokens = Math.max(\n 0,\n base.inputTokens - base.cachedInputTokens - base.cacheCreationInputTokens,\n );\n const streamUncachedInputTokens = Math.max(\n 0,\n stream.inputTokens - stream.cachedInputTokens - stream.cacheCreationInputTokens,\n );\n const uncachedInputTokens = fields.inputTokens\n ? streamUncachedInputTokens\n : baseUncachedInputTokens;\n const outputTokens = fields.outputTokens ? stream.outputTokens : base.outputTokens;\n const cachedInputTokens = fields.cachedInputTokens\n ? stream.cachedInputTokens\n : base.cachedInputTokens;\n const cacheCreationInputTokens = fields.cacheCreationInputTokens\n ? stream.cacheCreationInputTokens\n : base.cacheCreationInputTokens;\n return anthropicUsage(\n uncachedInputTokens,\n outputTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n );\n}\n\nfunction copyUsage(usage: Usage): Usage {\n return {\n ...usage,\n ...(usage.details === undefined ? {} : { details: { ...usage.details } }),\n };\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 params: AnthropicCreateParams = {\n ...(isPlainObject(request.providerOptions) ? request.providerOptions : {}),\n model: modelId,\n max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,\n messages: messages.flatMap(messageToAnthropicMessages),\n };\n\n delete params.tools;\n\n if (system !== undefined) {\n params.system = system;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToAnthropic);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToAnthropic(request.toolChoice);\n }\n\n return params;\n}\n\nfunction anthropicRequestOptions(options: ModelCallOptions | undefined): {\n signal?: AbortSignal | undefined;\n maxRetries: 0;\n} {\n return { signal: options?.abortSignal, maxRetries: 0 };\n}\n\nfunction providerRequestSummary(\n params: AnthropicCreateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n return compactJsonObject({\n provider: \"anthropic\",\n api: \"messages\",\n stream: options.stream === true,\n model: stringFrom(params.model),\n parameterKeys: Object.keys(params).sort(),\n messageCount: Array.isArray(params.messages) ? params.messages.length : undefined,\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystem: typeof params.system === \"string\" && params.system.length > 0,\n temperature: request.temperature,\n maxTokens: request.maxTokens ?? numberFrom(params.max_tokens),\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (value === undefined) {\n return [];\n }\n return [[key, toJsonValue(value)]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction systemFromMessages(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function fromAnthropicMessage(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const content = Array.isArray(raw.content) ? raw.content : [];\n const choice: AssistantContentPart[] = [];\n\n for (const block of content) {\n if (!isPlainObject(block)) {\n continue;\n }\n\n if (block.type === \"text\" && typeof block.text === \"string\") {\n choice.push({ type: \"text\", text: block.text });\n }\n\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n const text: Extract<ReasoningDetail, { type: \"text\" }> =\n typeof block.signature === \"string\"\n ? { type: \"text\", text: block.thinking, signature: block.signature }\n : { type: \"text\", text: block.thinking };\n choice.push({ type: \"reasoning\", text: block.thinking, details: [text] });\n }\n\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n choice.push({\n type: \"reasoning\",\n text: \"\",\n details: [{ type: \"redacted\", data: block.data }],\n });\n }\n\n if (block.type === \"tool_use\") {\n const id = typeof block.id === \"string\" ? block.id : crypto.randomUUID();\n const name = typeof block.name === \"string\" ? block.name : \"\";\n choice.push({\n type: \"tool-call\",\n toolCallId: id,\n callId: id,\n toolName: name,\n input: toJsonValue(block.input),\n });\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const usage = anthropicUsage(\n numberFrom(usageSource.input_tokens),\n numberFrom(usageSource.output_tokens),\n numberFrom(usageSource.cache_read_input_tokens),\n numberFrom(usageSource.cache_creation_input_tokens),\n );\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nfunction anthropicUsage(\n uncachedInputTokens: number,\n outputTokens: number,\n cachedInputTokens: number,\n cacheCreationInputTokens: number,\n): Usage {\n const inputTokens = uncachedInputTokens + cachedInputTokens + cacheCreationInputTokens;\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n cacheCreationInputTokens,\n details: {\n input: uncachedInputTokens,\n cache_read_input_tokens: cachedInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n output: outputTokens,\n total: totalTokens,\n },\n };\n}\n\nexport function fromAnthropicStreamEvent(event: unknown): CompletionModelStreamEvent[] {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return [];\n }\n\n if (event.type === \"message_start\" && isPlainObject(event.message)) {\n const id = stringFrom(event.message.id);\n return id === undefined ? [] : [{ type: \"message_id\", id }];\n }\n\n if (event.type === \"content_block_start\" && isPlainObject(event.content_block)) {\n const block = event.content_block;\n if (block.type === \"tool_use\") {\n return [\n toolCallDelta(stringFrom(block.id) ?? `tool_${numberFrom(event.index)}`, {\n name: stringFrom(block.name),\n argumentsDelta: toolInputArgumentsDelta(block.input),\n }),\n ];\n }\n if (block.type === \"redacted_thinking\" && typeof block.data === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: block.data,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"redacted\",\n },\n ];\n }\n return [];\n }\n\n if (event.type === \"content_block_delta\" && isPlainObject(event.delta)) {\n const delta = event.delta;\n if (delta.type === \"text_delta\" && typeof delta.text === \"string\") {\n return [{ type: \"text_delta\", delta: delta.text }];\n }\n\n if (delta.type === \"thinking_delta\" && typeof delta.thinking === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: delta.thinking,\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n },\n ];\n }\n\n if (delta.type === \"signature_delta\" && typeof delta.signature === \"string\") {\n return [\n {\n type: \"reasoning_delta\",\n delta: \"\",\n id: `thinking_${numberFrom(event.index)}`,\n contentType: \"text\",\n signature: delta.signature,\n },\n ];\n }\n\n if (delta.type === \"input_json_delta\" && typeof delta.partial_json === \"string\") {\n return [\n toolCallDelta(`tool_${numberFrom(event.index)}`, { argumentsDelta: delta.partial_json }),\n ];\n }\n }\n\n if (event.type === \"message_stop\" && isPlainObject(event.message)) {\n return [{ type: \"final\", response: fromAnthropicMessage(event.message) }];\n }\n\n if (event.type === \"error\") {\n return [{ type: \"error\", error: event.error ?? event }];\n }\n\n return [];\n}\n\nfunction messageToAnthropicMessages(message: MessageType): AnthropicMessage[] {\n if (message.role === \"system\") {\n return [];\n }\n\n if (message.role === \"user\") {\n if (typeof message.content === \"string\") {\n return [{ role: \"user\", content: message.content }];\n }\n return [\n {\n role: \"user\",\n content: message.content.map(userContentToAnthropicBlock),\n },\n ];\n }\n\n if (message.role === \"tool\") {\n return [\n {\n role: \"user\",\n content: message.content.map(toolContentToAnthropicBlock),\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/anthropic",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.2",
|
|
4
4
|
"description": "Anthropic provider adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@anthropic-ai/sdk": "^0.
|
|
30
|
-
"@anthropic-ai/vertex-sdk": "^0.19.
|
|
29
|
+
"@anthropic-ai/sdk": "^0.117.1",
|
|
30
|
+
"@anthropic-ai/vertex-sdk": "^0.19.4"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^24.9.1",
|
|
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.
|
|
37
|
+
"@anvia/core": "1.0.0-rc.2"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@anvia/core": "1.0.0-rc.
|
|
40
|
+
"@anvia/core": "1.0.0-rc.2"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"prebuild": "test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build",
|