openai 7.16.0 → 7.18.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 (689) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
  3. package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
  4. package/_vendor/zod-to-json-schema/Options.js +2 -0
  5. package/_vendor/zod-to-json-schema/Options.js.map +1 -1
  6. package/_vendor/zod-to-json-schema/Options.mjs +2 -0
  7. package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
  8. package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
  9. package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
  10. package/_vendor/zod-to-json-schema/parseDef.js +1 -0
  11. package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
  12. package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
  13. package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
  14. package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
  15. package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
  16. package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
  17. package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
  18. package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
  19. package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
  20. package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
  21. package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
  22. package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
  23. package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
  24. package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
  25. package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
  26. package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
  27. package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
  28. package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
  29. package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
  30. package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
  31. package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
  32. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
  33. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  34. package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
  35. package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
  36. package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
  37. package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
  38. package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
  39. package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
  40. package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
  41. package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
  42. package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
  43. package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
  44. package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
  45. package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
  46. package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
  47. package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
  48. package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
  49. package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
  50. package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
  51. package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
  52. package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
  53. package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
  54. package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
  55. package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
  56. package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
  57. package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
  58. package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
  59. package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
  60. package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
  61. package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
  62. package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
  63. package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  64. package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
  65. package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
  66. package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
  67. package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
  68. package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
  69. package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
  70. package/_vendor/zod-to-json-schema/util.js +1 -0
  71. package/_vendor/zod-to-json-schema/util.js.map +1 -1
  72. package/_vendor/zod-to-json-schema/util.mjs +1 -0
  73. package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
  74. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
  75. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
  76. package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
  77. package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
  78. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
  79. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
  80. package/auth/subject-token-providers.d.mts.map +1 -1
  81. package/auth/subject-token-providers.d.ts.map +1 -1
  82. package/auth/subject-token-providers.js +6 -1
  83. package/auth/subject-token-providers.js.map +1 -1
  84. package/auth/subject-token-providers.mjs +6 -1
  85. package/auth/subject-token-providers.mjs.map +1 -1
  86. package/auth/workload-identity-auth.d.mts.map +1 -1
  87. package/auth/workload-identity-auth.d.ts.map +1 -1
  88. package/auth/workload-identity-auth.js +9 -0
  89. package/auth/workload-identity-auth.js.map +1 -1
  90. package/auth/workload-identity-auth.mjs +9 -0
  91. package/auth/workload-identity-auth.mjs.map +1 -1
  92. package/auth/x509-transport.d.mts.map +1 -1
  93. package/auth/x509-transport.d.ts.map +1 -1
  94. package/auth/x509-transport.js +11 -0
  95. package/auth/x509-transport.js.map +1 -1
  96. package/auth/x509-transport.mjs +11 -0
  97. package/auth/x509-transport.mjs.map +1 -1
  98. package/azure.d.mts.map +1 -1
  99. package/azure.d.ts.map +1 -1
  100. package/azure.js +3 -0
  101. package/azure.js.map +1 -1
  102. package/azure.mjs +3 -0
  103. package/azure.mjs.map +1 -1
  104. package/bedrock.d.mts.map +1 -1
  105. package/bedrock.d.ts.map +1 -1
  106. package/bedrock.js +5 -0
  107. package/bedrock.js.map +1 -1
  108. package/bedrock.mjs +5 -0
  109. package/bedrock.mjs.map +1 -1
  110. package/beta/realtime/internal-base.d.mts.map +1 -1
  111. package/beta/realtime/internal-base.d.ts.map +1 -1
  112. package/beta/realtime/internal-base.js +1 -0
  113. package/beta/realtime/internal-base.js.map +1 -1
  114. package/beta/realtime/internal-base.mjs +1 -0
  115. package/beta/realtime/internal-base.mjs.map +1 -1
  116. package/beta/realtime/websocket.d.mts.map +1 -1
  117. package/beta/realtime/websocket.d.ts.map +1 -1
  118. package/beta/realtime/websocket.js +9 -1
  119. package/beta/realtime/websocket.js.map +1 -1
  120. package/beta/realtime/websocket.mjs +9 -1
  121. package/beta/realtime/websocket.mjs.map +1 -1
  122. package/beta/realtime/ws.d.mts.map +1 -1
  123. package/beta/realtime/ws.d.ts.map +1 -1
  124. package/beta/realtime/ws.js +3 -0
  125. package/beta/realtime/ws.js.map +1 -1
  126. package/beta/realtime/ws.mjs +3 -0
  127. package/beta/realtime/ws.mjs.map +1 -1
  128. package/client.d.mts +3 -0
  129. package/client.d.mts.map +1 -1
  130. package/client.d.ts +3 -0
  131. package/client.d.ts.map +1 -1
  132. package/client.js +39 -6
  133. package/client.js.map +1 -1
  134. package/client.mjs +39 -6
  135. package/client.mjs.map +1 -1
  136. package/core/EventEmitter.d.mts.map +1 -1
  137. package/core/EventEmitter.d.ts.map +1 -1
  138. package/core/EventEmitter.js +15 -0
  139. package/core/EventEmitter.js.map +1 -1
  140. package/core/EventEmitter.mjs +15 -0
  141. package/core/EventEmitter.mjs.map +1 -1
  142. package/core/streaming.d.mts +1 -0
  143. package/core/streaming.d.mts.map +1 -1
  144. package/core/streaming.d.ts +1 -0
  145. package/core/streaming.d.ts.map +1 -1
  146. package/core/streaming.js +28 -1
  147. package/core/streaming.js.map +1 -1
  148. package/core/streaming.mjs +28 -1
  149. package/core/streaming.mjs.map +1 -1
  150. package/helpers/audio.d.mts.map +1 -1
  151. package/helpers/audio.d.ts.map +1 -1
  152. package/helpers/audio.js +2 -0
  153. package/helpers/audio.js.map +1 -1
  154. package/helpers/audio.mjs +2 -0
  155. package/helpers/audio.mjs.map +1 -1
  156. package/helpers/standard-schema.d.mts.map +1 -1
  157. package/helpers/standard-schema.d.ts.map +1 -1
  158. package/helpers/standard-schema.js +28 -18
  159. package/helpers/standard-schema.js.map +1 -1
  160. package/helpers/standard-schema.mjs +28 -18
  161. package/helpers/standard-schema.mjs.map +1 -1
  162. package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
  163. package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
  164. package/helpers/zod-v3-strict-schema.js +5 -0
  165. package/helpers/zod-v3-strict-schema.js.map +1 -1
  166. package/helpers/zod-v3-strict-schema.mjs +5 -0
  167. package/helpers/zod-v3-strict-schema.mjs.map +1 -1
  168. package/helpers/zod.d.mts.map +1 -1
  169. package/helpers/zod.d.ts.map +1 -1
  170. package/helpers/zod.js +16 -1
  171. package/helpers/zod.js.map +1 -1
  172. package/helpers/zod.mjs +17 -2
  173. package/helpers/zod.mjs.map +1 -1
  174. package/internal/assistant-stream-delta.d.mts.map +1 -1
  175. package/internal/assistant-stream-delta.d.ts.map +1 -1
  176. package/internal/assistant-stream-delta.js +8 -1
  177. package/internal/assistant-stream-delta.js.map +1 -1
  178. package/internal/assistant-stream-delta.mjs +8 -1
  179. package/internal/assistant-stream-delta.mjs.map +1 -1
  180. package/internal/auth/x509-credential-options.d.mts.map +1 -1
  181. package/internal/auth/x509-credential-options.d.ts.map +1 -1
  182. package/internal/auth/x509-credential-options.js +3 -0
  183. package/internal/auth/x509-credential-options.js.map +1 -1
  184. package/internal/auth/x509-credential-options.mjs +3 -0
  185. package/internal/auth/x509-credential-options.mjs.map +1 -1
  186. package/internal/auth/x509-token-exchange.d.mts.map +1 -1
  187. package/internal/auth/x509-token-exchange.d.ts.map +1 -1
  188. package/internal/auth/x509-token-exchange.js +2 -0
  189. package/internal/auth/x509-token-exchange.js.map +1 -1
  190. package/internal/auth/x509-token-exchange.mjs +2 -0
  191. package/internal/auth/x509-token-exchange.mjs.map +1 -1
  192. package/internal/auth/x509-transport-capability.d.mts.map +1 -1
  193. package/internal/auth/x509-transport-capability.d.ts.map +1 -1
  194. package/internal/auth/x509-transport-capability.js +1 -0
  195. package/internal/auth/x509-transport-capability.js.map +1 -1
  196. package/internal/auth/x509-transport-capability.mjs +1 -0
  197. package/internal/auth/x509-transport-capability.mjs.map +1 -1
  198. package/internal/auth/x509-transport-state.mjs +1 -0
  199. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
  200. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
  201. package/internal/auth/x509-workload-identity-auth.js +11 -0
  202. package/internal/auth/x509-workload-identity-auth.js.map +1 -1
  203. package/internal/auth/x509-workload-identity-auth.mjs +11 -0
  204. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
  205. package/internal/bedrock.d.mts.map +1 -1
  206. package/internal/bedrock.d.ts.map +1 -1
  207. package/internal/bedrock.js +17 -1
  208. package/internal/bedrock.js.map +1 -1
  209. package/internal/bedrock.mjs +17 -1
  210. package/internal/bedrock.mjs.map +1 -1
  211. package/internal/decoders/line.d.mts.map +1 -1
  212. package/internal/decoders/line.d.ts.map +1 -1
  213. package/internal/decoders/line.js +1 -0
  214. package/internal/decoders/line.js.map +1 -1
  215. package/internal/decoders/line.mjs +1 -0
  216. package/internal/decoders/line.mjs.map +1 -1
  217. package/internal/parse.d.mts +1 -0
  218. package/internal/parse.d.mts.map +1 -1
  219. package/internal/parse.d.ts +1 -0
  220. package/internal/parse.d.ts.map +1 -1
  221. package/internal/parse.js.map +1 -1
  222. package/internal/parse.mjs.map +1 -1
  223. package/internal/provider.d.mts.map +1 -1
  224. package/internal/provider.d.ts.map +1 -1
  225. package/internal/provider.js +3 -0
  226. package/internal/provider.js.map +1 -1
  227. package/internal/provider.mjs +3 -0
  228. package/internal/provider.mjs.map +1 -1
  229. package/internal/qs/stringify.d.mts.map +1 -1
  230. package/internal/qs/stringify.d.ts.map +1 -1
  231. package/internal/qs/stringify.js +3 -0
  232. package/internal/qs/stringify.js.map +1 -1
  233. package/internal/qs/stringify.mjs +3 -0
  234. package/internal/qs/stringify.mjs.map +1 -1
  235. package/internal/qs/utils.d.mts.map +1 -1
  236. package/internal/qs/utils.d.ts.map +1 -1
  237. package/internal/qs/utils.js +15 -3
  238. package/internal/qs/utils.js.map +1 -1
  239. package/internal/qs/utils.mjs +15 -3
  240. package/internal/qs/utils.mjs.map +1 -1
  241. package/internal/responses/response-accumulator.d.mts.map +1 -1
  242. package/internal/responses/response-accumulator.d.ts.map +1 -1
  243. package/internal/responses/response-accumulator.js +20 -4
  244. package/internal/responses/response-accumulator.js.map +1 -1
  245. package/internal/responses/response-accumulator.mjs +20 -4
  246. package/internal/responses/response-accumulator.mjs.map +1 -1
  247. package/internal/to-file.js.map +1 -1
  248. package/internal/to-file.mjs.map +1 -1
  249. package/internal/uploads.d.mts.map +1 -1
  250. package/internal/uploads.d.ts.map +1 -1
  251. package/internal/uploads.js +10 -0
  252. package/internal/uploads.js.map +1 -1
  253. package/internal/uploads.mjs +10 -0
  254. package/internal/uploads.mjs.map +1 -1
  255. package/internal/utils/abort.d.mts.map +1 -1
  256. package/internal/utils/abort.d.ts.map +1 -1
  257. package/internal/utils/abort.js +9 -2
  258. package/internal/utils/abort.js.map +1 -1
  259. package/internal/utils/abort.mjs +9 -2
  260. package/internal/utils/abort.mjs.map +1 -1
  261. package/internal/utils/bytes.d.mts.map +1 -1
  262. package/internal/utils/bytes.d.ts.map +1 -1
  263. package/internal/utils/bytes.js +2 -0
  264. package/internal/utils/bytes.js.map +1 -1
  265. package/internal/utils/bytes.mjs +2 -0
  266. package/internal/utils/bytes.mjs.map +1 -1
  267. package/internal/utils/path.d.mts.map +1 -1
  268. package/internal/utils/path.d.ts.map +1 -1
  269. package/internal/utils/path.js +2 -0
  270. package/internal/utils/path.js.map +1 -1
  271. package/internal/utils/path.mjs +2 -0
  272. package/internal/utils/path.mjs.map +1 -1
  273. package/internal/utils/sleep.d.mts +1 -1
  274. package/internal/utils/sleep.d.mts.map +1 -1
  275. package/internal/utils/sleep.d.ts +1 -1
  276. package/internal/utils/sleep.d.ts.map +1 -1
  277. package/internal/utils/sleep.js +51 -1
  278. package/internal/utils/sleep.js.map +1 -1
  279. package/internal/utils/sleep.mjs +51 -1
  280. package/internal/utils/sleep.mjs.map +1 -1
  281. package/internal/ws-adapter-browser.d.mts.map +1 -1
  282. package/internal/ws-adapter-browser.d.ts.map +1 -1
  283. package/internal/ws-adapter-browser.js +2 -0
  284. package/internal/ws-adapter-browser.js.map +1 -1
  285. package/internal/ws-adapter-browser.mjs +2 -0
  286. package/internal/ws-adapter-browser.mjs.map +1 -1
  287. package/internal/ws.d.mts +16 -0
  288. package/internal/ws.d.mts.map +1 -1
  289. package/internal/ws.d.ts +16 -0
  290. package/internal/ws.d.ts.map +1 -1
  291. package/internal/ws.js +71 -5
  292. package/internal/ws.js.map +1 -1
  293. package/internal/ws.mjs +68 -6
  294. package/internal/ws.mjs.map +1 -1
  295. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  296. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  297. package/lib/AbstractChatCompletionRunner.js +41 -16
  298. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  299. package/lib/AbstractChatCompletionRunner.mjs +42 -17
  300. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  301. package/lib/AssistantStream.d.mts.map +1 -1
  302. package/lib/AssistantStream.d.ts.map +1 -1
  303. package/lib/AssistantStream.js +19 -5
  304. package/lib/AssistantStream.js.map +1 -1
  305. package/lib/AssistantStream.mjs +20 -6
  306. package/lib/AssistantStream.mjs.map +1 -1
  307. package/lib/ChatCompletionRunner.d.mts.map +1 -1
  308. package/lib/ChatCompletionRunner.d.ts.map +1 -1
  309. package/lib/ChatCompletionRunner.js +1 -0
  310. package/lib/ChatCompletionRunner.js.map +1 -1
  311. package/lib/ChatCompletionRunner.mjs +1 -0
  312. package/lib/ChatCompletionRunner.mjs.map +1 -1
  313. package/lib/ChatCompletionStream.d.mts +6 -1
  314. package/lib/ChatCompletionStream.d.mts.map +1 -1
  315. package/lib/ChatCompletionStream.d.ts +6 -1
  316. package/lib/ChatCompletionStream.d.ts.map +1 -1
  317. package/lib/ChatCompletionStream.js +63 -7
  318. package/lib/ChatCompletionStream.js.map +1 -1
  319. package/lib/ChatCompletionStream.mjs +64 -8
  320. package/lib/ChatCompletionStream.mjs.map +1 -1
  321. package/lib/EventEmitter.d.mts.map +1 -1
  322. package/lib/EventEmitter.d.ts.map +1 -1
  323. package/lib/EventEmitter.js +15 -0
  324. package/lib/EventEmitter.js.map +1 -1
  325. package/lib/EventEmitter.mjs +15 -0
  326. package/lib/EventEmitter.mjs.map +1 -1
  327. package/lib/EventStream.d.mts +2 -0
  328. package/lib/EventStream.d.mts.map +1 -1
  329. package/lib/EventStream.d.ts +2 -0
  330. package/lib/EventStream.d.ts.map +1 -1
  331. package/lib/EventStream.js +111 -14
  332. package/lib/EventStream.js.map +1 -1
  333. package/lib/EventStream.mjs +111 -14
  334. package/lib/EventStream.mjs.map +1 -1
  335. package/lib/ResponsesParser.d.mts.map +1 -1
  336. package/lib/ResponsesParser.d.ts.map +1 -1
  337. package/lib/ResponsesParser.js +4 -0
  338. package/lib/ResponsesParser.js.map +1 -1
  339. package/lib/ResponsesParser.mjs +4 -0
  340. package/lib/ResponsesParser.mjs.map +1 -1
  341. package/lib/RunnableFunction.d.mts.map +1 -1
  342. package/lib/RunnableFunction.d.ts.map +1 -1
  343. package/lib/RunnableFunction.js.map +1 -1
  344. package/lib/RunnableFunction.mjs.map +1 -1
  345. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  346. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  347. package/lib/agents/agent-session-stream.js +5 -2
  348. package/lib/agents/agent-session-stream.js.map +1 -1
  349. package/lib/agents/agent-session-stream.mjs +5 -2
  350. package/lib/agents/agent-session-stream.mjs.map +1 -1
  351. package/lib/embeddings.d.mts.map +1 -1
  352. package/lib/embeddings.d.ts.map +1 -1
  353. package/lib/embeddings.js +2 -0
  354. package/lib/embeddings.js.map +1 -1
  355. package/lib/embeddings.mjs +2 -0
  356. package/lib/embeddings.mjs.map +1 -1
  357. package/lib/live/transcript-grouper.d.mts.map +1 -1
  358. package/lib/live/transcript-grouper.d.ts.map +1 -1
  359. package/lib/live/transcript-grouper.js +8 -2
  360. package/lib/live/transcript-grouper.js.map +1 -1
  361. package/lib/live/transcript-grouper.mjs +8 -2
  362. package/lib/live/transcript-grouper.mjs.map +1 -1
  363. package/lib/parser.d.mts.map +1 -1
  364. package/lib/parser.d.ts.map +1 -1
  365. package/lib/parser.js +13 -0
  366. package/lib/parser.js.map +1 -1
  367. package/lib/parser.mjs +13 -0
  368. package/lib/parser.mjs.map +1 -1
  369. package/lib/responses/ResponseInputItems.d.mts.map +1 -1
  370. package/lib/responses/ResponseInputItems.d.ts.map +1 -1
  371. package/lib/responses/ResponseInputItems.js +11 -0
  372. package/lib/responses/ResponseInputItems.js.map +1 -1
  373. package/lib/responses/ResponseInputItems.mjs +11 -0
  374. package/lib/responses/ResponseInputItems.mjs.map +1 -1
  375. package/lib/responses/ResponseStream.d.mts.map +1 -1
  376. package/lib/responses/ResponseStream.d.ts.map +1 -1
  377. package/lib/responses/ResponseStream.js +7 -3
  378. package/lib/responses/ResponseStream.js.map +1 -1
  379. package/lib/responses/ResponseStream.mjs +8 -4
  380. package/lib/responses/ResponseStream.mjs.map +1 -1
  381. package/lib/responses/responses-websocket-lane.d.mts +63 -0
  382. package/lib/responses/responses-websocket-lane.d.mts.map +1 -0
  383. package/lib/responses/responses-websocket-lane.d.ts +63 -0
  384. package/lib/responses/responses-websocket-lane.d.ts.map +1 -0
  385. package/lib/responses/responses-websocket-lane.js +314 -0
  386. package/lib/responses/responses-websocket-lane.js.map +1 -0
  387. package/lib/responses/responses-websocket-lane.mjs +309 -0
  388. package/lib/responses/responses-websocket-lane.mjs.map +1 -0
  389. package/lib/responses/responses-websocket-session.d.mts +38 -0
  390. package/lib/responses/responses-websocket-session.d.mts.map +1 -0
  391. package/lib/responses/responses-websocket-session.d.ts +38 -0
  392. package/lib/responses/responses-websocket-session.d.ts.map +1 -0
  393. package/lib/responses/responses-websocket-session.js +268 -0
  394. package/lib/responses/responses-websocket-session.js.map +1 -0
  395. package/lib/responses/responses-websocket-session.mjs +263 -0
  396. package/lib/responses/responses-websocket-session.mjs.map +1 -0
  397. package/lib/transform.d.mts.map +1 -1
  398. package/lib/transform.d.ts.map +1 -1
  399. package/lib/transform.js +69 -33
  400. package/lib/transform.js.map +1 -1
  401. package/lib/transform.mjs +69 -33
  402. package/lib/transform.mjs.map +1 -1
  403. package/lib/webrtc/connection.d.mts.map +1 -1
  404. package/lib/webrtc/connection.d.ts.map +1 -1
  405. package/lib/webrtc/connection.js +6 -1
  406. package/lib/webrtc/connection.js.map +1 -1
  407. package/lib/webrtc/connection.mjs +6 -1
  408. package/lib/webrtc/connection.mjs.map +1 -1
  409. package/lib/webrtc/data-channel.d.mts.map +1 -1
  410. package/lib/webrtc/data-channel.d.ts.map +1 -1
  411. package/lib/webrtc/data-channel.js +9 -1
  412. package/lib/webrtc/data-channel.js.map +1 -1
  413. package/lib/webrtc/data-channel.mjs +9 -1
  414. package/lib/webrtc/data-channel.mjs.map +1 -1
  415. package/lib/webrtc/subscriptions.d.mts.map +1 -1
  416. package/lib/webrtc/subscriptions.d.ts.map +1 -1
  417. package/lib/webrtc/subscriptions.js +2 -0
  418. package/lib/webrtc/subscriptions.js.map +1 -1
  419. package/lib/webrtc/subscriptions.mjs +2 -0
  420. package/lib/webrtc/subscriptions.mjs.map +1 -1
  421. package/lib/webrtc/types.d.mts.map +1 -1
  422. package/lib/webrtc/types.d.ts.map +1 -1
  423. package/package.json +1 -1
  424. package/providers/bedrock/aws.d.mts.map +1 -1
  425. package/providers/bedrock/aws.d.ts.map +1 -1
  426. package/providers/bedrock/aws.js +4 -0
  427. package/providers/bedrock/aws.js.map +1 -1
  428. package/providers/bedrock/aws.mjs +4 -0
  429. package/providers/bedrock/aws.mjs.map +1 -1
  430. package/realtime/internal-base.d.mts.map +1 -1
  431. package/realtime/internal-base.d.ts.map +1 -1
  432. package/realtime/internal-base.js +1 -0
  433. package/realtime/internal-base.js.map +1 -1
  434. package/realtime/internal-base.mjs +1 -0
  435. package/realtime/internal-base.mjs.map +1 -1
  436. package/realtime/websocket.d.mts.map +1 -1
  437. package/realtime/websocket.d.ts.map +1 -1
  438. package/realtime/websocket.js +9 -1
  439. package/realtime/websocket.js.map +1 -1
  440. package/realtime/websocket.mjs +9 -1
  441. package/realtime/websocket.mjs.map +1 -1
  442. package/realtime/ws.d.mts.map +1 -1
  443. package/realtime/ws.d.ts.map +1 -1
  444. package/realtime/ws.js +3 -0
  445. package/realtime/ws.js.map +1 -1
  446. package/realtime/ws.mjs +3 -0
  447. package/realtime/ws.mjs.map +1 -1
  448. package/resources/beta/agents/agents.d.mts +2 -1
  449. package/resources/beta/agents/agents.d.mts.map +1 -1
  450. package/resources/beta/agents/agents.d.ts +2 -1
  451. package/resources/beta/agents/agents.d.ts.map +1 -1
  452. package/resources/beta/agents/agents.js.map +1 -1
  453. package/resources/beta/agents/agents.mjs.map +1 -1
  454. package/resources/beta/agents/sessions/sessions.d.mts +42 -1
  455. package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
  456. package/resources/beta/agents/sessions/sessions.d.ts +42 -1
  457. package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
  458. package/resources/beta/agents/sessions/sessions.js +2 -1
  459. package/resources/beta/agents/sessions/sessions.js.map +1 -1
  460. package/resources/beta/agents/sessions/sessions.mjs +2 -1
  461. package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
  462. package/resources/beta/beta.d.mts +2 -2
  463. package/resources/beta/beta.d.mts.map +1 -1
  464. package/resources/beta/beta.d.ts +2 -2
  465. package/resources/beta/beta.d.ts.map +1 -1
  466. package/resources/beta/beta.js.map +1 -1
  467. package/resources/beta/beta.mjs.map +1 -1
  468. package/resources/beta/index.d.mts +1 -1
  469. package/resources/beta/index.d.mts.map +1 -1
  470. package/resources/beta/index.d.ts +1 -1
  471. package/resources/beta/index.d.ts.map +1 -1
  472. package/resources/beta/index.js.map +1 -1
  473. package/resources/beta/index.mjs.map +1 -1
  474. package/resources/beta/responses/index.d.mts +1 -1
  475. package/resources/beta/responses/index.d.mts.map +1 -1
  476. package/resources/beta/responses/index.d.ts +1 -1
  477. package/resources/beta/responses/index.d.ts.map +1 -1
  478. package/resources/beta/responses/index.js.map +1 -1
  479. package/resources/beta/responses/index.mjs.map +1 -1
  480. package/resources/beta/responses/internal-base.d.mts +3 -0
  481. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  482. package/resources/beta/responses/internal-base.d.ts +3 -0
  483. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  484. package/resources/beta/responses/internal-base.js +21 -12
  485. package/resources/beta/responses/internal-base.js.map +1 -1
  486. package/resources/beta/responses/internal-base.mjs +21 -12
  487. package/resources/beta/responses/internal-base.mjs.map +1 -1
  488. package/resources/beta/responses/responses.d.mts +65 -7
  489. package/resources/beta/responses/responses.d.mts.map +1 -1
  490. package/resources/beta/responses/responses.d.ts +65 -7
  491. package/resources/beta/responses/responses.d.ts.map +1 -1
  492. package/resources/beta/responses/responses.js.map +1 -1
  493. package/resources/beta/responses/responses.mjs.map +1 -1
  494. package/resources/beta/responses/ws-base.d.mts +9 -1
  495. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  496. package/resources/beta/responses/ws-base.d.ts +9 -1
  497. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  498. package/resources/beta/responses/ws-base.js +24 -5
  499. package/resources/beta/responses/ws-base.js.map +1 -1
  500. package/resources/beta/responses/ws-base.mjs +23 -6
  501. package/resources/beta/responses/ws-base.mjs.map +1 -1
  502. package/resources/beta/responses/ws.d.mts +2 -0
  503. package/resources/beta/responses/ws.d.mts.map +1 -1
  504. package/resources/beta/responses/ws.d.ts +2 -0
  505. package/resources/beta/responses/ws.d.ts.map +1 -1
  506. package/resources/beta/responses/ws.js +21 -8
  507. package/resources/beta/responses/ws.js.map +1 -1
  508. package/resources/beta/responses/ws.mjs +21 -8
  509. package/resources/beta/responses/ws.mjs.map +1 -1
  510. package/resources/live/forks/internal-base.d.mts +3 -0
  511. package/resources/live/forks/internal-base.d.mts.map +1 -1
  512. package/resources/live/forks/internal-base.d.ts +3 -0
  513. package/resources/live/forks/internal-base.d.ts.map +1 -1
  514. package/resources/live/forks/internal-base.js +21 -5
  515. package/resources/live/forks/internal-base.js.map +1 -1
  516. package/resources/live/forks/internal-base.mjs +21 -5
  517. package/resources/live/forks/internal-base.mjs.map +1 -1
  518. package/resources/live/forks/ws.d.mts.map +1 -1
  519. package/resources/live/forks/ws.d.ts.map +1 -1
  520. package/resources/live/forks/ws.js +2 -4
  521. package/resources/live/forks/ws.js.map +1 -1
  522. package/resources/live/forks/ws.mjs +2 -4
  523. package/resources/live/forks/ws.mjs.map +1 -1
  524. package/resources/live/internal-base.d.mts +3 -0
  525. package/resources/live/internal-base.d.mts.map +1 -1
  526. package/resources/live/internal-base.d.ts +3 -0
  527. package/resources/live/internal-base.d.ts.map +1 -1
  528. package/resources/live/internal-base.js +21 -5
  529. package/resources/live/internal-base.js.map +1 -1
  530. package/resources/live/internal-base.mjs +21 -5
  531. package/resources/live/internal-base.mjs.map +1 -1
  532. package/resources/live/sideband/internal-base.d.mts +3 -0
  533. package/resources/live/sideband/internal-base.d.mts.map +1 -1
  534. package/resources/live/sideband/internal-base.d.ts +3 -0
  535. package/resources/live/sideband/internal-base.d.ts.map +1 -1
  536. package/resources/live/sideband/internal-base.js +21 -5
  537. package/resources/live/sideband/internal-base.js.map +1 -1
  538. package/resources/live/sideband/internal-base.mjs +21 -5
  539. package/resources/live/sideband/internal-base.mjs.map +1 -1
  540. package/resources/live/sideband/ws.d.mts.map +1 -1
  541. package/resources/live/sideband/ws.d.ts.map +1 -1
  542. package/resources/live/sideband/ws.js +2 -4
  543. package/resources/live/sideband/ws.js.map +1 -1
  544. package/resources/live/sideband/ws.mjs +2 -4
  545. package/resources/live/sideband/ws.mjs.map +1 -1
  546. package/resources/live/ws.d.mts.map +1 -1
  547. package/resources/live/ws.d.ts.map +1 -1
  548. package/resources/live/ws.js +2 -4
  549. package/resources/live/ws.js.map +1 -1
  550. package/resources/live/ws.mjs +2 -4
  551. package/resources/live/ws.mjs.map +1 -1
  552. package/resources/responses/internal-base.d.mts +3 -0
  553. package/resources/responses/internal-base.d.mts.map +1 -1
  554. package/resources/responses/internal-base.d.ts +3 -0
  555. package/resources/responses/internal-base.d.ts.map +1 -1
  556. package/resources/responses/internal-base.js +21 -12
  557. package/resources/responses/internal-base.js.map +1 -1
  558. package/resources/responses/internal-base.mjs +21 -12
  559. package/resources/responses/internal-base.mjs.map +1 -1
  560. package/resources/responses/responses.d.mts +47 -4
  561. package/resources/responses/responses.d.mts.map +1 -1
  562. package/resources/responses/responses.d.ts +47 -4
  563. package/resources/responses/responses.d.ts.map +1 -1
  564. package/resources/responses/responses.js.map +1 -1
  565. package/resources/responses/responses.mjs.map +1 -1
  566. package/resources/responses/ws-base.d.mts +11 -1
  567. package/resources/responses/ws-base.d.mts.map +1 -1
  568. package/resources/responses/ws-base.d.ts +11 -1
  569. package/resources/responses/ws-base.d.ts.map +1 -1
  570. package/resources/responses/ws-base.js +29 -8
  571. package/resources/responses/ws-base.js.map +1 -1
  572. package/resources/responses/ws-base.mjs +28 -9
  573. package/resources/responses/ws-base.mjs.map +1 -1
  574. package/resources/responses/ws.d.mts +2 -0
  575. package/resources/responses/ws.d.mts.map +1 -1
  576. package/resources/responses/ws.d.ts +2 -0
  577. package/resources/responses/ws.d.ts.map +1 -1
  578. package/resources/responses/ws.js +21 -8
  579. package/resources/responses/ws.js.map +1 -1
  580. package/resources/responses/ws.mjs +21 -8
  581. package/resources/responses/ws.mjs.map +1 -1
  582. package/resources/shared.d.mts +1 -1
  583. package/resources/shared.d.mts.map +1 -1
  584. package/resources/shared.d.ts +1 -1
  585. package/resources/shared.d.ts.map +1 -1
  586. package/resources/webhooks/webhooks.d.mts +3 -4
  587. package/resources/webhooks/webhooks.d.mts.map +1 -1
  588. package/resources/webhooks/webhooks.d.ts +3 -4
  589. package/resources/webhooks/webhooks.d.ts.map +1 -1
  590. package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
  591. package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
  592. package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
  593. package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
  594. package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
  595. package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
  596. package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
  597. package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
  598. package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
  599. package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
  600. package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
  601. package/src/_vendor/zod-to-json-schema/util.ts +1 -0
  602. package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
  603. package/src/auth/subject-token-providers.ts +6 -1
  604. package/src/auth/workload-identity-auth.ts +10 -1
  605. package/src/auth/x509-transport.ts +13 -2
  606. package/src/azure.ts +3 -0
  607. package/src/bedrock.ts +5 -0
  608. package/src/beta/realtime/internal-base.ts +2 -0
  609. package/src/beta/realtime/websocket.ts +11 -1
  610. package/src/beta/realtime/ws.ts +3 -0
  611. package/src/client.ts +50 -3
  612. package/src/core/EventEmitter.ts +15 -0
  613. package/src/core/streaming.ts +30 -2
  614. package/src/helpers/audio.ts +2 -0
  615. package/src/helpers/standard-schema.ts +31 -19
  616. package/src/helpers/zod-v3-strict-schema.ts +8 -2
  617. package/src/helpers/zod.ts +32 -13
  618. package/src/internal/assistant-stream-delta.ts +7 -1
  619. package/src/internal/auth/x509-credential-options.ts +3 -0
  620. package/src/internal/auth/x509-token-exchange.ts +10 -1
  621. package/src/internal/auth/x509-transport-capability.ts +2 -1
  622. package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
  623. package/src/internal/bedrock.ts +15 -0
  624. package/src/internal/decoders/line.ts +1 -0
  625. package/src/internal/parse.ts +1 -0
  626. package/src/internal/provider.ts +3 -0
  627. package/src/internal/qs/stringify.ts +3 -0
  628. package/src/internal/qs/utils.ts +14 -3
  629. package/src/internal/responses/response-accumulator.ts +34 -4
  630. package/src/internal/to-file.ts +1 -1
  631. package/src/internal/uploads.ts +11 -1
  632. package/src/internal/utils/abort.ts +7 -2
  633. package/src/internal/utils/bytes.ts +2 -0
  634. package/src/internal/utils/path.ts +2 -0
  635. package/src/internal/utils/sleep.ts +52 -1
  636. package/src/internal/ws-adapter-browser.ts +2 -0
  637. package/src/internal/ws.ts +80 -6
  638. package/src/lib/AbstractChatCompletionRunner.ts +40 -17
  639. package/src/lib/AssistantStream.ts +31 -20
  640. package/src/lib/ChatCompletionRunner.ts +1 -0
  641. package/src/lib/ChatCompletionStream.ts +81 -14
  642. package/src/lib/EventEmitter.ts +15 -0
  643. package/src/lib/EventStream.ts +93 -3
  644. package/src/lib/ResponsesParser.ts +5 -0
  645. package/src/lib/RunnableFunction.ts +4 -1
  646. package/src/lib/agents/agent-session-stream.ts +5 -3
  647. package/src/lib/embeddings.ts +3 -1
  648. package/src/lib/live/transcript-grouper.ts +4 -0
  649. package/src/lib/parser.ts +16 -2
  650. package/src/lib/responses/ResponseInputItems.ts +11 -0
  651. package/src/lib/responses/ResponseStream.ts +6 -3
  652. package/src/lib/responses/responses-websocket-lane.ts +388 -0
  653. package/src/lib/responses/responses-websocket-session.ts +317 -0
  654. package/src/lib/transform.ts +70 -35
  655. package/src/lib/webrtc/connection.ts +5 -1
  656. package/src/lib/webrtc/data-channel.ts +7 -0
  657. package/src/lib/webrtc/subscriptions.ts +3 -0
  658. package/src/lib/webrtc/types.ts +1 -0
  659. package/src/providers/bedrock/aws.ts +5 -1
  660. package/src/realtime/internal-base.ts +2 -0
  661. package/src/realtime/websocket.ts +11 -1
  662. package/src/realtime/ws.ts +3 -0
  663. package/src/resources/beta/agents/agents.ts +2 -0
  664. package/src/resources/beta/agents/sessions/sessions.ts +47 -1
  665. package/src/resources/beta/beta.ts +2 -0
  666. package/src/resources/beta/index.ts +1 -0
  667. package/src/resources/beta/responses/index.ts +1 -0
  668. package/src/resources/beta/responses/internal-base.ts +24 -11
  669. package/src/resources/beta/responses/responses.ts +82 -4
  670. package/src/resources/beta/responses/ws-base.ts +31 -6
  671. package/src/resources/beta/responses/ws.ts +29 -11
  672. package/src/resources/live/forks/internal-base.ts +24 -5
  673. package/src/resources/live/forks/ws.ts +4 -5
  674. package/src/resources/live/internal-base.ts +24 -5
  675. package/src/resources/live/sideband/internal-base.ts +24 -5
  676. package/src/resources/live/sideband/ws.ts +4 -5
  677. package/src/resources/live/ws.ts +4 -5
  678. package/src/resources/responses/api.md +1 -0
  679. package/src/resources/responses/internal-base.ts +24 -11
  680. package/src/resources/responses/responses.ts +56 -1
  681. package/src/resources/responses/ws-base.ts +36 -9
  682. package/src/resources/responses/ws.ts +29 -11
  683. package/src/resources/shared.ts +4 -2
  684. package/src/resources/webhooks/webhooks.ts +3 -4
  685. package/src/version.ts +1 -1
  686. package/version.d.mts +1 -1
  687. package/version.d.ts +1 -1
  688. package/version.js +1 -1
  689. package/version.mjs +1 -1
@@ -20,7 +20,7 @@ import type {
20
20
  } from '../resources/beta/threads/runs/runs';
21
21
  import type { ReadableStream } from '../internal/shim-types';
22
22
  import { Stream } from '../streaming';
23
- import { APIError, APIUserAbortError, OpenAIError } from '../error';
23
+ import { APIError, OpenAIError } from '../error';
24
24
  import type {
25
25
  AssistantStreamEvent,
26
26
  MessageStreamEvent,
@@ -99,14 +99,13 @@ export type RunSubmitToolOutputsParamsStream = Omit<RunSubmitToolOutputsParamsBa
99
99
  stream?: true;
100
100
  };
101
101
 
102
- function stabilizeAssistantStreamEvent(event: AssistantStreamEvent): {
103
- event: AssistantStreamEvent;
104
- exposedEvent: AssistantStreamEvent;
105
- } {
102
+ function stabilizeAssistantStreamEvent(event: AssistantStreamEvent) {
106
103
  const eventDescriptor = Object.getOwnPropertyDescriptor(event, 'event');
107
104
  const dataDescriptor = Object.getOwnPropertyDescriptor(event, 'data');
108
- const eventType = Reflect.get(event, 'event', event) as AssistantStreamEvent['event'];
109
- const data = Reflect.get(event, 'data', event) as AssistantStreamEvent['data'];
105
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Reflective wire reads reject primitive frames and preserve the original event receiver.
106
+ const eventType: AssistantStreamEvent['event'] = Reflect.get(event, 'event', event);
107
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Keep the paired wire-data read on the original receiver after reading the event discriminator.
108
+ const data: AssistantStreamEvent['data'] = Reflect.get(event, 'data', event);
110
109
  let stableData = data;
111
110
  if (
112
111
  eventType === 'thread.message.created' ||
@@ -123,15 +122,24 @@ function stabilizeAssistantStreamEvent(event: AssistantStreamEvent): {
123
122
  eventType === 'thread.run.step.expired'
124
123
  ) {
125
124
  const messageID = Object.getOwnPropertyDescriptor(data, 'id');
126
- if (messageID && 'value' in messageID && Reflect.get(data, 'id', data) !== messageID.value) {
125
+ if (
126
+ messageID &&
127
+ 'value' in messageID &&
128
+ // SAFETY: The own id descriptor was found above; keep its live read unknown while comparing it with the captured descriptor value.
129
+ (data as { id: unknown }).id !== messageID.value
130
+ ) {
131
+ // SAFETY: Descriptor values are untyped; retaining this value as unknown avoids trusting a mutable message identifier.
127
132
  const canonicalID = messageID.value as unknown;
133
+ // SAFETY: The proxy retains the event data and substitutes only its captured own id; all other properties forward to the original receiver.
128
134
  stableData = new Proxy(data, {
129
135
  get(target, property) {
136
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys with the original target as accessor receiver.
130
137
  return property === 'id' ? canonicalID : Reflect.get(target, property, target);
131
138
  },
132
139
  }) as AssistantStreamEvent['data'];
133
140
  }
134
141
  }
142
+ // SAFETY: The captured event discriminator and data originate from the same event; TypeScript loses their correlation when constructing the stabilized copy.
135
143
  const stableEvent = Object.freeze({ event: eventType, data: stableData }) as AssistantStreamEvent;
136
144
  const ordinaryEvent =
137
145
  eventDescriptor !== undefined &&
@@ -142,6 +150,7 @@ function stabilizeAssistantStreamEvent(event: AssistantStreamEvent): {
142
150
  dataDescriptor.value === data &&
143
151
  stableData === data;
144
152
 
153
+ // SAFETY: The captured event discriminator and data originate from the same event; TypeScript loses their correlation when constructing the stabilized copy.
145
154
  return {
146
155
  event: stableEvent,
147
156
  exposedEvent: ordinaryEvent ? event : ({ event: eventType, data: stableData } as AssistantStreamEvent),
@@ -204,7 +213,7 @@ export class AssistantStream
204
213
  this.#addEvent(event);
205
214
  }
206
215
  if (stream.controller.signal?.aborted) {
207
- throw new APIUserAbortError();
216
+ throw this._userAbortError();
208
217
  }
209
218
  return this._addRun(this.#endRequest());
210
219
  }
@@ -252,7 +261,7 @@ export class AssistantStream
252
261
  this.#addEvent(event);
253
262
  }
254
263
  if (stream.controller.signal?.aborted) {
255
- throw new APIUserAbortError();
264
+ throw this._userAbortError();
256
265
  }
257
266
 
258
267
  return this._addRun(this.#endRequest());
@@ -358,7 +367,7 @@ export class AssistantStream
358
367
  this.#addEvent(event);
359
368
  }
360
369
  if (stream.controller.signal?.aborted) {
361
- throw new APIUserAbortError();
370
+ throw this._userAbortError();
362
371
  }
363
372
 
364
373
  return this._addRun(this.#endRequest());
@@ -381,7 +390,7 @@ export class AssistantStream
381
390
  this.#addEvent(event);
382
391
  }
383
392
  if (stream.controller.signal?.aborted) {
384
- throw new APIUserAbortError();
393
+ throw this._userAbortError();
385
394
  }
386
395
 
387
396
  return this._addRun(this.#endRequest());
@@ -777,6 +786,7 @@ export class AssistantStream
777
786
  ) {
778
787
  for (const toolCall of delta.step_details.tool_calls) {
779
788
  if (toolCall.index === this.#currentToolCallIndex) {
789
+ // SAFETY: The indexed tool call comes from this run-step snapshot after applying the delta for the same tool-call index.
780
790
  this.#emitExposed(
781
791
  'toolCallDelta',
782
792
  toolCall,
@@ -807,7 +817,7 @@ export class AssistantStream
807
817
  this.#activeRunStepID = undefined;
808
818
  const details = event.data.step_details;
809
819
  if (details.type === 'tool_calls' && this.#currentToolCall) {
810
- this.#emitExposed('toolCallDone', this.#currentToolCall as ToolCall);
820
+ this.#emitExposed('toolCallDone', this.#currentToolCall);
811
821
  }
812
822
  this.#emitExposed('runStepDone', event.data, accumulatedRunStep);
813
823
  this.#currentToolCallIndex = undefined;
@@ -844,6 +854,7 @@ export class AssistantStream
844
854
  }
845
855
 
846
856
  case 'thread.run.step.delta': {
857
+ // SAFETY: Run-step snapshots are stored by their canonical run-step id; the delta path checks that the snapshot exists before updating it.
847
858
  const snapshot = this.#runStepSnapshots[runStepID] as Runs.RunStep;
848
859
  if (!snapshot) {
849
860
  throw new Error('Received a RunStepDelta before creation of a snapshot');
@@ -856,10 +867,11 @@ export class AssistantStream
856
867
  if (hasOwn(delta, 'id')) {
857
868
  throw new OpenAIError('Run-step deltas must not contain an id field');
858
869
  }
859
- const accumulated = accumulateAssistantStreamDelta(snapshot, delta, true) as Runs.RunStep;
870
+ const accumulated = accumulateAssistantStreamDelta(snapshot, delta, true);
860
871
  this.#runStepSnapshots[runStepID] = accumulated;
861
872
  }
862
873
 
874
+ // SAFETY: Run-step snapshots are stored by their canonical run-step id; the delta path checks that the snapshot exists before updating it.
863
875
  return this.#runStepSnapshots[runStepID] as Runs.RunStep;
864
876
  }
865
877
 
@@ -874,7 +886,7 @@ export class AssistantStream
874
886
  }
875
887
 
876
888
  if (this.#runStepSnapshots[runStepID]) {
877
- return this.#runStepSnapshots[runStepID] as Runs.RunStep;
889
+ return this.#runStepSnapshots[runStepID];
878
890
  }
879
891
  throw new Error('No snapshot available');
880
892
  }
@@ -951,11 +963,10 @@ export class AssistantStream
951
963
  currentContent: MessageContent | undefined,
952
964
  cacheArrays: boolean,
953
965
  ): TextContentBlock | ImageFileContentBlock {
954
- return accumulateAssistantStreamDelta(
955
- currentContent as unknown as Record<any, any>,
956
- contentElement,
957
- cacheArrays,
958
- ) as TextContentBlock | ImageFileContentBlock;
966
+ // SAFETY: The accumulator merges the matching message-content delta into its existing block; the public return remains the text/image block union.
967
+ return accumulateAssistantStreamDelta(currentContent as Record<any, any>, contentElement, cacheArrays) as
968
+ | TextContentBlock
969
+ | ImageFileContentBlock;
959
970
  }
960
971
 
961
972
  /**
@@ -100,6 +100,7 @@ export class ChatCompletionRunner<ParsedT = null> extends AbstractChatCompletion
100
100
  ) {
101
101
  super._addMessage(message, emit, normalizeContent);
102
102
  if (emit && isAssistantMessage(message) && message.content) {
103
+ // SAFETY: The runner's content event preserves the existing string-content contract for assistant messages supplied by the API or caller.
103
104
  this._emit('content', message.content as string);
104
105
  }
105
106
  }
@@ -1,11 +1,5 @@
1
1
  import { MalformedJSON, partialParse } from '../_vendor/partial-json-parser/parser';
2
- import {
3
- APIError,
4
- APIUserAbortError,
5
- ContentFilterFinishReasonError,
6
- LengthFinishReasonError,
7
- OpenAIError,
8
- } from '../error';
2
+ import { APIError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from '../error';
9
3
  import type OpenAI from '../index';
10
4
  import { observeJSONRequestBody, type RequestOptions } from '../internal/request-options';
11
5
  import type { ReadableStream } from '../internal/shim-types';
@@ -35,8 +29,20 @@ import type {
35
29
  } from '../resources/chat/completions/completions';
36
30
  import { Stream } from '../streaming';
37
31
  import { AbstractChatCompletionRunner } from './AbstractChatCompletionRunner';
38
- import type { AbstractChatCompletionRunnerEvents } from './AbstractChatCompletionRunner';
32
+ import type { AbstractChatCompletionRunnerEvents, RunnerOptions } from './AbstractChatCompletionRunner';
33
+ import type {
34
+ ChatCompletionRunner,
35
+ ChatCompletionToolRunnerParamsWithContext,
36
+ ChatCompletionToolRunnerParamsWithoutContext,
37
+ } from './ChatCompletionRunner';
38
+ import type {
39
+ ChatCompletionStreamingRunner,
40
+ ChatCompletionStreamingToolRunnerParamsWithContext,
41
+ ChatCompletionStreamingToolRunnerParamsWithoutContext,
42
+ } from './ChatCompletionStreamingRunner';
43
+ import type { BaseFunctionsArgs } from './RunnableFunction';
39
44
 
45
+ // oxlint-disable-next-line anti-slop/no-unknown-returns -- Partial JSON may have any shape; callers validate or parse it against their response schema.
40
46
  function parseStructuredStreamingJSON(content: string): unknown {
41
47
  try {
42
48
  return partialParse(content);
@@ -218,6 +224,7 @@ export function makeChatCompletionReadableStreamMessageChunk(
218
224
  const payload: ChatCompletionReadableStreamMessage = {
219
225
  type: 'message',
220
226
  message,
227
+ // Spread creates an own data property without invoking inherited setters or changing the object prototype.
221
228
  ...(toolCallIds ? { tool_call_ids: toolCallIds } : {}),
222
229
  };
223
230
 
@@ -248,6 +255,7 @@ function getChatCompletionReadableStreamMessage(
248
255
  return item;
249
256
  }
250
257
 
258
+ // SAFETY: This decoder reads the SDK's tagged readable-stream envelope; JSON parsing restores its serialized message fields for the stream accumulator.
251
259
  return JSON.parse(
252
260
  item.object.slice(CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX.length),
253
261
  ) as ChatCompletionReadableStreamMessage;
@@ -465,16 +473,18 @@ function reservePartialJSONParse(state: PartialJSONParseState, budget: PartialJS
465
473
  }
466
474
 
467
475
  function captureStructuredJSONSnapshot(
468
- snapshot: object,
476
+ snapshot: ChatCompletionSnapshot.Choice.Message | ChatCompletionSnapshot.Choice.Message.ToolCall.Function,
469
477
  property: 'content' | 'arguments' | 'refusal',
470
478
  ): string | null | undefined {
471
479
  const descriptor = Object.getOwnPropertyDescriptor(snapshot, property);
472
480
  if (!descriptor) {
481
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
473
482
  let prototype = Object.getPrototypeOf(snapshot) as object | null;
474
483
  for (let depth = 0; prototype !== null; depth += 1) {
475
484
  if (depth >= MAX_PARTIAL_JSON_DEPTH || Object.getOwnPropertyDescriptor(prototype, property)) {
476
485
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
477
486
  }
487
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
478
488
  prototype = Object.getPrototypeOf(prototype) as object | null;
479
489
  }
480
490
  return undefined;
@@ -486,6 +496,7 @@ function captureStructuredJSONSnapshot(
486
496
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
487
497
  }
488
498
 
499
+ // SAFETY: The own data descriptor was explicitly checked to contain only a string, null, or undefined.
489
500
  return descriptor.value as string | null | undefined;
490
501
  }
491
502
 
@@ -502,22 +513,25 @@ function captureStructuredMessageSnapshot(
502
513
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
503
514
  }
504
515
 
516
+ // SAFETY: The choice contract supplies a message; the own data descriptor check prevents getters from changing which object is captured.
505
517
  return descriptor.value as ChatCompletionSnapshot.Choice.Message;
506
518
  }
507
519
 
508
520
  function captureSnapshotArray<Item>(
509
- snapshot: object,
521
+ snapshot: ChatCompletionSnapshot | ChatCompletionSnapshot.Choice.Message,
510
522
  property: 'choices' | 'tool_calls',
511
523
  maximum: number,
512
524
  kind: 'choice' | 'tool-call',
513
525
  ): Item[] | undefined {
514
526
  const descriptor = Object.getOwnPropertyDescriptor(snapshot, property);
515
527
  if (!descriptor) {
528
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
516
529
  let prototype = Object.getPrototypeOf(snapshot) as object | null;
517
530
  for (let depth = 0; prototype !== null; depth += 1) {
518
531
  if (depth >= MAX_PARTIAL_JSON_DEPTH || Object.getOwnPropertyDescriptor(prototype, property)) {
519
532
  throw new OpenAIError(`Chat completion stream contains an unsafe snapshot ${kind} collection`);
520
533
  }
534
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
521
535
  prototype = Object.getPrototypeOf(prototype) as object | null;
522
536
  }
523
537
  return undefined;
@@ -531,6 +545,7 @@ function captureSnapshotArray<Item>(
531
545
  throw new OpenAIError(`Chat completion stream exceeded its snapshot ${kind} limit`);
532
546
  }
533
547
 
548
+ // SAFETY: The captured data property is an array with a checked bounded length; Item comes from the owning snapshot collection's contract.
534
549
  return descriptor.value as Item[];
535
550
  }
536
551
 
@@ -543,6 +558,7 @@ function captureSnapshotArrayItem<Item>(array: Item[], index: number): Item | un
543
558
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
544
559
  }
545
560
 
561
+ // SAFETY: The descriptor is a data property of the typed Item array, so its value retains that array's element contract.
546
562
  return descriptor.value as Item;
547
563
  }
548
564
 
@@ -568,6 +584,7 @@ function mapCapturedSnapshotArray<Item, Mapped>(
568
584
  if (!('value' in item)) {
569
585
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
570
586
  }
587
+ // SAFETY: The descriptor is a data property of the typed Item array, so its value retains that array's element contract.
571
588
  mapped[index] = map(item.value as Item, index);
572
589
  }
573
590
 
@@ -616,6 +633,7 @@ function assertBoundToolCallIdentity(toolCall: PartialToolCallSnapshot, identity
616
633
  }
617
634
  }
618
635
 
636
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- This assignment primitive copies own properties from heterogeneous snapshot and delta objects.
619
637
  function assignOwnProperties<T extends object>(target: T, source: object): T {
620
638
  if (Object.prototype.propertyIsEnumerable.call(source, '__proto__') && !hasOwn(target, '__proto__')) {
621
639
  Object.defineProperty(target, '__proto__', {
@@ -641,6 +659,7 @@ function cloneParserConfigObject<Value extends object>(
641
659
  }
642
660
 
643
661
  descriptors[field] = {
662
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Generic config cloning must resolve inherited/accessor keys outside the declared config shape.
644
663
  value: descriptor && 'value' in descriptor ? descriptor.value : Reflect.get(value, field, value),
645
664
  enumerable: descriptor?.enumerable ?? false,
646
665
  configurable: descriptor?.configurable ?? true,
@@ -648,6 +667,7 @@ function cloneParserConfigObject<Value extends object>(
648
667
  };
649
668
  }
650
669
 
670
+ // SAFETY: The clone preserves the original prototype and descriptors, replacing only the parser metadata captured from that same value.
651
671
  return Object.create(Object.getPrototypeOf(value), descriptors) as Value;
652
672
  }
653
673
 
@@ -670,6 +690,7 @@ function snapshotChatCompletionParserParams(params: ChatCompletionCreateParams):
670
690
  continue;
671
691
  }
672
692
 
693
+ // SAFETY: This own data descriptor comes from the request's typed tools array; the following code captures its parser metadata.
673
694
  const tool = item.value as NonNullable<ChatCompletionCreateParams['tools']>[number];
674
695
  const stableTool = cloneParserConfigObject(tool, [
675
696
  'type',
@@ -690,6 +711,7 @@ function snapshotChatCompletionParserParams(params: ChatCompletionCreateParams):
690
711
  };
691
712
  }
692
713
 
714
+ // SAFETY: The cloned tool retains the original prototype and descriptors while substituting its captured parser configuration.
693
715
  stableTools[index] = Object.create(Object.getPrototypeOf(tool), descriptors) as typeof tool;
694
716
  }
695
717
  snapshot.tools = stableTools;
@@ -763,6 +785,7 @@ function canonicalSerializedParserSchema(
763
785
  return true;
764
786
  };
765
787
 
788
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
766
789
  const visit = (current: unknown, depth: number): CanonicalSerializedParserValue => {
767
790
  if (depth > MAX_SERIALIZED_PARSER_SCHEMA_DEPTH || budget.nodes >= MAX_SERIALIZED_PARSER_SCHEMA_NODES) {
768
791
  return UNSAFE_SERIALIZED_PARSER_VALUE;
@@ -792,6 +815,7 @@ function canonicalSerializedParserSchema(
792
815
  }
793
816
 
794
817
  const array = Array.isArray(current);
818
+ // SAFETY: Object.getPrototypeOf returns an object or null; the following traversal checks inherited properties without assuming a specific prototype type.
795
819
  const prototype = Object.getPrototypeOf(current) as object | null;
796
820
  if (
797
821
  (array && prototype !== Array.prototype) ||
@@ -923,7 +947,9 @@ function canonicalSerializedParserSchema(
923
947
 
924
948
  function rememberSerializedParserSchema(
925
949
  signatures: WeakMap<object, string>,
950
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- Parser owners are tracked by identity before their metadata descriptors are validated.
926
951
  source: object,
952
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- Serialized schema holders may be arbitrary objects with hostile accessors or prototypes.
927
953
  holder: object,
928
954
  key: string,
929
955
  ): void {
@@ -947,7 +973,9 @@ function rememberSerializedParserSchema(
947
973
 
948
974
  function hasMatchingSerializedParserSchema(
949
975
  signatures: WeakMap<object, string>,
976
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- Parser signatures belong to the original object identity, independent of its fields.
950
977
  source: object | undefined,
978
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- The schema holder is inspected through own descriptors before its contents are trusted.
951
979
  holder: object,
952
980
  key: string,
953
981
  value: unknown,
@@ -973,7 +1001,7 @@ function serializedParserDescriptor(
973
1001
 
974
1002
  function shadowSerializedParserMetadata(
975
1003
  descriptors: PropertyDescriptorMap,
976
- source: object,
1004
+ source: ChatCompletionInputTool | ChatCompletionResponseFormat,
977
1005
  fields: readonly string[],
978
1006
  ): void {
979
1007
  for (const field of fields) {
@@ -994,6 +1022,7 @@ function shadowSerializedParserMetadata(
994
1022
  }
995
1023
 
996
1024
  function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): ChatCompletionInputTool {
1025
+ // SAFETY: The fallback is a serialization scaffold: the code below installs the captured wire fields before the tool is returned.
997
1026
  const source =
998
1027
  serialized.source ??
999
1028
  ({
@@ -1008,10 +1037,12 @@ function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): C
1008
1037
  descriptors.function = serializedParserDescriptor(descriptors.function, undefined);
1009
1038
  }
1010
1039
  shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw', '$callback']);
1040
+ // SAFETY: The descriptors reconstruct the tool's captured serialized fields and shadow parser metadata while retaining its original prototype.
1011
1041
  return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionInputTool;
1012
1042
  }
1013
1043
 
1014
1044
  const descriptor = descriptors.function;
1045
+ // SAFETY: The preceding guard proves this data descriptor contains a non-null object; no more specific type is assumed.
1015
1046
  const original =
1016
1047
  descriptor && 'value' in descriptor && typeof descriptor.value === 'object' && descriptor.value !== null
1017
1048
  ? (descriptor.value as object)
@@ -1033,21 +1064,25 @@ function snapshotSerializedParserTool(serialized: SerializedToolParserConfig): C
1033
1064
  shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw', '$callback']);
1034
1065
  }
1035
1066
 
1067
+ // SAFETY: The descriptors reconstruct the tool's captured serialized fields and shadow parser metadata while retaining its original prototype.
1036
1068
  return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionInputTool;
1037
1069
  }
1038
1070
 
1039
1071
  function snapshotSerializedResponseFormat(
1040
1072
  serialized: SerializedResponseParserConfig,
1041
1073
  ): ChatCompletionResponseFormat {
1074
+ // SAFETY: The fallback seeds only the discriminator; the captured response-format fields are installed below before returning it.
1042
1075
  const source = serialized.source ?? ({ type: serialized.type } as ChatCompletionResponseFormat);
1043
1076
  const descriptors = Object.getOwnPropertyDescriptors(source);
1044
1077
  descriptors.type = serializedParserDescriptor(descriptors.type, serialized.type);
1045
1078
  if (serialized.type !== 'json_schema' || !serialized.source || !serialized.schemaMatches) {
1046
1079
  shadowSerializedParserMetadata(descriptors, source, ['$brand', '$parseRaw']);
1047
1080
  }
1081
+ // SAFETY: The descriptors restore the captured response-format fields and parser metadata on the original prototype.
1048
1082
  return Object.create(Object.getPrototypeOf(source), descriptors) as ChatCompletionResponseFormat;
1049
1083
  }
1050
1084
 
1085
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- The serialization visitor accepts arbitrary object and array holders, inspecting own descriptors only.
1051
1086
  function ownSerializedParserObject(holder: object, key: string): object | undefined {
1052
1087
  const descriptor = Object.getOwnPropertyDescriptor(holder, key);
1053
1088
  if (!descriptor || !('value' in descriptor)) {
@@ -1126,6 +1161,8 @@ function observeSerializedChatCompletionParserParams(
1126
1161
  if (Array.isArray(value)) {
1127
1162
  tools = new Proxy(value, {
1128
1163
  get(target, property) {
1164
+ // SAFETY: Proxy property values may be arbitrary; unknown preserves that uncertainty before the property-specific checks below.
1165
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys with the original target as accessor receiver.
1129
1166
  const actual = Reflect.get(target, property, target) as unknown;
1130
1167
  if (typeof property === 'string') {
1131
1168
  const index = Number(property);
@@ -1254,6 +1291,7 @@ export class ChatCompletionStream<ParsedT = null>
1254
1291
  implements AsyncIterable<ChatCompletionChunk>
1255
1292
  {
1256
1293
  #params: ChatCompletionCreateParams | null;
1294
+ #rejectsUnfinishedTurns = false;
1257
1295
  #audioDoneChoiceIndexes: Set<number>;
1258
1296
  #choiceEventStates: ChoiceEventState[];
1259
1297
  #currentChatCompletionSnapshot: ChatCompletionSnapshot | undefined;
@@ -1276,6 +1314,7 @@ export class ChatCompletionStream<ParsedT = null>
1276
1314
  if (!descriptor || !('value' in descriptor)) {
1277
1315
  continue;
1278
1316
  }
1317
+ // SAFETY: The descriptor is read from the typed request tools array and checked as an own data property before accessing the tool.
1279
1318
  const tool = descriptor.value as ChatCompletionInputTool;
1280
1319
  if (
1281
1320
  isChatCompletionFunctionTool(tool) &&
@@ -1313,6 +1352,7 @@ export class ChatCompletionStream<ParsedT = null>
1313
1352
  params: ChatCompletionStreamParams,
1314
1353
  options?: RequestOptions,
1315
1354
  ): ChatCompletionStream<ParsedT> {
1355
+ // SAFETY: The runner forces stream: true when sending this request; the same parameters retain the caller's parsing configuration.
1316
1356
  const runner = new ChatCompletionStream<ParsedT>(params as ChatCompletionCreateParamsStreaming);
1317
1357
  runner._run(() =>
1318
1358
  runner._runChatCompletion(
@@ -1490,10 +1530,12 @@ export class ChatCompletionStream<ParsedT = null>
1490
1530
  }
1491
1531
 
1492
1532
  if (toolCallSnapshot.type === 'function') {
1533
+ // SAFETY: The find predicate verifies the function-tool discriminator before matching its name; the cast carries that refinement through find.
1493
1534
  const inputTool = this.#params?.tools?.find(
1494
1535
  (tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name,
1495
1536
  ) as ChatCompletionFunctionTool | undefined; // TS doesn't narrow based on isChatCompletionTool
1496
1537
 
1538
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- The initial null is replaced with an arbitrary tool-parser result after snapshot validation.
1497
1539
  let parsedArguments: unknown = null;
1498
1540
  const parseable = isAutoParsableTool(inputTool) || inputTool?.function.strict === true;
1499
1541
  let argumentsSnapshot: string;
@@ -1680,6 +1722,7 @@ export class ChatCompletionStream<ParsedT = null>
1680
1722
  if (!descriptor || !('value' in descriptor)) {
1681
1723
  throw new OpenAIError('Chat completion stream contains an unsafe structured JSON snapshot');
1682
1724
  }
1725
+ // SAFETY: The tool-call function is captured through an own data descriptor; its fields are subsequently checked by the structured snapshot reader.
1683
1726
  const fn = descriptor.value as ChatCompletionSnapshot.Choice.Message.ToolCall.Function;
1684
1727
  const argumentsSnapshot = captureStructuredJSONSnapshot(fn, 'arguments');
1685
1728
  if (typeof argumentsSnapshot !== 'string') {
@@ -1717,6 +1760,21 @@ export class ChatCompletionStream<ParsedT = null>
1717
1760
  return finalizeChatCompletion(snapshot, this.#params, audioDoneChoiceIndexes, validatedMessages);
1718
1761
  }
1719
1762
 
1763
+ /** Rejects unfinished turns before tool callbacks while preserving ordinary stream and replay behavior. */
1764
+ protected override _runTools<FunctionsArgs extends BaseFunctionsArgs, ToolContext>(
1765
+ client: OpenAI,
1766
+ params:
1767
+ | ChatCompletionToolRunnerParamsWithContext<FunctionsArgs, ToolContext>
1768
+ | ChatCompletionToolRunnerParamsWithoutContext<FunctionsArgs>
1769
+ | ChatCompletionStreamingToolRunnerParamsWithContext<FunctionsArgs, ToolContext>
1770
+ | ChatCompletionStreamingToolRunnerParamsWithoutContext<FunctionsArgs>,
1771
+ runner: ChatCompletionRunner<any> | ChatCompletionStreamingRunner<any>,
1772
+ options?: RunnerOptions,
1773
+ ): Promise<void> {
1774
+ this.#rejectsUnfinishedTurns = true;
1775
+ return super._runTools(client, params, runner, options);
1776
+ }
1777
+
1720
1778
  protected override async _createChatCompletion(
1721
1779
  client: OpenAI,
1722
1780
  params: ChatCompletionCreateParams,
@@ -1757,7 +1815,7 @@ export class ChatCompletionStream<ParsedT = null>
1757
1815
  this.#addChunk(chunk);
1758
1816
  }
1759
1817
  if (stream.controller.signal?.aborted) {
1760
- throw new APIUserAbortError();
1818
+ throw this._userAbortError();
1761
1819
  }
1762
1820
  return this._addChatCompletion(this.#endRequest());
1763
1821
  }
@@ -1810,7 +1868,7 @@ export class ChatCompletionStream<ParsedT = null>
1810
1868
  }
1811
1869
  }
1812
1870
  if (stream.controller.signal?.aborted) {
1813
- throw new APIUserAbortError();
1871
+ throw this._userAbortError();
1814
1872
  }
1815
1873
  if (this.#currentChatCompletionSnapshot) {
1816
1874
  return this._addChatCompletion(this.#endRequest());
@@ -1896,7 +1954,7 @@ export class ChatCompletionStream<ParsedT = null>
1896
1954
  if (finish_reason) {
1897
1955
  choice.finish_reason = finish_reason;
1898
1956
 
1899
- if (this.#params && hasAutoParseableInput(this.#params)) {
1957
+ if (this.#params && (this.#rejectsUnfinishedTurns || hasAutoParseableInput(this.#params))) {
1900
1958
  if (finish_reason === 'length') {
1901
1959
  throw new LengthFinishReasonError();
1902
1960
  }
@@ -1915,6 +1973,7 @@ export class ChatCompletionStream<ParsedT = null>
1915
1973
  } // Shouldn't happen; just in case.
1916
1974
 
1917
1975
  this.#audioDoneChoiceIndexes.delete(index);
1976
+ // SAFETY: Streaming audio fields arrive incrementally even though the generated delta type omits them; each present field is merged below.
1918
1977
  const { audio, content, refusal, function_call, role, ...capturedDeltaFields } =
1919
1978
  delta as typeof delta & {
1920
1979
  audio?: Partial<ChatCompletionAudio> | null;
@@ -2001,6 +2060,7 @@ export class ChatCompletionStream<ParsedT = null>
2001
2060
  // Tool calls are built up across chunks, so while the stream is in progress the
2002
2061
  // entries are only partially filled in; they match `ChatCompletionSnapshot.Choice.Message.ToolCall`
2003
2062
  // once every delta for them has been accumulated.
2063
+ // SAFETY: This SDK-owned collection holds partial tool calls during accumulation; finalization checks required fields before exposing completed calls.
2004
2064
  const toolCallSnapshots = (choice.message.tool_calls ??= []) as PartialToolCallSnapshot[];
2005
2065
 
2006
2066
  for (const toolCallDelta of tool_calls) {
@@ -2159,6 +2219,7 @@ function finalizeChatCompletion<ParsedT>(
2159
2219
  }
2160
2220
  const stableChoice = new Proxy(choice, {
2161
2221
  get(target, property, receiver) {
2222
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
2162
2223
  return property === 'message' ? validated.message : Reflect.get(target, property, receiver);
2163
2224
  },
2164
2225
  });
@@ -2174,6 +2235,7 @@ function finalizeChatCompletion<ParsedT>(
2174
2235
  if (property === 'tool_calls') {
2175
2236
  return validated.toolCallCollection;
2176
2237
  }
2238
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
2177
2239
  return Reflect.get(target, property, receiver);
2178
2240
  },
2179
2241
  });
@@ -2186,7 +2248,9 @@ function finalizeChatCompletion<ParsedT>(
2186
2248
  throw new OpenAIError(`missing finish_reason for choice ${index}`);
2187
2249
  }
2188
2250
 
2251
+ // SAFETY: The completed API response contract supplies the audio fields; this preserves the existing pass-through behavior at finalization.
2189
2252
  const audioResponse = audio ? { audio: audio as ChatCompletionAudio } : {};
2253
+ // SAFETY: The API completion contract uses assistant role; retaining the wire role preserves existing behavior without adding runtime rejection.
2190
2254
  const role = message.role as 'assistant'; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.
2191
2255
  if (!role) {
2192
2256
  throw new OpenAIError(`missing role for choice ${index}`);
@@ -2262,6 +2326,7 @@ function finalizeChatCompletion<ParsedT>(
2262
2326
  if (property === 'name') {
2263
2327
  return captured.name;
2264
2328
  }
2329
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
2265
2330
  return Reflect.get(target, property, receiver);
2266
2331
  },
2267
2332
  });
@@ -2275,6 +2340,7 @@ function finalizeChatCompletion<ParsedT>(
2275
2340
  if (property === 'function') {
2276
2341
  return stableFunction;
2277
2342
  }
2343
+ // oxlint-disable-next-line anti-slop/no-reflect-get -- Proxy forwarding must preserve arbitrary keys and the original accessor receiver.
2278
2344
  return Reflect.get(target, property, receiver);
2279
2345
  },
2280
2346
  })
@@ -2329,6 +2395,7 @@ function finalizeChatCompletion<ParsedT>(
2329
2395
  created,
2330
2396
  model,
2331
2397
  object: 'chat.completion',
2398
+ // Spread creates an own data property without invoking inherited setters or changing the object prototype.
2332
2399
  ...(system_fingerprint ? { system_fingerprint } : {}),
2333
2400
  };
2334
2401