@langchain/core 1.1.42 → 1.1.43-dev-1777615538778

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 (354) hide show
  1. package/README.md +1 -1
  2. package/dist/callbacks/base.cjs +5 -0
  3. package/dist/callbacks/base.cjs.map +1 -1
  4. package/dist/callbacks/base.d.cts +20 -1
  5. package/dist/callbacks/base.d.cts.map +1 -1
  6. package/dist/callbacks/base.d.ts +20 -1
  7. package/dist/callbacks/base.d.ts.map +1 -1
  8. package/dist/callbacks/base.js +5 -1
  9. package/dist/callbacks/base.js.map +1 -1
  10. package/dist/callbacks/manager.cjs +10 -0
  11. package/dist/callbacks/manager.cjs.map +1 -1
  12. package/dist/callbacks/manager.d.cts +2 -0
  13. package/dist/callbacks/manager.d.cts.map +1 -1
  14. package/dist/callbacks/manager.d.ts +2 -0
  15. package/dist/callbacks/manager.d.ts.map +1 -1
  16. package/dist/callbacks/manager.js +10 -0
  17. package/dist/callbacks/manager.js.map +1 -1
  18. package/dist/language_models/base.cjs +1 -1
  19. package/dist/language_models/base.cjs.map +1 -1
  20. package/dist/language_models/base.js +1 -1
  21. package/dist/language_models/base.js.map +1 -1
  22. package/dist/language_models/chat_models.cjs +103 -1
  23. package/dist/language_models/chat_models.cjs.map +1 -1
  24. package/dist/language_models/chat_models.d.cts +55 -0
  25. package/dist/language_models/chat_models.d.cts.map +1 -1
  26. package/dist/language_models/chat_models.d.ts +55 -0
  27. package/dist/language_models/chat_models.d.ts.map +1 -1
  28. package/dist/language_models/chat_models.js +104 -2
  29. package/dist/language_models/chat_models.js.map +1 -1
  30. package/dist/language_models/compat.cjs +399 -0
  31. package/dist/language_models/compat.cjs.map +1 -0
  32. package/dist/language_models/compat.d.cts +20 -0
  33. package/dist/language_models/compat.d.cts.map +1 -0
  34. package/dist/language_models/compat.d.ts +20 -0
  35. package/dist/language_models/compat.d.ts.map +1 -0
  36. package/dist/language_models/compat.js +391 -0
  37. package/dist/language_models/compat.js.map +1 -0
  38. package/dist/language_models/event.cjs +12 -0
  39. package/dist/language_models/event.cjs.map +1 -0
  40. package/dist/language_models/event.d.cts +185 -0
  41. package/dist/language_models/event.d.cts.map +1 -0
  42. package/dist/language_models/event.d.ts +185 -0
  43. package/dist/language_models/event.d.ts.map +1 -0
  44. package/dist/language_models/event.js +7 -0
  45. package/dist/language_models/event.js.map +1 -0
  46. package/dist/language_models/stream.cjs +488 -0
  47. package/dist/language_models/stream.cjs.map +1 -0
  48. package/dist/language_models/stream.d.cts +106 -0
  49. package/dist/language_models/stream.d.cts.map +1 -0
  50. package/dist/language_models/stream.d.ts +106 -0
  51. package/dist/language_models/stream.d.ts.map +1 -0
  52. package/dist/language_models/stream.js +477 -0
  53. package/dist/language_models/stream.js.map +1 -0
  54. package/dist/load/import_map.cjs +6 -0
  55. package/dist/load/import_map.cjs.map +1 -1
  56. package/dist/load/import_map.js +8 -2
  57. package/dist/load/import_map.js.map +1 -1
  58. package/dist/load/map_keys.cjs +2 -2
  59. package/dist/messages/ai.cjs +11 -8
  60. package/dist/messages/ai.cjs.map +1 -1
  61. package/dist/messages/ai.d.cts.map +1 -1
  62. package/dist/messages/ai.d.ts.map +1 -1
  63. package/dist/messages/ai.js +11 -8
  64. package/dist/messages/ai.js.map +1 -1
  65. package/dist/messages/content/index.cjs.map +1 -1
  66. package/dist/messages/content/index.d.cts +5 -1
  67. package/dist/messages/content/index.d.cts.map +1 -1
  68. package/dist/messages/content/index.d.ts +5 -1
  69. package/dist/messages/content/index.d.ts.map +1 -1
  70. package/dist/messages/content/index.js.map +1 -1
  71. package/dist/messages/index.d.cts +2 -2
  72. package/dist/messages/index.d.ts +2 -2
  73. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts +1 -1
  74. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts +1 -1
  75. package/dist/prompts/template.cjs +1 -1
  76. package/dist/singletons/callbacks.cjs +1 -1
  77. package/dist/tracers/console.cjs +1 -1
  78. package/dist/types/type-utils.d.cts +2 -1
  79. package/dist/types/type-utils.d.cts.map +1 -1
  80. package/dist/types/type-utils.d.ts +2 -1
  81. package/dist/types/type-utils.d.ts.map +1 -1
  82. package/dist/utils/async_caller.cjs +3 -2
  83. package/dist/utils/async_caller.cjs.map +1 -1
  84. package/dist/utils/async_caller.js +2 -1
  85. package/dist/utils/async_caller.js.map +1 -1
  86. package/dist/utils/event_source_parse.cjs +5 -12
  87. package/dist/utils/event_source_parse.cjs.map +1 -1
  88. package/dist/utils/event_source_parse.js +5 -12
  89. package/dist/utils/event_source_parse.js.map +1 -1
  90. package/dist/utils/uuid/max.d.cts +1 -1
  91. package/dist/utils/uuid/max.d.ts +1 -1
  92. package/dist/utils/uuid/nil.d.cts +1 -1
  93. package/dist/utils/uuid/nil.d.ts +1 -1
  94. package/package.json +34 -1
  95. package/agents.cjs +0 -1
  96. package/agents.d.cts +0 -1
  97. package/agents.d.ts +0 -1
  98. package/agents.js +0 -1
  99. package/caches.cjs +0 -1
  100. package/caches.d.cts +0 -1
  101. package/caches.d.ts +0 -1
  102. package/caches.js +0 -1
  103. package/callbacks/base.cjs +0 -1
  104. package/callbacks/base.d.cts +0 -1
  105. package/callbacks/base.d.ts +0 -1
  106. package/callbacks/base.js +0 -1
  107. package/callbacks/dispatch/web.cjs +0 -1
  108. package/callbacks/dispatch/web.d.cts +0 -1
  109. package/callbacks/dispatch/web.d.ts +0 -1
  110. package/callbacks/dispatch/web.js +0 -1
  111. package/callbacks/dispatch.cjs +0 -1
  112. package/callbacks/dispatch.d.cts +0 -1
  113. package/callbacks/dispatch.d.ts +0 -1
  114. package/callbacks/dispatch.js +0 -1
  115. package/callbacks/manager.cjs +0 -1
  116. package/callbacks/manager.d.cts +0 -1
  117. package/callbacks/manager.d.ts +0 -1
  118. package/callbacks/manager.js +0 -1
  119. package/callbacks/promises.cjs +0 -1
  120. package/callbacks/promises.d.cts +0 -1
  121. package/callbacks/promises.d.ts +0 -1
  122. package/callbacks/promises.js +0 -1
  123. package/chat_history.cjs +0 -1
  124. package/chat_history.d.cts +0 -1
  125. package/chat_history.d.ts +0 -1
  126. package/chat_history.js +0 -1
  127. package/context.cjs +0 -1
  128. package/context.d.cts +0 -1
  129. package/context.d.ts +0 -1
  130. package/context.js +0 -1
  131. package/document_loaders/base.cjs +0 -1
  132. package/document_loaders/base.d.cts +0 -1
  133. package/document_loaders/base.d.ts +0 -1
  134. package/document_loaders/base.js +0 -1
  135. package/document_loaders/langsmith.cjs +0 -1
  136. package/document_loaders/langsmith.d.cts +0 -1
  137. package/document_loaders/langsmith.d.ts +0 -1
  138. package/document_loaders/langsmith.js +0 -1
  139. package/documents.cjs +0 -1
  140. package/documents.d.cts +0 -1
  141. package/documents.d.ts +0 -1
  142. package/documents.js +0 -1
  143. package/embeddings.cjs +0 -1
  144. package/embeddings.d.cts +0 -1
  145. package/embeddings.d.ts +0 -1
  146. package/embeddings.js +0 -1
  147. package/errors.cjs +0 -1
  148. package/errors.d.cts +0 -1
  149. package/errors.d.ts +0 -1
  150. package/errors.js +0 -1
  151. package/example_selectors.cjs +0 -1
  152. package/example_selectors.d.cts +0 -1
  153. package/example_selectors.d.ts +0 -1
  154. package/example_selectors.js +0 -1
  155. package/indexing.cjs +0 -1
  156. package/indexing.d.cts +0 -1
  157. package/indexing.d.ts +0 -1
  158. package/indexing.js +0 -1
  159. package/language_models/base.cjs +0 -1
  160. package/language_models/base.d.cts +0 -1
  161. package/language_models/base.d.ts +0 -1
  162. package/language_models/base.js +0 -1
  163. package/language_models/chat_models.cjs +0 -1
  164. package/language_models/chat_models.d.cts +0 -1
  165. package/language_models/chat_models.d.ts +0 -1
  166. package/language_models/chat_models.js +0 -1
  167. package/language_models/llms.cjs +0 -1
  168. package/language_models/llms.d.cts +0 -1
  169. package/language_models/llms.d.ts +0 -1
  170. package/language_models/llms.js +0 -1
  171. package/language_models/profile.cjs +0 -1
  172. package/language_models/profile.d.cts +0 -1
  173. package/language_models/profile.d.ts +0 -1
  174. package/language_models/profile.js +0 -1
  175. package/language_models/structured_output.cjs +0 -1
  176. package/language_models/structured_output.d.cts +0 -1
  177. package/language_models/structured_output.d.ts +0 -1
  178. package/language_models/structured_output.js +0 -1
  179. package/load/serializable.cjs +0 -1
  180. package/load/serializable.d.cts +0 -1
  181. package/load/serializable.d.ts +0 -1
  182. package/load/serializable.js +0 -1
  183. package/load.cjs +0 -1
  184. package/load.d.cts +0 -1
  185. package/load.d.ts +0 -1
  186. package/load.js +0 -1
  187. package/memory.cjs +0 -1
  188. package/memory.d.cts +0 -1
  189. package/memory.d.ts +0 -1
  190. package/memory.js +0 -1
  191. package/messages/tool.cjs +0 -1
  192. package/messages/tool.d.cts +0 -1
  193. package/messages/tool.d.ts +0 -1
  194. package/messages/tool.js +0 -1
  195. package/messages.cjs +0 -1
  196. package/messages.d.cts +0 -1
  197. package/messages.d.ts +0 -1
  198. package/messages.js +0 -1
  199. package/output_parsers/openai_functions.cjs +0 -1
  200. package/output_parsers/openai_functions.d.cts +0 -1
  201. package/output_parsers/openai_functions.d.ts +0 -1
  202. package/output_parsers/openai_functions.js +0 -1
  203. package/output_parsers/openai_tools.cjs +0 -1
  204. package/output_parsers/openai_tools.d.cts +0 -1
  205. package/output_parsers/openai_tools.d.ts +0 -1
  206. package/output_parsers/openai_tools.js +0 -1
  207. package/output_parsers.cjs +0 -1
  208. package/output_parsers.d.cts +0 -1
  209. package/output_parsers.d.ts +0 -1
  210. package/output_parsers.js +0 -1
  211. package/outputs.cjs +0 -1
  212. package/outputs.d.cts +0 -1
  213. package/outputs.d.ts +0 -1
  214. package/outputs.js +0 -1
  215. package/prompt_values.cjs +0 -1
  216. package/prompt_values.d.cts +0 -1
  217. package/prompt_values.d.ts +0 -1
  218. package/prompt_values.js +0 -1
  219. package/prompts.cjs +0 -1
  220. package/prompts.d.cts +0 -1
  221. package/prompts.d.ts +0 -1
  222. package/prompts.js +0 -1
  223. package/retrievers/document_compressors.cjs +0 -1
  224. package/retrievers/document_compressors.d.cts +0 -1
  225. package/retrievers/document_compressors.d.ts +0 -1
  226. package/retrievers/document_compressors.js +0 -1
  227. package/retrievers.cjs +0 -1
  228. package/retrievers.d.cts +0 -1
  229. package/retrievers.d.ts +0 -1
  230. package/retrievers.js +0 -1
  231. package/runnables/graph.cjs +0 -1
  232. package/runnables/graph.d.cts +0 -1
  233. package/runnables/graph.d.ts +0 -1
  234. package/runnables/graph.js +0 -1
  235. package/runnables.cjs +0 -1
  236. package/runnables.d.cts +0 -1
  237. package/runnables.d.ts +0 -1
  238. package/runnables.js +0 -1
  239. package/singletons.cjs +0 -1
  240. package/singletons.d.cts +0 -1
  241. package/singletons.d.ts +0 -1
  242. package/singletons.js +0 -1
  243. package/stores.cjs +0 -1
  244. package/stores.d.cts +0 -1
  245. package/stores.d.ts +0 -1
  246. package/stores.js +0 -1
  247. package/structured_query.cjs +0 -1
  248. package/structured_query.d.cts +0 -1
  249. package/structured_query.d.ts +0 -1
  250. package/structured_query.js +0 -1
  251. package/tools.cjs +0 -1
  252. package/tools.d.cts +0 -1
  253. package/tools.d.ts +0 -1
  254. package/tools.js +0 -1
  255. package/tracers/base.cjs +0 -1
  256. package/tracers/base.d.cts +0 -1
  257. package/tracers/base.d.ts +0 -1
  258. package/tracers/base.js +0 -1
  259. package/tracers/console.cjs +0 -1
  260. package/tracers/console.d.cts +0 -1
  261. package/tracers/console.d.ts +0 -1
  262. package/tracers/console.js +0 -1
  263. package/tracers/log_stream.cjs +0 -1
  264. package/tracers/log_stream.d.cts +0 -1
  265. package/tracers/log_stream.d.ts +0 -1
  266. package/tracers/log_stream.js +0 -1
  267. package/tracers/run_collector.cjs +0 -1
  268. package/tracers/run_collector.d.cts +0 -1
  269. package/tracers/run_collector.d.ts +0 -1
  270. package/tracers/run_collector.js +0 -1
  271. package/tracers/tracer_langchain.cjs +0 -1
  272. package/tracers/tracer_langchain.d.cts +0 -1
  273. package/tracers/tracer_langchain.d.ts +0 -1
  274. package/tracers/tracer_langchain.js +0 -1
  275. package/types/stream.cjs +0 -1
  276. package/types/stream.d.cts +0 -1
  277. package/types/stream.d.ts +0 -1
  278. package/types/stream.js +0 -1
  279. package/utils/async_caller.cjs +0 -1
  280. package/utils/async_caller.d.cts +0 -1
  281. package/utils/async_caller.d.ts +0 -1
  282. package/utils/async_caller.js +0 -1
  283. package/utils/chunk_array.cjs +0 -1
  284. package/utils/chunk_array.d.cts +0 -1
  285. package/utils/chunk_array.d.ts +0 -1
  286. package/utils/chunk_array.js +0 -1
  287. package/utils/context.cjs +0 -1
  288. package/utils/context.d.cts +0 -1
  289. package/utils/context.d.ts +0 -1
  290. package/utils/context.js +0 -1
  291. package/utils/env.cjs +0 -1
  292. package/utils/env.d.cts +0 -1
  293. package/utils/env.d.ts +0 -1
  294. package/utils/env.js +0 -1
  295. package/utils/event_source_parse.cjs +0 -1
  296. package/utils/event_source_parse.d.cts +0 -1
  297. package/utils/event_source_parse.d.ts +0 -1
  298. package/utils/event_source_parse.js +0 -1
  299. package/utils/format.cjs +0 -1
  300. package/utils/format.d.cts +0 -1
  301. package/utils/format.d.ts +0 -1
  302. package/utils/format.js +0 -1
  303. package/utils/function_calling.cjs +0 -1
  304. package/utils/function_calling.d.cts +0 -1
  305. package/utils/function_calling.d.ts +0 -1
  306. package/utils/function_calling.js +0 -1
  307. package/utils/hash.cjs +0 -1
  308. package/utils/hash.d.cts +0 -1
  309. package/utils/hash.d.ts +0 -1
  310. package/utils/hash.js +0 -1
  311. package/utils/json_patch.cjs +0 -1
  312. package/utils/json_patch.d.cts +0 -1
  313. package/utils/json_patch.d.ts +0 -1
  314. package/utils/json_patch.js +0 -1
  315. package/utils/json_schema.cjs +0 -1
  316. package/utils/json_schema.d.cts +0 -1
  317. package/utils/json_schema.d.ts +0 -1
  318. package/utils/json_schema.js +0 -1
  319. package/utils/math.cjs +0 -1
  320. package/utils/math.d.cts +0 -1
  321. package/utils/math.d.ts +0 -1
  322. package/utils/math.js +0 -1
  323. package/utils/ssrf.cjs +0 -1
  324. package/utils/ssrf.d.cts +0 -1
  325. package/utils/ssrf.d.ts +0 -1
  326. package/utils/ssrf.js +0 -1
  327. package/utils/standard_schema.cjs +0 -1
  328. package/utils/standard_schema.d.cts +0 -1
  329. package/utils/standard_schema.d.ts +0 -1
  330. package/utils/standard_schema.js +0 -1
  331. package/utils/stream.cjs +0 -1
  332. package/utils/stream.d.cts +0 -1
  333. package/utils/stream.d.ts +0 -1
  334. package/utils/stream.js +0 -1
  335. package/utils/testing.cjs +0 -1
  336. package/utils/testing.d.cts +0 -1
  337. package/utils/testing.d.ts +0 -1
  338. package/utils/testing.js +0 -1
  339. package/utils/tiktoken.cjs +0 -1
  340. package/utils/tiktoken.d.cts +0 -1
  341. package/utils/tiktoken.d.ts +0 -1
  342. package/utils/tiktoken.js +0 -1
  343. package/utils/types.cjs +0 -1
  344. package/utils/types.d.cts +0 -1
  345. package/utils/types.d.ts +0 -1
  346. package/utils/types.js +0 -1
  347. package/utils/uuid.cjs +0 -1
  348. package/utils/uuid.d.cts +0 -1
  349. package/utils/uuid.d.ts +0 -1
  350. package/utils/uuid.js +0 -1
  351. package/vectorstores.cjs +0 -1
  352. package/vectorstores.d.cts +0 -1
  353. package/vectorstores.d.ts +0 -1
  354. package/vectorstores.js +0 -1
@@ -0,0 +1,399 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_ai = require("../messages/ai.cjs");
4
+ //#region src/language_models/compat.ts
5
+ /**
6
+ * Compatibility bridge: converts legacy `_streamResponseChunks`
7
+ * (`ChatGenerationChunk` / `AIMessageChunk`) output to the new
8
+ * `ChatModelStreamEvent` protocol.
9
+ *
10
+ * @module
11
+ */
12
+ var compat_exports = /* @__PURE__ */ require_runtime.__exportAll({
13
+ convertChunksToEvents: () => convertChunksToEvents,
14
+ finalizeContentBlock: () => finalizeContentBlock
15
+ });
16
+ const MIME_TYPE_BY_AUDIO_FORMAT = {
17
+ wav: "audio/wav",
18
+ mp3: "audio/mpeg",
19
+ flac: "audio/flac",
20
+ opus: "audio/opus",
21
+ aac: "audio/aac",
22
+ pcm16: "audio/pcm"
23
+ };
24
+ const MIME_TYPE_BY_IMAGE_FORMAT = {
25
+ png: "image/png",
26
+ jpeg: "image/jpeg",
27
+ jpg: "image/jpeg",
28
+ webp: "image/webp",
29
+ gif: "image/gif"
30
+ };
31
+ function nextBlockIndex(activeBlocks) {
32
+ let next = 0;
33
+ for (const index of activeBlocks.keys()) if (index >= next) next = index + 1;
34
+ return next;
35
+ }
36
+ function getAdditionalKwargs(message) {
37
+ const additional = message.additional_kwargs;
38
+ return additional != null && typeof additional === "object" ? additional : {};
39
+ }
40
+ function extractImageBlocksFromToolOutputs(message) {
41
+ const toolOutputs = getAdditionalKwargs(message).tool_outputs;
42
+ if (!Array.isArray(toolOutputs)) return [];
43
+ const blocks = [];
44
+ for (const entry of toolOutputs) {
45
+ if (entry == null || typeof entry !== "object") continue;
46
+ const record = entry;
47
+ if (record.type !== "image_generation_call") continue;
48
+ const data = typeof record.result === "string" ? record.result : void 0;
49
+ const url = typeof record.url === "string" ? record.url : void 0;
50
+ if (data == null && url == null) continue;
51
+ const outputFormat = typeof record.output_format === "string" ? record.output_format.toLowerCase() : void 0;
52
+ const mimeType = (outputFormat != null ? MIME_TYPE_BY_IMAGE_FORMAT[outputFormat] : void 0) ?? "image/png";
53
+ blocks.push({
54
+ type: "image",
55
+ ...typeof record.id === "string" ? { id: record.id } : {},
56
+ ...url != null ? { url } : {},
57
+ ...data != null ? { data } : {},
58
+ mimeType
59
+ });
60
+ }
61
+ return blocks;
62
+ }
63
+ function getAudioPayload(message) {
64
+ const audio = getAdditionalKwargs(message).audio;
65
+ if (audio == null || typeof audio !== "object") return void 0;
66
+ const record = audio;
67
+ const data = typeof record.data === "string" ? record.data : void 0;
68
+ const url = typeof record.url === "string" ? record.url : void 0;
69
+ const transcript = typeof record.transcript === "string" ? record.transcript : void 0;
70
+ if (data == null && url == null && transcript == null) return void 0;
71
+ const explicitMimeType = typeof record.mime_type === "string" ? record.mime_type : typeof record.mimeType === "string" ? record.mimeType : void 0;
72
+ const format = typeof record.format === "string" ? record.format.toLowerCase() : void 0;
73
+ const mimeType = explicitMimeType ?? (format != null ? MIME_TYPE_BY_AUDIO_FORMAT[format] : void 0) ?? (data != null ? "audio/wav" : "audio/pcm");
74
+ return {
75
+ ...typeof record.id === "string" ? { id: record.id } : {},
76
+ ...data != null ? { data } : {},
77
+ ...url != null ? { url } : {},
78
+ ...transcript != null ? { transcript } : {},
79
+ mimeType
80
+ };
81
+ }
82
+ /**
83
+ * Convert an async iterable of legacy `ChatGenerationChunk`s into
84
+ * `ChatModelStreamEvent`s with typed deltas.
85
+ */
86
+ async function* convertChunksToEvents(chunks, options) {
87
+ const activeBlocks = /* @__PURE__ */ new Map();
88
+ let messageStarted = false;
89
+ let lastUsage;
90
+ let audioStream;
91
+ const emittedImageKeys = /* @__PURE__ */ new Set();
92
+ for await (const chunk of chunks) {
93
+ options?.signal?.throwIfAborted();
94
+ const msg = chunk.message;
95
+ let usageHandledInStart = false;
96
+ if (!messageStarted) {
97
+ messageStarted = true;
98
+ const startEvent = {
99
+ event: "message-start",
100
+ id: msg.id ?? void 0
101
+ };
102
+ if (require_ai.isAIMessageChunk(msg) && msg.usage_metadata) {
103
+ startEvent.usage = msg.usage_metadata;
104
+ lastUsage = { ...msg.usage_metadata };
105
+ usageHandledInStart = true;
106
+ }
107
+ yield startEvent;
108
+ }
109
+ const content = msg.content;
110
+ if (typeof content === "string") {
111
+ if (content !== "") {
112
+ const blockIndex = 0;
113
+ if (!activeBlocks.has(blockIndex)) {
114
+ const initial = {
115
+ type: "text",
116
+ text: ""
117
+ };
118
+ activeBlocks.set(blockIndex, {
119
+ type: "text",
120
+ accumulated: initial
121
+ });
122
+ yield {
123
+ event: "content-block-start",
124
+ index: blockIndex,
125
+ content: initial
126
+ };
127
+ }
128
+ const block = activeBlocks.get(blockIndex);
129
+ block.accumulated = {
130
+ ...block.accumulated,
131
+ text: (block.accumulated.text ?? "") + content
132
+ };
133
+ yield {
134
+ event: "content-block-delta",
135
+ index: blockIndex,
136
+ delta: {
137
+ type: "text-delta",
138
+ text: content
139
+ }
140
+ };
141
+ }
142
+ } else if (Array.isArray(content)) for (const part of content) {
143
+ const blockIndex = typeof part.index === "number" ? part.index : activeBlocks.size;
144
+ if (!activeBlocks.has(blockIndex)) {
145
+ activeBlocks.set(blockIndex, {
146
+ type: part.type,
147
+ accumulated: { ...part }
148
+ });
149
+ yield {
150
+ event: "content-block-start",
151
+ index: blockIndex,
152
+ content: { ...part }
153
+ };
154
+ } else {
155
+ const block = activeBlocks.get(blockIndex);
156
+ const delta = contentBlockToDelta(part);
157
+ block.accumulated = applyDeltaToBlock(block.accumulated, delta);
158
+ yield {
159
+ event: "content-block-delta",
160
+ index: blockIndex,
161
+ delta
162
+ };
163
+ }
164
+ }
165
+ if (require_ai.isAIMessageChunk(msg) && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) for (const toolChunk of msg.tool_call_chunks) {
166
+ const blockIndex = typeof toolChunk.index === "number" ? toolChunk.index : activeBlocks.size;
167
+ if (!activeBlocks.has(blockIndex)) {
168
+ const initial = {
169
+ type: "tool_call_chunk",
170
+ id: toolChunk.id,
171
+ name: toolChunk.name,
172
+ args: "",
173
+ index: blockIndex
174
+ };
175
+ activeBlocks.set(blockIndex, {
176
+ type: "tool_call_chunk",
177
+ accumulated: initial
178
+ });
179
+ yield {
180
+ event: "content-block-start",
181
+ index: blockIndex,
182
+ content: initial
183
+ };
184
+ }
185
+ const acc = activeBlocks.get(blockIndex).accumulated;
186
+ if (toolChunk.id != null) acc.id = toolChunk.id;
187
+ if (toolChunk.name != null) acc.name = toolChunk.name;
188
+ acc.args = (acc.args ?? "") + (toolChunk.args ?? "");
189
+ yield {
190
+ event: "content-block-delta",
191
+ index: blockIndex,
192
+ delta: {
193
+ type: "block-delta",
194
+ fields: {
195
+ type: "tool_call_chunk",
196
+ ..."id" in acc && acc.id != null ? { id: acc.id } : {},
197
+ ..."name" in acc && acc.name != null ? { name: acc.name } : {},
198
+ args: acc.args
199
+ }
200
+ }
201
+ };
202
+ }
203
+ const audioPayload = getAudioPayload(msg);
204
+ if (audioPayload != null) {
205
+ if (audioStream == null) {
206
+ const index = nextBlockIndex(activeBlocks);
207
+ audioStream = {
208
+ index,
209
+ id: audioPayload.id,
210
+ mimeType: audioPayload.mimeType,
211
+ transcript: ""
212
+ };
213
+ const initial = {
214
+ type: "audio",
215
+ ...audioPayload.id != null ? { id: audioPayload.id } : {},
216
+ ...audioPayload.url != null ? { url: audioPayload.url } : {},
217
+ data: "",
218
+ mimeType: audioPayload.mimeType
219
+ };
220
+ activeBlocks.set(index, {
221
+ type: "audio",
222
+ accumulated: initial
223
+ });
224
+ yield {
225
+ event: "content-block-start",
226
+ index,
227
+ content: initial
228
+ };
229
+ }
230
+ const activeAudio = activeBlocks.get(audioStream.index);
231
+ if (activeAudio != null) {
232
+ const accumulated = activeAudio.accumulated;
233
+ if (audioPayload.id != null && audioStream.id == null) {
234
+ audioStream.id = audioPayload.id;
235
+ accumulated.id = audioPayload.id;
236
+ }
237
+ if (audioPayload.transcript != null) {
238
+ audioStream.transcript += audioPayload.transcript;
239
+ accumulated.transcript = audioStream.transcript;
240
+ yield {
241
+ event: "content-block-delta",
242
+ index: audioStream.index,
243
+ delta: {
244
+ type: "block-delta",
245
+ fields: {
246
+ type: "audio",
247
+ transcript: audioStream.transcript
248
+ }
249
+ }
250
+ };
251
+ }
252
+ if (audioPayload.data != null && audioPayload.data.length > 0) {
253
+ accumulated.data = (accumulated.data ?? "") + audioPayload.data;
254
+ yield {
255
+ event: "content-block-delta",
256
+ index: audioStream.index,
257
+ delta: {
258
+ type: "data-delta",
259
+ data: audioPayload.data,
260
+ encoding: "base64"
261
+ }
262
+ };
263
+ }
264
+ }
265
+ }
266
+ for (const imageBlock of extractImageBlocksFromToolOutputs(msg)) {
267
+ const imageRecord = imageBlock;
268
+ const imageKey = imageRecord.id ?? imageRecord.url ?? (imageRecord.data != null ? `${imageRecord.data.length}:${imageRecord.data.slice(0, 32)}` : void 0);
269
+ if (imageKey != null && emittedImageKeys.has(imageKey)) continue;
270
+ if (imageKey != null) emittedImageKeys.add(imageKey);
271
+ const index = nextBlockIndex(activeBlocks);
272
+ activeBlocks.set(index, {
273
+ type: "image",
274
+ accumulated: imageBlock
275
+ });
276
+ yield {
277
+ event: "content-block-start",
278
+ index,
279
+ content: imageBlock
280
+ };
281
+ }
282
+ if (!usageHandledInStart && require_ai.isAIMessageChunk(msg) && msg.usage_metadata) {
283
+ const chunkUsage = msg.usage_metadata;
284
+ if (!lastUsage) lastUsage = { ...chunkUsage };
285
+ else lastUsage = {
286
+ input_tokens: lastUsage.input_tokens + chunkUsage.input_tokens,
287
+ output_tokens: lastUsage.output_tokens + chunkUsage.output_tokens,
288
+ total_tokens: lastUsage.total_tokens + chunkUsage.total_tokens
289
+ };
290
+ yield {
291
+ event: "usage",
292
+ usage: { ...lastUsage }
293
+ };
294
+ }
295
+ }
296
+ for (const [index, block] of activeBlocks) yield {
297
+ event: "content-block-finish",
298
+ index,
299
+ content: finalizeContentBlock(block.accumulated)
300
+ };
301
+ yield {
302
+ event: "message-finish",
303
+ reason: "stop",
304
+ ...lastUsage ? { usage: lastUsage } : {}
305
+ };
306
+ }
307
+ /**
308
+ * Apply a typed delta to an accumulated content block.
309
+ * @internal
310
+ */
311
+ function applyDeltaToBlock(block, delta) {
312
+ switch (delta.type) {
313
+ case "text-delta": return {
314
+ ...block,
315
+ text: (block.text ?? "") + delta.text
316
+ };
317
+ case "reasoning-delta":
318
+ if (block.type === "thinking") return {
319
+ ...block,
320
+ thinking: (block.thinking ?? "") + delta.reasoning
321
+ };
322
+ return {
323
+ ...block,
324
+ reasoning: (block.reasoning ?? "") + delta.reasoning
325
+ };
326
+ case "data-delta": return {
327
+ ...block,
328
+ data: (block.data ?? "") + delta.data
329
+ };
330
+ case "block-delta": return {
331
+ ...block,
332
+ ...delta.fields
333
+ };
334
+ default: throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);
335
+ }
336
+ }
337
+ function contentBlockToDelta(block) {
338
+ if (block.type === "text") return {
339
+ type: "text-delta",
340
+ text: block.text
341
+ };
342
+ if (block.type === "reasoning") return {
343
+ type: "reasoning-delta",
344
+ reasoning: block.reasoning
345
+ };
346
+ if (block.type === "thinking" && typeof block.thinking === "string") return {
347
+ type: "reasoning-delta",
348
+ reasoning: block.thinking
349
+ };
350
+ if (typeof block.data === "string") return {
351
+ type: "data-delta",
352
+ data: block.data,
353
+ encoding: "base64"
354
+ };
355
+ if (typeof block.type === "string") return {
356
+ type: "block-delta",
357
+ fields: { ...block }
358
+ };
359
+ throw new Error(`Unsupported content block delta: ${JSON.stringify(block)}`);
360
+ }
361
+ /**
362
+ * Finalize a content block for the finish event.
363
+ * For tool calls, parse the accumulated JSON args string.
364
+ */
365
+ function finalizeContentBlock(block) {
366
+ if (block.type === "tool_call_chunk") {
367
+ const chunk = block;
368
+ let parsedArgs;
369
+ try {
370
+ parsedArgs = JSON.parse(chunk.args ?? "{}");
371
+ } catch {
372
+ return {
373
+ type: "invalid_tool_call",
374
+ id: chunk.id,
375
+ name: chunk.name,
376
+ args: chunk.args,
377
+ error: "Failed to parse tool call arguments as JSON"
378
+ };
379
+ }
380
+ return {
381
+ type: "tool_call",
382
+ id: chunk.id,
383
+ name: chunk.name,
384
+ args: parsedArgs
385
+ };
386
+ }
387
+ return block;
388
+ }
389
+ //#endregion
390
+ Object.defineProperty(exports, "compat_exports", {
391
+ enumerable: true,
392
+ get: function() {
393
+ return compat_exports;
394
+ }
395
+ });
396
+ exports.convertChunksToEvents = convertChunksToEvents;
397
+ exports.finalizeContentBlock = finalizeContentBlock;
398
+
399
+ //# sourceMappingURL=compat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.cjs","names":["isAIMessageChunk"],"sources":["../../src/language_models/compat.ts"],"sourcesContent":["/**\n * Compatibility bridge: converts legacy `_streamResponseChunks`\n * (`ChatGenerationChunk` / `AIMessageChunk`) output to the new\n * `ChatModelStreamEvent` protocol.\n *\n * @module\n */\n\nimport { isAIMessageChunk } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { ChatGenerationChunk } from \"../outputs.js\";\nimport type { ChatModelStreamEvent, ContentBlockDelta } from \"./event.js\";\n\nconst MIME_TYPE_BY_AUDIO_FORMAT: Record<string, string> = {\n wav: \"audio/wav\",\n mp3: \"audio/mpeg\",\n flac: \"audio/flac\",\n opus: \"audio/opus\",\n aac: \"audio/aac\",\n pcm16: \"audio/pcm\",\n};\n\nconst MIME_TYPE_BY_IMAGE_FORMAT: Record<string, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n webp: \"image/webp\",\n gif: \"image/gif\",\n};\n\ntype AudioStreamState = {\n index: number;\n id?: string;\n mimeType: string;\n transcript: string;\n};\n\nfunction nextBlockIndex(activeBlocks: Map<number, unknown>): number {\n let next = 0;\n for (const index of activeBlocks.keys()) {\n if (index >= next) next = index + 1;\n }\n return next;\n}\n\nfunction getAdditionalKwargs(message: unknown): Record<string, unknown> {\n const additional = (message as { additional_kwargs?: unknown })\n .additional_kwargs;\n return additional != null && typeof additional === \"object\"\n ? (additional as Record<string, unknown>)\n : {};\n}\n\nfunction extractImageBlocksFromToolOutputs(message: unknown): ContentBlock[] {\n const toolOutputs = getAdditionalKwargs(message).tool_outputs;\n if (!Array.isArray(toolOutputs)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const entry of toolOutputs) {\n if (entry == null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n if (record.type !== \"image_generation_call\") continue;\n\n const data = typeof record.result === \"string\" ? record.result : undefined;\n const url = typeof record.url === \"string\" ? record.url : undefined;\n if (data == null && url == null) continue;\n\n const outputFormat =\n typeof record.output_format === \"string\"\n ? record.output_format.toLowerCase()\n : undefined;\n const mimeType =\n (outputFormat != null\n ? MIME_TYPE_BY_IMAGE_FORMAT[outputFormat]\n : undefined) ?? \"image/png\";\n\n blocks.push({\n type: \"image\",\n ...(typeof record.id === \"string\" ? { id: record.id } : {}),\n ...(url != null ? { url } : {}),\n ...(data != null ? { data } : {}),\n mimeType,\n } as ContentBlock);\n }\n return blocks;\n}\n\nfunction getAudioPayload(message: unknown):\n | {\n id?: string;\n data?: string;\n url?: string;\n transcript?: string;\n mimeType: string;\n }\n | undefined {\n const audio = getAdditionalKwargs(message).audio;\n if (audio == null || typeof audio !== \"object\") return undefined;\n const record = audio as Record<string, unknown>;\n\n const data = typeof record.data === \"string\" ? record.data : undefined;\n const url = typeof record.url === \"string\" ? record.url : undefined;\n const transcript =\n typeof record.transcript === \"string\" ? record.transcript : undefined;\n if (data == null && url == null && transcript == null) return undefined;\n\n const explicitMimeType =\n typeof record.mime_type === \"string\"\n ? record.mime_type\n : typeof record.mimeType === \"string\"\n ? record.mimeType\n : undefined;\n const format =\n typeof record.format === \"string\" ? record.format.toLowerCase() : undefined;\n const mimeType =\n explicitMimeType ??\n (format != null ? MIME_TYPE_BY_AUDIO_FORMAT[format] : undefined) ??\n (data != null ? \"audio/wav\" : \"audio/pcm\");\n\n return {\n ...(typeof record.id === \"string\" ? { id: record.id } : {}),\n ...(data != null ? { data } : {}),\n ...(url != null ? { url } : {}),\n ...(transcript != null ? { transcript } : {}),\n mimeType,\n };\n}\n\n/**\n * Convert an async iterable of legacy `ChatGenerationChunk`s into\n * `ChatModelStreamEvent`s with typed deltas.\n */\nexport async function* convertChunksToEvents(\n chunks: AsyncIterable<ChatGenerationChunk>,\n options?: { signal?: AbortSignal }\n): AsyncGenerator<ChatModelStreamEvent> {\n const activeBlocks = new Map<\n number,\n { type: string; accumulated: ContentBlock }\n >();\n let messageStarted = false;\n let lastUsage:\n | { input_tokens: number; output_tokens: number; total_tokens: number }\n | undefined;\n let audioStream: AudioStreamState | undefined;\n const emittedImageKeys = new Set<string>();\n\n for await (const chunk of chunks) {\n options?.signal?.throwIfAborted();\n\n const msg = chunk.message;\n\n // Message start\n let usageHandledInStart = false;\n if (!messageStarted) {\n messageStarted = true;\n const startEvent: ChatModelStreamEvent = {\n event: \"message-start\" as const,\n id: msg.id ?? undefined,\n };\n if (isAIMessageChunk(msg) && msg.usage_metadata) {\n (startEvent as { usage?: unknown }).usage = msg.usage_metadata;\n lastUsage = { ...msg.usage_metadata };\n usageHandledInStart = true;\n }\n yield startEvent;\n }\n\n // Process content\n const content = msg.content;\n if (typeof content === \"string\") {\n if (content !== \"\") {\n const blockIndex = 0;\n if (!activeBlocks.has(blockIndex)) {\n const initial: ContentBlock.Text = { type: \"text\", text: \"\" };\n activeBlocks.set(blockIndex, {\n type: \"text\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: initial,\n };\n }\n const block = activeBlocks.get(blockIndex)!;\n block.accumulated = {\n ...block.accumulated,\n text: ((block.accumulated as { text?: string }).text ?? \"\") + content,\n };\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta: { type: \"text-delta\" as const, text: content },\n };\n }\n } else if (Array.isArray(content)) {\n for (const part of content) {\n const blockIndex =\n typeof part.index === \"number\" ? part.index : activeBlocks.size;\n\n if (!activeBlocks.has(blockIndex)) {\n activeBlocks.set(blockIndex, {\n type: part.type,\n accumulated: { ...part },\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: { ...part },\n };\n } else {\n const block = activeBlocks.get(blockIndex)!;\n const delta = contentBlockToDelta(part);\n block.accumulated = applyDeltaToBlock(block.accumulated, delta);\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta,\n };\n }\n }\n }\n\n // Tool call chunks\n if (\n isAIMessageChunk(msg) &&\n msg.tool_call_chunks &&\n msg.tool_call_chunks.length > 0\n ) {\n for (const toolChunk of msg.tool_call_chunks) {\n const blockIndex =\n typeof toolChunk.index === \"number\"\n ? toolChunk.index\n : activeBlocks.size;\n\n if (!activeBlocks.has(blockIndex)) {\n const initial: ContentBlock = {\n type: \"tool_call_chunk\" as const,\n id: toolChunk.id,\n name: toolChunk.name,\n args: \"\",\n index: blockIndex,\n };\n activeBlocks.set(blockIndex, {\n type: \"tool_call_chunk\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: initial,\n };\n }\n\n // Accumulate tool call args internally, emit incremental content chunks.\n const block = activeBlocks.get(blockIndex)!;\n const acc = block.accumulated as {\n args?: string;\n id?: string;\n name?: string;\n };\n if (toolChunk.id != null) acc.id = toolChunk.id;\n if (toolChunk.name != null) acc.name = toolChunk.name;\n acc.args = (acc.args ?? \"\") + (toolChunk.args ?? \"\");\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"tool_call_chunk\",\n ...(\"id\" in acc && acc.id != null ? { id: acc.id } : {}),\n ...(\"name\" in acc && acc.name != null ? { name: acc.name } : {}),\n args: acc.args,\n },\n },\n };\n }\n }\n\n const audioPayload = getAudioPayload(msg);\n if (audioPayload != null) {\n if (audioStream == null) {\n const index = nextBlockIndex(activeBlocks);\n audioStream = {\n index,\n id: audioPayload.id,\n mimeType: audioPayload.mimeType,\n transcript: \"\",\n };\n const initial = {\n type: \"audio\",\n ...(audioPayload.id != null ? { id: audioPayload.id } : {}),\n ...(audioPayload.url != null ? { url: audioPayload.url } : {}),\n data: \"\",\n mimeType: audioPayload.mimeType,\n } as ContentBlock;\n activeBlocks.set(index, {\n type: \"audio\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index,\n content: initial,\n };\n }\n\n const activeAudio = activeBlocks.get(audioStream.index);\n if (activeAudio != null) {\n const accumulated = activeAudio.accumulated as ContentBlock & {\n data?: string;\n transcript?: string;\n };\n if (audioPayload.id != null && audioStream.id == null) {\n audioStream.id = audioPayload.id;\n (accumulated as { id?: string }).id = audioPayload.id;\n }\n if (audioPayload.transcript != null) {\n audioStream.transcript += audioPayload.transcript;\n accumulated.transcript = audioStream.transcript;\n yield {\n event: \"content-block-delta\" as const,\n index: audioStream.index,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"audio\",\n transcript: audioStream.transcript,\n },\n },\n };\n }\n if (audioPayload.data != null && audioPayload.data.length > 0) {\n accumulated.data = (accumulated.data ?? \"\") + audioPayload.data;\n yield {\n event: \"content-block-delta\" as const,\n index: audioStream.index,\n delta: {\n type: \"data-delta\" as const,\n data: audioPayload.data,\n encoding: \"base64\" as const,\n },\n };\n }\n }\n }\n\n for (const imageBlock of extractImageBlocksFromToolOutputs(msg)) {\n const imageRecord = imageBlock as ContentBlock & {\n id?: string;\n url?: string;\n data?: string;\n };\n const imageKey =\n imageRecord.id ??\n imageRecord.url ??\n (imageRecord.data != null\n ? `${imageRecord.data.length}:${imageRecord.data.slice(0, 32)}`\n : undefined);\n if (imageKey != null && emittedImageKeys.has(imageKey)) continue;\n if (imageKey != null) emittedImageKeys.add(imageKey);\n\n const index = nextBlockIndex(activeBlocks);\n activeBlocks.set(index, {\n type: \"image\",\n accumulated: imageBlock,\n });\n yield {\n event: \"content-block-start\" as const,\n index,\n content: imageBlock,\n };\n }\n\n // Usage\n if (!usageHandledInStart && isAIMessageChunk(msg) && msg.usage_metadata) {\n const chunkUsage = msg.usage_metadata;\n if (!lastUsage) {\n lastUsage = { ...chunkUsage };\n } else {\n lastUsage = {\n input_tokens: lastUsage.input_tokens + chunkUsage.input_tokens,\n output_tokens: lastUsage.output_tokens + chunkUsage.output_tokens,\n total_tokens: lastUsage.total_tokens + chunkUsage.total_tokens,\n };\n }\n yield { event: \"usage\" as const, usage: { ...lastUsage } };\n }\n }\n\n // Finish all blocks\n for (const [index, block] of activeBlocks) {\n const finalized = finalizeContentBlock(block.accumulated);\n yield {\n event: \"content-block-finish\" as const,\n index,\n content: finalized,\n };\n }\n\n yield {\n event: \"message-finish\" as const,\n reason: \"stop\" as const,\n ...(lastUsage ? { usage: lastUsage } : {}),\n };\n}\n\n/**\n * Apply a typed delta to an accumulated content block.\n * @internal\n */\nfunction applyDeltaToBlock(\n block: ContentBlock,\n delta: ContentBlockDelta\n): ContentBlock {\n switch (delta.type) {\n case \"text-delta\":\n return {\n ...block,\n text: ((block as { text?: string }).text ?? \"\") + delta.text,\n } as ContentBlock;\n case \"reasoning-delta\":\n if ((block as { type?: string }).type === \"thinking\") {\n return {\n ...block,\n thinking:\n ((block as { thinking?: string }).thinking ?? \"\") + delta.reasoning,\n } as unknown as ContentBlock;\n }\n return {\n ...block,\n reasoning:\n ((block as { reasoning?: string }).reasoning ?? \"\") + delta.reasoning,\n } as ContentBlock;\n case \"data-delta\":\n return {\n ...block,\n data: ((block as { data?: string }).data ?? \"\") + delta.data,\n } as ContentBlock;\n case \"block-delta\":\n return { ...block, ...delta.fields } as ContentBlock;\n default:\n throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);\n }\n}\n\nfunction contentBlockToDelta(block: ContentBlock): ContentBlockDelta {\n if (block.type === \"text\") {\n return { type: \"text-delta\", text: (block as ContentBlock.Text).text };\n }\n if (block.type === \"reasoning\") {\n return {\n type: \"reasoning-delta\",\n reasoning: (block as ContentBlock.Reasoning).reasoning,\n };\n }\n if (\n (block as { type?: string }).type === \"thinking\" &&\n typeof (block as { thinking?: unknown }).thinking === \"string\"\n ) {\n return {\n type: \"reasoning-delta\",\n reasoning: (block as unknown as { thinking: string }).thinking,\n };\n }\n if (typeof (block as { data?: unknown }).data === \"string\") {\n return {\n type: \"data-delta\",\n data: (block as unknown as { data: string }).data,\n encoding: \"base64\",\n };\n }\n if (typeof (block as { type?: unknown }).type === \"string\") {\n return {\n type: \"block-delta\",\n fields: {\n ...(block as unknown as { type: string } & Record<string, unknown>),\n },\n };\n }\n\n throw new Error(`Unsupported content block delta: ${JSON.stringify(block)}`);\n}\n\n/**\n * Finalize a content block for the finish event.\n * For tool calls, parse the accumulated JSON args string.\n */\nexport function finalizeContentBlock(block: ContentBlock): ContentBlock {\n if (block.type === \"tool_call_chunk\") {\n const chunk = block as ContentBlock.Tools.ToolCallChunk;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(chunk.args ?? \"{}\");\n } catch {\n return {\n type: \"invalid_tool_call\" as const,\n id: chunk.id,\n name: chunk.name,\n args: chunk.args,\n error: \"Failed to parse tool call arguments as JSON\",\n } as ContentBlock.Tools.InvalidToolCall;\n }\n return {\n type: \"tool_call\" as const,\n id: chunk.id,\n name: chunk.name!,\n args: parsedArgs,\n } as ContentBlock.Tools.ToolCall;\n }\n\n return block;\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ContentBlock } from "../messages/content/index.cjs";
2
+ import { ChatGenerationChunk } from "../outputs.cjs";
3
+ import { ChatModelStreamEvent } from "./event.cjs";
4
+
5
+ //#region src/language_models/compat.d.ts
6
+ /**
7
+ * Convert an async iterable of legacy `ChatGenerationChunk`s into
8
+ * `ChatModelStreamEvent`s with typed deltas.
9
+ */
10
+ declare function convertChunksToEvents(chunks: AsyncIterable<ChatGenerationChunk>, options?: {
11
+ signal?: AbortSignal;
12
+ }): AsyncGenerator<ChatModelStreamEvent>;
13
+ /**
14
+ * Finalize a content block for the finish event.
15
+ * For tool calls, parse the accumulated JSON args string.
16
+ */
17
+ declare function finalizeContentBlock(block: ContentBlock): ContentBlock;
18
+ //#endregion
19
+ export { convertChunksToEvents, finalizeContentBlock };
20
+ //# sourceMappingURL=compat.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.d.cts","names":[],"sources":["../../src/language_models/compat.ts"],"mappings":";;;;;;;;;iBAoIuB,qBAAA,CACrB,MAAA,EAAQ,aAAA,CAAc,mBAAA,GACtB,OAAA;EAAY,MAAA,GAAS,WAAA;AAAA,IACpB,cAAA,CAAe,oBAAA;;;;;iBAmWF,oBAAA,CAAqB,KAAA,EAAO,YAAA,GAAe,YAAA"}
@@ -0,0 +1,20 @@
1
+ import { ContentBlock } from "../messages/content/index.js";
2
+ import { ChatGenerationChunk } from "../outputs.js";
3
+ import { ChatModelStreamEvent } from "./event.js";
4
+
5
+ //#region src/language_models/compat.d.ts
6
+ /**
7
+ * Convert an async iterable of legacy `ChatGenerationChunk`s into
8
+ * `ChatModelStreamEvent`s with typed deltas.
9
+ */
10
+ declare function convertChunksToEvents(chunks: AsyncIterable<ChatGenerationChunk>, options?: {
11
+ signal?: AbortSignal;
12
+ }): AsyncGenerator<ChatModelStreamEvent>;
13
+ /**
14
+ * Finalize a content block for the finish event.
15
+ * For tool calls, parse the accumulated JSON args string.
16
+ */
17
+ declare function finalizeContentBlock(block: ContentBlock): ContentBlock;
18
+ //#endregion
19
+ export { convertChunksToEvents, finalizeContentBlock };
20
+ //# sourceMappingURL=compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.d.ts","names":[],"sources":["../../src/language_models/compat.ts"],"mappings":";;;;;;;;;iBAoIuB,qBAAA,CACrB,MAAA,EAAQ,aAAA,CAAc,mBAAA,GACtB,OAAA;EAAY,MAAA,GAAS,WAAA;AAAA,IACpB,cAAA,CAAe,oBAAA;;;;;iBAmWF,oBAAA,CAAqB,KAAA,EAAO,YAAA,GAAe,YAAA"}