openai 7.5.0 → 7.7.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 (597) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/README.md +46 -2
  3. package/auth/index.d.mts +1 -1
  4. package/auth/index.d.mts.map +1 -1
  5. package/auth/index.d.ts +1 -1
  6. package/auth/index.d.ts.map +1 -1
  7. package/auth/index.js.map +1 -1
  8. package/auth/index.mjs.map +1 -1
  9. package/auth/subject-token-providers.d.mts.map +1 -1
  10. package/auth/subject-token-providers.d.ts.map +1 -1
  11. package/auth/subject-token-providers.js +176 -4
  12. package/auth/subject-token-providers.js.map +1 -1
  13. package/auth/subject-token-providers.mjs +176 -4
  14. package/auth/subject-token-providers.mjs.map +1 -1
  15. package/auth/types.d.mts +17 -0
  16. package/auth/types.d.mts.map +1 -1
  17. package/auth/types.d.ts +17 -0
  18. package/auth/types.d.ts.map +1 -1
  19. package/auth/workload-identity-auth.d.mts.map +1 -1
  20. package/auth/workload-identity-auth.d.ts.map +1 -1
  21. package/auth/workload-identity-auth.js +80 -7
  22. package/auth/workload-identity-auth.js.map +1 -1
  23. package/auth/workload-identity-auth.mjs +80 -7
  24. package/auth/workload-identity-auth.mjs.map +1 -1
  25. package/auth/x509-transport.d.mts +5 -0
  26. package/auth/x509-transport.d.mts.map +1 -0
  27. package/auth/x509-transport.d.ts +5 -0
  28. package/auth/x509-transport.d.ts.map +1 -0
  29. package/auth/x509-transport.js +39 -0
  30. package/auth/x509-transport.js.map +1 -0
  31. package/auth/x509-transport.mjs +36 -0
  32. package/auth/x509-transport.mjs.map +1 -0
  33. package/azure.d.mts +11 -2
  34. package/azure.d.mts.map +1 -1
  35. package/azure.d.ts +11 -2
  36. package/azure.d.ts.map +1 -1
  37. package/azure.js +7 -1
  38. package/azure.js.map +1 -1
  39. package/azure.mjs +7 -1
  40. package/azure.mjs.map +1 -1
  41. package/bedrock.d.mts +6 -2
  42. package/bedrock.d.mts.map +1 -1
  43. package/bedrock.d.ts +6 -2
  44. package/bedrock.d.ts.map +1 -1
  45. package/bedrock.js +34 -4
  46. package/bedrock.js.map +1 -1
  47. package/bedrock.mjs +35 -5
  48. package/bedrock.mjs.map +1 -1
  49. package/beta/realtime/internal-base.d.mts +2 -0
  50. package/beta/realtime/internal-base.d.mts.map +1 -1
  51. package/beta/realtime/internal-base.d.ts +2 -0
  52. package/beta/realtime/internal-base.d.ts.map +1 -1
  53. package/beta/realtime/internal-base.js +15 -0
  54. package/beta/realtime/internal-base.js.map +1 -1
  55. package/beta/realtime/internal-base.mjs +14 -0
  56. package/beta/realtime/internal-base.mjs.map +1 -1
  57. package/beta/realtime/websocket.d.mts +11 -5
  58. package/beta/realtime/websocket.d.mts.map +1 -1
  59. package/beta/realtime/websocket.d.ts +11 -5
  60. package/beta/realtime/websocket.d.ts.map +1 -1
  61. package/beta/realtime/websocket.js +106 -31
  62. package/beta/realtime/websocket.js.map +1 -1
  63. package/beta/realtime/websocket.mjs +107 -32
  64. package/beta/realtime/websocket.mjs.map +1 -1
  65. package/beta/realtime/ws.d.mts +0 -2
  66. package/beta/realtime/ws.d.mts.map +1 -1
  67. package/beta/realtime/ws.d.ts +0 -2
  68. package/beta/realtime/ws.d.ts.map +1 -1
  69. package/beta/realtime/ws.js +24 -5
  70. package/beta/realtime/ws.js.map +1 -1
  71. package/beta/realtime/ws.mjs +25 -6
  72. package/beta/realtime/ws.mjs.map +1 -1
  73. package/client.d.mts +17 -2
  74. package/client.d.mts.map +1 -1
  75. package/client.d.ts +17 -2
  76. package/client.d.ts.map +1 -1
  77. package/client.js +422 -70
  78. package/client.js.map +1 -1
  79. package/client.mjs +423 -71
  80. package/client.mjs.map +1 -1
  81. package/core/EventEmitter.d.mts.map +1 -1
  82. package/core/EventEmitter.d.ts.map +1 -1
  83. package/core/EventEmitter.js +67 -9
  84. package/core/EventEmitter.js.map +1 -1
  85. package/core/EventEmitter.mjs +68 -10
  86. package/core/EventEmitter.mjs.map +1 -1
  87. package/core/streaming.d.mts +1 -0
  88. package/core/streaming.d.mts.map +1 -1
  89. package/core/streaming.d.ts +1 -0
  90. package/core/streaming.d.ts.map +1 -1
  91. package/core/streaming.js +216 -26
  92. package/core/streaming.js.map +1 -1
  93. package/core/streaming.mjs +216 -26
  94. package/core/streaming.mjs.map +1 -1
  95. package/helpers/audio.d.mts +5 -5
  96. package/helpers/audio.d.mts.map +1 -1
  97. package/helpers/audio.d.ts +5 -5
  98. package/helpers/audio.d.ts.map +1 -1
  99. package/helpers/audio.js +93 -22
  100. package/helpers/audio.js.map +1 -1
  101. package/helpers/audio.mjs +93 -22
  102. package/helpers/audio.mjs.map +1 -1
  103. package/helpers/standard-schema.d.mts.map +1 -1
  104. package/helpers/standard-schema.d.ts.map +1 -1
  105. package/helpers/standard-schema.js +34 -14
  106. package/helpers/standard-schema.js.map +1 -1
  107. package/helpers/standard-schema.mjs +35 -15
  108. package/helpers/standard-schema.mjs.map +1 -1
  109. package/helpers/zod-v3-strict-schema.d.mts +7 -0
  110. package/helpers/zod-v3-strict-schema.d.mts.map +1 -0
  111. package/helpers/zod-v3-strict-schema.d.ts +7 -0
  112. package/helpers/zod-v3-strict-schema.d.ts.map +1 -0
  113. package/helpers/zod-v3-strict-schema.js +403 -0
  114. package/helpers/zod-v3-strict-schema.js.map +1 -0
  115. package/helpers/zod-v3-strict-schema.mjs +399 -0
  116. package/helpers/zod-v3-strict-schema.mjs.map +1 -0
  117. package/helpers/zod.d.mts.map +1 -1
  118. package/helpers/zod.d.ts.map +1 -1
  119. package/helpers/zod.js +11 -3
  120. package/helpers/zod.js.map +1 -1
  121. package/helpers/zod.mjs +12 -4
  122. package/helpers/zod.mjs.map +1 -1
  123. package/index.d.mts +1 -1
  124. package/index.d.mts.map +1 -1
  125. package/index.d.ts +1 -1
  126. package/index.d.ts.map +1 -1
  127. package/index.js.map +1 -1
  128. package/index.mjs.map +1 -1
  129. package/internal/assistant-stream-delta.d.mts.map +1 -1
  130. package/internal/assistant-stream-delta.d.ts.map +1 -1
  131. package/internal/assistant-stream-delta.js +28 -8
  132. package/internal/assistant-stream-delta.js.map +1 -1
  133. package/internal/assistant-stream-delta.mjs +28 -8
  134. package/internal/assistant-stream-delta.mjs.map +1 -1
  135. package/internal/auth/x509-token-exchange.d.mts +16 -0
  136. package/internal/auth/x509-token-exchange.d.mts.map +1 -0
  137. package/internal/auth/x509-token-exchange.d.ts +16 -0
  138. package/internal/auth/x509-token-exchange.d.ts.map +1 -0
  139. package/internal/auth/x509-token-exchange.js +246 -0
  140. package/internal/auth/x509-token-exchange.js.map +1 -0
  141. package/internal/auth/x509-token-exchange.mjs +243 -0
  142. package/internal/auth/x509-token-exchange.mjs.map +1 -0
  143. package/internal/auth/x509-transport-capability.d.mts +37 -0
  144. package/internal/auth/x509-transport-capability.d.mts.map +1 -0
  145. package/internal/auth/x509-transport-capability.d.ts +37 -0
  146. package/internal/auth/x509-transport-capability.d.ts.map +1 -0
  147. package/internal/auth/x509-transport-capability.js +169 -0
  148. package/internal/auth/x509-transport-capability.js.map +1 -0
  149. package/internal/auth/x509-transport-capability.mjs +164 -0
  150. package/internal/auth/x509-transport-capability.mjs.map +1 -0
  151. package/internal/auth/x509-transport-registry.d.mts +63 -0
  152. package/internal/auth/x509-transport-registry.d.mts.map +1 -0
  153. package/internal/auth/x509-transport-registry.d.ts +63 -0
  154. package/internal/auth/x509-transport-registry.d.ts.map +1 -0
  155. package/internal/auth/x509-transport-registry.js +53 -0
  156. package/internal/auth/x509-transport-registry.js.map +1 -0
  157. package/internal/auth/x509-transport-registry.mjs +48 -0
  158. package/internal/auth/x509-transport-registry.mjs.map +1 -0
  159. package/internal/auth/x509-transport-state-browser.d.mts +21 -0
  160. package/internal/auth/x509-transport-state-browser.d.mts.map +1 -0
  161. package/internal/auth/x509-transport-state-browser.d.ts +21 -0
  162. package/internal/auth/x509-transport-state-browser.d.ts.map +1 -0
  163. package/internal/auth/x509-transport-state-browser.js +30 -0
  164. package/internal/auth/x509-transport-state-browser.js.map +1 -0
  165. package/internal/auth/x509-transport-state-browser.mjs +27 -0
  166. package/internal/auth/x509-transport-state-browser.mjs.map +1 -0
  167. package/internal/auth/x509-transport-state.cjs +30 -0
  168. package/internal/auth/x509-transport-state.cjs.map +1 -0
  169. package/internal/auth/x509-transport-state.d.cts +21 -0
  170. package/internal/auth/x509-transport-state.d.cts.map +1 -0
  171. package/internal/auth/x509-workload-identity-auth.d.mts +128 -0
  172. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -0
  173. package/internal/auth/x509-workload-identity-auth.d.ts +128 -0
  174. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -0
  175. package/internal/auth/x509-workload-identity-auth.js +767 -0
  176. package/internal/auth/x509-workload-identity-auth.js.map +1 -0
  177. package/internal/auth/x509-workload-identity-auth.mjs +757 -0
  178. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -0
  179. package/internal/bedrock.d.mts +2 -0
  180. package/internal/bedrock.d.mts.map +1 -1
  181. package/internal/bedrock.d.ts +2 -0
  182. package/internal/bedrock.d.ts.map +1 -1
  183. package/internal/bedrock.js +169 -5
  184. package/internal/bedrock.js.map +1 -1
  185. package/internal/bedrock.mjs +168 -5
  186. package/internal/bedrock.mjs.map +1 -1
  187. package/internal/data-residency.d.mts +12 -0
  188. package/internal/data-residency.d.mts.map +1 -0
  189. package/internal/data-residency.d.ts +12 -0
  190. package/internal/data-residency.d.ts.map +1 -0
  191. package/internal/data-residency.js +34 -0
  192. package/internal/data-residency.js.map +1 -0
  193. package/internal/data-residency.mjs +30 -0
  194. package/internal/data-residency.mjs.map +1 -0
  195. package/internal/multipart-encoding.d.mts +8 -0
  196. package/internal/multipart-encoding.d.mts.map +1 -0
  197. package/internal/multipart-encoding.d.ts +8 -0
  198. package/internal/multipart-encoding.d.ts.map +1 -0
  199. package/internal/multipart-encoding.js +51 -0
  200. package/internal/multipart-encoding.js.map +1 -0
  201. package/internal/multipart-encoding.mjs +48 -0
  202. package/internal/multipart-encoding.mjs.map +1 -0
  203. package/internal/qs/utils.d.mts.map +1 -1
  204. package/internal/qs/utils.d.ts.map +1 -1
  205. package/internal/qs/utils.js +307 -10
  206. package/internal/qs/utils.js.map +1 -1
  207. package/internal/qs/utils.mjs +307 -10
  208. package/internal/qs/utils.mjs.map +1 -1
  209. package/internal/request-options.d.mts +7 -0
  210. package/internal/request-options.d.mts.map +1 -1
  211. package/internal/request-options.d.ts +7 -0
  212. package/internal/request-options.d.ts.map +1 -1
  213. package/internal/request-options.js +43 -1
  214. package/internal/request-options.js.map +1 -1
  215. package/internal/request-options.mjs +42 -1
  216. package/internal/request-options.mjs.map +1 -1
  217. package/internal/responses/canonical-output-text.js +3 -3
  218. package/internal/responses/canonical-output-text.js.map +1 -1
  219. package/internal/responses/canonical-output-text.mjs +3 -3
  220. package/internal/responses/canonical-output-text.mjs.map +1 -1
  221. package/internal/responses/response-accumulator.d.mts +1 -1
  222. package/internal/responses/response-accumulator.d.mts.map +1 -1
  223. package/internal/responses/response-accumulator.d.ts +1 -1
  224. package/internal/responses/response-accumulator.d.ts.map +1 -1
  225. package/internal/responses/response-accumulator.js +331 -25
  226. package/internal/responses/response-accumulator.js.map +1 -1
  227. package/internal/responses/response-accumulator.mjs +331 -25
  228. package/internal/responses/response-accumulator.mjs.map +1 -1
  229. package/internal/tslib.js +6 -0
  230. package/internal/tslib.mjs +6 -1
  231. package/internal/uploads.d.mts +10 -6
  232. package/internal/uploads.d.mts.map +1 -1
  233. package/internal/uploads.d.ts +10 -6
  234. package/internal/uploads.d.ts.map +1 -1
  235. package/internal/uploads.js +65 -24
  236. package/internal/uploads.js.map +1 -1
  237. package/internal/uploads.mjs +65 -24
  238. package/internal/uploads.mjs.map +1 -1
  239. package/internal/utils/env.d.mts.map +1 -1
  240. package/internal/utils/env.d.ts.map +1 -1
  241. package/internal/utils/env.js +9 -4
  242. package/internal/utils/env.js.map +1 -1
  243. package/internal/utils/env.mjs +9 -4
  244. package/internal/utils/env.mjs.map +1 -1
  245. package/internal/ws.d.mts.map +1 -1
  246. package/internal/ws.d.ts.map +1 -1
  247. package/internal/ws.js +23 -1
  248. package/internal/ws.js.map +1 -1
  249. package/internal/ws.mjs +23 -1
  250. package/internal/ws.mjs.map +1 -1
  251. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  252. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  253. package/lib/AbstractChatCompletionRunner.js +32 -7
  254. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  255. package/lib/AbstractChatCompletionRunner.mjs +34 -9
  256. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  257. package/lib/AssistantStream.d.mts.map +1 -1
  258. package/lib/AssistantStream.d.ts.map +1 -1
  259. package/lib/AssistantStream.js +211 -23
  260. package/lib/AssistantStream.js.map +1 -1
  261. package/lib/AssistantStream.mjs +211 -23
  262. package/lib/AssistantStream.mjs.map +1 -1
  263. package/lib/ChatCompletionStream.d.mts +1 -1
  264. package/lib/ChatCompletionStream.d.mts.map +1 -1
  265. package/lib/ChatCompletionStream.d.ts +1 -1
  266. package/lib/ChatCompletionStream.d.ts.map +1 -1
  267. package/lib/ChatCompletionStream.js +1118 -67
  268. package/lib/ChatCompletionStream.js.map +1 -1
  269. package/lib/ChatCompletionStream.mjs +1119 -68
  270. package/lib/ChatCompletionStream.mjs.map +1 -1
  271. package/lib/EventEmitter.d.mts.map +1 -1
  272. package/lib/EventEmitter.d.ts.map +1 -1
  273. package/lib/EventEmitter.js +67 -9
  274. package/lib/EventEmitter.js.map +1 -1
  275. package/lib/EventEmitter.mjs +68 -10
  276. package/lib/EventEmitter.mjs.map +1 -1
  277. package/lib/EventStream.d.mts +4 -0
  278. package/lib/EventStream.d.mts.map +1 -1
  279. package/lib/EventStream.d.ts +4 -0
  280. package/lib/EventStream.d.ts.map +1 -1
  281. package/lib/EventStream.js +1096 -11
  282. package/lib/EventStream.js.map +1 -1
  283. package/lib/EventStream.mjs +1097 -12
  284. package/lib/EventStream.mjs.map +1 -1
  285. package/lib/ResponsesParser.d.mts.map +1 -1
  286. package/lib/ResponsesParser.d.ts.map +1 -1
  287. package/lib/ResponsesParser.js +1 -1
  288. package/lib/ResponsesParser.js.map +1 -1
  289. package/lib/ResponsesParser.mjs +1 -1
  290. package/lib/ResponsesParser.mjs.map +1 -1
  291. package/lib/Util.d.mts +2 -0
  292. package/lib/Util.d.mts.map +1 -1
  293. package/lib/Util.d.ts +2 -0
  294. package/lib/Util.d.ts.map +1 -1
  295. package/lib/Util.js +7 -4
  296. package/lib/Util.js.map +1 -1
  297. package/lib/Util.mjs +7 -4
  298. package/lib/Util.mjs.map +1 -1
  299. package/lib/assistant-run-polling.d.mts +12 -0
  300. package/lib/assistant-run-polling.d.mts.map +1 -0
  301. package/lib/assistant-run-polling.d.ts +12 -0
  302. package/lib/assistant-run-polling.d.ts.map +1 -0
  303. package/lib/assistant-run-polling.js +17 -0
  304. package/lib/assistant-run-polling.js.map +1 -0
  305. package/lib/assistant-run-polling.mjs +14 -0
  306. package/lib/assistant-run-polling.mjs.map +1 -0
  307. package/lib/embeddings.d.mts +18 -0
  308. package/lib/embeddings.d.mts.map +1 -0
  309. package/lib/embeddings.d.ts +18 -0
  310. package/lib/embeddings.d.ts.map +1 -0
  311. package/lib/embeddings.js +50 -0
  312. package/lib/embeddings.js.map +1 -0
  313. package/lib/embeddings.mjs +47 -0
  314. package/lib/embeddings.mjs.map +1 -0
  315. package/lib/file-processing.d.mts +10 -0
  316. package/lib/file-processing.d.mts.map +1 -0
  317. package/lib/file-processing.d.ts +10 -0
  318. package/lib/file-processing.d.ts.map +1 -0
  319. package/lib/file-processing.js +30 -0
  320. package/lib/file-processing.js.map +1 -0
  321. package/lib/file-processing.mjs +27 -0
  322. package/lib/file-processing.mjs.map +1 -0
  323. package/lib/parser.d.mts.map +1 -1
  324. package/lib/parser.d.ts.map +1 -1
  325. package/lib/parser.js +16 -4
  326. package/lib/parser.js.map +1 -1
  327. package/lib/parser.mjs +16 -4
  328. package/lib/parser.mjs.map +1 -1
  329. package/lib/polling.d.mts +20 -0
  330. package/lib/polling.d.mts.map +1 -0
  331. package/lib/polling.d.ts +20 -0
  332. package/lib/polling.d.ts.map +1 -0
  333. package/lib/polling.js +130 -0
  334. package/lib/polling.js.map +1 -0
  335. package/lib/polling.mjs +127 -0
  336. package/lib/polling.mjs.map +1 -0
  337. package/lib/responses/ResponseStream.d.mts.map +1 -1
  338. package/lib/responses/ResponseStream.d.ts.map +1 -1
  339. package/lib/responses/ResponseStream.js +21 -11
  340. package/lib/responses/ResponseStream.js.map +1 -1
  341. package/lib/responses/ResponseStream.mjs +21 -11
  342. package/lib/responses/ResponseStream.mjs.map +1 -1
  343. package/lib/vector-store-polling.d.mts +22 -0
  344. package/lib/vector-store-polling.d.mts.map +1 -0
  345. package/lib/vector-store-polling.d.ts +22 -0
  346. package/lib/vector-store-polling.d.ts.map +1 -0
  347. package/lib/vector-store-polling.js +24 -0
  348. package/lib/vector-store-polling.js.map +1 -0
  349. package/lib/vector-store-polling.mjs +20 -0
  350. package/lib/vector-store-polling.mjs.map +1 -0
  351. package/lib/vector-store-upload.d.mts +17 -0
  352. package/lib/vector-store-upload.d.mts.map +1 -0
  353. package/lib/vector-store-upload.d.ts +17 -0
  354. package/lib/vector-store-upload.d.ts.map +1 -0
  355. package/lib/vector-store-upload.js +37 -0
  356. package/lib/vector-store-upload.js.map +1 -0
  357. package/lib/vector-store-upload.mjs +34 -0
  358. package/lib/vector-store-upload.mjs.map +1 -0
  359. package/lib/webhook-signature.d.mts +15 -0
  360. package/lib/webhook-signature.d.mts.map +1 -0
  361. package/lib/webhook-signature.d.ts +15 -0
  362. package/lib/webhook-signature.d.ts.map +1 -0
  363. package/lib/webhook-signature.js +125 -0
  364. package/lib/webhook-signature.js.map +1 -0
  365. package/lib/webhook-signature.mjs +121 -0
  366. package/lib/webhook-signature.mjs.map +1 -0
  367. package/package.json +14 -1
  368. package/realtime/internal-base.d.mts +2 -0
  369. package/realtime/internal-base.d.mts.map +1 -1
  370. package/realtime/internal-base.d.ts +2 -0
  371. package/realtime/internal-base.d.ts.map +1 -1
  372. package/realtime/internal-base.js +15 -0
  373. package/realtime/internal-base.js.map +1 -1
  374. package/realtime/internal-base.mjs +14 -0
  375. package/realtime/internal-base.mjs.map +1 -1
  376. package/realtime/websocket.d.mts +3 -2
  377. package/realtime/websocket.d.mts.map +1 -1
  378. package/realtime/websocket.d.ts +3 -2
  379. package/realtime/websocket.d.ts.map +1 -1
  380. package/realtime/websocket.js +90 -26
  381. package/realtime/websocket.js.map +1 -1
  382. package/realtime/websocket.mjs +91 -27
  383. package/realtime/websocket.mjs.map +1 -1
  384. package/realtime/ws.d.mts.map +1 -1
  385. package/realtime/ws.d.ts.map +1 -1
  386. package/realtime/ws.js +9 -1
  387. package/realtime/ws.js.map +1 -1
  388. package/realtime/ws.mjs +10 -2
  389. package/realtime/ws.mjs.map +1 -1
  390. package/resources/admin/organization/index.d.mts +2 -2
  391. package/resources/admin/organization/index.d.mts.map +1 -1
  392. package/resources/admin/organization/index.d.ts +2 -2
  393. package/resources/admin/organization/index.d.ts.map +1 -1
  394. package/resources/admin/organization/index.js.map +1 -1
  395. package/resources/admin/organization/index.mjs.map +1 -1
  396. package/resources/admin/organization/organization.d.mts +4 -4
  397. package/resources/admin/organization/organization.d.mts.map +1 -1
  398. package/resources/admin/organization/organization.d.ts +4 -4
  399. package/resources/admin/organization/organization.d.ts.map +1 -1
  400. package/resources/admin/organization/organization.js.map +1 -1
  401. package/resources/admin/organization/organization.mjs.map +1 -1
  402. package/resources/admin/organization/projects/index.d.mts +1 -1
  403. package/resources/admin/organization/projects/index.d.mts.map +1 -1
  404. package/resources/admin/organization/projects/index.d.ts +1 -1
  405. package/resources/admin/organization/projects/index.d.ts.map +1 -1
  406. package/resources/admin/organization/projects/index.js.map +1 -1
  407. package/resources/admin/organization/projects/index.mjs.map +1 -1
  408. package/resources/admin/organization/projects/projects.d.mts +22 -5
  409. package/resources/admin/organization/projects/projects.d.mts.map +1 -1
  410. package/resources/admin/organization/projects/projects.d.ts +22 -5
  411. package/resources/admin/organization/projects/projects.d.ts.map +1 -1
  412. package/resources/admin/organization/projects/projects.js.map +1 -1
  413. package/resources/admin/organization/projects/projects.mjs.map +1 -1
  414. package/resources/admin/organization/usage.d.mts +62 -1
  415. package/resources/admin/organization/usage.d.mts.map +1 -1
  416. package/resources/admin/organization/usage.d.ts +62 -1
  417. package/resources/admin/organization/usage.d.ts.map +1 -1
  418. package/resources/admin/organization/usage.js.map +1 -1
  419. package/resources/admin/organization/usage.mjs.map +1 -1
  420. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  421. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  422. package/resources/beta/responses/internal-base.js +2 -0
  423. package/resources/beta/responses/internal-base.js.map +1 -1
  424. package/resources/beta/responses/internal-base.mjs +2 -0
  425. package/resources/beta/responses/internal-base.mjs.map +1 -1
  426. package/resources/beta/responses/responses.d.mts +17 -20
  427. package/resources/beta/responses/responses.d.mts.map +1 -1
  428. package/resources/beta/responses/responses.d.ts +17 -20
  429. package/resources/beta/responses/responses.d.ts.map +1 -1
  430. package/resources/beta/responses/responses.js.map +1 -1
  431. package/resources/beta/responses/responses.mjs.map +1 -1
  432. package/resources/beta/threads/runs/index.d.mts +1 -1
  433. package/resources/beta/threads/runs/index.d.mts.map +1 -1
  434. package/resources/beta/threads/runs/index.d.ts +1 -1
  435. package/resources/beta/threads/runs/index.d.ts.map +1 -1
  436. package/resources/beta/threads/runs/runs.d.mts.map +1 -1
  437. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  438. package/resources/beta/threads/runs/runs.js +2 -43
  439. package/resources/beta/threads/runs/runs.js.map +1 -1
  440. package/resources/beta/threads/runs/runs.mjs +2 -43
  441. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  442. package/resources/chat/completions/completions.d.mts +6 -0
  443. package/resources/chat/completions/completions.d.mts.map +1 -1
  444. package/resources/chat/completions/completions.d.ts +6 -0
  445. package/resources/chat/completions/completions.d.ts.map +1 -1
  446. package/resources/chat/completions/completions.js.map +1 -1
  447. package/resources/chat/completions/completions.mjs.map +1 -1
  448. package/resources/embeddings.d.mts.map +1 -1
  449. package/resources/embeddings.d.ts.map +1 -1
  450. package/resources/embeddings.js +2 -36
  451. package/resources/embeddings.js.map +1 -1
  452. package/resources/embeddings.mjs +2 -36
  453. package/resources/embeddings.mjs.map +1 -1
  454. package/resources/files.d.mts.map +1 -1
  455. package/resources/files.d.ts.map +1 -1
  456. package/resources/files.js +2 -15
  457. package/resources/files.js.map +1 -1
  458. package/resources/files.mjs +2 -15
  459. package/resources/files.mjs.map +1 -1
  460. package/resources/images.d.mts +12 -22
  461. package/resources/images.d.mts.map +1 -1
  462. package/resources/images.d.ts +12 -22
  463. package/resources/images.d.ts.map +1 -1
  464. package/resources/realtime/calls.d.mts +23 -1
  465. package/resources/realtime/calls.d.mts.map +1 -1
  466. package/resources/realtime/calls.d.ts +23 -1
  467. package/resources/realtime/calls.d.ts.map +1 -1
  468. package/resources/realtime/calls.js +24 -0
  469. package/resources/realtime/calls.js.map +1 -1
  470. package/resources/realtime/calls.mjs +24 -0
  471. package/resources/realtime/calls.mjs.map +1 -1
  472. package/resources/realtime/index.d.mts +1 -1
  473. package/resources/realtime/index.d.mts.map +1 -1
  474. package/resources/realtime/index.d.ts +1 -1
  475. package/resources/realtime/index.d.ts.map +1 -1
  476. package/resources/realtime/index.js.map +1 -1
  477. package/resources/realtime/index.mjs +1 -1
  478. package/resources/realtime/index.mjs.map +1 -1
  479. package/resources/realtime/realtime.d.mts +5 -4
  480. package/resources/realtime/realtime.d.mts.map +1 -1
  481. package/resources/realtime/realtime.d.ts +5 -4
  482. package/resources/realtime/realtime.d.ts.map +1 -1
  483. package/resources/realtime/realtime.js.map +1 -1
  484. package/resources/realtime/realtime.mjs.map +1 -1
  485. package/resources/responses/internal-base.d.mts.map +1 -1
  486. package/resources/responses/internal-base.d.ts.map +1 -1
  487. package/resources/responses/internal-base.js +2 -0
  488. package/resources/responses/internal-base.js.map +1 -1
  489. package/resources/responses/internal-base.mjs +2 -0
  490. package/resources/responses/internal-base.mjs.map +1 -1
  491. package/resources/responses/responses.d.mts +17 -20
  492. package/resources/responses/responses.d.mts.map +1 -1
  493. package/resources/responses/responses.d.ts +17 -20
  494. package/resources/responses/responses.d.ts.map +1 -1
  495. package/resources/responses/responses.js.map +1 -1
  496. package/resources/responses/responses.mjs.map +1 -1
  497. package/resources/vector-stores/file-batches.d.mts.map +1 -1
  498. package/resources/vector-stores/file-batches.d.ts.map +1 -1
  499. package/resources/vector-stores/file-batches.js +4 -61
  500. package/resources/vector-stores/file-batches.js.map +1 -1
  501. package/resources/vector-stores/file-batches.mjs +4 -61
  502. package/resources/vector-stores/file-batches.mjs.map +1 -1
  503. package/resources/vector-stores/files.d.mts +1 -1
  504. package/resources/vector-stores/files.d.mts.map +1 -1
  505. package/resources/vector-stores/files.d.ts +1 -1
  506. package/resources/vector-stores/files.d.ts.map +1 -1
  507. package/resources/vector-stores/files.js +2 -35
  508. package/resources/vector-stores/files.js.map +1 -1
  509. package/resources/vector-stores/files.mjs +2 -35
  510. package/resources/vector-stores/files.mjs.map +1 -1
  511. package/resources/webhooks/webhooks.d.mts.map +1 -1
  512. package/resources/webhooks/webhooks.d.ts.map +1 -1
  513. package/resources/webhooks/webhooks.js +5 -43
  514. package/resources/webhooks/webhooks.js.map +1 -1
  515. package/resources/webhooks/webhooks.mjs +5 -43
  516. package/resources/webhooks/webhooks.mjs.map +1 -1
  517. package/src/auth/index.ts +6 -1
  518. package/src/auth/subject-token-providers.ts +196 -4
  519. package/src/auth/types.ts +24 -0
  520. package/src/auth/workload-identity-auth.ts +104 -7
  521. package/src/auth/x509-transport.ts +49 -0
  522. package/src/azure.ts +22 -1
  523. package/src/bedrock.ts +49 -5
  524. package/src/beta/realtime/internal-base.ts +15 -0
  525. package/src/beta/realtime/websocket.ts +148 -40
  526. package/src/beta/realtime/ws.ts +31 -13
  527. package/src/client.ts +536 -92
  528. package/src/core/EventEmitter.ts +91 -7
  529. package/src/core/streaming.ts +226 -30
  530. package/src/helpers/audio.ts +93 -22
  531. package/src/helpers/standard-schema.ts +50 -16
  532. package/src/helpers/zod-v3-strict-schema.ts +514 -0
  533. package/src/helpers/zod.ts +17 -4
  534. package/src/index.ts +1 -1
  535. package/src/internal/assistant-stream-delta.ts +33 -10
  536. package/src/internal/auth/x509-token-exchange.ts +310 -0
  537. package/src/internal/auth/x509-transport-capability.ts +219 -0
  538. package/src/internal/auth/x509-transport-registry.ts +118 -0
  539. package/src/internal/auth/x509-transport-state-browser.ts +36 -0
  540. package/src/internal/auth/x509-transport-state.cts +36 -0
  541. package/src/internal/auth/x509-workload-identity-auth.ts +958 -0
  542. package/src/internal/bedrock.ts +182 -5
  543. package/src/internal/data-residency.ts +44 -0
  544. package/src/internal/multipart-encoding.ts +53 -0
  545. package/src/internal/qs/utils.ts +375 -13
  546. package/src/internal/request-options.ts +52 -1
  547. package/src/internal/responses/canonical-output-text.ts +3 -3
  548. package/src/internal/responses/response-accumulator.ts +411 -24
  549. package/src/internal/uploads.ts +81 -26
  550. package/src/internal/utils/env.ts +9 -5
  551. package/src/internal/ws.ts +24 -3
  552. package/src/lib/AbstractChatCompletionRunner.ts +33 -6
  553. package/src/lib/AssistantStream.ts +262 -22
  554. package/src/lib/ChatCompletionStream.ts +1467 -103
  555. package/src/lib/EventEmitter.ts +91 -7
  556. package/src/lib/EventStream.ts +1483 -10
  557. package/src/lib/ResponsesParser.ts +4 -1
  558. package/src/lib/Util.ts +7 -5
  559. package/src/lib/assistant-run-polling.ts +27 -0
  560. package/src/lib/embeddings.ts +65 -0
  561. package/src/lib/file-processing.ts +36 -0
  562. package/src/lib/parser.ts +19 -4
  563. package/src/lib/polling.ts +144 -0
  564. package/src/lib/responses/ResponseStream.ts +22 -10
  565. package/src/lib/vector-store-polling.ts +46 -0
  566. package/src/lib/vector-store-upload.ts +53 -0
  567. package/src/lib/webhook-signature.ts +164 -0
  568. package/src/realtime/internal-base.ts +15 -0
  569. package/src/realtime/websocket.ts +130 -27
  570. package/src/realtime/ws.ts +15 -2
  571. package/src/resources/admin/organization/index.ts +2 -0
  572. package/src/resources/admin/organization/organization.ts +4 -0
  573. package/src/resources/admin/organization/projects/index.ts +1 -0
  574. package/src/resources/admin/organization/projects/projects.ts +37 -4
  575. package/src/resources/admin/organization/usage.ts +83 -0
  576. package/src/resources/beta/responses/internal-base.ts +2 -0
  577. package/src/resources/beta/responses/responses.ts +19 -22
  578. package/src/resources/beta/threads/runs/index.ts +1 -1
  579. package/src/resources/beta/threads/runs/runs.ts +2 -45
  580. package/src/resources/chat/completions/completions.ts +7 -0
  581. package/src/resources/embeddings.ts +2 -42
  582. package/src/resources/files.ts +2 -19
  583. package/src/resources/images.ts +12 -22
  584. package/src/resources/realtime/api.md +1 -0
  585. package/src/resources/realtime/calls.ts +46 -0
  586. package/src/resources/realtime/index.ts +7 -1
  587. package/src/resources/realtime/realtime.ts +5 -3
  588. package/src/resources/responses/internal-base.ts +2 -0
  589. package/src/resources/responses/responses.ts +19 -22
  590. package/src/resources/vector-stores/file-batches.ts +8 -77
  591. package/src/resources/vector-stores/files.ts +3 -43
  592. package/src/resources/webhooks/webhooks.ts +5 -61
  593. package/src/version.ts +1 -1
  594. package/version.d.mts +1 -1
  595. package/version.d.ts +1 -1
  596. package/version.js +1 -1
  597. package/version.mjs +1 -1
@@ -264,7 +264,10 @@ function parseToolCall<Params extends ResponseCreateParamsBase>(
264
264
  if (isAutoParsableTool(inputTool)) {
265
265
  parsedArguments = inputTool.$parseRaw(toolCall.arguments);
266
266
  } else if (inputTool?.strict) {
267
- parsedArguments = JSON.parse(toolCall.arguments);
267
+ parsedArguments = parseResponseFormatContent(
268
+ { type: 'json_schema', $parseRaw: undefined },
269
+ toolCall.arguments,
270
+ );
268
271
  }
269
272
 
270
273
  return {
package/src/lib/Util.ts CHANGED
@@ -1,15 +1,17 @@
1
1
  /**
2
2
  * Like `Promise.allSettled()` but throws an error if any promises are rejected.
3
+ * Rejection reasons remain available on the thrown error's non-enumerable `rejections`
4
+ * property without being written to the global console.
3
5
  */
4
6
  export const allSettledWithThrow = async <R>(promises: Promise<R>[]): Promise<R[]> => {
5
7
  const results = await Promise.allSettled(promises);
6
8
  const rejected = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');
7
9
  if (rejected.length) {
8
- for (const result of rejected) {
9
- console.error(result.reason);
10
- }
11
-
12
- throw new Error(`${rejected.length} promise(s) failed - see the above errors`);
10
+ throw Object.defineProperty(new Error(`${rejected.length} promise(s) failed`), 'rejections', {
11
+ configurable: true,
12
+ value: rejected.map(({ reason }) => reason),
13
+ writable: true,
14
+ });
13
15
  }
14
16
 
15
17
  // Note: TS was complaining about using `.filter().map()` here for some reason
@@ -0,0 +1,27 @@
1
+ import type { RequestOptions } from '../internal/request-options';
2
+ import type { Run, RunRetrieveParams, Runs } from '../resources/beta/threads/runs/runs';
3
+ import { pollWithResponse } from './polling';
4
+
5
+ /**
6
+ * Polls an assistant run through the resource's retrieve method, preserving the
7
+ * original params object, request-header merge, and terminal run states.
8
+ *
9
+ * @internal
10
+ */
11
+ export function pollAssistantRun(
12
+ resource: Pick<Runs, 'retrieve'>,
13
+ runID: string,
14
+ params: RunRetrieveParams,
15
+ options?: RequestOptions & { pollIntervalMs?: number },
16
+ ): Promise<Run> {
17
+ return pollWithResponse(
18
+ (headers) =>
19
+ resource.retrieve(runID, params, {
20
+ ...options,
21
+ headers: { ...options?.headers, ...headers },
22
+ }),
23
+ ['queued', 'in_progress', 'cancelling'],
24
+ ['requires_action', 'incomplete', 'cancelled', 'completed', 'failed', 'expired'],
25
+ options,
26
+ );
27
+ }
@@ -0,0 +1,65 @@
1
+ import type { OpenAI } from '../client';
2
+ import type { APIPromise } from '../core/api-promise';
3
+ import type { RequestOptions } from '../internal/request-options';
4
+ import { loggerFor, toFloat32Array } from '../internal/utils';
5
+ import type { CreateEmbeddingResponse, Embedding, EmbeddingCreateParams } from '../resources/embeddings';
6
+
7
+ type Base64EmbeddingResponse = Omit<CreateEmbeddingResponse, 'data'> & {
8
+ data: (Omit<Embedding, 'embedding'> & { embedding: string })[];
9
+ };
10
+
11
+ /**
12
+ * Sends the optimized embeddings request while preserving explicit encodings and
13
+ * the original APIPromise response accessors.
14
+ *
15
+ * @internal
16
+ */
17
+ export function createEmbedding(
18
+ client: OpenAI,
19
+ body: EmbeddingCreateParams,
20
+ options?: RequestOptions,
21
+ ): APIPromise<CreateEmbeddingResponse | Base64EmbeddingResponse> {
22
+ const hasUserProvidedEncodingFormat = !!body.encoding_format;
23
+ // No encoding_format specified, defaulting to base64 for performance reasons.
24
+ // See https://github.com/openai/openai-node/pull/1312.
25
+ const encodingFormat = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';
26
+
27
+ if (hasUserProvidedEncodingFormat) {
28
+ loggerFor(client).debug('embeddings/user defined encoding_format:', body.encoding_format);
29
+ }
30
+
31
+ const response: APIPromise<CreateEmbeddingResponse> = client.post('/embeddings', {
32
+ body: {
33
+ ...body,
34
+ encoding_format: encodingFormat,
35
+ },
36
+ ...options,
37
+ __security: { bearerAuth: true },
38
+ });
39
+
40
+ // Explicit encodings return the original response promise unchanged.
41
+ if (hasUserProvidedEncodingFormat) {
42
+ return response;
43
+ }
44
+
45
+ // The default request uses base64 on the wire, but returns the API's default
46
+ // numeric embedding representation to the caller.
47
+ loggerFor(client).debug('embeddings/decoding base64 embeddings from base64');
48
+
49
+ return response._thenUnwrap((data) => {
50
+ if (data && data.data) {
51
+ const embeddings = data.data;
52
+ const { length } = embeddings;
53
+ // Preserve the original iteration length and skip sparse-array holes.
54
+ for (let index = 0; index < length; index += 1) {
55
+ if (index in embeddings) {
56
+ const embeddingBase64Obj = embeddings[index] as Embedding;
57
+ const embeddingBase64Str = embeddingBase64Obj.embedding as unknown as string;
58
+ embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);
59
+ }
60
+ }
61
+ }
62
+
63
+ return data;
64
+ });
65
+ }
@@ -0,0 +1,36 @@
1
+ import { APIConnectionTimeoutError } from '../error';
2
+ import { sleep } from '../internal/utils/sleep';
3
+ import type { FileObject, Files } from '../resources/files';
4
+
5
+ /**
6
+ * Waits for file processing through the resource's retrieve method. The timeout
7
+ * is checked after each subsequent retrieval, preserving the existing behavior
8
+ * for an initially terminal file and for a terminal response received too late.
9
+ *
10
+ * @internal
11
+ */
12
+ export async function waitForFileProcessing(
13
+ resource: Pick<Files, 'retrieve'>,
14
+ id: string,
15
+ pollInterval: number,
16
+ maxWait: number,
17
+ ): Promise<FileObject> {
18
+ const terminalStates = new Set(['processed', 'error', 'deleted']);
19
+ const start = Date.now();
20
+ let file = await resource.retrieve(id);
21
+
22
+ while (!file.status || !terminalStates.has(file.status)) {
23
+ // oxlint-disable-next-line no-await-in-loop -- Wait before issuing the next processing-status request.
24
+ await sleep(pollInterval);
25
+
26
+ // oxlint-disable-next-line no-await-in-loop -- The timeout and next iteration depend on this response.
27
+ file = await resource.retrieve(id);
28
+ if (Date.now() - start > maxWait) {
29
+ throw new APIConnectionTimeoutError({
30
+ message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,
31
+ });
32
+ }
33
+ }
34
+
35
+ return file;
36
+ }
package/src/lib/parser.ts CHANGED
@@ -75,7 +75,10 @@ export function makeParseableResponseFormat<ParsedT>(
75
75
  response_format: ResponseFormatJSONSchema,
76
76
  parser: (content: string) => ParsedT,
77
77
  ): AutoParseableResponseFormat<ParsedT> {
78
- const obj = { ...response_format };
78
+ const obj = { ...response_format, type: 'json_schema' as const };
79
+ obj.json_schema = { ...obj.json_schema };
80
+ delete (obj as { toJSON?: unknown }).toJSON;
81
+ delete (obj.json_schema as { toJSON?: unknown }).toJSON;
79
82
 
80
83
  Object.defineProperties(obj, {
81
84
  $brand: {
@@ -107,7 +110,8 @@ export function makeParseableTextFormat<ParsedT>(
107
110
  response_format: ResponseFormatTextJSONSchemaConfig,
108
111
  parser: (content: string) => ParsedT,
109
112
  ): AutoParseableTextFormat<ParsedT> {
110
- const obj = { ...response_format };
113
+ const obj = { ...response_format, type: 'json_schema' as const };
114
+ delete (obj as { toJSON?: unknown }).toJSON;
111
115
 
112
116
  Object.defineProperties(obj, {
113
117
  $brand: {
@@ -169,7 +173,15 @@ export function parseResponseFormatContent<ParsedT>(format: unknown, content: st
169
173
  return format.$parseRaw(content) as ParsedT;
170
174
  }
171
175
 
172
- return JSON.parse(content) as ParsedT;
176
+ try {
177
+ return JSON.parse(content) as ParsedT;
178
+ } catch (error) {
179
+ if (error instanceof SyntaxError) {
180
+ throw new SyntaxError('Error reading response: invalid structured output JSON.');
181
+ }
182
+
183
+ throw error;
184
+ }
173
185
  }
174
186
 
175
187
  /** Type-level details used to infer a chat function tool's parser and execution callback. */
@@ -344,7 +356,10 @@ function parseToolCall<Params extends ChatCompletionCreateParams>(
344
356
  if (isAutoParsableTool(inputTool)) {
345
357
  parsedArguments = inputTool.$parseRaw(toolCall.function.arguments);
346
358
  } else if (inputTool?.function.strict) {
347
- parsedArguments = JSON.parse(toolCall.function.arguments);
359
+ parsedArguments = parseResponseFormatContent(
360
+ { type: 'json_schema', $parseRaw: undefined },
361
+ toolCall.function.arguments,
362
+ );
348
363
  }
349
364
 
350
365
  return {
@@ -0,0 +1,144 @@
1
+ import type { APIPromise } from '../core/api-promise';
2
+ import { APIUserAbortError } from '../core/error';
3
+ import { buildHeaders } from '../internal/headers';
4
+ import type { NullableHeaders } from '../internal/headers';
5
+ import type { RequestOptions } from '../internal/request-options';
6
+ import { sleep } from '../internal/utils/sleep';
7
+
8
+ type PollOptions = RequestOptions & { pollIntervalMs?: number };
9
+
10
+ function sleepUntilAborted(milliseconds: number, signal: AbortSignal): Promise<void> {
11
+ // oxlint-disable-next-line promise/avoid-new -- Timer and abort callbacks need a portable Promise bridge.
12
+ return new Promise((resolve, reject) => {
13
+ let timer: ReturnType<typeof setTimeout> | undefined;
14
+ let registered: (() => void) | undefined;
15
+ let settled = false;
16
+
17
+ const removeAbortListener = (listener: () => void) => {
18
+ try {
19
+ signal.removeEventListener('abort', listener);
20
+ } catch {
21
+ // Caller-controlled cleanup must never prevent the polling promise from settling.
22
+ }
23
+ };
24
+
25
+ const cleanup = () => {
26
+ if (timer !== undefined) {
27
+ clearTimeout(timer);
28
+ timer = undefined;
29
+ }
30
+ if (registered) {
31
+ const listener = registered;
32
+ registered = undefined;
33
+ removeAbortListener(listener);
34
+ }
35
+ };
36
+
37
+ const abort = () => {
38
+ if (settled) {
39
+ return;
40
+ }
41
+ settled = true;
42
+ cleanup();
43
+
44
+ try {
45
+ const error = new APIUserAbortError();
46
+ Object.defineProperty(error, 'cause', {
47
+ value: signal.reason,
48
+ writable: true,
49
+ configurable: true,
50
+ });
51
+ reject(error);
52
+ } catch (error) {
53
+ reject(error);
54
+ }
55
+ };
56
+
57
+ if (signal.aborted) {
58
+ abort();
59
+ return;
60
+ }
61
+
62
+ timer = setTimeout(() => {
63
+ if (settled) {
64
+ return;
65
+ }
66
+ settled = true;
67
+ cleanup();
68
+ resolve();
69
+ }, milliseconds);
70
+
71
+ registered = abort;
72
+
73
+ try {
74
+ signal.addEventListener('abort', abort, { once: true });
75
+
76
+ if (settled) {
77
+ removeAbortListener(abort);
78
+ } else if (signal.aborted) {
79
+ abort();
80
+ }
81
+ } catch (error) {
82
+ if (settled) {
83
+ removeAbortListener(abort);
84
+ } else {
85
+ settled = true;
86
+ cleanup();
87
+ reject(error);
88
+ }
89
+ }
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Repeatedly retrieves a lifecycle resource using the existing polling-helper
95
+ * headers. Intermediate states wait for the explicit interval, server interval,
96
+ * or five-second default; terminal states return the same parsed object.
97
+ * The caller's signal interrupts intermediate waits, unknown states retry
98
+ * immediately, and retrieval errors propagate unchanged.
99
+ *
100
+ * @internal
101
+ */
102
+ export async function pollWithResponse<T extends { status: string }>(
103
+ retrieve: (headers: NullableHeaders) => APIPromise<T>,
104
+ intermediateStatuses: readonly T['status'][],
105
+ terminalStatuses: readonly T['status'][],
106
+ options?: PollOptions,
107
+ ): Promise<T> {
108
+ const headers = buildHeaders([
109
+ options?.headers,
110
+ {
111
+ 'X-Stainless-Poll-Helper': 'true',
112
+ 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,
113
+ },
114
+ ]);
115
+
116
+ while (true) {
117
+ // oxlint-disable-next-line no-await-in-loop -- Each poll depends on the previous response.
118
+ const { data, response } = await retrieve(headers).withResponse();
119
+ const { status } = data;
120
+
121
+ if (intermediateStatuses.includes(status)) {
122
+ let sleepInterval = 5000;
123
+
124
+ if (options?.pollIntervalMs) {
125
+ sleepInterval = options.pollIntervalMs;
126
+ } else {
127
+ const headerInterval = response.headers.get('openai-poll-after-ms');
128
+ if (headerInterval) {
129
+ // oxlint-disable-next-line radix -- Preserve the existing decimal and hexadecimal header parsing.
130
+ const headerIntervalMs = Number.parseInt(headerInterval);
131
+ if (!Number.isNaN(headerIntervalMs)) {
132
+ sleepInterval = headerIntervalMs;
133
+ }
134
+ }
135
+ }
136
+ const signal =
137
+ options && Object.prototype.propertyIsEnumerable.call(options, 'signal') ? options.signal : undefined;
138
+ // oxlint-disable-next-line no-await-in-loop -- Each poll waits or aborts before the next request.
139
+ await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep(sleepInterval));
140
+ } else if (terminalStatuses.includes(status)) {
141
+ return data;
142
+ }
143
+ }
144
+ }
@@ -154,51 +154,63 @@ export class ResponseStream<ParsedT = null>
154
154
  throw new APIError(undefined, error, event.message, undefined);
155
155
  }
156
156
 
157
+ let dispatchEvent: ResponseStreamEvent = event;
157
158
  const response = accumulateResponseWithContext(
158
159
  event,
159
160
  this.#currentResponseSnapshot,
160
161
  this.#accumulatorContext,
162
+ true,
163
+ (sanitizedEvent) => {
164
+ dispatchEvent = sanitizedEvent;
165
+ },
161
166
  );
162
167
  this.#currentResponseSnapshot = response;
163
168
  maybeEmit('event', event);
164
169
 
165
- switch (event.type) {
170
+ switch (dispatchEvent.type) {
166
171
  case 'response.output_text.delta': {
167
- const output = response.output[event.output_index];
172
+ const output = response.output[dispatchEvent.output_index];
168
173
  if (!output) {
169
- throw new OpenAIError(`missing output at index ${event.output_index}`);
174
+ throw new OpenAIError(`missing output at index ${dispatchEvent.output_index}`);
170
175
  }
171
176
  if (output.type === 'message') {
172
- const content = output.content[event.content_index];
177
+ const content = output.content[dispatchEvent.content_index];
173
178
  if (!content) {
174
- throw new OpenAIError(`missing content at index ${event.content_index}`);
179
+ throw new OpenAIError(`missing content at index ${dispatchEvent.content_index}`);
175
180
  }
176
181
  if (content.type !== 'output_text') {
177
182
  throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);
178
183
  }
179
184
 
180
185
  maybeEmit('response.output_text.delta', {
181
- ...event,
186
+ ...dispatchEvent,
187
+ type: dispatchEvent.type,
188
+ item_id: dispatchEvent.item_id,
189
+ output_index: dispatchEvent.output_index,
190
+ content_index: dispatchEvent.content_index,
182
191
  snapshot: content.text,
183
192
  });
184
193
  }
185
194
  break;
186
195
  }
187
196
  case 'response.function_call_arguments.delta': {
188
- const output = response.output[event.output_index];
197
+ const output = response.output[dispatchEvent.output_index];
189
198
  if (!output) {
190
- throw new OpenAIError(`missing output at index ${event.output_index}`);
199
+ throw new OpenAIError(`missing output at index ${dispatchEvent.output_index}`);
191
200
  }
192
201
  if (output.type === 'function_call') {
193
202
  maybeEmit('response.function_call_arguments.delta', {
194
- ...event,
203
+ ...dispatchEvent,
204
+ type: dispatchEvent.type,
205
+ item_id: dispatchEvent.item_id,
206
+ output_index: dispatchEvent.output_index,
195
207
  snapshot: output.arguments,
196
208
  });
197
209
  }
198
210
  break;
199
211
  }
200
212
  default: {
201
- maybeEmit(event.type, event);
213
+ maybeEmit(dispatchEvent.type, event);
202
214
  break;
203
215
  }
204
216
  }
@@ -0,0 +1,46 @@
1
+ import type { RequestOptions } from '../internal/request-options';
2
+ import type { FileBatches, VectorStoreFileBatch } from '../resources/vector-stores/file-batches';
3
+ import type { Files, VectorStoreFile } from '../resources/vector-stores/files';
4
+ import { pollWithResponse } from './polling';
5
+
6
+ type PollOptions = RequestOptions & { pollIntervalMs?: number };
7
+
8
+ /**
9
+ * Polls an attached file through the resource's retrieve method. Failed files are
10
+ * returned to the caller, and cancelled files retain their existing retry behavior.
11
+ *
12
+ * @internal
13
+ */
14
+ export function pollVectorStoreFile(
15
+ resource: Pick<Files, 'retrieve'>,
16
+ vectorStoreID: string,
17
+ fileID: string,
18
+ options?: PollOptions,
19
+ ): Promise<VectorStoreFile> {
20
+ return pollWithResponse(
21
+ (headers) => resource.retrieve(fileID, { vector_store_id: vectorStoreID }, { ...options, headers }),
22
+ ['in_progress'],
23
+ ['failed', 'completed'],
24
+ options,
25
+ );
26
+ }
27
+
28
+ /**
29
+ * Polls a file batch through the resource's retrieve method until it completes,
30
+ * fails, or is cancelled. Retrieval errors are propagated unchanged.
31
+ *
32
+ * @internal
33
+ */
34
+ export function pollVectorStoreFileBatch(
35
+ resource: Pick<FileBatches, 'retrieve'>,
36
+ vectorStoreID: string,
37
+ batchID: string,
38
+ options?: PollOptions,
39
+ ): Promise<VectorStoreFileBatch> {
40
+ return pollWithResponse(
41
+ (headers) => resource.retrieve(batchID, { vector_store_id: vectorStoreID }, { ...options, headers }),
42
+ ['in_progress'],
43
+ ['failed', 'cancelled', 'completed'],
44
+ options,
45
+ );
46
+ }
@@ -0,0 +1,53 @@
1
+ import type { OpenAI } from '../client';
2
+ import type { RequestOptions } from '../internal/request-options';
3
+ import type { FileBatches, VectorStoreFileBatch } from '../resources/vector-stores/file-batches';
4
+ import type { Uploadable } from '../uploads';
5
+ import { allSettledWithThrow } from './Util';
6
+
7
+ type UploadOptions = RequestOptions & { pollIntervalMs?: number; maxConcurrency?: number };
8
+
9
+ /**
10
+ * Uploads files with a shared iterator, then creates and polls the batch. Every
11
+ * worker settles before upload failures are propagated.
12
+ *
13
+ * @internal
14
+ */
15
+ export async function uploadAndPollVectorStoreFileBatch(
16
+ resource: Pick<FileBatches, 'createAndPoll'>,
17
+ client: Pick<OpenAI, 'files'>,
18
+ vectorStoreId: string,
19
+ files: Uploadable[],
20
+ fileIds: string[],
21
+ options?: UploadOptions,
22
+ ): Promise<VectorStoreFileBatch> {
23
+ if (files === null || files === undefined || files.length === 0) {
24
+ throw new Error(
25
+ "No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead",
26
+ );
27
+ }
28
+
29
+ const configuredConcurrency = options?.maxConcurrency ?? 5;
30
+ const concurrencyLimit = Math.min(configuredConcurrency, files.length);
31
+ const fileIterator = files.values();
32
+ const allFileIds = [...fileIds];
33
+
34
+ // This code is based on this design. The libraries don't accommodate our environment limits.
35
+ // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all
36
+ async function processFiles(iterator: IterableIterator<Uploadable>) {
37
+ for (const item of iterator) {
38
+ // oxlint-disable-next-line no-await-in-loop -- Each worker uploads one file at a time.
39
+ const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);
40
+ allFileIds.push(fileObj.id);
41
+ }
42
+ }
43
+
44
+ // Assigning length preserves native validation of invalid concurrency values.
45
+ const workers: Promise<void>[] = [];
46
+ workers.length = concurrencyLimit;
47
+ for (let index = 0; index < workers.length; index += 1) {
48
+ workers[index] = processFiles(fileIterator);
49
+ }
50
+ await allSettledWithThrow(workers);
51
+
52
+ return await resource.createAndPoll(vectorStoreId, { file_ids: allFileIds }, options);
53
+ }