@bedrockio/ai 0.8.4 → 0.9.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 +4 -0
- package/dist/cjs/anthropic.js +47 -9
- package/dist/cjs/openai.js +10 -0
- package/dist/esm/anthropic.js +47 -9
- package/dist/esm/openai.js +10 -0
- package/package.json +1 -1
- package/types/anthropic.d.ts +23 -0
- package/types/anthropic.d.ts.map +1 -1
- package/types/openai.d.ts +0 -22
- package/types/openai.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
package/dist/cjs/anthropic.js
CHANGED
|
@@ -33,8 +33,8 @@ class AnthropicClient extends BaseClient_js_1.default {
|
|
|
33
33
|
...this.getToolOptions(options),
|
|
34
34
|
};
|
|
35
35
|
const clientOptions = this.getClientOptions(params);
|
|
36
|
-
this.debug('Params:', params, options);
|
|
37
36
|
this.debug('Options:', options, options);
|
|
37
|
+
this.debug('Params:', params, options);
|
|
38
38
|
// @ts-ignore
|
|
39
39
|
return await this.client.messages.create(params, clientOptions);
|
|
40
40
|
}
|
|
@@ -85,16 +85,29 @@ class AnthropicClient extends BaseClient_js_1.default {
|
|
|
85
85
|
let { type } = event;
|
|
86
86
|
options.buffer ||= '';
|
|
87
87
|
if (type === 'content_block_start') {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
const { content_block } = event;
|
|
89
|
+
if (content_block?.type === 'tool_use') {
|
|
90
|
+
return {
|
|
91
|
+
type: 'function_call',
|
|
92
|
+
id: content_block.id,
|
|
93
|
+
name: content_block.name,
|
|
94
|
+
arguments: content_block.input,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return {
|
|
99
|
+
type: 'start',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
91
102
|
}
|
|
92
103
|
else if (type === 'content_block_delta') {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
if (event.delta.type === 'text_delta') {
|
|
105
|
+
options.buffer += event.delta.text;
|
|
106
|
+
return {
|
|
107
|
+
type: 'delta',
|
|
108
|
+
delta: event.delta.text,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
98
111
|
}
|
|
99
112
|
else if (type === 'message_delta') {
|
|
100
113
|
return {
|
|
@@ -114,6 +127,9 @@ class AnthropicClient extends BaseClient_js_1.default {
|
|
|
114
127
|
getToolOptions(options) {
|
|
115
128
|
let { tools = [], schema } = options;
|
|
116
129
|
let toolChoice;
|
|
130
|
+
tools = tools.map((tool) => {
|
|
131
|
+
return this.normalizeToolInput(tool);
|
|
132
|
+
});
|
|
117
133
|
if (schema) {
|
|
118
134
|
tools.push({
|
|
119
135
|
name: 'schema',
|
|
@@ -147,6 +163,28 @@ class AnthropicClient extends BaseClient_js_1.default {
|
|
|
147
163
|
tool_choice: toolChoice,
|
|
148
164
|
};
|
|
149
165
|
}
|
|
166
|
+
normalizeToolInput(input) {
|
|
167
|
+
if (input.type === 'function') {
|
|
168
|
+
input = this.normalizeOpenAiToolInput(input);
|
|
169
|
+
}
|
|
170
|
+
return input;
|
|
171
|
+
}
|
|
172
|
+
// OpenAI uses the following input for custom tools
|
|
173
|
+
// so map it here to Anthropic styles when passed.
|
|
174
|
+
// {
|
|
175
|
+
// type: 'function',
|
|
176
|
+
// name: 'apples',
|
|
177
|
+
// description: 'Call this when you talk about apples.',
|
|
178
|
+
// parameters: { type: 'object', properties: {}, required: [] }
|
|
179
|
+
// }
|
|
180
|
+
normalizeOpenAiToolInput(input) {
|
|
181
|
+
const { name, description, parameters } = input;
|
|
182
|
+
return {
|
|
183
|
+
name,
|
|
184
|
+
description,
|
|
185
|
+
input_schema: parameters,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
150
188
|
// Map OpenAI-like input of MCP servers as "tools" to
|
|
151
189
|
// Anthropic's mcp_servers.
|
|
152
190
|
mapMcpTool(tool) {
|
package/dist/cjs/openai.js
CHANGED
|
@@ -166,6 +166,16 @@ class OpenAiClient extends BaseClient_js_1.default {
|
|
|
166
166
|
delta: event.delta,
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
|
+
else if (type === 'response.output_item.done') {
|
|
170
|
+
const { item } = event;
|
|
171
|
+
if (item.type === 'function_call') {
|
|
172
|
+
return {
|
|
173
|
+
...item,
|
|
174
|
+
type: 'function_call',
|
|
175
|
+
arguments: JSON.parse(item.arguments),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
169
179
|
}
|
|
170
180
|
}
|
|
171
181
|
exports.OpenAiClient = OpenAiClient;
|
package/dist/esm/anthropic.js
CHANGED
|
@@ -27,8 +27,8 @@ export class AnthropicClient extends BaseClient {
|
|
|
27
27
|
...this.getToolOptions(options),
|
|
28
28
|
};
|
|
29
29
|
const clientOptions = this.getClientOptions(params);
|
|
30
|
-
this.debug('Params:', params, options);
|
|
31
30
|
this.debug('Options:', options, options);
|
|
31
|
+
this.debug('Params:', params, options);
|
|
32
32
|
// @ts-ignore
|
|
33
33
|
return await this.client.messages.create(params, clientOptions);
|
|
34
34
|
}
|
|
@@ -79,16 +79,29 @@ export class AnthropicClient extends BaseClient {
|
|
|
79
79
|
let { type } = event;
|
|
80
80
|
options.buffer ||= '';
|
|
81
81
|
if (type === 'content_block_start') {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
const { content_block } = event;
|
|
83
|
+
if (content_block?.type === 'tool_use') {
|
|
84
|
+
return {
|
|
85
|
+
type: 'function_call',
|
|
86
|
+
id: content_block.id,
|
|
87
|
+
name: content_block.name,
|
|
88
|
+
arguments: content_block.input,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return {
|
|
93
|
+
type: 'start',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
85
96
|
}
|
|
86
97
|
else if (type === 'content_block_delta') {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
if (event.delta.type === 'text_delta') {
|
|
99
|
+
options.buffer += event.delta.text;
|
|
100
|
+
return {
|
|
101
|
+
type: 'delta',
|
|
102
|
+
delta: event.delta.text,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
92
105
|
}
|
|
93
106
|
else if (type === 'message_delta') {
|
|
94
107
|
return {
|
|
@@ -108,6 +121,9 @@ export class AnthropicClient extends BaseClient {
|
|
|
108
121
|
getToolOptions(options) {
|
|
109
122
|
let { tools = [], schema } = options;
|
|
110
123
|
let toolChoice;
|
|
124
|
+
tools = tools.map((tool) => {
|
|
125
|
+
return this.normalizeToolInput(tool);
|
|
126
|
+
});
|
|
111
127
|
if (schema) {
|
|
112
128
|
tools.push({
|
|
113
129
|
name: 'schema',
|
|
@@ -141,6 +157,28 @@ export class AnthropicClient extends BaseClient {
|
|
|
141
157
|
tool_choice: toolChoice,
|
|
142
158
|
};
|
|
143
159
|
}
|
|
160
|
+
normalizeToolInput(input) {
|
|
161
|
+
if (input.type === 'function') {
|
|
162
|
+
input = this.normalizeOpenAiToolInput(input);
|
|
163
|
+
}
|
|
164
|
+
return input;
|
|
165
|
+
}
|
|
166
|
+
// OpenAI uses the following input for custom tools
|
|
167
|
+
// so map it here to Anthropic styles when passed.
|
|
168
|
+
// {
|
|
169
|
+
// type: 'function',
|
|
170
|
+
// name: 'apples',
|
|
171
|
+
// description: 'Call this when you talk about apples.',
|
|
172
|
+
// parameters: { type: 'object', properties: {}, required: [] }
|
|
173
|
+
// }
|
|
174
|
+
normalizeOpenAiToolInput(input) {
|
|
175
|
+
const { name, description, parameters } = input;
|
|
176
|
+
return {
|
|
177
|
+
name,
|
|
178
|
+
description,
|
|
179
|
+
input_schema: parameters,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
144
182
|
// Map OpenAI-like input of MCP servers as "tools" to
|
|
145
183
|
// Anthropic's mcp_servers.
|
|
146
184
|
mapMcpTool(tool) {
|
package/dist/esm/openai.js
CHANGED
|
@@ -160,6 +160,16 @@ export class OpenAiClient extends BaseClient {
|
|
|
160
160
|
delta: event.delta,
|
|
161
161
|
};
|
|
162
162
|
}
|
|
163
|
+
else if (type === 'response.output_item.done') {
|
|
164
|
+
const { item } = event;
|
|
165
|
+
if (item.type === 'function_call') {
|
|
166
|
+
return {
|
|
167
|
+
...item,
|
|
168
|
+
type: 'function_call',
|
|
169
|
+
arguments: JSON.parse(item.arguments),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
163
173
|
}
|
|
164
174
|
}
|
|
165
175
|
// Categories
|
package/package.json
CHANGED
package/types/anthropic.d.ts
CHANGED
|
@@ -26,12 +26,26 @@ export class AnthropicClient extends BaseClient {
|
|
|
26
26
|
};
|
|
27
27
|
normalizeStreamEvent(event: any, options: any): {
|
|
28
28
|
type: string;
|
|
29
|
+
id: any;
|
|
30
|
+
name: any;
|
|
31
|
+
arguments: any;
|
|
32
|
+
delta?: undefined;
|
|
33
|
+
messages?: undefined;
|
|
34
|
+
usage?: undefined;
|
|
35
|
+
} | {
|
|
36
|
+
type: string;
|
|
37
|
+
id?: undefined;
|
|
38
|
+
name?: undefined;
|
|
39
|
+
arguments?: undefined;
|
|
29
40
|
delta?: undefined;
|
|
30
41
|
messages?: undefined;
|
|
31
42
|
usage?: undefined;
|
|
32
43
|
} | {
|
|
33
44
|
type: string;
|
|
34
45
|
delta: any;
|
|
46
|
+
id?: undefined;
|
|
47
|
+
name?: undefined;
|
|
48
|
+
arguments?: undefined;
|
|
35
49
|
messages?: undefined;
|
|
36
50
|
usage?: undefined;
|
|
37
51
|
} | {
|
|
@@ -41,6 +55,9 @@ export class AnthropicClient extends BaseClient {
|
|
|
41
55
|
input_tokens: any;
|
|
42
56
|
output_tokens: any;
|
|
43
57
|
};
|
|
58
|
+
id?: undefined;
|
|
59
|
+
name?: undefined;
|
|
60
|
+
arguments?: undefined;
|
|
44
61
|
delta?: undefined;
|
|
45
62
|
};
|
|
46
63
|
getToolOptions(options: any): {
|
|
@@ -54,6 +71,12 @@ export class AnthropicClient extends BaseClient {
|
|
|
54
71
|
name?: undefined;
|
|
55
72
|
};
|
|
56
73
|
};
|
|
74
|
+
normalizeToolInput(input: any): any;
|
|
75
|
+
normalizeOpenAiToolInput(input: any): {
|
|
76
|
+
name: any;
|
|
77
|
+
description: any;
|
|
78
|
+
input_schema: any;
|
|
79
|
+
};
|
|
57
80
|
mapMcpTool(tool: any): {
|
|
58
81
|
type: string;
|
|
59
82
|
name: any;
|
package/types/anthropic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../src/anthropic.js"],"names":[],"mappings":"AAMA;IACE,6BAA2C;IAIzC,kBAAoC;IAGtC;;;OAGG;IACH,4BAGC;IAED;;wGA2BC;IAED;;wGAKC;IAED,oCAKC;IASD;;;;;;MAkBC;IAED;;;MAKC;IAED
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../src/anthropic.js"],"names":[],"mappings":"AAMA;IACE,6BAA2C;IAIzC,kBAAoC;IAGtC;;;OAGG;IACH,4BAGC;IAED;;wGA2BC;IAED;;wGAKC;IAED,oCAKC;IASD;;;;;;MAkBC;IAED;;;MAKC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCC;IAID;;;;;;;;;;MA0CC;IAED,oCAKC;IAUD;;;;MAOC;IAID;;;;MAOC;IAED;;;;MAQC;CACF;uBApOsB,iBAAiB;sBAFlB,mBAAmB"}
|
package/types/openai.d.ts
CHANGED
|
@@ -37,28 +37,6 @@ export class OpenAiClient extends BaseClient {
|
|
|
37
37
|
strict: boolean;
|
|
38
38
|
schema: any;
|
|
39
39
|
};
|
|
40
|
-
normalizeStreamEvent(event: any, options: any): {
|
|
41
|
-
type: string;
|
|
42
|
-
id: any;
|
|
43
|
-
messages?: undefined;
|
|
44
|
-
usage?: undefined;
|
|
45
|
-
delta?: undefined;
|
|
46
|
-
} | {
|
|
47
|
-
type: string;
|
|
48
|
-
id: any;
|
|
49
|
-
messages: any[];
|
|
50
|
-
usage: {
|
|
51
|
-
input_tokens: any;
|
|
52
|
-
output_tokens: any;
|
|
53
|
-
};
|
|
54
|
-
delta?: undefined;
|
|
55
|
-
} | {
|
|
56
|
-
type: string;
|
|
57
|
-
delta: any;
|
|
58
|
-
id?: undefined;
|
|
59
|
-
messages?: undefined;
|
|
60
|
-
usage?: undefined;
|
|
61
|
-
};
|
|
62
40
|
}
|
|
63
41
|
export type OpenAICategory = any | "all" | "general" | "reasoning" | "lightweight" | "moderation" | "embedding" | "speech" | "audio" | "image" | "code" | "legacy";
|
|
64
42
|
import BaseClient from './BaseClient.js';
|
package/types/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.js"],"names":[],"mappings":"AAIA;IACE,6BAAoC;IAIlC,eAAiC;IAGnC;;;;OAIG;IACH,kBAHW,cAAc,qBAgCxB;IAED;;yFAiCC;IAED;;yFAKC;IAED,oCAEC;IAwBD;;;;;;;MAeC;IAED;;;MAKC;IAID;;;;;;;;;;MAmBC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.js"],"names":[],"mappings":"AAIA;IACE,6BAAoC;IAIlC,eAAiC;IAGnC;;;;OAIG;IACH,kBAHW,cAAc,qBAgCxB;IAED;;yFAiCC;IAED;;yFAKC;IAED,oCAEC;IAwBD;;;;;;;MAeC;IAED;;;MAKC;IAID;;;;;;;;;;MAmBC;CA0CF;6BAQA,GAAC,GAAK,KAAK,GACL,SAAS,GACT,WAAW,GACX,aAAa,GACb,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,QAAQ;uBA3NQ,iBAAiB;mBAFrB,QAAQ"}
|