@livekit/agents 1.1.0 → 1.2.1

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 (959) hide show
  1. package/dist/_exceptions.cjs.map +1 -1
  2. package/dist/_exceptions.d.ts.map +1 -1
  3. package/dist/_exceptions.js.map +1 -1
  4. package/dist/audio.cjs +89 -3
  5. package/dist/audio.cjs.map +1 -1
  6. package/dist/audio.d.cts +36 -1
  7. package/dist/audio.d.ts +36 -1
  8. package/dist/audio.d.ts.map +1 -1
  9. package/dist/audio.js +76 -2
  10. package/dist/audio.js.map +1 -1
  11. package/dist/beta/index.cjs +29 -0
  12. package/dist/beta/index.cjs.map +1 -0
  13. package/dist/beta/index.d.cts +2 -0
  14. package/dist/beta/index.d.ts +2 -0
  15. package/dist/beta/index.d.ts.map +1 -0
  16. package/dist/beta/index.js +7 -0
  17. package/dist/beta/index.js.map +1 -0
  18. package/dist/beta/workflows/index.cjs +29 -0
  19. package/dist/beta/workflows/index.cjs.map +1 -0
  20. package/dist/beta/workflows/index.d.cts +2 -0
  21. package/dist/beta/workflows/index.d.ts +2 -0
  22. package/dist/beta/workflows/index.d.ts.map +1 -0
  23. package/dist/beta/workflows/index.js +7 -0
  24. package/dist/beta/workflows/index.js.map +1 -0
  25. package/dist/beta/workflows/task_group.cjs +165 -0
  26. package/dist/beta/workflows/task_group.cjs.map +1 -0
  27. package/dist/beta/workflows/task_group.d.cts +32 -0
  28. package/dist/beta/workflows/task_group.d.ts +32 -0
  29. package/dist/beta/workflows/task_group.d.ts.map +1 -0
  30. package/dist/beta/workflows/task_group.js +141 -0
  31. package/dist/beta/workflows/task_group.js.map +1 -0
  32. package/dist/cli.cjs +44 -46
  33. package/dist/cli.cjs.map +1 -1
  34. package/dist/cli.d.cts +3 -3
  35. package/dist/cli.d.ts +3 -3
  36. package/dist/cli.d.ts.map +1 -1
  37. package/dist/cli.js +45 -47
  38. package/dist/cli.js.map +1 -1
  39. package/dist/connection_pool.cjs +242 -0
  40. package/dist/connection_pool.cjs.map +1 -0
  41. package/dist/connection_pool.d.cts +123 -0
  42. package/dist/connection_pool.d.ts +123 -0
  43. package/dist/connection_pool.d.ts.map +1 -0
  44. package/dist/connection_pool.js +218 -0
  45. package/dist/connection_pool.js.map +1 -0
  46. package/dist/connection_pool.test.cjs +256 -0
  47. package/dist/connection_pool.test.cjs.map +1 -0
  48. package/dist/connection_pool.test.js +255 -0
  49. package/dist/connection_pool.test.js.map +1 -0
  50. package/dist/constants.cjs +30 -0
  51. package/dist/constants.cjs.map +1 -1
  52. package/dist/constants.d.cts +10 -0
  53. package/dist/constants.d.ts +10 -0
  54. package/dist/constants.d.ts.map +1 -1
  55. package/dist/constants.js +20 -0
  56. package/dist/constants.js.map +1 -1
  57. package/dist/cpu.cjs +189 -0
  58. package/dist/cpu.cjs.map +1 -0
  59. package/dist/cpu.d.cts +24 -0
  60. package/dist/cpu.d.ts +24 -0
  61. package/dist/cpu.d.ts.map +1 -0
  62. package/dist/cpu.js +152 -0
  63. package/dist/cpu.js.map +1 -0
  64. package/dist/cpu.test.cjs +227 -0
  65. package/dist/cpu.test.cjs.map +1 -0
  66. package/dist/cpu.test.js +204 -0
  67. package/dist/cpu.test.js.map +1 -0
  68. package/dist/http_server.cjs +9 -6
  69. package/dist/http_server.cjs.map +1 -1
  70. package/dist/http_server.d.cts +5 -1
  71. package/dist/http_server.d.ts +5 -1
  72. package/dist/http_server.d.ts.map +1 -1
  73. package/dist/http_server.js +9 -6
  74. package/dist/http_server.js.map +1 -1
  75. package/dist/index.cjs +24 -9
  76. package/dist/index.cjs.map +1 -1
  77. package/dist/index.d.cts +15 -11
  78. package/dist/index.d.ts +15 -11
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +18 -9
  81. package/dist/index.js.map +1 -1
  82. package/dist/inference/api_protos.cjs +70 -2
  83. package/dist/inference/api_protos.cjs.map +1 -1
  84. package/dist/inference/api_protos.d.cts +373 -32
  85. package/dist/inference/api_protos.d.ts +373 -32
  86. package/dist/inference/api_protos.d.ts.map +1 -1
  87. package/dist/inference/api_protos.js +62 -2
  88. package/dist/inference/api_protos.js.map +1 -1
  89. package/dist/inference/index.cjs +8 -0
  90. package/dist/inference/index.cjs.map +1 -1
  91. package/dist/inference/index.d.cts +3 -4
  92. package/dist/inference/index.d.ts +3 -4
  93. package/dist/inference/index.d.ts.map +1 -1
  94. package/dist/inference/index.js +18 -3
  95. package/dist/inference/index.js.map +1 -1
  96. package/dist/inference/interruption/defaults.cjs +81 -0
  97. package/dist/inference/interruption/defaults.cjs.map +1 -0
  98. package/dist/inference/interruption/defaults.d.cts +19 -0
  99. package/dist/inference/interruption/defaults.d.ts +19 -0
  100. package/dist/inference/interruption/defaults.d.ts.map +1 -0
  101. package/dist/inference/interruption/defaults.js +46 -0
  102. package/dist/inference/interruption/defaults.js.map +1 -0
  103. package/dist/inference/interruption/errors.cjs +44 -0
  104. package/dist/inference/interruption/errors.cjs.map +1 -0
  105. package/dist/inference/interruption/errors.d.cts +12 -0
  106. package/dist/inference/interruption/errors.d.ts +12 -0
  107. package/dist/inference/interruption/errors.d.ts.map +1 -0
  108. package/dist/inference/interruption/errors.js +20 -0
  109. package/dist/inference/interruption/errors.js.map +1 -0
  110. package/dist/inference/interruption/http_transport.cjs +163 -0
  111. package/dist/inference/interruption/http_transport.cjs.map +1 -0
  112. package/dist/inference/interruption/http_transport.d.cts +65 -0
  113. package/dist/inference/interruption/http_transport.d.ts +65 -0
  114. package/dist/inference/interruption/http_transport.d.ts.map +1 -0
  115. package/dist/inference/interruption/http_transport.js +137 -0
  116. package/dist/inference/interruption/http_transport.js.map +1 -0
  117. package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
  118. package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
  119. package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
  120. package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
  121. package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
  122. package/dist/inference/interruption/interruption_cache_entry.js +34 -0
  123. package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
  124. package/dist/inference/interruption/interruption_detector.cjs +198 -0
  125. package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
  126. package/dist/inference/interruption/interruption_detector.d.cts +59 -0
  127. package/dist/inference/interruption/interruption_detector.d.ts +59 -0
  128. package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
  129. package/dist/inference/interruption/interruption_detector.js +164 -0
  130. package/dist/inference/interruption/interruption_detector.js.map +1 -0
  131. package/dist/inference/interruption/interruption_stream.cjs +368 -0
  132. package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
  133. package/dist/inference/interruption/interruption_stream.d.cts +46 -0
  134. package/dist/inference/interruption/interruption_stream.d.ts +46 -0
  135. package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
  136. package/dist/inference/interruption/interruption_stream.js +344 -0
  137. package/dist/inference/interruption/interruption_stream.js.map +1 -0
  138. package/dist/inference/interruption/types.cjs +17 -0
  139. package/dist/inference/interruption/types.cjs.map +1 -0
  140. package/dist/inference/interruption/types.d.cts +66 -0
  141. package/dist/inference/interruption/types.d.ts +66 -0
  142. package/dist/inference/interruption/types.d.ts.map +1 -0
  143. package/dist/inference/interruption/types.js +1 -0
  144. package/dist/inference/interruption/types.js.map +1 -0
  145. package/dist/inference/interruption/utils.cjs +130 -0
  146. package/dist/inference/interruption/utils.cjs.map +1 -0
  147. package/dist/inference/interruption/utils.d.cts +41 -0
  148. package/dist/inference/interruption/utils.d.ts +41 -0
  149. package/dist/inference/interruption/utils.d.ts.map +1 -0
  150. package/dist/inference/interruption/utils.js +105 -0
  151. package/dist/inference/interruption/utils.js.map +1 -0
  152. package/dist/inference/interruption/utils.test.cjs +105 -0
  153. package/dist/inference/interruption/utils.test.cjs.map +1 -0
  154. package/dist/inference/interruption/utils.test.js +104 -0
  155. package/dist/inference/interruption/utils.test.js.map +1 -0
  156. package/dist/inference/interruption/ws_transport.cjs +347 -0
  157. package/dist/inference/interruption/ws_transport.cjs.map +1 -0
  158. package/dist/inference/interruption/ws_transport.d.cts +33 -0
  159. package/dist/inference/interruption/ws_transport.d.ts +33 -0
  160. package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
  161. package/dist/inference/interruption/ws_transport.js +313 -0
  162. package/dist/inference/interruption/ws_transport.js.map +1 -0
  163. package/dist/inference/llm.cjs +106 -66
  164. package/dist/inference/llm.cjs.map +1 -1
  165. package/dist/inference/llm.d.cts +65 -43
  166. package/dist/inference/llm.d.ts +65 -43
  167. package/dist/inference/llm.d.ts.map +1 -1
  168. package/dist/inference/llm.js +100 -66
  169. package/dist/inference/llm.js.map +1 -1
  170. package/dist/inference/stt.cjs +319 -170
  171. package/dist/inference/stt.cjs.map +1 -1
  172. package/dist/inference/stt.d.cts +64 -15
  173. package/dist/inference/stt.d.ts +64 -15
  174. package/dist/inference/stt.d.ts.map +1 -1
  175. package/dist/inference/stt.js +319 -170
  176. package/dist/inference/stt.js.map +1 -1
  177. package/dist/inference/stt.test.cjs +218 -0
  178. package/dist/inference/stt.test.cjs.map +1 -0
  179. package/dist/inference/stt.test.js +217 -0
  180. package/dist/inference/stt.test.js.map +1 -0
  181. package/dist/inference/tts.cjs +249 -71
  182. package/dist/inference/tts.cjs.map +1 -1
  183. package/dist/inference/tts.d.cts +94 -17
  184. package/dist/inference/tts.d.ts +94 -17
  185. package/dist/inference/tts.d.ts.map +1 -1
  186. package/dist/inference/tts.js +249 -77
  187. package/dist/inference/tts.js.map +1 -1
  188. package/dist/inference/tts.test.cjs +305 -0
  189. package/dist/inference/tts.test.cjs.map +1 -0
  190. package/dist/inference/tts.test.js +304 -0
  191. package/dist/inference/tts.test.js.map +1 -0
  192. package/dist/inference/utils.cjs +26 -7
  193. package/dist/inference/utils.cjs.map +1 -1
  194. package/dist/inference/utils.d.cts +14 -1
  195. package/dist/inference/utils.d.ts +14 -1
  196. package/dist/inference/utils.d.ts.map +1 -1
  197. package/dist/inference/utils.js +18 -2
  198. package/dist/inference/utils.js.map +1 -1
  199. package/dist/ipc/inference_proc_executor.cjs +6 -3
  200. package/dist/ipc/inference_proc_executor.cjs.map +1 -1
  201. package/dist/ipc/inference_proc_executor.d.ts.map +1 -1
  202. package/dist/ipc/inference_proc_executor.js +6 -3
  203. package/dist/ipc/inference_proc_executor.js.map +1 -1
  204. package/dist/ipc/inference_proc_lazy_main.cjs +13 -1
  205. package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -1
  206. package/dist/ipc/inference_proc_lazy_main.js +13 -1
  207. package/dist/ipc/inference_proc_lazy_main.js.map +1 -1
  208. package/dist/ipc/job_proc_executor.cjs +6 -1
  209. package/dist/ipc/job_proc_executor.cjs.map +1 -1
  210. package/dist/ipc/job_proc_executor.d.ts.map +1 -1
  211. package/dist/ipc/job_proc_executor.js +6 -1
  212. package/dist/ipc/job_proc_executor.js.map +1 -1
  213. package/dist/ipc/job_proc_lazy_main.cjs +89 -17
  214. package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
  215. package/dist/ipc/job_proc_lazy_main.js +68 -18
  216. package/dist/ipc/job_proc_lazy_main.js.map +1 -1
  217. package/dist/ipc/supervised_proc.cjs +34 -8
  218. package/dist/ipc/supervised_proc.cjs.map +1 -1
  219. package/dist/ipc/supervised_proc.d.cts +8 -0
  220. package/dist/ipc/supervised_proc.d.ts +8 -0
  221. package/dist/ipc/supervised_proc.d.ts.map +1 -1
  222. package/dist/ipc/supervised_proc.js +34 -8
  223. package/dist/ipc/supervised_proc.js.map +1 -1
  224. package/dist/ipc/supervised_proc.test.cjs +145 -0
  225. package/dist/ipc/supervised_proc.test.cjs.map +1 -0
  226. package/dist/ipc/supervised_proc.test.js +122 -0
  227. package/dist/ipc/supervised_proc.test.js.map +1 -0
  228. package/dist/job.cjs +109 -1
  229. package/dist/job.cjs.map +1 -1
  230. package/dist/job.d.cts +14 -0
  231. package/dist/job.d.ts +14 -0
  232. package/dist/job.d.ts.map +1 -1
  233. package/dist/job.js +99 -1
  234. package/dist/job.js.map +1 -1
  235. package/dist/language.cjs +394 -0
  236. package/dist/language.cjs.map +1 -0
  237. package/dist/language.d.cts +15 -0
  238. package/dist/language.d.ts +15 -0
  239. package/dist/language.d.ts.map +1 -0
  240. package/dist/language.js +363 -0
  241. package/dist/language.js.map +1 -0
  242. package/dist/language.test.cjs +43 -0
  243. package/dist/language.test.cjs.map +1 -0
  244. package/dist/language.test.js +49 -0
  245. package/dist/language.test.js.map +1 -0
  246. package/dist/llm/chat_context.cjs +345 -3
  247. package/dist/llm/chat_context.cjs.map +1 -1
  248. package/dist/llm/chat_context.d.cts +86 -2
  249. package/dist/llm/chat_context.d.ts +86 -2
  250. package/dist/llm/chat_context.d.ts.map +1 -1
  251. package/dist/llm/chat_context.js +344 -3
  252. package/dist/llm/chat_context.js.map +1 -1
  253. package/dist/llm/chat_context.test.cjs +692 -0
  254. package/dist/llm/chat_context.test.cjs.map +1 -1
  255. package/dist/llm/chat_context.test.js +692 -0
  256. package/dist/llm/chat_context.test.js.map +1 -1
  257. package/dist/llm/fallback_adapter.cjs +280 -0
  258. package/dist/llm/fallback_adapter.cjs.map +1 -0
  259. package/dist/llm/fallback_adapter.d.cts +73 -0
  260. package/dist/llm/fallback_adapter.d.ts +73 -0
  261. package/dist/llm/fallback_adapter.d.ts.map +1 -0
  262. package/dist/llm/fallback_adapter.js +256 -0
  263. package/dist/llm/fallback_adapter.js.map +1 -0
  264. package/dist/llm/fallback_adapter.test.cjs +176 -0
  265. package/dist/llm/fallback_adapter.test.cjs.map +1 -0
  266. package/dist/llm/fallback_adapter.test.js +175 -0
  267. package/dist/llm/fallback_adapter.test.js.map +1 -0
  268. package/dist/llm/index.cjs +11 -0
  269. package/dist/llm/index.cjs.map +1 -1
  270. package/dist/llm/index.d.cts +4 -3
  271. package/dist/llm/index.d.ts +4 -3
  272. package/dist/llm/index.d.ts.map +1 -1
  273. package/dist/llm/index.js +13 -1
  274. package/dist/llm/index.js.map +1 -1
  275. package/dist/llm/llm.cjs +65 -11
  276. package/dist/llm/llm.cjs.map +1 -1
  277. package/dist/llm/llm.d.cts +13 -2
  278. package/dist/llm/llm.d.ts +13 -2
  279. package/dist/llm/llm.d.ts.map +1 -1
  280. package/dist/llm/llm.js +65 -11
  281. package/dist/llm/llm.js.map +1 -1
  282. package/dist/llm/provider_format/google.cjs +6 -2
  283. package/dist/llm/provider_format/google.cjs.map +1 -1
  284. package/dist/llm/provider_format/google.d.cts +1 -1
  285. package/dist/llm/provider_format/google.d.ts +1 -1
  286. package/dist/llm/provider_format/google.d.ts.map +1 -1
  287. package/dist/llm/provider_format/google.js +6 -2
  288. package/dist/llm/provider_format/google.js.map +1 -1
  289. package/dist/llm/provider_format/google.test.cjs +48 -0
  290. package/dist/llm/provider_format/google.test.cjs.map +1 -1
  291. package/dist/llm/provider_format/google.test.js +54 -1
  292. package/dist/llm/provider_format/google.test.js.map +1 -1
  293. package/dist/llm/provider_format/index.cjs +2 -0
  294. package/dist/llm/provider_format/index.cjs.map +1 -1
  295. package/dist/llm/provider_format/index.d.cts +2 -2
  296. package/dist/llm/provider_format/index.d.ts +2 -2
  297. package/dist/llm/provider_format/index.d.ts.map +1 -1
  298. package/dist/llm/provider_format/index.js +6 -1
  299. package/dist/llm/provider_format/index.js.map +1 -1
  300. package/dist/llm/provider_format/openai.cjs +126 -24
  301. package/dist/llm/provider_format/openai.cjs.map +1 -1
  302. package/dist/llm/provider_format/openai.d.cts +1 -0
  303. package/dist/llm/provider_format/openai.d.ts +1 -0
  304. package/dist/llm/provider_format/openai.d.ts.map +1 -1
  305. package/dist/llm/provider_format/openai.js +124 -23
  306. package/dist/llm/provider_format/openai.js.map +1 -1
  307. package/dist/llm/provider_format/openai.test.cjs +393 -0
  308. package/dist/llm/provider_format/openai.test.cjs.map +1 -1
  309. package/dist/llm/provider_format/openai.test.js +400 -2
  310. package/dist/llm/provider_format/openai.test.js.map +1 -1
  311. package/dist/llm/provider_format/utils.cjs +5 -4
  312. package/dist/llm/provider_format/utils.cjs.map +1 -1
  313. package/dist/llm/provider_format/utils.d.ts.map +1 -1
  314. package/dist/llm/provider_format/utils.js +5 -4
  315. package/dist/llm/provider_format/utils.js.map +1 -1
  316. package/dist/llm/realtime.cjs +3 -0
  317. package/dist/llm/realtime.cjs.map +1 -1
  318. package/dist/llm/realtime.d.cts +15 -1
  319. package/dist/llm/realtime.d.ts +15 -1
  320. package/dist/llm/realtime.d.ts.map +1 -1
  321. package/dist/llm/realtime.js +3 -0
  322. package/dist/llm/realtime.js.map +1 -1
  323. package/dist/llm/remote_chat_context.cjs.map +1 -1
  324. package/dist/llm/remote_chat_context.d.cts +2 -0
  325. package/dist/llm/remote_chat_context.d.ts +2 -0
  326. package/dist/llm/remote_chat_context.d.ts.map +1 -1
  327. package/dist/llm/remote_chat_context.js.map +1 -1
  328. package/dist/llm/tool_context.cjs +50 -2
  329. package/dist/llm/tool_context.cjs.map +1 -1
  330. package/dist/llm/tool_context.d.cts +47 -11
  331. package/dist/llm/tool_context.d.ts +47 -11
  332. package/dist/llm/tool_context.d.ts.map +1 -1
  333. package/dist/llm/tool_context.js +48 -3
  334. package/dist/llm/tool_context.js.map +1 -1
  335. package/dist/llm/tool_context.test.cjs +197 -0
  336. package/dist/llm/tool_context.test.cjs.map +1 -1
  337. package/dist/llm/tool_context.test.js +175 -0
  338. package/dist/llm/tool_context.test.js.map +1 -1
  339. package/dist/llm/utils.cjs +107 -12
  340. package/dist/llm/utils.cjs.map +1 -1
  341. package/dist/llm/utils.d.cts +10 -3
  342. package/dist/llm/utils.d.ts +10 -3
  343. package/dist/llm/utils.d.ts.map +1 -1
  344. package/dist/llm/utils.js +106 -12
  345. package/dist/llm/utils.js.map +1 -1
  346. package/dist/llm/utils.test.cjs +90 -0
  347. package/dist/llm/utils.test.cjs.map +1 -1
  348. package/dist/llm/utils.test.js +98 -2
  349. package/dist/llm/utils.test.js.map +1 -1
  350. package/dist/llm/zod-utils.cjs +102 -0
  351. package/dist/llm/zod-utils.cjs.map +1 -0
  352. package/dist/llm/zod-utils.d.cts +65 -0
  353. package/dist/llm/zod-utils.d.ts +65 -0
  354. package/dist/llm/zod-utils.d.ts.map +1 -0
  355. package/dist/llm/zod-utils.js +64 -0
  356. package/dist/llm/zod-utils.js.map +1 -0
  357. package/dist/llm/zod-utils.test.cjs +472 -0
  358. package/dist/llm/zod-utils.test.cjs.map +1 -0
  359. package/dist/llm/zod-utils.test.js +455 -0
  360. package/dist/llm/zod-utils.test.js.map +1 -0
  361. package/dist/log.cjs +45 -14
  362. package/dist/log.cjs.map +1 -1
  363. package/dist/log.d.cts +8 -1
  364. package/dist/log.d.ts +8 -1
  365. package/dist/log.d.ts.map +1 -1
  366. package/dist/log.js +45 -15
  367. package/dist/log.js.map +1 -1
  368. package/dist/metrics/base.cjs.map +1 -1
  369. package/dist/metrics/base.d.cts +75 -19
  370. package/dist/metrics/base.d.ts +75 -19
  371. package/dist/metrics/base.d.ts.map +1 -1
  372. package/dist/metrics/index.cjs +5 -0
  373. package/dist/metrics/index.cjs.map +1 -1
  374. package/dist/metrics/index.d.cts +2 -1
  375. package/dist/metrics/index.d.ts +2 -1
  376. package/dist/metrics/index.d.ts.map +1 -1
  377. package/dist/metrics/index.js +6 -0
  378. package/dist/metrics/index.js.map +1 -1
  379. package/dist/metrics/model_usage.cjs +189 -0
  380. package/dist/metrics/model_usage.cjs.map +1 -0
  381. package/dist/metrics/model_usage.d.cts +92 -0
  382. package/dist/metrics/model_usage.d.ts +92 -0
  383. package/dist/metrics/model_usage.d.ts.map +1 -0
  384. package/dist/metrics/model_usage.js +164 -0
  385. package/dist/metrics/model_usage.js.map +1 -0
  386. package/dist/metrics/model_usage.test.cjs +474 -0
  387. package/dist/metrics/model_usage.test.cjs.map +1 -0
  388. package/dist/metrics/model_usage.test.js +476 -0
  389. package/dist/metrics/model_usage.test.js.map +1 -0
  390. package/dist/metrics/usage_collector.cjs +5 -2
  391. package/dist/metrics/usage_collector.cjs.map +1 -1
  392. package/dist/metrics/usage_collector.d.cts +10 -1
  393. package/dist/metrics/usage_collector.d.ts +10 -1
  394. package/dist/metrics/usage_collector.d.ts.map +1 -1
  395. package/dist/metrics/usage_collector.js +5 -2
  396. package/dist/metrics/usage_collector.js.map +1 -1
  397. package/dist/metrics/utils.cjs +23 -7
  398. package/dist/metrics/utils.cjs.map +1 -1
  399. package/dist/metrics/utils.d.ts.map +1 -1
  400. package/dist/metrics/utils.js +23 -7
  401. package/dist/metrics/utils.js.map +1 -1
  402. package/dist/stream/deferred_stream.cjs +31 -10
  403. package/dist/stream/deferred_stream.cjs.map +1 -1
  404. package/dist/stream/deferred_stream.d.cts +6 -1
  405. package/dist/stream/deferred_stream.d.ts +6 -1
  406. package/dist/stream/deferred_stream.d.ts.map +1 -1
  407. package/dist/stream/deferred_stream.js +31 -10
  408. package/dist/stream/deferred_stream.js.map +1 -1
  409. package/dist/stream/deferred_stream.test.cjs +2 -2
  410. package/dist/stream/deferred_stream.test.cjs.map +1 -1
  411. package/dist/stream/deferred_stream.test.js +2 -2
  412. package/dist/stream/deferred_stream.test.js.map +1 -1
  413. package/dist/stream/index.cjs +3 -0
  414. package/dist/stream/index.cjs.map +1 -1
  415. package/dist/stream/index.d.cts +1 -0
  416. package/dist/stream/index.d.ts +1 -0
  417. package/dist/stream/index.d.ts.map +1 -1
  418. package/dist/stream/index.js +2 -0
  419. package/dist/stream/index.js.map +1 -1
  420. package/dist/stream/multi_input_stream.cjs +139 -0
  421. package/dist/stream/multi_input_stream.cjs.map +1 -0
  422. package/dist/stream/multi_input_stream.d.cts +55 -0
  423. package/dist/stream/multi_input_stream.d.ts +55 -0
  424. package/dist/stream/multi_input_stream.d.ts.map +1 -0
  425. package/dist/stream/multi_input_stream.js +115 -0
  426. package/dist/stream/multi_input_stream.js.map +1 -0
  427. package/dist/stream/multi_input_stream.test.cjs +344 -0
  428. package/dist/stream/multi_input_stream.test.cjs.map +1 -0
  429. package/dist/stream/multi_input_stream.test.js +343 -0
  430. package/dist/stream/multi_input_stream.test.js.map +1 -0
  431. package/dist/stream/stream_channel.cjs +39 -1
  432. package/dist/stream/stream_channel.cjs.map +1 -1
  433. package/dist/stream/stream_channel.d.cts +5 -2
  434. package/dist/stream/stream_channel.d.ts +5 -2
  435. package/dist/stream/stream_channel.d.ts.map +1 -1
  436. package/dist/stream/stream_channel.js +39 -1
  437. package/dist/stream/stream_channel.js.map +1 -1
  438. package/dist/stream/stream_channel.test.cjs +27 -0
  439. package/dist/stream/stream_channel.test.cjs.map +1 -1
  440. package/dist/stream/stream_channel.test.js +27 -0
  441. package/dist/stream/stream_channel.test.js.map +1 -1
  442. package/dist/stt/stream_adapter.cjs +24 -9
  443. package/dist/stt/stream_adapter.cjs.map +1 -1
  444. package/dist/stt/stream_adapter.d.cts +7 -3
  445. package/dist/stt/stream_adapter.d.ts +7 -3
  446. package/dist/stt/stream_adapter.d.ts.map +1 -1
  447. package/dist/stt/stream_adapter.js +24 -9
  448. package/dist/stt/stream_adapter.js.map +1 -1
  449. package/dist/stt/stt.cjs +94 -19
  450. package/dist/stt/stt.cjs.map +1 -1
  451. package/dist/stt/stt.d.cts +68 -5
  452. package/dist/stt/stt.d.ts +68 -5
  453. package/dist/stt/stt.d.ts.map +1 -1
  454. package/dist/stt/stt.js +96 -21
  455. package/dist/stt/stt.js.map +1 -1
  456. package/dist/telemetry/index.cjs +72 -0
  457. package/dist/telemetry/index.cjs.map +1 -0
  458. package/dist/telemetry/index.d.cts +7 -0
  459. package/dist/telemetry/index.d.ts +7 -0
  460. package/dist/telemetry/index.d.ts.map +1 -0
  461. package/dist/telemetry/index.js +37 -0
  462. package/dist/telemetry/index.js.map +1 -0
  463. package/dist/telemetry/logging.cjs +65 -0
  464. package/dist/telemetry/logging.cjs.map +1 -0
  465. package/dist/telemetry/logging.d.cts +21 -0
  466. package/dist/telemetry/logging.d.ts +21 -0
  467. package/dist/telemetry/logging.d.ts.map +1 -0
  468. package/dist/telemetry/logging.js +40 -0
  469. package/dist/telemetry/logging.js.map +1 -0
  470. package/dist/telemetry/otel_http_exporter.cjs +166 -0
  471. package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
  472. package/dist/telemetry/otel_http_exporter.d.cts +63 -0
  473. package/dist/telemetry/otel_http_exporter.d.ts +63 -0
  474. package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
  475. package/dist/telemetry/otel_http_exporter.js +142 -0
  476. package/dist/telemetry/otel_http_exporter.js.map +1 -0
  477. package/dist/telemetry/pino_otel_transport.cjs +217 -0
  478. package/dist/telemetry/pino_otel_transport.cjs.map +1 -0
  479. package/dist/telemetry/pino_otel_transport.d.cts +58 -0
  480. package/dist/telemetry/pino_otel_transport.d.ts +58 -0
  481. package/dist/telemetry/pino_otel_transport.d.ts.map +1 -0
  482. package/dist/telemetry/pino_otel_transport.js +189 -0
  483. package/dist/telemetry/pino_otel_transport.js.map +1 -0
  484. package/dist/telemetry/trace_types.cjs +233 -0
  485. package/dist/telemetry/trace_types.cjs.map +1 -0
  486. package/dist/telemetry/trace_types.d.cts +74 -0
  487. package/dist/telemetry/trace_types.d.ts +74 -0
  488. package/dist/telemetry/trace_types.d.ts.map +1 -0
  489. package/dist/telemetry/trace_types.js +141 -0
  490. package/dist/telemetry/trace_types.js.map +1 -0
  491. package/dist/telemetry/traces.cjs +484 -0
  492. package/dist/telemetry/traces.cjs.map +1 -0
  493. package/dist/telemetry/traces.d.cts +116 -0
  494. package/dist/telemetry/traces.d.ts +116 -0
  495. package/dist/telemetry/traces.d.ts.map +1 -0
  496. package/dist/telemetry/traces.js +449 -0
  497. package/dist/telemetry/traces.js.map +1 -0
  498. package/dist/telemetry/utils.cjs +86 -0
  499. package/dist/telemetry/utils.cjs.map +1 -0
  500. package/dist/telemetry/utils.d.cts +5 -0
  501. package/dist/telemetry/utils.d.ts +5 -0
  502. package/dist/telemetry/utils.d.ts.map +1 -0
  503. package/dist/telemetry/utils.js +51 -0
  504. package/dist/telemetry/utils.js.map +1 -0
  505. package/dist/tokenize/basic/sentence.cjs +3 -3
  506. package/dist/tokenize/basic/sentence.cjs.map +1 -1
  507. package/dist/tokenize/basic/sentence.js +3 -3
  508. package/dist/tokenize/basic/sentence.js.map +1 -1
  509. package/dist/tokenize/tokenizer.test.cjs +3 -1
  510. package/dist/tokenize/tokenizer.test.cjs.map +1 -1
  511. package/dist/tokenize/tokenizer.test.js +3 -1
  512. package/dist/tokenize/tokenizer.test.js.map +1 -1
  513. package/dist/transcription.cjs.map +1 -1
  514. package/dist/transcription.d.cts +6 -0
  515. package/dist/transcription.d.ts +6 -0
  516. package/dist/transcription.d.ts.map +1 -1
  517. package/dist/transcription.js.map +1 -1
  518. package/dist/tts/fallback_adapter.cjs +472 -0
  519. package/dist/tts/fallback_adapter.cjs.map +1 -0
  520. package/dist/tts/fallback_adapter.d.cts +110 -0
  521. package/dist/tts/fallback_adapter.d.ts +110 -0
  522. package/dist/tts/fallback_adapter.d.ts.map +1 -0
  523. package/dist/tts/fallback_adapter.js +448 -0
  524. package/dist/tts/fallback_adapter.js.map +1 -0
  525. package/dist/tts/index.cjs +3 -0
  526. package/dist/tts/index.cjs.map +1 -1
  527. package/dist/tts/index.d.cts +1 -0
  528. package/dist/tts/index.d.ts +1 -0
  529. package/dist/tts/index.d.ts.map +1 -1
  530. package/dist/tts/index.js +2 -0
  531. package/dist/tts/index.js.map +1 -1
  532. package/dist/tts/stream_adapter.cjs +25 -8
  533. package/dist/tts/stream_adapter.cjs.map +1 -1
  534. package/dist/tts/stream_adapter.d.cts +6 -3
  535. package/dist/tts/stream_adapter.d.ts +6 -3
  536. package/dist/tts/stream_adapter.d.ts.map +1 -1
  537. package/dist/tts/stream_adapter.js +25 -8
  538. package/dist/tts/stream_adapter.js.map +1 -1
  539. package/dist/tts/tts.cjs +189 -57
  540. package/dist/tts/tts.cjs.map +1 -1
  541. package/dist/tts/tts.d.cts +58 -6
  542. package/dist/tts/tts.d.ts +58 -6
  543. package/dist/tts/tts.d.ts.map +1 -1
  544. package/dist/tts/tts.js +191 -59
  545. package/dist/tts/tts.js.map +1 -1
  546. package/dist/typed_promise.cjs +48 -0
  547. package/dist/typed_promise.cjs.map +1 -0
  548. package/dist/typed_promise.d.cts +24 -0
  549. package/dist/typed_promise.d.ts +24 -0
  550. package/dist/typed_promise.d.ts.map +1 -0
  551. package/dist/typed_promise.js +28 -0
  552. package/dist/typed_promise.js.map +1 -0
  553. package/dist/types.cjs +24 -32
  554. package/dist/types.cjs.map +1 -1
  555. package/dist/types.d.cts +45 -10
  556. package/dist/types.d.ts +45 -10
  557. package/dist/types.d.ts.map +1 -1
  558. package/dist/types.js +20 -30
  559. package/dist/types.js.map +1 -1
  560. package/dist/utils.cjs +124 -28
  561. package/dist/utils.cjs.map +1 -1
  562. package/dist/utils.d.cts +41 -1
  563. package/dist/utils.d.ts +41 -1
  564. package/dist/utils.d.ts.map +1 -1
  565. package/dist/utils.js +119 -27
  566. package/dist/utils.js.map +1 -1
  567. package/dist/utils.test.cjs +73 -1
  568. package/dist/utils.test.cjs.map +1 -1
  569. package/dist/utils.test.js +74 -10
  570. package/dist/utils.test.js.map +1 -1
  571. package/dist/vad.cjs +35 -15
  572. package/dist/vad.cjs.map +1 -1
  573. package/dist/vad.d.cts +15 -5
  574. package/dist/vad.d.ts +15 -5
  575. package/dist/vad.d.ts.map +1 -1
  576. package/dist/vad.js +35 -15
  577. package/dist/vad.js.map +1 -1
  578. package/dist/version.cjs +1 -1
  579. package/dist/version.cjs.map +1 -1
  580. package/dist/version.d.cts +1 -1
  581. package/dist/version.d.ts +1 -1
  582. package/dist/version.d.ts.map +1 -1
  583. package/dist/version.js +1 -1
  584. package/dist/version.js.map +1 -1
  585. package/dist/voice/agent.cjs +258 -35
  586. package/dist/voice/agent.cjs.map +1 -1
  587. package/dist/voice/agent.d.cts +54 -13
  588. package/dist/voice/agent.d.ts +54 -13
  589. package/dist/voice/agent.d.ts.map +1 -1
  590. package/dist/voice/agent.js +254 -34
  591. package/dist/voice/agent.js.map +1 -1
  592. package/dist/voice/agent.test.cjs +314 -0
  593. package/dist/voice/agent.test.cjs.map +1 -1
  594. package/dist/voice/agent.test.js +316 -2
  595. package/dist/voice/agent.test.js.map +1 -1
  596. package/dist/voice/agent_activity.cjs +1116 -385
  597. package/dist/voice/agent_activity.cjs.map +1 -1
  598. package/dist/voice/agent_activity.d.cts +72 -11
  599. package/dist/voice/agent_activity.d.ts +72 -11
  600. package/dist/voice/agent_activity.d.ts.map +1 -1
  601. package/dist/voice/agent_activity.js +1119 -383
  602. package/dist/voice/agent_activity.js.map +1 -1
  603. package/dist/voice/agent_activity.test.cjs +135 -0
  604. package/dist/voice/agent_activity.test.cjs.map +1 -0
  605. package/dist/voice/agent_activity.test.js +134 -0
  606. package/dist/voice/agent_activity.test.js.map +1 -0
  607. package/dist/voice/agent_session.cjs +550 -90
  608. package/dist/voice/agent_session.cjs.map +1 -1
  609. package/dist/voice/agent_session.d.cts +185 -25
  610. package/dist/voice/agent_session.d.ts +185 -25
  611. package/dist/voice/agent_session.d.ts.map +1 -1
  612. package/dist/voice/agent_session.js +556 -91
  613. package/dist/voice/agent_session.js.map +1 -1
  614. package/dist/voice/audio_recognition.cjs +605 -46
  615. package/dist/voice/audio_recognition.cjs.map +1 -1
  616. package/dist/voice/audio_recognition.d.cts +96 -4
  617. package/dist/voice/audio_recognition.d.ts +96 -4
  618. package/dist/voice/audio_recognition.d.ts.map +1 -1
  619. package/dist/voice/audio_recognition.js +611 -47
  620. package/dist/voice/audio_recognition.js.map +1 -1
  621. package/dist/voice/audio_recognition_span.test.cjs +295 -0
  622. package/dist/voice/audio_recognition_span.test.cjs.map +1 -0
  623. package/dist/voice/audio_recognition_span.test.js +299 -0
  624. package/dist/voice/audio_recognition_span.test.js.map +1 -0
  625. package/dist/voice/avatar/datastream_io.cjs +7 -1
  626. package/dist/voice/avatar/datastream_io.cjs.map +1 -1
  627. package/dist/voice/avatar/datastream_io.d.cts +1 -0
  628. package/dist/voice/avatar/datastream_io.d.ts +1 -0
  629. package/dist/voice/avatar/datastream_io.d.ts.map +1 -1
  630. package/dist/voice/avatar/datastream_io.js +7 -1
  631. package/dist/voice/avatar/datastream_io.js.map +1 -1
  632. package/dist/voice/background_audio.cjs +367 -0
  633. package/dist/voice/background_audio.cjs.map +1 -0
  634. package/dist/voice/background_audio.d.cts +123 -0
  635. package/dist/voice/background_audio.d.ts +123 -0
  636. package/dist/voice/background_audio.d.ts.map +1 -0
  637. package/dist/voice/background_audio.js +343 -0
  638. package/dist/voice/background_audio.js.map +1 -0
  639. package/dist/voice/events.cjs +3 -0
  640. package/dist/voice/events.cjs.map +1 -1
  641. package/dist/voice/events.d.cts +16 -9
  642. package/dist/voice/events.d.ts +16 -9
  643. package/dist/voice/events.d.ts.map +1 -1
  644. package/dist/voice/events.js +3 -0
  645. package/dist/voice/events.js.map +1 -1
  646. package/dist/voice/generation.cjs +205 -41
  647. package/dist/voice/generation.cjs.map +1 -1
  648. package/dist/voice/generation.d.cts +21 -5
  649. package/dist/voice/generation.d.ts +21 -5
  650. package/dist/voice/generation.d.ts.map +1 -1
  651. package/dist/voice/generation.js +215 -43
  652. package/dist/voice/generation.js.map +1 -1
  653. package/dist/voice/generation_tools.test.cjs +236 -0
  654. package/dist/voice/generation_tools.test.cjs.map +1 -0
  655. package/dist/voice/generation_tools.test.js +235 -0
  656. package/dist/voice/generation_tools.test.js.map +1 -0
  657. package/dist/voice/index.cjs +33 -2
  658. package/dist/voice/index.cjs.map +1 -1
  659. package/dist/voice/index.d.cts +8 -2
  660. package/dist/voice/index.d.ts +8 -2
  661. package/dist/voice/index.d.ts.map +1 -1
  662. package/dist/voice/index.js +19 -2
  663. package/dist/voice/index.js.map +1 -1
  664. package/dist/voice/interruption_detection.test.cjs +114 -0
  665. package/dist/voice/interruption_detection.test.cjs.map +1 -0
  666. package/dist/voice/interruption_detection.test.js +113 -0
  667. package/dist/voice/interruption_detection.test.js.map +1 -0
  668. package/dist/voice/io.cjs +66 -6
  669. package/dist/voice/io.cjs.map +1 -1
  670. package/dist/voice/io.d.cts +67 -7
  671. package/dist/voice/io.d.ts +67 -7
  672. package/dist/voice/io.d.ts.map +1 -1
  673. package/dist/voice/io.js +62 -5
  674. package/dist/voice/io.js.map +1 -1
  675. package/dist/voice/recorder_io/index.cjs +23 -0
  676. package/dist/voice/recorder_io/index.cjs.map +1 -0
  677. package/dist/voice/recorder_io/index.d.cts +2 -0
  678. package/dist/voice/recorder_io/index.d.ts +2 -0
  679. package/dist/voice/recorder_io/index.d.ts.map +1 -0
  680. package/dist/voice/recorder_io/index.js +2 -0
  681. package/dist/voice/recorder_io/index.js.map +1 -0
  682. package/dist/voice/recorder_io/recorder_io.cjs +607 -0
  683. package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
  684. package/dist/voice/recorder_io/recorder_io.d.cts +106 -0
  685. package/dist/voice/recorder_io/recorder_io.d.ts +106 -0
  686. package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
  687. package/dist/voice/recorder_io/recorder_io.js +573 -0
  688. package/dist/voice/recorder_io/recorder_io.js.map +1 -0
  689. package/dist/voice/remote_session.cjs +922 -0
  690. package/dist/voice/remote_session.cjs.map +1 -0
  691. package/dist/voice/remote_session.d.cts +108 -0
  692. package/dist/voice/remote_session.d.ts +108 -0
  693. package/dist/voice/remote_session.d.ts.map +1 -0
  694. package/dist/voice/remote_session.js +887 -0
  695. package/dist/voice/remote_session.js.map +1 -0
  696. package/dist/voice/report.cjs +88 -0
  697. package/dist/voice/report.cjs.map +1 -0
  698. package/dist/voice/report.d.cts +49 -0
  699. package/dist/voice/report.d.ts +49 -0
  700. package/dist/voice/report.d.ts.map +1 -0
  701. package/dist/voice/report.js +63 -0
  702. package/dist/voice/report.js.map +1 -0
  703. package/dist/voice/report.test.cjs +121 -0
  704. package/dist/voice/report.test.cjs.map +1 -0
  705. package/dist/voice/report.test.js +120 -0
  706. package/dist/voice/report.test.js.map +1 -0
  707. package/dist/voice/room_io/_input.cjs +40 -7
  708. package/dist/voice/room_io/_input.cjs.map +1 -1
  709. package/dist/voice/room_io/_input.d.cts +5 -2
  710. package/dist/voice/room_io/_input.d.ts +5 -2
  711. package/dist/voice/room_io/_input.d.ts.map +1 -1
  712. package/dist/voice/room_io/_input.js +41 -8
  713. package/dist/voice/room_io/_input.js.map +1 -1
  714. package/dist/voice/room_io/_output.cjs +19 -11
  715. package/dist/voice/room_io/_output.cjs.map +1 -1
  716. package/dist/voice/room_io/_output.d.cts +7 -4
  717. package/dist/voice/room_io/_output.d.ts +7 -4
  718. package/dist/voice/room_io/_output.d.ts.map +1 -1
  719. package/dist/voice/room_io/_output.js +20 -12
  720. package/dist/voice/room_io/_output.js.map +1 -1
  721. package/dist/voice/room_io/room_io.cjs +33 -6
  722. package/dist/voice/room_io/room_io.cjs.map +1 -1
  723. package/dist/voice/room_io/room_io.d.cts +29 -9
  724. package/dist/voice/room_io/room_io.d.ts +29 -9
  725. package/dist/voice/room_io/room_io.d.ts.map +1 -1
  726. package/dist/voice/room_io/room_io.js +33 -7
  727. package/dist/voice/room_io/room_io.js.map +1 -1
  728. package/dist/voice/speech_handle.cjs +22 -4
  729. package/dist/voice/speech_handle.cjs.map +1 -1
  730. package/dist/voice/speech_handle.d.cts +17 -2
  731. package/dist/voice/speech_handle.d.ts +17 -2
  732. package/dist/voice/speech_handle.d.ts.map +1 -1
  733. package/dist/voice/speech_handle.js +21 -4
  734. package/dist/voice/speech_handle.js.map +1 -1
  735. package/dist/voice/testing/fake_llm.cjs +127 -0
  736. package/dist/voice/testing/fake_llm.cjs.map +1 -0
  737. package/dist/voice/testing/fake_llm.d.cts +30 -0
  738. package/dist/voice/testing/fake_llm.d.ts +30 -0
  739. package/dist/voice/testing/fake_llm.d.ts.map +1 -0
  740. package/dist/voice/testing/fake_llm.js +103 -0
  741. package/dist/voice/testing/fake_llm.js.map +1 -0
  742. package/dist/voice/testing/index.cjs +57 -0
  743. package/dist/voice/testing/index.cjs.map +1 -0
  744. package/dist/voice/testing/index.d.cts +21 -0
  745. package/dist/voice/testing/index.d.ts +21 -0
  746. package/dist/voice/testing/index.d.ts.map +1 -0
  747. package/dist/voice/testing/index.js +35 -0
  748. package/dist/voice/testing/index.js.map +1 -0
  749. package/dist/voice/testing/run_result.cjs +817 -0
  750. package/dist/voice/testing/run_result.cjs.map +1 -0
  751. package/dist/voice/testing/run_result.d.cts +385 -0
  752. package/dist/voice/testing/run_result.d.ts +385 -0
  753. package/dist/voice/testing/run_result.d.ts.map +1 -0
  754. package/dist/voice/testing/run_result.js +790 -0
  755. package/dist/voice/testing/run_result.js.map +1 -0
  756. package/dist/voice/testing/types.cjs +46 -0
  757. package/dist/voice/testing/types.cjs.map +1 -0
  758. package/dist/voice/testing/types.d.cts +83 -0
  759. package/dist/voice/testing/types.d.ts +83 -0
  760. package/dist/voice/testing/types.d.ts.map +1 -0
  761. package/dist/voice/testing/types.js +19 -0
  762. package/dist/voice/testing/types.js.map +1 -0
  763. package/dist/voice/transcription/synchronizer.cjs +139 -15
  764. package/dist/voice/transcription/synchronizer.cjs.map +1 -1
  765. package/dist/voice/transcription/synchronizer.d.cts +35 -4
  766. package/dist/voice/transcription/synchronizer.d.ts +35 -4
  767. package/dist/voice/transcription/synchronizer.d.ts.map +1 -1
  768. package/dist/voice/transcription/synchronizer.js +143 -16
  769. package/dist/voice/transcription/synchronizer.js.map +1 -1
  770. package/dist/voice/transcription/synchronizer.test.cjs +151 -0
  771. package/dist/voice/transcription/synchronizer.test.cjs.map +1 -0
  772. package/dist/voice/transcription/synchronizer.test.js +150 -0
  773. package/dist/voice/transcription/synchronizer.test.js.map +1 -0
  774. package/dist/voice/turn_config/endpointing.cjs +33 -0
  775. package/dist/voice/turn_config/endpointing.cjs.map +1 -0
  776. package/dist/voice/turn_config/endpointing.d.cts +30 -0
  777. package/dist/voice/turn_config/endpointing.d.ts +30 -0
  778. package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
  779. package/dist/voice/turn_config/endpointing.js +9 -0
  780. package/dist/voice/turn_config/endpointing.js.map +1 -0
  781. package/dist/voice/turn_config/interruption.cjs +37 -0
  782. package/dist/voice/turn_config/interruption.cjs.map +1 -0
  783. package/dist/voice/turn_config/interruption.d.cts +53 -0
  784. package/dist/voice/turn_config/interruption.d.ts +53 -0
  785. package/dist/voice/turn_config/interruption.d.ts.map +1 -0
  786. package/dist/voice/turn_config/interruption.js +13 -0
  787. package/dist/voice/turn_config/interruption.js.map +1 -0
  788. package/dist/voice/turn_config/turn_handling.cjs +35 -0
  789. package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
  790. package/dist/voice/turn_config/turn_handling.d.cts +36 -0
  791. package/dist/voice/turn_config/turn_handling.d.ts +36 -0
  792. package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
  793. package/dist/voice/turn_config/turn_handling.js +11 -0
  794. package/dist/voice/turn_config/turn_handling.js.map +1 -0
  795. package/dist/voice/turn_config/utils.cjs +157 -0
  796. package/dist/voice/turn_config/utils.cjs.map +1 -0
  797. package/dist/voice/turn_config/utils.d.cts +37 -0
  798. package/dist/voice/turn_config/utils.d.ts +37 -0
  799. package/dist/voice/turn_config/utils.d.ts.map +1 -0
  800. package/dist/voice/turn_config/utils.js +131 -0
  801. package/dist/voice/turn_config/utils.js.map +1 -0
  802. package/dist/voice/turn_config/utils.test.cjs +128 -0
  803. package/dist/voice/turn_config/utils.test.cjs.map +1 -0
  804. package/dist/voice/turn_config/utils.test.js +127 -0
  805. package/dist/voice/turn_config/utils.test.js.map +1 -0
  806. package/dist/voice/utils.cjs +47 -0
  807. package/dist/voice/utils.cjs.map +1 -0
  808. package/dist/voice/utils.d.cts +4 -0
  809. package/dist/voice/utils.d.ts +4 -0
  810. package/dist/voice/utils.d.ts.map +1 -0
  811. package/dist/voice/utils.js +23 -0
  812. package/dist/voice/utils.js.map +1 -0
  813. package/dist/worker.cjs +44 -52
  814. package/dist/worker.cjs.map +1 -1
  815. package/dist/worker.d.cts +18 -8
  816. package/dist/worker.d.ts +18 -8
  817. package/dist/worker.d.ts.map +1 -1
  818. package/dist/worker.js +43 -43
  819. package/dist/worker.js.map +1 -1
  820. package/package.json +35 -13
  821. package/resources/NOTICE +2 -0
  822. package/resources/keyboard-typing.ogg +0 -0
  823. package/resources/keyboard-typing2.ogg +0 -0
  824. package/resources/office-ambience.ogg +0 -0
  825. package/src/_exceptions.ts +5 -0
  826. package/src/audio.ts +132 -1
  827. package/src/beta/index.ts +9 -0
  828. package/src/beta/workflows/index.ts +9 -0
  829. package/src/beta/workflows/task_group.ts +203 -0
  830. package/src/cli.ts +57 -66
  831. package/src/connection_pool.test.ts +346 -0
  832. package/src/connection_pool.ts +307 -0
  833. package/src/constants.ts +14 -0
  834. package/src/cpu.test.ts +239 -0
  835. package/src/cpu.ts +173 -0
  836. package/src/http_server.ts +18 -6
  837. package/src/index.ts +15 -13
  838. package/src/inference/api_protos.ts +85 -2
  839. package/src/inference/index.ts +32 -4
  840. package/src/inference/interruption/defaults.ts +51 -0
  841. package/src/inference/interruption/errors.ts +25 -0
  842. package/src/inference/interruption/http_transport.ts +207 -0
  843. package/src/inference/interruption/interruption_cache_entry.ts +50 -0
  844. package/src/inference/interruption/interruption_detector.ts +204 -0
  845. package/src/inference/interruption/interruption_stream.ts +467 -0
  846. package/src/inference/interruption/types.ts +84 -0
  847. package/src/inference/interruption/utils.test.ts +132 -0
  848. package/src/inference/interruption/utils.ts +137 -0
  849. package/src/inference/interruption/ws_transport.ts +416 -0
  850. package/src/inference/llm.ts +214 -163
  851. package/src/inference/stt.test.ts +253 -0
  852. package/src/inference/stt.ts +449 -208
  853. package/src/inference/tts.test.ts +354 -0
  854. package/src/inference/tts.ts +417 -115
  855. package/src/inference/utils.ts +30 -2
  856. package/src/ipc/inference_proc_executor.ts +11 -3
  857. package/src/ipc/inference_proc_lazy_main.ts +13 -1
  858. package/src/ipc/job_proc_executor.ts +11 -1
  859. package/src/ipc/job_proc_lazy_main.ts +86 -20
  860. package/src/ipc/supervised_proc.test.ts +153 -0
  861. package/src/ipc/supervised_proc.ts +39 -10
  862. package/src/job.ts +120 -1
  863. package/src/language.test.ts +62 -0
  864. package/src/language.ts +380 -0
  865. package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
  866. package/src/llm/chat_context.test.ts +787 -0
  867. package/src/llm/chat_context.ts +493 -2
  868. package/src/llm/fallback_adapter.test.ts +238 -0
  869. package/src/llm/fallback_adapter.ts +394 -0
  870. package/src/llm/index.ts +13 -0
  871. package/src/llm/llm.ts +77 -12
  872. package/src/llm/provider_format/google.test.ts +72 -1
  873. package/src/llm/provider_format/google.ts +10 -6
  874. package/src/llm/provider_format/index.ts +7 -2
  875. package/src/llm/provider_format/openai.test.ts +480 -2
  876. package/src/llm/provider_format/openai.ts +152 -21
  877. package/src/llm/provider_format/utils.ts +11 -5
  878. package/src/llm/realtime.ts +23 -2
  879. package/src/llm/remote_chat_context.ts +2 -2
  880. package/src/llm/tool_context.test.ts +210 -1
  881. package/src/llm/tool_context.ts +115 -17
  882. package/src/llm/utils.test.ts +103 -2
  883. package/src/llm/utils.ts +152 -16
  884. package/src/llm/zod-utils.test.ts +577 -0
  885. package/src/llm/zod-utils.ts +153 -0
  886. package/src/log.ts +71 -19
  887. package/src/metrics/base.ts +78 -19
  888. package/src/metrics/index.ts +12 -0
  889. package/src/metrics/model_usage.test.ts +545 -0
  890. package/src/metrics/model_usage.ts +262 -0
  891. package/src/metrics/usage_collector.ts +14 -3
  892. package/src/metrics/utils.ts +27 -7
  893. package/src/stream/deferred_stream.test.ts +3 -3
  894. package/src/stream/deferred_stream.ts +43 -11
  895. package/src/stream/index.ts +1 -0
  896. package/src/stream/multi_input_stream.test.ts +545 -0
  897. package/src/stream/multi_input_stream.ts +172 -0
  898. package/src/stream/stream_channel.test.ts +37 -0
  899. package/src/stream/stream_channel.ts +43 -3
  900. package/src/stt/stream_adapter.ts +30 -9
  901. package/src/stt/stt.ts +140 -23
  902. package/src/telemetry/index.ts +28 -0
  903. package/src/telemetry/logging.ts +55 -0
  904. package/src/telemetry/otel_http_exporter.ts +218 -0
  905. package/src/telemetry/pino_otel_transport.ts +265 -0
  906. package/src/telemetry/trace_types.ts +109 -0
  907. package/src/telemetry/traces.ts +673 -0
  908. package/src/telemetry/utils.ts +61 -0
  909. package/src/tokenize/basic/sentence.ts +3 -3
  910. package/src/tokenize/tokenizer.test.ts +4 -0
  911. package/src/transcription.ts +6 -0
  912. package/src/tts/fallback_adapter.ts +586 -0
  913. package/src/tts/index.ts +1 -0
  914. package/src/tts/stream_adapter.ts +38 -8
  915. package/src/tts/tts.ts +245 -62
  916. package/src/typed_promise.ts +67 -0
  917. package/src/types.ts +62 -33
  918. package/src/utils.test.ts +90 -10
  919. package/src/utils.ts +178 -33
  920. package/src/vad.ts +42 -18
  921. package/src/version.ts +1 -1
  922. package/src/voice/agent.test.ts +347 -2
  923. package/src/voice/agent.ts +346 -44
  924. package/src/voice/agent_activity.test.ts +194 -0
  925. package/src/voice/agent_activity.ts +1457 -388
  926. package/src/voice/agent_session.ts +817 -112
  927. package/src/voice/audio_recognition.ts +845 -70
  928. package/src/voice/audio_recognition_span.test.ts +341 -0
  929. package/src/voice/avatar/datastream_io.ts +9 -1
  930. package/src/voice/background_audio.ts +494 -0
  931. package/src/voice/events.ts +27 -7
  932. package/src/voice/generation.ts +310 -56
  933. package/src/voice/generation_tools.test.ts +268 -0
  934. package/src/voice/index.ts +17 -3
  935. package/src/voice/interruption_detection.test.ts +151 -0
  936. package/src/voice/io.ts +115 -12
  937. package/src/voice/recorder_io/index.ts +4 -0
  938. package/src/voice/recorder_io/recorder_io.ts +783 -0
  939. package/src/voice/remote_session.ts +1083 -0
  940. package/src/voice/report.test.ts +136 -0
  941. package/src/voice/report.ts +140 -0
  942. package/src/voice/room_io/_input.ts +45 -10
  943. package/src/voice/room_io/_output.ts +26 -14
  944. package/src/voice/room_io/room_io.ts +67 -22
  945. package/src/voice/speech_handle.ts +38 -6
  946. package/src/voice/testing/fake_llm.ts +138 -0
  947. package/src/voice/testing/index.ts +52 -0
  948. package/src/voice/testing/run_result.ts +995 -0
  949. package/src/voice/testing/types.ts +118 -0
  950. package/src/voice/transcription/synchronizer.test.ts +206 -0
  951. package/src/voice/transcription/synchronizer.ts +204 -19
  952. package/src/voice/turn_config/endpointing.ts +33 -0
  953. package/src/voice/turn_config/interruption.ts +56 -0
  954. package/src/voice/turn_config/turn_handling.ts +45 -0
  955. package/src/voice/turn_config/utils.test.ts +148 -0
  956. package/src/voice/turn_config/utils.ts +167 -0
  957. package/src/voice/utils.ts +29 -0
  958. package/src/worker.ts +92 -78
  959. package/src/llm/__snapshots__/utils.test.ts.snap +0 -65
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/voice/testing/run_result.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { z } from 'zod';\nimport type { AgentHandoffItem, ChatItem, ChatRole } from '../../llm/chat_context.js';\nimport { ChatContext } from '../../llm/chat_context.js';\nimport type { LLM } from '../../llm/llm.js';\nimport { tool } from '../../llm/tool_context.js';\nimport type { Task } from '../../utils.js';\nimport { Future } from '../../utils.js';\nimport type { Agent } from '../agent.js';\nimport { type SpeechHandle, isSpeechHandle } from '../speech_handle.js';\nimport {\n type AgentHandoffAssertOptions,\n type AgentHandoffEvent,\n type ChatMessageEvent,\n type EventType,\n type FunctionCallAssertOptions,\n type FunctionCallEvent,\n type FunctionCallOutputAssertOptions,\n type FunctionCallOutputEvent,\n type MessageAssertOptions,\n type RunEvent,\n isAgentHandoffEvent,\n isChatMessageEvent,\n isFunctionCallEvent,\n isFunctionCallOutputEvent,\n} from './types.js';\n\n// Type for agent constructor (used in assertions)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AgentConstructor = new (...args: any[]) => Agent;\n// In JS we use a zod schema so runtime validation and TS generic inference stay aligned.\ntype OutputSchema<T> = z.ZodType<T>;\n\n// Environment variable for verbose output\nconst evalsVerbose = parseInt(process.env.LIVEKIT_EVALS_VERBOSE || '0', 10);\n\n/**\n * Result of a test run containing recorded events and assertion utilities.\n *\n * @example\n * ```typescript\n * const result = await session.run({ userInput: 'Hello' });\n * result.expect.nextEvent().isMessage({ role: 'assistant' });\n * result.expect.noMoreEvents();\n * ```\n */\nexport class RunResult<T = unknown> {\n private _events: RunEvent[] = [];\n private doneFut = new Future<void>();\n private userInput?: string;\n private outputType?: OutputSchema<T>;\n private finalOutputValue?: T;\n private hasFinalOutput = false;\n\n private handles: Set<SpeechHandle | Task<void>> = new Set();\n private lastSpeechHandle?: SpeechHandle;\n private runAssert?: RunAssert;\n // Store per-handle closures so _unwatchHandle can remove callbacks symmetrically.\n private doneCallbacks = new Map<SpeechHandle | Task<void>, () => void>();\n\n private readonly itemAddedCallback = (item: ChatItem) => this._itemAdded(item);\n\n constructor(options?: { userInput?: string; outputType?: OutputSchema<T> }) {\n this.userInput = options?.userInput;\n this.outputType = options?.outputType;\n }\n\n /**\n * List of all recorded events generated during the run.\n */\n get events(): RunEvent[] {\n return this._events;\n }\n\n /**\n * Provides an assertion helper for verifying the run events.\n */\n get expect(): RunAssert {\n if (evalsVerbose) {\n const eventsStr = formatEvents(this._events)\n .map((line) => ` ${line}`)\n .join('\\n');\n console.log(\n `\\n+ RunResult {\\n userInput: \"${this.userInput}\"\\n events: [\\n${eventsStr}\\n ]\\n }`,\n );\n }\n\n // Cache the RunAssert so cursor position persists across multiple .expect accesses\n if (!this.runAssert) {\n this.runAssert = new RunAssert(this);\n }\n return this.runAssert;\n }\n\n /**\n * Returns the final output of the run after completion.\n */\n get finalOutput(): T {\n if (!this.doneFut.done) {\n throw new Error('cannot retrieve finalOutput, RunResult is not done');\n }\n\n if (!this.hasFinalOutput) {\n throw new Error('no final output');\n }\n\n return this.finalOutputValue as T;\n }\n\n /**\n * Indicates whether the run has finished processing all events.\n */\n done(): boolean {\n return this.doneFut.done;\n }\n\n /**\n * Wait for the RunResult to complete. Returns `this` for method chaining.\n *\n * @example\n * ```ts\n * const result = session.run({ userInput: 'Hi!' });\n * await result.wait(); // waits for completion\n * result.expect.nextEvent().isMessage({ role: 'assistant' });\n * ```\n */\n async wait(): Promise<this> {\n await this.doneFut.await;\n return this;\n }\n\n /**\n * @internal\n * Records an agent handoff event.\n */\n _agentHandoff(params: { item: AgentHandoffItem; oldAgent?: Agent; newAgent: Agent }): void {\n const event: AgentHandoffEvent = {\n type: 'agent_handoff',\n item: params.item,\n oldAgent: params.oldAgent,\n newAgent: params.newAgent,\n };\n const index = this._findInsertionIndex(event.item.createdAt);\n this._events.splice(index, 0, event);\n }\n\n /**\n * @internal\n * Called when a chat item is added during the run.\n */\n _itemAdded(item: ChatItem): void {\n if (this.doneFut.done) {\n return;\n }\n\n let event: RunEvent | undefined;\n\n if (item.type === 'message') {\n event = { type: 'message', item };\n } else if (item.type === 'function_call') {\n event = { type: 'function_call', item };\n } else if (item.type === 'function_call_output') {\n event = { type: 'function_call_output', item };\n }\n\n if (event) {\n const index = this._findInsertionIndex(item.createdAt);\n this._events.splice(index, 0, event);\n }\n }\n\n /**\n * @internal\n * Watch a speech handle or task for completion.\n */\n _watchHandle(handle: SpeechHandle | Task<void>): void {\n if (this.handles.has(handle)) return;\n\n this.handles.add(handle);\n\n if (isSpeechHandle(handle)) {\n handle._addItemAddedCallback(this.itemAddedCallback);\n }\n\n const doneCallback = () => this._markDoneIfNeeded(handle);\n\n this.doneCallbacks.set(handle, doneCallback);\n handle.addDoneCallback(doneCallback);\n }\n\n /**\n * @internal\n * Unwatch a handle.\n */\n _unwatchHandle(handle: SpeechHandle | Task<void>): void {\n this.handles.delete(handle);\n const doneCallback = this.doneCallbacks.get(handle);\n\n if (doneCallback) {\n handle.removeDoneCallback(doneCallback);\n this.doneCallbacks.delete(handle);\n }\n\n if (isSpeechHandle(handle)) {\n handle._removeItemAddedCallback(this.itemAddedCallback);\n }\n }\n\n /** @internal */\n _watchedHandleCount(): number {\n return this.handles.size;\n }\n\n /** @internal – Reject the run with an error (e.g. when deferred generateReply fails). */\n _reject(error: Error): void {\n if (!this.doneFut.done) {\n this.doneFut.reject(error);\n }\n }\n\n /** @internal */\n _markDoneIfNeeded(handle?: SpeechHandle | Task<void> | null): void {\n if (isSpeechHandle(handle)) {\n this.lastSpeechHandle = handle;\n }\n\n const allDone = [...this.handles].every((h) => (isSpeechHandle(h) ? h.done() : h.done));\n if (allDone) {\n this._markDone();\n }\n }\n\n private _markDone(): void {\n if (this.doneFut.done) {\n return;\n }\n\n if (!this.lastSpeechHandle) {\n this.doneFut.resolve();\n return;\n }\n\n const finalOutput = this.lastSpeechHandle._maybeRunFinalOutput;\n if (finalOutput instanceof Error) {\n this.doneFut.reject(finalOutput);\n return;\n }\n\n if (this.outputType) {\n const result = this.outputType.safeParse(finalOutput);\n if (!result.success) {\n this.doneFut.reject(\n new Error(`Expected output matching provided zod schema: ${result.error.message}`),\n );\n return;\n }\n this.finalOutputValue = result.data;\n this.hasFinalOutput = true;\n this.doneFut.resolve();\n return;\n }\n\n if (finalOutput !== undefined) {\n this.finalOutputValue = finalOutput as T;\n this.hasFinalOutput = true;\n }\n this.doneFut.resolve();\n }\n\n /**\n * Find the correct insertion index to maintain chronological order.\n */\n private _findInsertionIndex(createdAt: number): number {\n for (let i = this._events.length - 1; i >= 0; i--) {\n if (this._events[i]!.item.createdAt <= createdAt) {\n return i + 1;\n }\n }\n return 0;\n }\n}\n\n/**\n * Assertion helper for verifying run events in sequence.\n */\nexport class RunAssert {\n private _events: RunEvent[];\n private _currentIndex = 0;\n\n constructor(runResult: RunResult) {\n this._events = runResult.events;\n }\n\n /**\n * Access a specific event by index for assertions.\n * Supports negative indices (e.g., -1 for last event).\n *\n * @example\n * ```typescript\n * result.expect.at(0).isMessage({ role: 'user' });\n * result.expect.at(-1).isMessage({ role: 'assistant' });\n * ```\n */\n at(index: number): EventAssert {\n let normalizedIndex = index;\n if (index < 0) {\n normalizedIndex = this._events.length + index;\n }\n\n if (normalizedIndex < 0 || normalizedIndex >= this._events.length) {\n this._raiseWithDebugInfo(\n `at(${index}) out of range (total events: ${this._events.length})`,\n normalizedIndex,\n );\n }\n\n return new EventAssert(this._events[normalizedIndex]!, this, normalizedIndex);\n }\n\n /**\n * Advance to the next event, optionally filtering by type.\n *\n * @example\n * ```typescript\n * result.expect.nextEvent().isMessage({ role: 'assistant' });\n * result.expect.nextEvent({ type: 'function_call' }).isFunctionCall({ name: 'foo' });\n * ```\n */\n nextEvent(options?: { type?: EventType }): EventAssert {\n while (true) {\n const evAssert = this._currentEvent();\n this._currentIndex++;\n\n if (!options?.type || evAssert.event().type === options.type) {\n return evAssert;\n }\n }\n }\n\n /**\n * Skip a specified number of upcoming events without assertions.\n *\n * @example\n * ```typescript\n * result.expect.skipNext(2);\n * ```\n */\n skipNext(count: number = 1): this {\n for (let i = 0; i < count; i++) {\n if (this._currentIndex >= this._events.length) {\n this._raiseWithDebugInfo(`Tried to skip ${count} event(s), but only ${i} were available.`);\n }\n this._currentIndex++;\n }\n return this;\n }\n\n /**\n * Conditionally skip the next event if it matches the specified criteria.\n * Returns the event assertion if matched and skipped, or undefined if not matched.\n *\n * @example\n * ```typescript\n * // Skip optional assistant message before function call\n * result.expect.skipNextEventIf({ type: 'message', role: 'assistant' });\n * result.expect.nextEvent().isFunctionCall({ name: 'foo' });\n * ```\n */\n skipNextEventIf(\n options:\n | { type: 'message'; role?: ChatRole }\n | { type: 'function_call'; name?: string; args?: Record<string, unknown> }\n | { type: 'function_call_output'; output?: string; isError?: boolean }\n | { type: 'agent_handoff'; newAgentType?: AgentConstructor },\n ):\n | MessageAssert\n | FunctionCallAssert\n | FunctionCallOutputAssert\n | AgentHandoffAssert\n | undefined {\n if (this._currentIndex >= this._events.length) {\n return undefined;\n }\n\n try {\n const evAssert = this._currentEvent();\n\n if (options.type === 'message') {\n const { role } = options;\n const result = evAssert.isMessage({ role });\n this._currentIndex++;\n return result;\n } else if (options.type === 'function_call') {\n const { name, args } = options;\n const result = evAssert.isFunctionCall({\n name,\n args,\n });\n this._currentIndex++;\n return result;\n } else if (options.type === 'function_call_output') {\n const { output, isError } = options;\n const result = evAssert.isFunctionCallOutput({\n output,\n isError,\n });\n this._currentIndex++;\n return result;\n } else if (options.type === 'agent_handoff') {\n const { newAgentType } = options;\n const result = evAssert.isAgentHandoff({ newAgentType });\n this._currentIndex++;\n return result;\n }\n } catch {\n // Assertion failed, event doesn't match criteria\n return undefined;\n }\n\n return undefined;\n }\n\n /**\n * Get an EventRangeAssert for a range of events.\n * Similar to Python's slice access: expect[0:3] or expect[:]\n *\n * @param start - Start index (inclusive), defaults to 0\n * @param end - End index (exclusive), defaults to events.length\n *\n * @example\n * ```typescript\n * // Search all events\n * result.expect.range().containsFunctionCall({ name: 'foo' });\n * // Search first 3 events\n * result.expect.range(0, 3).containsMessage({ role: 'assistant' });\n * ```\n */\n range(start?: number, end?: number): EventRangeAssert {\n const startIdx = start ?? 0;\n const endIdx = end ?? this._events.length;\n const events = this._events.slice(startIdx, endIdx);\n return new EventRangeAssert(events, this, { start: startIdx, end: endIdx });\n }\n\n /**\n * Assert that a function call matching criteria exists anywhere in the events.\n *\n * @example\n * ```typescript\n * result.expect.containsFunctionCall({ name: 'order_item' });\n * ```\n */\n containsFunctionCall(options?: FunctionCallAssertOptions): FunctionCallAssert {\n return this.range().containsFunctionCall(options);\n }\n\n /**\n * Assert that a message matching criteria exists anywhere in the events.\n *\n * @example\n * ```typescript\n * result.expect.containsMessage({ role: 'assistant' });\n * ```\n */\n containsMessage(options?: MessageAssertOptions): MessageAssert {\n return this.range().containsMessage(options);\n }\n\n /**\n * Assert that a function call output matching criteria exists anywhere in the events.\n *\n * @example\n * ```typescript\n * result.expect.containsFunctionCallOutput({ isError: false });\n * ```\n */\n containsFunctionCallOutput(options?: FunctionCallOutputAssertOptions): FunctionCallOutputAssert {\n return this.range().containsFunctionCallOutput(options);\n }\n\n /**\n * Assert that an agent handoff matching criteria exists anywhere in the events.\n *\n * @example\n * ```typescript\n * result.expect.containsAgentHandoff({ newAgentType: MyAgent });\n * ```\n */\n containsAgentHandoff(options?: AgentHandoffAssertOptions): AgentHandoffAssert {\n return this.range().containsAgentHandoff(options);\n }\n\n /**\n * Assert that there are no further events.\n *\n * @example\n * ```typescript\n * result.expect.noMoreEvents();\n * ```\n */\n noMoreEvents(): void {\n if (this._currentIndex < this._events.length) {\n const event = this._events[this._currentIndex]!;\n this._raiseWithDebugInfo(`Expected no more events, but found: ${event.type}`);\n }\n }\n\n private _currentEvent(): EventAssert {\n if (this._currentIndex >= this._events.length) {\n this._raiseWithDebugInfo('Expected another event, but none left.');\n }\n return this.at(this._currentIndex);\n }\n\n /** @internal */\n _raiseWithDebugInfo(message: string, index?: number): never {\n const markerIndex = index ?? this._currentIndex;\n const eventsStr = formatEvents(this._events, markerIndex).join('\\n');\n throw new AssertionError(`${message}\\nContext around failure:\\n${eventsStr}`);\n }\n}\n\n/**\n * Assertion wrapper for a single event.\n */\nexport class EventAssert {\n protected _event: RunEvent;\n protected _parent: RunAssert;\n protected _index: number;\n\n constructor(event: RunEvent, parent: RunAssert, index: number) {\n this._event = event;\n this._parent = parent;\n this._index = index;\n }\n\n /**\n * Get the underlying event.\n */\n event(): RunEvent {\n return this._event;\n }\n\n protected _raise(message: string): never {\n this._parent._raiseWithDebugInfo(message, this._index);\n }\n\n /**\n * Verify this event is a message with optional role matching.\n *\n * @example\n * ```typescript\n * result.expect.nextEvent().isMessage({ role: 'assistant' });\n * ```\n */\n isMessage(options?: MessageAssertOptions): MessageAssert {\n if (!isChatMessageEvent(this._event)) {\n this._raise(`Expected ChatMessageEvent, got ${this._event.type}`);\n }\n\n if (options?.role && this._event.item.role !== options.role) {\n this._raise(`Expected role '${options.role}', got '${this._event.item.role}'`);\n }\n\n return new MessageAssert(this._event, this._parent, this._index);\n }\n\n /**\n * Verify this event is a function call with optional name/args matching.\n *\n * @example\n * ```typescript\n * result.expect.nextEvent().isFunctionCall({ name: 'order_item', args: { id: 'big_mac' } });\n * ```\n */\n isFunctionCall(options?: FunctionCallAssertOptions): FunctionCallAssert {\n if (!isFunctionCallEvent(this._event)) {\n this._raise(`Expected FunctionCallEvent, got ${this._event.type}`);\n }\n\n if (options?.name && this._event.item.name !== options.name) {\n this._raise(`Expected call name '${options.name}', got '${this._event.item.name}'`);\n }\n\n if (options?.args) {\n let actual: Record<string, unknown>;\n try {\n actual = JSON.parse(this._event.item.args);\n } catch {\n this._raise(`Failed to parse function call arguments: ${this._event.item.args}`);\n }\n\n for (const [key, value] of Object.entries(options.args)) {\n if (!(key in actual) || actual[key] !== value) {\n this._raise(\n `For key '${key}', expected ${JSON.stringify(value)}, got ${JSON.stringify(actual[key])}`,\n );\n }\n }\n }\n\n return new FunctionCallAssert(this._event, this._parent, this._index);\n }\n\n /**\n * Verify this event is a function call output with optional matching.\n *\n * @example\n * ```typescript\n * result.expect.nextEvent().isFunctionCallOutput({ isError: false });\n * ```\n */\n isFunctionCallOutput(options?: FunctionCallOutputAssertOptions): FunctionCallOutputAssert {\n if (!isFunctionCallOutputEvent(this._event)) {\n this._raise(`Expected FunctionCallOutputEvent, got ${this._event.type}`);\n }\n\n if (options?.output !== undefined && this._event.item.output !== options.output) {\n this._raise(`Expected output '${options.output}', got '${this._event.item.output}'`);\n }\n\n if (options?.isError !== undefined && this._event.item.isError !== options.isError) {\n this._raise(`Expected isError=${options.isError}, got ${this._event.item.isError}`);\n }\n\n return new FunctionCallOutputAssert(this._event, this._parent, this._index);\n }\n\n /**\n * Verify this event is an agent handoff with optional type matching.\n *\n * @example\n * ```typescript\n * result.expect.nextEvent().isAgentHandoff({ newAgentType: MyAgent });\n * ```\n */\n isAgentHandoff(options?: AgentHandoffAssertOptions): AgentHandoffAssert {\n if (!isAgentHandoffEvent(this._event)) {\n this._raise(`Expected AgentHandoffEvent, got ${this._event.type}`);\n }\n\n const event = this._event;\n\n if (options?.newAgentType) {\n const actualType = event.newAgent.constructor.name;\n if (!(event.newAgent instanceof options.newAgentType)) {\n this._raise(`Expected new_agent '${options.newAgentType.name}', got '${actualType}'`);\n }\n }\n\n return new AgentHandoffAssert(event, this._parent, this._index);\n }\n}\n\n/**\n * Assertion wrapper for a range of events.\n * Provides contains*() methods to search within the range.\n */\nexport class EventRangeAssert {\n private _events: RunEvent[];\n private _parent: RunAssert;\n private _range: { start: number; end: number };\n\n constructor(events: RunEvent[], parent: RunAssert, range: { start: number; end: number }) {\n this._events = events;\n this._parent = parent;\n this._range = range;\n }\n\n /**\n * Assert that a function call matching criteria exists in this event range.\n *\n * @example\n * ```typescript\n * result.expect.range(0, 3).containsFunctionCall({ name: 'foo' });\n * ```\n */\n containsFunctionCall(options?: FunctionCallAssertOptions): FunctionCallAssert {\n for (let idx = 0; idx < this._events.length; idx++) {\n const ev = this._events[idx]!;\n const candidate = new EventAssert(ev, this._parent, this._range.start + idx);\n try {\n return candidate.isFunctionCall(options);\n } catch {\n // Continue searching\n }\n }\n\n this._parent._raiseWithDebugInfo(\n `No FunctionCallEvent satisfying criteria found in range [${this._range.start}:${this._range.end}]`,\n );\n }\n\n /**\n * Assert that a message matching criteria exists in this event range.\n *\n * @example\n * ```typescript\n * result.expect.range(0, 2).containsMessage({ role: 'assistant' });\n * ```\n */\n containsMessage(options?: MessageAssertOptions): MessageAssert {\n for (let idx = 0; idx < this._events.length; idx++) {\n const ev = this._events[idx]!;\n const candidate = new EventAssert(ev, this._parent, this._range.start + idx);\n try {\n return candidate.isMessage(options);\n } catch {\n // Continue searching\n }\n }\n\n this._parent._raiseWithDebugInfo(\n `No ChatMessageEvent matching criteria found in range [${this._range.start}:${this._range.end}]`,\n );\n }\n\n /**\n * Assert that a function call output matching criteria exists in this event range.\n *\n * @example\n * ```typescript\n * result.expect.range(1, 4).containsFunctionCallOutput({ isError: true });\n * ```\n */\n containsFunctionCallOutput(options?: FunctionCallOutputAssertOptions): FunctionCallOutputAssert {\n for (let idx = 0; idx < this._events.length; idx++) {\n const ev = this._events[idx]!;\n const candidate = new EventAssert(ev, this._parent, this._range.start + idx);\n try {\n return candidate.isFunctionCallOutput(options);\n } catch {\n // Continue searching\n }\n }\n\n this._parent._raiseWithDebugInfo(\n `No FunctionCallOutputEvent matching criteria found in range [${this._range.start}:${this._range.end}]`,\n );\n }\n\n /**\n * Assert that an agent handoff matching criteria exists in this event range.\n *\n * @example\n * ```typescript\n * result.expect.range(0, 3).containsAgentHandoff({ newAgentType: MyAgent });\n * ```\n */\n containsAgentHandoff(options?: AgentHandoffAssertOptions): AgentHandoffAssert {\n for (let idx = 0; idx < this._events.length; idx++) {\n const ev = this._events[idx]!;\n const candidate = new EventAssert(ev, this._parent, this._range.start + idx);\n try {\n return candidate.isAgentHandoff(options);\n } catch {\n // Continue searching\n }\n }\n\n this._parent._raiseWithDebugInfo(\n `No AgentHandoffEvent matching criteria found in range [${this._range.start}:${this._range.end}]`,\n );\n }\n}\n\n/**\n * Assertion wrapper for message events.\n */\nexport class MessageAssert extends EventAssert {\n protected declare _event: ChatMessageEvent;\n\n constructor(event: ChatMessageEvent, parent: RunAssert, index: number) {\n super(event, parent, index);\n }\n\n override event(): ChatMessageEvent {\n return this._event;\n }\n\n /**\n * Evaluate whether the message fulfills the given intent using an LLM.\n *\n * @param llm - LLM instance for judgment\n * @param options - Options containing the intent description\n * @returns Self for chaining further assertions\n *\n * @example\n * ```typescript\n * await result.expect\n * .nextEvent()\n * .isMessage({ role: 'assistant' })\n * .judge(llm, { intent: 'should ask for the drink size' });\n * ```\n */\n async judge(llm: LLM, options: { intent: string }): Promise<MessageAssert> {\n const { intent } = options;\n\n // Extract text content from message\n const content = this._event.item.content;\n const msgContent =\n typeof content === 'string'\n ? content\n : Array.isArray(content)\n ? content.filter((c): c is string => typeof c === 'string').join(' ')\n : '';\n\n if (!msgContent) {\n this._raise('The chat message is empty.');\n }\n\n if (!intent) {\n this._raise('Intent is required to judge the message.');\n }\n\n // Create the check_intent tool\n const checkIntentTool = tool({\n description:\n 'Determines whether the message correctly fulfills the given intent. ' +\n 'Returns success=true if the message satisfies the intent, false otherwise. ' +\n 'Provide a concise reason justifying the result.',\n parameters: z.object({\n success: z.boolean().describe('Whether the message satisfies the intent'),\n reason: z.string().describe('A concise explanation justifying the result'),\n }),\n execute: async ({ success, reason }: { success: boolean; reason: string }) => {\n return { success, reason };\n },\n });\n\n // Create chat context for the judge\n const chatCtx = ChatContext.empty();\n chatCtx.addMessage({\n role: 'system',\n content:\n 'You are a test evaluator for conversational agents.\\n' +\n 'You will be shown a message and a target intent. Determine whether the message accomplishes the intent.\\n' +\n 'Only respond by calling the `check_intent(success: bool, reason: str)` function with your final judgment.\\n' +\n 'Be strict: if the message does not clearly fulfill the intent, return `success = false` and explain why.',\n });\n chatCtx.addMessage({\n role: 'user',\n content:\n 'Check if the following message fulfills the given intent.\\n\\n' +\n `Intent:\\n${intent}\\n\\n` +\n `Message:\\n${msgContent}`,\n });\n\n // Call the LLM with the check_intent tool\n let toolArgs: { success: boolean; reason: string } | undefined;\n\n const stream = llm.chat({\n chatCtx,\n toolCtx: { check_intent: checkIntentTool },\n toolChoice: { type: 'function', function: { name: 'check_intent' } },\n extraKwargs: { temperature: 0 },\n });\n\n for await (const chunk of stream) {\n if (!chunk.delta) continue;\n\n if (chunk.delta.toolCalls && chunk.delta.toolCalls.length > 0) {\n const toolCall = chunk.delta.toolCalls[0]!;\n if (toolCall.args) {\n try {\n toolArgs = JSON.parse(toolCall.args);\n } catch {\n // Args might be streamed incrementally, keep the last valid parse\n }\n }\n }\n }\n\n if (!toolArgs) {\n this._raise('LLM did not return any arguments for evaluation.');\n }\n\n const { success, reason } = toolArgs;\n\n if (!success) {\n this._raise(`Judgment failed: ${reason}`);\n } else if (evalsVerbose) {\n const printMsg =\n msgContent.length > 30 ? msgContent.slice(0, 30).replace(/\\n/g, '\\\\n') + '...' : msgContent;\n console.log(`- Judgment succeeded for \\`${printMsg}\\`: \\`${reason}\\``);\n }\n\n return this;\n }\n}\n\n/**\n * Assertion wrapper for function call events.\n */\nexport class FunctionCallAssert extends EventAssert {\n protected declare _event: FunctionCallEvent;\n\n constructor(event: FunctionCallEvent, parent: RunAssert, index: number) {\n super(event, parent, index);\n }\n\n override event(): FunctionCallEvent {\n return this._event;\n }\n}\n\n/**\n * Assertion wrapper for function call output events.\n */\nexport class FunctionCallOutputAssert extends EventAssert {\n protected declare _event: FunctionCallOutputEvent;\n\n constructor(event: FunctionCallOutputEvent, parent: RunAssert, index: number) {\n super(event, parent, index);\n }\n\n override event(): FunctionCallOutputEvent {\n return this._event;\n }\n}\n\n/**\n * Assertion wrapper for agent handoff events.\n */\nexport class AgentHandoffAssert extends EventAssert {\n protected declare _event: AgentHandoffEvent;\n\n constructor(event: AgentHandoffEvent, parent: RunAssert, index: number) {\n super(event, parent, index);\n }\n\n override event(): AgentHandoffEvent {\n return this._event;\n }\n}\n\n/**\n * Custom assertion error for test failures.\n */\nexport class AssertionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AssertionError';\n Error.captureStackTrace?.(this, AssertionError);\n }\n}\n\n// TODO: mockTools() utility for mocking tool implementations in tests\n// Will be implemented for test suites.\n// See Python run_result.py lines 1010-1031 for reference.\n\n/**\n * Format events for debug output, optionally marking a selected index.\n */\nfunction formatEvents(events: RunEvent[], selectedIndex?: number): string[] {\n const lines: string[] = [];\n\n for (let i = 0; i < events.length; i++) {\n const event = events[i]!;\n let prefix = '';\n if (selectedIndex !== undefined) {\n prefix = i === selectedIndex ? '>>>' : ' ';\n }\n\n let line: string;\n if (isChatMessageEvent(event)) {\n const { role, content, interrupted } = event.item;\n const textContent =\n typeof content === 'string'\n ? content\n : Array.isArray(content)\n ? content.filter((c): c is string => typeof c === 'string').join(' ')\n : '';\n const truncated = textContent.length > 50 ? textContent.slice(0, 50) + '...' : textContent;\n line = `${prefix}[${i}] { type: \"message\", role: \"${role}\", content: \"${truncated}\", interrupted: ${interrupted} }`;\n } else if (isFunctionCallEvent(event)) {\n const { name, args } = event.item;\n line = `${prefix}[${i}] { type: \"function_call\", name: \"${name}\", args: ${args} }`;\n } else if (isFunctionCallOutputEvent(event)) {\n const { output, isError } = event.item;\n const truncated = output.length > 50 ? output.slice(0, 50) + '...' : output;\n line = `${prefix}[${i}] { type: \"function_call_output\", output: \"${truncated}\", isError: ${isError} }`;\n } else if (isAgentHandoffEvent(event)) {\n line = `${prefix}[${i}] { type: \"agent_handoff\", oldAgent: \"${event.oldAgent?.constructor.name}\", newAgent: \"${event.newAgent.constructor.name}\" }`;\n } else {\n line = `${prefix}[${i}] ${event}`;\n }\n\n lines.push(line);\n }\n\n return lines;\n}\n"],"mappings":"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","names":["success","reason"]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var types_exports = {};
20
+ __export(types_exports, {
21
+ isAgentHandoffEvent: () => isAgentHandoffEvent,
22
+ isChatMessageEvent: () => isChatMessageEvent,
23
+ isFunctionCallEvent: () => isFunctionCallEvent,
24
+ isFunctionCallOutputEvent: () => isFunctionCallOutputEvent
25
+ });
26
+ module.exports = __toCommonJS(types_exports);
27
+ function isChatMessageEvent(event) {
28
+ return event.type === "message";
29
+ }
30
+ function isFunctionCallEvent(event) {
31
+ return event.type === "function_call";
32
+ }
33
+ function isFunctionCallOutputEvent(event) {
34
+ return event.type === "function_call_output";
35
+ }
36
+ function isAgentHandoffEvent(event) {
37
+ return event.type === "agent_handoff";
38
+ }
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ isAgentHandoffEvent,
42
+ isChatMessageEvent,
43
+ isFunctionCallEvent,
44
+ isFunctionCallOutputEvent
45
+ });
46
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/voice/testing/types.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n AgentHandoffItem,\n ChatMessage,\n ChatRole,\n FunctionCall,\n FunctionCallOutput,\n} from '../../llm/chat_context.js';\nimport type { Agent } from '../agent.js';\n\n/**\n * Event representing an assistant or user message in the conversation.\n */\nexport interface ChatMessageEvent {\n type: 'message';\n item: ChatMessage;\n}\n\n/**\n * Event representing a function/tool call initiated by the LLM.\n */\nexport interface FunctionCallEvent {\n type: 'function_call';\n item: FunctionCall;\n}\n\n/**\n * Event representing the output/result of a function call.\n */\nexport interface FunctionCallOutputEvent {\n type: 'function_call_output';\n item: FunctionCallOutput;\n}\n\n/**\n * Event representing an agent handoff (switching from one agent to another).\n */\nexport interface AgentHandoffEvent {\n type: 'agent_handoff';\n item: AgentHandoffItem;\n oldAgent?: Agent;\n newAgent: Agent;\n}\n\n/**\n * Union type of all possible run events that can occur during a test run.\n */\nexport type RunEvent =\n | ChatMessageEvent\n | FunctionCallEvent\n | FunctionCallOutputEvent\n | AgentHandoffEvent;\n\n/**\n * Type guard to check if an event is a ChatMessageEvent.\n */\nexport function isChatMessageEvent(event: RunEvent): event is ChatMessageEvent {\n return event.type === 'message';\n}\n\n/**\n * Type guard to check if an event is a FunctionCallEvent.\n */\nexport function isFunctionCallEvent(event: RunEvent): event is FunctionCallEvent {\n return event.type === 'function_call';\n}\n\n/**\n * Type guard to check if an event is a FunctionCallOutputEvent.\n */\nexport function isFunctionCallOutputEvent(event: RunEvent): event is FunctionCallOutputEvent {\n return event.type === 'function_call_output';\n}\n\n/**\n * Type guard to check if an event is an AgentHandoffEvent.\n */\nexport function isAgentHandoffEvent(event: RunEvent): event is AgentHandoffEvent {\n return event.type === 'agent_handoff';\n}\n\n/**\n * Options for message assertion.\n */\nexport interface MessageAssertOptions {\n role?: ChatRole;\n}\n\n/**\n * Options for function call assertion.\n */\nexport interface FunctionCallAssertOptions {\n name?: string;\n args?: Record<string, unknown>;\n}\n\n/**\n * Options for function call output assertion.\n */\nexport interface FunctionCallOutputAssertOptions {\n output?: string;\n isError?: boolean;\n}\n\n/**\n * Options for agent handoff assertion.\n */\nexport interface AgentHandoffAssertOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newAgentType?: new (...args: any[]) => Agent;\n}\n\n/**\n * Event type literals for type-safe event filtering.\n */\nexport type EventType = 'message' | 'function_call' | 'function_call_output' | 'agent_handoff';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0DO,SAAS,mBAAmB,OAA4C;AAC7E,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,oBAAoB,OAA6C;AAC/E,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,0BAA0B,OAAmD;AAC3F,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,oBAAoB,OAA6C;AAC/E,SAAO,MAAM,SAAS;AACxB;","names":[]}
@@ -0,0 +1,83 @@
1
+ import type { AgentHandoffItem, ChatMessage, ChatRole, FunctionCall, FunctionCallOutput } from '../../llm/chat_context.js';
2
+ import type { Agent } from '../agent.js';
3
+ /**
4
+ * Event representing an assistant or user message in the conversation.
5
+ */
6
+ export interface ChatMessageEvent {
7
+ type: 'message';
8
+ item: ChatMessage;
9
+ }
10
+ /**
11
+ * Event representing a function/tool call initiated by the LLM.
12
+ */
13
+ export interface FunctionCallEvent {
14
+ type: 'function_call';
15
+ item: FunctionCall;
16
+ }
17
+ /**
18
+ * Event representing the output/result of a function call.
19
+ */
20
+ export interface FunctionCallOutputEvent {
21
+ type: 'function_call_output';
22
+ item: FunctionCallOutput;
23
+ }
24
+ /**
25
+ * Event representing an agent handoff (switching from one agent to another).
26
+ */
27
+ export interface AgentHandoffEvent {
28
+ type: 'agent_handoff';
29
+ item: AgentHandoffItem;
30
+ oldAgent?: Agent;
31
+ newAgent: Agent;
32
+ }
33
+ /**
34
+ * Union type of all possible run events that can occur during a test run.
35
+ */
36
+ export type RunEvent = ChatMessageEvent | FunctionCallEvent | FunctionCallOutputEvent | AgentHandoffEvent;
37
+ /**
38
+ * Type guard to check if an event is a ChatMessageEvent.
39
+ */
40
+ export declare function isChatMessageEvent(event: RunEvent): event is ChatMessageEvent;
41
+ /**
42
+ * Type guard to check if an event is a FunctionCallEvent.
43
+ */
44
+ export declare function isFunctionCallEvent(event: RunEvent): event is FunctionCallEvent;
45
+ /**
46
+ * Type guard to check if an event is a FunctionCallOutputEvent.
47
+ */
48
+ export declare function isFunctionCallOutputEvent(event: RunEvent): event is FunctionCallOutputEvent;
49
+ /**
50
+ * Type guard to check if an event is an AgentHandoffEvent.
51
+ */
52
+ export declare function isAgentHandoffEvent(event: RunEvent): event is AgentHandoffEvent;
53
+ /**
54
+ * Options for message assertion.
55
+ */
56
+ export interface MessageAssertOptions {
57
+ role?: ChatRole;
58
+ }
59
+ /**
60
+ * Options for function call assertion.
61
+ */
62
+ export interface FunctionCallAssertOptions {
63
+ name?: string;
64
+ args?: Record<string, unknown>;
65
+ }
66
+ /**
67
+ * Options for function call output assertion.
68
+ */
69
+ export interface FunctionCallOutputAssertOptions {
70
+ output?: string;
71
+ isError?: boolean;
72
+ }
73
+ /**
74
+ * Options for agent handoff assertion.
75
+ */
76
+ export interface AgentHandoffAssertOptions {
77
+ newAgentType?: new (...args: any[]) => Agent;
78
+ }
79
+ /**
80
+ * Event type literals for type-safe event filtering.
81
+ */
82
+ export type EventType = 'message' | 'function_call' | 'function_call_output' | 'agent_handoff';
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,83 @@
1
+ import type { AgentHandoffItem, ChatMessage, ChatRole, FunctionCall, FunctionCallOutput } from '../../llm/chat_context.js';
2
+ import type { Agent } from '../agent.js';
3
+ /**
4
+ * Event representing an assistant or user message in the conversation.
5
+ */
6
+ export interface ChatMessageEvent {
7
+ type: 'message';
8
+ item: ChatMessage;
9
+ }
10
+ /**
11
+ * Event representing a function/tool call initiated by the LLM.
12
+ */
13
+ export interface FunctionCallEvent {
14
+ type: 'function_call';
15
+ item: FunctionCall;
16
+ }
17
+ /**
18
+ * Event representing the output/result of a function call.
19
+ */
20
+ export interface FunctionCallOutputEvent {
21
+ type: 'function_call_output';
22
+ item: FunctionCallOutput;
23
+ }
24
+ /**
25
+ * Event representing an agent handoff (switching from one agent to another).
26
+ */
27
+ export interface AgentHandoffEvent {
28
+ type: 'agent_handoff';
29
+ item: AgentHandoffItem;
30
+ oldAgent?: Agent;
31
+ newAgent: Agent;
32
+ }
33
+ /**
34
+ * Union type of all possible run events that can occur during a test run.
35
+ */
36
+ export type RunEvent = ChatMessageEvent | FunctionCallEvent | FunctionCallOutputEvent | AgentHandoffEvent;
37
+ /**
38
+ * Type guard to check if an event is a ChatMessageEvent.
39
+ */
40
+ export declare function isChatMessageEvent(event: RunEvent): event is ChatMessageEvent;
41
+ /**
42
+ * Type guard to check if an event is a FunctionCallEvent.
43
+ */
44
+ export declare function isFunctionCallEvent(event: RunEvent): event is FunctionCallEvent;
45
+ /**
46
+ * Type guard to check if an event is a FunctionCallOutputEvent.
47
+ */
48
+ export declare function isFunctionCallOutputEvent(event: RunEvent): event is FunctionCallOutputEvent;
49
+ /**
50
+ * Type guard to check if an event is an AgentHandoffEvent.
51
+ */
52
+ export declare function isAgentHandoffEvent(event: RunEvent): event is AgentHandoffEvent;
53
+ /**
54
+ * Options for message assertion.
55
+ */
56
+ export interface MessageAssertOptions {
57
+ role?: ChatRole;
58
+ }
59
+ /**
60
+ * Options for function call assertion.
61
+ */
62
+ export interface FunctionCallAssertOptions {
63
+ name?: string;
64
+ args?: Record<string, unknown>;
65
+ }
66
+ /**
67
+ * Options for function call output assertion.
68
+ */
69
+ export interface FunctionCallOutputAssertOptions {
70
+ output?: string;
71
+ isError?: boolean;
72
+ }
73
+ /**
74
+ * Options for agent handoff assertion.
75
+ */
76
+ export interface AgentHandoffAssertOptions {
77
+ newAgentType?: new (...args: any[]) => Agent;
78
+ }
79
+ /**
80
+ * Event type literals for type-safe event filtering.
81
+ */
82
+ export type EventType = 'message' | 'function_call' | 'function_call_output' | 'agent_handoff';
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/voice/testing/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,gBAAgB,CAE7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,iBAAiB,CAE/E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,uBAAuB,CAE3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,iBAAiB,CAE/E;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IAExC,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,eAAe,GAAG,sBAAsB,GAAG,eAAe,CAAC"}
@@ -0,0 +1,19 @@
1
+ function isChatMessageEvent(event) {
2
+ return event.type === "message";
3
+ }
4
+ function isFunctionCallEvent(event) {
5
+ return event.type === "function_call";
6
+ }
7
+ function isFunctionCallOutputEvent(event) {
8
+ return event.type === "function_call_output";
9
+ }
10
+ function isAgentHandoffEvent(event) {
11
+ return event.type === "agent_handoff";
12
+ }
13
+ export {
14
+ isAgentHandoffEvent,
15
+ isChatMessageEvent,
16
+ isFunctionCallEvent,
17
+ isFunctionCallOutputEvent
18
+ };
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/voice/testing/types.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n AgentHandoffItem,\n ChatMessage,\n ChatRole,\n FunctionCall,\n FunctionCallOutput,\n} from '../../llm/chat_context.js';\nimport type { Agent } from '../agent.js';\n\n/**\n * Event representing an assistant or user message in the conversation.\n */\nexport interface ChatMessageEvent {\n type: 'message';\n item: ChatMessage;\n}\n\n/**\n * Event representing a function/tool call initiated by the LLM.\n */\nexport interface FunctionCallEvent {\n type: 'function_call';\n item: FunctionCall;\n}\n\n/**\n * Event representing the output/result of a function call.\n */\nexport interface FunctionCallOutputEvent {\n type: 'function_call_output';\n item: FunctionCallOutput;\n}\n\n/**\n * Event representing an agent handoff (switching from one agent to another).\n */\nexport interface AgentHandoffEvent {\n type: 'agent_handoff';\n item: AgentHandoffItem;\n oldAgent?: Agent;\n newAgent: Agent;\n}\n\n/**\n * Union type of all possible run events that can occur during a test run.\n */\nexport type RunEvent =\n | ChatMessageEvent\n | FunctionCallEvent\n | FunctionCallOutputEvent\n | AgentHandoffEvent;\n\n/**\n * Type guard to check if an event is a ChatMessageEvent.\n */\nexport function isChatMessageEvent(event: RunEvent): event is ChatMessageEvent {\n return event.type === 'message';\n}\n\n/**\n * Type guard to check if an event is a FunctionCallEvent.\n */\nexport function isFunctionCallEvent(event: RunEvent): event is FunctionCallEvent {\n return event.type === 'function_call';\n}\n\n/**\n * Type guard to check if an event is a FunctionCallOutputEvent.\n */\nexport function isFunctionCallOutputEvent(event: RunEvent): event is FunctionCallOutputEvent {\n return event.type === 'function_call_output';\n}\n\n/**\n * Type guard to check if an event is an AgentHandoffEvent.\n */\nexport function isAgentHandoffEvent(event: RunEvent): event is AgentHandoffEvent {\n return event.type === 'agent_handoff';\n}\n\n/**\n * Options for message assertion.\n */\nexport interface MessageAssertOptions {\n role?: ChatRole;\n}\n\n/**\n * Options for function call assertion.\n */\nexport interface FunctionCallAssertOptions {\n name?: string;\n args?: Record<string, unknown>;\n}\n\n/**\n * Options for function call output assertion.\n */\nexport interface FunctionCallOutputAssertOptions {\n output?: string;\n isError?: boolean;\n}\n\n/**\n * Options for agent handoff assertion.\n */\nexport interface AgentHandoffAssertOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newAgentType?: new (...args: any[]) => Agent;\n}\n\n/**\n * Event type literals for type-safe event filtering.\n */\nexport type EventType = 'message' | 'function_call' | 'function_call_output' | 'agent_handoff';\n"],"mappings":"AA0DO,SAAS,mBAAmB,OAA4C;AAC7E,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,oBAAoB,OAA6C;AAC/E,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,0BAA0B,OAAmD;AAC3F,SAAO,MAAM,SAAS;AACxB;AAKO,SAAS,oBAAoB,OAA6C;AAC/E,SAAO,MAAM,SAAS;AACxB;","names":[]}
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var synchronizer_exports = {};
20
20
  __export(synchronizer_exports, {
21
+ SpeakingRateData: () => SpeakingRateData,
21
22
  TranscriptionSynchronizer: () => TranscriptionSynchronizer,
22
23
  defaultTextSyncOptions: () => defaultTextSyncOptions
23
24
  });
@@ -28,6 +29,78 @@ var import_tokenize = require("../../tokenize/index.cjs");
28
29
  var import_utils = require("../../utils.cjs");
29
30
  var import_io = require("../io.cjs");
30
31
  const STANDARD_SPEECH_RATE = 3.83;
32
+ class SpeakingRateData {
33
+ /** Timestamps of the speaking rate. */
34
+ timestamps = [];
35
+ /** Speed at the timestamp. */
36
+ speakingRate = [];
37
+ /** Accumulated speaking units up to the timestamp. */
38
+ speakIntegrals = [];
39
+ /** Buffer for text without timing annotations yet. */
40
+ textBuffer = [];
41
+ /**
42
+ * Add by speaking rate estimation.
43
+ */
44
+ addByRate(timestamp, speakingRate) {
45
+ const integral = this.speakIntegrals.length > 0 ? this.speakIntegrals[this.speakIntegrals.length - 1] : 0;
46
+ const dt = timestamp - this.pushedDuration;
47
+ const newIntegral = integral + speakingRate * dt;
48
+ this.timestamps.push(timestamp);
49
+ this.speakingRate.push(speakingRate);
50
+ this.speakIntegrals.push(newIntegral);
51
+ }
52
+ /**
53
+ * Add annotation from TimedString with start_time/end_time.
54
+ */
55
+ addByAnnotation(text, startTime, endTime) {
56
+ if (startTime !== void 0) {
57
+ const integral = this.speakIntegrals.length > 0 ? this.speakIntegrals[this.speakIntegrals.length - 1] : 0;
58
+ const dt = startTime - this.pushedDuration;
59
+ const textLen = this.textBuffer.reduce((sum, t) => sum + t.length, 0);
60
+ const newIntegral = integral + textLen;
61
+ const rate = dt > 0 ? textLen / dt : 0;
62
+ this.timestamps.push(startTime);
63
+ this.speakingRate.push(rate);
64
+ this.speakIntegrals.push(newIntegral);
65
+ this.textBuffer = [];
66
+ }
67
+ this.textBuffer.push(text);
68
+ if (endTime !== void 0) {
69
+ this.addByAnnotation("", endTime, void 0);
70
+ }
71
+ }
72
+ /**
73
+ * Get accumulated speaking units up to the given timestamp.
74
+ */
75
+ accumulateTo(timestamp) {
76
+ if (this.timestamps.length === 0) {
77
+ return 0;
78
+ }
79
+ let idx = 0;
80
+ for (let i = 0; i < this.timestamps.length; i++) {
81
+ if (this.timestamps[i] <= timestamp) {
82
+ idx = i + 1;
83
+ } else {
84
+ break;
85
+ }
86
+ }
87
+ if (idx === 0) {
88
+ return 0;
89
+ }
90
+ let integralT = this.speakIntegrals[idx - 1];
91
+ const dt = timestamp - this.timestamps[idx - 1];
92
+ const rate = idx < this.speakingRate.length ? this.speakingRate[idx] : this.speakingRate[idx - 1];
93
+ integralT += rate * dt;
94
+ if (idx < this.timestamps.length) {
95
+ integralT = Math.min(integralT, this.speakIntegrals[idx]);
96
+ }
97
+ return integralT;
98
+ }
99
+ /** Get the last pushed timestamp. */
100
+ get pushedDuration() {
101
+ return this.timestamps.length > 0 ? this.timestamps[this.timestamps.length - 1] : 0;
102
+ }
103
+ }
31
104
  class SegmentSynchronizerImpl {
32
105
  constructor(options, nextInChain) {
33
106
  this.options = options;
@@ -42,7 +115,8 @@ class SegmentSynchronizerImpl {
42
115
  };
43
116
  this.audioData = {
44
117
  pushedDuration: 0,
45
- done: false
118
+ done: false,
119
+ annotatedRate: null
46
120
  };
47
121
  this.outputStream = new import_identity_transform.IdentityTransform();
48
122
  this.outputStreamWriter = this.outputStream.writable.getWriter();
@@ -73,6 +147,9 @@ class SegmentSynchronizerImpl {
73
147
  get textInputEnded() {
74
148
  return this.textData.done;
75
149
  }
150
+ get hasPendingText() {
151
+ return this.textData.pushedText.length > this.textData.forwardedText.length;
152
+ }
76
153
  get readable() {
77
154
  return this.outputStream.readable;
78
155
  }
@@ -100,8 +177,22 @@ class SegmentSynchronizerImpl {
100
177
  this.logger.warn("SegmentSynchronizerImpl.pushText called after close");
101
178
  return;
102
179
  }
103
- this.textData.sentenceStream.pushText(text);
104
- this.textData.pushedText += text;
180
+ let textStr;
181
+ let startTime;
182
+ let endTime;
183
+ if ((0, import_io.isTimedString)(text)) {
184
+ textStr = text.text;
185
+ startTime = text.startTime;
186
+ endTime = text.endTime;
187
+ if (!this.audioData.annotatedRate) {
188
+ this.audioData.annotatedRate = new SpeakingRateData();
189
+ }
190
+ this.audioData.annotatedRate.addByAnnotation(textStr, startTime, endTime);
191
+ } else {
192
+ textStr = text;
193
+ }
194
+ this.textData.sentenceStream.pushText(textStr);
195
+ this.textData.pushedText += textStr;
105
196
  }
106
197
  endTextInput() {
107
198
  if (this.closed) {
@@ -121,6 +212,9 @@ class SegmentSynchronizerImpl {
121
212
  { textDone: this.textData.done, audioDone: this.audioData.done },
122
213
  "SegmentSynchronizerImpl.markPlaybackFinished called before text/audio input is done"
123
214
  );
215
+ if (!interrupted) {
216
+ this.playbackCompleted = true;
217
+ }
124
218
  return;
125
219
  }
126
220
  if (!interrupted) {
@@ -140,7 +234,6 @@ class SegmentSynchronizerImpl {
140
234
  if (done) {
141
235
  break;
142
236
  }
143
- this.textData.forwardedText += text;
144
237
  await this.nextInChain.captureText(text);
145
238
  }
146
239
  reader.releaseLock();
@@ -171,16 +264,32 @@ class SegmentSynchronizerImpl {
171
264
  }
172
265
  const wordHphens = this.options.hyphenateWord(word).length;
173
266
  const elapsedSeconds = (Date.now() - this.startWallTime) / 1e3;
174
- const targetHyphens = elapsedSeconds * this.options.speed;
175
- const hyphensBehind = Math.max(0, targetHyphens - this.textData.forwardedHyphens);
176
- let delay2 = Math.max(0, wordHphens - hyphensBehind) / this.speed;
267
+ let dHyphens = 0;
268
+ const annotated = this.audioData.annotatedRate;
269
+ if (annotated && annotated.pushedDuration >= elapsedSeconds) {
270
+ const targetLen = Math.floor(annotated.accumulateTo(elapsedSeconds));
271
+ const forwardedLen = this.textData.forwardedText.length;
272
+ if (targetLen >= forwardedLen) {
273
+ const dText = this.textData.pushedText.slice(forwardedLen, targetLen);
274
+ dHyphens = this.calcHyphens(dText).length;
275
+ } else {
276
+ const dText = this.textData.pushedText.slice(targetLen, forwardedLen);
277
+ dHyphens = -this.calcHyphens(dText).length;
278
+ }
279
+ } else {
280
+ const targetHyphens = elapsedSeconds * this.options.speed;
281
+ dHyphens = Math.max(0, targetHyphens - this.textData.forwardedHyphens);
282
+ }
283
+ let delayTime = Math.max(0, wordHphens - dHyphens) / this.speed;
177
284
  if (this.playbackCompleted) {
178
- delay2 = 0;
285
+ delayTime = 0;
179
286
  }
180
- await this.sleepIfNotClosed(delay2 / 2);
181
- this.outputStreamWriter.write(sentence.slice(textCursor, endPos));
182
- await this.sleepIfNotClosed(delay2 / 2);
287
+ await this.sleepIfNotClosed(delayTime / 2);
288
+ const forwardedWord = sentence.slice(textCursor, endPos);
289
+ this.outputStreamWriter.write(forwardedWord);
290
+ await this.sleepIfNotClosed(delayTime / 2);
183
291
  this.textData.forwardedHyphens += wordHphens;
292
+ this.textData.forwardedText += forwardedWord;
184
293
  textCursor = endPos;
185
294
  }
186
295
  if (textCursor < sentence.length) {
@@ -189,6 +298,14 @@ class SegmentSynchronizerImpl {
189
298
  }
190
299
  }
191
300
  }
301
+ calcHyphens(text) {
302
+ const words = this.options.splitWords(text);
303
+ const hyphens = [];
304
+ for (const [word] of words) {
305
+ hyphens.push(...this.options.hyphenateWord(word));
306
+ }
307
+ return hyphens;
308
+ }
192
309
  async sleepIfNotClosed(sleepTimeSeconds) {
193
310
  if (this.closed) {
194
311
  return;
@@ -220,7 +337,7 @@ class TranscriptionSynchronizer {
220
337
  rotateSegmentTask;
221
338
  _enabled = true;
222
339
  closed = false;
223
- /* @internal */
340
+ /** @internal */
224
341
  _impl;
225
342
  logger = (0, import_log.log)();
226
343
  constructor(nextInChainAudio, nextInChainText, options = defaultTextSyncOptions) {
@@ -282,7 +399,7 @@ class TranscriptionSynchronizer {
282
399
  }
283
400
  class SyncedAudioOutput extends import_io.AudioOutput {
284
401
  constructor(synchronizer, nextInChainAudio) {
285
- super(nextInChainAudio.sampleRate, nextInChainAudio);
402
+ super(nextInChainAudio.sampleRate, nextInChainAudio, { pause: true });
286
403
  this.synchronizer = synchronizer;
287
404
  this.nextInChainAudio = nextInChainAudio;
288
405
  }
@@ -311,6 +428,10 @@ class SyncedAudioOutput extends import_io.AudioOutput {
311
428
  return;
312
429
  }
313
430
  if (!this.pushedDuration) {
431
+ if (this.synchronizer._impl.hasPendingText) {
432
+ this.synchronizer._impl.endAudioInput();
433
+ return;
434
+ }
314
435
  this.synchronizer.rotateSegment();
315
436
  return;
316
437
  }
@@ -345,8 +466,9 @@ class SyncedTextOutput extends import_io.TextOutput {
345
466
  logger = (0, import_log.log)();
346
467
  async captureText(text) {
347
468
  await this.synchronizer.barrier();
469
+ const textStr = (0, import_io.isTimedString)(text) ? text.text : text;
348
470
  if (!this.synchronizer.enabled) {
349
- await this.nextInChain.captureText(text);
471
+ await this.nextInChain.captureText(textStr);
350
472
  return;
351
473
  }
352
474
  this.capturing = true;
@@ -359,7 +481,8 @@ class SyncedTextOutput extends import_io.TextOutput {
359
481
  }
360
482
  this.synchronizer._impl.pushText(text);
361
483
  }
362
- flush() {
484
+ async flush() {
485
+ await this.synchronizer.barrier();
363
486
  if (!this.synchronizer.enabled) {
364
487
  this.nextInChain.flush();
365
488
  return;
@@ -373,6 +496,7 @@ class SyncedTextOutput extends import_io.TextOutput {
373
496
  }
374
497
  // Annotate the CommonJS export names for ESM import in node:
375
498
  0 && (module.exports = {
499
+ SpeakingRateData,
376
500
  TranscriptionSynchronizer,
377
501
  defaultTextSyncOptions
378
502
  });