openai 6.44.0 → 6.46.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 (482) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +85 -102
  3. package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
  4. package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
  5. package/_vendor/zod-to-json-schema/parseDef.js +41 -15
  6. package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
  7. package/_vendor/zod-to-json-schema/parseDef.mjs +41 -15
  8. package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
  9. package/_vendor/zod-to-json-schema/parsers/branded.d.mts +1 -1
  10. package/_vendor/zod-to-json-schema/parsers/branded.d.mts.map +1 -1
  11. package/_vendor/zod-to-json-schema/parsers/branded.d.ts +1 -1
  12. package/_vendor/zod-to-json-schema/parsers/branded.d.ts.map +1 -1
  13. package/_vendor/zod-to-json-schema/parsers/branded.js +2 -2
  14. package/_vendor/zod-to-json-schema/parsers/branded.js.map +1 -1
  15. package/_vendor/zod-to-json-schema/parsers/branded.mjs +2 -2
  16. package/_vendor/zod-to-json-schema/parsers/branded.mjs.map +1 -1
  17. package/_vendor/zod-to-json-schema/parsers/catch.d.mts +1 -1
  18. package/_vendor/zod-to-json-schema/parsers/catch.d.mts.map +1 -1
  19. package/_vendor/zod-to-json-schema/parsers/catch.d.ts +1 -1
  20. package/_vendor/zod-to-json-schema/parsers/catch.d.ts.map +1 -1
  21. package/_vendor/zod-to-json-schema/parsers/catch.js +2 -2
  22. package/_vendor/zod-to-json-schema/parsers/catch.js.map +1 -1
  23. package/_vendor/zod-to-json-schema/parsers/catch.mjs +2 -2
  24. package/_vendor/zod-to-json-schema/parsers/catch.mjs.map +1 -1
  25. package/_vendor/zod-to-json-schema/parsers/default.d.mts +1 -1
  26. package/_vendor/zod-to-json-schema/parsers/default.d.mts.map +1 -1
  27. package/_vendor/zod-to-json-schema/parsers/default.d.ts +1 -1
  28. package/_vendor/zod-to-json-schema/parsers/default.d.ts.map +1 -1
  29. package/_vendor/zod-to-json-schema/parsers/default.js +2 -2
  30. package/_vendor/zod-to-json-schema/parsers/default.js.map +1 -1
  31. package/_vendor/zod-to-json-schema/parsers/default.mjs +2 -2
  32. package/_vendor/zod-to-json-schema/parsers/default.mjs.map +1 -1
  33. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts +1 -1
  34. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
  35. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts +1 -1
  36. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  37. package/_vendor/zod-to-json-schema/parsers/nullable.js +2 -2
  38. package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
  39. package/_vendor/zod-to-json-schema/parsers/nullable.mjs +2 -2
  40. package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
  41. package/_vendor/zod-to-json-schema/parsers/optional.d.mts +1 -1
  42. package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
  43. package/_vendor/zod-to-json-schema/parsers/optional.d.ts +1 -1
  44. package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
  45. package/_vendor/zod-to-json-schema/parsers/optional.js +3 -3
  46. package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
  47. package/_vendor/zod-to-json-schema/parsers/optional.mjs +3 -3
  48. package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
  49. package/_vendor/zod-to-json-schema/parsers/pipeline.d.mts +1 -1
  50. package/_vendor/zod-to-json-schema/parsers/pipeline.d.mts.map +1 -1
  51. package/_vendor/zod-to-json-schema/parsers/pipeline.d.ts +1 -1
  52. package/_vendor/zod-to-json-schema/parsers/pipeline.d.ts.map +1 -1
  53. package/_vendor/zod-to-json-schema/parsers/pipeline.js +3 -3
  54. package/_vendor/zod-to-json-schema/parsers/pipeline.js.map +1 -1
  55. package/_vendor/zod-to-json-schema/parsers/pipeline.mjs +3 -3
  56. package/_vendor/zod-to-json-schema/parsers/pipeline.mjs.map +1 -1
  57. package/_vendor/zod-to-json-schema/parsers/promise.d.mts +1 -1
  58. package/_vendor/zod-to-json-schema/parsers/promise.d.mts.map +1 -1
  59. package/_vendor/zod-to-json-schema/parsers/promise.d.ts +1 -1
  60. package/_vendor/zod-to-json-schema/parsers/promise.d.ts.map +1 -1
  61. package/_vendor/zod-to-json-schema/parsers/promise.js +2 -2
  62. package/_vendor/zod-to-json-schema/parsers/promise.js.map +1 -1
  63. package/_vendor/zod-to-json-schema/parsers/promise.mjs +2 -2
  64. package/_vendor/zod-to-json-schema/parsers/promise.mjs.map +1 -1
  65. package/_vendor/zod-to-json-schema/parsers/readonly.d.mts +1 -1
  66. package/_vendor/zod-to-json-schema/parsers/readonly.d.mts.map +1 -1
  67. package/_vendor/zod-to-json-schema/parsers/readonly.d.ts +1 -1
  68. package/_vendor/zod-to-json-schema/parsers/readonly.d.ts.map +1 -1
  69. package/_vendor/zod-to-json-schema/parsers/readonly.js +2 -2
  70. package/_vendor/zod-to-json-schema/parsers/readonly.js.map +1 -1
  71. package/_vendor/zod-to-json-schema/parsers/readonly.mjs +2 -2
  72. package/_vendor/zod-to-json-schema/parsers/readonly.mjs.map +1 -1
  73. package/auth/workload-identity-auth.d.mts.map +1 -1
  74. package/auth/workload-identity-auth.d.ts.map +1 -1
  75. package/auth/workload-identity-auth.js +12 -4
  76. package/auth/workload-identity-auth.js.map +1 -1
  77. package/auth/workload-identity-auth.mjs +13 -5
  78. package/auth/workload-identity-auth.mjs.map +1 -1
  79. package/azure.d.mts +3 -1
  80. package/azure.d.mts.map +1 -1
  81. package/azure.d.ts +3 -1
  82. package/azure.d.ts.map +1 -1
  83. package/azure.js.map +1 -1
  84. package/azure.mjs.map +1 -1
  85. package/beta/realtime/internal-base.d.mts +14 -1
  86. package/beta/realtime/internal-base.d.mts.map +1 -1
  87. package/beta/realtime/internal-base.d.ts +14 -1
  88. package/beta/realtime/internal-base.d.ts.map +1 -1
  89. package/beta/realtime/internal-base.js +21 -5
  90. package/beta/realtime/internal-base.js.map +1 -1
  91. package/beta/realtime/internal-base.mjs +21 -5
  92. package/beta/realtime/internal-base.mjs.map +1 -1
  93. package/beta/realtime/websocket.d.mts +3 -5
  94. package/beta/realtime/websocket.d.mts.map +1 -1
  95. package/beta/realtime/websocket.d.ts +3 -5
  96. package/beta/realtime/websocket.d.ts.map +1 -1
  97. package/beta/realtime/websocket.js +2 -3
  98. package/beta/realtime/websocket.js.map +1 -1
  99. package/beta/realtime/websocket.mjs +3 -4
  100. package/beta/realtime/websocket.mjs.map +1 -1
  101. package/beta/realtime/ws.d.mts +3 -5
  102. package/beta/realtime/ws.d.mts.map +1 -1
  103. package/beta/realtime/ws.d.ts +3 -5
  104. package/beta/realtime/ws.d.ts.map +1 -1
  105. package/beta/realtime/ws.js +2 -3
  106. package/beta/realtime/ws.js.map +1 -1
  107. package/beta/realtime/ws.mjs +3 -4
  108. package/beta/realtime/ws.mjs.map +1 -1
  109. package/client.d.mts +9 -1
  110. package/client.d.mts.map +1 -1
  111. package/client.d.ts +9 -1
  112. package/client.d.ts.map +1 -1
  113. package/client.js +56 -9
  114. package/client.js.map +1 -1
  115. package/client.mjs +56 -9
  116. package/client.mjs.map +1 -1
  117. package/helpers/audio.d.mts.map +1 -1
  118. package/helpers/audio.d.ts.map +1 -1
  119. package/helpers/audio.js +16 -3
  120. package/helpers/audio.js.map +1 -1
  121. package/helpers/audio.mjs +17 -4
  122. package/helpers/audio.mjs.map +1 -1
  123. package/helpers/zod.d.mts.map +1 -1
  124. package/helpers/zod.d.ts.map +1 -1
  125. package/helpers/zod.js +12 -0
  126. package/helpers/zod.js.map +1 -1
  127. package/helpers/zod.mjs +12 -0
  128. package/helpers/zod.mjs.map +1 -1
  129. package/internal/bedrock.d.mts +34 -0
  130. package/internal/bedrock.d.mts.map +1 -0
  131. package/internal/bedrock.d.ts +34 -0
  132. package/internal/bedrock.d.ts.map +1 -0
  133. package/internal/bedrock.js +107 -0
  134. package/internal/bedrock.js.map +1 -0
  135. package/internal/bedrock.mjs +99 -0
  136. package/internal/bedrock.mjs.map +1 -0
  137. package/internal/provider.d.mts +23 -0
  138. package/internal/provider.d.mts.map +1 -0
  139. package/internal/provider.d.ts +23 -0
  140. package/internal/provider.d.ts.map +1 -0
  141. package/internal/provider.js +36 -0
  142. package/internal/provider.js.map +1 -0
  143. package/internal/provider.mjs +32 -0
  144. package/internal/provider.mjs.map +1 -0
  145. package/internal/utils/log.d.mts.map +1 -1
  146. package/internal/utils/log.d.ts.map +1 -1
  147. package/internal/utils/log.js +1 -0
  148. package/internal/utils/log.js.map +1 -1
  149. package/internal/utils/log.mjs +1 -0
  150. package/internal/utils/log.mjs.map +1 -1
  151. package/lib/AbstractChatCompletionRunner.d.mts +15 -4
  152. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  153. package/lib/AbstractChatCompletionRunner.d.ts +15 -4
  154. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  155. package/lib/AbstractChatCompletionRunner.js +77 -40
  156. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  157. package/lib/AbstractChatCompletionRunner.mjs +77 -40
  158. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  159. package/lib/AssistantStream.d.mts.map +1 -1
  160. package/lib/AssistantStream.d.ts.map +1 -1
  161. package/lib/AssistantStream.js +5 -25
  162. package/lib/AssistantStream.js.map +1 -1
  163. package/lib/AssistantStream.mjs +5 -25
  164. package/lib/AssistantStream.mjs.map +1 -1
  165. package/lib/ChatCompletionRunner.js +1 -1
  166. package/lib/ChatCompletionRunner.js.map +1 -1
  167. package/lib/ChatCompletionRunner.mjs +1 -1
  168. package/lib/ChatCompletionRunner.mjs.map +1 -1
  169. package/lib/ChatCompletionStream.d.mts.map +1 -1
  170. package/lib/ChatCompletionStream.d.ts.map +1 -1
  171. package/lib/ChatCompletionStream.js +11 -17
  172. package/lib/ChatCompletionStream.js.map +1 -1
  173. package/lib/ChatCompletionStream.mjs +11 -17
  174. package/lib/ChatCompletionStream.mjs.map +1 -1
  175. package/lib/ChatCompletionStreamingRunner.js +1 -1
  176. package/lib/ChatCompletionStreamingRunner.js.map +1 -1
  177. package/lib/ChatCompletionStreamingRunner.mjs +1 -1
  178. package/lib/ChatCompletionStreamingRunner.mjs.map +1 -1
  179. package/lib/EventEmitter.d.mts.map +1 -1
  180. package/lib/EventEmitter.d.ts.map +1 -1
  181. package/lib/EventEmitter.js +12 -2
  182. package/lib/EventEmitter.js.map +1 -1
  183. package/lib/EventEmitter.mjs +12 -2
  184. package/lib/EventEmitter.mjs.map +1 -1
  185. package/lib/EventStream.d.mts +1 -0
  186. package/lib/EventStream.d.mts.map +1 -1
  187. package/lib/EventStream.d.ts +1 -0
  188. package/lib/EventStream.d.ts.map +1 -1
  189. package/lib/EventStream.js +19 -2
  190. package/lib/EventStream.js.map +1 -1
  191. package/lib/EventStream.mjs +19 -2
  192. package/lib/EventStream.mjs.map +1 -1
  193. package/lib/ResponsesParser.d.mts.map +1 -1
  194. package/lib/ResponsesParser.d.ts.map +1 -1
  195. package/lib/ResponsesParser.js +12 -4
  196. package/lib/ResponsesParser.js.map +1 -1
  197. package/lib/ResponsesParser.mjs +12 -4
  198. package/lib/ResponsesParser.mjs.map +1 -1
  199. package/lib/responses/ResponseAccumulator.d.mts +15 -0
  200. package/lib/responses/ResponseAccumulator.d.mts.map +1 -0
  201. package/lib/responses/ResponseAccumulator.d.ts +15 -0
  202. package/lib/responses/ResponseAccumulator.d.ts.map +1 -0
  203. package/lib/responses/ResponseAccumulator.js +403 -0
  204. package/lib/responses/ResponseAccumulator.js.map +1 -0
  205. package/lib/responses/ResponseAccumulator.mjs +400 -0
  206. package/lib/responses/ResponseAccumulator.mjs.map +1 -0
  207. package/lib/responses/ResponseInputItems.d.mts +19 -0
  208. package/lib/responses/ResponseInputItems.d.mts.map +1 -0
  209. package/lib/responses/ResponseInputItems.d.ts +19 -0
  210. package/lib/responses/ResponseInputItems.d.ts.map +1 -0
  211. package/lib/responses/ResponseInputItems.js +104 -0
  212. package/lib/responses/ResponseInputItems.js.map +1 -0
  213. package/lib/responses/ResponseInputItems.mjs +100 -0
  214. package/lib/responses/ResponseInputItems.mjs.map +1 -0
  215. package/lib/responses/ResponseStream.d.mts.map +1 -1
  216. package/lib/responses/ResponseStream.d.ts.map +1 -1
  217. package/lib/responses/ResponseStream.js +5 -90
  218. package/lib/responses/ResponseStream.js.map +1 -1
  219. package/lib/responses/ResponseStream.mjs +5 -90
  220. package/lib/responses/ResponseStream.mjs.map +1 -1
  221. package/package.json +24 -1
  222. package/providers/bedrock/aws.d.mts +24 -0
  223. package/providers/bedrock/aws.d.mts.map +1 -0
  224. package/providers/bedrock/aws.d.ts +24 -0
  225. package/providers/bedrock/aws.d.ts.map +1 -0
  226. package/providers/bedrock/aws.js +170 -0
  227. package/providers/bedrock/aws.js.map +1 -0
  228. package/providers/bedrock/aws.mjs +166 -0
  229. package/providers/bedrock/aws.mjs.map +1 -0
  230. package/providers/bedrock.d.mts +7 -0
  231. package/providers/bedrock.d.mts.map +1 -0
  232. package/providers/bedrock.d.ts +7 -0
  233. package/providers/bedrock.d.ts.map +1 -0
  234. package/providers/bedrock.js +26 -0
  235. package/providers/bedrock.js.map +1 -0
  236. package/providers/bedrock.mjs +22 -0
  237. package/providers/bedrock.mjs.map +1 -0
  238. package/realtime/internal-base.d.mts +28 -1
  239. package/realtime/internal-base.d.mts.map +1 -1
  240. package/realtime/internal-base.d.ts +28 -1
  241. package/realtime/internal-base.d.ts.map +1 -1
  242. package/realtime/internal-base.js +50 -7
  243. package/realtime/internal-base.js.map +1 -1
  244. package/realtime/internal-base.mjs +49 -7
  245. package/realtime/internal-base.mjs.map +1 -1
  246. package/realtime/websocket.d.mts +4 -7
  247. package/realtime/websocket.d.mts.map +1 -1
  248. package/realtime/websocket.d.ts +4 -7
  249. package/realtime/websocket.d.ts.map +1 -1
  250. package/realtime/websocket.js +4 -8
  251. package/realtime/websocket.js.map +1 -1
  252. package/realtime/websocket.mjs +5 -9
  253. package/realtime/websocket.mjs.map +1 -1
  254. package/realtime/ws.d.mts +4 -7
  255. package/realtime/ws.d.mts.map +1 -1
  256. package/realtime/ws.d.ts +4 -7
  257. package/realtime/ws.d.ts.map +1 -1
  258. package/realtime/ws.js +4 -8
  259. package/realtime/ws.js.map +1 -1
  260. package/realtime/ws.mjs +5 -9
  261. package/realtime/ws.mjs.map +1 -1
  262. package/resources/beta/assistants.d.mts +12 -26
  263. package/resources/beta/assistants.d.mts.map +1 -1
  264. package/resources/beta/assistants.d.ts +12 -26
  265. package/resources/beta/assistants.d.ts.map +1 -1
  266. package/resources/beta/beta.d.mts +6 -1
  267. package/resources/beta/beta.d.mts.map +1 -1
  268. package/resources/beta/beta.d.ts +6 -1
  269. package/resources/beta/beta.d.ts.map +1 -1
  270. package/resources/beta/beta.js +4 -0
  271. package/resources/beta/beta.js.map +1 -1
  272. package/resources/beta/beta.mjs +4 -0
  273. package/resources/beta/beta.mjs.map +1 -1
  274. package/resources/beta/index.d.mts +1 -0
  275. package/resources/beta/index.d.mts.map +1 -1
  276. package/resources/beta/index.d.ts +1 -0
  277. package/resources/beta/index.d.ts.map +1 -1
  278. package/resources/beta/index.js +5 -3
  279. package/resources/beta/index.js.map +1 -1
  280. package/resources/beta/index.mjs +1 -0
  281. package/resources/beta/index.mjs.map +1 -1
  282. package/resources/beta/responses/index.d.mts +6 -0
  283. package/resources/beta/responses/index.d.mts.map +1 -0
  284. package/resources/beta/responses/index.d.ts +6 -0
  285. package/resources/beta/responses/index.d.ts.map +1 -0
  286. package/resources/beta/responses/index.js +11 -0
  287. package/resources/beta/responses/index.js.map +1 -0
  288. package/resources/beta/responses/index.mjs +5 -0
  289. package/resources/beta/responses/index.mjs.map +1 -0
  290. package/resources/beta/responses/input-items.d.mts +69 -0
  291. package/resources/beta/responses/input-items.d.mts.map +1 -0
  292. package/resources/beta/responses/input-items.d.ts +69 -0
  293. package/resources/beta/responses/input-items.d.ts.map +1 -0
  294. package/resources/beta/responses/input-items.js +37 -0
  295. package/resources/beta/responses/input-items.js.map +1 -0
  296. package/resources/beta/responses/input-items.mjs +33 -0
  297. package/resources/beta/responses/input-items.mjs.map +1 -0
  298. package/resources/beta/responses/input-tokens.d.mts +191 -0
  299. package/resources/beta/responses/input-tokens.d.mts.map +1 -0
  300. package/resources/beta/responses/input-tokens.d.ts +191 -0
  301. package/resources/beta/responses/input-tokens.d.ts.map +1 -0
  302. package/resources/beta/responses/input-tokens.js +34 -0
  303. package/resources/beta/responses/input-tokens.js.map +1 -0
  304. package/resources/beta/responses/input-tokens.mjs +30 -0
  305. package/resources/beta/responses/input-tokens.mjs.map +1 -0
  306. package/resources/beta/responses/internal-base.d.mts +71 -0
  307. package/resources/beta/responses/internal-base.d.mts.map +1 -0
  308. package/resources/beta/responses/internal-base.d.ts +71 -0
  309. package/resources/beta/responses/internal-base.d.ts.map +1 -0
  310. package/resources/beta/responses/internal-base.js +48 -0
  311. package/resources/beta/responses/internal-base.js.map +1 -0
  312. package/resources/beta/responses/internal-base.mjs +42 -0
  313. package/resources/beta/responses/internal-base.mjs.map +1 -0
  314. package/resources/beta/responses/responses.d.mts +9985 -0
  315. package/resources/beta/responses/responses.d.mts.map +1 -0
  316. package/resources/beta/responses/responses.d.ts +9985 -0
  317. package/resources/beta/responses/responses.d.ts.map +1 -0
  318. package/resources/beta/responses/responses.js +121 -0
  319. package/resources/beta/responses/responses.js.map +1 -0
  320. package/resources/beta/responses/responses.mjs +116 -0
  321. package/resources/beta/responses/responses.mjs.map +1 -0
  322. package/resources/beta/responses/ws-base.d.mts +106 -0
  323. package/resources/beta/responses/ws-base.d.mts.map +1 -0
  324. package/resources/beta/responses/ws-base.d.ts +106 -0
  325. package/resources/beta/responses/ws-base.d.ts.map +1 -0
  326. package/resources/beta/responses/ws-base.js +476 -0
  327. package/resources/beta/responses/ws-base.js.map +1 -0
  328. package/resources/beta/responses/ws-base.mjs +472 -0
  329. package/resources/beta/responses/ws-base.mjs.map +1 -0
  330. package/resources/beta/responses/ws.d.mts +13 -0
  331. package/resources/beta/responses/ws.d.mts.map +1 -0
  332. package/resources/beta/responses/ws.d.ts +13 -0
  333. package/resources/beta/responses/ws.d.ts.map +1 -0
  334. package/resources/beta/responses/ws.js +31 -0
  335. package/resources/beta/responses/ws.js.map +1 -0
  336. package/resources/beta/responses/ws.mjs +26 -0
  337. package/resources/beta/responses/ws.mjs.map +1 -0
  338. package/resources/beta/responses.d.mts +2 -0
  339. package/resources/beta/responses.d.mts.map +1 -0
  340. package/resources/beta/responses.d.ts +2 -0
  341. package/resources/beta/responses.d.ts.map +1 -0
  342. package/resources/beta/responses.js +6 -0
  343. package/resources/beta/responses.js.map +1 -0
  344. package/resources/beta/responses.mjs +3 -0
  345. package/resources/beta/responses.mjs.map +1 -0
  346. package/resources/beta/threads/runs/runs.d.mts +6 -13
  347. package/resources/beta/threads/runs/runs.d.mts.map +1 -1
  348. package/resources/beta/threads/runs/runs.d.ts +6 -13
  349. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  350. package/resources/beta/threads/runs/runs.js.map +1 -1
  351. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  352. package/resources/chat/completions/completions.d.mts +155 -14
  353. package/resources/chat/completions/completions.d.mts.map +1 -1
  354. package/resources/chat/completions/completions.d.ts +155 -14
  355. package/resources/chat/completions/completions.d.ts.map +1 -1
  356. package/resources/chat/completions/completions.js.map +1 -1
  357. package/resources/chat/completions/completions.mjs.map +1 -1
  358. package/resources/completions.d.mts +4 -0
  359. package/resources/completions.d.mts.map +1 -1
  360. package/resources/completions.d.ts +4 -0
  361. package/resources/completions.d.ts.map +1 -1
  362. package/resources/conversations/conversations.d.mts +19 -0
  363. package/resources/conversations/conversations.d.mts.map +1 -1
  364. package/resources/conversations/conversations.d.ts +19 -0
  365. package/resources/conversations/conversations.d.ts.map +1 -1
  366. package/resources/conversations/conversations.js.map +1 -1
  367. package/resources/conversations/conversations.mjs.map +1 -1
  368. package/resources/conversations/items.d.mts +45 -1
  369. package/resources/conversations/items.d.mts.map +1 -1
  370. package/resources/conversations/items.d.ts +45 -1
  371. package/resources/conversations/items.d.ts.map +1 -1
  372. package/resources/evals/runs/runs.d.mts +66 -143
  373. package/resources/evals/runs/runs.d.mts.map +1 -1
  374. package/resources/evals/runs/runs.d.ts +66 -143
  375. package/resources/evals/runs/runs.d.ts.map +1 -1
  376. package/resources/evals/runs/runs.js.map +1 -1
  377. package/resources/evals/runs/runs.mjs.map +1 -1
  378. package/resources/graders/grader-models.d.mts +6 -13
  379. package/resources/graders/grader-models.d.mts.map +1 -1
  380. package/resources/graders/grader-models.d.ts +6 -13
  381. package/resources/graders/grader-models.d.ts.map +1 -1
  382. package/resources/realtime/calls.d.mts +1 -1
  383. package/resources/realtime/calls.d.mts.map +1 -1
  384. package/resources/realtime/calls.d.ts +1 -1
  385. package/resources/realtime/calls.d.ts.map +1 -1
  386. package/resources/realtime/client-secrets.d.mts +5 -1
  387. package/resources/realtime/client-secrets.d.mts.map +1 -1
  388. package/resources/realtime/client-secrets.d.ts +5 -1
  389. package/resources/realtime/client-secrets.d.ts.map +1 -1
  390. package/resources/realtime/realtime.d.mts +9 -1
  391. package/resources/realtime/realtime.d.mts.map +1 -1
  392. package/resources/realtime/realtime.d.ts +9 -1
  393. package/resources/realtime/realtime.d.ts.map +1 -1
  394. package/resources/realtime/realtime.js.map +1 -1
  395. package/resources/realtime/realtime.mjs.map +1 -1
  396. package/resources/responses/input-tokens.d.mts +7 -1
  397. package/resources/responses/input-tokens.d.mts.map +1 -1
  398. package/resources/responses/input-tokens.d.ts +7 -1
  399. package/resources/responses/input-tokens.d.ts.map +1 -1
  400. package/resources/responses/responses.d.mts +816 -24
  401. package/resources/responses/responses.d.mts.map +1 -1
  402. package/resources/responses/responses.d.ts +816 -24
  403. package/resources/responses/responses.d.ts.map +1 -1
  404. package/resources/responses/responses.js +1 -1
  405. package/resources/responses/responses.js.map +1 -1
  406. package/resources/responses/responses.mjs +1 -1
  407. package/resources/responses/responses.mjs.map +1 -1
  408. package/resources/shared.d.mts +20 -28
  409. package/resources/shared.d.mts.map +1 -1
  410. package/resources/shared.d.ts +20 -28
  411. package/resources/shared.d.ts.map +1 -1
  412. package/resources/webhooks/webhooks.d.mts +54 -2
  413. package/resources/webhooks/webhooks.d.mts.map +1 -1
  414. package/resources/webhooks/webhooks.d.ts +54 -2
  415. package/resources/webhooks/webhooks.d.ts.map +1 -1
  416. package/src/_vendor/zod-to-json-schema/parseDef.ts +44 -16
  417. package/src/_vendor/zod-to-json-schema/parsers/branded.ts +2 -2
  418. package/src/_vendor/zod-to-json-schema/parsers/catch.ts +2 -2
  419. package/src/_vendor/zod-to-json-schema/parsers/default.ts +6 -2
  420. package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +13 -5
  421. package/src/_vendor/zod-to-json-schema/parsers/optional.ts +14 -6
  422. package/src/_vendor/zod-to-json-schema/parsers/pipeline.ts +3 -2
  423. package/src/_vendor/zod-to-json-schema/parsers/promise.ts +6 -2
  424. package/src/_vendor/zod-to-json-schema/parsers/readonly.ts +2 -2
  425. package/src/auth/workload-identity-auth.ts +16 -5
  426. package/src/azure.ts +4 -1
  427. package/src/beta/realtime/internal-base.ts +43 -5
  428. package/src/beta/realtime/websocket.ts +10 -7
  429. package/src/beta/realtime/ws.ts +10 -7
  430. package/src/client.ts +80 -18
  431. package/src/helpers/audio.ts +18 -4
  432. package/src/helpers/zod.ts +16 -0
  433. package/src/internal/bedrock.ts +153 -0
  434. package/src/internal/provider.ts +60 -0
  435. package/src/internal/utils/log.ts +1 -0
  436. package/src/lib/AbstractChatCompletionRunner.ts +111 -45
  437. package/src/lib/AssistantStream.ts +5 -21
  438. package/src/lib/ChatCompletionRunner.ts +1 -1
  439. package/src/lib/ChatCompletionStream.ts +11 -15
  440. package/src/lib/ChatCompletionStreamingRunner.ts +1 -1
  441. package/src/lib/EventEmitter.ts +11 -2
  442. package/src/lib/EventStream.ts +20 -0
  443. package/src/lib/ResponsesParser.ts +18 -4
  444. package/src/lib/responses/ResponseAccumulator.ts +421 -0
  445. package/src/lib/responses/ResponseInputItems.ts +129 -0
  446. package/src/lib/responses/ResponseStream.ts +4 -93
  447. package/src/providers/bedrock/aws.ts +255 -0
  448. package/src/providers/bedrock.ts +33 -0
  449. package/src/realtime/internal-base.ts +90 -7
  450. package/src/realtime/websocket.ts +15 -13
  451. package/src/realtime/ws.ts +15 -13
  452. package/src/resources/beta/assistants.ts +12 -26
  453. package/src/resources/beta/beta.ts +330 -2
  454. package/src/resources/beta/index.ts +163 -0
  455. package/src/resources/beta/responses/index.ts +169 -0
  456. package/src/resources/beta/responses/input-items.ts +105 -0
  457. package/src/resources/beta/responses/input-tokens.ts +245 -0
  458. package/src/resources/beta/responses/internal-base.ts +117 -0
  459. package/src/resources/beta/responses/responses.ts +12632 -0
  460. package/src/resources/beta/responses/ws-base.ts +615 -0
  461. package/src/resources/beta/responses/ws.ts +38 -0
  462. package/src/resources/beta/responses.ts +3 -0
  463. package/src/resources/beta/threads/runs/runs.ts +6 -13
  464. package/src/resources/chat/completions/completions.ts +171 -14
  465. package/src/resources/completions.ts +5 -0
  466. package/src/resources/conversations/conversations.ts +21 -0
  467. package/src/resources/conversations/items.ts +56 -0
  468. package/src/resources/evals/runs/runs.ts +66 -143
  469. package/src/resources/graders/grader-models.ts +6 -13
  470. package/src/resources/realtime/calls.ts +2 -0
  471. package/src/resources/realtime/client-secrets.ts +7 -0
  472. package/src/resources/realtime/realtime.ts +12 -0
  473. package/src/resources/responses/input-tokens.ts +8 -0
  474. package/src/resources/responses/responses.ts +950 -15
  475. package/src/resources/shared.ts +23 -27
  476. package/src/resources/webhooks/api.md +1 -0
  477. package/src/resources/webhooks/webhooks.ts +65 -1
  478. package/src/version.ts +1 -1
  479. package/version.d.mts +1 -1
  480. package/version.d.ts +1 -1
  481. package/version.js +1 -1
  482. package/version.mjs +1 -1
@@ -1,6 +1,7 @@
1
1
  import { OpenAIError } from '../error';
2
2
  import type OpenAI from '../index';
3
3
  import type { RequestOptions } from '../internal/request-options';
4
+ import { uuid4 } from '../internal/utils/uuid';
4
5
  import { isAutoParsableTool, parseChatCompletion } from '../lib/parser';
5
6
  import type {
6
7
  ChatCompletion,
@@ -8,12 +9,17 @@ import type {
8
9
  ChatCompletionMessage,
9
10
  ChatCompletionMessageFunctionToolCall,
10
11
  ChatCompletionMessageParam,
12
+ ChatCompletionMessageToolCall,
11
13
  ChatCompletionTool,
14
+ ChatCompletionToolMessageParam,
12
15
  ParsedChatCompletion,
13
16
  } from '../resources/chat/completions';
14
17
  import type { CompletionUsage } from '../resources/completions';
15
- import type { ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
16
- import type { ChatCompletionStreamingToolRunnerParams } from './ChatCompletionStreamingRunner';
18
+ import type { ChatCompletionRunner, ChatCompletionToolRunnerParams } from './ChatCompletionRunner';
19
+ import type {
20
+ ChatCompletionStreamingRunner,
21
+ ChatCompletionStreamingToolRunnerParams,
22
+ } from './ChatCompletionStreamingRunner';
17
23
  import { isAssistantMessage, isToolMessage } from './chatCompletionUtils';
18
24
  import { BaseEvents, EventStream } from './EventStream';
19
25
  import {
@@ -24,9 +30,35 @@ import {
24
30
  } from './RunnableFunction';
25
31
 
26
32
  const DEFAULT_MAX_CHAT_COMPLETIONS = 10;
33
+
34
+ function normalizeToolCallIds(chatCompletion: ChatCompletion): void {
35
+ for (const choice of chatCompletion.choices) {
36
+ for (const toolCall of choice.message.tool_calls ?? []) {
37
+ // Some OpenAI-compatible providers omit tool call IDs or return an empty string.
38
+ // Generate a unique ID before the completion is stored or emitted so the assistant
39
+ // tool call and its result message always reference the same value.
40
+ if (!toolCall.id) {
41
+ toolCall.id = `call_${uuid4()}`;
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ export interface ChatCompletionRunnerContext {
48
+ messages: ChatCompletionMessageParam[];
49
+ abort(): void;
50
+ }
51
+
27
52
  export interface RunnerOptions extends RequestOptions {
28
53
  /** How many requests to make before canceling. Default 10. */
29
54
  maxChatCompletions?: number;
55
+ /**
56
+ * A callback that runs after each chat completion and after any tool calls from
57
+ * that completion have finished. The callback is awaited before the next
58
+ * request starts or before the runner ends. The runner's mutable `messages`
59
+ * array can be used to add context for the next request.
60
+ */
61
+ afterCompletion?: (completion: ChatCompletion, runner: ChatCompletionRunnerContext) => void | Promise<void>;
30
62
  }
31
63
 
32
64
  export class AbstractChatCompletionRunner<
@@ -40,6 +72,7 @@ export class AbstractChatCompletionRunner<
40
72
  this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,
41
73
  chatCompletion: ParsedChatCompletion<ParsedT>,
42
74
  ): ParsedChatCompletion<ParsedT> {
75
+ normalizeToolCallIds(chatCompletion);
43
76
  this._chatCompletions.push(chatCompletion);
44
77
  this._emit('chatCompletion', chatCompletion);
45
78
  const message = chatCompletion.choices[0]?.message;
@@ -113,7 +146,7 @@ export class AbstractChatCompletionRunner<
113
146
  }
114
147
 
115
148
  /**
116
- * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,
149
+ * @returns a promise that resolves with the final assistant ChatCompletionMessage response,
117
150
  * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.
118
151
  */
119
152
  async finalMessage(): Promise<ChatCompletionMessage> {
@@ -230,11 +263,7 @@ export class AbstractChatCompletionRunner<
230
263
  params: ChatCompletionCreateParams,
231
264
  options?: RequestOptions,
232
265
  ): Promise<ParsedChatCompletion<ParsedT>> {
233
- const signal = options?.signal;
234
- if (signal) {
235
- if (signal.aborted) this.controller.abort();
236
- signal.addEventListener('abort', () => this.controller.abort());
237
- }
266
+ this._listenForAbort(options?.signal);
238
267
  this.#validateParams(params);
239
268
 
240
269
  const chatCompletion = await client.chat.completions.create(
@@ -261,13 +290,14 @@ export class AbstractChatCompletionRunner<
261
290
  params:
262
291
  | ChatCompletionToolRunnerParams<FunctionsArgs>
263
292
  | ChatCompletionStreamingToolRunnerParams<FunctionsArgs>,
293
+ runner: ChatCompletionRunner<any> | ChatCompletionStreamingRunner<any>,
264
294
  options?: RunnerOptions,
265
295
  ) {
266
296
  const role = 'tool' as const;
267
297
  const { tool_choice = 'auto', stream, ...restParams } = params;
268
298
  const singleFunctionToCall =
269
299
  typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;
270
- const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};
300
+ const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS, afterCompletion } = options || {};
271
301
 
272
302
  // TODO(someday): clean this logic up
273
303
  const inputTools = params.tools.map((tool): RunnableToolFunction<any> => {
@@ -320,6 +350,54 @@ export class AbstractChatCompletionRunner<
320
350
  this._addMessage(message, false);
321
351
  }
322
352
 
353
+ type ToolCallResult = {
354
+ message: ChatCompletionToolMessageParam | undefined;
355
+ functionCalled: boolean;
356
+ };
357
+
358
+ const runToolCall = async (toolCall: ChatCompletionMessageToolCall): Promise<ToolCallResult> => {
359
+ if (toolCall.type !== 'function') return { message: undefined, functionCalled: false };
360
+
361
+ const tool_call_id = toolCall.id;
362
+ const { name, arguments: args } = toolCall.function;
363
+ const fn = functionsByName[name];
364
+
365
+ if (!fn) {
366
+ const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(
367
+ functionsByName,
368
+ )
369
+ .map((name) => JSON.stringify(name))
370
+ .join(', ')}. Please try again`;
371
+
372
+ return { message: { role, tool_call_id, content }, functionCalled: false };
373
+ }
374
+
375
+ if (singleFunctionToCall && singleFunctionToCall !== name) {
376
+ const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(
377
+ singleFunctionToCall,
378
+ )} requested. Please try again`;
379
+
380
+ return { message: { role, tool_call_id, content }, functionCalled: false };
381
+ }
382
+
383
+ let rawContent: unknown;
384
+ if (isRunnableFunctionWithParse(fn)) {
385
+ let parsed;
386
+ try {
387
+ parsed = await fn.parse(args);
388
+ } catch (error) {
389
+ const content = error instanceof Error ? error.message : String(error);
390
+ return { message: { role, tool_call_id, content }, functionCalled: false };
391
+ }
392
+ rawContent = await fn.function(parsed, runner);
393
+ } else {
394
+ rawContent = await fn.function(args, runner);
395
+ }
396
+
397
+ const content = this.#stringifyFunctionCallResult(rawContent);
398
+ return { message: { role, tool_call_id, content }, functionCalled: true };
399
+ };
400
+
323
401
  for (let i = 0; i < maxChatCompletions; ++i) {
324
402
  const chatCompletion: ChatCompletion = await this._createChatCompletion(
325
403
  client,
@@ -336,51 +414,39 @@ export class AbstractChatCompletionRunner<
336
414
  throw new OpenAIError(`missing message in ChatCompletion response`);
337
415
  }
338
416
  if (!message.tool_calls?.length) {
417
+ await afterCompletion?.(chatCompletion, runner);
339
418
  return;
340
419
  }
341
420
 
342
- for (const tool_call of message.tool_calls) {
343
- if (tool_call.type !== 'function') continue;
344
- const tool_call_id = tool_call.id;
345
- const { name, arguments: args } = tool_call.function;
346
- const fn = functionsByName[name];
347
-
348
- if (!fn) {
349
- const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(
350
- functionsByName,
351
- )
352
- .map((name) => JSON.stringify(name))
353
- .join(', ')}. Please try again`;
354
-
355
- this._addMessage({ role, tool_call_id, content });
356
- continue;
357
- } else if (singleFunctionToCall && singleFunctionToCall !== name) {
358
- const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(
359
- singleFunctionToCall,
360
- )} requested. Please try again`;
361
-
362
- this._addMessage({ role, tool_call_id, content });
363
- continue;
364
- }
421
+ if (singleFunctionToCall || params.parallel_tool_calls === false) {
422
+ for (const toolCall of message.tool_calls) {
423
+ const result = await runToolCall(toolCall);
424
+ if (result.message) this._addMessage(result.message);
365
425
 
366
- let parsed;
367
- try {
368
- parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;
369
- } catch (error) {
370
- const content = error instanceof Error ? error.message : String(error);
371
- this._addMessage({ role, tool_call_id, content });
372
- continue;
426
+ if (singleFunctionToCall && result.functionCalled) {
427
+ await afterCompletion?.(chatCompletion, runner);
428
+ return;
429
+ }
373
430
  }
431
+ } else {
432
+ const results = await Promise.allSettled(message.tool_calls.map(runToolCall));
374
433
 
375
- // @ts-expect-error it can't rule out `never` type.
376
- const rawContent = await fn.function(parsed, this);
377
- const content = this.#stringifyFunctionCallResult(rawContent);
378
- this._addMessage({ role, tool_call_id, content });
434
+ // Wait for every concurrently running tool to settle before surfacing an
435
+ // error so tool side effects cannot continue after the runner has ended.
436
+ for (const result of results) {
437
+ if (result.status === 'rejected') throw result.reason;
438
+ }
379
439
 
380
- if (singleFunctionToCall) {
381
- return;
440
+ // Promise.allSettled preserves input order, so the next request receives
441
+ // tool result messages in the same order as the assistant's tool calls.
442
+ for (const result of results) {
443
+ if (result.status === 'fulfilled' && result.value.message) {
444
+ this._addMessage(result.value.message);
445
+ }
382
446
  }
383
447
  }
448
+
449
+ await afterCompletion?.(chatCompletion, runner);
384
450
  }
385
451
 
386
452
  return;
@@ -165,11 +165,7 @@ export class AssistantStream
165
165
  readableStream: ReadableStream,
166
166
  options?: RequestOptions,
167
167
  ): Promise<Run> {
168
- const signal = options?.signal;
169
- if (signal) {
170
- if (signal.aborted) this.controller.abort();
171
- signal.addEventListener('abort', () => this.controller.abort());
172
- }
168
+ this._listenForAbort(options?.signal);
173
169
  this._connected();
174
170
  const stream = Stream.fromReadableStream<AssistantStreamEvent>(readableStream, this.controller);
175
171
  for await (const event of stream) {
@@ -208,11 +204,7 @@ export class AssistantStream
208
204
  params: RunSubmitToolOutputsParamsStream,
209
205
  options?: RequestOptions,
210
206
  ): Promise<Run> {
211
- const signal = options?.signal;
212
- if (signal) {
213
- if (signal.aborted) this.controller.abort();
214
- signal.addEventListener('abort', () => this.controller.abort());
215
- }
207
+ this._listenForAbort(options?.signal);
216
208
 
217
209
  const body: RunSubmitToolOutputsParamsStreaming = { ...params, stream: true };
218
210
  const stream = await run.submitToolOutputs(runId, body, {
@@ -303,11 +295,7 @@ export class AssistantStream
303
295
  params: ThreadCreateAndRunParamsBase,
304
296
  options?: RequestOptions,
305
297
  ): Promise<Run> {
306
- const signal = options?.signal;
307
- if (signal) {
308
- if (signal.aborted) this.controller.abort();
309
- signal.addEventListener('abort', () => this.controller.abort());
310
- }
298
+ this._listenForAbort(options?.signal);
311
299
 
312
300
  const body: RunCreateParamsStreaming = { ...params, stream: true };
313
301
  const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });
@@ -330,11 +318,7 @@ export class AssistantStream
330
318
  params: RunCreateParamsBase,
331
319
  options?: RequestOptions,
332
320
  ): Promise<Run> {
333
- const signal = options?.signal;
334
- if (signal) {
335
- if (signal.aborted) this.controller.abort();
336
- signal.addEventListener('abort', () => this.controller.abort());
337
- }
321
+ this._listenForAbort(options?.signal);
338
322
 
339
323
  const body: RunCreateParamsStreaming = { ...params, stream: true };
340
324
  const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });
@@ -702,7 +686,7 @@ export class AssistantStream
702
686
 
703
687
  const accEntry = accValue[index];
704
688
  if (accEntry == null) {
705
- accValue.push(deltaEntry);
689
+ accValue[index] = deltaEntry;
706
690
  } else {
707
691
  accValue[index] = this.accumulateDelta(accEntry, deltaEntry);
708
692
  }
@@ -37,7 +37,7 @@ export class ChatCompletionRunner<ParsedT = null> extends AbstractChatCompletion
37
37
  ...options,
38
38
  headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },
39
39
  };
40
- runner._run(() => runner._runTools(client, params, opts));
40
+ runner._run(() => runner._runTools(client, params, runner, opts));
41
41
  return runner;
42
42
  }
43
43
 
@@ -8,6 +8,7 @@ import {
8
8
  import OpenAI from '../index';
9
9
  import { RequestOptions } from '../internal/request-options';
10
10
  import { type ReadableStream } from '../internal/shim-types';
11
+ import { uuid4 } from '../internal/utils/uuid';
11
12
  import {
12
13
  AutoParseableResponseFormat,
13
14
  hasAutoParseableInput,
@@ -373,11 +374,7 @@ export class ChatCompletionStream<ParsedT = null>
373
374
  options?: RequestOptions,
374
375
  ): Promise<ParsedChatCompletion<ParsedT>> {
375
376
  super._createChatCompletion;
376
- const signal = options?.signal;
377
- if (signal) {
378
- if (signal.aborted) this.controller.abort();
379
- signal.addEventListener('abort', () => this.controller.abort());
380
- }
377
+ this._listenForAbort(options?.signal);
381
378
  this.#beginRequest();
382
379
 
383
380
  const stream = await client.chat.completions.create(
@@ -398,11 +395,7 @@ export class ChatCompletionStream<ParsedT = null>
398
395
  readableStream: ReadableStream,
399
396
  options?: RequestOptions,
400
397
  ): Promise<ChatCompletion> {
401
- const signal = options?.signal;
402
- if (signal) {
403
- if (signal.aborted) this.controller.abort();
404
- signal.addEventListener('abort', () => this.controller.abort());
405
- }
398
+ this._listenForAbort(options?.signal);
406
399
  this.#beginRequest();
407
400
  this._connected();
408
401
  const stream = Stream.fromReadableStream<ChatCompletionChunk>(readableStream, this.controller);
@@ -511,7 +504,8 @@ export class ChatCompletionStream<ParsedT = null>
511
504
  choice.message.content = (choice.message.content || '') + content;
512
505
 
513
506
  if (!choice.message.refusal && this.#getAutoParseableResponseFormat()) {
514
- choice.message.parsed = partialParse(choice.message.content);
507
+ // The partial parser does not accept whitespace-only input.
508
+ choice.message.parsed = choice.message.content.trim() ? partialParse(choice.message.content) : null;
515
509
  }
516
510
  }
517
511
 
@@ -664,9 +658,6 @@ function finalizeChatCompletion<ParsedT>(
664
658
  tool_calls: tool_calls.map((tool_call, i) => {
665
659
  const { function: fn, type, id, ...toolRest } = tool_call;
666
660
  const { arguments: args, name, ...fnRest } = fn || {};
667
- if (id == null) {
668
- throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\n${str(snapshot)}`);
669
- }
670
661
  if (type == null) {
671
662
  throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\n${str(snapshot)}`);
672
663
  }
@@ -681,7 +672,12 @@ function finalizeChatCompletion<ParsedT>(
681
672
  );
682
673
  }
683
674
 
684
- return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };
675
+ return {
676
+ ...toolRest,
677
+ id: id || `call_${uuid4()}`,
678
+ type,
679
+ function: { ...fnRest, name, arguments: args },
680
+ };
685
681
  }),
686
682
  },
687
683
  };
@@ -44,7 +44,7 @@ export class ChatCompletionStreamingRunner<ParsedT = null>
44
44
  ...options,
45
45
  headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },
46
46
  };
47
- runner._run(() => runner._runTools(client, params, opts));
47
+ runner._run(() => runner._runTools(client, params, runner, opts));
48
48
  return runner;
49
49
  }
50
50
  }
@@ -74,8 +74,17 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
74
74
  : EventParameters<EventTypes, Event>
75
75
  > {
76
76
  return new Promise((resolve, reject) => {
77
- // TODO: handle errors
78
- this.once(event, resolve as any);
77
+ const onError = (error: unknown) => {
78
+ this.off(event, onEvent as any);
79
+ reject(error);
80
+ };
81
+ const onEvent = (value: unknown) => {
82
+ if (event !== 'error') this.off('error', onError as any);
83
+ resolve(value as any);
84
+ };
85
+
86
+ if (event !== 'error') this.once('error', onError as any);
87
+ this.once(event, onEvent as any);
79
88
  });
80
89
  }
81
90
 
@@ -14,6 +14,7 @@ export class EventStream<EventTypes extends BaseEvents> {
14
14
  #listeners: {
15
15
  [Event in keyof EventTypes]?: EventListeners<EventTypes, Event>;
16
16
  } = {};
17
+ #abortListeners: Array<{ signal: AbortSignal; listener: () => void }> = [];
17
18
 
18
19
  #ended = false;
19
20
  #errored = false;
@@ -72,6 +73,24 @@ export class EventStream<EventTypes extends BaseEvents> {
72
73
  this.controller.abort();
73
74
  }
74
75
 
76
+ protected _listenForAbort(signal: AbortSignal | null | undefined) {
77
+ if (!signal || this.ended) return;
78
+ if (signal.aborted) {
79
+ this.controller.abort();
80
+ return;
81
+ }
82
+
83
+ const listener = () => this.controller.abort();
84
+ signal.addEventListener('abort', listener, { once: true });
85
+ this.#abortListeners.push({ signal, listener });
86
+ }
87
+
88
+ #removeAbortListeners() {
89
+ for (const { signal, listener } of this.#abortListeners.splice(0)) {
90
+ signal.removeEventListener('abort', listener);
91
+ }
92
+ }
93
+
75
94
  /**
76
95
  * Adds the listener function to the end of the listeners array for the event.
77
96
  * No checks are made to see if the listener has already been added. Multiple calls passing
@@ -177,6 +196,7 @@ export class EventStream<EventTypes extends BaseEvents> {
177
196
  }
178
197
 
179
198
  if (event === 'end') {
199
+ this.#removeAbortListeners();
180
200
  this.#ended = true;
181
201
  this.#resolveEndPromise();
182
202
  }
@@ -31,7 +31,7 @@ export function maybeParseResponse<
31
31
  ParsedT = Params extends null ? null : ExtractParsedContentFromParams<NonNullable<Params>>,
32
32
  >(response: Response, params: Params): ParsedResponse<ParsedT> {
33
33
  if (!params || !hasAutoParseableInput(params)) {
34
- return {
34
+ const parsed = {
35
35
  ...response,
36
36
  output_parsed: null,
37
37
  output: response.output.map((item) => {
@@ -55,6 +55,12 @@ export function maybeParseResponse<
55
55
  }
56
56
  }),
57
57
  };
58
+
59
+ if (needsOutputText(response, parsed)) {
60
+ addOutputText(parsed as Response);
61
+ }
62
+
63
+ return parsed;
58
64
  }
59
65
 
60
66
  return parseResponse(response, params);
@@ -64,12 +70,13 @@ export function parseResponse<
64
70
  Params extends ResponseCreateParamsBase,
65
71
  ParsedT = ExtractParsedContentFromParams<Params>,
66
72
  >(response: Response, params: Params): ParsedResponse<ParsedT> {
73
+ const shouldParse = !response.status || response.status === 'completed';
67
74
  const output: Array<ParsedResponseOutputItem<ParsedT>> = response.output.map(
68
75
  (item): ParsedResponseOutputItem<ParsedT> => {
69
76
  if (item.type === 'function_call') {
70
77
  return {
71
78
  ...item,
72
- parsed_arguments: parseToolCall(params, item),
79
+ parsed_arguments: shouldParse ? parseToolCall(params, item) : null,
73
80
  };
74
81
  }
75
82
  if (item.type === 'message') {
@@ -77,7 +84,7 @@ export function parseResponse<
77
84
  if (content.type === 'output_text') {
78
85
  return {
79
86
  ...content,
80
- parsed: parseTextFormat(params, content.text),
87
+ parsed: shouldParse ? parseTextFormat(params, content.text) : null,
81
88
  };
82
89
  }
83
90
 
@@ -95,7 +102,7 @@ export function parseResponse<
95
102
  );
96
103
 
97
104
  const parsed: Omit<ParsedResponse<ParsedT>, 'output_parsed'> = Object.assign({}, response, { output });
98
- if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {
105
+ if (needsOutputText(response, parsed)) {
99
106
  addOutputText(parsed);
100
107
  }
101
108
 
@@ -247,6 +254,13 @@ export function validateInputTools(tools: ChatCompletionTool[] | undefined) {
247
254
  }
248
255
  }
249
256
 
257
+ function needsOutputText(
258
+ response: Response,
259
+ target: { output_text?: Response['output_text'] | null },
260
+ ): boolean {
261
+ return !Object.getOwnPropertyDescriptor(response, 'output_text') || target.output_text == null;
262
+ }
263
+
250
264
  export function addOutputText(rsp: Response): void {
251
265
  const texts: string[] = [];
252
266
  for (const output of rsp.output) {