@ank1015/agents-provider-anthropic 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +159 -0
- package/dist/adapter.d.ts +33 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +451 -0
- package/dist/adapter.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +72 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping.d.ts +8 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +153 -0
- package/dist/mapping.js.map +1 -0
- package/package.json +60 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@ank1015/agents-provider-anthropic` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## 0.1.0 - Initial Release
|
|
6
|
+
|
|
7
|
+
- Added support for direct-value API key secret references when creating the default Anthropic SDK client.
|
|
8
|
+
- Added the Anthropic Messages API runtime adapter.
|
|
9
|
+
- Added adapter factory helpers for direct and transport/container wiring.
|
|
10
|
+
- Added normalized request mapping for instructions, user content, assistant history, tool results, function tools, and provider options.
|
|
11
|
+
- Added streaming translation for text, thinking, tool calls, successful completions, errors, and aborts.
|
|
12
|
+
- Added usage and cost calculation from static model metadata.
|
|
13
|
+
- Added safe handling for interrupted streams with partial tool-call JSON.
|
|
14
|
+
- Added unit coverage for request mapping, stream translation, error handling, config validation, factories, and regression cases.
|
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# @ank1015/agents-provider-anthropic
|
|
2
|
+
|
|
3
|
+
Anthropic Messages API runtime adapter for the `@ank1015/agents` packages.
|
|
4
|
+
|
|
5
|
+
This package turns normalized `LLMRequest<"anthropic">` objects into Anthropic Messages API streaming calls and translates Anthropic stream events back into normalized assistant events and messages. It also re-exports `@ank1015/agents-provider-anthropic-spec` so consumers can import the provider id, config schema, model catalog, and Anthropic-specific types from one package.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
pnpm add @ank1015/agents-provider-anthropic
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## What This Package Provides
|
|
14
|
+
|
|
15
|
+
- `AnthropicProviderAdapter`, a provider adapter for direct Anthropic API calls.
|
|
16
|
+
- `createAnthropicProviderAdapter` helper for app wiring.
|
|
17
|
+
- `createAnthropicProviderAdapterFactory` for transport/container integration.
|
|
18
|
+
- `AnthropicMessagesClient` and `AnthropicProviderAdapterDeps` test/injection types.
|
|
19
|
+
- Re-exports from `@ank1015/agents-provider-anthropic-spec`, including `ANTHROPIC_PROVIDER`, `ANTHROPIC_MODELS`, and config/model types.
|
|
20
|
+
|
|
21
|
+
## Import Paths
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {
|
|
25
|
+
ANTHROPIC_PROVIDER,
|
|
26
|
+
createAnthropicProviderAdapter,
|
|
27
|
+
} from '@ank1015/agents-provider-anthropic';
|
|
28
|
+
|
|
29
|
+
import { AnthropicProviderAdapter } from '@ank1015/agents-provider-anthropic/adapter';
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The root import is the normal application entrypoint. The `./adapter` subpath exposes the runtime adapter APIs without making internal mapping helpers public.
|
|
33
|
+
|
|
34
|
+
## Basic Usage
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { createAdapterTransport } from '@ank1015/agents-core/transport';
|
|
38
|
+
import {
|
|
39
|
+
ANTHROPIC_PROVIDER,
|
|
40
|
+
createAnthropicProviderAdapter,
|
|
41
|
+
} from '@ank1015/agents-provider-anthropic';
|
|
42
|
+
|
|
43
|
+
const anthropic = createAnthropicProviderAdapter({
|
|
44
|
+
provider: ANTHROPIC_PROVIDER,
|
|
45
|
+
apiKey: {
|
|
46
|
+
type: 'env',
|
|
47
|
+
name: 'ANTHROPIC_API_KEY',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const transport = createAdapterTransport([anthropic]);
|
|
52
|
+
|
|
53
|
+
const stream = transport.stream({
|
|
54
|
+
provider: ANTHROPIC_PROVIDER,
|
|
55
|
+
modelId: 'claude-sonnet-4-6',
|
|
56
|
+
messages: [
|
|
57
|
+
{
|
|
58
|
+
role: 'user',
|
|
59
|
+
id: 'user_1',
|
|
60
|
+
timestamp: Date.now(),
|
|
61
|
+
content: [{ type: 'text', content: 'Write a short haiku about types.' }],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
for await (const event of stream) {
|
|
67
|
+
if (event.type === 'text_delta') {
|
|
68
|
+
process.stdout.write(event.delta);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const message = await stream.result();
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Configuration
|
|
76
|
+
|
|
77
|
+
The adapter accepts `AnthropicProviderConfig` from the spec package:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { createAnthropicProviderAdapter } from '@ank1015/agents-provider-anthropic';
|
|
81
|
+
|
|
82
|
+
const adapter = createAnthropicProviderAdapter({
|
|
83
|
+
provider: 'anthropic',
|
|
84
|
+
apiKey: {
|
|
85
|
+
type: 'env',
|
|
86
|
+
name: 'ANTHROPIC_API_KEY',
|
|
87
|
+
},
|
|
88
|
+
baseUrl: 'https://api.anthropic.com',
|
|
89
|
+
headers: {
|
|
90
|
+
'x-app': 'agents',
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`apiKey` is a secret reference. The adapter resolves environment references from `process.env`, or uses a direct value reference when the key comes from another secret source:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
createAnthropicProviderAdapter({
|
|
99
|
+
provider: 'anthropic',
|
|
100
|
+
apiKey: {
|
|
101
|
+
type: 'value',
|
|
102
|
+
value: anthropicKey,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Request Mapping
|
|
108
|
+
|
|
109
|
+
The adapter maps the normalized request shape into Anthropic Messages API streaming parameters:
|
|
110
|
+
|
|
111
|
+
- `instructions` becomes Anthropic `system`.
|
|
112
|
+
- Text and image user content becomes Anthropic content blocks.
|
|
113
|
+
- Tool result messages become Anthropic `tool_result` blocks.
|
|
114
|
+
- Prior Anthropic-native assistant messages are reused when available.
|
|
115
|
+
- Normalized assistant text, thinking, and tool calls are converted back into Anthropic assistant history.
|
|
116
|
+
- Function tools become Anthropic tools with JSON Schema input schemas.
|
|
117
|
+
- `strict` is preserved when a function tool sets it to `true` or `false`.
|
|
118
|
+
- Custom grammar tools are rejected because the Anthropic Messages API tool shape does not support them.
|
|
119
|
+
|
|
120
|
+
`providerOptions` are forwarded to Anthropic after the generic fields owned by the adapter are removed. If `providerOptions.max_tokens` is omitted, the adapter uses the selected model's `maxTokens`.
|
|
121
|
+
|
|
122
|
+
## Streaming Behavior
|
|
123
|
+
|
|
124
|
+
`adapter.stream(request)` returns an `AssistantMessageEventStreamSource<"anthropic">`.
|
|
125
|
+
|
|
126
|
+
The stream may emit:
|
|
127
|
+
|
|
128
|
+
- `start`
|
|
129
|
+
- `text_start`, `text_delta`, `text_end`
|
|
130
|
+
- `thinking_start`, `thinking_delta`, `thinking_end`
|
|
131
|
+
- `toolcall_start`, `toolcall_delta`, `toolcall_end`
|
|
132
|
+
- `done`
|
|
133
|
+
- `error`
|
|
134
|
+
- `aborted`
|
|
135
|
+
|
|
136
|
+
The final result is available through `await stream.result()` or by draining the stream.
|
|
137
|
+
|
|
138
|
+
Successful messages include the Anthropic native message, normalized assistant content, usage, cost estimates from the static model catalog, duration, and mapped stop reason. Failed or aborted messages preserve any normalized content that was produced before the stream ended.
|
|
139
|
+
|
|
140
|
+
## Testing And Injection
|
|
141
|
+
|
|
142
|
+
The adapter accepts dependency overrides for unit tests and custom runtime containers:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
import { AnthropicProviderAdapter } from '@ank1015/agents-provider-anthropic/adapter';
|
|
146
|
+
|
|
147
|
+
const adapter = new AnthropicProviderAdapter(config, {
|
|
148
|
+
client: fakeAnthropicClient,
|
|
149
|
+
createMessageId: () => 'msg_test',
|
|
150
|
+
now: () => 1_700_000_000_000,
|
|
151
|
+
resolveModel: (modelId) => modelRegistry.get('anthropic', modelId),
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
If no client override is provided, the adapter creates an `@anthropic-ai/sdk` client from the provider config.
|
|
156
|
+
|
|
157
|
+
## Versioning
|
|
158
|
+
|
|
159
|
+
This package is currently `0.1.0`. Until `1.0.0`, adapter APIs and event mapping behavior may evolve as the surrounding agent runtime settles.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AssistantMessageEventStreamSource, LLMProviderAdapter, LLMProviderAdapterFactory, LLMRequest, Model } from '@ank1015/agents-contracts';
|
|
2
|
+
import type { MessageCreateParamsStreaming, RawMessageStreamEvent } from '@anthropic-ai/sdk/resources/messages.js';
|
|
3
|
+
import type { AnthropicProvider, AnthropicProviderConfig } from '@ank1015/agents-provider-anthropic-spec';
|
|
4
|
+
export interface AnthropicMessagesClient {
|
|
5
|
+
messages: {
|
|
6
|
+
create(params: MessageCreateParamsStreaming, options?: {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}): AsyncIterable<RawMessageStreamEvent> | Promise<AsyncIterable<RawMessageStreamEvent>>;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface AnthropicProviderAdapterDeps {
|
|
12
|
+
readonly client?: AnthropicMessagesClient;
|
|
13
|
+
readonly createClient?: (config: AnthropicProviderConfig) => AnthropicMessagesClient;
|
|
14
|
+
readonly createMessageId?: () => string;
|
|
15
|
+
readonly now?: () => number;
|
|
16
|
+
/** Resolves a model id to its descriptor. Defaults to the package's static catalog. */
|
|
17
|
+
readonly resolveModel?: (modelId: string) => Model<AnthropicProvider> | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare class AnthropicProviderAdapter implements LLMProviderAdapter<AnthropicProvider> {
|
|
20
|
+
#private;
|
|
21
|
+
readonly provider: "anthropic";
|
|
22
|
+
constructor(config: AnthropicProviderConfig, deps?: AnthropicProviderAdapterDeps);
|
|
23
|
+
stream(request: LLMRequest<AnthropicProvider>): AssistantMessageEventStreamSource<AnthropicProvider>;
|
|
24
|
+
}
|
|
25
|
+
export declare class AnthropicProviderAdapterFactory implements LLMProviderAdapterFactory<AnthropicProvider> {
|
|
26
|
+
#private;
|
|
27
|
+
readonly provider: "anthropic";
|
|
28
|
+
constructor(deps?: AnthropicProviderAdapterDeps);
|
|
29
|
+
create(config: AnthropicProviderConfig): AnthropicProviderAdapter;
|
|
30
|
+
}
|
|
31
|
+
export declare function createAnthropicProviderAdapter(config: AnthropicProviderConfig, deps?: AnthropicProviderAdapterDeps): AnthropicProviderAdapter;
|
|
32
|
+
export declare function createAnthropicProviderAdapterFactory(deps?: AnthropicProviderAdapterDeps): AnthropicProviderAdapterFactory;
|
|
33
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,iCAAiC,EAMjC,kBAAkB,EAClB,yBAAyB,EACzB,UAAU,EACV,KAAK,EAIN,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAGV,4BAA4B,EAE5B,qBAAqB,EAEtB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AASjD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE;QACR,MAAM,CACJ,MAAM,EAAE,4BAA4B,EACpC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,GAEhC,aAAa,CAAC,qBAAqB,CAAC,GACpC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;KACnD,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,uBAAuB,CAAC;IACrF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;CACnF;AA8CD,qBAAa,wBAAyB,YAAW,kBAAkB,CAAC,iBAAiB,CAAC;;IACpF,QAAQ,CAAC,QAAQ,cAAsB;gBAO3B,MAAM,EAAE,uBAAuB,EAAE,IAAI,GAAE,4BAAiC;IASpF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,iCAAiC,CAAC,iBAAiB,CAAC;CAwJrG;AAED,qBAAa,+BACX,YAAW,yBAAyB,CAAC,iBAAiB,CAAC;;IAEvD,QAAQ,CAAC,QAAQ,cAAsB;gBAG3B,IAAI,GAAE,4BAAiC;IAInD,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,wBAAwB;CAGlE;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,EAC/B,IAAI,CAAC,EAAE,4BAA4B,GAClC,wBAAwB,CAE1B;AAED,wBAAgB,qCAAqC,CACnD,IAAI,CAAC,EAAE,4BAA4B,GAClC,+BAA+B,CAEjC"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { createEventStream } from '@ank1015/agents-contracts';
|
|
3
|
+
import { ANTHROPIC_PROVIDER, anthropicProviderConfigSchema, getAnthropicModel, } from '@ank1015/agents-provider-anthropic-spec';
|
|
4
|
+
import { getAnthropicErrorDetails, isAbortError } from './errors.js';
|
|
5
|
+
import { buildAnthropicMessageParams } from './mapping.js';
|
|
6
|
+
export class AnthropicProviderAdapter {
|
|
7
|
+
provider = ANTHROPIC_PROVIDER;
|
|
8
|
+
#config;
|
|
9
|
+
#client;
|
|
10
|
+
#createMessageId;
|
|
11
|
+
#now;
|
|
12
|
+
#resolveModel;
|
|
13
|
+
constructor(config, deps = {}) {
|
|
14
|
+
this.#config = anthropicProviderConfigSchema.parse(config);
|
|
15
|
+
this.#client =
|
|
16
|
+
deps.client ?? deps.createClient?.(this.#config) ?? createAnthropicClient(this.#config);
|
|
17
|
+
this.#createMessageId = deps.createMessageId ?? createDefaultMessageId;
|
|
18
|
+
this.#now = deps.now ?? Date.now;
|
|
19
|
+
this.#resolveModel = deps.resolveModel ?? getAnthropicModel;
|
|
20
|
+
}
|
|
21
|
+
stream(request) {
|
|
22
|
+
const stream = createEventStream();
|
|
23
|
+
void this.#produce(request, stream);
|
|
24
|
+
return stream;
|
|
25
|
+
}
|
|
26
|
+
async #produce(request, stream) {
|
|
27
|
+
const model = this.#resolveModel(request.modelId);
|
|
28
|
+
if (!model) {
|
|
29
|
+
const message = this.#buildUnknownModelMessage(request);
|
|
30
|
+
stream.push({ type: 'error', reason: 'error', message });
|
|
31
|
+
stream.end(message);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const state = {
|
|
35
|
+
request,
|
|
36
|
+
model,
|
|
37
|
+
stream,
|
|
38
|
+
startedAt: this.#now(),
|
|
39
|
+
content: [],
|
|
40
|
+
blocks: new Map(),
|
|
41
|
+
nativeBlocks: new Map(),
|
|
42
|
+
usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
43
|
+
hadMessageStart: false,
|
|
44
|
+
};
|
|
45
|
+
try {
|
|
46
|
+
const params = buildAnthropicMessageParams(request, model);
|
|
47
|
+
const requestOptions = request.signal ? { signal: request.signal } : undefined;
|
|
48
|
+
const anthropicStream = await this.#client.messages.create(params, requestOptions);
|
|
49
|
+
stream.push({ type: 'start' });
|
|
50
|
+
for await (const event of anthropicStream) {
|
|
51
|
+
handleStreamEvent(state, event);
|
|
52
|
+
}
|
|
53
|
+
if (request.signal?.aborted) {
|
|
54
|
+
const message = this.#buildAbortedMessage(state);
|
|
55
|
+
stream.push({ type: 'aborted', reason: 'aborted', message });
|
|
56
|
+
stream.end(message);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
closeOpenBlocks(state);
|
|
60
|
+
const message = this.#buildSuccessfulMessage(state);
|
|
61
|
+
stream.push({ type: 'done', reason: message.stopReason, message });
|
|
62
|
+
stream.end(message);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
closeOpenBlocks(state, { allowInvalidToolJson: true });
|
|
66
|
+
if (request.signal?.aborted || isAbortError(error)) {
|
|
67
|
+
const message = this.#buildAbortedMessage(state);
|
|
68
|
+
stream.push({ type: 'aborted', reason: 'aborted', message });
|
|
69
|
+
stream.end(message);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const message = this.#buildFailedMessage(state, error);
|
|
73
|
+
stream.push({ type: 'error', reason: 'error', message });
|
|
74
|
+
stream.end(message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
#buildSuccessfulMessage(state) {
|
|
78
|
+
const nativeMessage = buildNativeMessage(state);
|
|
79
|
+
if (!nativeMessage) {
|
|
80
|
+
throw new Error('Anthropic stream ended without a message_start event.');
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
role: 'assistant',
|
|
84
|
+
id: this.#createMessageId(),
|
|
85
|
+
model: modelRef(state),
|
|
86
|
+
usage: buildUsage(state),
|
|
87
|
+
duration: this.#now() - state.startedAt,
|
|
88
|
+
nativeMessage,
|
|
89
|
+
content: state.content,
|
|
90
|
+
timestamp: this.#now(),
|
|
91
|
+
stopReason: mapDoneStopReason(state.stopReason, state.content),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
#buildFailedMessage(state, error) {
|
|
95
|
+
const message = {
|
|
96
|
+
role: 'assistant',
|
|
97
|
+
id: this.#createMessageId(),
|
|
98
|
+
model: modelRef(state),
|
|
99
|
+
usage: buildUsage(state),
|
|
100
|
+
duration: this.#now() - state.startedAt,
|
|
101
|
+
content: state.content,
|
|
102
|
+
timestamp: this.#now(),
|
|
103
|
+
stopReason: 'error',
|
|
104
|
+
error: getAnthropicErrorDetails(error),
|
|
105
|
+
};
|
|
106
|
+
const nativeMessage = buildNativeMessage(state);
|
|
107
|
+
if (nativeMessage) {
|
|
108
|
+
message.nativeMessage = nativeMessage;
|
|
109
|
+
}
|
|
110
|
+
return message;
|
|
111
|
+
}
|
|
112
|
+
#buildAbortedMessage(state) {
|
|
113
|
+
const message = {
|
|
114
|
+
role: 'assistant',
|
|
115
|
+
id: this.#createMessageId(),
|
|
116
|
+
model: modelRef(state),
|
|
117
|
+
usage: buildUsage(state),
|
|
118
|
+
duration: this.#now() - state.startedAt,
|
|
119
|
+
content: state.content,
|
|
120
|
+
timestamp: this.#now(),
|
|
121
|
+
stopReason: 'aborted',
|
|
122
|
+
};
|
|
123
|
+
const nativeMessage = buildNativeMessage(state);
|
|
124
|
+
if (nativeMessage) {
|
|
125
|
+
message.nativeMessage = nativeMessage;
|
|
126
|
+
}
|
|
127
|
+
return message;
|
|
128
|
+
}
|
|
129
|
+
#buildUnknownModelMessage(request) {
|
|
130
|
+
return {
|
|
131
|
+
role: 'assistant',
|
|
132
|
+
id: this.#createMessageId(),
|
|
133
|
+
model: { provider: ANTHROPIC_PROVIDER, id: request.modelId },
|
|
134
|
+
duration: 0,
|
|
135
|
+
content: [],
|
|
136
|
+
timestamp: this.#now(),
|
|
137
|
+
stopReason: 'error',
|
|
138
|
+
error: {
|
|
139
|
+
message: `Model "${request.modelId}" is not a known Anthropic model.`,
|
|
140
|
+
canRetry: false,
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export class AnthropicProviderAdapterFactory {
|
|
146
|
+
provider = ANTHROPIC_PROVIDER;
|
|
147
|
+
#deps;
|
|
148
|
+
constructor(deps = {}) {
|
|
149
|
+
this.#deps = deps;
|
|
150
|
+
}
|
|
151
|
+
create(config) {
|
|
152
|
+
return new AnthropicProviderAdapter(config, this.#deps);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export function createAnthropicProviderAdapter(config, deps) {
|
|
156
|
+
return new AnthropicProviderAdapter(config, deps);
|
|
157
|
+
}
|
|
158
|
+
export function createAnthropicProviderAdapterFactory(deps) {
|
|
159
|
+
return new AnthropicProviderAdapterFactory(deps);
|
|
160
|
+
}
|
|
161
|
+
function createAnthropicClient(config) {
|
|
162
|
+
return new Anthropic({
|
|
163
|
+
apiKey: resolveSecret(config.apiKey),
|
|
164
|
+
baseURL: config.baseUrl,
|
|
165
|
+
defaultHeaders: config.headers,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function resolveSecret(secret) {
|
|
169
|
+
if (secret.type === 'value') {
|
|
170
|
+
return secret.value;
|
|
171
|
+
}
|
|
172
|
+
return resolveEnvSecret(secret.name);
|
|
173
|
+
}
|
|
174
|
+
function resolveEnvSecret(name) {
|
|
175
|
+
const processLike = globalThis.process;
|
|
176
|
+
const value = processLike?.env?.[name];
|
|
177
|
+
if (!value) {
|
|
178
|
+
throw new Error(`Anthropic API key environment variable "${name}" is not set.`);
|
|
179
|
+
}
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
function handleStreamEvent(state, event) {
|
|
183
|
+
switch (event.type) {
|
|
184
|
+
case 'message_start':
|
|
185
|
+
handleMessageStart(state, event.message);
|
|
186
|
+
break;
|
|
187
|
+
case 'content_block_start':
|
|
188
|
+
handleContentBlockStart(state, event.index, event.content_block);
|
|
189
|
+
break;
|
|
190
|
+
case 'content_block_delta':
|
|
191
|
+
handleContentBlockDelta(state, event.index, event.delta);
|
|
192
|
+
break;
|
|
193
|
+
case 'content_block_stop':
|
|
194
|
+
handleContentBlockStop(state, event.index);
|
|
195
|
+
break;
|
|
196
|
+
case 'message_delta':
|
|
197
|
+
if (event.delta.stop_reason) {
|
|
198
|
+
state.stopReason = event.delta.stop_reason;
|
|
199
|
+
}
|
|
200
|
+
state.usage.output = event.usage.output_tokens ?? state.usage.output;
|
|
201
|
+
break;
|
|
202
|
+
case 'message_stop':
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function handleMessageStart(state, message) {
|
|
207
|
+
state.nativeMessage = { ...message, content: [] };
|
|
208
|
+
state.hadMessageStart = true;
|
|
209
|
+
state.usage.input = message.usage.input_tokens ?? 0;
|
|
210
|
+
state.usage.output = message.usage.output_tokens ?? 0;
|
|
211
|
+
state.usage.cacheRead = message.usage.cache_read_input_tokens ?? 0;
|
|
212
|
+
state.usage.cacheWrite = message.usage.cache_creation_input_tokens ?? 0;
|
|
213
|
+
}
|
|
214
|
+
function handleContentBlockStart(state, index, block) {
|
|
215
|
+
state.nativeBlocks.set(index, { ...block });
|
|
216
|
+
switch (block.type) {
|
|
217
|
+
case 'text':
|
|
218
|
+
openResponseBlock(state, index);
|
|
219
|
+
break;
|
|
220
|
+
case 'thinking':
|
|
221
|
+
openThinkingBlock(state, index);
|
|
222
|
+
break;
|
|
223
|
+
case 'tool_use':
|
|
224
|
+
openToolCallBlock(state, index, block.id, block.name);
|
|
225
|
+
break;
|
|
226
|
+
// redacted_thinking / server tool blocks are preserved in nativeBlocks only.
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function openResponseBlock(state, index) {
|
|
230
|
+
const content = {
|
|
231
|
+
type: 'response',
|
|
232
|
+
response: { type: 'text', content: '' },
|
|
233
|
+
};
|
|
234
|
+
const contentIndex = state.content.push(content) - 1;
|
|
235
|
+
state.blocks.set(index, { type: 'response', contentIndex, content, ended: false });
|
|
236
|
+
state.stream.push({ type: 'text_start', contentIndex });
|
|
237
|
+
}
|
|
238
|
+
function openThinkingBlock(state, index) {
|
|
239
|
+
const content = { type: 'thinking', thinkingText: '' };
|
|
240
|
+
const contentIndex = state.content.push(content) - 1;
|
|
241
|
+
state.blocks.set(index, { type: 'thinking', contentIndex, content, ended: false });
|
|
242
|
+
state.stream.push({ type: 'thinking_start', contentIndex });
|
|
243
|
+
}
|
|
244
|
+
function openToolCallBlock(state, index, toolCallId, name) {
|
|
245
|
+
const toolCall = {
|
|
246
|
+
type: 'toolCall',
|
|
247
|
+
toolCallId,
|
|
248
|
+
name,
|
|
249
|
+
arguments: {},
|
|
250
|
+
};
|
|
251
|
+
const contentIndex = state.content.push(toolCall) - 1;
|
|
252
|
+
state.blocks.set(index, {
|
|
253
|
+
type: 'tool_use',
|
|
254
|
+
contentIndex,
|
|
255
|
+
name,
|
|
256
|
+
toolCallId,
|
|
257
|
+
partialJson: '',
|
|
258
|
+
ended: false,
|
|
259
|
+
});
|
|
260
|
+
state.stream.push({ type: 'toolcall_start', contentIndex, toolCallId, name });
|
|
261
|
+
}
|
|
262
|
+
function handleContentBlockDelta(state, index, delta) {
|
|
263
|
+
switch (delta.type) {
|
|
264
|
+
case 'text_delta':
|
|
265
|
+
appendText(state, index, delta.text);
|
|
266
|
+
break;
|
|
267
|
+
case 'thinking_delta':
|
|
268
|
+
appendThinking(state, index, delta.thinking);
|
|
269
|
+
break;
|
|
270
|
+
case 'input_json_delta':
|
|
271
|
+
appendToolJson(state, index, delta.partial_json);
|
|
272
|
+
break;
|
|
273
|
+
case 'signature_delta':
|
|
274
|
+
appendSignature(state, index, delta.signature);
|
|
275
|
+
break;
|
|
276
|
+
case 'citations_delta':
|
|
277
|
+
// No normalized representation for citations.
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function appendText(state, index, delta) {
|
|
282
|
+
const block = state.blocks.get(index);
|
|
283
|
+
if (block?.type === 'response') {
|
|
284
|
+
block.content.response.content += delta;
|
|
285
|
+
state.stream.push({ type: 'text_delta', contentIndex: block.contentIndex, delta });
|
|
286
|
+
}
|
|
287
|
+
const native = state.nativeBlocks.get(index);
|
|
288
|
+
if (native?.type === 'text') {
|
|
289
|
+
native.text += delta;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function appendThinking(state, index, delta) {
|
|
293
|
+
const block = state.blocks.get(index);
|
|
294
|
+
if (block?.type === 'thinking') {
|
|
295
|
+
block.content.thinkingText += delta;
|
|
296
|
+
state.stream.push({ type: 'thinking_delta', contentIndex: block.contentIndex, delta });
|
|
297
|
+
}
|
|
298
|
+
const native = state.nativeBlocks.get(index);
|
|
299
|
+
if (native?.type === 'thinking') {
|
|
300
|
+
native.thinking += delta;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
function appendToolJson(state, index, delta) {
|
|
304
|
+
const block = state.blocks.get(index);
|
|
305
|
+
if (block?.type !== 'tool_use') {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
block.partialJson += delta;
|
|
309
|
+
const content = state.content[block.contentIndex];
|
|
310
|
+
if (content?.type === 'toolCall') {
|
|
311
|
+
content.arguments = parsePartialJsonObject(block.partialJson);
|
|
312
|
+
}
|
|
313
|
+
state.stream.push({ type: 'toolcall_delta', contentIndex: block.contentIndex, delta });
|
|
314
|
+
}
|
|
315
|
+
function appendSignature(state, index, delta) {
|
|
316
|
+
const native = state.nativeBlocks.get(index);
|
|
317
|
+
if (native?.type === 'thinking') {
|
|
318
|
+
native.signature += delta;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function handleContentBlockStop(state, index) {
|
|
322
|
+
const block = state.blocks.get(index);
|
|
323
|
+
const native = state.nativeBlocks.get(index);
|
|
324
|
+
if (native?.type === 'tool_use' && block?.type === 'tool_use') {
|
|
325
|
+
native.input = parseJsonObject(block.partialJson);
|
|
326
|
+
}
|
|
327
|
+
if (!block) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
finishBlock(state, block);
|
|
331
|
+
}
|
|
332
|
+
function finishBlock(state, block, options = {}) {
|
|
333
|
+
if (block.ended) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (block.type === 'response') {
|
|
337
|
+
block.ended = true;
|
|
338
|
+
state.stream.push({
|
|
339
|
+
type: 'text_end',
|
|
340
|
+
contentIndex: block.contentIndex,
|
|
341
|
+
content: block.content,
|
|
342
|
+
});
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (block.type === 'thinking') {
|
|
346
|
+
block.ended = true;
|
|
347
|
+
state.stream.push({
|
|
348
|
+
type: 'thinking_end',
|
|
349
|
+
contentIndex: block.contentIndex,
|
|
350
|
+
content: block.content,
|
|
351
|
+
});
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const args = options.allowInvalidToolJson
|
|
355
|
+
? parsePartialJsonObject(block.partialJson)
|
|
356
|
+
: parseJsonObject(block.partialJson);
|
|
357
|
+
block.ended = true;
|
|
358
|
+
const content = state.content[block.contentIndex];
|
|
359
|
+
if (content?.type === 'toolCall') {
|
|
360
|
+
content.arguments = args;
|
|
361
|
+
}
|
|
362
|
+
const toolCall = {
|
|
363
|
+
type: 'toolCall',
|
|
364
|
+
toolCallId: block.toolCallId,
|
|
365
|
+
name: block.name,
|
|
366
|
+
arguments: args,
|
|
367
|
+
};
|
|
368
|
+
state.stream.push({ type: 'toolcall_end', contentIndex: block.contentIndex, toolCall });
|
|
369
|
+
}
|
|
370
|
+
function closeOpenBlocks(state, options = {}) {
|
|
371
|
+
for (const block of state.blocks.values()) {
|
|
372
|
+
finishBlock(state, block, options);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function buildNativeMessage(state) {
|
|
376
|
+
if (!state.nativeMessage) {
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
const content = [...state.nativeBlocks.entries()]
|
|
380
|
+
.sort(([a], [b]) => a - b)
|
|
381
|
+
.map(([, block]) => block);
|
|
382
|
+
return {
|
|
383
|
+
...state.nativeMessage,
|
|
384
|
+
content,
|
|
385
|
+
stop_reason: state.stopReason ?? state.nativeMessage.stop_reason ?? null,
|
|
386
|
+
usage: { ...state.nativeMessage.usage, output_tokens: state.usage.output },
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
function buildUsage(state) {
|
|
390
|
+
if (!state.hadMessageStart) {
|
|
391
|
+
return undefined;
|
|
392
|
+
}
|
|
393
|
+
const { input, output, cacheRead, cacheWrite } = state.usage;
|
|
394
|
+
const { cost: costPerMillion } = state.model;
|
|
395
|
+
const cost = {
|
|
396
|
+
input: costForTokens(input, costPerMillion.input),
|
|
397
|
+
output: costForTokens(output, costPerMillion.output),
|
|
398
|
+
cacheRead: costForTokens(cacheRead, costPerMillion.cacheRead),
|
|
399
|
+
cacheWrite: costForTokens(cacheWrite, costPerMillion.cacheWrite),
|
|
400
|
+
total: 0,
|
|
401
|
+
};
|
|
402
|
+
cost.total = cost.input + cost.output + cost.cacheRead + cost.cacheWrite;
|
|
403
|
+
return { input, output, cacheRead, cacheWrite, cost };
|
|
404
|
+
}
|
|
405
|
+
function costForTokens(tokens, costPerMillion) {
|
|
406
|
+
return (tokens * costPerMillion) / 1_000_000;
|
|
407
|
+
}
|
|
408
|
+
function mapDoneStopReason(reason, content) {
|
|
409
|
+
switch (reason) {
|
|
410
|
+
case 'end_turn':
|
|
411
|
+
return 'stop';
|
|
412
|
+
case 'max_tokens':
|
|
413
|
+
return 'length';
|
|
414
|
+
case 'tool_use':
|
|
415
|
+
return 'toolUse';
|
|
416
|
+
case 'refusal':
|
|
417
|
+
return 'refusal';
|
|
418
|
+
case 'pause_turn':
|
|
419
|
+
return 'pauseTurn';
|
|
420
|
+
case 'stop_sequence':
|
|
421
|
+
return 'stop';
|
|
422
|
+
default:
|
|
423
|
+
return content.some((part) => part.type === 'toolCall') ? 'toolUse' : 'stop';
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
function modelRef(state) {
|
|
427
|
+
return {
|
|
428
|
+
provider: ANTHROPIC_PROVIDER,
|
|
429
|
+
id: state.request.modelId,
|
|
430
|
+
name: state.model.name,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function parsePartialJsonObject(value) {
|
|
434
|
+
try {
|
|
435
|
+
return parseJsonObject(value);
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
return {};
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
function parseJsonObject(value) {
|
|
442
|
+
const parsed = JSON.parse(value || '{}');
|
|
443
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
444
|
+
throw new Error('Anthropic tool call arguments must be a JSON object.');
|
|
445
|
+
}
|
|
446
|
+
return parsed;
|
|
447
|
+
}
|
|
448
|
+
function createDefaultMessageId() {
|
|
449
|
+
return `msg_${globalThis.crypto?.randomUUID?.() ?? `${Date.now()}_${Math.random().toString(36).slice(2)}`}`;
|
|
450
|
+
}
|
|
451
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAgC9D,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAkE3D,MAAM,OAAO,wBAAwB;IAC1B,QAAQ,GAAG,kBAAkB,CAAC;IAC9B,OAAO,CAA0B;IACjC,OAAO,CAA0B;IACjC,gBAAgB,CAAe;IAC/B,IAAI,CAAe;IACnB,aAAa,CAA4D;IAElF,YAAY,MAA+B,EAAE,OAAqC,EAAE;QAClF,IAAI,CAAC,OAAO,GAAG,6BAA6B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,iBAAiB,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,OAAsC;QAC3C,MAAM,MAAM,GAAG,iBAAiB,EAG7B,CAAC;QACJ,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAsC,EACtC,MAA4D;QAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAgB;YACzB,OAAO;YACP,KAAK;YACL,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;YACtB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,IAAI,GAAG,EAAsB;YACrC,YAAY,EAAE,IAAI,GAAG,EAAwB;YAC7C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;YAC3D,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEnF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBAC1C,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,eAAe,CAAC,KAAK,CAAC,CAAC;YAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,KAAkB;QACxC,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;YACtB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS;YACvC,aAAa;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED,mBAAmB,CACjB,KAAkB,EAClB,KAAc;QAEd,MAAM,OAAO,GAA8C;YACzD,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;YACtB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS;YACvC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;SACvC,CAAC;QAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACxC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oBAAoB,CAAC,KAAkB;QACrC,MAAM,OAAO,GAA+C;YAC1D,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;YACtB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS;YACvC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,SAAS;SACtB,CAAC;QAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QACxC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yBAAyB,CACvB,OAAsC;QAEtC,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC3B,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE;YAC5D,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE;gBACL,OAAO,EAAE,UAAU,OAAO,CAAC,OAAO,mCAAmC;gBACrE,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,+BAA+B;IAGjC,QAAQ,GAAG,kBAAkB,CAAC;IAC9B,KAAK,CAA+B;IAE7C,YAAY,OAAqC,EAAE;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,MAA+B;QACpC,OAAO,IAAI,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAA+B,EAC/B,IAAmC;IAEnC,OAAO,IAAI,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,IAAmC;IAEnC,OAAO,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA+B;IAC5D,OAAO,IAAI,SAAS,CAAC;QACnB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,OAAO;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAAyC;IAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,WAAW,GAAI,UAA4D,CAAC,OAAO,CAAC;IAC1F,MAAM,KAAK,GAAG,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,eAAe,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB,EAAE,KAA4B;IACzE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,eAAe;YAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM;QAER,KAAK,qBAAqB;YACxB,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM;QAER,KAAK,qBAAqB;YACxB,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM;QAER,KAAK,oBAAoB;YACvB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM;QAER,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC5B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;YAC7C,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACrE,MAAM;QAER,KAAK,cAAc;YACjB,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB,EAAE,OAAgB;IAC9D,KAAK,CAAC,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClD,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IACpD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;IACnE,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAkB,EAClB,KAAa,EACb,KAAmB;IAEnB,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAE5C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM;QAER,KAAK,UAAU;YACb,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM;QAER,KAAK,UAAU;YACb,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM;QAER,6EAA6E;IAC/E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB,EAAE,KAAa;IAC1D,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;KACxC,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB,EAAE,KAAa;IAC1D,MAAM,OAAO,GAA6B,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAkB,EAClB,KAAa,EACb,UAAkB,EAClB,IAAY;IAEZ,MAAM,QAAQ,GAAsB;QAClC,IAAI,EAAE,UAAU;QAChB,UAAU;QACV,IAAI;QACJ,SAAS,EAAE,EAAE;KACd,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;QACtB,IAAI,EAAE,UAAU;QAChB,YAAY;QACZ,IAAI;QACJ,UAAU;QACV,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAkB,EAClB,KAAa,EACb,KAA2B;IAE3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM;QAER,KAAK,gBAAgB;YACnB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM;QAER,KAAK,kBAAkB;YACrB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM;QAER,KAAK,iBAAiB;YACpB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM;QAER,KAAK,iBAAiB;YACpB,8CAA8C;YAC9C,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAa;IAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC;QACxC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAa;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAa;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAa;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAkB,EAAE,KAAa;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9D,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAClB,KAAkB,EAClB,KAAiB,EACjB,UAA8B,EAAE;IAEhC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB;QACvC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD,MAAM,QAAQ,GAAsB;QAClC,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,IAAI;KAChB,CAAC;IACF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB,EAAE,UAA8B,EAAE;IAC3E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO;QACL,GAAG,KAAK,CAAC,aAAa;QACtB,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI;QACxE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IAC7D,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;QACjD,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;QACpD,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC;QAC7D,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QAChE,KAAK,EAAE,CAAC;KACT,CAAC;IACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,cAAsB;IAC3D,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,SAAS,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA8B,EAC9B,OAA0B;IAE1B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,MAAM,CAAC;QAChB,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,YAAY;YACf,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB;IAClC,OAAO;QACL,QAAQ,EAAE,kBAAkB;QAC5B,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QACzB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9G,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AssistantError } from '@ank1015/agents-contracts';
|
|
2
|
+
export declare function isAbortError(error: unknown): boolean;
|
|
3
|
+
export declare function canRetryAnthropicError(error: unknown): boolean;
|
|
4
|
+
export declare function getAnthropicErrorDetails(error: unknown): AssistantError;
|
|
5
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAyDhE,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuB9D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAKvE"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { APIConnectionError, APIConnectionTimeoutError, APIError, APIUserAbortError, InternalServerError, RateLimitError, } from '@anthropic-ai/sdk/core/error.js';
|
|
2
|
+
function isObject(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null;
|
|
4
|
+
}
|
|
5
|
+
function isAnthropicErrorObject(value) {
|
|
6
|
+
return (isObject(value) &&
|
|
7
|
+
typeof value.type === 'string' &&
|
|
8
|
+
typeof value.message === 'string');
|
|
9
|
+
}
|
|
10
|
+
function getAnthropicErrorObject(error) {
|
|
11
|
+
const body = error.error;
|
|
12
|
+
if (isAnthropicErrorObject(body)) {
|
|
13
|
+
return body;
|
|
14
|
+
}
|
|
15
|
+
if (isObject(body) && 'error' in body && isAnthropicErrorObject(body.error)) {
|
|
16
|
+
return body.error;
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
function isRetryableAnthropicErrorType(type) {
|
|
21
|
+
return (type === 'rate_limit_error' ||
|
|
22
|
+
type === 'api_error' ||
|
|
23
|
+
type === 'overloaded_error' ||
|
|
24
|
+
type === 'timeout_error');
|
|
25
|
+
}
|
|
26
|
+
function getErrorMessage(error) {
|
|
27
|
+
if (error instanceof APIError) {
|
|
28
|
+
const anthropicError = getAnthropicErrorObject(error);
|
|
29
|
+
if (anthropicError) {
|
|
30
|
+
return anthropicError.message;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (error instanceof Error) {
|
|
34
|
+
return error.message;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
return JSON.stringify(error) ?? String(error);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return String(error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function isAbortError(error) {
|
|
44
|
+
return (error instanceof APIUserAbortError ||
|
|
45
|
+
error?.name === 'AbortError');
|
|
46
|
+
}
|
|
47
|
+
export function canRetryAnthropicError(error) {
|
|
48
|
+
if (error instanceof APIUserAbortError) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (error instanceof APIConnectionTimeoutError || error instanceof APIConnectionError) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if (error instanceof RateLimitError || error instanceof InternalServerError) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (error instanceof APIError) {
|
|
58
|
+
const anthropicError = getAnthropicErrorObject(error);
|
|
59
|
+
if (isRetryableAnthropicErrorType(anthropicError?.type)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return error.status === 429 || (typeof error.status === 'number' && error.status >= 500);
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
export function getAnthropicErrorDetails(error) {
|
|
67
|
+
return {
|
|
68
|
+
message: getErrorMessage(error),
|
|
69
|
+
canRetry: canRetryAnthropicError(error),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,yCAAyC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,yCAAyC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LLMRequest, Model, ToolDefinition } from '@ank1015/agents-contracts';
|
|
2
|
+
import type { Message as AnthropicMessage, MessageCreateParamsStreaming, MessageParam, Tool } from '@anthropic-ai/sdk/resources/messages.js';
|
|
3
|
+
import type { AnthropicProvider } from '@ank1015/agents-provider-anthropic-spec';
|
|
4
|
+
export declare function buildAnthropicMessageParams(request: LLMRequest<AnthropicProvider>, model: Model<AnthropicProvider>): MessageCreateParamsStreaming;
|
|
5
|
+
export declare function buildAnthropicMessages(request: LLMRequest<AnthropicProvider>, model: Model<AnthropicProvider>): MessageParam[];
|
|
6
|
+
export declare function convertTools(tools: readonly ToolDefinition[]): Tool[];
|
|
7
|
+
export declare function isAnthropicMessage(value: unknown): value is AnthropicMessage;
|
|
8
|
+
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,UAAU,EACV,KAAK,EAEL,cAAc,EAEf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAEV,OAAO,IAAI,gBAAgB,EAC3B,4BAA4B,EAC5B,YAAY,EAEZ,IAAI,EAGL,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAKjF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,UAAU,CAAC,iBAAiB,CAAC,EACtC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAC9B,4BAA4B,CAmB9B;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,UAAU,CAAC,iBAAiB,CAAC,EACtC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAC9B,YAAY,EAAE,CAQhB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,EAAE,CAerE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAQ5E"}
|
package/dist/mapping.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { toolParametersToJsonSchema } from '@ank1015/agents-contracts';
|
|
2
|
+
import { ANTHROPIC_PROVIDER } from '@ank1015/agents-provider-anthropic-spec';
|
|
3
|
+
export function buildAnthropicMessageParams(request, model) {
|
|
4
|
+
const providerOptions = request.providerOptions ?? {};
|
|
5
|
+
const params = {
|
|
6
|
+
...providerOptions,
|
|
7
|
+
model: request.modelId,
|
|
8
|
+
messages: buildAnthropicMessages(request, model),
|
|
9
|
+
max_tokens: providerOptions.max_tokens ?? model.maxTokens,
|
|
10
|
+
stream: true,
|
|
11
|
+
};
|
|
12
|
+
if (request.instructions !== undefined) {
|
|
13
|
+
params.system = request.instructions;
|
|
14
|
+
}
|
|
15
|
+
if (request.tools?.length) {
|
|
16
|
+
params.tools = convertTools(request.tools);
|
|
17
|
+
}
|
|
18
|
+
return params;
|
|
19
|
+
}
|
|
20
|
+
export function buildAnthropicMessages(request, model) {
|
|
21
|
+
const messages = [];
|
|
22
|
+
for (const message of request.messages) {
|
|
23
|
+
messages.push(...buildMessageInput(message, model));
|
|
24
|
+
}
|
|
25
|
+
return messages;
|
|
26
|
+
}
|
|
27
|
+
export function convertTools(tools) {
|
|
28
|
+
return tools.map((tool) => {
|
|
29
|
+
if (tool.type === 'custom') {
|
|
30
|
+
throw new Error(`Anthropic provider does not support custom (grammar) tools: "${tool.name}".`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
name: tool.name,
|
|
34
|
+
description: tool.description,
|
|
35
|
+
input_schema: toolParametersToJsonSchema(tool.parameters),
|
|
36
|
+
...(tool.strict == null ? {} : { strict: tool.strict }),
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export function isAnthropicMessage(value) {
|
|
41
|
+
return (typeof value === 'object' &&
|
|
42
|
+
value !== null &&
|
|
43
|
+
value.type === 'message' &&
|
|
44
|
+
value.role === 'assistant' &&
|
|
45
|
+
Array.isArray(value.content));
|
|
46
|
+
}
|
|
47
|
+
function buildMessageInput(message, model) {
|
|
48
|
+
switch (message.role) {
|
|
49
|
+
case 'user': {
|
|
50
|
+
const content = contentToBlocks(message.content, model);
|
|
51
|
+
return content.length > 0 ? [{ role: 'user', content }] : [];
|
|
52
|
+
}
|
|
53
|
+
case 'toolResult':
|
|
54
|
+
return [buildToolResultMessage(message, model)];
|
|
55
|
+
case 'assistant':
|
|
56
|
+
return buildAssistantMessages(message);
|
|
57
|
+
case 'custom':
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function buildToolResultMessage(message, model) {
|
|
62
|
+
const blocks = contentToBlocks(message.content, model, message.isError);
|
|
63
|
+
const textOnly = blocks.length > 0 && blocks.every((block) => block.type === 'text');
|
|
64
|
+
let content;
|
|
65
|
+
if (textOnly) {
|
|
66
|
+
content = blocks.map((block) => block.text).join('\n');
|
|
67
|
+
}
|
|
68
|
+
else if (blocks.length > 0) {
|
|
69
|
+
content = blocks;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
content = message.isError ? '[TOOL ERROR]' : '';
|
|
73
|
+
}
|
|
74
|
+
const toolResult = {
|
|
75
|
+
type: 'tool_result',
|
|
76
|
+
tool_use_id: message.toolCallId,
|
|
77
|
+
content,
|
|
78
|
+
is_error: message.isError,
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
role: 'user',
|
|
82
|
+
content: [toolResult],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function buildAssistantMessages(message) {
|
|
86
|
+
if (message.model.provider === ANTHROPIC_PROVIDER &&
|
|
87
|
+
isAnthropicMessage(message.nativeMessage)) {
|
|
88
|
+
const content = message.nativeMessage.content;
|
|
89
|
+
return content.length > 0
|
|
90
|
+
? [{ role: 'assistant', content: content }]
|
|
91
|
+
: [];
|
|
92
|
+
}
|
|
93
|
+
return assistantResponseToMessages(message.content);
|
|
94
|
+
}
|
|
95
|
+
function assistantResponseToMessages(content) {
|
|
96
|
+
const blocks = [];
|
|
97
|
+
let textBuffer = '';
|
|
98
|
+
const flushText = () => {
|
|
99
|
+
if (!textBuffer) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
blocks.push({ type: 'text', text: textBuffer });
|
|
103
|
+
textBuffer = '';
|
|
104
|
+
};
|
|
105
|
+
for (const part of content) {
|
|
106
|
+
if (part.type === 'thinking') {
|
|
107
|
+
flushText();
|
|
108
|
+
blocks.push({ type: 'text', text: `<thinking>${part.thinkingText}</thinking>` });
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (part.type === 'response') {
|
|
112
|
+
textBuffer += part.response.content;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
flushText();
|
|
116
|
+
blocks.push({
|
|
117
|
+
type: 'tool_use',
|
|
118
|
+
id: part.toolCallId,
|
|
119
|
+
name: part.name,
|
|
120
|
+
input: part.arguments,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
flushText();
|
|
124
|
+
return blocks.length > 0 ? [{ role: 'assistant', content: blocks }] : [];
|
|
125
|
+
}
|
|
126
|
+
function contentToBlocks(content, model, errorPrefix = false) {
|
|
127
|
+
const blocks = [];
|
|
128
|
+
for (const part of content) {
|
|
129
|
+
if (part.type === 'text') {
|
|
130
|
+
blocks.push({
|
|
131
|
+
type: 'text',
|
|
132
|
+
text: errorPrefix ? `[TOOL ERROR] ${part.content}` : part.content,
|
|
133
|
+
});
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
assertImageInputSupported(model);
|
|
137
|
+
blocks.push({
|
|
138
|
+
type: 'image',
|
|
139
|
+
source: {
|
|
140
|
+
type: 'base64',
|
|
141
|
+
media_type: part.mimeType,
|
|
142
|
+
data: part.data,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return blocks;
|
|
147
|
+
}
|
|
148
|
+
function assertImageInputSupported(model) {
|
|
149
|
+
if (!model.input.includes('image')) {
|
|
150
|
+
throw new Error(`Model "${model.id}" does not support image input.`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ank1015/agents-provider-anthropic",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Anthropic Messages API runtime adapter for @ank1015/agents.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"agents",
|
|
7
|
+
"anthropic",
|
|
8
|
+
"claude",
|
|
9
|
+
"llm",
|
|
10
|
+
"typescript"
|
|
11
|
+
],
|
|
12
|
+
"license": "UNLICENSED",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/ank1015/agent.git",
|
|
20
|
+
"directory": "packages/provider-anthropic"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/ank1015/agent/issues"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/ank1015/agent#readme",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./adapter": {
|
|
32
|
+
"types": "./dist/adapter.d.ts",
|
|
33
|
+
"import": "./dist/adapter.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md",
|
|
42
|
+
"CHANGELOG.md"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"prepack": "tsc -b",
|
|
46
|
+
"build": "tsc -b",
|
|
47
|
+
"check": "tsc -b --pretty false",
|
|
48
|
+
"test": "vitest run && tsc --noEmit --strict --skipLibCheck --module NodeNext --moduleResolution NodeNext --target ES2022 --ignoreConfig tests/*.test.ts",
|
|
49
|
+
"clean": "rm -rf dist ../../.tsbuildinfo/provider-anthropic.tsbuildinfo"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@ank1015/agents-contracts": "^0.1.1",
|
|
53
|
+
"@ank1015/agents-provider-anthropic-spec": "^0.1.0",
|
|
54
|
+
"@anthropic-ai/sdk": "^0.104.2",
|
|
55
|
+
"zod": "^4.4.3"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"vitest": "^4.1.9"
|
|
59
|
+
}
|
|
60
|
+
}
|