llm-stream-assemble 1.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 (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -0
  3. package/dist/adapters/anthropic.cjs +312 -0
  4. package/dist/adapters/anthropic.cjs.map +1 -0
  5. package/dist/adapters/anthropic.d.cts +11 -0
  6. package/dist/adapters/anthropic.d.ts +11 -0
  7. package/dist/adapters/anthropic.js +310 -0
  8. package/dist/adapters/anthropic.js.map +1 -0
  9. package/dist/adapters/openai-chat.cjs +499 -0
  10. package/dist/adapters/openai-chat.cjs.map +1 -0
  11. package/dist/adapters/openai-chat.d.cts +9 -0
  12. package/dist/adapters/openai-chat.d.ts +9 -0
  13. package/dist/adapters/openai-chat.js +497 -0
  14. package/dist/adapters/openai-chat.js.map +1 -0
  15. package/dist/adapters/openai-compatible.cjs +519 -0
  16. package/dist/adapters/openai-compatible.cjs.map +1 -0
  17. package/dist/adapters/openai-compatible.d.cts +15 -0
  18. package/dist/adapters/openai-compatible.d.ts +15 -0
  19. package/dist/adapters/openai-compatible.js +517 -0
  20. package/dist/adapters/openai-compatible.js.map +1 -0
  21. package/dist/adapters/openai-responses.cjs +444 -0
  22. package/dist/adapters/openai-responses.cjs.map +1 -0
  23. package/dist/adapters/openai-responses.d.cts +8 -0
  24. package/dist/adapters/openai-responses.d.ts +8 -0
  25. package/dist/adapters/openai-responses.js +442 -0
  26. package/dist/adapters/openai-responses.js.map +1 -0
  27. package/dist/core/index.cjs +816 -0
  28. package/dist/core/index.cjs.map +1 -0
  29. package/dist/core/index.d.cts +18 -0
  30. package/dist/core/index.d.ts +18 -0
  31. package/dist/core/index.js +808 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/index.cjs +2238 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.cts +66 -0
  36. package/dist/index.d.ts +66 -0
  37. package/dist/index.js +2206 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/types-CskRfrmD.d.cts +176 -0
  40. package/dist/types-CskRfrmD.d.ts +176 -0
  41. package/package.json +95 -0
@@ -0,0 +1,442 @@
1
+ // src/adapters/utils.ts
2
+ function isRecord(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
+ }
5
+ function asString(value) {
6
+ return typeof value === "string" ? value : void 0;
7
+ }
8
+ function asNumber(value) {
9
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
10
+ }
11
+ function optionalRawChunk(input) {
12
+ return Object.fromEntries(
13
+ Object.entries(input).filter(([, value]) => value !== void 0)
14
+ );
15
+ }
16
+ function prefixedAdapterError(feature, message) {
17
+ return adapterScopedError(feature, message);
18
+ }
19
+ function createStreamAdapter(config) {
20
+ return {
21
+ parseChunk(raw) {
22
+ return config.parser.parseChunk(raw);
23
+ },
24
+ parseResponse(body) {
25
+ return config.parseResponse(body, config.options);
26
+ }
27
+ };
28
+ }
29
+ function parseAdapterJSON(raw, feature) {
30
+ try {
31
+ return JSON.parse(raw);
32
+ } catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ throw prefixedAdapterError(feature, message);
35
+ }
36
+ }
37
+
38
+ // src/adapters/errors.ts
39
+ function libraryError(message) {
40
+ return new Error(`llm-stream-assemble: ${message}`);
41
+ }
42
+ function adapterScopedError(scope, message) {
43
+ return new Error(`llm-stream-assemble: ${scope}: ${message}`);
44
+ }
45
+ function providerErrorChunks(error, recoverable = false) {
46
+ return [
47
+ { kind: "provider-error", error, recoverable },
48
+ { kind: "finish", reason: "error" }
49
+ ];
50
+ }
51
+ function providerErrorChunksFromMessage(message, recoverable = false) {
52
+ return providerErrorChunks(libraryError(message), recoverable);
53
+ }
54
+
55
+ // src/adapters/openai-responses.ts
56
+ function openaiResponsesAdapter(options = {}) {
57
+ const parser = new ResponsesParser(options);
58
+ return createStreamAdapter({
59
+ parser,
60
+ parseResponse,
61
+ options
62
+ });
63
+ }
64
+ var ResponsesParser = class {
65
+ constructor(options) {
66
+ this.options = options;
67
+ }
68
+ options;
69
+ metadataEmitted = false;
70
+ textSeen = false;
71
+ tools = /* @__PURE__ */ new Map();
72
+ aliases = /* @__PURE__ */ new Map();
73
+ parseChunk(raw) {
74
+ if (raw.trim() === "[DONE]") return [];
75
+ const payload = parseAdapterJSON(raw, "openaiResponsesAdapter.parseChunk");
76
+ if (!isRecord(payload)) {
77
+ throw libraryError("openaiResponsesAdapter.parseChunk expected a JSON object");
78
+ }
79
+ if (isErrorPayload(payload)) return providerErrorChunks2(errorMessage(payload));
80
+ const chunks = [];
81
+ const response = isRecord(payload.response) ? payload.response : payload;
82
+ if (!this.metadataEmitted && isRecord(response) && hasResponseMetadata(response)) {
83
+ chunks.push(...metadataChunks(response));
84
+ this.metadataEmitted = true;
85
+ }
86
+ const type = asString(payload.type);
87
+ switch (type) {
88
+ case "response.created":
89
+ case "response.in_progress":
90
+ break;
91
+ case "response.output_text.delta":
92
+ chunks.push(...this.textDelta(payload));
93
+ break;
94
+ case "response.output_text.done":
95
+ chunks.push(...this.textDone(payload));
96
+ break;
97
+ case "response.refusal.delta":
98
+ chunks.push(...refusalDelta(payload));
99
+ break;
100
+ case "response.refusal.done":
101
+ break;
102
+ case "response.content_part.added":
103
+ case "response.content_part.done":
104
+ chunks.push(...contentPartChunks(payload, this.options));
105
+ break;
106
+ case "response.output_item.added":
107
+ chunks.push(...this.outputItemAdded(payload));
108
+ break;
109
+ case "response.output_item.delta":
110
+ chunks.push(...this.outputItemDelta(payload));
111
+ break;
112
+ case "response.output_item.done":
113
+ chunks.push(...this.outputItemDone(payload));
114
+ break;
115
+ case "response.function_call_arguments.delta":
116
+ chunks.push(...this.functionArgsDelta(payload));
117
+ break;
118
+ case "response.function_call_arguments.done":
119
+ chunks.push(...this.functionArgsDone(payload));
120
+ break;
121
+ case "response.completed":
122
+ chunks.push(...usageFromResponse(response));
123
+ chunks.push({ kind: "finish", reason: "stop" });
124
+ break;
125
+ case "response.failed":
126
+ chunks.push(...providerErrorChunks2(errorMessage(response)));
127
+ break;
128
+ case "response.incomplete":
129
+ chunks.push(...usageFromResponse(response));
130
+ chunks.push({ kind: "finish", reason: "incomplete" });
131
+ break;
132
+ case "error":
133
+ chunks.push(...providerErrorChunks2(errorMessage(payload)));
134
+ break;
135
+ default:
136
+ chunks.push(...reasoningChunks(payload));
137
+ break;
138
+ }
139
+ return chunks;
140
+ }
141
+ textDelta(payload) {
142
+ const text = asString(payload.delta) ?? asString(payload.text);
143
+ if (!text) return [];
144
+ this.textSeen = true;
145
+ return [
146
+ this.options.jsonMode ? { kind: "json-delta", delta: text } : { kind: "text-delta", text }
147
+ ];
148
+ }
149
+ textDone(payload) {
150
+ if (this.textSeen) return [];
151
+ const text = asString(payload.text) ?? asString(payload.delta);
152
+ if (!text) return [];
153
+ this.textSeen = true;
154
+ return [
155
+ this.options.jsonMode ? { kind: "json-delta", delta: text } : { kind: "text-delta", text }
156
+ ];
157
+ }
158
+ outputItemAdded(payload) {
159
+ const item = isRecord(payload.item) ? payload.item : void 0;
160
+ if (!item) return [];
161
+ if (asString(item.type) === "function_call") {
162
+ const state = this.toolState(payload, item);
163
+ const chunks = [];
164
+ if (!state.started) {
165
+ chunks.push(
166
+ optionalRawChunk({
167
+ kind: "tool-start",
168
+ id: state.id,
169
+ name: state.name,
170
+ index: state.index
171
+ })
172
+ );
173
+ state.started = true;
174
+ }
175
+ const args = asString(item.arguments);
176
+ if (args && state.args.length === 0) {
177
+ state.args += args;
178
+ chunks.push(
179
+ optionalRawChunk({
180
+ kind: "tool-args-delta",
181
+ id: state.id,
182
+ delta: args,
183
+ index: state.index
184
+ })
185
+ );
186
+ }
187
+ return chunks;
188
+ }
189
+ return messageItemChunks(item, this.options);
190
+ }
191
+ outputItemDelta(payload) {
192
+ const delta = isRecord(payload.delta) ? payload.delta : payload;
193
+ const args = asString(delta.arguments) ?? asString(delta.delta);
194
+ if (!args) return [];
195
+ const state = this.toolState(payload, delta);
196
+ const chunks = [];
197
+ if (!state.started) {
198
+ chunks.push(
199
+ optionalRawChunk({
200
+ kind: "tool-start",
201
+ id: state.id,
202
+ name: state.name,
203
+ index: state.index
204
+ })
205
+ );
206
+ state.started = true;
207
+ }
208
+ state.args += args;
209
+ chunks.push(
210
+ optionalRawChunk({ kind: "tool-args-delta", id: state.id, delta: args, index: state.index })
211
+ );
212
+ return chunks;
213
+ }
214
+ outputItemDone(payload) {
215
+ const item = isRecord(payload.item) ? payload.item : payload;
216
+ if (asString(item.type) !== "function_call") return messageItemChunks(item, this.options);
217
+ const state = this.toolState(payload, item);
218
+ if (state.done) return [];
219
+ state.done = true;
220
+ return [optionalRawChunk({ kind: "tool-done", id: state.id, index: state.index })];
221
+ }
222
+ functionArgsDelta(payload) {
223
+ const delta = asString(payload.delta);
224
+ if (!delta) return [];
225
+ const state = this.toolState(payload);
226
+ const chunks = [];
227
+ if (!state.started) {
228
+ chunks.push(
229
+ optionalRawChunk({
230
+ kind: "tool-start",
231
+ id: state.id,
232
+ name: state.name,
233
+ index: state.index
234
+ })
235
+ );
236
+ state.started = true;
237
+ }
238
+ state.args += delta;
239
+ chunks.push(
240
+ optionalRawChunk({ kind: "tool-args-delta", id: state.id, delta, index: state.index })
241
+ );
242
+ return chunks;
243
+ }
244
+ functionArgsDone(payload) {
245
+ const state = this.toolState(payload);
246
+ const chunks = [];
247
+ const finalArgs = asString(payload.arguments);
248
+ if (finalArgs && finalArgs !== state.args && !finalArgs.startsWith(state.args)) {
249
+ chunks.push(
250
+ optionalRawChunk({
251
+ kind: "tool-args-delta",
252
+ id: state.id,
253
+ delta: finalArgs,
254
+ index: state.index
255
+ })
256
+ );
257
+ state.args += finalArgs;
258
+ } else if (finalArgs && finalArgs.startsWith(state.args) && finalArgs.length > state.args.length) {
259
+ const missing = finalArgs.slice(state.args.length);
260
+ chunks.push(
261
+ optionalRawChunk({
262
+ kind: "tool-args-delta",
263
+ id: state.id,
264
+ delta: missing,
265
+ index: state.index
266
+ })
267
+ );
268
+ state.args = finalArgs;
269
+ }
270
+ if (!state.started) {
271
+ chunks.unshift(
272
+ optionalRawChunk({
273
+ kind: "tool-start",
274
+ id: state.id,
275
+ name: state.name,
276
+ index: state.index
277
+ })
278
+ );
279
+ state.started = true;
280
+ }
281
+ if (!state.done) {
282
+ chunks.push(optionalRawChunk({ kind: "tool-done", id: state.id, index: state.index }));
283
+ state.done = true;
284
+ }
285
+ return chunks;
286
+ }
287
+ toolState(payload, item) {
288
+ const id = toolId(payload, item);
289
+ const index = asNumber(payload.output_index);
290
+ const existing = this.tools.get(id);
291
+ if (existing) {
292
+ const callId2 = asString(item?.call_id) ?? asString(payload.call_id);
293
+ const itemId2 = asString(item?.id) ?? asString(payload.item_id);
294
+ if (callId2) this.aliases.set(callId2, id);
295
+ if (itemId2) this.aliases.set(itemId2, id);
296
+ return existing;
297
+ }
298
+ const state = {
299
+ id,
300
+ name: asString(item?.name) ?? "unknown",
301
+ index,
302
+ args: "",
303
+ started: false,
304
+ done: false
305
+ };
306
+ this.tools.set(id, state);
307
+ const callId = asString(item?.call_id) ?? asString(payload.call_id);
308
+ const itemId = asString(item?.id) ?? asString(payload.item_id);
309
+ if (callId) this.aliases.set(callId, id);
310
+ if (itemId) this.aliases.set(itemId, id);
311
+ return state;
312
+ }
313
+ };
314
+ function parseResponse(body, options) {
315
+ if (!isRecord(body)) {
316
+ throw libraryError("openaiResponsesAdapter.parseResponse expected an OpenAI Responses object");
317
+ }
318
+ if (isErrorPayload(body) || asString(body.status) === "failed") {
319
+ return providerErrorChunks2(errorMessage(body));
320
+ }
321
+ const chunks = [];
322
+ chunks.push(...metadataChunks(body));
323
+ const output = Array.isArray(body.output) ? body.output : [];
324
+ for (let index = 0; index < output.length; index += 1) {
325
+ const item = output[index];
326
+ if (!isRecord(item)) continue;
327
+ if (asString(item.type) === "function_call") {
328
+ const id = asString(item.call_id) ?? asString(item.id) ?? `response_tool:${index}`;
329
+ const name = asString(item.name) ?? "unknown";
330
+ chunks.push({ kind: "tool-start", id, name, index });
331
+ const args = asString(item.arguments);
332
+ if (args) chunks.push({ kind: "tool-args-delta", id, delta: args, index });
333
+ chunks.push({ kind: "tool-done", id, index });
334
+ } else {
335
+ chunks.push(...messageItemChunks(item, options));
336
+ }
337
+ }
338
+ chunks.push(...usageFromResponse(body));
339
+ const status = asString(body.status);
340
+ if (status === "incomplete") chunks.push({ kind: "finish", reason: "incomplete" });
341
+ else chunks.push({ kind: "finish", reason: "stop" });
342
+ return chunks;
343
+ }
344
+ function metadataChunks(response) {
345
+ const id = asString(response.id);
346
+ const chunks = [];
347
+ if (id) chunks.push({ kind: "message-start", id });
348
+ const metadata = optionalRawChunk({
349
+ kind: "metadata",
350
+ responseId: id,
351
+ model: asString(response.model),
352
+ created: asNumber(response.created_at),
353
+ raw: response
354
+ });
355
+ if (metadata.kind === "metadata" && (metadata.responseId || metadata.model || metadata.created)) {
356
+ chunks.push(metadata);
357
+ }
358
+ return chunks;
359
+ }
360
+ function hasResponseMetadata(response) {
361
+ return asString(response.id) !== void 0 || asString(response.model) !== void 0 || asNumber(response.created_at) !== void 0;
362
+ }
363
+ function messageItemChunks(item, options) {
364
+ const chunks = [];
365
+ const content = Array.isArray(item.content) ? item.content : [];
366
+ for (const part of content) {
367
+ if (!isRecord(part)) continue;
368
+ const type = asString(part.type);
369
+ const text = asString(part.text) ?? asString(part.delta);
370
+ const refusal = asString(part.refusal);
371
+ if (type === "output_text" && text) chunks.push(textChunk(text, options));
372
+ if (type === "refusal" && (refusal || text))
373
+ chunks.push({ kind: "refusal-delta", text: refusal ?? text ?? "" });
374
+ }
375
+ const directText = asString(item.text);
376
+ if (directText) chunks.push(textChunk(directText, options));
377
+ chunks.push(...reasoningChunks(item));
378
+ return chunks;
379
+ }
380
+ function contentPartChunks(payload, options) {
381
+ const part = isRecord(payload.part) ? payload.part : isRecord(payload.content_part) ? payload.content_part : payload;
382
+ return messageItemChunks({ content: [part] }, options);
383
+ }
384
+ function refusalDelta(payload) {
385
+ const text = asString(payload.delta) ?? asString(payload.refusal) ?? asString(payload.text);
386
+ return text ? [{ kind: "refusal-delta", text }] : [];
387
+ }
388
+ function reasoningChunks(payload) {
389
+ const chunks = [];
390
+ for (const field of ["reasoning", "reasoning_text", "summary"]) {
391
+ const text = asString(payload[field]);
392
+ if (text)
393
+ chunks.push({
394
+ kind: "reasoning-delta",
395
+ text,
396
+ variant: field === "summary" ? "summary" : "detail"
397
+ });
398
+ }
399
+ return chunks;
400
+ }
401
+ function usageFromResponse(response) {
402
+ const usage = isRecord(response.usage) ? response.usage : void 0;
403
+ if (!usage) return [];
404
+ const inputTokens = asNumber(usage.input_tokens);
405
+ const outputTokens = asNumber(usage.output_tokens);
406
+ const details = isRecord(usage.output_tokens_details) ? usage.output_tokens_details : void 0;
407
+ const reasoningTokens = details ? asNumber(details.reasoning_tokens) : void 0;
408
+ if (inputTokens === void 0 && outputTokens === void 0 && reasoningTokens === void 0)
409
+ return [];
410
+ return [
411
+ optionalRawChunk({
412
+ kind: "usage",
413
+ inputTokens,
414
+ outputTokens,
415
+ reasoningTokens,
416
+ raw: usage
417
+ })
418
+ ];
419
+ }
420
+ function textChunk(text, options) {
421
+ return options.jsonMode ? { kind: "json-delta", delta: text } : { kind: "text-delta", text };
422
+ }
423
+ function providerErrorChunks2(message) {
424
+ return providerErrorChunksFromMessage(message, false);
425
+ }
426
+ function errorMessage(payload) {
427
+ const error = isRecord(payload.error) ? payload.error : void 0;
428
+ return asString(error?.message) ?? asString(payload.message) ?? asString(payload.error) ?? "OpenAI Responses provider error";
429
+ }
430
+ function isErrorPayload(payload) {
431
+ return asString(payload.type) === "error" || payload.error !== void 0;
432
+ }
433
+ function toolId(payload, item) {
434
+ const callId = asString(item?.call_id) ?? asString(payload.call_id);
435
+ const itemId = asString(item?.id) ?? asString(payload.item_id);
436
+ const index = asNumber(payload.output_index);
437
+ return callId ?? itemId ?? `response_tool:${index ?? 0}`;
438
+ }
439
+
440
+ export { openaiResponsesAdapter };
441
+ //# sourceMappingURL=openai-responses.js.map
442
+ //# sourceMappingURL=openai-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/openai-responses.ts"],"names":["providerErrorChunks","callId","itemId"],"mappings":"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","file":"openai-responses.js","sourcesContent":["/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\n\t) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","import type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { libraryError, providerErrorChunksFromMessage } from \"./errors\";\nimport {\n\tasNumber,\n\tasString,\n\tcreateStreamAdapter,\n\tisRecord,\n\toptionalRawChunk,\n\tparseAdapterJSON,\n} from \"./utils\";\n\nexport interface OpenAIResponsesAdapterOptions {\n\tjsonMode?: boolean;\n}\n\ninterface ToolState {\n\tid: string;\n\tname: string;\n\tindex: number | undefined;\n\targs: string;\n\tstarted: boolean;\n\tdone: boolean;\n}\n\nexport function openaiResponsesAdapter(options: OpenAIResponsesAdapterOptions = {}): StreamAdapter {\n\tconst parser = new ResponsesParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass ResponsesParser {\n\tprivate metadataEmitted = false;\n\tprivate textSeen = false;\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly aliases = new Map<string, string>();\n\n\tconstructor(private readonly options: OpenAIResponsesAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tif (raw.trim() === \"[DONE]\") return [];\n\t\tconst payload = parseAdapterJSON(raw, \"openaiResponsesAdapter.parseChunk\");\n\t\tif (!isRecord(payload)) {\n\t\t\tthrow libraryError(\"openaiResponsesAdapter.parseChunk expected a JSON object\");\n\t\t}\n\n\t\tif (isErrorPayload(payload)) return providerErrorChunks(errorMessage(payload));\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst response = isRecord(payload.response) ? payload.response : payload;\n\t\tif (!this.metadataEmitted && isRecord(response) && hasResponseMetadata(response)) {\n\t\t\tchunks.push(...metadataChunks(response));\n\t\t\tthis.metadataEmitted = true;\n\t\t}\n\n\t\tconst type = asString(payload.type);\n\t\tswitch (type) {\n\t\t\tcase \"response.created\":\n\t\t\tcase \"response.in_progress\":\n\t\t\t\tbreak;\n\t\t\tcase \"response.output_text.delta\":\n\t\t\t\tchunks.push(...this.textDelta(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.output_text.done\":\n\t\t\t\tchunks.push(...this.textDone(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.refusal.delta\":\n\t\t\t\tchunks.push(...refusalDelta(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.refusal.done\":\n\t\t\t\tbreak;\n\t\t\tcase \"response.content_part.added\":\n\t\t\tcase \"response.content_part.done\":\n\t\t\t\tchunks.push(...contentPartChunks(payload, this.options));\n\t\t\t\tbreak;\n\t\t\tcase \"response.output_item.added\":\n\t\t\t\tchunks.push(...this.outputItemAdded(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.output_item.delta\":\n\t\t\t\tchunks.push(...this.outputItemDelta(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.output_item.done\":\n\t\t\t\tchunks.push(...this.outputItemDone(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.function_call_arguments.delta\":\n\t\t\t\tchunks.push(...this.functionArgsDelta(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.function_call_arguments.done\":\n\t\t\t\tchunks.push(...this.functionArgsDone(payload));\n\t\t\t\tbreak;\n\t\t\tcase \"response.completed\":\n\t\t\t\tchunks.push(...usageFromResponse(response));\n\t\t\t\tchunks.push({ kind: \"finish\", reason: \"stop\" });\n\t\t\t\tbreak;\n\t\t\tcase \"response.failed\":\n\t\t\t\tchunks.push(...providerErrorChunks(errorMessage(response)));\n\t\t\t\tbreak;\n\t\t\tcase \"response.incomplete\":\n\t\t\t\tchunks.push(...usageFromResponse(response));\n\t\t\t\tchunks.push({ kind: \"finish\", reason: \"incomplete\" });\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\tchunks.push(...providerErrorChunks(errorMessage(payload)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tchunks.push(...reasoningChunks(payload));\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate textDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst text = asString(payload.delta) ?? asString(payload.text);\n\t\tif (!text) return [];\n\t\tthis.textSeen = true;\n\t\treturn [\n\t\t\tthis.options.jsonMode ? { kind: \"json-delta\", delta: text } : { kind: \"text-delta\", text },\n\t\t];\n\t}\n\n\tprivate textDone(payload: Record<string, unknown>): RawChunk[] {\n\t\tif (this.textSeen) return [];\n\t\tconst text = asString(payload.text) ?? asString(payload.delta);\n\t\tif (!text) return [];\n\t\tthis.textSeen = true;\n\t\treturn [\n\t\t\tthis.options.jsonMode ? { kind: \"json-delta\", delta: text } : { kind: \"text-delta\", text },\n\t\t];\n\t}\n\n\tprivate outputItemAdded(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst item = isRecord(payload.item) ? payload.item : undefined;\n\t\tif (!item) return [];\n\t\tif (asString(item.type) === \"function_call\") {\n\t\t\tconst state = this.toolState(payload, item);\n\t\t\tconst chunks: RawChunk[] = [];\n\t\t\tif (!state.started) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tstate.started = true;\n\t\t\t}\n\t\t\tconst args = asString(item.arguments);\n\t\t\tif (args && state.args.length === 0) {\n\t\t\t\tstate.args += args;\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tdelta: args,\n\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn chunks;\n\t\t}\n\t\treturn messageItemChunks(item, this.options);\n\t}\n\n\tprivate outputItemDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : payload;\n\t\tconst args = asString(delta.arguments) ?? asString(delta.delta);\n\t\tif (!args) return [];\n\t\tconst state = this.toolState(payload, delta);\n\t\tconst chunks: RawChunk[] = [];\n\t\tif (!state.started) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid: state.id,\n\t\t\t\t\tname: state.name,\n\t\t\t\t\tindex: state.index,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tstate.started = true;\n\t\t}\n\t\tstate.args += args;\n\t\tchunks.push(\n\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id: state.id, delta: args, index: state.index }),\n\t\t);\n\t\treturn chunks;\n\t}\n\n\tprivate outputItemDone(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst item = isRecord(payload.item) ? payload.item : payload;\n\t\tif (asString(item.type) !== \"function_call\") return messageItemChunks(item, this.options);\n\t\tconst state = this.toolState(payload, item);\n\t\tif (state.done) return [];\n\t\tstate.done = true;\n\t\treturn [optionalRawChunk({ kind: \"tool-done\", id: state.id, index: state.index })];\n\t}\n\n\tprivate functionArgsDelta(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst delta = asString(payload.delta);\n\t\tif (!delta) return [];\n\t\tconst state = this.toolState(payload);\n\t\tconst chunks: RawChunk[] = [];\n\t\tif (!state.started) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid: state.id,\n\t\t\t\t\tname: state.name,\n\t\t\t\t\tindex: state.index,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tstate.started = true;\n\t\t}\n\t\tstate.args += delta;\n\t\tchunks.push(\n\t\t\toptionalRawChunk({ kind: \"tool-args-delta\", id: state.id, delta, index: state.index }),\n\t\t);\n\t\treturn chunks;\n\t}\n\n\tprivate functionArgsDone(payload: Record<string, unknown>): RawChunk[] {\n\t\tconst state = this.toolState(payload);\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst finalArgs = asString(payload.arguments);\n\t\tif (finalArgs && finalArgs !== state.args && !finalArgs.startsWith(state.args)) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\tid: state.id,\n\t\t\t\t\tdelta: finalArgs,\n\t\t\t\t\tindex: state.index,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tstate.args += finalArgs;\n\t\t} else if (\n\t\t\tfinalArgs &&\n\t\t\tfinalArgs.startsWith(state.args) &&\n\t\t\tfinalArgs.length > state.args.length\n\t\t) {\n\t\t\tconst missing = finalArgs.slice(state.args.length);\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\tid: state.id,\n\t\t\t\t\tdelta: missing,\n\t\t\t\t\tindex: state.index,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tstate.args = finalArgs;\n\t\t}\n\t\tif (!state.started) {\n\t\t\tchunks.unshift(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid: state.id,\n\t\t\t\t\tname: state.name,\n\t\t\t\t\tindex: state.index,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tstate.started = true;\n\t\t}\n\t\tif (!state.done) {\n\t\t\tchunks.push(optionalRawChunk({ kind: \"tool-done\", id: state.id, index: state.index }));\n\t\t\tstate.done = true;\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate toolState(payload: Record<string, unknown>, item?: Record<string, unknown>): ToolState {\n\t\tconst id = toolId(payload, item);\n\t\tconst index = asNumber(payload.output_index);\n\t\tconst existing = this.tools.get(id);\n\t\tif (existing) {\n\t\t\tconst callId = asString(item?.call_id) ?? asString(payload.call_id);\n\t\t\tconst itemId = asString(item?.id) ?? asString(payload.item_id);\n\t\t\tif (callId) this.aliases.set(callId, id);\n\t\t\tif (itemId) this.aliases.set(itemId, id);\n\t\t\treturn existing;\n\t\t}\n\t\tconst state: ToolState = {\n\t\t\tid,\n\t\t\tname: asString(item?.name) ?? \"unknown\",\n\t\t\tindex,\n\t\t\targs: \"\",\n\t\t\tstarted: false,\n\t\t\tdone: false,\n\t\t};\n\t\tthis.tools.set(id, state);\n\t\tconst callId = asString(item?.call_id) ?? asString(payload.call_id);\n\t\tconst itemId = asString(item?.id) ?? asString(payload.item_id);\n\t\tif (callId) this.aliases.set(callId, id);\n\t\tif (itemId) this.aliases.set(itemId, id);\n\t\treturn state;\n\t}\n}\n\nfunction parseResponse(body: unknown, options: OpenAIResponsesAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"openaiResponsesAdapter.parseResponse expected an OpenAI Responses object\");\n\t}\n\tif (isErrorPayload(body) || asString(body.status) === \"failed\") {\n\t\treturn providerErrorChunks(errorMessage(body));\n\t}\n\n\tconst chunks: RawChunk[] = [];\n\tchunks.push(...metadataChunks(body));\n\tconst output = Array.isArray(body.output) ? body.output : [];\n\tfor (let index = 0; index < output.length; index += 1) {\n\t\tconst item = output[index];\n\t\tif (!isRecord(item)) continue;\n\t\tif (asString(item.type) === \"function_call\") {\n\t\t\tconst id = asString(item.call_id) ?? asString(item.id) ?? `response_tool:${index}`;\n\t\t\tconst name = asString(item.name) ?? \"unknown\";\n\t\t\tchunks.push({ kind: \"tool-start\", id, name, index });\n\t\t\tconst args = asString(item.arguments);\n\t\t\tif (args) chunks.push({ kind: \"tool-args-delta\", id, delta: args, index });\n\t\t\tchunks.push({ kind: \"tool-done\", id, index });\n\t\t} else {\n\t\t\tchunks.push(...messageItemChunks(item, options));\n\t\t}\n\t}\n\tchunks.push(...usageFromResponse(body));\n\tconst status = asString(body.status);\n\tif (status === \"incomplete\") chunks.push({ kind: \"finish\", reason: \"incomplete\" });\n\telse chunks.push({ kind: \"finish\", reason: \"stop\" });\n\treturn chunks;\n}\n\nfunction metadataChunks(response: Record<string, unknown>): RawChunk[] {\n\tconst id = asString(response.id);\n\tconst chunks: RawChunk[] = [];\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\tconst metadata = optionalRawChunk({\n\t\tkind: \"metadata\",\n\t\tresponseId: id,\n\t\tmodel: asString(response.model),\n\t\tcreated: asNumber(response.created_at),\n\t\traw: response,\n\t});\n\tif (metadata.kind === \"metadata\" && (metadata.responseId || metadata.model || metadata.created)) {\n\t\tchunks.push(metadata);\n\t}\n\treturn chunks;\n}\n\nfunction hasResponseMetadata(response: Record<string, unknown>): boolean {\n\treturn (\n\t\tasString(response.id) !== undefined ||\n\t\tasString(response.model) !== undefined ||\n\t\tasNumber(response.created_at) !== undefined\n\t);\n}\n\nfunction messageItemChunks(\n\titem: Record<string, unknown>,\n\toptions: OpenAIResponsesAdapterOptions,\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst content = Array.isArray(item.content) ? item.content : [];\n\tfor (const part of content) {\n\t\tif (!isRecord(part)) continue;\n\t\tconst type = asString(part.type);\n\t\tconst text = asString(part.text) ?? asString(part.delta);\n\t\tconst refusal = asString(part.refusal);\n\t\tif (type === \"output_text\" && text) chunks.push(textChunk(text, options));\n\t\tif (type === \"refusal\" && (refusal || text))\n\t\t\tchunks.push({ kind: \"refusal-delta\", text: refusal ?? text ?? \"\" });\n\t}\n\tconst directText = asString(item.text);\n\tif (directText) chunks.push(textChunk(directText, options));\n\tchunks.push(...reasoningChunks(item));\n\treturn chunks;\n}\n\nfunction contentPartChunks(\n\tpayload: Record<string, unknown>,\n\toptions: OpenAIResponsesAdapterOptions,\n): RawChunk[] {\n\tconst part = isRecord(payload.part)\n\t\t? payload.part\n\t\t: isRecord(payload.content_part)\n\t\t\t? payload.content_part\n\t\t\t: payload;\n\treturn messageItemChunks({ content: [part] }, options);\n}\n\nfunction refusalDelta(payload: Record<string, unknown>): RawChunk[] {\n\tconst text = asString(payload.delta) ?? asString(payload.refusal) ?? asString(payload.text);\n\treturn text ? [{ kind: \"refusal-delta\", text }] : [];\n}\n\nfunction reasoningChunks(payload: Record<string, unknown>): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tfor (const field of [\"reasoning\", \"reasoning_text\", \"summary\"]) {\n\t\tconst text = asString(payload[field]);\n\t\tif (text)\n\t\t\tchunks.push({\n\t\t\t\tkind: \"reasoning-delta\",\n\t\t\t\ttext,\n\t\t\t\tvariant: field === \"summary\" ? \"summary\" : \"detail\",\n\t\t\t});\n\t}\n\treturn chunks;\n}\n\nfunction usageFromResponse(response: Record<string, unknown>): RawChunk[] {\n\tconst usage = isRecord(response.usage) ? response.usage : undefined;\n\tif (!usage) return [];\n\tconst inputTokens = asNumber(usage.input_tokens);\n\tconst outputTokens = asNumber(usage.output_tokens);\n\tconst details = isRecord(usage.output_tokens_details) ? usage.output_tokens_details : undefined;\n\tconst reasoningTokens = details ? asNumber(details.reasoning_tokens) : undefined;\n\tif (inputTokens === undefined && outputTokens === undefined && reasoningTokens === undefined)\n\t\treturn [];\n\treturn [\n\t\toptionalRawChunk({\n\t\t\tkind: \"usage\",\n\t\t\tinputTokens,\n\t\t\toutputTokens,\n\t\t\treasoningTokens,\n\t\t\traw: usage,\n\t\t}),\n\t];\n}\n\nfunction textChunk(text: string, options: OpenAIResponsesAdapterOptions): RawChunk {\n\treturn options.jsonMode ? { kind: \"json-delta\", delta: text } : { kind: \"text-delta\", text };\n}\n\nfunction providerErrorChunks(message: string): RawChunk[] {\n\treturn providerErrorChunksFromMessage(message, false);\n}\n\nfunction errorMessage(payload: Record<string, unknown>): string {\n\tconst error = isRecord(payload.error) ? payload.error : undefined;\n\treturn (\n\t\tasString(error?.message) ??\n\t\tasString(payload.message) ??\n\t\tasString(payload.error) ??\n\t\t\"OpenAI Responses provider error\"\n\t);\n}\n\nfunction isErrorPayload(payload: Record<string, unknown>): boolean {\n\treturn asString(payload.type) === \"error\" || payload.error !== undefined;\n}\n\nfunction toolId(payload: Record<string, unknown>, item?: Record<string, unknown>): string {\n\tconst callId = asString(item?.call_id) ?? asString(payload.call_id);\n\tconst itemId = asString(item?.id) ?? asString(payload.item_id);\n\tconst index = asNumber(payload.output_index);\n\treturn callId ?? itemId ?? `response_tool:${index ?? 0}`;\n}\n"]}