openai 7.27.0 → 7.30.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 (335) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/client.d.mts +3 -0
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +3 -0
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -0
  9. package/client.mjs.map +1 -1
  10. package/helpers/standard-schema.d.mts +8 -3
  11. package/helpers/standard-schema.d.mts.map +1 -1
  12. package/helpers/standard-schema.d.ts +8 -3
  13. package/helpers/standard-schema.d.ts.map +1 -1
  14. package/helpers/standard-schema.js +1 -0
  15. package/helpers/standard-schema.js.map +1 -1
  16. package/helpers/standard-schema.mjs +1 -0
  17. package/helpers/standard-schema.mjs.map +1 -1
  18. package/helpers/zod.d.mts +2 -0
  19. package/helpers/zod.d.mts.map +1 -1
  20. package/helpers/zod.d.ts +2 -0
  21. package/helpers/zod.d.ts.map +1 -1
  22. package/helpers/zod.js +1 -0
  23. package/helpers/zod.js.map +1 -1
  24. package/helpers/zod.mjs +1 -0
  25. package/helpers/zod.mjs.map +1 -1
  26. package/lib/ChatCompletionStream.d.mts +2 -1
  27. package/lib/ChatCompletionStream.d.mts.map +1 -1
  28. package/lib/ChatCompletionStream.d.ts +2 -1
  29. package/lib/ChatCompletionStream.d.ts.map +1 -1
  30. package/lib/ChatCompletionStream.js +9 -2
  31. package/lib/ChatCompletionStream.js.map +1 -1
  32. package/lib/ChatCompletionStream.mjs +9 -2
  33. package/lib/ChatCompletionStream.mjs.map +1 -1
  34. package/lib/ResponsesParser.d.mts.map +1 -1
  35. package/lib/ResponsesParser.d.ts.map +1 -1
  36. package/lib/ResponsesParser.js +5 -0
  37. package/lib/ResponsesParser.js.map +1 -1
  38. package/lib/ResponsesParser.mjs +5 -0
  39. package/lib/ResponsesParser.mjs.map +1 -1
  40. package/lib/agents/agent-session-stream.d.mts +7 -0
  41. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  42. package/lib/agents/agent-session-stream.d.ts +7 -0
  43. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  44. package/lib/agents/agent-session-stream.js +8 -110
  45. package/lib/agents/agent-session-stream.js.map +1 -1
  46. package/lib/agents/agent-session-stream.mjs +9 -111
  47. package/lib/agents/agent-session-stream.mjs.map +1 -1
  48. package/lib/beta/agents/agent-session-create-stream.d.mts +41 -1
  49. package/lib/beta/agents/agent-session-create-stream.d.mts.map +1 -1
  50. package/lib/beta/agents/agent-session-create-stream.d.ts +41 -1
  51. package/lib/beta/agents/agent-session-create-stream.d.ts.map +1 -1
  52. package/lib/beta/agents/agent-session-create-stream.js +70 -2
  53. package/lib/beta/agents/agent-session-create-stream.js.map +1 -1
  54. package/lib/beta/agents/agent-session-create-stream.mjs +69 -2
  55. package/lib/beta/agents/agent-session-create-stream.mjs.map +1 -1
  56. package/lib/beta/agents/function-tool.d.mts.map +1 -1
  57. package/lib/beta/agents/function-tool.d.ts.map +1 -1
  58. package/lib/beta/agents/function-tool.js +22 -15
  59. package/lib/beta/agents/function-tool.js.map +1 -1
  60. package/lib/beta/agents/function-tool.mjs +22 -15
  61. package/lib/beta/agents/function-tool.mjs.map +1 -1
  62. package/lib/beta/agents/parse-result.d.mts +4 -2
  63. package/lib/beta/agents/parse-result.d.mts.map +1 -1
  64. package/lib/beta/agents/parse-result.d.ts +4 -2
  65. package/lib/beta/agents/parse-result.d.ts.map +1 -1
  66. package/lib/beta/agents/tool-dispatcher.d.mts +13 -0
  67. package/lib/beta/agents/tool-dispatcher.d.mts.map +1 -0
  68. package/lib/beta/agents/tool-dispatcher.d.ts +13 -0
  69. package/lib/beta/agents/tool-dispatcher.d.ts.map +1 -0
  70. package/lib/beta/agents/tool-dispatcher.js +185 -0
  71. package/lib/beta/agents/tool-dispatcher.js.map +1 -0
  72. package/lib/beta/agents/tool-dispatcher.mjs +181 -0
  73. package/lib/beta/agents/tool-dispatcher.mjs.map +1 -0
  74. package/lib/beta/agents/tool-error.d.mts +13 -0
  75. package/lib/beta/agents/tool-error.d.mts.map +1 -0
  76. package/lib/beta/agents/tool-error.d.ts +13 -0
  77. package/lib/beta/agents/tool-error.d.ts.map +1 -0
  78. package/lib/beta/agents/tool-error.js +3 -0
  79. package/lib/beta/agents/tool-error.js.map +1 -0
  80. package/lib/beta/agents/tool-error.mjs +2 -0
  81. package/lib/beta/agents/tool-error.mjs.map +1 -0
  82. package/lib/beta/agents/tool-stages.d.mts +12 -0
  83. package/lib/beta/agents/tool-stages.d.mts.map +1 -0
  84. package/lib/beta/agents/tool-stages.d.ts +12 -0
  85. package/lib/beta/agents/tool-stages.d.ts.map +1 -0
  86. package/lib/beta/agents/tool-stages.js +6 -0
  87. package/lib/beta/agents/tool-stages.js.map +1 -0
  88. package/lib/beta/agents/tool-stages.mjs +3 -0
  89. package/lib/beta/agents/tool-stages.mjs.map +1 -0
  90. package/lib/chat-completions/streaming.d.mts +11 -0
  91. package/lib/chat-completions/streaming.d.mts.map +1 -0
  92. package/lib/chat-completions/streaming.d.ts +11 -0
  93. package/lib/chat-completions/streaming.d.ts.map +1 -0
  94. package/lib/chat-completions/streaming.js +27 -0
  95. package/lib/chat-completions/streaming.js.map +1 -0
  96. package/lib/chat-completions/streaming.mjs +23 -0
  97. package/lib/chat-completions/streaming.mjs.map +1 -0
  98. package/package.json +1 -1
  99. package/resources/admin/organization/usage.d.mts +381 -20
  100. package/resources/admin/organization/usage.d.mts.map +1 -1
  101. package/resources/admin/organization/usage.d.ts +381 -20
  102. package/resources/admin/organization/usage.d.ts.map +1 -1
  103. package/resources/audio/audio.d.mts +4 -0
  104. package/resources/audio/audio.d.mts.map +1 -1
  105. package/resources/audio/audio.d.ts +4 -0
  106. package/resources/audio/audio.d.ts.map +1 -1
  107. package/resources/audio/audio.js +4 -0
  108. package/resources/audio/audio.js.map +1 -1
  109. package/resources/audio/audio.mjs +4 -0
  110. package/resources/audio/audio.mjs.map +1 -1
  111. package/resources/audio/index.d.mts +1 -0
  112. package/resources/audio/index.d.mts.map +1 -1
  113. package/resources/audio/index.d.ts +1 -0
  114. package/resources/audio/index.d.ts.map +1 -1
  115. package/resources/audio/index.js +3 -1
  116. package/resources/audio/index.js.map +1 -1
  117. package/resources/audio/index.mjs +1 -0
  118. package/resources/audio/index.mjs.map +1 -1
  119. package/resources/audio/speech.d.mts +2 -0
  120. package/resources/audio/speech.d.mts.map +1 -1
  121. package/resources/audio/speech.d.ts +2 -0
  122. package/resources/audio/speech.d.ts.map +1 -1
  123. package/resources/audio/voices.d.mts +119 -0
  124. package/resources/audio/voices.d.mts.map +1 -0
  125. package/resources/audio/voices.d.ts +119 -0
  126. package/resources/audio/voices.d.ts.map +1 -0
  127. package/resources/audio/voices.js +41 -0
  128. package/resources/audio/voices.js.map +1 -0
  129. package/resources/audio/voices.mjs +37 -0
  130. package/resources/audio/voices.mjs.map +1 -0
  131. package/resources/beta/agents/agents.d.mts +14 -10
  132. package/resources/beta/agents/agents.d.mts.map +1 -1
  133. package/resources/beta/agents/agents.d.ts +14 -10
  134. package/resources/beta/agents/agents.d.ts.map +1 -1
  135. package/resources/beta/agents/agents.js.map +1 -1
  136. package/resources/beta/agents/agents.mjs.map +1 -1
  137. package/resources/beta/agents/environments/templates.d.mts +6 -8
  138. package/resources/beta/agents/environments/templates.d.mts.map +1 -1
  139. package/resources/beta/agents/environments/templates.d.ts +6 -8
  140. package/resources/beta/agents/environments/templates.d.ts.map +1 -1
  141. package/resources/beta/agents/sessions/index.d.mts +1 -1
  142. package/resources/beta/agents/sessions/index.d.mts.map +1 -1
  143. package/resources/beta/agents/sessions/index.d.ts +1 -1
  144. package/resources/beta/agents/sessions/index.d.ts.map +1 -1
  145. package/resources/beta/agents/sessions/index.js +2 -2
  146. package/resources/beta/agents/sessions/index.js.map +1 -1
  147. package/resources/beta/agents/sessions/index.mjs +1 -1
  148. package/resources/beta/agents/sessions/index.mjs.map +1 -1
  149. package/resources/beta/agents/sessions/sessions.d.mts +8 -7
  150. package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
  151. package/resources/beta/agents/sessions/sessions.d.ts +8 -7
  152. package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
  153. package/resources/beta/agents/sessions/sessions.js +7 -4
  154. package/resources/beta/agents/sessions/sessions.js.map +1 -1
  155. package/resources/beta/agents/sessions/sessions.mjs +8 -5
  156. package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
  157. package/resources/beta/agents/sessions/subagents/turns/turns.d.mts +2 -2
  158. package/resources/beta/agents/sessions/subagents/turns/turns.d.mts.map +1 -1
  159. package/resources/beta/agents/sessions/subagents/turns/turns.d.ts +2 -2
  160. package/resources/beta/agents/sessions/subagents/turns/turns.d.ts.map +1 -1
  161. package/resources/beta/agents/sessions/turns/index.d.mts +3 -0
  162. package/resources/beta/agents/sessions/turns/index.d.mts.map +1 -0
  163. package/resources/beta/agents/sessions/turns/index.d.ts +3 -0
  164. package/resources/beta/agents/sessions/turns/index.d.ts.map +1 -0
  165. package/resources/beta/agents/sessions/turns/index.js +9 -0
  166. package/resources/beta/agents/sessions/turns/index.js.map +1 -0
  167. package/resources/beta/agents/sessions/turns/index.mjs +4 -0
  168. package/resources/beta/agents/sessions/turns/index.mjs.map +1 -0
  169. package/resources/beta/agents/sessions/turns/items.d.mts +43 -0
  170. package/resources/beta/agents/sessions/turns/items.d.mts.map +1 -0
  171. package/resources/beta/agents/sessions/turns/items.d.ts +43 -0
  172. package/resources/beta/agents/sessions/turns/items.d.ts.map +1 -0
  173. package/resources/beta/agents/sessions/turns/items.js +40 -0
  174. package/resources/beta/agents/sessions/turns/items.js.map +1 -0
  175. package/resources/beta/agents/sessions/turns/items.mjs +36 -0
  176. package/resources/beta/agents/sessions/turns/items.mjs.map +1 -0
  177. package/resources/beta/agents/sessions/turns/turns.d.mts +128 -0
  178. package/resources/beta/agents/sessions/turns/turns.d.mts.map +1 -0
  179. package/resources/beta/agents/sessions/turns/turns.d.ts +128 -0
  180. package/resources/beta/agents/sessions/turns/turns.d.ts.map +1 -0
  181. package/resources/beta/agents/sessions/turns/turns.js +111 -0
  182. package/resources/beta/agents/sessions/turns/turns.js.map +1 -0
  183. package/resources/beta/agents/sessions/turns/turns.mjs +106 -0
  184. package/resources/beta/agents/sessions/turns/turns.mjs.map +1 -0
  185. package/resources/beta/agents/sessions/turns.d.mts +1 -123
  186. package/resources/beta/agents/sessions/turns.d.mts.map +1 -1
  187. package/resources/beta/agents/sessions/turns.d.ts +1 -123
  188. package/resources/beta/agents/sessions/turns.d.ts.map +1 -1
  189. package/resources/beta/agents/sessions/turns.js +2 -99
  190. package/resources/beta/agents/sessions/turns.js.map +1 -1
  191. package/resources/beta/agents/sessions/turns.mjs +1 -97
  192. package/resources/beta/agents/sessions/turns.mjs.map +1 -1
  193. package/resources/beta/beta.d.mts +2 -2
  194. package/resources/beta/beta.d.mts.map +1 -1
  195. package/resources/beta/beta.d.ts +2 -2
  196. package/resources/beta/beta.d.ts.map +1 -1
  197. package/resources/beta/beta.js.map +1 -1
  198. package/resources/beta/beta.mjs.map +1 -1
  199. package/resources/beta/index.d.mts +1 -1
  200. package/resources/beta/index.d.mts.map +1 -1
  201. package/resources/beta/index.d.ts +1 -1
  202. package/resources/beta/index.d.ts.map +1 -1
  203. package/resources/beta/index.js.map +1 -1
  204. package/resources/beta/index.mjs.map +1 -1
  205. package/resources/beta/responses/index.d.mts +1 -1
  206. package/resources/beta/responses/index.d.mts.map +1 -1
  207. package/resources/beta/responses/index.d.ts +1 -1
  208. package/resources/beta/responses/index.d.ts.map +1 -1
  209. package/resources/beta/responses/index.js.map +1 -1
  210. package/resources/beta/responses/index.mjs.map +1 -1
  211. package/resources/beta/responses/responses.d.mts +379 -9
  212. package/resources/beta/responses/responses.d.mts.map +1 -1
  213. package/resources/beta/responses/responses.d.ts +379 -9
  214. package/resources/beta/responses/responses.d.ts.map +1 -1
  215. package/resources/beta/responses/responses.js.map +1 -1
  216. package/resources/beta/responses/responses.mjs.map +1 -1
  217. package/resources/chat/completions/completions.d.mts +44 -9
  218. package/resources/chat/completions/completions.d.mts.map +1 -1
  219. package/resources/chat/completions/completions.d.ts +44 -9
  220. package/resources/chat/completions/completions.d.ts.map +1 -1
  221. package/resources/chat/completions/completions.js +5 -2
  222. package/resources/chat/completions/completions.js.map +1 -1
  223. package/resources/chat/completions/completions.mjs +5 -2
  224. package/resources/chat/completions/completions.mjs.map +1 -1
  225. package/resources/completions.d.mts +1 -1
  226. package/resources/completions.d.mts.map +1 -1
  227. package/resources/completions.d.ts +1 -1
  228. package/resources/completions.d.ts.map +1 -1
  229. package/resources/decisions.d.mts +196 -0
  230. package/resources/decisions.d.mts.map +1 -0
  231. package/resources/decisions.d.ts +196 -0
  232. package/resources/decisions.d.ts.map +1 -0
  233. package/resources/decisions.js +32 -0
  234. package/resources/decisions.js.map +1 -0
  235. package/resources/decisions.mjs +28 -0
  236. package/resources/decisions.mjs.map +1 -0
  237. package/resources/fine-tuning/jobs/jobs.d.mts +7 -2
  238. package/resources/fine-tuning/jobs/jobs.d.mts.map +1 -1
  239. package/resources/fine-tuning/jobs/jobs.d.ts +7 -2
  240. package/resources/fine-tuning/jobs/jobs.d.ts.map +1 -1
  241. package/resources/fine-tuning/jobs/jobs.js.map +1 -1
  242. package/resources/fine-tuning/jobs/jobs.mjs.map +1 -1
  243. package/resources/graders/grader-models.d.mts +1 -1
  244. package/resources/graders/grader-models.d.ts +1 -1
  245. package/resources/images.d.mts +61 -75
  246. package/resources/images.d.mts.map +1 -1
  247. package/resources/images.d.ts +61 -75
  248. package/resources/images.d.ts.map +1 -1
  249. package/resources/images.js +4 -7
  250. package/resources/images.js.map +1 -1
  251. package/resources/images.mjs +4 -7
  252. package/resources/images.mjs.map +1 -1
  253. package/resources/index.d.mts +1 -0
  254. package/resources/index.d.mts.map +1 -1
  255. package/resources/index.d.ts +1 -0
  256. package/resources/index.d.ts.map +1 -1
  257. package/resources/index.js +3 -1
  258. package/resources/index.js.map +1 -1
  259. package/resources/index.mjs +1 -0
  260. package/resources/index.mjs.map +1 -1
  261. package/resources/realtime/realtime.d.mts +16 -4
  262. package/resources/realtime/realtime.d.mts.map +1 -1
  263. package/resources/realtime/realtime.d.ts +16 -4
  264. package/resources/realtime/realtime.d.ts.map +1 -1
  265. package/resources/realtime/realtime.js.map +1 -1
  266. package/resources/realtime/realtime.mjs.map +1 -1
  267. package/resources/responses/responses.d.mts +381 -9
  268. package/resources/responses/responses.d.mts.map +1 -1
  269. package/resources/responses/responses.d.ts +381 -9
  270. package/resources/responses/responses.d.ts.map +1 -1
  271. package/resources/responses/responses.js.map +1 -1
  272. package/resources/responses/responses.mjs.map +1 -1
  273. package/resources/shared.d.mts +69 -0
  274. package/resources/shared.d.mts.map +1 -1
  275. package/resources/shared.d.ts +69 -0
  276. package/resources/shared.d.ts.map +1 -1
  277. package/resources/videos.d.mts +5 -0
  278. package/resources/videos.d.mts.map +1 -1
  279. package/resources/videos.d.ts +5 -0
  280. package/resources/videos.d.ts.map +1 -1
  281. package/resources/webhooks/webhooks.d.mts +211 -6
  282. package/resources/webhooks/webhooks.d.mts.map +1 -1
  283. package/resources/webhooks/webhooks.d.ts +211 -6
  284. package/resources/webhooks/webhooks.d.ts.map +1 -1
  285. package/resources/webhooks/webhooks.js.map +1 -1
  286. package/resources/webhooks/webhooks.mjs.map +1 -1
  287. package/src/client.ts +21 -0
  288. package/src/helpers/standard-schema.ts +11 -4
  289. package/src/helpers/zod.ts +4 -0
  290. package/src/lib/ChatCompletionStream.ts +10 -3
  291. package/src/lib/ResponsesParser.ts +8 -0
  292. package/src/lib/agents/agent-session-stream.ts +20 -124
  293. package/src/lib/beta/agents/agent-session-create-stream.ts +87 -1
  294. package/src/lib/beta/agents/function-tool.ts +23 -15
  295. package/src/lib/beta/agents/tool-dispatcher.ts +226 -0
  296. package/src/lib/beta/agents/tool-error.ts +12 -0
  297. package/src/lib/beta/agents/tool-stages.ts +14 -0
  298. package/src/lib/chat-completions/streaming.ts +35 -0
  299. package/src/resources/admin/organization/usage.ts +438 -20
  300. package/src/resources/audio/audio.ts +6 -0
  301. package/src/resources/audio/index.ts +1 -0
  302. package/src/resources/audio/speech.ts +2 -0
  303. package/src/resources/audio/voices.ts +152 -0
  304. package/src/resources/beta/agents/agents.ts +16 -9
  305. package/src/resources/beta/agents/environments/templates.ts +6 -8
  306. package/src/resources/beta/agents/sessions/index.ts +7 -1
  307. package/src/resources/beta/agents/sessions/sessions.ts +18 -8
  308. package/src/resources/beta/agents/sessions/subagents/turns/turns.ts +2 -2
  309. package/src/resources/beta/agents/sessions/turns/index.ts +4 -0
  310. package/src/resources/beta/agents/sessions/turns/items.ts +79 -0
  311. package/src/resources/beta/agents/sessions/turns/turns.ts +383 -0
  312. package/src/resources/beta/agents/sessions/turns.ts +1 -373
  313. package/src/resources/beta/beta.ts +2 -0
  314. package/src/resources/beta/index.ts +1 -0
  315. package/src/resources/beta/responses/index.ts +1 -0
  316. package/src/resources/beta/responses/responses.ts +471 -8
  317. package/src/resources/chat/completions/completions.ts +67 -19
  318. package/src/resources/completions.ts +1 -1
  319. package/src/resources/decisions.ts +290 -0
  320. package/src/resources/fine-tuning/jobs/jobs.ts +7 -2
  321. package/src/resources/graders/grader-models.ts +1 -1
  322. package/src/resources/images.ts +62 -76
  323. package/src/resources/index.ts +9 -0
  324. package/src/resources/realtime/realtime.ts +16 -4
  325. package/src/resources/responses/api.md +1 -0
  326. package/src/resources/responses/responses.ts +473 -8
  327. package/src/resources/shared.ts +70 -0
  328. package/src/resources/videos.ts +6 -0
  329. package/src/resources/webhooks/api.md +5 -0
  330. package/src/resources/webhooks/webhooks.ts +273 -1
  331. package/src/version.ts +1 -1
  332. package/version.d.mts +1 -1
  333. package/version.d.ts +1 -1
  334. package/version.js +1 -1
  335. package/version.mjs +1 -1
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var _AgentToolDispatcher_instances, _AgentToolDispatcher_handlers, _AgentToolDispatcher_options, _AgentToolDispatcher_sessions, _AgentToolDispatcher_controller, _AgentToolDispatcher_onToolError, _AgentToolDispatcher_result, _AgentToolDispatcher_checkAbort, _AgentToolDispatcher_abortError, _AgentToolDispatcher_wait, _AgentToolDispatcher_submit;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AgentToolDispatcher = void 0;
5
+ const tslib_1 = require("../../../internal/tslib.js");
6
+ const error_1 = require("../../../core/error.js");
7
+ const headers_1 = require("../../../internal/headers.js");
8
+ const uuid_1 = require("../../../internal/utils/uuid.js");
9
+ const values_1 = require("../../../internal/utils/values.js");
10
+ const tool_output_1 = require("./tool-output.js");
11
+ const tool_stages_1 = require("./tool-stages.js");
12
+ function normalizedOutput(value) {
13
+ if (value === null) {
14
+ return null;
15
+ }
16
+ if (typeof value === 'string' || (Array.isArray(value) && value.every(tool_output_1.isInputContent))) {
17
+ return value;
18
+ }
19
+ throw new error_1.OpenAIError('Tool output must be text, content, a JSON object, or null');
20
+ }
21
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- The public AgentToolOutput contract accepts arbitrary JSON-serializable object results.
22
+ function toolResult(call, value) {
23
+ const output = (0, values_1.isObj)(value) ? JSON.stringify(value) : value;
24
+ // Detect unserializable callback results inside the redacted failure boundary.
25
+ const serialized = JSON.stringify(output);
26
+ if (serialized === undefined) {
27
+ throw new error_1.OpenAIError('Tool output must be JSON serializable');
28
+ }
29
+ return {
30
+ type: 'agent.session.input.tool_result',
31
+ turn_id: call.turn_id,
32
+ call_id: call.call_id,
33
+ success: true,
34
+ output: normalizedOutput(typeof output === 'string' ? output : JSON.parse(serialized)),
35
+ };
36
+ }
37
+ /** Shared local function dispatch for creation and follow-up streams. @internal */
38
+ class AgentToolDispatcher {
39
+ constructor(sessions, handlers, controller, options, onToolError) {
40
+ _AgentToolDispatcher_instances.add(this);
41
+ _AgentToolDispatcher_handlers.set(this, void 0);
42
+ _AgentToolDispatcher_options.set(this, void 0);
43
+ _AgentToolDispatcher_sessions.set(this, void 0);
44
+ _AgentToolDispatcher_controller.set(this, void 0);
45
+ _AgentToolDispatcher_onToolError.set(this, void 0);
46
+ tslib_1.__classPrivateFieldSet(this, _AgentToolDispatcher_sessions, sessions, "f");
47
+ tslib_1.__classPrivateFieldSet(this, _AgentToolDispatcher_controller, controller, "f");
48
+ tslib_1.__classPrivateFieldSet(this, _AgentToolDispatcher_onToolError, onToolError, "f");
49
+ tslib_1.__classPrivateFieldSet(this, _AgentToolDispatcher_handlers, new Map(Object.entries(handlers)), "f");
50
+ const headers = (0, headers_1.buildHeaders)([options?.headers]);
51
+ headers.values.delete('idempotency-key');
52
+ headers.nulls.delete('idempotency-key');
53
+ const { idempotencyKey: _key, ...rest } = options ?? {};
54
+ tslib_1.__classPrivateFieldSet(this, _AgentToolDispatcher_options, { ...rest, headers, signal: controller.signal }, "f");
55
+ }
56
+ canHandle(name) {
57
+ return typeof tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_handlers, "f").get(name) === 'function';
58
+ }
59
+ /** Capture routing and arguments before the caller can mutate the yielded event. */
60
+ prepare(call, sessionID) {
61
+ const handler = call && tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_handlers, "f").get(call.name);
62
+ if (!call || typeof handler !== 'function') {
63
+ return;
64
+ }
65
+ if (!sessionID) {
66
+ throw new error_1.OpenAIError('Tool call received before the session creation event');
67
+ }
68
+ const snapshot = structuredClone(call);
69
+ return async () => {
70
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
71
+ const result = await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_result).call(this, snapshot, handler, sessionID);
72
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
73
+ await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_submit).call(this, sessionID, result);
74
+ };
75
+ }
76
+ }
77
+ exports.AgentToolDispatcher = AgentToolDispatcher;
78
+ _AgentToolDispatcher_handlers = new WeakMap(), _AgentToolDispatcher_options = new WeakMap(), _AgentToolDispatcher_sessions = new WeakMap(), _AgentToolDispatcher_controller = new WeakMap(), _AgentToolDispatcher_onToolError = new WeakMap(), _AgentToolDispatcher_instances = new WeakSet(), _AgentToolDispatcher_result = async function _AgentToolDispatcher_result(call, handler, sessionID) {
79
+ let stage = 'arguments';
80
+ try {
81
+ const args = typeof call.arguments === 'string' ? JSON.parse(call.arguments) : call.arguments;
82
+ if (!(0, values_1.isObj)(args)) {
83
+ throw new error_1.OpenAIError('Function arguments must be a JSON object');
84
+ }
85
+ stage = 'execution';
86
+ // SAFETY: Arguments were parsed as JSON and checked to be a non-null non-array object before invoking the handler.
87
+ const arguments_ = args;
88
+ const output = await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () => tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f") && handler[tool_stages_1.toolStages]
89
+ ? handler(arguments_, (value) => {
90
+ stage = value;
91
+ })
92
+ : handler(arguments_));
93
+ stage = 'output';
94
+ return toolResult(call, output);
95
+ }
96
+ catch (error) {
97
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
98
+ if (tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f")) {
99
+ const failure = Object.freeze({
100
+ error,
101
+ stage,
102
+ tool_name: call.name,
103
+ session_id: sessionID,
104
+ turn_id: call.turn_id,
105
+ call_id: call.call_id,
106
+ });
107
+ try {
108
+ await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () => tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f")?.call(this, failure));
109
+ }
110
+ catch {
111
+ // Observers must not prevent the original sanitized tool failure from being submitted.
112
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
113
+ }
114
+ }
115
+ return {
116
+ type: 'agent.session.input.tool_result',
117
+ turn_id: call.turn_id,
118
+ call_id: call.call_id,
119
+ success: false,
120
+ error: 'Tool handler failed.',
121
+ };
122
+ }
123
+ }, _AgentToolDispatcher_checkAbort = function _AgentToolDispatcher_checkAbort() {
124
+ if (tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.aborted) {
125
+ throw tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_abortError).call(this);
126
+ }
127
+ }, _AgentToolDispatcher_abortError = function _AgentToolDispatcher_abortError() {
128
+ const error = new error_1.APIUserAbortError();
129
+ Object.defineProperty(error, 'cause', {
130
+ value: tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.reason,
131
+ writable: true,
132
+ configurable: true,
133
+ });
134
+ return error;
135
+ }, _AgentToolDispatcher_wait = async function _AgentToolDispatcher_wait(action) {
136
+ let onAbort;
137
+ // oxlint-disable-next-line promise/avoid-new -- Bridge the caller's AbortSignal while a handler or registration delay is pending.
138
+ const aborted = new Promise((_resolve, reject) => {
139
+ onAbort = () => reject(tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_abortError).call(this));
140
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.addEventListener('abort', onAbort, { once: true });
141
+ });
142
+ try {
143
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
144
+ // Capture synchronous throws before racing cancellation, so both promises
145
+ // always have rejection handlers even if the callback aborts and throws.
146
+ const invoke = async () => await action();
147
+ return await Promise.race([invoke(), aborted]);
148
+ }
149
+ finally {
150
+ if (onAbort) {
151
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.removeEventListener('abort', onAbort);
152
+ }
153
+ }
154
+ }, _AgentToolDispatcher_submit = async function _AgentToolDispatcher_submit(sessionID, result, key = (0, uuid_1.uuid4)(), attempt = 0) {
155
+ tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
156
+ try {
157
+ await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_sessions, "f").events.create(sessionID, { events: [result], 'Idempotency-Key': key }, tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_options, "f"));
158
+ }
159
+ catch (error) {
160
+ const delay = [100, 300, 600][attempt];
161
+ if (delay === undefined ||
162
+ !(error instanceof error_1.BadRequestError) ||
163
+ error.code !== 'invalid_request_error' ||
164
+ !error.error ||
165
+ !('message' in error.error) ||
166
+ error.error.message !== `Unknown pending tool call: ${result.call_id}`) {
167
+ throw error;
168
+ }
169
+ let timer;
170
+ try {
171
+ await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () =>
172
+ // oxlint-disable-next-line promise/avoid-new -- Own the registration timer so cancellation clears it promptly.
173
+ new Promise((resolve) => {
174
+ timer = setTimeout(resolve, delay);
175
+ }));
176
+ }
177
+ finally {
178
+ if (timer !== undefined) {
179
+ clearTimeout(timer);
180
+ }
181
+ }
182
+ await tslib_1.__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_submit).call(this, sessionID, result, key, attempt + 1);
183
+ }
184
+ };
185
+ //# sourceMappingURL=tool-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-dispatcher.js","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ var _AgentToolDispatcher_instances, _AgentToolDispatcher_handlers, _AgentToolDispatcher_options, _AgentToolDispatcher_sessions, _AgentToolDispatcher_controller, _AgentToolDispatcher_onToolError, _AgentToolDispatcher_result, _AgentToolDispatcher_checkAbort, _AgentToolDispatcher_abortError, _AgentToolDispatcher_wait, _AgentToolDispatcher_submit;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "../../../internal/tslib.mjs";
3
+ import { APIUserAbortError, BadRequestError, OpenAIError } from "../../../core/error.mjs";
4
+ import { buildHeaders } from "../../../internal/headers.mjs";
5
+ import { uuid4 } from "../../../internal/utils/uuid.mjs";
6
+ import { isObj } from "../../../internal/utils/values.mjs";
7
+ import { isInputContent } from "./tool-output.mjs";
8
+ import { toolStages } from "./tool-stages.mjs";
9
+ function normalizedOutput(value) {
10
+ if (value === null) {
11
+ return null;
12
+ }
13
+ if (typeof value === 'string' || (Array.isArray(value) && value.every(isInputContent))) {
14
+ return value;
15
+ }
16
+ throw new OpenAIError('Tool output must be text, content, a JSON object, or null');
17
+ }
18
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- The public AgentToolOutput contract accepts arbitrary JSON-serializable object results.
19
+ function toolResult(call, value) {
20
+ const output = isObj(value) ? JSON.stringify(value) : value;
21
+ // Detect unserializable callback results inside the redacted failure boundary.
22
+ const serialized = JSON.stringify(output);
23
+ if (serialized === undefined) {
24
+ throw new OpenAIError('Tool output must be JSON serializable');
25
+ }
26
+ return {
27
+ type: 'agent.session.input.tool_result',
28
+ turn_id: call.turn_id,
29
+ call_id: call.call_id,
30
+ success: true,
31
+ output: normalizedOutput(typeof output === 'string' ? output : JSON.parse(serialized)),
32
+ };
33
+ }
34
+ /** Shared local function dispatch for creation and follow-up streams. @internal */
35
+ export class AgentToolDispatcher {
36
+ constructor(sessions, handlers, controller, options, onToolError) {
37
+ _AgentToolDispatcher_instances.add(this);
38
+ _AgentToolDispatcher_handlers.set(this, void 0);
39
+ _AgentToolDispatcher_options.set(this, void 0);
40
+ _AgentToolDispatcher_sessions.set(this, void 0);
41
+ _AgentToolDispatcher_controller.set(this, void 0);
42
+ _AgentToolDispatcher_onToolError.set(this, void 0);
43
+ __classPrivateFieldSet(this, _AgentToolDispatcher_sessions, sessions, "f");
44
+ __classPrivateFieldSet(this, _AgentToolDispatcher_controller, controller, "f");
45
+ __classPrivateFieldSet(this, _AgentToolDispatcher_onToolError, onToolError, "f");
46
+ __classPrivateFieldSet(this, _AgentToolDispatcher_handlers, new Map(Object.entries(handlers)), "f");
47
+ const headers = buildHeaders([options?.headers]);
48
+ headers.values.delete('idempotency-key');
49
+ headers.nulls.delete('idempotency-key');
50
+ const { idempotencyKey: _key, ...rest } = options ?? {};
51
+ __classPrivateFieldSet(this, _AgentToolDispatcher_options, { ...rest, headers, signal: controller.signal }, "f");
52
+ }
53
+ canHandle(name) {
54
+ return typeof __classPrivateFieldGet(this, _AgentToolDispatcher_handlers, "f").get(name) === 'function';
55
+ }
56
+ /** Capture routing and arguments before the caller can mutate the yielded event. */
57
+ prepare(call, sessionID) {
58
+ const handler = call && __classPrivateFieldGet(this, _AgentToolDispatcher_handlers, "f").get(call.name);
59
+ if (!call || typeof handler !== 'function') {
60
+ return;
61
+ }
62
+ if (!sessionID) {
63
+ throw new OpenAIError('Tool call received before the session creation event');
64
+ }
65
+ const snapshot = structuredClone(call);
66
+ return async () => {
67
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
68
+ const result = await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_result).call(this, snapshot, handler, sessionID);
69
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
70
+ await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_submit).call(this, sessionID, result);
71
+ };
72
+ }
73
+ }
74
+ _AgentToolDispatcher_handlers = new WeakMap(), _AgentToolDispatcher_options = new WeakMap(), _AgentToolDispatcher_sessions = new WeakMap(), _AgentToolDispatcher_controller = new WeakMap(), _AgentToolDispatcher_onToolError = new WeakMap(), _AgentToolDispatcher_instances = new WeakSet(), _AgentToolDispatcher_result = async function _AgentToolDispatcher_result(call, handler, sessionID) {
75
+ let stage = 'arguments';
76
+ try {
77
+ const args = typeof call.arguments === 'string' ? JSON.parse(call.arguments) : call.arguments;
78
+ if (!isObj(args)) {
79
+ throw new OpenAIError('Function arguments must be a JSON object');
80
+ }
81
+ stage = 'execution';
82
+ // SAFETY: Arguments were parsed as JSON and checked to be a non-null non-array object before invoking the handler.
83
+ const arguments_ = args;
84
+ const output = await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () => __classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f") && handler[toolStages]
85
+ ? handler(arguments_, (value) => {
86
+ stage = value;
87
+ })
88
+ : handler(arguments_));
89
+ stage = 'output';
90
+ return toolResult(call, output);
91
+ }
92
+ catch (error) {
93
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
94
+ if (__classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f")) {
95
+ const failure = Object.freeze({
96
+ error,
97
+ stage,
98
+ tool_name: call.name,
99
+ session_id: sessionID,
100
+ turn_id: call.turn_id,
101
+ call_id: call.call_id,
102
+ });
103
+ try {
104
+ await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () => __classPrivateFieldGet(this, _AgentToolDispatcher_onToolError, "f")?.call(this, failure));
105
+ }
106
+ catch {
107
+ // Observers must not prevent the original sanitized tool failure from being submitted.
108
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
109
+ }
110
+ }
111
+ return {
112
+ type: 'agent.session.input.tool_result',
113
+ turn_id: call.turn_id,
114
+ call_id: call.call_id,
115
+ success: false,
116
+ error: 'Tool handler failed.',
117
+ };
118
+ }
119
+ }, _AgentToolDispatcher_checkAbort = function _AgentToolDispatcher_checkAbort() {
120
+ if (__classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.aborted) {
121
+ throw __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_abortError).call(this);
122
+ }
123
+ }, _AgentToolDispatcher_abortError = function _AgentToolDispatcher_abortError() {
124
+ const error = new APIUserAbortError();
125
+ Object.defineProperty(error, 'cause', {
126
+ value: __classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.reason,
127
+ writable: true,
128
+ configurable: true,
129
+ });
130
+ return error;
131
+ }, _AgentToolDispatcher_wait = async function _AgentToolDispatcher_wait(action) {
132
+ let onAbort;
133
+ // oxlint-disable-next-line promise/avoid-new -- Bridge the caller's AbortSignal while a handler or registration delay is pending.
134
+ const aborted = new Promise((_resolve, reject) => {
135
+ onAbort = () => reject(__classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_abortError).call(this));
136
+ __classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.addEventListener('abort', onAbort, { once: true });
137
+ });
138
+ try {
139
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
140
+ // Capture synchronous throws before racing cancellation, so both promises
141
+ // always have rejection handlers even if the callback aborts and throws.
142
+ const invoke = async () => await action();
143
+ return await Promise.race([invoke(), aborted]);
144
+ }
145
+ finally {
146
+ if (onAbort) {
147
+ __classPrivateFieldGet(this, _AgentToolDispatcher_controller, "f").signal.removeEventListener('abort', onAbort);
148
+ }
149
+ }
150
+ }, _AgentToolDispatcher_submit = async function _AgentToolDispatcher_submit(sessionID, result, key = uuid4(), attempt = 0) {
151
+ __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_checkAbort).call(this);
152
+ try {
153
+ await __classPrivateFieldGet(this, _AgentToolDispatcher_sessions, "f").events.create(sessionID, { events: [result], 'Idempotency-Key': key }, __classPrivateFieldGet(this, _AgentToolDispatcher_options, "f"));
154
+ }
155
+ catch (error) {
156
+ const delay = [100, 300, 600][attempt];
157
+ if (delay === undefined ||
158
+ !(error instanceof BadRequestError) ||
159
+ error.code !== 'invalid_request_error' ||
160
+ !error.error ||
161
+ !('message' in error.error) ||
162
+ error.error.message !== `Unknown pending tool call: ${result.call_id}`) {
163
+ throw error;
164
+ }
165
+ let timer;
166
+ try {
167
+ await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_wait).call(this, () =>
168
+ // oxlint-disable-next-line promise/avoid-new -- Own the registration timer so cancellation clears it promptly.
169
+ new Promise((resolve) => {
170
+ timer = setTimeout(resolve, delay);
171
+ }));
172
+ }
173
+ finally {
174
+ if (timer !== undefined) {
175
+ clearTimeout(timer);
176
+ }
177
+ }
178
+ await __classPrivateFieldGet(this, _AgentToolDispatcher_instances, "m", _AgentToolDispatcher_submit).call(this, sessionID, result, key, attempt + 1);
179
+ }
180
+ };
181
+ //# sourceMappingURL=tool-dispatcher.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-dispatcher.mjs","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-dispatcher.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,gCAA4B;AACtF,OAAO,EAAE,YAAY,EAAE,sCAAkC;AAEzD,OAAO,EAAE,KAAK,EAAE,yCAAqC;AACrD,OAAO,EAAE,KAAK,EAAE,2CAAuC;AACvD,OAAO,EAAE,cAAc,EAAE,0BAAsB;AAE/C,OAAO,EAAE,UAAU,EAAE,0BAAsB;AAgB3C,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,WAAW,CAAC,2DAA2D,CAAC,CAAC;AACrF,CAAC;AAED,qJAAqJ;AACrJ,SAAS,UAAU,CAAC,IAA2B,EAAE,KAAsB;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CAAC,uCAAuC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,gBAAgB,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,OAAO,mBAAmB;IAO9B,YACE,QAAkB,EAClB,QAA0C,EAC1C,UAA2B,EAC3B,OAAwB,EACxB,WAAqD;;QAX9C,gDAAyC;QACzC,+CAAyB;QACzB,gDAAoB;QACpB,kDAA6B;QAC7B,mDAAsD;QAS7D,uBAAA,IAAI,iCAAa,QAAQ,MAAA,CAAC;QAC1B,uBAAA,IAAI,mCAAe,UAAU,MAAA,CAAC;QAC9B,uBAAA,IAAI,oCAAgB,WAAW,MAAA,CAAC;QAChC,uBAAA,IAAI,iCAAa,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAA,CAAC;QACnD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACxD,uBAAA,IAAI,gCAAY,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAA,CAAC;IAClE,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,OAAO,uBAAA,IAAI,qCAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC;IACxD,CAAC;IAED,oFAAoF;IACpF,OAAO,CACL,IAAuC,EACvC,SAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,IAAI,uBAAA,IAAI,qCAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,sDAAsD,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,KAAK,IAAI,EAAE;YAChB,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAChE,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;YACnB,MAAM,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC;CA8HF;6TA5HC,KAAK,sCACH,IAA2B,EAC3B,OAA0B,EAC1B,SAAiB;IAEjB,IAAI,KAAK,GAA4B,WAAW,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAY,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACvG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,WAAW,CAAC,0CAA0C,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,GAAG,WAAW,CAAC;QACpB,mHAAmH;QACnH,MAAM,UAAU,GAAG,IAA+B,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,iEAAM,MAAV,IAAI,EAAO,GAAG,EAAE,CACnC,uBAAA,IAAI,wCAAa,IAAI,OAAO,CAAC,UAAU,CAAC;YACtC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC,CAAC;YACJ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CACxB,CAAC;QACF,KAAK,GAAG,QAAQ,CAAC;QACjB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;QACnB,IAAI,uBAAA,IAAI,wCAAa,EAAE,CAAC;YACtB,MAAM,OAAO,GAAmB,MAAM,CAAC,MAAM,CAAC;gBAC5C,KAAK;gBACL,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,MAAM,uBAAA,IAAI,iEAAM,MAAV,IAAI,EAAO,GAAG,EAAE,CAAC,uBAAA,IAAI,wCAAa,EAAE,KAAnB,IAAI,EAAgB,OAAO,CAAC,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,uFAAuF;gBACvF,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAsB;SAC9B,CAAC;IACJ,CAAC;AACH,CAAC;IAGC,IAAI,uBAAA,IAAI,uCAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;IAC3B,CAAC;AACH,CAAC;IAGC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;QACpC,KAAK,EAAE,uBAAA,IAAI,uCAAY,CAAC,MAAM,CAAC,MAAM;QACrC,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,8BAED,KAAK,oCAAc,MAAwC;IACzD,IAAI,OAAiC,CAAC;IACtC,kIAAkI;IAClI,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACtD,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC,CAAC;QAC3C,uBAAA,IAAI,uCAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;QACnB,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,uBAAA,IAAI,uCAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC,gCAED,KAAK,sCAAS,SAAiB,EAAE,MAAkB,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,OAAO,GAAG,CAAC;IAC7E,uBAAA,IAAI,uEAAY,MAAhB,IAAI,CAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,uBAAA,IAAI,qCAAU,CAAC,MAAM,CAAC,MAAM,CAChC,SAAS,EACT,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAC5C,uBAAA,IAAI,oCAAS,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACvC,IACE,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC;YACnC,KAAK,CAAC,IAAI,KAAK,uBAAuB;YACtC,CAAC,KAAK,CAAC,KAAK;YACZ,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;YAC3B,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,8BAA8B,MAAM,CAAC,OAAO,EAAE,EACtE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,KAAgD,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,uBAAA,IAAI,iEAAM,MAAV,IAAI,EACR,GAAG,EAAE;YACH,+GAA+G;YAC/G,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAC5B,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CACL,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,MAAM,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Beta diagnostic for logging or monitoring failures from local `toolHandlers`.
3
+ * The original error is local only; API and transport failures propagate separately.
4
+ */
5
+ export interface AgentToolError {
6
+ readonly error: unknown;
7
+ readonly tool_name: string;
8
+ readonly session_id: string;
9
+ readonly turn_id: string;
10
+ readonly call_id: string;
11
+ readonly stage: 'arguments' | 'execution' | 'output';
12
+ }
13
+ //# sourceMappingURL=tool-error.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.d.mts","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CACtD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Beta diagnostic for logging or monitoring failures from local `toolHandlers`.
3
+ * The original error is local only; API and transport failures propagate separately.
4
+ */
5
+ export interface AgentToolError {
6
+ readonly error: unknown;
7
+ readonly tool_name: string;
8
+ readonly session_id: string;
9
+ readonly turn_id: string;
10
+ readonly call_id: string;
11
+ readonly stage: 'arguments' | 'execution' | 'output';
12
+ }
13
+ //# sourceMappingURL=tool-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.d.ts","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CACtD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tool-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.js","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-error.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-error.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.mjs","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-error.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { AgentToolHandler } from "../../agents/agent-session-stream.mjs";
2
+ import type { AgentToolError } from "./tool-error.mjs";
3
+ /** @internal */
4
+ export declare const toolStages: unique symbol;
5
+ /**
6
+ * Marks handlers that accept stage updates, including across ESM/CJS imports.
7
+ * @internal
8
+ */
9
+ export type StagedToolHandler = ((arguments_: Parameters<AgentToolHandler>[0], setStage?: (stage: AgentToolError['stage']) => void) => ReturnType<AgentToolHandler>) & {
10
+ [toolStages]?: true;
11
+ };
12
+ //# sourceMappingURL=tool-stages.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stages.d.mts","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-stages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,8CAA0C;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAqB;AAEnD,gBAAgB;AAChB,eAAO,MAAM,UAAU,eAA8C,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,KAChD,UAAU,CAAC,gBAAgB,CAAC,CAAC,GAAG;IAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AgentToolHandler } from "../../agents/agent-session-stream.js";
2
+ import type { AgentToolError } from "./tool-error.js";
3
+ /** @internal */
4
+ export declare const toolStages: unique symbol;
5
+ /**
6
+ * Marks handlers that accept stage updates, including across ESM/CJS imports.
7
+ * @internal
8
+ */
9
+ export type StagedToolHandler = ((arguments_: Parameters<AgentToolHandler>[0], setStage?: (stage: AgentToolError['stage']) => void) => ReturnType<AgentToolHandler>) & {
10
+ [toolStages]?: true;
11
+ };
12
+ //# sourceMappingURL=tool-stages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stages.d.ts","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-stages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,6CAA0C;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAqB;AAEnD,gBAAgB;AAChB,eAAO,MAAM,UAAU,eAA8C,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAC/B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,KAChD,UAAU,CAAC,gBAAgB,CAAC,CAAC,GAAG;IAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toolStages = void 0;
4
+ /** @internal */
5
+ exports.toolStages = Symbol.for('openai.beta.agents.toolStages');
6
+ //# sourceMappingURL=tool-stages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stages.js","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-stages.ts"],"names":[],"mappings":";;;AAGA,gBAAgB;AACH,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** @internal */
2
+ export const toolStages = Symbol.for('openai.beta.agents.toolStages');
3
+ //# sourceMappingURL=tool-stages.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stages.mjs","sourceRoot":"","sources":["../../../src/lib/beta/agents/tool-stages.ts"],"names":[],"mappings":"AAGA,gBAAgB;AAChB,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Stream } from "../../core/streaming.mjs";
2
+ import type { ChatCompletionChunk } from "../../resources/chat/completions/completions.mjs";
3
+ /** Wire chunks can omit the finish reason, including the final audio expiry update. */
4
+ export type ChatCompletionWireChunk = Omit<ChatCompletionChunk, 'choices'> & {
5
+ choices: (Omit<ChatCompletionChunk.Choice, 'finish_reason'> & {
6
+ finish_reason?: ChatCompletionChunk.Choice['finish_reason'];
7
+ })[];
8
+ };
9
+ export declare function normalizeChatCompletionChunk(chunk: ChatCompletionWireChunk): ChatCompletionChunk;
10
+ export declare function normalizeChatCompletionStream(stream: Stream<ChatCompletionWireChunk>): Stream<ChatCompletionChunk>;
11
+ //# sourceMappingURL=streaming.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.mts","sourceRoot":"","sources":["../../src/lib/chat-completions/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iCAA6B;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,yDAAqD;AAExF,uFAAuF;AACvF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IAC3E,OAAO,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG;QAC5D,aAAa,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;KAC7D,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,mBAAmB,CAUhG;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,CAAC,uBAAuB,CAAC,GACtC,MAAM,CAAC,mBAAmB,CAAC,CAU7B"}
@@ -0,0 +1,11 @@
1
+ import type { Stream } from "../../core/streaming.js";
2
+ import type { ChatCompletionChunk } from "../../resources/chat/completions/completions.js";
3
+ /** Wire chunks can omit the finish reason, including the final audio expiry update. */
4
+ export type ChatCompletionWireChunk = Omit<ChatCompletionChunk, 'choices'> & {
5
+ choices: (Omit<ChatCompletionChunk.Choice, 'finish_reason'> & {
6
+ finish_reason?: ChatCompletionChunk.Choice['finish_reason'];
7
+ })[];
8
+ };
9
+ export declare function normalizeChatCompletionChunk(chunk: ChatCompletionWireChunk): ChatCompletionChunk;
10
+ export declare function normalizeChatCompletionStream(stream: Stream<ChatCompletionWireChunk>): Stream<ChatCompletionChunk>;
11
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/lib/chat-completions/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gCAA6B;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,wDAAqD;AAExF,uFAAuF;AACvF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IAC3E,OAAO,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG;QAC5D,aAAa,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;KAC7D,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,mBAAmB,CAUhG;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,CAAC,uBAAuB,CAAC,GACtC,MAAM,CAAC,mBAAmB,CAAC,CAU7B"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeChatCompletionChunk = normalizeChatCompletionChunk;
4
+ exports.normalizeChatCompletionStream = normalizeChatCompletionStream;
5
+ function normalizeChatCompletionChunk(chunk) {
6
+ if (!Array.isArray(chunk?.choices)) {
7
+ // SAFETY: This is an opaque provider record, with no choices to normalize.
8
+ // Preserve the existing SSE pass-through; the SDK does not validate these records.
9
+ return chunk;
10
+ }
11
+ return {
12
+ ...chunk,
13
+ choices: chunk.choices.map((choice) => ({ ...choice, finish_reason: choice.finish_reason ?? null })),
14
+ };
15
+ }
16
+ function normalizeChatCompletionStream(stream) {
17
+ const iterator = stream[Symbol.asyncIterator].bind(stream);
18
+ stream[Symbol.asyncIterator] = async function* normalizedChunks() {
19
+ const source = { [Symbol.asyncIterator]: iterator };
20
+ for await (const chunk of source) {
21
+ yield normalizeChatCompletionChunk(chunk);
22
+ }
23
+ };
24
+ // SAFETY: The installed iterator normalizes every wire chunk before exposing it.
25
+ return stream;
26
+ }
27
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/lib/chat-completions/streaming.ts"],"names":[],"mappings":";;AAUA,oEAUC;AAED,sEAYC;AAxBD,SAAgB,4BAA4B,CAAC,KAA8B;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,2EAA2E;QAC3E,mFAAmF;QACnF,OAAO,KAA4B,CAAC;IACtC,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;KACrG,CAAC;AACJ,CAAC;AAED,SAAgB,6BAA6B,CAC3C,MAAuC;IAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,gBAAgB;QAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;QACpD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;IACF,iFAAiF;IACjF,OAAO,MAAqC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ export function normalizeChatCompletionChunk(chunk) {
2
+ if (!Array.isArray(chunk?.choices)) {
3
+ // SAFETY: This is an opaque provider record, with no choices to normalize.
4
+ // Preserve the existing SSE pass-through; the SDK does not validate these records.
5
+ return chunk;
6
+ }
7
+ return {
8
+ ...chunk,
9
+ choices: chunk.choices.map((choice) => ({ ...choice, finish_reason: choice.finish_reason ?? null })),
10
+ };
11
+ }
12
+ export function normalizeChatCompletionStream(stream) {
13
+ const iterator = stream[Symbol.asyncIterator].bind(stream);
14
+ stream[Symbol.asyncIterator] = async function* normalizedChunks() {
15
+ const source = { [Symbol.asyncIterator]: iterator };
16
+ for await (const chunk of source) {
17
+ yield normalizeChatCompletionChunk(chunk);
18
+ }
19
+ };
20
+ // SAFETY: The installed iterator normalizes every wire chunk before exposing it.
21
+ return stream;
22
+ }
23
+ //# sourceMappingURL=streaming.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.mjs","sourceRoot":"","sources":["../../src/lib/chat-completions/streaming.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,4BAA4B,CAAC,KAA8B;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,2EAA2E;QAC3E,mFAAmF;QACnF,OAAO,KAA4B,CAAC;IACtC,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;KACrG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAAuC;IAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,gBAAgB;QAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;QACpD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;IACF,iFAAiF;IACjF,OAAO,MAAqC,CAAC;AAC/C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openai",
3
- "version": "7.27.0",
3
+ "version": "7.30.0",
4
4
  "description": "The official TypeScript library for the OpenAI API",
5
5
  "author": "OpenAI <support@openai.com>",
6
6
  "types": "./index.d.ts",