@wabot-dev/framework 0.1.0-beta.12 → 0.1.0-beta.13

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 (43) hide show
  1. package/dist/src/ai/claude/ClaudeChatBotAdapter.js +115 -0
  2. package/dist/src/core/Entity.js +2 -2
  3. package/dist/src/index.d.ts +11 -2
  4. package/dist/src/index.js +2 -1
  5. package/dist/src/node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.js +221 -0
  6. package/dist/src/node_modules/@anthropic-ai/sdk/client.js +540 -0
  7. package/dist/src/node_modules/@anthropic-ai/sdk/core/api-promise.js +74 -0
  8. package/dist/src/node_modules/@anthropic-ai/sdk/core/error.js +100 -0
  9. package/dist/src/node_modules/@anthropic-ai/sdk/core/pagination.js +119 -0
  10. package/dist/src/node_modules/@anthropic-ai/sdk/core/resource.js +8 -0
  11. package/dist/src/node_modules/@anthropic-ai/sdk/core/streaming.js +283 -0
  12. package/dist/src/node_modules/@anthropic-ai/sdk/internal/constants.js +16 -0
  13. package/dist/src/node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.js +37 -0
  14. package/dist/src/node_modules/@anthropic-ai/sdk/internal/decoders/line.js +110 -0
  15. package/dist/src/node_modules/@anthropic-ai/sdk/internal/detect-platform.js +159 -0
  16. package/dist/src/node_modules/@anthropic-ai/sdk/internal/errors.js +37 -0
  17. package/dist/src/node_modules/@anthropic-ai/sdk/internal/headers.js +71 -0
  18. package/dist/src/node_modules/@anthropic-ai/sdk/internal/parse.js +53 -0
  19. package/dist/src/node_modules/@anthropic-ai/sdk/internal/request-options.js +11 -0
  20. package/dist/src/node_modules/@anthropic-ai/sdk/internal/shims.js +86 -0
  21. package/dist/src/node_modules/@anthropic-ai/sdk/internal/to-file.js +94 -0
  22. package/dist/src/node_modules/@anthropic-ai/sdk/internal/tslib.js +14 -0
  23. package/dist/src/node_modules/@anthropic-ai/sdk/internal/uploads.js +113 -0
  24. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/bytes.js +27 -0
  25. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/env.js +19 -0
  26. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/log.js +82 -0
  27. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/path.js +76 -0
  28. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/sleep.js +4 -0
  29. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/uuid.js +16 -0
  30. package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/values.js +48 -0
  31. package/dist/src/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js +588 -0
  32. package/dist/src/node_modules/@anthropic-ai/sdk/lib/MessageStream.js +582 -0
  33. package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/beta.js +19 -0
  34. package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/files.js +120 -0
  35. package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.js +202 -0
  36. package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.js +85 -0
  37. package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/models.js +58 -0
  38. package/dist/src/node_modules/@anthropic-ai/sdk/resources/completions.js +21 -0
  39. package/dist/src/node_modules/@anthropic-ai/sdk/resources/messages/batches.js +151 -0
  40. package/dist/src/node_modules/@anthropic-ai/sdk/resources/messages/messages.js +71 -0
  41. package/dist/src/node_modules/@anthropic-ai/sdk/resources/models.js +43 -0
  42. package/dist/src/node_modules/@anthropic-ai/sdk/version.js +3 -0
  43. package/package.json +2 -1
@@ -0,0 +1,588 @@
1
+ import { __classPrivateFieldSet, __classPrivateFieldGet } from '../internal/tslib.js';
2
+ import { isAbortError } from '../internal/errors.js';
3
+ import { APIUserAbortError, AnthropicError } from '../core/error.js';
4
+ import { Stream } from '../core/streaming.js';
5
+ import { partialParse } from '../_vendor/partial-json-parser/parser.js';
6
+
7
+ var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage;
8
+ const JSON_BUF_PROPERTY = '__json_buf';
9
+ function tracksToolInput(content) {
10
+ return content.type === 'tool_use' || content.type === 'server_tool_use' || content.type === 'mcp_tool_use';
11
+ }
12
+ class BetaMessageStream {
13
+ constructor() {
14
+ _BetaMessageStream_instances.add(this);
15
+ this.messages = [];
16
+ this.receivedMessages = [];
17
+ _BetaMessageStream_currentMessageSnapshot.set(this, void 0);
18
+ this.controller = new AbortController();
19
+ _BetaMessageStream_connectedPromise.set(this, void 0);
20
+ _BetaMessageStream_resolveConnectedPromise.set(this, () => { });
21
+ _BetaMessageStream_rejectConnectedPromise.set(this, () => { });
22
+ _BetaMessageStream_endPromise.set(this, void 0);
23
+ _BetaMessageStream_resolveEndPromise.set(this, () => { });
24
+ _BetaMessageStream_rejectEndPromise.set(this, () => { });
25
+ _BetaMessageStream_listeners.set(this, {});
26
+ _BetaMessageStream_ended.set(this, false);
27
+ _BetaMessageStream_errored.set(this, false);
28
+ _BetaMessageStream_aborted.set(this, false);
29
+ _BetaMessageStream_catchingPromiseCreated.set(this, false);
30
+ _BetaMessageStream_response.set(this, void 0);
31
+ _BetaMessageStream_request_id.set(this, void 0);
32
+ _BetaMessageStream_handleError.set(this, (error) => {
33
+ __classPrivateFieldSet(this, _BetaMessageStream_errored, true);
34
+ if (isAbortError(error)) {
35
+ error = new APIUserAbortError();
36
+ }
37
+ if (error instanceof APIUserAbortError) {
38
+ __classPrivateFieldSet(this, _BetaMessageStream_aborted, true);
39
+ return this._emit('abort', error);
40
+ }
41
+ if (error instanceof AnthropicError) {
42
+ return this._emit('error', error);
43
+ }
44
+ if (error instanceof Error) {
45
+ const anthropicError = new AnthropicError(error.message);
46
+ // @ts-ignore
47
+ anthropicError.cause = error;
48
+ return this._emit('error', anthropicError);
49
+ }
50
+ return this._emit('error', new AnthropicError(String(error)));
51
+ });
52
+ __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve, reject) => {
53
+ __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve, "f");
54
+ __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject, "f");
55
+ }));
56
+ __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve, reject) => {
57
+ __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve, "f");
58
+ __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject, "f");
59
+ }));
60
+ // Don't let these promises cause unhandled rejection errors.
61
+ // we will manually cause an unhandled rejection error later
62
+ // if the user hasn't registered any error listener or called
63
+ // any promise-returning method.
64
+ __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => { });
65
+ __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => { });
66
+ }
67
+ get response() {
68
+ return __classPrivateFieldGet(this, _BetaMessageStream_response, "f");
69
+ }
70
+ get request_id() {
71
+ return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f");
72
+ }
73
+ /**
74
+ * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
75
+ * returned vie the `request-id` header which is useful for debugging requests and resporting
76
+ * issues to Anthropic.
77
+ *
78
+ * This is the same as the `APIPromise.withResponse()` method.
79
+ *
80
+ * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
81
+ * as no `Response` is available.
82
+ */
83
+ async withResponse() {
84
+ const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f");
85
+ if (!response) {
86
+ throw new Error('Could not resolve a `Response` object');
87
+ }
88
+ return {
89
+ data: this,
90
+ response,
91
+ request_id: response.headers.get('request-id'),
92
+ };
93
+ }
94
+ /**
95
+ * Intended for use on the frontend, consuming a stream produced with
96
+ * `.toReadableStream()` on the backend.
97
+ *
98
+ * Note that messages sent to the model do not appear in `.on('message')`
99
+ * in this context.
100
+ */
101
+ static fromReadableStream(stream) {
102
+ const runner = new BetaMessageStream();
103
+ runner._run(() => runner._fromReadableStream(stream));
104
+ return runner;
105
+ }
106
+ static createMessage(messages, params, options) {
107
+ const runner = new BetaMessageStream();
108
+ for (const message of params.messages) {
109
+ runner._addMessageParam(message);
110
+ }
111
+ runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));
112
+ return runner;
113
+ }
114
+ _run(executor) {
115
+ executor().then(() => {
116
+ this._emitFinal();
117
+ this._emit('end');
118
+ }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f"));
119
+ }
120
+ _addMessageParam(message) {
121
+ this.messages.push(message);
122
+ }
123
+ _addMessage(message, emit = true) {
124
+ this.receivedMessages.push(message);
125
+ if (emit) {
126
+ this._emit('message', message);
127
+ }
128
+ }
129
+ async _createMessage(messages, params, options) {
130
+ const signal = options?.signal;
131
+ let abortHandler;
132
+ if (signal) {
133
+ if (signal.aborted)
134
+ this.controller.abort();
135
+ abortHandler = this.controller.abort.bind(this.controller);
136
+ signal.addEventListener('abort', abortHandler);
137
+ }
138
+ try {
139
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this);
140
+ const { response, data: stream } = await messages
141
+ .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
142
+ .withResponse();
143
+ this._connected(response);
144
+ for await (const event of stream) {
145
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event);
146
+ }
147
+ if (stream.controller.signal?.aborted) {
148
+ throw new APIUserAbortError();
149
+ }
150
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this);
151
+ }
152
+ finally {
153
+ if (signal && abortHandler) {
154
+ signal.removeEventListener('abort', abortHandler);
155
+ }
156
+ }
157
+ }
158
+ _connected(response) {
159
+ if (this.ended)
160
+ return;
161
+ __classPrivateFieldSet(this, _BetaMessageStream_response, response);
162
+ __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get('request-id'));
163
+ __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response);
164
+ this._emit('connect');
165
+ }
166
+ get ended() {
167
+ return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f");
168
+ }
169
+ get errored() {
170
+ return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f");
171
+ }
172
+ get aborted() {
173
+ return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f");
174
+ }
175
+ abort() {
176
+ this.controller.abort();
177
+ }
178
+ /**
179
+ * Adds the listener function to the end of the listeners array for the event.
180
+ * No checks are made to see if the listener has already been added. Multiple calls passing
181
+ * the same combination of event and listener will result in the listener being added, and
182
+ * called, multiple times.
183
+ * @returns this MessageStream, so that calls can be chained
184
+ */
185
+ on(event, listener) {
186
+ const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []);
187
+ listeners.push({ listener });
188
+ return this;
189
+ }
190
+ /**
191
+ * Removes the specified listener from the listener array for the event.
192
+ * off() will remove, at most, one instance of a listener from the listener array. If any single
193
+ * listener has been added multiple times to the listener array for the specified event, then
194
+ * off() must be called multiple times to remove each instance.
195
+ * @returns this MessageStream, so that calls can be chained
196
+ */
197
+ off(event, listener) {
198
+ const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event];
199
+ if (!listeners)
200
+ return this;
201
+ const index = listeners.findIndex((l) => l.listener === listener);
202
+ if (index >= 0)
203
+ listeners.splice(index, 1);
204
+ return this;
205
+ }
206
+ /**
207
+ * Adds a one-time listener function for the event. The next time the event is triggered,
208
+ * this listener is removed and then invoked.
209
+ * @returns this MessageStream, so that calls can be chained
210
+ */
211
+ once(event, listener) {
212
+ const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []);
213
+ listeners.push({ listener, once: true });
214
+ return this;
215
+ }
216
+ /**
217
+ * This is similar to `.once()`, but returns a Promise that resolves the next time
218
+ * the event is triggered, instead of calling a listener callback.
219
+ * @returns a Promise that resolves the next time given event is triggered,
220
+ * or rejects if an error is emitted. (If you request the 'error' event,
221
+ * returns a promise that resolves with the error).
222
+ *
223
+ * Example:
224
+ *
225
+ * const message = await stream.emitted('message') // rejects if the stream errors
226
+ */
227
+ emitted(event) {
228
+ return new Promise((resolve, reject) => {
229
+ __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true);
230
+ if (event !== 'error')
231
+ this.once('error', reject);
232
+ this.once(event, resolve);
233
+ });
234
+ }
235
+ async done() {
236
+ __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true);
237
+ await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f");
238
+ }
239
+ get currentMessage() {
240
+ return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
241
+ }
242
+ /**
243
+ * @returns a promise that resolves with the the final assistant Message response,
244
+ * or rejects if an error occurred or the stream ended prematurely without producing a Message.
245
+ */
246
+ async finalMessage() {
247
+ await this.done();
248
+ return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this);
249
+ }
250
+ /**
251
+ * @returns a promise that resolves with the the final assistant Message's text response, concatenated
252
+ * together if there are more than one text blocks.
253
+ * Rejects if an error occurred or the stream ended prematurely without producing a Message.
254
+ */
255
+ async finalText() {
256
+ await this.done();
257
+ return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this);
258
+ }
259
+ _emit(event, ...args) {
260
+ // make sure we don't emit any MessageStreamEvents after end
261
+ if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f"))
262
+ return;
263
+ if (event === 'end') {
264
+ __classPrivateFieldSet(this, _BetaMessageStream_ended, true);
265
+ __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this);
266
+ }
267
+ const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event];
268
+ if (listeners) {
269
+ __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
270
+ listeners.forEach(({ listener }) => listener(...args));
271
+ }
272
+ if (event === 'abort') {
273
+ const error = args[0];
274
+ if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
275
+ Promise.reject(error);
276
+ }
277
+ __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error);
278
+ __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error);
279
+ this._emit('end');
280
+ return;
281
+ }
282
+ if (event === 'error') {
283
+ // NOTE: _emit('error', error) should only be called from #handleError().
284
+ const error = args[0];
285
+ if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
286
+ // Trigger an unhandled rejection if the user hasn't registered any error handlers.
287
+ // If you are seeing stack traces here, make sure to handle errors via either:
288
+ // - runner.on('error', () => ...)
289
+ // - await runner.done()
290
+ // - await runner.final...()
291
+ // - etc.
292
+ Promise.reject(error);
293
+ }
294
+ __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error);
295
+ __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error);
296
+ this._emit('end');
297
+ }
298
+ }
299
+ _emitFinal() {
300
+ const finalMessage = this.receivedMessages.at(-1);
301
+ if (finalMessage) {
302
+ this._emit('finalMessage', __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this));
303
+ }
304
+ }
305
+ async _fromReadableStream(readableStream, options) {
306
+ const signal = options?.signal;
307
+ let abortHandler;
308
+ if (signal) {
309
+ if (signal.aborted)
310
+ this.controller.abort();
311
+ abortHandler = this.controller.abort.bind(this.controller);
312
+ signal.addEventListener('abort', abortHandler);
313
+ }
314
+ try {
315
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this);
316
+ this._connected(null);
317
+ const stream = Stream.fromReadableStream(readableStream, this.controller);
318
+ for await (const event of stream) {
319
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event);
320
+ }
321
+ if (stream.controller.signal?.aborted) {
322
+ throw new APIUserAbortError();
323
+ }
324
+ __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this);
325
+ }
326
+ finally {
327
+ if (signal && abortHandler) {
328
+ signal.removeEventListener('abort', abortHandler);
329
+ }
330
+ }
331
+ }
332
+ [(_BetaMessageStream_currentMessageSnapshot = new WeakMap(), _BetaMessageStream_connectedPromise = new WeakMap(), _BetaMessageStream_resolveConnectedPromise = new WeakMap(), _BetaMessageStream_rejectConnectedPromise = new WeakMap(), _BetaMessageStream_endPromise = new WeakMap(), _BetaMessageStream_resolveEndPromise = new WeakMap(), _BetaMessageStream_rejectEndPromise = new WeakMap(), _BetaMessageStream_listeners = new WeakMap(), _BetaMessageStream_ended = new WeakMap(), _BetaMessageStream_errored = new WeakMap(), _BetaMessageStream_aborted = new WeakMap(), _BetaMessageStream_catchingPromiseCreated = new WeakMap(), _BetaMessageStream_response = new WeakMap(), _BetaMessageStream_request_id = new WeakMap(), _BetaMessageStream_handleError = new WeakMap(), _BetaMessageStream_instances = new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage() {
333
+ if (this.receivedMessages.length === 0) {
334
+ throw new AnthropicError('stream ended without producing a Message with role=assistant');
335
+ }
336
+ return this.receivedMessages.at(-1);
337
+ }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText() {
338
+ if (this.receivedMessages.length === 0) {
339
+ throw new AnthropicError('stream ended without producing a Message with role=assistant');
340
+ }
341
+ const textBlocks = this.receivedMessages
342
+ .at(-1)
343
+ .content.filter((block) => block.type === 'text')
344
+ .map((block) => block.text);
345
+ if (textBlocks.length === 0) {
346
+ throw new AnthropicError('stream ended without producing a content block with type=text');
347
+ }
348
+ return textBlocks.join(' ');
349
+ }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest() {
350
+ if (this.ended)
351
+ return;
352
+ __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined);
353
+ }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent(event) {
354
+ if (this.ended)
355
+ return;
356
+ const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event);
357
+ this._emit('streamEvent', event, messageSnapshot);
358
+ switch (event.type) {
359
+ case 'content_block_delta': {
360
+ const content = messageSnapshot.content.at(-1);
361
+ switch (event.delta.type) {
362
+ case 'text_delta': {
363
+ if (content.type === 'text') {
364
+ this._emit('text', event.delta.text, content.text || '');
365
+ }
366
+ break;
367
+ }
368
+ case 'citations_delta': {
369
+ if (content.type === 'text') {
370
+ this._emit('citation', event.delta.citation, content.citations ?? []);
371
+ }
372
+ break;
373
+ }
374
+ case 'input_json_delta': {
375
+ if (tracksToolInput(content) && content.input) {
376
+ this._emit('inputJson', event.delta.partial_json, content.input);
377
+ }
378
+ break;
379
+ }
380
+ case 'thinking_delta': {
381
+ if (content.type === 'thinking') {
382
+ this._emit('thinking', event.delta.thinking, content.thinking);
383
+ }
384
+ break;
385
+ }
386
+ case 'signature_delta': {
387
+ if (content.type === 'thinking') {
388
+ this._emit('signature', content.signature);
389
+ }
390
+ break;
391
+ }
392
+ default:
393
+ checkNever(event.delta);
394
+ }
395
+ break;
396
+ }
397
+ case 'message_stop': {
398
+ this._addMessageParam(messageSnapshot);
399
+ this._addMessage(messageSnapshot, true);
400
+ break;
401
+ }
402
+ case 'content_block_stop': {
403
+ this._emit('contentBlock', messageSnapshot.content.at(-1));
404
+ break;
405
+ }
406
+ case 'message_start': {
407
+ __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot);
408
+ break;
409
+ }
410
+ }
411
+ }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest() {
412
+ if (this.ended) {
413
+ throw new AnthropicError(`stream has ended, this shouldn't happen`);
414
+ }
415
+ const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
416
+ if (!snapshot) {
417
+ throw new AnthropicError(`request ended without sending any chunks`);
418
+ }
419
+ __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined);
420
+ return snapshot;
421
+ }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage(event) {
422
+ let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
423
+ if (event.type === 'message_start') {
424
+ if (snapshot) {
425
+ throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
426
+ }
427
+ return event.message;
428
+ }
429
+ if (!snapshot) {
430
+ throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
431
+ }
432
+ switch (event.type) {
433
+ case 'message_stop':
434
+ return snapshot;
435
+ case 'message_delta':
436
+ snapshot.container = event.delta.container;
437
+ snapshot.stop_reason = event.delta.stop_reason;
438
+ snapshot.stop_sequence = event.delta.stop_sequence;
439
+ snapshot.usage.output_tokens = event.usage.output_tokens;
440
+ if (event.usage.input_tokens != null) {
441
+ snapshot.usage.input_tokens = event.usage.input_tokens;
442
+ }
443
+ if (event.usage.cache_creation_input_tokens != null) {
444
+ snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
445
+ }
446
+ if (event.usage.cache_read_input_tokens != null) {
447
+ snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
448
+ }
449
+ if (event.usage.server_tool_use != null) {
450
+ snapshot.usage.server_tool_use = event.usage.server_tool_use;
451
+ }
452
+ return snapshot;
453
+ case 'content_block_start':
454
+ snapshot.content.push(event.content_block);
455
+ return snapshot;
456
+ case 'content_block_delta': {
457
+ const snapshotContent = snapshot.content.at(event.index);
458
+ switch (event.delta.type) {
459
+ case 'text_delta': {
460
+ if (snapshotContent?.type === 'text') {
461
+ snapshot.content[event.index] = {
462
+ ...snapshotContent,
463
+ text: (snapshotContent.text || '') + event.delta.text,
464
+ };
465
+ }
466
+ break;
467
+ }
468
+ case 'citations_delta': {
469
+ if (snapshotContent?.type === 'text') {
470
+ snapshot.content[event.index] = {
471
+ ...snapshotContent,
472
+ citations: [...(snapshotContent.citations ?? []), event.delta.citation],
473
+ };
474
+ }
475
+ break;
476
+ }
477
+ case 'input_json_delta': {
478
+ if (snapshotContent && tracksToolInput(snapshotContent)) {
479
+ // we need to keep track of the raw JSON string as well so that we can
480
+ // re-parse it for each delta, for now we just store it as an untyped
481
+ // non-enumerable property on the snapshot
482
+ let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || '';
483
+ jsonBuf += event.delta.partial_json;
484
+ const newContent = { ...snapshotContent };
485
+ Object.defineProperty(newContent, JSON_BUF_PROPERTY, {
486
+ value: jsonBuf,
487
+ enumerable: false,
488
+ writable: true,
489
+ });
490
+ if (jsonBuf) {
491
+ try {
492
+ newContent.input = partialParse(jsonBuf);
493
+ }
494
+ catch (err) {
495
+ const error = new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`);
496
+ __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, error);
497
+ }
498
+ }
499
+ snapshot.content[event.index] = newContent;
500
+ }
501
+ break;
502
+ }
503
+ case 'thinking_delta': {
504
+ if (snapshotContent?.type === 'thinking') {
505
+ snapshot.content[event.index] = {
506
+ ...snapshotContent,
507
+ thinking: snapshotContent.thinking + event.delta.thinking,
508
+ };
509
+ }
510
+ break;
511
+ }
512
+ case 'signature_delta': {
513
+ if (snapshotContent?.type === 'thinking') {
514
+ snapshot.content[event.index] = {
515
+ ...snapshotContent,
516
+ signature: event.delta.signature,
517
+ };
518
+ }
519
+ break;
520
+ }
521
+ default:
522
+ checkNever(event.delta);
523
+ }
524
+ return snapshot;
525
+ }
526
+ case 'content_block_stop':
527
+ return snapshot;
528
+ }
529
+ }, Symbol.asyncIterator)]() {
530
+ const pushQueue = [];
531
+ const readQueue = [];
532
+ let done = false;
533
+ this.on('streamEvent', (event) => {
534
+ const reader = readQueue.shift();
535
+ if (reader) {
536
+ reader.resolve(event);
537
+ }
538
+ else {
539
+ pushQueue.push(event);
540
+ }
541
+ });
542
+ this.on('end', () => {
543
+ done = true;
544
+ for (const reader of readQueue) {
545
+ reader.resolve(undefined);
546
+ }
547
+ readQueue.length = 0;
548
+ });
549
+ this.on('abort', (err) => {
550
+ done = true;
551
+ for (const reader of readQueue) {
552
+ reader.reject(err);
553
+ }
554
+ readQueue.length = 0;
555
+ });
556
+ this.on('error', (err) => {
557
+ done = true;
558
+ for (const reader of readQueue) {
559
+ reader.reject(err);
560
+ }
561
+ readQueue.length = 0;
562
+ });
563
+ return {
564
+ next: async () => {
565
+ if (!pushQueue.length) {
566
+ if (done) {
567
+ return { value: undefined, done: true };
568
+ }
569
+ return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
570
+ }
571
+ const chunk = pushQueue.shift();
572
+ return { value: chunk, done: false };
573
+ },
574
+ return: async () => {
575
+ this.abort();
576
+ return { value: undefined, done: true };
577
+ },
578
+ };
579
+ }
580
+ toReadableStream() {
581
+ const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
582
+ return stream.toReadableStream();
583
+ }
584
+ }
585
+ // used to ensure exhaustive case matching without throwing a runtime error
586
+ function checkNever(x) { }
587
+
588
+ export { BetaMessageStream };