openai 7.12.1 → 7.14.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 (517) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/client.d.mts +3 -0
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +3 -0
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -0
  9. package/client.mjs.map +1 -1
  10. package/helpers/live.d.mts +2 -0
  11. package/helpers/live.d.mts.map +1 -0
  12. package/helpers/live.d.ts +2 -0
  13. package/helpers/live.d.ts.map +1 -0
  14. package/helpers/live.js +6 -0
  15. package/helpers/live.js.map +1 -0
  16. package/helpers/live.mjs +2 -0
  17. package/helpers/live.mjs.map +1 -0
  18. package/lib/live/transcript-grouper.d.mts +96 -0
  19. package/lib/live/transcript-grouper.d.mts.map +1 -0
  20. package/lib/live/transcript-grouper.d.ts +96 -0
  21. package/lib/live/transcript-grouper.d.ts.map +1 -0
  22. package/lib/live/transcript-grouper.js +223 -0
  23. package/lib/live/transcript-grouper.js.map +1 -0
  24. package/lib/live/transcript-grouper.mjs +219 -0
  25. package/lib/live/transcript-grouper.mjs.map +1 -0
  26. package/lib/live/transcript-grouping.d.mts +49 -0
  27. package/lib/live/transcript-grouping.d.mts.map +1 -0
  28. package/lib/live/transcript-grouping.d.ts +49 -0
  29. package/lib/live/transcript-grouping.d.ts.map +1 -0
  30. package/lib/live/transcript-grouping.js +287 -0
  31. package/lib/live/transcript-grouping.js.map +1 -0
  32. package/lib/live/transcript-grouping.mjs +283 -0
  33. package/lib/live/transcript-grouping.mjs.map +1 -0
  34. package/lib/live/webrtc.d.mts +13 -0
  35. package/lib/live/webrtc.d.mts.map +1 -0
  36. package/lib/live/webrtc.d.ts +13 -0
  37. package/lib/live/webrtc.d.ts.map +1 -0
  38. package/lib/live/webrtc.js +16 -0
  39. package/lib/live/webrtc.js.map +1 -0
  40. package/lib/live/webrtc.mjs +10 -0
  41. package/lib/live/webrtc.mjs.map +1 -0
  42. package/lib/realtime/webrtc.d.mts +13 -0
  43. package/lib/realtime/webrtc.d.mts.map +1 -0
  44. package/lib/realtime/webrtc.d.ts +13 -0
  45. package/lib/realtime/webrtc.d.ts.map +1 -0
  46. package/lib/realtime/webrtc.js +16 -0
  47. package/lib/realtime/webrtc.js.map +1 -0
  48. package/lib/realtime/webrtc.mjs +10 -0
  49. package/lib/realtime/webrtc.mjs.map +1 -0
  50. package/lib/webrtc/connection.d.mts +40 -0
  51. package/lib/webrtc/connection.d.mts.map +1 -0
  52. package/lib/webrtc/connection.d.ts +40 -0
  53. package/lib/webrtc/connection.d.ts.map +1 -0
  54. package/lib/webrtc/connection.js +228 -0
  55. package/lib/webrtc/connection.js.map +1 -0
  56. package/lib/webrtc/connection.mjs +224 -0
  57. package/lib/webrtc/connection.mjs.map +1 -0
  58. package/lib/webrtc/data-channel.d.mts +32 -0
  59. package/lib/webrtc/data-channel.d.mts.map +1 -0
  60. package/lib/webrtc/data-channel.d.ts +32 -0
  61. package/lib/webrtc/data-channel.d.ts.map +1 -0
  62. package/lib/webrtc/data-channel.js +125 -0
  63. package/lib/webrtc/data-channel.js.map +1 -0
  64. package/lib/webrtc/data-channel.mjs +121 -0
  65. package/lib/webrtc/data-channel.mjs.map +1 -0
  66. package/lib/webrtc/errors.d.mts +19 -0
  67. package/lib/webrtc/errors.d.mts.map +1 -0
  68. package/lib/webrtc/errors.d.ts +19 -0
  69. package/lib/webrtc/errors.d.ts.map +1 -0
  70. package/lib/webrtc/errors.js +18 -0
  71. package/lib/webrtc/errors.js.map +1 -0
  72. package/lib/webrtc/errors.mjs +14 -0
  73. package/lib/webrtc/errors.mjs.map +1 -0
  74. package/lib/webrtc/subscriptions.d.mts +13 -0
  75. package/lib/webrtc/subscriptions.d.mts.map +1 -0
  76. package/lib/webrtc/subscriptions.d.ts +13 -0
  77. package/lib/webrtc/subscriptions.d.ts.map +1 -0
  78. package/lib/webrtc/subscriptions.js +62 -0
  79. package/lib/webrtc/subscriptions.js.map +1 -0
  80. package/lib/webrtc/subscriptions.mjs +58 -0
  81. package/lib/webrtc/subscriptions.mjs.map +1 -0
  82. package/lib/webrtc/types.d.mts +99 -0
  83. package/lib/webrtc/types.d.mts.map +1 -0
  84. package/lib/webrtc/types.d.ts +99 -0
  85. package/lib/webrtc/types.d.ts.map +1 -0
  86. package/lib/webrtc/types.js +3 -0
  87. package/lib/webrtc/types.js.map +1 -0
  88. package/lib/webrtc/types.mjs +2 -0
  89. package/lib/webrtc/types.mjs.map +1 -0
  90. package/live/webrtc.d.mts +3 -0
  91. package/live/webrtc.d.mts.map +1 -0
  92. package/live/webrtc.d.ts +3 -0
  93. package/live/webrtc.d.ts.map +1 -0
  94. package/live/webrtc.js +8 -0
  95. package/live/webrtc.js.map +1 -0
  96. package/live/webrtc.mjs +2 -0
  97. package/live/webrtc.mjs.map +1 -0
  98. package/package.json +11 -1
  99. package/realtime/webrtc.d.mts +3 -0
  100. package/realtime/webrtc.d.mts.map +1 -0
  101. package/realtime/webrtc.d.ts +3 -0
  102. package/realtime/webrtc.d.ts.map +1 -0
  103. package/realtime/webrtc.js +8 -0
  104. package/realtime/webrtc.js.map +1 -0
  105. package/realtime/webrtc.mjs +2 -0
  106. package/realtime/webrtc.mjs.map +1 -0
  107. package/resources/admin/organization/audit-logs.d.mts +1 -1
  108. package/resources/admin/organization/audit-logs.d.ts +1 -1
  109. package/resources/admin/organization/projects/api-keys.d.mts +5 -0
  110. package/resources/admin/organization/projects/api-keys.d.mts.map +1 -1
  111. package/resources/admin/organization/projects/api-keys.d.ts +5 -0
  112. package/resources/admin/organization/projects/api-keys.d.ts.map +1 -1
  113. package/resources/admin/organization/projects/projects.d.mts +2 -2
  114. package/resources/admin/organization/projects/projects.d.ts +2 -2
  115. package/resources/admin/organization/projects/service-accounts/service-accounts.d.mts +13 -0
  116. package/resources/admin/organization/projects/service-accounts/service-accounts.d.mts.map +1 -1
  117. package/resources/admin/organization/projects/service-accounts/service-accounts.d.ts +13 -0
  118. package/resources/admin/organization/projects/service-accounts/service-accounts.d.ts.map +1 -1
  119. package/resources/admin/organization/projects/service-accounts/service-accounts.js.map +1 -1
  120. package/resources/admin/organization/projects/service-accounts/service-accounts.mjs.map +1 -1
  121. package/resources/audio/speech.d.mts +3 -2
  122. package/resources/audio/speech.d.mts.map +1 -1
  123. package/resources/audio/speech.d.ts +3 -2
  124. package/resources/audio/speech.d.ts.map +1 -1
  125. package/resources/audio/transcriptions.d.mts +10 -10
  126. package/resources/audio/transcriptions.d.ts +10 -10
  127. package/resources/audio/translations.d.mts +1 -1
  128. package/resources/audio/translations.d.ts +1 -1
  129. package/resources/batches.d.mts +6 -5
  130. package/resources/batches.d.mts.map +1 -1
  131. package/resources/batches.d.ts +6 -5
  132. package/resources/batches.d.ts.map +1 -1
  133. package/resources/beta/assistants.d.mts +143 -147
  134. package/resources/beta/assistants.d.mts.map +1 -1
  135. package/resources/beta/assistants.d.ts +143 -147
  136. package/resources/beta/assistants.d.ts.map +1 -1
  137. package/resources/beta/responses/input-tokens.d.mts +11 -11
  138. package/resources/beta/responses/input-tokens.d.ts +11 -11
  139. package/resources/beta/responses/responses.d.mts +229 -170
  140. package/resources/beta/responses/responses.d.mts.map +1 -1
  141. package/resources/beta/responses/responses.d.ts +229 -170
  142. package/resources/beta/responses/responses.d.ts.map +1 -1
  143. package/resources/beta/responses/responses.js +3 -3
  144. package/resources/beta/responses/responses.js.map +1 -1
  145. package/resources/beta/responses/responses.mjs +3 -3
  146. package/resources/beta/responses/responses.mjs.map +1 -1
  147. package/resources/beta/threads/messages.d.mts +29 -23
  148. package/resources/beta/threads/messages.d.mts.map +1 -1
  149. package/resources/beta/threads/messages.d.ts +29 -23
  150. package/resources/beta/threads/messages.d.ts.map +1 -1
  151. package/resources/beta/threads/runs/runs.d.mts +39 -35
  152. package/resources/beta/threads/runs/runs.d.mts.map +1 -1
  153. package/resources/beta/threads/runs/runs.d.ts +39 -35
  154. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  155. package/resources/beta/threads/runs/runs.js.map +1 -1
  156. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  157. package/resources/beta/threads/runs/steps.d.mts +14 -15
  158. package/resources/beta/threads/runs/steps.d.mts.map +1 -1
  159. package/resources/beta/threads/runs/steps.d.ts +14 -15
  160. package/resources/beta/threads/runs/steps.d.ts.map +1 -1
  161. package/resources/beta/threads/threads.d.mts +53 -50
  162. package/resources/beta/threads/threads.d.mts.map +1 -1
  163. package/resources/beta/threads/threads.d.ts +53 -50
  164. package/resources/beta/threads/threads.d.ts.map +1 -1
  165. package/resources/beta/threads/threads.js.map +1 -1
  166. package/resources/beta/threads/threads.mjs.map +1 -1
  167. package/resources/chat/completions/completions.d.mts +89 -81
  168. package/resources/chat/completions/completions.d.mts.map +1 -1
  169. package/resources/chat/completions/completions.d.ts +89 -81
  170. package/resources/chat/completions/completions.d.ts.map +1 -1
  171. package/resources/chat/completions/completions.js.map +1 -1
  172. package/resources/chat/completions/completions.mjs.map +1 -1
  173. package/resources/completions.d.mts +15 -14
  174. package/resources/completions.d.mts.map +1 -1
  175. package/resources/completions.d.ts +15 -14
  176. package/resources/completions.d.ts.map +1 -1
  177. package/resources/content-provenance-checks.d.mts +1 -1
  178. package/resources/content-provenance-checks.d.ts +1 -1
  179. package/resources/content-provenance-checks.js +1 -1
  180. package/resources/content-provenance-checks.mjs +1 -1
  181. package/resources/conversations/items.d.mts +19 -3
  182. package/resources/conversations/items.d.mts.map +1 -1
  183. package/resources/conversations/items.d.ts +19 -3
  184. package/resources/conversations/items.d.ts.map +1 -1
  185. package/resources/embeddings.d.mts +6 -6
  186. package/resources/embeddings.d.ts +6 -6
  187. package/resources/evals/evals.d.mts +1 -1
  188. package/resources/evals/evals.d.ts +1 -1
  189. package/resources/evals/evals.js +1 -1
  190. package/resources/evals/evals.mjs +1 -1
  191. package/resources/evals/runs/runs.d.mts +62 -57
  192. package/resources/evals/runs/runs.d.mts.map +1 -1
  193. package/resources/evals/runs/runs.d.ts +62 -57
  194. package/resources/evals/runs/runs.d.ts.map +1 -1
  195. package/resources/evals/runs/runs.js.map +1 -1
  196. package/resources/evals/runs/runs.mjs.map +1 -1
  197. package/resources/files.d.mts +5 -5
  198. package/resources/files.d.ts +5 -5
  199. package/resources/files.js +5 -5
  200. package/resources/files.mjs +5 -5
  201. package/resources/fine-tuning/alpha/graders.d.mts +5 -4
  202. package/resources/fine-tuning/alpha/graders.d.mts.map +1 -1
  203. package/resources/fine-tuning/alpha/graders.d.ts +5 -4
  204. package/resources/fine-tuning/alpha/graders.d.ts.map +1 -1
  205. package/resources/fine-tuning/checkpoints/permissions.d.mts +8 -4
  206. package/resources/fine-tuning/checkpoints/permissions.d.mts.map +1 -1
  207. package/resources/fine-tuning/checkpoints/permissions.d.ts +8 -4
  208. package/resources/fine-tuning/checkpoints/permissions.d.ts.map +1 -1
  209. package/resources/fine-tuning/checkpoints/permissions.js +8 -4
  210. package/resources/fine-tuning/checkpoints/permissions.js.map +1 -1
  211. package/resources/fine-tuning/checkpoints/permissions.mjs +8 -4
  212. package/resources/fine-tuning/checkpoints/permissions.mjs.map +1 -1
  213. package/resources/fine-tuning/jobs/jobs.d.mts +13 -12
  214. package/resources/fine-tuning/jobs/jobs.d.mts.map +1 -1
  215. package/resources/fine-tuning/jobs/jobs.d.ts +13 -12
  216. package/resources/fine-tuning/jobs/jobs.d.ts.map +1 -1
  217. package/resources/fine-tuning/jobs/jobs.js +2 -2
  218. package/resources/fine-tuning/jobs/jobs.js.map +1 -1
  219. package/resources/fine-tuning/jobs/jobs.mjs +2 -2
  220. package/resources/fine-tuning/jobs/jobs.mjs.map +1 -1
  221. package/resources/graders/grader-models.d.mts +1 -1
  222. package/resources/graders/grader-models.d.ts +1 -1
  223. package/resources/images.d.mts +10 -10
  224. package/resources/images.d.ts +10 -10
  225. package/resources/index.d.mts +1 -0
  226. package/resources/index.d.mts.map +1 -1
  227. package/resources/index.d.ts +1 -0
  228. package/resources/index.d.ts.map +1 -1
  229. package/resources/index.js +3 -1
  230. package/resources/index.js.map +1 -1
  231. package/resources/index.mjs +1 -0
  232. package/resources/index.mjs.map +1 -1
  233. package/resources/live/forks/forks.d.mts +110 -0
  234. package/resources/live/forks/forks.d.mts.map +1 -0
  235. package/resources/live/forks/forks.d.ts +110 -0
  236. package/resources/live/forks/forks.d.ts.map +1 -0
  237. package/resources/live/forks/forks.js +9 -0
  238. package/resources/live/forks/forks.js.map +1 -0
  239. package/resources/live/forks/forks.mjs +5 -0
  240. package/resources/live/forks/forks.mjs.map +1 -0
  241. package/resources/live/forks/index.d.mts +4 -0
  242. package/resources/live/forks/index.d.mts.map +1 -0
  243. package/resources/live/forks/index.d.ts +4 -0
  244. package/resources/live/forks/index.d.ts.map +1 -0
  245. package/resources/live/forks/index.js +7 -0
  246. package/resources/live/forks/index.js.map +1 -0
  247. package/resources/live/forks/index.mjs +3 -0
  248. package/resources/live/forks/index.mjs.map +1 -0
  249. package/resources/live/forks/internal-base.d.mts +73 -0
  250. package/resources/live/forks/internal-base.d.mts.map +1 -0
  251. package/resources/live/forks/internal-base.d.ts +73 -0
  252. package/resources/live/forks/internal-base.d.ts.map +1 -0
  253. package/resources/live/forks/internal-base.js +49 -0
  254. package/resources/live/forks/internal-base.js.map +1 -0
  255. package/resources/live/forks/internal-base.mjs +43 -0
  256. package/resources/live/forks/internal-base.mjs.map +1 -0
  257. package/resources/live/forks/ws-base.d.mts +109 -0
  258. package/resources/live/forks/ws-base.d.mts.map +1 -0
  259. package/resources/live/forks/ws-base.d.ts +109 -0
  260. package/resources/live/forks/ws-base.d.ts.map +1 -0
  261. package/resources/live/forks/ws-base.js +476 -0
  262. package/resources/live/forks/ws-base.js.map +1 -0
  263. package/resources/live/forks/ws-base.mjs +472 -0
  264. package/resources/live/forks/ws-base.mjs.map +1 -0
  265. package/resources/live/forks/ws.d.mts +13 -0
  266. package/resources/live/forks/ws.d.mts.map +1 -0
  267. package/resources/live/forks/ws.d.ts +13 -0
  268. package/resources/live/forks/ws.d.ts.map +1 -0
  269. package/resources/live/forks/ws.js +34 -0
  270. package/resources/live/forks/ws.js.map +1 -0
  271. package/resources/live/forks/ws.mjs +29 -0
  272. package/resources/live/forks/ws.mjs.map +1 -0
  273. package/resources/live/forks.d.mts +2 -0
  274. package/resources/live/forks.d.mts.map +1 -0
  275. package/resources/live/forks.d.ts +2 -0
  276. package/resources/live/forks.d.ts.map +1 -0
  277. package/resources/live/forks.js +6 -0
  278. package/resources/live/forks.js.map +1 -0
  279. package/resources/live/forks.mjs +3 -0
  280. package/resources/live/forks.mjs.map +1 -0
  281. package/resources/live/index.d.mts +7 -0
  282. package/resources/live/index.d.mts.map +1 -0
  283. package/resources/live/index.d.ts +7 -0
  284. package/resources/live/index.d.ts.map +1 -0
  285. package/resources/live/index.js +13 -0
  286. package/resources/live/index.js.map +1 -0
  287. package/resources/live/index.mjs +6 -0
  288. package/resources/live/index.mjs.map +1 -0
  289. package/resources/live/internal-base.d.mts +71 -0
  290. package/resources/live/internal-base.d.mts.map +1 -0
  291. package/resources/live/internal-base.d.ts +71 -0
  292. package/resources/live/internal-base.d.ts.map +1 -0
  293. package/resources/live/internal-base.js +48 -0
  294. package/resources/live/internal-base.js.map +1 -0
  295. package/resources/live/internal-base.mjs +42 -0
  296. package/resources/live/internal-base.mjs.map +1 -0
  297. package/resources/live/live.d.mts +1864 -0
  298. package/resources/live/live.d.mts.map +1 -0
  299. package/resources/live/live.d.ts +1864 -0
  300. package/resources/live/live.d.ts.map +1 -0
  301. package/resources/live/live.js +40 -0
  302. package/resources/live/live.js.map +1 -0
  303. package/resources/live/live.mjs +35 -0
  304. package/resources/live/live.mjs.map +1 -0
  305. package/resources/live/sessions.d.mts +254 -0
  306. package/resources/live/sessions.d.mts.map +1 -0
  307. package/resources/live/sessions.d.ts +254 -0
  308. package/resources/live/sessions.d.ts.map +1 -0
  309. package/resources/live/sessions.js +118 -0
  310. package/resources/live/sessions.js.map +1 -0
  311. package/resources/live/sessions.mjs +114 -0
  312. package/resources/live/sessions.mjs.map +1 -0
  313. package/resources/live/sideband/index.d.mts +4 -0
  314. package/resources/live/sideband/index.d.mts.map +1 -0
  315. package/resources/live/sideband/index.d.ts +4 -0
  316. package/resources/live/sideband/index.d.ts.map +1 -0
  317. package/resources/live/sideband/index.js +7 -0
  318. package/resources/live/sideband/index.js.map +1 -0
  319. package/resources/live/sideband/index.mjs +3 -0
  320. package/resources/live/sideband/index.mjs.map +1 -0
  321. package/resources/live/sideband/internal-base.d.mts +73 -0
  322. package/resources/live/sideband/internal-base.d.mts.map +1 -0
  323. package/resources/live/sideband/internal-base.d.ts +73 -0
  324. package/resources/live/sideband/internal-base.d.ts.map +1 -0
  325. package/resources/live/sideband/internal-base.js +49 -0
  326. package/resources/live/sideband/internal-base.js.map +1 -0
  327. package/resources/live/sideband/internal-base.mjs +43 -0
  328. package/resources/live/sideband/internal-base.mjs.map +1 -0
  329. package/resources/live/sideband/sideband.d.mts +25 -0
  330. package/resources/live/sideband/sideband.d.mts.map +1 -0
  331. package/resources/live/sideband/sideband.d.ts +25 -0
  332. package/resources/live/sideband/sideband.d.ts.map +1 -0
  333. package/resources/live/sideband/sideband.js +9 -0
  334. package/resources/live/sideband/sideband.js.map +1 -0
  335. package/resources/live/sideband/sideband.mjs +5 -0
  336. package/resources/live/sideband/sideband.mjs.map +1 -0
  337. package/resources/live/sideband/ws-base.d.mts +114 -0
  338. package/resources/live/sideband/ws-base.d.mts.map +1 -0
  339. package/resources/live/sideband/ws-base.d.ts +114 -0
  340. package/resources/live/sideband/ws-base.d.ts.map +1 -0
  341. package/resources/live/sideband/ws-base.js +476 -0
  342. package/resources/live/sideband/ws-base.js.map +1 -0
  343. package/resources/live/sideband/ws-base.mjs +472 -0
  344. package/resources/live/sideband/ws-base.mjs.map +1 -0
  345. package/resources/live/sideband/ws.d.mts +13 -0
  346. package/resources/live/sideband/ws.d.mts.map +1 -0
  347. package/resources/live/sideband/ws.d.ts +13 -0
  348. package/resources/live/sideband/ws.d.ts.map +1 -0
  349. package/resources/live/sideband/ws.js +34 -0
  350. package/resources/live/sideband/ws.js.map +1 -0
  351. package/resources/live/sideband/ws.mjs +29 -0
  352. package/resources/live/sideband/ws.mjs.map +1 -0
  353. package/resources/live/sideband.d.mts +2 -0
  354. package/resources/live/sideband.d.mts.map +1 -0
  355. package/resources/live/sideband.d.ts +2 -0
  356. package/resources/live/sideband.d.ts.map +1 -0
  357. package/resources/live/sideband.js +6 -0
  358. package/resources/live/sideband.js.map +1 -0
  359. package/resources/live/sideband.mjs +3 -0
  360. package/resources/live/sideband.mjs.map +1 -0
  361. package/resources/live/ws-base.d.mts +106 -0
  362. package/resources/live/ws-base.d.mts.map +1 -0
  363. package/resources/live/ws-base.d.ts +106 -0
  364. package/resources/live/ws-base.d.ts.map +1 -0
  365. package/resources/live/ws-base.js +476 -0
  366. package/resources/live/ws-base.js.map +1 -0
  367. package/resources/live/ws-base.mjs +472 -0
  368. package/resources/live/ws-base.mjs.map +1 -0
  369. package/resources/live/ws.d.mts +13 -0
  370. package/resources/live/ws.d.mts.map +1 -0
  371. package/resources/live/ws.d.ts +13 -0
  372. package/resources/live/ws.d.ts.map +1 -0
  373. package/resources/live/ws.js +34 -0
  374. package/resources/live/ws.js.map +1 -0
  375. package/resources/live/ws.mjs +29 -0
  376. package/resources/live/ws.mjs.map +1 -0
  377. package/resources/live.d.mts +2 -0
  378. package/resources/live.d.mts.map +1 -0
  379. package/resources/live.d.ts +2 -0
  380. package/resources/live.d.ts.map +1 -0
  381. package/resources/live.js +6 -0
  382. package/resources/live.js.map +1 -0
  383. package/resources/live.mjs +3 -0
  384. package/resources/live.mjs.map +1 -0
  385. package/resources/moderations.d.mts +5 -4
  386. package/resources/moderations.d.mts.map +1 -1
  387. package/resources/moderations.d.ts +5 -4
  388. package/resources/moderations.d.ts.map +1 -1
  389. package/resources/moderations.js +2 -1
  390. package/resources/moderations.js.map +1 -1
  391. package/resources/moderations.mjs +2 -1
  392. package/resources/moderations.mjs.map +1 -1
  393. package/resources/realtime/calls.d.mts +1 -1
  394. package/resources/realtime/calls.d.ts +1 -1
  395. package/resources/realtime/client-secrets.d.mts +4 -4
  396. package/resources/realtime/client-secrets.d.ts +4 -4
  397. package/resources/realtime/client-secrets.js +1 -1
  398. package/resources/realtime/client-secrets.mjs +1 -1
  399. package/resources/realtime/realtime.d.mts +16 -16
  400. package/resources/realtime/realtime.d.ts +16 -16
  401. package/resources/responses/input-tokens.d.mts +9 -9
  402. package/resources/responses/input-tokens.d.ts +9 -9
  403. package/resources/responses/responses.d.mts +223 -164
  404. package/resources/responses/responses.d.mts.map +1 -1
  405. package/resources/responses/responses.d.ts +223 -164
  406. package/resources/responses/responses.d.ts.map +1 -1
  407. package/resources/responses/responses.js +3 -3
  408. package/resources/responses/responses.js.map +1 -1
  409. package/resources/responses/responses.mjs +3 -3
  410. package/resources/responses/responses.mjs.map +1 -1
  411. package/resources/shared.d.mts +12 -12
  412. package/resources/shared.d.ts +12 -12
  413. package/resources/uploads/parts.d.mts +5 -4
  414. package/resources/uploads/parts.d.mts.map +1 -1
  415. package/resources/uploads/parts.d.ts +5 -4
  416. package/resources/uploads/parts.d.ts.map +1 -1
  417. package/resources/uploads/parts.js +5 -4
  418. package/resources/uploads/parts.js.map +1 -1
  419. package/resources/uploads/parts.mjs +5 -4
  420. package/resources/uploads/parts.mjs.map +1 -1
  421. package/resources/uploads/uploads.d.mts +11 -11
  422. package/resources/uploads/uploads.d.ts +11 -11
  423. package/resources/uploads/uploads.js +9 -9
  424. package/resources/uploads/uploads.mjs +9 -9
  425. package/resources/vector-stores/file-batches.d.mts +11 -11
  426. package/resources/vector-stores/file-batches.d.ts +11 -11
  427. package/resources/vector-stores/files.d.mts +8 -8
  428. package/resources/vector-stores/files.d.ts +8 -8
  429. package/resources/vector-stores/files.js +3 -3
  430. package/resources/vector-stores/files.mjs +3 -3
  431. package/resources/vector-stores/vector-stores.d.mts +3 -3
  432. package/resources/vector-stores/vector-stores.d.ts +3 -3
  433. package/resources/webhooks/webhooks.d.mts +78 -7
  434. package/resources/webhooks/webhooks.d.mts.map +1 -1
  435. package/resources/webhooks/webhooks.d.ts +78 -7
  436. package/resources/webhooks/webhooks.d.ts.map +1 -1
  437. package/src/client.ts +5 -0
  438. package/src/helpers/live.ts +8 -0
  439. package/src/lib/live/transcript-grouper.ts +303 -0
  440. package/src/lib/live/transcript-grouping.ts +362 -0
  441. package/src/lib/live/webrtc.ts +23 -0
  442. package/src/lib/realtime/webrtc.ts +20 -0
  443. package/src/lib/webrtc/connection.ts +309 -0
  444. package/src/lib/webrtc/data-channel.ts +144 -0
  445. package/src/lib/webrtc/errors.ts +38 -0
  446. package/src/lib/webrtc/subscriptions.ts +62 -0
  447. package/src/lib/webrtc/types.ts +109 -0
  448. package/src/live/webrtc.ts +10 -0
  449. package/src/realtime/webrtc.ts +10 -0
  450. package/src/resources/admin/organization/audit-logs.ts +1 -1
  451. package/src/resources/admin/organization/projects/api-keys.ts +6 -0
  452. package/src/resources/admin/organization/projects/projects.ts +2 -2
  453. package/src/resources/admin/organization/projects/service-accounts/service-accounts.ts +15 -0
  454. package/src/resources/audio/speech.ts +3 -2
  455. package/src/resources/audio/transcriptions.ts +10 -10
  456. package/src/resources/audio/translations.ts +1 -1
  457. package/src/resources/batches.ts +6 -5
  458. package/src/resources/beta/assistants.ts +143 -147
  459. package/src/resources/beta/responses/input-tokens.ts +11 -11
  460. package/src/resources/beta/responses/responses.ts +241 -170
  461. package/src/resources/beta/threads/messages.ts +29 -23
  462. package/src/resources/beta/threads/runs/runs.ts +39 -35
  463. package/src/resources/beta/threads/runs/steps.ts +14 -15
  464. package/src/resources/beta/threads/threads.ts +53 -50
  465. package/src/resources/chat/completions/completions.ts +89 -81
  466. package/src/resources/completions.ts +15 -14
  467. package/src/resources/content-provenance-checks.ts +1 -1
  468. package/src/resources/conversations/items.ts +23 -3
  469. package/src/resources/embeddings.ts +6 -6
  470. package/src/resources/evals/evals.ts +1 -1
  471. package/src/resources/evals/runs/runs.ts +62 -57
  472. package/src/resources/files.ts +5 -5
  473. package/src/resources/fine-tuning/alpha/graders.ts +5 -4
  474. package/src/resources/fine-tuning/checkpoints/permissions.ts +8 -4
  475. package/src/resources/fine-tuning/jobs/jobs.ts +13 -12
  476. package/src/resources/graders/grader-models.ts +1 -1
  477. package/src/resources/images.ts +10 -10
  478. package/src/resources/index.ts +1 -0
  479. package/src/resources/live/api.md +87 -0
  480. package/src/resources/live/forks/forks.ts +169 -0
  481. package/src/resources/live/forks/index.ts +5 -0
  482. package/src/resources/live/forks/internal-base.ts +107 -0
  483. package/src/resources/live/forks/ws-base.ts +611 -0
  484. package/src/resources/live/forks/ws.ts +46 -0
  485. package/src/resources/live/forks.ts +3 -0
  486. package/src/resources/live/index.ts +20 -0
  487. package/src/resources/live/internal-base.ts +104 -0
  488. package/src/resources/live/live.ts +2296 -0
  489. package/src/resources/live/sessions.ts +337 -0
  490. package/src/resources/live/sideband/index.ts +10 -0
  491. package/src/resources/live/sideband/internal-base.ts +107 -0
  492. package/src/resources/live/sideband/sideband.ts +58 -0
  493. package/src/resources/live/sideband/ws-base.ts +621 -0
  494. package/src/resources/live/sideband/ws.ts +46 -0
  495. package/src/resources/live/sideband.ts +3 -0
  496. package/src/resources/live/ws-base.ts +607 -0
  497. package/src/resources/live/ws.ts +42 -0
  498. package/src/resources/live.ts +3 -0
  499. package/src/resources/moderations.ts +5 -4
  500. package/src/resources/realtime/calls.ts +1 -1
  501. package/src/resources/realtime/client-secrets.ts +4 -4
  502. package/src/resources/realtime/realtime.ts +16 -16
  503. package/src/resources/responses/input-tokens.ts +9 -9
  504. package/src/resources/responses/responses.ts +235 -164
  505. package/src/resources/shared.ts +12 -12
  506. package/src/resources/uploads/parts.ts +5 -4
  507. package/src/resources/uploads/uploads.ts +11 -11
  508. package/src/resources/vector-stores/file-batches.ts +11 -11
  509. package/src/resources/vector-stores/files.ts +8 -8
  510. package/src/resources/vector-stores/vector-stores.ts +3 -3
  511. package/src/resources/webhooks/api.md +1 -0
  512. package/src/resources/webhooks/webhooks.ts +88 -5
  513. package/src/version.ts +1 -1
  514. package/version.d.mts +1 -1
  515. package/version.d.ts +1 -1
  516. package/version.js +1 -1
  517. package/version.mjs +1 -1
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TranscriptGrouper = void 0;
4
+ const EventEmitter_1 = require("../../core/EventEmitter.js");
5
+ const error_1 = require("../../core/error.js");
6
+ const transcript_grouping_1 = require("./transcript-grouping.js");
7
+ const SETTLE_MS = 50;
8
+ const MAX_TIMEOUT_MS = 2147483647;
9
+ let nextGrouperId = 0;
10
+ function normalizeTranscript(event) {
11
+ const { event_id: id, delta: text, start_ms: startMs, end_ms: endMs } = event;
12
+ const speaker = event.type === 'session.input_transcript.delta' ? 'user' : 'assistant';
13
+ if (typeof id !== 'string' ||
14
+ !id ||
15
+ typeof text !== 'string' ||
16
+ !Number.isSafeInteger(startMs) ||
17
+ startMs < 0 ||
18
+ !Number.isSafeInteger(endMs) ||
19
+ endMs < startMs) {
20
+ throw new error_1.OpenAIError('Invalid Live transcript delta: expected an event ID, text, and a nonnegative timed interval');
21
+ }
22
+ return { id, speaker, text, startMs, endMs, receivedAt: performance.now() };
23
+ }
24
+ function optionsWithDefaults(options) {
25
+ const resolved = {
26
+ minTurnSeparationMs: options.minTurnSeparationMs ?? 500,
27
+ assistantSilenceMs: options.assistantSilenceMs ?? 2000,
28
+ backchannelMaxDurationMs: options.backchannelMaxDurationMs ?? 1000,
29
+ backchannelIsolationMs: options.backchannelIsolationMs ?? 2000,
30
+ };
31
+ for (const [name, value] of Object.entries(resolved)) {
32
+ if (!Number.isFinite(value) || value < 0 || value > MAX_TIMEOUT_MS) {
33
+ throw new error_1.OpenAIError(`${name} must be a finite number between 0 and ${MAX_TIMEOUT_MS}`);
34
+ }
35
+ }
36
+ return { ...resolved, additionalAcknowledgments: options.additionalAcknowledgments ?? [] };
37
+ }
38
+ /**
39
+ * Groups public Live transcript events using speaker and
40
+ * backchannel heuristics. Raw events remain available on your transport.
41
+ *
42
+ * Only session.input_transcript.delta, session.output_transcript.delta and session.closed are
43
+ * consumed. No audio, engine frames, server turn events or internal end markers
44
+ * are required. Ambiguous speaker changes settle for at most 50 ms. When source
45
+ * time stops arriving, a monotonic local clock supplies a best-effort inactivity
46
+ * fallback. Delayed delivery can therefore change grouping; this is not VAD,
47
+ * playback tracking, or a lossless transcript (some backchannels are suppressed).
48
+ *
49
+ * Create one instance per session. Call close() on transport loss or teardown;
50
+ * the grouper never owns or closes your transport and does not reconnect it.
51
+ */
52
+ // oxlint-disable-next-line unicorn/prefer-event-target -- This is the SDK's browser-compatible typed emitter, not node:events.
53
+ class TranscriptGrouper extends EventEmitter_1.EventEmitter {
54
+ /** Create a grouper with speaker-based defaults. Invalid timing options throw OpenAIError. */
55
+ constructor(options = {}) {
56
+ super();
57
+ this.seenIds = new Set();
58
+ this.pending = [];
59
+ this.closed = false;
60
+ this.dispatching = false;
61
+ this.updates = [];
62
+ this.grouping = new transcript_grouping_1.TranscriptGrouping(optionsWithDefaults(options), `segment_${nextGrouperId}`);
63
+ nextGrouperId += 1;
64
+ }
65
+ /**
66
+ * Consume one public Live event. Duplicate transcript event IDs and unrelated
67
+ * event types are ignored. Empty text does not count as speech activity.
68
+ * Malformed transcript fields or use after close() throw OpenAIError.
69
+ */
70
+ push(event) {
71
+ if (this.closed) {
72
+ throw new error_1.OpenAIError('Cannot push events after closing the transcript grouper');
73
+ }
74
+ if (event.type === 'session.closed') {
75
+ this.finish('session_closed');
76
+ return;
77
+ }
78
+ if (event.type !== 'session.input_transcript.delta' && event.type !== 'session.output_transcript.delta') {
79
+ return;
80
+ }
81
+ const fragment = normalizeTranscript(event);
82
+ const { id, startMs, endMs, speaker } = fragment;
83
+ if (this.seenIds.has(id)) {
84
+ return;
85
+ }
86
+ this.seenIds.add(id);
87
+ if (!fragment.text) {
88
+ return;
89
+ }
90
+ const updates = [];
91
+ const [pending] = this.pending;
92
+ if (pending && pending.startMs === startMs && pending.endMs === endMs) {
93
+ this.pending.push(fragment);
94
+ if (this.pending.some((part) => part.speaker !== speaker)) {
95
+ updates.push(...this.flushPending());
96
+ }
97
+ }
98
+ else {
99
+ updates.push(...this.flushPending());
100
+ if (this.grouping.speaker === speaker) {
101
+ updates.push(...this.commit([fragment]));
102
+ }
103
+ else {
104
+ this.pending.push(fragment);
105
+ }
106
+ }
107
+ this.schedule();
108
+ this.dispatch(updates);
109
+ }
110
+ /**
111
+ * Flush buffered text according to the grouping policy, finalize all emitted
112
+ * segments, and cancel timers. Idempotent; further push() calls fail. Does not
113
+ * close the transport. Invoke before discarding the grouper at session teardown.
114
+ */
115
+ close() {
116
+ this.finish('manual');
117
+ }
118
+ finish(reason) {
119
+ if (this.closed) {
120
+ return;
121
+ }
122
+ this.closed = true;
123
+ this.clearTimer();
124
+ const updates = this.flushPending();
125
+ updates.push(...this.grouping.close(this.sourceNow(), reason));
126
+ this.seenIds.clear();
127
+ this.dispatch(updates);
128
+ }
129
+ commit(fragments) {
130
+ const [first] = fragments;
131
+ if (!first) {
132
+ return [];
133
+ }
134
+ const updates = [];
135
+ if (this.lastStartMs !== undefined && first.startMs < this.lastStartMs) {
136
+ updates.push(...this.grouping.close(this.sourceNow(), 'timestamp_reset'));
137
+ this.anchor = undefined;
138
+ }
139
+ this.lastStartMs = first.startMs;
140
+ // Overlapping intervals can end before earlier ones. Preserve the source
141
+ // high-water mark while restarting local inactivity on newly received text.
142
+ this.anchor = {
143
+ sourceMs: Math.max(this.anchor?.sourceMs ?? 0, first.endMs),
144
+ receivedAt: first.receivedAt,
145
+ };
146
+ for (const part of fragments) {
147
+ this.anchor.sourceMs = Math.max(this.anchor.sourceMs, part.endMs);
148
+ this.anchor.receivedAt = Math.max(this.anchor.receivedAt, part.receivedAt);
149
+ }
150
+ updates.push(...this.grouping.process(fragments));
151
+ return updates;
152
+ }
153
+ flushPending() {
154
+ const { pending } = this;
155
+ this.pending = [];
156
+ return this.commit(pending);
157
+ }
158
+ sourceNow() {
159
+ return this.anchor ? this.anchor.sourceMs + Math.max(0, performance.now() - this.anchor.receivedAt) : 0;
160
+ }
161
+ clearTimer() {
162
+ if (this.timer !== undefined) {
163
+ clearTimeout(this.timer);
164
+ }
165
+ this.timer = undefined;
166
+ }
167
+ schedule() {
168
+ this.clearTimer();
169
+ if (this.closed) {
170
+ return;
171
+ }
172
+ const [pending] = this.pending;
173
+ const deadline = this.grouping.deadline();
174
+ // Settle newly arrived text before applying an older inactivity deadline.
175
+ let delay;
176
+ if (pending) {
177
+ delay = pending.receivedAt + SETTLE_MS - performance.now();
178
+ }
179
+ else if (deadline !== undefined) {
180
+ delay = deadline - this.sourceNow();
181
+ }
182
+ if (delay === undefined) {
183
+ return;
184
+ }
185
+ this.timer = setTimeout(() => {
186
+ this.timer = undefined;
187
+ const updates = this.flushPending();
188
+ updates.push(...this.grouping.advance(this.sourceNow()));
189
+ this.schedule();
190
+ this.dispatch(updates);
191
+ }, Math.min(MAX_TIMEOUT_MS, Math.max(0, Math.ceil(delay))));
192
+ const timer = this.timer;
193
+ if (typeof timer === 'object' &&
194
+ timer !== null &&
195
+ 'unref' in timer &&
196
+ typeof timer.unref === 'function') {
197
+ timer.unref();
198
+ }
199
+ }
200
+ dispatch(updates) {
201
+ this.updates.push(...updates);
202
+ if (this.dispatching) {
203
+ return;
204
+ }
205
+ this.dispatching = true;
206
+ try {
207
+ while (this.updates.length) {
208
+ const update = this.updates.shift();
209
+ if (update?.type === 'updated') {
210
+ this._emit('segment.updated', update.segment);
211
+ }
212
+ else if (update) {
213
+ this._emit('segment.closed', { segment: update.segment, reason: update.reason });
214
+ }
215
+ }
216
+ }
217
+ finally {
218
+ this.dispatching = false;
219
+ }
220
+ }
221
+ }
222
+ exports.TranscriptGrouper = TranscriptGrouper;
223
+ //# sourceMappingURL=transcript-grouper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-grouper.js","sourceRoot":"","sources":["../../src/lib/live/transcript-grouper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ import { EventEmitter } from "../../core/EventEmitter.mjs";
2
+ import { OpenAIError } from "../../core/error.mjs";
3
+ import { TranscriptGrouping } from "./transcript-grouping.mjs";
4
+ const SETTLE_MS = 50;
5
+ const MAX_TIMEOUT_MS = 2147483647;
6
+ let nextGrouperId = 0;
7
+ function normalizeTranscript(event) {
8
+ const { event_id: id, delta: text, start_ms: startMs, end_ms: endMs } = event;
9
+ const speaker = event.type === 'session.input_transcript.delta' ? 'user' : 'assistant';
10
+ if (typeof id !== 'string' ||
11
+ !id ||
12
+ typeof text !== 'string' ||
13
+ !Number.isSafeInteger(startMs) ||
14
+ startMs < 0 ||
15
+ !Number.isSafeInteger(endMs) ||
16
+ endMs < startMs) {
17
+ throw new OpenAIError('Invalid Live transcript delta: expected an event ID, text, and a nonnegative timed interval');
18
+ }
19
+ return { id, speaker, text, startMs, endMs, receivedAt: performance.now() };
20
+ }
21
+ function optionsWithDefaults(options) {
22
+ const resolved = {
23
+ minTurnSeparationMs: options.minTurnSeparationMs ?? 500,
24
+ assistantSilenceMs: options.assistantSilenceMs ?? 2000,
25
+ backchannelMaxDurationMs: options.backchannelMaxDurationMs ?? 1000,
26
+ backchannelIsolationMs: options.backchannelIsolationMs ?? 2000,
27
+ };
28
+ for (const [name, value] of Object.entries(resolved)) {
29
+ if (!Number.isFinite(value) || value < 0 || value > MAX_TIMEOUT_MS) {
30
+ throw new OpenAIError(`${name} must be a finite number between 0 and ${MAX_TIMEOUT_MS}`);
31
+ }
32
+ }
33
+ return { ...resolved, additionalAcknowledgments: options.additionalAcknowledgments ?? [] };
34
+ }
35
+ /**
36
+ * Groups public Live transcript events using speaker and
37
+ * backchannel heuristics. Raw events remain available on your transport.
38
+ *
39
+ * Only session.input_transcript.delta, session.output_transcript.delta and session.closed are
40
+ * consumed. No audio, engine frames, server turn events or internal end markers
41
+ * are required. Ambiguous speaker changes settle for at most 50 ms. When source
42
+ * time stops arriving, a monotonic local clock supplies a best-effort inactivity
43
+ * fallback. Delayed delivery can therefore change grouping; this is not VAD,
44
+ * playback tracking, or a lossless transcript (some backchannels are suppressed).
45
+ *
46
+ * Create one instance per session. Call close() on transport loss or teardown;
47
+ * the grouper never owns or closes your transport and does not reconnect it.
48
+ */
49
+ // oxlint-disable-next-line unicorn/prefer-event-target -- This is the SDK's browser-compatible typed emitter, not node:events.
50
+ export class TranscriptGrouper extends EventEmitter {
51
+ /** Create a grouper with speaker-based defaults. Invalid timing options throw OpenAIError. */
52
+ constructor(options = {}) {
53
+ super();
54
+ this.seenIds = new Set();
55
+ this.pending = [];
56
+ this.closed = false;
57
+ this.dispatching = false;
58
+ this.updates = [];
59
+ this.grouping = new TranscriptGrouping(optionsWithDefaults(options), `segment_${nextGrouperId}`);
60
+ nextGrouperId += 1;
61
+ }
62
+ /**
63
+ * Consume one public Live event. Duplicate transcript event IDs and unrelated
64
+ * event types are ignored. Empty text does not count as speech activity.
65
+ * Malformed transcript fields or use after close() throw OpenAIError.
66
+ */
67
+ push(event) {
68
+ if (this.closed) {
69
+ throw new OpenAIError('Cannot push events after closing the transcript grouper');
70
+ }
71
+ if (event.type === 'session.closed') {
72
+ this.finish('session_closed');
73
+ return;
74
+ }
75
+ if (event.type !== 'session.input_transcript.delta' && event.type !== 'session.output_transcript.delta') {
76
+ return;
77
+ }
78
+ const fragment = normalizeTranscript(event);
79
+ const { id, startMs, endMs, speaker } = fragment;
80
+ if (this.seenIds.has(id)) {
81
+ return;
82
+ }
83
+ this.seenIds.add(id);
84
+ if (!fragment.text) {
85
+ return;
86
+ }
87
+ const updates = [];
88
+ const [pending] = this.pending;
89
+ if (pending && pending.startMs === startMs && pending.endMs === endMs) {
90
+ this.pending.push(fragment);
91
+ if (this.pending.some((part) => part.speaker !== speaker)) {
92
+ updates.push(...this.flushPending());
93
+ }
94
+ }
95
+ else {
96
+ updates.push(...this.flushPending());
97
+ if (this.grouping.speaker === speaker) {
98
+ updates.push(...this.commit([fragment]));
99
+ }
100
+ else {
101
+ this.pending.push(fragment);
102
+ }
103
+ }
104
+ this.schedule();
105
+ this.dispatch(updates);
106
+ }
107
+ /**
108
+ * Flush buffered text according to the grouping policy, finalize all emitted
109
+ * segments, and cancel timers. Idempotent; further push() calls fail. Does not
110
+ * close the transport. Invoke before discarding the grouper at session teardown.
111
+ */
112
+ close() {
113
+ this.finish('manual');
114
+ }
115
+ finish(reason) {
116
+ if (this.closed) {
117
+ return;
118
+ }
119
+ this.closed = true;
120
+ this.clearTimer();
121
+ const updates = this.flushPending();
122
+ updates.push(...this.grouping.close(this.sourceNow(), reason));
123
+ this.seenIds.clear();
124
+ this.dispatch(updates);
125
+ }
126
+ commit(fragments) {
127
+ const [first] = fragments;
128
+ if (!first) {
129
+ return [];
130
+ }
131
+ const updates = [];
132
+ if (this.lastStartMs !== undefined && first.startMs < this.lastStartMs) {
133
+ updates.push(...this.grouping.close(this.sourceNow(), 'timestamp_reset'));
134
+ this.anchor = undefined;
135
+ }
136
+ this.lastStartMs = first.startMs;
137
+ // Overlapping intervals can end before earlier ones. Preserve the source
138
+ // high-water mark while restarting local inactivity on newly received text.
139
+ this.anchor = {
140
+ sourceMs: Math.max(this.anchor?.sourceMs ?? 0, first.endMs),
141
+ receivedAt: first.receivedAt,
142
+ };
143
+ for (const part of fragments) {
144
+ this.anchor.sourceMs = Math.max(this.anchor.sourceMs, part.endMs);
145
+ this.anchor.receivedAt = Math.max(this.anchor.receivedAt, part.receivedAt);
146
+ }
147
+ updates.push(...this.grouping.process(fragments));
148
+ return updates;
149
+ }
150
+ flushPending() {
151
+ const { pending } = this;
152
+ this.pending = [];
153
+ return this.commit(pending);
154
+ }
155
+ sourceNow() {
156
+ return this.anchor ? this.anchor.sourceMs + Math.max(0, performance.now() - this.anchor.receivedAt) : 0;
157
+ }
158
+ clearTimer() {
159
+ if (this.timer !== undefined) {
160
+ clearTimeout(this.timer);
161
+ }
162
+ this.timer = undefined;
163
+ }
164
+ schedule() {
165
+ this.clearTimer();
166
+ if (this.closed) {
167
+ return;
168
+ }
169
+ const [pending] = this.pending;
170
+ const deadline = this.grouping.deadline();
171
+ // Settle newly arrived text before applying an older inactivity deadline.
172
+ let delay;
173
+ if (pending) {
174
+ delay = pending.receivedAt + SETTLE_MS - performance.now();
175
+ }
176
+ else if (deadline !== undefined) {
177
+ delay = deadline - this.sourceNow();
178
+ }
179
+ if (delay === undefined) {
180
+ return;
181
+ }
182
+ this.timer = setTimeout(() => {
183
+ this.timer = undefined;
184
+ const updates = this.flushPending();
185
+ updates.push(...this.grouping.advance(this.sourceNow()));
186
+ this.schedule();
187
+ this.dispatch(updates);
188
+ }, Math.min(MAX_TIMEOUT_MS, Math.max(0, Math.ceil(delay))));
189
+ const timer = this.timer;
190
+ if (typeof timer === 'object' &&
191
+ timer !== null &&
192
+ 'unref' in timer &&
193
+ typeof timer.unref === 'function') {
194
+ timer.unref();
195
+ }
196
+ }
197
+ dispatch(updates) {
198
+ this.updates.push(...updates);
199
+ if (this.dispatching) {
200
+ return;
201
+ }
202
+ this.dispatching = true;
203
+ try {
204
+ while (this.updates.length) {
205
+ const update = this.updates.shift();
206
+ if (update?.type === 'updated') {
207
+ this._emit('segment.updated', update.segment);
208
+ }
209
+ else if (update) {
210
+ this._emit('segment.closed', { segment: update.segment, reason: update.reason });
211
+ }
212
+ }
213
+ }
214
+ finally {
215
+ this.dispatching = false;
216
+ }
217
+ }
218
+ }
219
+ //# sourceMappingURL=transcript-grouper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-grouper.mjs","sourceRoot":"","sources":["../../src/lib/live/transcript-grouper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { TranscriptGrouperOptions, TranscriptSegment, TranscriptSegmentCloseReason } from "./transcript-grouper.mjs";
2
+ export interface TranscriptFragment {
3
+ speaker: 'user' | 'assistant';
4
+ text: string;
5
+ startMs: number;
6
+ endMs: number;
7
+ }
8
+ export type GroupingUpdate = {
9
+ type: 'updated';
10
+ segment: TranscriptSegment;
11
+ } | {
12
+ type: 'closed';
13
+ segment: TranscriptSegment;
14
+ reason: TranscriptSegmentCloseReason;
15
+ };
16
+ /** The v2 grouping policy, driven by timed public text rather than engine frames. */
17
+ export declare class TranscriptGrouping {
18
+ private current;
19
+ private buffered;
20
+ private lastId;
21
+ private nextId;
22
+ private lastAssistantEnd;
23
+ private readonly options;
24
+ private readonly idPrefix;
25
+ private readonly acknowledgments;
26
+ constructor(options: Required<TranscriptGrouperOptions>, idPrefix: string);
27
+ get speaker(): TranscriptFragment['speaker'] | undefined;
28
+ process(fragments: readonly TranscriptFragment[]): GroupingUpdate[];
29
+ advance(timeMs: number, hasIncomingUser?: boolean): GroupingUpdate[];
30
+ deadline(): number | undefined;
31
+ close(timeMs: number, reason: TranscriptSegmentCloseReason): GroupingUpdate[];
32
+ private ingest;
33
+ private newTurn;
34
+ private static append;
35
+ private buffer;
36
+ private promote;
37
+ private finishCurrent;
38
+ private finish;
39
+ private emit;
40
+ private static snapshot;
41
+ private mightBeBackchannel;
42
+ private userContinued;
43
+ private recentAssistant;
44
+ private keepBackchannel;
45
+ private maybeDropBackchannel;
46
+ private standaloneAcknowledgment;
47
+ private possibleAcknowledgment;
48
+ }
49
+ //# sourceMappingURL=transcript-grouping.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-grouping.d.mts","sourceRoot":"","sources":["../../src/lib/live/transcript-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,EAC7B,iCAA6B;AAE9B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAuCzF,qFAAqF;AACrF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM;IASzE,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAS,CAEvD;IAED,OAAO,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,cAAc,EAAE;IAgCnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,cAAc,EAAE;IAsBlE,QAAQ,IAAI,MAAM,GAAG,SAAS;IAqB9B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,cAAc,EAAE;IAa7E,OAAO,CAAC,MAAM;IA2Cd,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,MAAM,CAAC,MAAM;IAOrB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,MAAM,CAAC,QAAQ;IAWvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,sBAAsB;CAQ/B"}
@@ -0,0 +1,49 @@
1
+ import type { TranscriptGrouperOptions, TranscriptSegment, TranscriptSegmentCloseReason } from "./transcript-grouper.js";
2
+ export interface TranscriptFragment {
3
+ speaker: 'user' | 'assistant';
4
+ text: string;
5
+ startMs: number;
6
+ endMs: number;
7
+ }
8
+ export type GroupingUpdate = {
9
+ type: 'updated';
10
+ segment: TranscriptSegment;
11
+ } | {
12
+ type: 'closed';
13
+ segment: TranscriptSegment;
14
+ reason: TranscriptSegmentCloseReason;
15
+ };
16
+ /** The v2 grouping policy, driven by timed public text rather than engine frames. */
17
+ export declare class TranscriptGrouping {
18
+ private current;
19
+ private buffered;
20
+ private lastId;
21
+ private nextId;
22
+ private lastAssistantEnd;
23
+ private readonly options;
24
+ private readonly idPrefix;
25
+ private readonly acknowledgments;
26
+ constructor(options: Required<TranscriptGrouperOptions>, idPrefix: string);
27
+ get speaker(): TranscriptFragment['speaker'] | undefined;
28
+ process(fragments: readonly TranscriptFragment[]): GroupingUpdate[];
29
+ advance(timeMs: number, hasIncomingUser?: boolean): GroupingUpdate[];
30
+ deadline(): number | undefined;
31
+ close(timeMs: number, reason: TranscriptSegmentCloseReason): GroupingUpdate[];
32
+ private ingest;
33
+ private newTurn;
34
+ private static append;
35
+ private buffer;
36
+ private promote;
37
+ private finishCurrent;
38
+ private finish;
39
+ private emit;
40
+ private static snapshot;
41
+ private mightBeBackchannel;
42
+ private userContinued;
43
+ private recentAssistant;
44
+ private keepBackchannel;
45
+ private maybeDropBackchannel;
46
+ private standaloneAcknowledgment;
47
+ private possibleAcknowledgment;
48
+ }
49
+ //# sourceMappingURL=transcript-grouping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-grouping.d.ts","sourceRoot":"","sources":["../../src/lib/live/transcript-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,EAC7B,gCAA6B;AAE9B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAuCzF,qFAAqF;AACrF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM;IASzE,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAS,CAEvD;IAED,OAAO,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,cAAc,EAAE;IAgCnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,cAAc,EAAE;IAsBlE,QAAQ,IAAI,MAAM,GAAG,SAAS;IAqB9B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,cAAc,EAAE;IAa7E,OAAO,CAAC,MAAM;IA2Cd,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,MAAM,CAAC,MAAM;IAOrB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,MAAM,CAAC,QAAQ;IAWvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,sBAAsB;CAQ/B"}