@namzu/bedrock 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +270 -0
  2. package/dist/__tests__/bedrock.test.js +44 -0
  3. package/dist/__tests__/bedrock.test.js.map +1 -1
  4. package/dist/__tests__/error-taxonomy.test.d.ts +17 -0
  5. package/dist/__tests__/error-taxonomy.test.d.ts.map +1 -0
  6. package/dist/__tests__/error-taxonomy.test.js +192 -0
  7. package/dist/__tests__/error-taxonomy.test.js.map +1 -0
  8. package/dist/__tests__/prompt-cache.test.d.ts +2 -0
  9. package/dist/__tests__/prompt-cache.test.d.ts.map +1 -0
  10. package/dist/__tests__/prompt-cache.test.js +68 -0
  11. package/dist/__tests__/prompt-cache.test.js.map +1 -0
  12. package/dist/__tests__/tool-choice-none.test.d.ts +2 -0
  13. package/dist/__tests__/tool-choice-none.test.d.ts.map +1 -0
  14. package/dist/__tests__/tool-choice-none.test.js +76 -0
  15. package/dist/__tests__/tool-choice-none.test.js.map +1 -0
  16. package/dist/__tests__/tool-content-blocks.test.d.ts +2 -0
  17. package/dist/__tests__/tool-content-blocks.test.d.ts.map +1 -0
  18. package/dist/__tests__/tool-content-blocks.test.js +92 -0
  19. package/dist/__tests__/tool-content-blocks.test.js.map +1 -0
  20. package/dist/__tests__/vision.test.d.ts +2 -0
  21. package/dist/__tests__/vision.test.d.ts.map +1 -0
  22. package/dist/__tests__/vision.test.js +77 -0
  23. package/dist/__tests__/vision.test.js.map +1 -0
  24. package/dist/client.d.ts +13 -1
  25. package/dist/client.d.ts.map +1 -1
  26. package/dist/client.js +130 -76
  27. package/dist/client.js.map +1 -1
  28. package/package.json +5 -5
  29. package/src/__tests__/bedrock.test.ts +47 -0
  30. package/src/__tests__/error-taxonomy.test.ts +236 -0
  31. package/src/__tests__/prompt-cache.test.ts +81 -0
  32. package/src/__tests__/tool-choice-none.test.ts +87 -0
  33. package/src/__tests__/tool-content-blocks.test.ts +119 -0
  34. package/src/__tests__/vision.test.ts +98 -0
  35. package/src/client.ts +134 -77
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/bedrock",
3
- "version": "1.0.2",
3
+ "version": "2.0.0",
4
4
  "description": "AWS Bedrock LLM provider for @namzu/sdk. Provides Converse API (chat + streaming) with full tool-use support.",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "type": "module",
@@ -34,17 +34,17 @@
34
34
  "provenance": true
35
35
  },
36
36
  "dependencies": {
37
- "@aws-sdk/client-bedrock-runtime": "^3.700.0"
37
+ "@aws-sdk/client-bedrock-runtime": "^3.1101.0"
38
38
  },
39
39
  "peerDependencies": {
40
- "@namzu/sdk": ">=1.0.0"
40
+ "@namzu/sdk": ">=1.3.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@biomejs/biome": "^1.9.4",
44
44
  "@types/node": "^22.19.17",
45
45
  "typescript": "^5.5.0",
46
- "vitest": "^2.0.0",
47
- "@namzu/sdk": "^1.2.0"
46
+ "vitest": "^3.2.6",
47
+ "@namzu/sdk": "^3.0.0"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "tsc --build",
@@ -45,6 +45,7 @@ describe('@namzu/bedrock', () => {
45
45
  supportsStreaming: true,
46
46
  supportsFunctionCalling: true,
47
47
  supportsVision: false,
48
+ supportsDocuments: false,
48
49
  })
49
50
  })
50
51
 
@@ -53,4 +54,50 @@ describe('@namzu/bedrock', () => {
53
54
  expect(provider.capabilities).toEqual(BEDROCK_CAPABILITIES)
54
55
  })
55
56
  })
57
+
58
+ it('keeps the Namzu enforcement hint out of the Bedrock command', async () => {
59
+ const provider = new BedrockProvider({ region: 'us-east-1' })
60
+ let commandInput: Record<string, unknown> | undefined
61
+ ;(provider as unknown as { client: unknown }).client = {
62
+ send: async (command: { input: Record<string, unknown> }) => {
63
+ commandInput = command.input
64
+ return {
65
+ $metadata: { requestId: 'request-test' },
66
+ stream: (async function* () {})(),
67
+ }
68
+ },
69
+ }
70
+
71
+ for await (const _chunk of provider.chatStream({
72
+ model: 'anthropic.claude-sonnet-5-v1:0',
73
+ messages: [{ role: 'user', content: 'edit' }],
74
+ tools: [
75
+ {
76
+ type: 'function',
77
+ function: {
78
+ name: 'edit',
79
+ description: 'Edit',
80
+ parameters: { type: 'object' },
81
+ },
82
+ },
83
+ ],
84
+ enforceToolInputSchema: ['edit'],
85
+ })) {
86
+ // Drain the empty test stream.
87
+ }
88
+
89
+ expect(commandInput).not.toHaveProperty('enforceToolInputSchema')
90
+ expect(commandInput?.toolConfig).toEqual({
91
+ tools: [
92
+ {
93
+ toolSpec: {
94
+ name: 'edit',
95
+ description: 'Edit',
96
+ inputSchema: { json: { type: 'object' } },
97
+ },
98
+ },
99
+ ],
100
+ toolChoice: { auto: {} },
101
+ })
102
+ })
56
103
  })
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Provider error taxonomy — Bedrock driver.
3
+ *
4
+ * `chatStream` awaits `this.client.send(command)` with no catch, so an AWS
5
+ * `BedrockRuntimeServiceException` (`ThrottlingException`,
6
+ * `ValidationException`, `ServiceUnavailableException`, …) escapes verbatim.
7
+ * A caller cannot classify it without importing `@aws-sdk/client-bedrock-runtime`.
8
+ *
9
+ * Transport seam: `BedrockConfig` exposes no `requestHandler`/`endpoint`, so
10
+ * unlike the fetch-based drivers there is nothing to inject at the HTTP
11
+ * layer. The tests substitute the `BedrockRuntimeClient`'s `send` and reject
12
+ * with the REAL AWS exception classes — which is exactly what the driver
13
+ * sees from a live call, and the only surface the driver's (currently
14
+ * absent) error mapping would act on.
15
+ */
16
+
17
+ import {
18
+ AccessDeniedException,
19
+ ModelErrorException,
20
+ ServiceQuotaExceededException,
21
+ ServiceUnavailableException,
22
+ ThrottlingException,
23
+ ValidationException,
24
+ } from '@aws-sdk/client-bedrock-runtime'
25
+ import type { ConverseStreamOutput } from '@aws-sdk/client-bedrock-runtime'
26
+ import { describe, expect, it } from 'vitest'
27
+ import { BedrockProvider } from '../client.js'
28
+
29
+ /** Replace the AWS client's `send` so it rejects with `err`. */
30
+ function providerRejectingWith(err: unknown): BedrockProvider {
31
+ const provider = new BedrockProvider({ region: 'eu-west-1' })
32
+ ;(provider as unknown as { client: { send: () => Promise<never> } }).client = {
33
+ send: () => Promise.reject(err),
34
+ }
35
+ return provider
36
+ }
37
+
38
+ function providerStreaming(...events: ConverseStreamOutput[]): BedrockProvider {
39
+ const provider = new BedrockProvider({ region: 'eu-west-1' })
40
+ ;(provider as unknown as { client: { send: () => Promise<unknown> } }).client = {
41
+ send: async () => ({
42
+ $metadata: { requestId: 'bedrock-test' },
43
+ stream: (async function* () {
44
+ yield* events
45
+ })(),
46
+ }),
47
+ }
48
+ return provider
49
+ }
50
+
51
+ async function captureChatStreamError(
52
+ provider: BedrockProvider,
53
+ signal?: AbortSignal,
54
+ ): Promise<unknown> {
55
+ try {
56
+ for await (const _chunk of provider.chatStream({
57
+ model: 'anthropic.claude-sonnet-4-5-20250929-v1:0',
58
+ messages: [{ role: 'user', content: 'hi' }],
59
+ signal,
60
+ })) {
61
+ // drain
62
+ }
63
+ } catch (err) {
64
+ return err
65
+ }
66
+ throw new Error('expected chatStream to throw')
67
+ }
68
+
69
+ describe('@namzu/bedrock — provider error taxonomy', () => {
70
+ it('(a) ThrottlingException with `retry-after: 2` becomes a throttle-classified error carrying retryAfterMs', async () => {
71
+ const aws = new ThrottlingException({
72
+ message: 'Too many requests, please wait before trying again.',
73
+ $metadata: { httpStatusCode: 429 },
74
+ })
75
+ ;(aws as unknown as { $response: unknown }).$response = {
76
+ statusCode: 429,
77
+ headers: { 'retry-after': '2' },
78
+ }
79
+
80
+ const err = await captureChatStreamError(providerRejectingWith(aws))
81
+
82
+ expect(err).toMatchObject({
83
+ name: 'ProviderRequestError',
84
+ kind: 'throttle',
85
+ status: 429,
86
+ retryAfterMs: 2000,
87
+ providerId: 'bedrock',
88
+ })
89
+ })
90
+
91
+ it("(c) a ValidationException reporting too many input tokens classifies as 'context_overflow'", async () => {
92
+ const aws = new ValidationException({
93
+ message:
94
+ 'Input is too long for requested model. The input token count exceeds the maximum for this model.',
95
+ $metadata: { httpStatusCode: 400 },
96
+ })
97
+
98
+ const err = await captureChatStreamError(providerRejectingWith(aws))
99
+
100
+ expect(err).toMatchObject({
101
+ name: 'ProviderRequestError',
102
+ kind: 'context_overflow',
103
+ status: 400,
104
+ providerId: 'bedrock',
105
+ })
106
+ })
107
+
108
+ it("(c) a ValidationException that is not an overflow classifies as 'bad_request'", async () => {
109
+ const aws = new ValidationException({
110
+ message: 'The value at toolConfig.tools failed to satisfy constraint.',
111
+ $metadata: { httpStatusCode: 400 },
112
+ })
113
+
114
+ const err = await captureChatStreamError(providerRejectingWith(aws))
115
+
116
+ expect(err).toMatchObject({
117
+ name: 'ProviderRequestError',
118
+ kind: 'bad_request',
119
+ status: 400,
120
+ providerId: 'bedrock',
121
+ })
122
+ })
123
+
124
+ it("an AccessDeniedException classifies as 'auth'", async () => {
125
+ const aws = new AccessDeniedException({
126
+ message: 'You do not have access to the model with the specified model ID.',
127
+ $metadata: { httpStatusCode: 403 },
128
+ })
129
+
130
+ const err = await captureChatStreamError(providerRejectingWith(aws))
131
+
132
+ expect(err).toMatchObject({
133
+ name: 'ProviderRequestError',
134
+ kind: 'auth',
135
+ status: 403,
136
+ providerId: 'bedrock',
137
+ })
138
+ })
139
+
140
+ it("a ServiceUnavailableException classifies as 'server'", async () => {
141
+ const aws = new ServiceUnavailableException({
142
+ message: 'The service is unavailable, try again later.',
143
+ $metadata: { httpStatusCode: 503 },
144
+ })
145
+
146
+ const err = await captureChatStreamError(providerRejectingWith(aws))
147
+
148
+ expect(err).toMatchObject({
149
+ name: 'ProviderRequestError',
150
+ kind: 'server',
151
+ status: 503,
152
+ providerId: 'bedrock',
153
+ })
154
+ })
155
+
156
+ it("a ModelErrorException with HTTP 424 still classifies as 'server'", async () => {
157
+ const aws = new ModelErrorException({
158
+ message: 'The model failed while processing the request.',
159
+ originalStatusCode: 500,
160
+ $metadata: { httpStatusCode: 424 },
161
+ })
162
+
163
+ const err = await captureChatStreamError(providerRejectingWith(aws))
164
+
165
+ expect(err).toMatchObject({
166
+ name: 'ProviderRequestError',
167
+ kind: 'server',
168
+ status: 424,
169
+ providerId: 'bedrock',
170
+ })
171
+ })
172
+
173
+ it("a ServiceQuotaExceededException classifies as 'throttle'", async () => {
174
+ const aws = new ServiceQuotaExceededException({
175
+ message: 'Account inference quota exceeded.',
176
+ $metadata: { httpStatusCode: 400 },
177
+ })
178
+
179
+ const err = await captureChatStreamError(providerRejectingWith(aws))
180
+
181
+ expect(err).toMatchObject({
182
+ name: 'ProviderRequestError',
183
+ kind: 'throttle',
184
+ status: 400,
185
+ providerId: 'bedrock',
186
+ })
187
+ })
188
+
189
+ it('classifies a throttling exception delivered as a stream union event', async () => {
190
+ const aws = new ThrottlingException({
191
+ message: 'stream quota exceeded',
192
+ $metadata: { httpStatusCode: 429 },
193
+ })
194
+
195
+ const err = await captureChatStreamError(providerStreaming({ throttlingException: aws }))
196
+
197
+ expect(err).toMatchObject({
198
+ name: 'ProviderRequestError',
199
+ kind: 'throttle',
200
+ status: 429,
201
+ providerId: 'bedrock',
202
+ })
203
+ })
204
+
205
+ it('drops a secret-bearing validation stream event without retaining cause', async () => {
206
+ const secret = 'aws-secret-FAKE-DO-NOT-LOG'
207
+ const aws = new ValidationException({
208
+ message: `invalid request echoed ${secret}`,
209
+ $metadata: { httpStatusCode: 400 },
210
+ })
211
+
212
+ const err = await captureChatStreamError(providerStreaming({ validationException: aws }))
213
+
214
+ expect(err).toMatchObject({
215
+ name: 'ProviderRequestError',
216
+ kind: 'bad_request',
217
+ providerId: 'bedrock',
218
+ })
219
+ expect((err as Error).message).not.toContain(secret)
220
+ expect('cause' in (err as object)).toBe(false)
221
+ })
222
+
223
+ it('preserves the caller abort reason when the SDK replaces the error object', async () => {
224
+ const controller = new AbortController()
225
+ const reason = new Error('user stopped')
226
+ const sdkAbort = Object.assign(new Error('request aborted'), {
227
+ name: 'AbortError',
228
+ })
229
+ controller.abort(reason)
230
+
231
+ const err = await captureChatStreamError(providerRejectingWith(sdkAbort), controller.signal)
232
+
233
+ expect(sdkAbort).not.toBe(reason)
234
+ expect(err).toBe(reason)
235
+ })
236
+ })
@@ -0,0 +1,81 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { parseBedrockUsage } from '../client.js'
4
+
5
+ /**
6
+ * Cache reads and cache writes are priced differently from ordinary input,
7
+ * so folding either into the prompt count misreports what a run cost — and
8
+ * misreports it silently, because the total still looks plausible.
9
+ *
10
+ * The counters are also the only evidence that the breakpoints are working
11
+ * at all: a run whose cached count stays at zero is paying full price for
12
+ * a prefix it believes is cached, and nothing else says so.
13
+ */
14
+
15
+ describe('cache counters are reported on their own axis', () => {
16
+ it('keeps reads out of the prompt count', () => {
17
+ const usage = parseBedrockUsage({
18
+ inputTokens: 10,
19
+ outputTokens: 2,
20
+ cacheReadInputTokenCount: 900,
21
+ })
22
+
23
+ expect(usage.promptTokens).toBe(10)
24
+ expect(usage.cachedTokens).toBe(900)
25
+ })
26
+
27
+ it('keeps writes on their own axis too', () => {
28
+ const usage = parseBedrockUsage({
29
+ inputTokens: 10,
30
+ outputTokens: 2,
31
+ cacheWriteInputTokenCount: 40,
32
+ })
33
+
34
+ expect(usage.cacheWriteTokens).toBe(40)
35
+ expect(usage.promptTokens).toBe(10)
36
+ })
37
+
38
+ it('reports both when both happen in one turn', () => {
39
+ const usage = parseBedrockUsage({
40
+ inputTokens: 10,
41
+ outputTokens: 2,
42
+ cacheReadInputTokenCount: 900,
43
+ cacheWriteInputTokenCount: 40,
44
+ })
45
+
46
+ expect(usage).toMatchObject({ cachedTokens: 900, cacheWriteTokens: 40 })
47
+ })
48
+
49
+ it('reads an absent counter as zero, not undefined', () => {
50
+ const usage = parseBedrockUsage({ inputTokens: 5, outputTokens: 1 })
51
+
52
+ // A consumer summing these must not have to guard every field; an
53
+ // undefined here becomes NaN one addition later.
54
+ expect(usage.cachedTokens).toBe(0)
55
+ expect(usage.cacheWriteTokens).toBe(0)
56
+ })
57
+
58
+ it('totals input and output, and nothing else', () => {
59
+ const usage = parseBedrockUsage({
60
+ inputTokens: 10,
61
+ outputTokens: 2,
62
+ cacheReadInputTokenCount: 900,
63
+ })
64
+
65
+ // Cached reads are already counted upstream; adding them here would
66
+ // double-count the same tokens in the run's own ledger.
67
+ expect(usage.totalTokens).toBe(12)
68
+ })
69
+
70
+ it('reads a missing usage payload as all zeros', () => {
71
+ const usage = parseBedrockUsage(undefined)
72
+
73
+ expect(usage).toEqual({
74
+ promptTokens: 0,
75
+ completionTokens: 0,
76
+ totalTokens: 0,
77
+ cachedTokens: 0,
78
+ cacheWriteTokens: 0,
79
+ })
80
+ })
81
+ })
@@ -0,0 +1,87 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { toBedrockToolConfig } from '../client.js'
4
+
5
+ /**
6
+ * `toolChoice: 'none'` means the model must not call a tool. This driver
7
+ * mapped it to the wire's "auto", which means the model MAY — the exact
8
+ * opposite of what the caller asked for, and silent.
9
+ *
10
+ * The runtime relies on it: an advisory consultation passes `'none'` so the
11
+ * advisor answers in prose. Under this driver the advisor could emit a tool
12
+ * call instead, into a turn with no executor waiting for one.
13
+ *
14
+ * The fix is not a better mapping. Every version of every wire format
15
+ * agrees a model cannot call a tool it was never given, so `'none'` sends
16
+ * no tools at all — a guarantee rather than a request.
17
+ */
18
+
19
+ const TOOLS = [
20
+ {
21
+ type: 'function' as const,
22
+ function: { name: 'read', description: 'read a file', parameters: { type: 'object' } },
23
+ },
24
+ ]
25
+
26
+ describe("a caller that said 'none' gets no tools on the wire", () => {
27
+ it('omits the tool config entirely', () => {
28
+ expect(
29
+ toBedrockToolConfig({ model: 'm', messages: [], tools: TOOLS, toolChoice: 'none' }),
30
+ ).toBe(undefined)
31
+ })
32
+
33
+ it('omits it even when the history contains tool blocks', () => {
34
+ const config = toBedrockToolConfig({
35
+ model: 'm',
36
+ messages: [
37
+ {
38
+ role: 'assistant',
39
+ content: null,
40
+ toolCalls: [{ id: 'c1', type: 'function', function: { name: 'read', arguments: '{}' } }],
41
+ },
42
+ { role: 'tool', content: 'ok', toolCallId: 'c1' },
43
+ ] as Parameters<typeof toBedrockToolConfig>[0]['messages'],
44
+ toolChoice: 'none',
45
+ })
46
+
47
+ expect(config).toBe(undefined)
48
+ })
49
+ })
50
+
51
+ describe('the other choices still reach the wire unchanged', () => {
52
+ it('maps auto', () => {
53
+ const config = toBedrockToolConfig({
54
+ model: 'm',
55
+ messages: [],
56
+ tools: TOOLS,
57
+ toolChoice: 'auto',
58
+ })
59
+ expect(config?.toolChoice).toEqual({ auto: {} })
60
+ expect(config?.tools).toHaveLength(1)
61
+ })
62
+
63
+ it('maps required', () => {
64
+ const config = toBedrockToolConfig({
65
+ model: 'm',
66
+ messages: [],
67
+ tools: TOOLS,
68
+ toolChoice: 'required',
69
+ })
70
+ expect(config?.toolChoice).toEqual({ any: {} })
71
+ })
72
+
73
+ it('maps a named tool', () => {
74
+ const config = toBedrockToolConfig({
75
+ model: 'm',
76
+ messages: [],
77
+ tools: TOOLS,
78
+ toolChoice: { type: 'function', function: { name: 'read' } },
79
+ })
80
+ expect(config?.toolChoice).toEqual({ tool: { name: 'read' } })
81
+ })
82
+
83
+ it('defaults to auto when the caller said nothing', () => {
84
+ const config = toBedrockToolConfig({ model: 'm', messages: [], tools: TOOLS })
85
+ expect(config?.toolChoice).toEqual({ auto: {} })
86
+ })
87
+ })
@@ -0,0 +1,119 @@
1
+ import type { ChatCompletionParams } from '@namzu/sdk'
2
+ import { describe, expect, it } from 'vitest'
3
+
4
+ import { toBedrockMessages } from '../client.js'
5
+
6
+ /**
7
+ * A tool result carrying content blocks was `JSON.stringify`d into the
8
+ * text field, so a screenshot reached the model as a wall of quoted base64:
9
+ * unreadable, and paid for by the character.
10
+ *
11
+ * This driver does not map image content — `supportsVision` is false and
12
+ * says so — which makes the honest form the SDK's named placeholder. It
13
+ * reports what was there and how big it was, so the model knows something
14
+ * was withheld rather than believing it saw a JSON object.
15
+ */
16
+
17
+ const PNG = 'iVBORw0KGgo='
18
+
19
+ function toolResultFor(content: unknown): Record<string, unknown> {
20
+ const messages = toBedrockMessages([
21
+ { role: 'user', content: 'take a shot' },
22
+ {
23
+ role: 'assistant',
24
+ content: null,
25
+ toolCalls: [
26
+ { id: 'call_1', type: 'function', function: { name: 'screenshot', arguments: '{}' } },
27
+ ],
28
+ },
29
+ { role: 'tool', toolCallId: 'call_1', content },
30
+ ] as unknown as ChatCompletionParams['messages'])
31
+
32
+ const block = messages
33
+ .flatMap((m) => m.content ?? [])
34
+ .find((b) => (b as { toolResult?: unknown }).toolResult)
35
+ return (block as unknown as { toolResult: Record<string, unknown> }).toolResult
36
+ }
37
+
38
+ function textOf(result: Record<string, unknown>): string {
39
+ const content = result.content as Array<{ text?: string }>
40
+ return content.map((c) => c.text ?? '').join('\n')
41
+ }
42
+
43
+ describe('a tool result the wire cannot carry is described, not dumped', () => {
44
+ it('names the media type and size instead of the payload', () => {
45
+ const text = textOf(toolResultFor([{ type: 'image', mediaType: 'image/png', data: PNG }]))
46
+
47
+ expect(text).toContain('image/png')
48
+ expect(text).toMatch(/\d+(\.\d+)? (B|KB|MB)/)
49
+ })
50
+
51
+ it('does not put the base64 payload in the text', () => {
52
+ const text = textOf(
53
+ toolResultFor([{ type: 'image', mediaType: 'image/png', data: 'A'.repeat(2048) }]),
54
+ )
55
+
56
+ // The bug in one assertion: the payload used to be JSON-quoted into
57
+ // the text field, so the model paid for 2048 unreadable characters.
58
+ expect(text).not.toContain('A'.repeat(64))
59
+ })
60
+
61
+ it('keeps the text blocks that sit alongside', () => {
62
+ const text = textOf(
63
+ toolResultFor([
64
+ { type: 'text', text: 'captured the window' },
65
+ { type: 'image', mediaType: 'image/png', data: PNG },
66
+ ]),
67
+ )
68
+
69
+ expect(text).toContain('captured the window')
70
+ expect(text).toContain('image/png')
71
+ })
72
+
73
+ it('names a document by its filename', () => {
74
+ const text = textOf(
75
+ toolResultFor([
76
+ { type: 'document', mediaType: 'application/pdf', data: 'JVBER', name: 'lease.pdf' },
77
+ ]),
78
+ )
79
+
80
+ expect(text).toContain('lease.pdf')
81
+ expect(text).toContain('application/pdf')
82
+ })
83
+ })
84
+
85
+ describe('the plain cases are unchanged', () => {
86
+ it('passes a string result straight through', () => {
87
+ expect(textOf(toolResultFor('just text'))).toBe('just text')
88
+ })
89
+
90
+ it('passes text-only blocks through as their text', () => {
91
+ expect(textOf(toolResultFor([{ type: 'text', text: 'only words' }]))).toBe('only words')
92
+ })
93
+
94
+ it('answers the tool call it was given', () => {
95
+ expect(toolResultFor('x').toolUseId).toBe('call_1')
96
+ })
97
+
98
+ it('groups results answering one turn into a single message', () => {
99
+ const messages = toBedrockMessages([
100
+ { role: 'user', content: 'read both' },
101
+ {
102
+ role: 'assistant',
103
+ content: null,
104
+ toolCalls: [
105
+ { id: 'call_1', type: 'function', function: { name: 'read', arguments: '{}' } },
106
+ { id: 'call_2', type: 'function', function: { name: 'read', arguments: '{}' } },
107
+ ],
108
+ },
109
+ { role: 'tool', toolCallId: 'call_1', content: 'one' },
110
+ { role: 'tool', toolCallId: 'call_2', content: 'two' },
111
+ ] as unknown as ChatCompletionParams['messages'])
112
+
113
+ const resultTurns = messages.filter((m) =>
114
+ (m.content ?? []).every((b) => (b as { toolResult?: unknown }).toolResult),
115
+ )
116
+ expect(resultTurns).toHaveLength(1)
117
+ expect(resultTurns[0]?.content).toHaveLength(2)
118
+ })
119
+ })