@ai-sdk/amazon-bedrock 3.0.73 → 3.0.74

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/dist/index.mjs CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  } from "@ai-sdk/provider-utils";
9
9
 
10
10
  // src/version.ts
11
- var VERSION = true ? "3.0.73" : "0.0.0-test";
11
+ var VERSION = true ? "3.0.74" : "0.0.0-test";
12
12
 
13
13
  // src/bedrock-provider.ts
14
14
  import { anthropicTools as anthropicTools2 } from "@ai-sdk/anthropic/internal";
@@ -104,70 +104,84 @@ import {
104
104
  extractResponseHeaders,
105
105
  safeValidateTypes
106
106
  } from "@ai-sdk/provider-utils";
107
+
108
+ // src/bedrock-event-stream-decoder.ts
107
109
  import { EventStreamCodec } from "@smithy/eventstream-codec";
108
110
  import { toUtf8, fromUtf8 } from "@smithy/util-utf8";
111
+ function createBedrockEventStreamDecoder(body, processEvent) {
112
+ const codec = new EventStreamCodec(toUtf8, fromUtf8);
113
+ let buffer = new Uint8Array(0);
114
+ const textDecoder = new TextDecoder();
115
+ return body.pipeThrough(
116
+ new TransformStream({
117
+ async transform(chunk, controller) {
118
+ var _a, _b;
119
+ const newBuffer = new Uint8Array(buffer.length + chunk.length);
120
+ newBuffer.set(buffer);
121
+ newBuffer.set(chunk, buffer.length);
122
+ buffer = newBuffer;
123
+ while (buffer.length >= 4) {
124
+ const totalLength = new DataView(
125
+ buffer.buffer,
126
+ buffer.byteOffset,
127
+ buffer.byteLength
128
+ ).getUint32(0, false);
129
+ if (buffer.length < totalLength) {
130
+ break;
131
+ }
132
+ try {
133
+ const subView = buffer.subarray(0, totalLength);
134
+ const decoded = codec.decode(subView);
135
+ buffer = buffer.slice(totalLength);
136
+ const messageType = (_a = decoded.headers[":message-type"]) == null ? void 0 : _a.value;
137
+ const eventType = (_b = decoded.headers[":event-type"]) == null ? void 0 : _b.value;
138
+ const data = textDecoder.decode(decoded.body);
139
+ await processEvent({ messageType, eventType, data }, controller);
140
+ } catch (e) {
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ })
146
+ );
147
+ }
148
+
149
+ // src/bedrock-event-stream-response-handler.ts
109
150
  var createBedrockEventStreamResponseHandler = (chunkSchema) => async ({ response }) => {
110
151
  const responseHeaders = extractResponseHeaders(response);
111
152
  if (response.body == null) {
112
153
  throw new EmptyResponseBodyError({});
113
154
  }
114
- const codec = new EventStreamCodec(toUtf8, fromUtf8);
115
- let buffer = new Uint8Array(0);
116
- const textDecoder = new TextDecoder();
117
155
  return {
118
156
  responseHeaders,
119
- value: response.body.pipeThrough(
120
- new TransformStream({
121
- async transform(chunk, controller) {
122
- var _a, _b;
123
- const newBuffer = new Uint8Array(buffer.length + chunk.length);
124
- newBuffer.set(buffer);
125
- newBuffer.set(chunk, buffer.length);
126
- buffer = newBuffer;
127
- while (buffer.length >= 4) {
128
- const totalLength = new DataView(
129
- buffer.buffer,
130
- buffer.byteOffset,
131
- buffer.byteLength
132
- ).getUint32(0, false);
133
- if (buffer.length < totalLength) {
134
- break;
135
- }
136
- try {
137
- const subView = buffer.subarray(0, totalLength);
138
- const decoded = codec.decode(subView);
139
- buffer = buffer.slice(totalLength);
140
- if (((_a = decoded.headers[":message-type"]) == null ? void 0 : _a.value) === "event") {
141
- const data = textDecoder.decode(decoded.body);
142
- const parsedDataResult = await safeParseJSON({ text: data });
143
- if (!parsedDataResult.success) {
144
- controller.enqueue(parsedDataResult);
145
- break;
146
- }
147
- delete parsedDataResult.value.p;
148
- let wrappedData = {
149
- [(_b = decoded.headers[":event-type"]) == null ? void 0 : _b.value]: parsedDataResult.value
150
- };
151
- const validatedWrappedData = await safeValidateTypes({
152
- value: wrappedData,
153
- schema: chunkSchema
154
- });
155
- if (!validatedWrappedData.success) {
156
- controller.enqueue(validatedWrappedData);
157
- } else {
158
- controller.enqueue({
159
- success: true,
160
- value: validatedWrappedData.value,
161
- rawValue: wrappedData
162
- });
163
- }
164
- }
165
- } catch (e) {
166
- break;
167
- }
157
+ value: createBedrockEventStreamDecoder(
158
+ response.body,
159
+ async (event, controller) => {
160
+ if (event.messageType === "event") {
161
+ const parsedDataResult = await safeParseJSON({ text: event.data });
162
+ if (!parsedDataResult.success) {
163
+ controller.enqueue(parsedDataResult);
164
+ return;
165
+ }
166
+ delete parsedDataResult.value.p;
167
+ const wrappedData = {
168
+ [event.eventType]: parsedDataResult.value
169
+ };
170
+ const validatedWrappedData = await safeValidateTypes({
171
+ value: wrappedData,
172
+ schema: chunkSchema
173
+ });
174
+ if (!validatedWrappedData.success) {
175
+ controller.enqueue(validatedWrappedData);
176
+ } else {
177
+ controller.enqueue({
178
+ success: true,
179
+ value: validatedWrappedData.value,
180
+ rawValue: wrappedData
181
+ });
168
182
  }
169
183
  }
170
- })
184
+ }
171
185
  )
172
186
  };
173
187
  };