@livekit/agents 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (942) hide show
  1. package/dist/audio.cjs +89 -3
  2. package/dist/audio.cjs.map +1 -1
  3. package/dist/audio.d.cts +36 -1
  4. package/dist/audio.d.ts +36 -1
  5. package/dist/audio.d.ts.map +1 -1
  6. package/dist/audio.js +76 -2
  7. package/dist/audio.js.map +1 -1
  8. package/dist/beta/index.cjs +29 -0
  9. package/dist/beta/index.cjs.map +1 -0
  10. package/dist/beta/index.d.cts +2 -0
  11. package/dist/beta/index.d.ts +2 -0
  12. package/dist/beta/index.d.ts.map +1 -0
  13. package/dist/beta/index.js +7 -0
  14. package/dist/beta/index.js.map +1 -0
  15. package/dist/beta/workflows/index.cjs +29 -0
  16. package/dist/beta/workflows/index.cjs.map +1 -0
  17. package/dist/beta/workflows/index.d.cts +2 -0
  18. package/dist/beta/workflows/index.d.ts +2 -0
  19. package/dist/beta/workflows/index.d.ts.map +1 -0
  20. package/dist/beta/workflows/index.js +7 -0
  21. package/dist/beta/workflows/index.js.map +1 -0
  22. package/dist/beta/workflows/task_group.cjs +162 -0
  23. package/dist/beta/workflows/task_group.cjs.map +1 -0
  24. package/dist/beta/workflows/task_group.d.cts +32 -0
  25. package/dist/beta/workflows/task_group.d.ts +32 -0
  26. package/dist/beta/workflows/task_group.d.ts.map +1 -0
  27. package/dist/beta/workflows/task_group.js +138 -0
  28. package/dist/beta/workflows/task_group.js.map +1 -0
  29. package/dist/cli.cjs +44 -46
  30. package/dist/cli.cjs.map +1 -1
  31. package/dist/cli.d.cts +3 -3
  32. package/dist/cli.d.ts +3 -3
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +45 -47
  35. package/dist/cli.js.map +1 -1
  36. package/dist/connection_pool.cjs +242 -0
  37. package/dist/connection_pool.cjs.map +1 -0
  38. package/dist/connection_pool.d.cts +123 -0
  39. package/dist/connection_pool.d.ts +123 -0
  40. package/dist/connection_pool.d.ts.map +1 -0
  41. package/dist/connection_pool.js +218 -0
  42. package/dist/connection_pool.js.map +1 -0
  43. package/dist/connection_pool.test.cjs +256 -0
  44. package/dist/connection_pool.test.cjs.map +1 -0
  45. package/dist/connection_pool.test.js +255 -0
  46. package/dist/connection_pool.test.js.map +1 -0
  47. package/dist/constants.cjs +30 -0
  48. package/dist/constants.cjs.map +1 -1
  49. package/dist/constants.d.cts +10 -0
  50. package/dist/constants.d.ts +10 -0
  51. package/dist/constants.d.ts.map +1 -1
  52. package/dist/constants.js +20 -0
  53. package/dist/constants.js.map +1 -1
  54. package/dist/cpu.cjs +189 -0
  55. package/dist/cpu.cjs.map +1 -0
  56. package/dist/cpu.d.cts +24 -0
  57. package/dist/cpu.d.ts +24 -0
  58. package/dist/cpu.d.ts.map +1 -0
  59. package/dist/cpu.js +152 -0
  60. package/dist/cpu.js.map +1 -0
  61. package/dist/cpu.test.cjs +227 -0
  62. package/dist/cpu.test.cjs.map +1 -0
  63. package/dist/cpu.test.js +204 -0
  64. package/dist/cpu.test.js.map +1 -0
  65. package/dist/http_server.cjs +9 -6
  66. package/dist/http_server.cjs.map +1 -1
  67. package/dist/http_server.d.cts +5 -1
  68. package/dist/http_server.d.ts +5 -1
  69. package/dist/http_server.d.ts.map +1 -1
  70. package/dist/http_server.js +9 -6
  71. package/dist/http_server.js.map +1 -1
  72. package/dist/index.cjs +24 -9
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +15 -11
  75. package/dist/index.d.ts +15 -11
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +18 -9
  78. package/dist/index.js.map +1 -1
  79. package/dist/inference/api_protos.cjs +70 -2
  80. package/dist/inference/api_protos.cjs.map +1 -1
  81. package/dist/inference/api_protos.d.cts +373 -32
  82. package/dist/inference/api_protos.d.ts +373 -32
  83. package/dist/inference/api_protos.d.ts.map +1 -1
  84. package/dist/inference/api_protos.js +62 -2
  85. package/dist/inference/api_protos.js.map +1 -1
  86. package/dist/inference/index.cjs +8 -0
  87. package/dist/inference/index.cjs.map +1 -1
  88. package/dist/inference/index.d.cts +3 -4
  89. package/dist/inference/index.d.ts +3 -4
  90. package/dist/inference/index.d.ts.map +1 -1
  91. package/dist/inference/index.js +18 -3
  92. package/dist/inference/index.js.map +1 -1
  93. package/dist/inference/interruption/defaults.cjs +81 -0
  94. package/dist/inference/interruption/defaults.cjs.map +1 -0
  95. package/dist/inference/interruption/defaults.d.cts +19 -0
  96. package/dist/inference/interruption/defaults.d.ts +19 -0
  97. package/dist/inference/interruption/defaults.d.ts.map +1 -0
  98. package/dist/inference/interruption/defaults.js +46 -0
  99. package/dist/inference/interruption/defaults.js.map +1 -0
  100. package/dist/inference/interruption/errors.cjs +44 -0
  101. package/dist/inference/interruption/errors.cjs.map +1 -0
  102. package/dist/inference/interruption/errors.d.cts +12 -0
  103. package/dist/inference/interruption/errors.d.ts +12 -0
  104. package/dist/inference/interruption/errors.d.ts.map +1 -0
  105. package/dist/inference/interruption/errors.js +20 -0
  106. package/dist/inference/interruption/errors.js.map +1 -0
  107. package/dist/inference/interruption/http_transport.cjs +163 -0
  108. package/dist/inference/interruption/http_transport.cjs.map +1 -0
  109. package/dist/inference/interruption/http_transport.d.cts +63 -0
  110. package/dist/inference/interruption/http_transport.d.ts +63 -0
  111. package/dist/inference/interruption/http_transport.d.ts.map +1 -0
  112. package/dist/inference/interruption/http_transport.js +137 -0
  113. package/dist/inference/interruption/http_transport.js.map +1 -0
  114. package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
  115. package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
  116. package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
  117. package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
  118. package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
  119. package/dist/inference/interruption/interruption_cache_entry.js +34 -0
  120. package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
  121. package/dist/inference/interruption/interruption_detector.cjs +198 -0
  122. package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
  123. package/dist/inference/interruption/interruption_detector.d.cts +59 -0
  124. package/dist/inference/interruption/interruption_detector.d.ts +59 -0
  125. package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
  126. package/dist/inference/interruption/interruption_detector.js +164 -0
  127. package/dist/inference/interruption/interruption_detector.js.map +1 -0
  128. package/dist/inference/interruption/interruption_stream.cjs +368 -0
  129. package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
  130. package/dist/inference/interruption/interruption_stream.d.cts +46 -0
  131. package/dist/inference/interruption/interruption_stream.d.ts +46 -0
  132. package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
  133. package/dist/inference/interruption/interruption_stream.js +344 -0
  134. package/dist/inference/interruption/interruption_stream.js.map +1 -0
  135. package/dist/inference/interruption/types.cjs +17 -0
  136. package/dist/inference/interruption/types.cjs.map +1 -0
  137. package/dist/inference/interruption/types.d.cts +66 -0
  138. package/dist/inference/interruption/types.d.ts +66 -0
  139. package/dist/inference/interruption/types.d.ts.map +1 -0
  140. package/dist/inference/interruption/types.js +1 -0
  141. package/dist/inference/interruption/types.js.map +1 -0
  142. package/dist/inference/interruption/utils.cjs +130 -0
  143. package/dist/inference/interruption/utils.cjs.map +1 -0
  144. package/dist/inference/interruption/utils.d.cts +41 -0
  145. package/dist/inference/interruption/utils.d.ts +41 -0
  146. package/dist/inference/interruption/utils.d.ts.map +1 -0
  147. package/dist/inference/interruption/utils.js +105 -0
  148. package/dist/inference/interruption/utils.js.map +1 -0
  149. package/dist/inference/interruption/utils.test.cjs +105 -0
  150. package/dist/inference/interruption/utils.test.cjs.map +1 -0
  151. package/dist/inference/interruption/utils.test.js +104 -0
  152. package/dist/inference/interruption/utils.test.js.map +1 -0
  153. package/dist/inference/interruption/ws_transport.cjs +342 -0
  154. package/dist/inference/interruption/ws_transport.cjs.map +1 -0
  155. package/dist/inference/interruption/ws_transport.d.cts +33 -0
  156. package/dist/inference/interruption/ws_transport.d.ts +33 -0
  157. package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
  158. package/dist/inference/interruption/ws_transport.js +308 -0
  159. package/dist/inference/interruption/ws_transport.js.map +1 -0
  160. package/dist/inference/llm.cjs +106 -66
  161. package/dist/inference/llm.cjs.map +1 -1
  162. package/dist/inference/llm.d.cts +65 -43
  163. package/dist/inference/llm.d.ts +65 -43
  164. package/dist/inference/llm.d.ts.map +1 -1
  165. package/dist/inference/llm.js +100 -66
  166. package/dist/inference/llm.js.map +1 -1
  167. package/dist/inference/stt.cjs +319 -170
  168. package/dist/inference/stt.cjs.map +1 -1
  169. package/dist/inference/stt.d.cts +64 -15
  170. package/dist/inference/stt.d.ts +64 -15
  171. package/dist/inference/stt.d.ts.map +1 -1
  172. package/dist/inference/stt.js +319 -170
  173. package/dist/inference/stt.js.map +1 -1
  174. package/dist/inference/stt.test.cjs +218 -0
  175. package/dist/inference/stt.test.cjs.map +1 -0
  176. package/dist/inference/stt.test.js +217 -0
  177. package/dist/inference/stt.test.js.map +1 -0
  178. package/dist/inference/tts.cjs +249 -71
  179. package/dist/inference/tts.cjs.map +1 -1
  180. package/dist/inference/tts.d.cts +55 -16
  181. package/dist/inference/tts.d.ts +55 -16
  182. package/dist/inference/tts.d.ts.map +1 -1
  183. package/dist/inference/tts.js +249 -77
  184. package/dist/inference/tts.js.map +1 -1
  185. package/dist/inference/tts.test.cjs +233 -0
  186. package/dist/inference/tts.test.cjs.map +1 -0
  187. package/dist/inference/tts.test.js +232 -0
  188. package/dist/inference/tts.test.js.map +1 -0
  189. package/dist/inference/utils.cjs +26 -7
  190. package/dist/inference/utils.cjs.map +1 -1
  191. package/dist/inference/utils.d.cts +14 -1
  192. package/dist/inference/utils.d.ts +14 -1
  193. package/dist/inference/utils.d.ts.map +1 -1
  194. package/dist/inference/utils.js +18 -2
  195. package/dist/inference/utils.js.map +1 -1
  196. package/dist/ipc/inference_proc_executor.cjs +6 -3
  197. package/dist/ipc/inference_proc_executor.cjs.map +1 -1
  198. package/dist/ipc/inference_proc_executor.d.ts.map +1 -1
  199. package/dist/ipc/inference_proc_executor.js +6 -3
  200. package/dist/ipc/inference_proc_executor.js.map +1 -1
  201. package/dist/ipc/inference_proc_lazy_main.cjs +13 -1
  202. package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -1
  203. package/dist/ipc/inference_proc_lazy_main.js +13 -1
  204. package/dist/ipc/inference_proc_lazy_main.js.map +1 -1
  205. package/dist/ipc/job_proc_executor.cjs +6 -1
  206. package/dist/ipc/job_proc_executor.cjs.map +1 -1
  207. package/dist/ipc/job_proc_executor.d.ts.map +1 -1
  208. package/dist/ipc/job_proc_executor.js +6 -1
  209. package/dist/ipc/job_proc_executor.js.map +1 -1
  210. package/dist/ipc/job_proc_lazy_main.cjs +89 -17
  211. package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
  212. package/dist/ipc/job_proc_lazy_main.js +68 -18
  213. package/dist/ipc/job_proc_lazy_main.js.map +1 -1
  214. package/dist/ipc/supervised_proc.cjs +34 -8
  215. package/dist/ipc/supervised_proc.cjs.map +1 -1
  216. package/dist/ipc/supervised_proc.d.cts +8 -0
  217. package/dist/ipc/supervised_proc.d.ts +8 -0
  218. package/dist/ipc/supervised_proc.d.ts.map +1 -1
  219. package/dist/ipc/supervised_proc.js +34 -8
  220. package/dist/ipc/supervised_proc.js.map +1 -1
  221. package/dist/ipc/supervised_proc.test.cjs +145 -0
  222. package/dist/ipc/supervised_proc.test.cjs.map +1 -0
  223. package/dist/ipc/supervised_proc.test.js +122 -0
  224. package/dist/ipc/supervised_proc.test.js.map +1 -0
  225. package/dist/job.cjs +109 -1
  226. package/dist/job.cjs.map +1 -1
  227. package/dist/job.d.cts +14 -0
  228. package/dist/job.d.ts +14 -0
  229. package/dist/job.d.ts.map +1 -1
  230. package/dist/job.js +99 -1
  231. package/dist/job.js.map +1 -1
  232. package/dist/language.cjs +394 -0
  233. package/dist/language.cjs.map +1 -0
  234. package/dist/language.d.cts +15 -0
  235. package/dist/language.d.ts +15 -0
  236. package/dist/language.d.ts.map +1 -0
  237. package/dist/language.js +363 -0
  238. package/dist/language.js.map +1 -0
  239. package/dist/language.test.cjs +43 -0
  240. package/dist/language.test.cjs.map +1 -0
  241. package/dist/language.test.js +49 -0
  242. package/dist/language.test.js.map +1 -0
  243. package/dist/llm/chat_context.cjs +274 -3
  244. package/dist/llm/chat_context.cjs.map +1 -1
  245. package/dist/llm/chat_context.d.cts +86 -2
  246. package/dist/llm/chat_context.d.ts +86 -2
  247. package/dist/llm/chat_context.d.ts.map +1 -1
  248. package/dist/llm/chat_context.js +273 -3
  249. package/dist/llm/chat_context.js.map +1 -1
  250. package/dist/llm/chat_context.test.cjs +574 -0
  251. package/dist/llm/chat_context.test.cjs.map +1 -1
  252. package/dist/llm/chat_context.test.js +574 -0
  253. package/dist/llm/chat_context.test.js.map +1 -1
  254. package/dist/llm/fallback_adapter.cjs +278 -0
  255. package/dist/llm/fallback_adapter.cjs.map +1 -0
  256. package/dist/llm/fallback_adapter.d.cts +73 -0
  257. package/dist/llm/fallback_adapter.d.ts +73 -0
  258. package/dist/llm/fallback_adapter.d.ts.map +1 -0
  259. package/dist/llm/fallback_adapter.js +254 -0
  260. package/dist/llm/fallback_adapter.js.map +1 -0
  261. package/dist/llm/fallback_adapter.test.cjs +176 -0
  262. package/dist/llm/fallback_adapter.test.cjs.map +1 -0
  263. package/dist/llm/fallback_adapter.test.js +175 -0
  264. package/dist/llm/fallback_adapter.test.js.map +1 -0
  265. package/dist/llm/index.cjs +9 -0
  266. package/dist/llm/index.cjs.map +1 -1
  267. package/dist/llm/index.d.cts +4 -3
  268. package/dist/llm/index.d.ts +4 -3
  269. package/dist/llm/index.d.ts.map +1 -1
  270. package/dist/llm/index.js +11 -1
  271. package/dist/llm/index.js.map +1 -1
  272. package/dist/llm/llm.cjs +65 -11
  273. package/dist/llm/llm.cjs.map +1 -1
  274. package/dist/llm/llm.d.cts +13 -2
  275. package/dist/llm/llm.d.ts +13 -2
  276. package/dist/llm/llm.d.ts.map +1 -1
  277. package/dist/llm/llm.js +65 -11
  278. package/dist/llm/llm.js.map +1 -1
  279. package/dist/llm/provider_format/google.cjs +6 -2
  280. package/dist/llm/provider_format/google.cjs.map +1 -1
  281. package/dist/llm/provider_format/google.d.cts +1 -1
  282. package/dist/llm/provider_format/google.d.ts +1 -1
  283. package/dist/llm/provider_format/google.d.ts.map +1 -1
  284. package/dist/llm/provider_format/google.js +6 -2
  285. package/dist/llm/provider_format/google.js.map +1 -1
  286. package/dist/llm/provider_format/google.test.cjs +48 -0
  287. package/dist/llm/provider_format/google.test.cjs.map +1 -1
  288. package/dist/llm/provider_format/google.test.js +54 -1
  289. package/dist/llm/provider_format/google.test.js.map +1 -1
  290. package/dist/llm/provider_format/index.cjs +2 -0
  291. package/dist/llm/provider_format/index.cjs.map +1 -1
  292. package/dist/llm/provider_format/index.d.cts +2 -2
  293. package/dist/llm/provider_format/index.d.ts +2 -2
  294. package/dist/llm/provider_format/index.d.ts.map +1 -1
  295. package/dist/llm/provider_format/index.js +6 -1
  296. package/dist/llm/provider_format/index.js.map +1 -1
  297. package/dist/llm/provider_format/openai.cjs +126 -24
  298. package/dist/llm/provider_format/openai.cjs.map +1 -1
  299. package/dist/llm/provider_format/openai.d.cts +1 -0
  300. package/dist/llm/provider_format/openai.d.ts +1 -0
  301. package/dist/llm/provider_format/openai.d.ts.map +1 -1
  302. package/dist/llm/provider_format/openai.js +124 -23
  303. package/dist/llm/provider_format/openai.js.map +1 -1
  304. package/dist/llm/provider_format/openai.test.cjs +393 -0
  305. package/dist/llm/provider_format/openai.test.cjs.map +1 -1
  306. package/dist/llm/provider_format/openai.test.js +400 -2
  307. package/dist/llm/provider_format/openai.test.js.map +1 -1
  308. package/dist/llm/provider_format/utils.cjs +5 -4
  309. package/dist/llm/provider_format/utils.cjs.map +1 -1
  310. package/dist/llm/provider_format/utils.d.ts.map +1 -1
  311. package/dist/llm/provider_format/utils.js +5 -4
  312. package/dist/llm/provider_format/utils.js.map +1 -1
  313. package/dist/llm/realtime.cjs +3 -0
  314. package/dist/llm/realtime.cjs.map +1 -1
  315. package/dist/llm/realtime.d.cts +15 -1
  316. package/dist/llm/realtime.d.ts +15 -1
  317. package/dist/llm/realtime.d.ts.map +1 -1
  318. package/dist/llm/realtime.js +3 -0
  319. package/dist/llm/realtime.js.map +1 -1
  320. package/dist/llm/remote_chat_context.cjs.map +1 -1
  321. package/dist/llm/remote_chat_context.d.cts +2 -0
  322. package/dist/llm/remote_chat_context.d.ts +2 -0
  323. package/dist/llm/remote_chat_context.d.ts.map +1 -1
  324. package/dist/llm/remote_chat_context.js.map +1 -1
  325. package/dist/llm/tool_context.cjs +50 -2
  326. package/dist/llm/tool_context.cjs.map +1 -1
  327. package/dist/llm/tool_context.d.cts +47 -11
  328. package/dist/llm/tool_context.d.ts +47 -11
  329. package/dist/llm/tool_context.d.ts.map +1 -1
  330. package/dist/llm/tool_context.js +48 -3
  331. package/dist/llm/tool_context.js.map +1 -1
  332. package/dist/llm/tool_context.test.cjs +197 -0
  333. package/dist/llm/tool_context.test.cjs.map +1 -1
  334. package/dist/llm/tool_context.test.js +175 -0
  335. package/dist/llm/tool_context.test.js.map +1 -1
  336. package/dist/llm/utils.cjs +18 -12
  337. package/dist/llm/utils.cjs.map +1 -1
  338. package/dist/llm/utils.d.cts +2 -3
  339. package/dist/llm/utils.d.ts +2 -3
  340. package/dist/llm/utils.d.ts.map +1 -1
  341. package/dist/llm/utils.js +18 -12
  342. package/dist/llm/utils.js.map +1 -1
  343. package/dist/llm/zod-utils.cjs +102 -0
  344. package/dist/llm/zod-utils.cjs.map +1 -0
  345. package/dist/llm/zod-utils.d.cts +65 -0
  346. package/dist/llm/zod-utils.d.ts +65 -0
  347. package/dist/llm/zod-utils.d.ts.map +1 -0
  348. package/dist/llm/zod-utils.js +64 -0
  349. package/dist/llm/zod-utils.js.map +1 -0
  350. package/dist/llm/zod-utils.test.cjs +472 -0
  351. package/dist/llm/zod-utils.test.cjs.map +1 -0
  352. package/dist/llm/zod-utils.test.js +455 -0
  353. package/dist/llm/zod-utils.test.js.map +1 -0
  354. package/dist/log.cjs +45 -14
  355. package/dist/log.cjs.map +1 -1
  356. package/dist/log.d.cts +8 -1
  357. package/dist/log.d.ts +8 -1
  358. package/dist/log.d.ts.map +1 -1
  359. package/dist/log.js +45 -15
  360. package/dist/log.js.map +1 -1
  361. package/dist/metrics/base.cjs.map +1 -1
  362. package/dist/metrics/base.d.cts +75 -19
  363. package/dist/metrics/base.d.ts +75 -19
  364. package/dist/metrics/base.d.ts.map +1 -1
  365. package/dist/metrics/index.cjs +5 -0
  366. package/dist/metrics/index.cjs.map +1 -1
  367. package/dist/metrics/index.d.cts +2 -1
  368. package/dist/metrics/index.d.ts +2 -1
  369. package/dist/metrics/index.d.ts.map +1 -1
  370. package/dist/metrics/index.js +6 -0
  371. package/dist/metrics/index.js.map +1 -1
  372. package/dist/metrics/model_usage.cjs +189 -0
  373. package/dist/metrics/model_usage.cjs.map +1 -0
  374. package/dist/metrics/model_usage.d.cts +92 -0
  375. package/dist/metrics/model_usage.d.ts +92 -0
  376. package/dist/metrics/model_usage.d.ts.map +1 -0
  377. package/dist/metrics/model_usage.js +164 -0
  378. package/dist/metrics/model_usage.js.map +1 -0
  379. package/dist/metrics/model_usage.test.cjs +474 -0
  380. package/dist/metrics/model_usage.test.cjs.map +1 -0
  381. package/dist/metrics/model_usage.test.js +476 -0
  382. package/dist/metrics/model_usage.test.js.map +1 -0
  383. package/dist/metrics/usage_collector.cjs +5 -2
  384. package/dist/metrics/usage_collector.cjs.map +1 -1
  385. package/dist/metrics/usage_collector.d.cts +10 -1
  386. package/dist/metrics/usage_collector.d.ts +10 -1
  387. package/dist/metrics/usage_collector.d.ts.map +1 -1
  388. package/dist/metrics/usage_collector.js +5 -2
  389. package/dist/metrics/usage_collector.js.map +1 -1
  390. package/dist/metrics/utils.cjs +23 -7
  391. package/dist/metrics/utils.cjs.map +1 -1
  392. package/dist/metrics/utils.d.ts.map +1 -1
  393. package/dist/metrics/utils.js +23 -7
  394. package/dist/metrics/utils.js.map +1 -1
  395. package/dist/stream/deferred_stream.cjs +31 -10
  396. package/dist/stream/deferred_stream.cjs.map +1 -1
  397. package/dist/stream/deferred_stream.d.cts +6 -1
  398. package/dist/stream/deferred_stream.d.ts +6 -1
  399. package/dist/stream/deferred_stream.d.ts.map +1 -1
  400. package/dist/stream/deferred_stream.js +31 -10
  401. package/dist/stream/deferred_stream.js.map +1 -1
  402. package/dist/stream/deferred_stream.test.cjs +2 -2
  403. package/dist/stream/deferred_stream.test.cjs.map +1 -1
  404. package/dist/stream/deferred_stream.test.js +2 -2
  405. package/dist/stream/deferred_stream.test.js.map +1 -1
  406. package/dist/stream/index.cjs +3 -0
  407. package/dist/stream/index.cjs.map +1 -1
  408. package/dist/stream/index.d.cts +1 -0
  409. package/dist/stream/index.d.ts +1 -0
  410. package/dist/stream/index.d.ts.map +1 -1
  411. package/dist/stream/index.js +2 -0
  412. package/dist/stream/index.js.map +1 -1
  413. package/dist/stream/multi_input_stream.cjs +139 -0
  414. package/dist/stream/multi_input_stream.cjs.map +1 -0
  415. package/dist/stream/multi_input_stream.d.cts +55 -0
  416. package/dist/stream/multi_input_stream.d.ts +55 -0
  417. package/dist/stream/multi_input_stream.d.ts.map +1 -0
  418. package/dist/stream/multi_input_stream.js +115 -0
  419. package/dist/stream/multi_input_stream.js.map +1 -0
  420. package/dist/stream/multi_input_stream.test.cjs +344 -0
  421. package/dist/stream/multi_input_stream.test.cjs.map +1 -0
  422. package/dist/stream/multi_input_stream.test.js +343 -0
  423. package/dist/stream/multi_input_stream.test.js.map +1 -0
  424. package/dist/stream/stream_channel.cjs +39 -1
  425. package/dist/stream/stream_channel.cjs.map +1 -1
  426. package/dist/stream/stream_channel.d.cts +5 -2
  427. package/dist/stream/stream_channel.d.ts +5 -2
  428. package/dist/stream/stream_channel.d.ts.map +1 -1
  429. package/dist/stream/stream_channel.js +39 -1
  430. package/dist/stream/stream_channel.js.map +1 -1
  431. package/dist/stream/stream_channel.test.cjs +27 -0
  432. package/dist/stream/stream_channel.test.cjs.map +1 -1
  433. package/dist/stream/stream_channel.test.js +27 -0
  434. package/dist/stream/stream_channel.test.js.map +1 -1
  435. package/dist/stt/stream_adapter.cjs +24 -9
  436. package/dist/stt/stream_adapter.cjs.map +1 -1
  437. package/dist/stt/stream_adapter.d.cts +7 -3
  438. package/dist/stt/stream_adapter.d.ts +7 -3
  439. package/dist/stt/stream_adapter.d.ts.map +1 -1
  440. package/dist/stt/stream_adapter.js +24 -9
  441. package/dist/stt/stream_adapter.js.map +1 -1
  442. package/dist/stt/stt.cjs +86 -19
  443. package/dist/stt/stt.cjs.map +1 -1
  444. package/dist/stt/stt.d.cts +60 -5
  445. package/dist/stt/stt.d.ts +60 -5
  446. package/dist/stt/stt.d.ts.map +1 -1
  447. package/dist/stt/stt.js +88 -21
  448. package/dist/stt/stt.js.map +1 -1
  449. package/dist/telemetry/index.cjs +72 -0
  450. package/dist/telemetry/index.cjs.map +1 -0
  451. package/dist/telemetry/index.d.cts +7 -0
  452. package/dist/telemetry/index.d.ts +7 -0
  453. package/dist/telemetry/index.d.ts.map +1 -0
  454. package/dist/telemetry/index.js +37 -0
  455. package/dist/telemetry/index.js.map +1 -0
  456. package/dist/telemetry/logging.cjs +65 -0
  457. package/dist/telemetry/logging.cjs.map +1 -0
  458. package/dist/telemetry/logging.d.cts +21 -0
  459. package/dist/telemetry/logging.d.ts +21 -0
  460. package/dist/telemetry/logging.d.ts.map +1 -0
  461. package/dist/telemetry/logging.js +40 -0
  462. package/dist/telemetry/logging.js.map +1 -0
  463. package/dist/telemetry/otel_http_exporter.cjs +166 -0
  464. package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
  465. package/dist/telemetry/otel_http_exporter.d.cts +63 -0
  466. package/dist/telemetry/otel_http_exporter.d.ts +63 -0
  467. package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
  468. package/dist/telemetry/otel_http_exporter.js +142 -0
  469. package/dist/telemetry/otel_http_exporter.js.map +1 -0
  470. package/dist/telemetry/pino_otel_transport.cjs +217 -0
  471. package/dist/telemetry/pino_otel_transport.cjs.map +1 -0
  472. package/dist/telemetry/pino_otel_transport.d.cts +58 -0
  473. package/dist/telemetry/pino_otel_transport.d.ts +58 -0
  474. package/dist/telemetry/pino_otel_transport.d.ts.map +1 -0
  475. package/dist/telemetry/pino_otel_transport.js +189 -0
  476. package/dist/telemetry/pino_otel_transport.js.map +1 -0
  477. package/dist/telemetry/trace_types.cjs +233 -0
  478. package/dist/telemetry/trace_types.cjs.map +1 -0
  479. package/dist/telemetry/trace_types.d.cts +74 -0
  480. package/dist/telemetry/trace_types.d.ts +74 -0
  481. package/dist/telemetry/trace_types.d.ts.map +1 -0
  482. package/dist/telemetry/trace_types.js +141 -0
  483. package/dist/telemetry/trace_types.js.map +1 -0
  484. package/dist/telemetry/traces.cjs +484 -0
  485. package/dist/telemetry/traces.cjs.map +1 -0
  486. package/dist/telemetry/traces.d.cts +116 -0
  487. package/dist/telemetry/traces.d.ts +116 -0
  488. package/dist/telemetry/traces.d.ts.map +1 -0
  489. package/dist/telemetry/traces.js +449 -0
  490. package/dist/telemetry/traces.js.map +1 -0
  491. package/dist/telemetry/utils.cjs +86 -0
  492. package/dist/telemetry/utils.cjs.map +1 -0
  493. package/dist/telemetry/utils.d.cts +5 -0
  494. package/dist/telemetry/utils.d.ts +5 -0
  495. package/dist/telemetry/utils.d.ts.map +1 -0
  496. package/dist/telemetry/utils.js +51 -0
  497. package/dist/telemetry/utils.js.map +1 -0
  498. package/dist/tokenize/basic/sentence.cjs +3 -3
  499. package/dist/tokenize/basic/sentence.cjs.map +1 -1
  500. package/dist/tokenize/basic/sentence.js +3 -3
  501. package/dist/tokenize/basic/sentence.js.map +1 -1
  502. package/dist/tokenize/tokenizer.test.cjs +3 -1
  503. package/dist/tokenize/tokenizer.test.cjs.map +1 -1
  504. package/dist/tokenize/tokenizer.test.js +3 -1
  505. package/dist/tokenize/tokenizer.test.js.map +1 -1
  506. package/dist/transcription.cjs.map +1 -1
  507. package/dist/transcription.d.cts +6 -0
  508. package/dist/transcription.d.ts +6 -0
  509. package/dist/transcription.d.ts.map +1 -1
  510. package/dist/transcription.js.map +1 -1
  511. package/dist/tts/fallback_adapter.cjs +466 -0
  512. package/dist/tts/fallback_adapter.cjs.map +1 -0
  513. package/dist/tts/fallback_adapter.d.cts +110 -0
  514. package/dist/tts/fallback_adapter.d.ts +110 -0
  515. package/dist/tts/fallback_adapter.d.ts.map +1 -0
  516. package/dist/tts/fallback_adapter.js +442 -0
  517. package/dist/tts/fallback_adapter.js.map +1 -0
  518. package/dist/tts/index.cjs +3 -0
  519. package/dist/tts/index.cjs.map +1 -1
  520. package/dist/tts/index.d.cts +1 -0
  521. package/dist/tts/index.d.ts +1 -0
  522. package/dist/tts/index.d.ts.map +1 -1
  523. package/dist/tts/index.js +2 -0
  524. package/dist/tts/index.js.map +1 -1
  525. package/dist/tts/stream_adapter.cjs +25 -8
  526. package/dist/tts/stream_adapter.cjs.map +1 -1
  527. package/dist/tts/stream_adapter.d.cts +6 -3
  528. package/dist/tts/stream_adapter.d.ts +6 -3
  529. package/dist/tts/stream_adapter.d.ts.map +1 -1
  530. package/dist/tts/stream_adapter.js +25 -8
  531. package/dist/tts/stream_adapter.js.map +1 -1
  532. package/dist/tts/tts.cjs +189 -57
  533. package/dist/tts/tts.cjs.map +1 -1
  534. package/dist/tts/tts.d.cts +58 -6
  535. package/dist/tts/tts.d.ts +58 -6
  536. package/dist/tts/tts.d.ts.map +1 -1
  537. package/dist/tts/tts.js +191 -59
  538. package/dist/tts/tts.js.map +1 -1
  539. package/dist/types.cjs +24 -32
  540. package/dist/types.cjs.map +1 -1
  541. package/dist/types.d.cts +45 -10
  542. package/dist/types.d.ts +45 -10
  543. package/dist/types.d.ts.map +1 -1
  544. package/dist/types.js +20 -30
  545. package/dist/types.js.map +1 -1
  546. package/dist/utils.cjs +122 -26
  547. package/dist/utils.cjs.map +1 -1
  548. package/dist/utils.d.cts +41 -1
  549. package/dist/utils.d.ts +41 -1
  550. package/dist/utils.d.ts.map +1 -1
  551. package/dist/utils.js +117 -25
  552. package/dist/utils.js.map +1 -1
  553. package/dist/utils.test.cjs +73 -1
  554. package/dist/utils.test.cjs.map +1 -1
  555. package/dist/utils.test.js +74 -10
  556. package/dist/utils.test.js.map +1 -1
  557. package/dist/vad.cjs +35 -15
  558. package/dist/vad.cjs.map +1 -1
  559. package/dist/vad.d.cts +15 -5
  560. package/dist/vad.d.ts +15 -5
  561. package/dist/vad.d.ts.map +1 -1
  562. package/dist/vad.js +35 -15
  563. package/dist/vad.js.map +1 -1
  564. package/dist/version.cjs +1 -1
  565. package/dist/version.cjs.map +1 -1
  566. package/dist/version.d.cts +1 -1
  567. package/dist/version.d.ts +1 -1
  568. package/dist/version.d.ts.map +1 -1
  569. package/dist/version.js +1 -1
  570. package/dist/version.js.map +1 -1
  571. package/dist/voice/agent.cjs +258 -35
  572. package/dist/voice/agent.cjs.map +1 -1
  573. package/dist/voice/agent.d.cts +54 -13
  574. package/dist/voice/agent.d.ts +54 -13
  575. package/dist/voice/agent.d.ts.map +1 -1
  576. package/dist/voice/agent.js +254 -34
  577. package/dist/voice/agent.js.map +1 -1
  578. package/dist/voice/agent.test.cjs +314 -0
  579. package/dist/voice/agent.test.cjs.map +1 -1
  580. package/dist/voice/agent.test.js +316 -2
  581. package/dist/voice/agent.test.js.map +1 -1
  582. package/dist/voice/agent_activity.cjs +1116 -385
  583. package/dist/voice/agent_activity.cjs.map +1 -1
  584. package/dist/voice/agent_activity.d.cts +72 -11
  585. package/dist/voice/agent_activity.d.ts +72 -11
  586. package/dist/voice/agent_activity.d.ts.map +1 -1
  587. package/dist/voice/agent_activity.js +1119 -383
  588. package/dist/voice/agent_activity.js.map +1 -1
  589. package/dist/voice/agent_activity.test.cjs +135 -0
  590. package/dist/voice/agent_activity.test.cjs.map +1 -0
  591. package/dist/voice/agent_activity.test.js +134 -0
  592. package/dist/voice/agent_activity.test.js.map +1 -0
  593. package/dist/voice/agent_session.cjs +550 -90
  594. package/dist/voice/agent_session.cjs.map +1 -1
  595. package/dist/voice/agent_session.d.cts +185 -25
  596. package/dist/voice/agent_session.d.ts +185 -25
  597. package/dist/voice/agent_session.d.ts.map +1 -1
  598. package/dist/voice/agent_session.js +556 -91
  599. package/dist/voice/agent_session.js.map +1 -1
  600. package/dist/voice/audio_recognition.cjs +605 -46
  601. package/dist/voice/audio_recognition.cjs.map +1 -1
  602. package/dist/voice/audio_recognition.d.cts +96 -4
  603. package/dist/voice/audio_recognition.d.ts +96 -4
  604. package/dist/voice/audio_recognition.d.ts.map +1 -1
  605. package/dist/voice/audio_recognition.js +611 -47
  606. package/dist/voice/audio_recognition.js.map +1 -1
  607. package/dist/voice/audio_recognition_span.test.cjs +295 -0
  608. package/dist/voice/audio_recognition_span.test.cjs.map +1 -0
  609. package/dist/voice/audio_recognition_span.test.js +299 -0
  610. package/dist/voice/audio_recognition_span.test.js.map +1 -0
  611. package/dist/voice/avatar/datastream_io.cjs +7 -1
  612. package/dist/voice/avatar/datastream_io.cjs.map +1 -1
  613. package/dist/voice/avatar/datastream_io.d.cts +1 -0
  614. package/dist/voice/avatar/datastream_io.d.ts +1 -0
  615. package/dist/voice/avatar/datastream_io.d.ts.map +1 -1
  616. package/dist/voice/avatar/datastream_io.js +7 -1
  617. package/dist/voice/avatar/datastream_io.js.map +1 -1
  618. package/dist/voice/background_audio.cjs +367 -0
  619. package/dist/voice/background_audio.cjs.map +1 -0
  620. package/dist/voice/background_audio.d.cts +123 -0
  621. package/dist/voice/background_audio.d.ts +123 -0
  622. package/dist/voice/background_audio.d.ts.map +1 -0
  623. package/dist/voice/background_audio.js +343 -0
  624. package/dist/voice/background_audio.js.map +1 -0
  625. package/dist/voice/events.cjs +3 -0
  626. package/dist/voice/events.cjs.map +1 -1
  627. package/dist/voice/events.d.cts +16 -9
  628. package/dist/voice/events.d.ts +16 -9
  629. package/dist/voice/events.d.ts.map +1 -1
  630. package/dist/voice/events.js +3 -0
  631. package/dist/voice/events.js.map +1 -1
  632. package/dist/voice/generation.cjs +205 -41
  633. package/dist/voice/generation.cjs.map +1 -1
  634. package/dist/voice/generation.d.cts +21 -5
  635. package/dist/voice/generation.d.ts +21 -5
  636. package/dist/voice/generation.d.ts.map +1 -1
  637. package/dist/voice/generation.js +215 -43
  638. package/dist/voice/generation.js.map +1 -1
  639. package/dist/voice/generation_tools.test.cjs +236 -0
  640. package/dist/voice/generation_tools.test.cjs.map +1 -0
  641. package/dist/voice/generation_tools.test.js +235 -0
  642. package/dist/voice/generation_tools.test.js.map +1 -0
  643. package/dist/voice/index.cjs +33 -2
  644. package/dist/voice/index.cjs.map +1 -1
  645. package/dist/voice/index.d.cts +8 -2
  646. package/dist/voice/index.d.ts +8 -2
  647. package/dist/voice/index.d.ts.map +1 -1
  648. package/dist/voice/index.js +19 -2
  649. package/dist/voice/index.js.map +1 -1
  650. package/dist/voice/interruption_detection.test.cjs +114 -0
  651. package/dist/voice/interruption_detection.test.cjs.map +1 -0
  652. package/dist/voice/interruption_detection.test.js +113 -0
  653. package/dist/voice/interruption_detection.test.js.map +1 -0
  654. package/dist/voice/io.cjs +66 -6
  655. package/dist/voice/io.cjs.map +1 -1
  656. package/dist/voice/io.d.cts +67 -7
  657. package/dist/voice/io.d.ts +67 -7
  658. package/dist/voice/io.d.ts.map +1 -1
  659. package/dist/voice/io.js +62 -5
  660. package/dist/voice/io.js.map +1 -1
  661. package/dist/voice/recorder_io/index.cjs +23 -0
  662. package/dist/voice/recorder_io/index.cjs.map +1 -0
  663. package/dist/voice/recorder_io/index.d.cts +2 -0
  664. package/dist/voice/recorder_io/index.d.ts +2 -0
  665. package/dist/voice/recorder_io/index.d.ts.map +1 -0
  666. package/dist/voice/recorder_io/index.js +2 -0
  667. package/dist/voice/recorder_io/index.js.map +1 -0
  668. package/dist/voice/recorder_io/recorder_io.cjs +607 -0
  669. package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
  670. package/dist/voice/recorder_io/recorder_io.d.cts +106 -0
  671. package/dist/voice/recorder_io/recorder_io.d.ts +106 -0
  672. package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
  673. package/dist/voice/recorder_io/recorder_io.js +573 -0
  674. package/dist/voice/recorder_io/recorder_io.js.map +1 -0
  675. package/dist/voice/remote_session.cjs +922 -0
  676. package/dist/voice/remote_session.cjs.map +1 -0
  677. package/dist/voice/remote_session.d.cts +108 -0
  678. package/dist/voice/remote_session.d.ts +108 -0
  679. package/dist/voice/remote_session.d.ts.map +1 -0
  680. package/dist/voice/remote_session.js +887 -0
  681. package/dist/voice/remote_session.js.map +1 -0
  682. package/dist/voice/report.cjs +88 -0
  683. package/dist/voice/report.cjs.map +1 -0
  684. package/dist/voice/report.d.cts +49 -0
  685. package/dist/voice/report.d.ts +49 -0
  686. package/dist/voice/report.d.ts.map +1 -0
  687. package/dist/voice/report.js +63 -0
  688. package/dist/voice/report.js.map +1 -0
  689. package/dist/voice/report.test.cjs +121 -0
  690. package/dist/voice/report.test.cjs.map +1 -0
  691. package/dist/voice/report.test.js +120 -0
  692. package/dist/voice/report.test.js.map +1 -0
  693. package/dist/voice/room_io/_input.cjs +40 -7
  694. package/dist/voice/room_io/_input.cjs.map +1 -1
  695. package/dist/voice/room_io/_input.d.cts +5 -2
  696. package/dist/voice/room_io/_input.d.ts +5 -2
  697. package/dist/voice/room_io/_input.d.ts.map +1 -1
  698. package/dist/voice/room_io/_input.js +41 -8
  699. package/dist/voice/room_io/_input.js.map +1 -1
  700. package/dist/voice/room_io/_output.cjs +19 -11
  701. package/dist/voice/room_io/_output.cjs.map +1 -1
  702. package/dist/voice/room_io/_output.d.cts +7 -4
  703. package/dist/voice/room_io/_output.d.ts +7 -4
  704. package/dist/voice/room_io/_output.d.ts.map +1 -1
  705. package/dist/voice/room_io/_output.js +20 -12
  706. package/dist/voice/room_io/_output.js.map +1 -1
  707. package/dist/voice/room_io/room_io.cjs +33 -6
  708. package/dist/voice/room_io/room_io.cjs.map +1 -1
  709. package/dist/voice/room_io/room_io.d.cts +29 -9
  710. package/dist/voice/room_io/room_io.d.ts +29 -9
  711. package/dist/voice/room_io/room_io.d.ts.map +1 -1
  712. package/dist/voice/room_io/room_io.js +33 -7
  713. package/dist/voice/room_io/room_io.js.map +1 -1
  714. package/dist/voice/speech_handle.cjs +22 -4
  715. package/dist/voice/speech_handle.cjs.map +1 -1
  716. package/dist/voice/speech_handle.d.cts +17 -2
  717. package/dist/voice/speech_handle.d.ts +17 -2
  718. package/dist/voice/speech_handle.d.ts.map +1 -1
  719. package/dist/voice/speech_handle.js +21 -4
  720. package/dist/voice/speech_handle.js.map +1 -1
  721. package/dist/voice/testing/fake_llm.cjs +127 -0
  722. package/dist/voice/testing/fake_llm.cjs.map +1 -0
  723. package/dist/voice/testing/fake_llm.d.cts +30 -0
  724. package/dist/voice/testing/fake_llm.d.ts +30 -0
  725. package/dist/voice/testing/fake_llm.d.ts.map +1 -0
  726. package/dist/voice/testing/fake_llm.js +103 -0
  727. package/dist/voice/testing/fake_llm.js.map +1 -0
  728. package/dist/voice/testing/index.cjs +57 -0
  729. package/dist/voice/testing/index.cjs.map +1 -0
  730. package/dist/voice/testing/index.d.cts +21 -0
  731. package/dist/voice/testing/index.d.ts +21 -0
  732. package/dist/voice/testing/index.d.ts.map +1 -0
  733. package/dist/voice/testing/index.js +35 -0
  734. package/dist/voice/testing/index.js.map +1 -0
  735. package/dist/voice/testing/run_result.cjs +817 -0
  736. package/dist/voice/testing/run_result.cjs.map +1 -0
  737. package/dist/voice/testing/run_result.d.cts +385 -0
  738. package/dist/voice/testing/run_result.d.ts +385 -0
  739. package/dist/voice/testing/run_result.d.ts.map +1 -0
  740. package/dist/voice/testing/run_result.js +790 -0
  741. package/dist/voice/testing/run_result.js.map +1 -0
  742. package/dist/voice/testing/types.cjs +46 -0
  743. package/dist/voice/testing/types.cjs.map +1 -0
  744. package/dist/voice/testing/types.d.cts +83 -0
  745. package/dist/voice/testing/types.d.ts +83 -0
  746. package/dist/voice/testing/types.d.ts.map +1 -0
  747. package/dist/voice/testing/types.js +19 -0
  748. package/dist/voice/testing/types.js.map +1 -0
  749. package/dist/voice/transcription/synchronizer.cjs +139 -15
  750. package/dist/voice/transcription/synchronizer.cjs.map +1 -1
  751. package/dist/voice/transcription/synchronizer.d.cts +35 -4
  752. package/dist/voice/transcription/synchronizer.d.ts +35 -4
  753. package/dist/voice/transcription/synchronizer.d.ts.map +1 -1
  754. package/dist/voice/transcription/synchronizer.js +143 -16
  755. package/dist/voice/transcription/synchronizer.js.map +1 -1
  756. package/dist/voice/transcription/synchronizer.test.cjs +151 -0
  757. package/dist/voice/transcription/synchronizer.test.cjs.map +1 -0
  758. package/dist/voice/transcription/synchronizer.test.js +150 -0
  759. package/dist/voice/transcription/synchronizer.test.js.map +1 -0
  760. package/dist/voice/turn_config/endpointing.cjs +33 -0
  761. package/dist/voice/turn_config/endpointing.cjs.map +1 -0
  762. package/dist/voice/turn_config/endpointing.d.cts +30 -0
  763. package/dist/voice/turn_config/endpointing.d.ts +30 -0
  764. package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
  765. package/dist/voice/turn_config/endpointing.js +9 -0
  766. package/dist/voice/turn_config/endpointing.js.map +1 -0
  767. package/dist/voice/turn_config/interruption.cjs +37 -0
  768. package/dist/voice/turn_config/interruption.cjs.map +1 -0
  769. package/dist/voice/turn_config/interruption.d.cts +53 -0
  770. package/dist/voice/turn_config/interruption.d.ts +53 -0
  771. package/dist/voice/turn_config/interruption.d.ts.map +1 -0
  772. package/dist/voice/turn_config/interruption.js +13 -0
  773. package/dist/voice/turn_config/interruption.js.map +1 -0
  774. package/dist/voice/turn_config/turn_handling.cjs +35 -0
  775. package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
  776. package/dist/voice/turn_config/turn_handling.d.cts +36 -0
  777. package/dist/voice/turn_config/turn_handling.d.ts +36 -0
  778. package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
  779. package/dist/voice/turn_config/turn_handling.js +11 -0
  780. package/dist/voice/turn_config/turn_handling.js.map +1 -0
  781. package/dist/voice/turn_config/utils.cjs +157 -0
  782. package/dist/voice/turn_config/utils.cjs.map +1 -0
  783. package/dist/voice/turn_config/utils.d.cts +37 -0
  784. package/dist/voice/turn_config/utils.d.ts +37 -0
  785. package/dist/voice/turn_config/utils.d.ts.map +1 -0
  786. package/dist/voice/turn_config/utils.js +131 -0
  787. package/dist/voice/turn_config/utils.js.map +1 -0
  788. package/dist/voice/turn_config/utils.test.cjs +128 -0
  789. package/dist/voice/turn_config/utils.test.cjs.map +1 -0
  790. package/dist/voice/turn_config/utils.test.js +127 -0
  791. package/dist/voice/turn_config/utils.test.js.map +1 -0
  792. package/dist/voice/utils.cjs +47 -0
  793. package/dist/voice/utils.cjs.map +1 -0
  794. package/dist/voice/utils.d.cts +4 -0
  795. package/dist/voice/utils.d.ts +4 -0
  796. package/dist/voice/utils.d.ts.map +1 -0
  797. package/dist/voice/utils.js +23 -0
  798. package/dist/voice/utils.js.map +1 -0
  799. package/dist/worker.cjs +44 -52
  800. package/dist/worker.cjs.map +1 -1
  801. package/dist/worker.d.cts +18 -8
  802. package/dist/worker.d.ts +18 -8
  803. package/dist/worker.d.ts.map +1 -1
  804. package/dist/worker.js +43 -43
  805. package/dist/worker.js.map +1 -1
  806. package/package.json +32 -12
  807. package/resources/NOTICE +2 -0
  808. package/resources/keyboard-typing.ogg +0 -0
  809. package/resources/keyboard-typing2.ogg +0 -0
  810. package/resources/office-ambience.ogg +0 -0
  811. package/src/audio.ts +132 -1
  812. package/src/beta/index.ts +9 -0
  813. package/src/beta/workflows/index.ts +9 -0
  814. package/src/beta/workflows/task_group.ts +194 -0
  815. package/src/cli.ts +57 -66
  816. package/src/connection_pool.test.ts +346 -0
  817. package/src/connection_pool.ts +307 -0
  818. package/src/constants.ts +14 -0
  819. package/src/cpu.test.ts +239 -0
  820. package/src/cpu.ts +173 -0
  821. package/src/http_server.ts +18 -6
  822. package/src/index.ts +15 -13
  823. package/src/inference/api_protos.ts +85 -2
  824. package/src/inference/index.ts +32 -4
  825. package/src/inference/interruption/defaults.ts +51 -0
  826. package/src/inference/interruption/errors.ts +25 -0
  827. package/src/inference/interruption/http_transport.ts +206 -0
  828. package/src/inference/interruption/interruption_cache_entry.ts +50 -0
  829. package/src/inference/interruption/interruption_detector.ts +204 -0
  830. package/src/inference/interruption/interruption_stream.ts +467 -0
  831. package/src/inference/interruption/types.ts +84 -0
  832. package/src/inference/interruption/utils.test.ts +132 -0
  833. package/src/inference/interruption/utils.ts +137 -0
  834. package/src/inference/interruption/ws_transport.ts +406 -0
  835. package/src/inference/llm.ts +214 -163
  836. package/src/inference/stt.test.ts +253 -0
  837. package/src/inference/stt.ts +449 -208
  838. package/src/inference/tts.test.ts +267 -0
  839. package/src/inference/tts.ts +377 -115
  840. package/src/inference/utils.ts +30 -2
  841. package/src/ipc/inference_proc_executor.ts +11 -3
  842. package/src/ipc/inference_proc_lazy_main.ts +13 -1
  843. package/src/ipc/job_proc_executor.ts +11 -1
  844. package/src/ipc/job_proc_lazy_main.ts +86 -20
  845. package/src/ipc/supervised_proc.test.ts +153 -0
  846. package/src/ipc/supervised_proc.ts +39 -10
  847. package/src/job.ts +120 -1
  848. package/src/language.test.ts +62 -0
  849. package/src/language.ts +380 -0
  850. package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
  851. package/src/llm/chat_context.test.ts +655 -0
  852. package/src/llm/chat_context.ts +412 -2
  853. package/src/llm/fallback_adapter.test.ts +238 -0
  854. package/src/llm/fallback_adapter.ts +391 -0
  855. package/src/llm/index.ts +11 -0
  856. package/src/llm/llm.ts +77 -12
  857. package/src/llm/provider_format/google.test.ts +72 -1
  858. package/src/llm/provider_format/google.ts +10 -6
  859. package/src/llm/provider_format/index.ts +7 -2
  860. package/src/llm/provider_format/openai.test.ts +480 -2
  861. package/src/llm/provider_format/openai.ts +152 -21
  862. package/src/llm/provider_format/utils.ts +11 -5
  863. package/src/llm/realtime.ts +23 -2
  864. package/src/llm/remote_chat_context.ts +2 -2
  865. package/src/llm/tool_context.test.ts +210 -1
  866. package/src/llm/tool_context.ts +115 -17
  867. package/src/llm/utils.ts +24 -16
  868. package/src/llm/zod-utils.test.ts +577 -0
  869. package/src/llm/zod-utils.ts +153 -0
  870. package/src/log.ts +71 -19
  871. package/src/metrics/base.ts +78 -19
  872. package/src/metrics/index.ts +12 -0
  873. package/src/metrics/model_usage.test.ts +545 -0
  874. package/src/metrics/model_usage.ts +262 -0
  875. package/src/metrics/usage_collector.ts +14 -3
  876. package/src/metrics/utils.ts +27 -7
  877. package/src/stream/deferred_stream.test.ts +3 -3
  878. package/src/stream/deferred_stream.ts +43 -11
  879. package/src/stream/index.ts +1 -0
  880. package/src/stream/multi_input_stream.test.ts +545 -0
  881. package/src/stream/multi_input_stream.ts +172 -0
  882. package/src/stream/stream_channel.test.ts +37 -0
  883. package/src/stream/stream_channel.ts +43 -3
  884. package/src/stt/stream_adapter.ts +30 -9
  885. package/src/stt/stt.ts +131 -22
  886. package/src/telemetry/index.ts +28 -0
  887. package/src/telemetry/logging.ts +55 -0
  888. package/src/telemetry/otel_http_exporter.ts +218 -0
  889. package/src/telemetry/pino_otel_transport.ts +265 -0
  890. package/src/telemetry/trace_types.ts +109 -0
  891. package/src/telemetry/traces.ts +673 -0
  892. package/src/telemetry/utils.ts +61 -0
  893. package/src/tokenize/basic/sentence.ts +3 -3
  894. package/src/tokenize/tokenizer.test.ts +4 -0
  895. package/src/transcription.ts +6 -0
  896. package/src/tts/fallback_adapter.ts +579 -0
  897. package/src/tts/index.ts +1 -0
  898. package/src/tts/stream_adapter.ts +38 -8
  899. package/src/tts/tts.ts +245 -62
  900. package/src/types.ts +62 -33
  901. package/src/utils.test.ts +90 -10
  902. package/src/utils.ts +176 -31
  903. package/src/vad.ts +42 -18
  904. package/src/version.ts +1 -1
  905. package/src/voice/agent.test.ts +347 -2
  906. package/src/voice/agent.ts +346 -44
  907. package/src/voice/agent_activity.test.ts +194 -0
  908. package/src/voice/agent_activity.ts +1457 -388
  909. package/src/voice/agent_session.ts +817 -112
  910. package/src/voice/audio_recognition.ts +845 -70
  911. package/src/voice/audio_recognition_span.test.ts +341 -0
  912. package/src/voice/avatar/datastream_io.ts +9 -1
  913. package/src/voice/background_audio.ts +494 -0
  914. package/src/voice/events.ts +27 -7
  915. package/src/voice/generation.ts +310 -56
  916. package/src/voice/generation_tools.test.ts +268 -0
  917. package/src/voice/index.ts +17 -3
  918. package/src/voice/interruption_detection.test.ts +151 -0
  919. package/src/voice/io.ts +115 -12
  920. package/src/voice/recorder_io/index.ts +4 -0
  921. package/src/voice/recorder_io/recorder_io.ts +783 -0
  922. package/src/voice/remote_session.ts +1083 -0
  923. package/src/voice/report.test.ts +136 -0
  924. package/src/voice/report.ts +140 -0
  925. package/src/voice/room_io/_input.ts +45 -10
  926. package/src/voice/room_io/_output.ts +26 -14
  927. package/src/voice/room_io/room_io.ts +67 -22
  928. package/src/voice/speech_handle.ts +38 -6
  929. package/src/voice/testing/fake_llm.ts +138 -0
  930. package/src/voice/testing/index.ts +52 -0
  931. package/src/voice/testing/run_result.ts +995 -0
  932. package/src/voice/testing/types.ts +118 -0
  933. package/src/voice/transcription/synchronizer.test.ts +206 -0
  934. package/src/voice/transcription/synchronizer.ts +204 -19
  935. package/src/voice/turn_config/endpointing.ts +33 -0
  936. package/src/voice/turn_config/interruption.ts +56 -0
  937. package/src/voice/turn_config/turn_handling.ts +45 -0
  938. package/src/voice/turn_config/utils.test.ts +148 -0
  939. package/src/voice/turn_config/utils.ts +167 -0
  940. package/src/voice/utils.ts +29 -0
  941. package/src/worker.ts +92 -78
  942. package/src/llm/__snapshots__/utils.test.ts.snap +0 -65
@@ -0,0 +1,239 @@
1
+ // SPDX-FileCopyrightText: 2025 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import os from 'node:os';
6
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
7
+ import { CGroupV1CpuMonitor, CGroupV2CpuMonitor, DefaultCpuMonitor, getCpuMonitor } from './cpu.js';
8
+
9
+ vi.mock('node:fs', () => ({
10
+ existsSync: vi.fn(() => false),
11
+ readFileSync: vi.fn(() => ''),
12
+ }));
13
+
14
+ const mockExistsSync = vi.mocked(existsSync);
15
+ const mockReadFileSync = vi.mocked(readFileSync);
16
+
17
+ describe('cpu', () => {
18
+ beforeEach(() => {
19
+ vi.clearAllMocks();
20
+ delete process.env.NUM_CPUS;
21
+ });
22
+
23
+ afterEach(() => {
24
+ delete process.env.NUM_CPUS;
25
+ });
26
+
27
+ describe('getCpuMonitor', () => {
28
+ it('returns CGroupV2CpuMonitor when /sys/fs/cgroup/cpu.stat exists', () => {
29
+ mockExistsSync.mockImplementation((p) => p === '/sys/fs/cgroup/cpu.stat');
30
+ const monitor = getCpuMonitor();
31
+ expect(monitor).toBeInstanceOf(CGroupV2CpuMonitor);
32
+ });
33
+
34
+ it('returns CGroupV1CpuMonitor when cgroup v1 paths exist', () => {
35
+ mockExistsSync.mockImplementation((p) => p === '/sys/fs/cgroup/cpuacct/cpuacct.usage');
36
+ const monitor = getCpuMonitor();
37
+ expect(monitor).toBeInstanceOf(CGroupV1CpuMonitor);
38
+ });
39
+
40
+ it('returns DefaultCpuMonitor when no cgroup paths exist', () => {
41
+ mockExistsSync.mockReturnValue(false);
42
+ const monitor = getCpuMonitor();
43
+ expect(monitor).toBeInstanceOf(DefaultCpuMonitor);
44
+ });
45
+ });
46
+
47
+ describe('DefaultCpuMonitor', () => {
48
+ it('returns os.cpus().length for cpuCount', () => {
49
+ const monitor = new DefaultCpuMonitor();
50
+ expect(monitor.cpuCount()).toBe(os.cpus().length);
51
+ });
52
+
53
+ it('respects NUM_CPUS env var', () => {
54
+ process.env.NUM_CPUS = '4.5';
55
+ const monitor = new DefaultCpuMonitor();
56
+ expect(monitor.cpuCount()).toBe(4.5);
57
+ });
58
+
59
+ it('ignores invalid NUM_CPUS', () => {
60
+ process.env.NUM_CPUS = 'notanumber';
61
+ const monitor = new DefaultCpuMonitor();
62
+ expect(monitor.cpuCount()).toBe(os.cpus().length);
63
+ });
64
+
65
+ it('cpuPercent returns value in [0, 1]', async () => {
66
+ const monitor = new DefaultCpuMonitor();
67
+ const result = await monitor.cpuPercent(50);
68
+ expect(result).toBeGreaterThanOrEqual(0);
69
+ expect(result).toBeLessThanOrEqual(1);
70
+ }, 10_000);
71
+ });
72
+
73
+ describe('CGroupV2CpuMonitor', () => {
74
+ it('returns quota/period for cpuCount', () => {
75
+ mockReadFileSync.mockImplementation((p) => {
76
+ if (String(p) === '/sys/fs/cgroup/cpu.max') return '200000 100000';
77
+ return '';
78
+ });
79
+ const monitor = new CGroupV2CpuMonitor();
80
+ expect(monitor.cpuCount()).toBe(2);
81
+ });
82
+
83
+ it('falls back to os.cpus().length when quota is max', () => {
84
+ mockReadFileSync.mockImplementation((p) => {
85
+ if (String(p) === '/sys/fs/cgroup/cpu.max') return 'max 100000';
86
+ return '';
87
+ });
88
+ const monitor = new CGroupV2CpuMonitor();
89
+ expect(monitor.cpuCount()).toBe(os.cpus().length);
90
+ });
91
+
92
+ it('handles missing cpu.max gracefully', () => {
93
+ mockReadFileSync.mockImplementation(() => {
94
+ throw new Error('ENOENT');
95
+ });
96
+ const monitor = new CGroupV2CpuMonitor();
97
+ expect(monitor.cpuCount()).toBe(os.cpus().length);
98
+ });
99
+
100
+ it('respects NUM_CPUS env var', () => {
101
+ process.env.NUM_CPUS = '3';
102
+ const monitor = new CGroupV2CpuMonitor();
103
+ expect(monitor.cpuCount()).toBe(3);
104
+ });
105
+
106
+ it('cpuPercent computes correct value from usage_usec deltas', async () => {
107
+ let callCount = 0;
108
+ mockReadFileSync.mockImplementation((p) => {
109
+ if (String(p) === '/sys/fs/cgroup/cpu.stat') {
110
+ callCount++;
111
+ // Two reads: 1,000,000 usec apart => 1s of CPU usage over the interval
112
+ return callCount <= 1
113
+ ? 'usage_usec 1000000\nuser_usec 800000\nsystem_usec 200000'
114
+ : 'usage_usec 2000000\nuser_usec 1600000\nsystem_usec 400000';
115
+ }
116
+ if (String(p) === '/sys/fs/cgroup/cpu.max') return '200000 100000';
117
+ return '';
118
+ });
119
+ const monitor = new CGroupV2CpuMonitor();
120
+ // interval=100ms, 2 cpus, 1s of usage => 1/(0.1*2) = 5, clamped to 1
121
+ const result = await monitor.cpuPercent(100);
122
+ expect(result).toBe(1);
123
+ }, 10_000);
124
+
125
+ it('cpuPercent returns fractional load', async () => {
126
+ let callCount = 0;
127
+ mockReadFileSync.mockImplementation((p) => {
128
+ if (String(p) === '/sys/fs/cgroup/cpu.stat') {
129
+ callCount++;
130
+ // 50,000 usec delta => 0.05s of CPU over 0.1s on 2 cpus => 0.05/(0.1*2) = 0.25
131
+ return callCount <= 1 ? 'usage_usec 1000000\n' : 'usage_usec 1050000\n';
132
+ }
133
+ if (String(p) === '/sys/fs/cgroup/cpu.max') return '200000 100000';
134
+ return '';
135
+ });
136
+ const monitor = new CGroupV2CpuMonitor();
137
+ const result = await monitor.cpuPercent(100);
138
+ expect(result).toBeCloseTo(0.25, 1);
139
+ }, 10_000);
140
+
141
+ it('throws when usage_usec is missing from cpu.stat', async () => {
142
+ mockReadFileSync.mockImplementation((p) => {
143
+ if (String(p) === '/sys/fs/cgroup/cpu.stat') return 'user_usec 800000\nsystem_usec 200000';
144
+ return '';
145
+ });
146
+ const monitor = new CGroupV2CpuMonitor();
147
+ await expect(() => monitor.cpuPercent(50)).rejects.toThrow('Failed to read CPU usage');
148
+ });
149
+ });
150
+
151
+ describe('CGroupV1CpuMonitor', () => {
152
+ it('returns quota/period for cpuCount', () => {
153
+ mockReadFileSync.mockImplementation((p) => {
154
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_quota_us') return '200000';
155
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_period_us') return '100000';
156
+ return '';
157
+ });
158
+ const monitor = new CGroupV1CpuMonitor();
159
+ expect(monitor.cpuCount()).toBe(2);
160
+ });
161
+
162
+ it('defaults to 2.0 when quota is -1', () => {
163
+ mockReadFileSync.mockImplementation((p) => {
164
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_quota_us') return '-1';
165
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_period_us') return '100000';
166
+ return '';
167
+ });
168
+ const monitor = new CGroupV1CpuMonitor();
169
+ expect(monitor.cpuCount()).toBe(2.0);
170
+ });
171
+
172
+ it('defaults to 2.0 when quota file is unreadable', () => {
173
+ mockReadFileSync.mockImplementation(() => {
174
+ throw new Error('ENOENT');
175
+ });
176
+ const monitor = new CGroupV1CpuMonitor();
177
+ expect(monitor.cpuCount()).toBe(2.0);
178
+ });
179
+
180
+ it('clamps cpuCount to minimum 1.0', () => {
181
+ mockReadFileSync.mockImplementation((p) => {
182
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_quota_us') return '50000';
183
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_period_us') return '100000';
184
+ return '';
185
+ });
186
+ const monitor = new CGroupV1CpuMonitor();
187
+ expect(monitor.cpuCount()).toBe(1.0);
188
+ });
189
+
190
+ it('respects NUM_CPUS env var', () => {
191
+ process.env.NUM_CPUS = '8';
192
+ const monitor = new CGroupV1CpuMonitor();
193
+ expect(monitor.cpuCount()).toBe(8);
194
+ });
195
+
196
+ it('cpuPercent computes correct value from nanosecond deltas', async () => {
197
+ let callCount = 0;
198
+ mockReadFileSync.mockImplementation((p) => {
199
+ if (String(p) === '/sys/fs/cgroup/cpuacct/cpuacct.usage') {
200
+ callCount++;
201
+ // 100_000_000 ns delta = 0.1s CPU over 0.1s interval on 2 cpus => 0.1/(0.1*2) = 0.5
202
+ return callCount <= 1 ? '1000000000' : '1100000000';
203
+ }
204
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_quota_us') return '200000';
205
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_period_us') return '100000';
206
+ return '';
207
+ });
208
+ const monitor = new CGroupV1CpuMonitor();
209
+ const result = await monitor.cpuPercent(100);
210
+ expect(result).toBeCloseTo(0.5, 1);
211
+ }, 10_000);
212
+
213
+ it('clamps cpuPercent output to [0, 1]', async () => {
214
+ let callCount = 0;
215
+ mockReadFileSync.mockImplementation((p) => {
216
+ if (String(p) === '/sys/fs/cgroup/cpuacct/cpuacct.usage') {
217
+ callCount++;
218
+ // Huge delta => would exceed 1.0 without clamping
219
+ return callCount <= 1 ? '0' : '10000000000';
220
+ }
221
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_quota_us') return '100000';
222
+ if (String(p) === '/sys/fs/cgroup/cpu/cpu.cfs_period_us') return '100000';
223
+ return '';
224
+ });
225
+ const monitor = new CGroupV1CpuMonitor();
226
+ const result = await monitor.cpuPercent(100);
227
+ expect(result).toBeLessThanOrEqual(1);
228
+ expect(result).toBeGreaterThanOrEqual(0);
229
+ }, 10_000);
230
+
231
+ it('throws when cpuacct.usage is unreadable', async () => {
232
+ mockReadFileSync.mockImplementation(() => {
233
+ throw new Error('ENOENT');
234
+ });
235
+ const monitor = new CGroupV1CpuMonitor();
236
+ await expect(() => monitor.cpuPercent(50)).rejects.toThrow('Failed to read cpuacct.usage');
237
+ });
238
+ });
239
+ });
package/src/cpu.ts ADDED
@@ -0,0 +1,173 @@
1
+ // SPDX-FileCopyrightText: 2025 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import os from 'node:os';
6
+
7
+ /** @internal */
8
+ export interface CpuMonitor {
9
+ cpuCount(): number;
10
+ cpuPercent(intervalMs: number): Promise<number>;
11
+ }
12
+
13
+ function cpuCountFromEnv(): number | undefined {
14
+ const raw = process.env.NUM_CPUS;
15
+ if (raw === undefined) return undefined;
16
+ const parsed = parseFloat(raw);
17
+ if (Number.isNaN(parsed)) {
18
+ console.warn('Failed to parse NUM_CPUS from environment');
19
+ return undefined;
20
+ }
21
+ return parsed;
22
+ }
23
+
24
+ /** @internal */
25
+ export class DefaultCpuMonitor implements CpuMonitor {
26
+ cpuCount(): number {
27
+ return cpuCountFromEnv() ?? (os.cpus().length || 1);
28
+ }
29
+
30
+ cpuPercent(intervalMs: number): Promise<number> {
31
+ return new Promise((resolve) => {
32
+ const cpus1 = os.cpus();
33
+ const timer = setTimeout(() => {
34
+ const cpus2 = os.cpus();
35
+ let idle = 0;
36
+ let total = 0;
37
+ for (let i = 0; i < cpus1.length; i++) {
38
+ const cpu1 = cpus1[i]!.times;
39
+ const cpu2 = cpus2[i]!.times;
40
+ idle += cpu2.idle - cpu1.idle;
41
+ const total1 = Object.values(cpu1).reduce((acc, v) => acc + v, 0);
42
+ const total2 = Object.values(cpu2).reduce((acc, v) => acc + v, 0);
43
+ total += total2 - total1;
44
+ }
45
+ resolve(total === 0 ? 0 : Math.max(Math.min(+(1 - idle / total).toFixed(2), 1), 0));
46
+ }, intervalMs);
47
+ timer.unref();
48
+ });
49
+ }
50
+ }
51
+
52
+ /** @internal */
53
+ export class CGroupV2CpuMonitor implements CpuMonitor {
54
+ cpuCount(): number {
55
+ const envCpus = cpuCountFromEnv();
56
+ if (envCpus !== undefined) return envCpus;
57
+ const [quota, period] = this.#readCpuMax();
58
+ if (quota === 'max') return os.cpus().length || 1;
59
+ return parseInt(quota) / period;
60
+ }
61
+
62
+ cpuPercent(intervalMs: number): Promise<number> {
63
+ return new Promise((resolve, reject) => {
64
+ const usageStart = this.#readCpuUsage();
65
+ const timer = setTimeout(() => {
66
+ try {
67
+ const usageEnd = this.#readCpuUsage();
68
+ const usageDiffUsec = usageEnd - usageStart;
69
+ const usageSeconds = usageDiffUsec / 1_000_000;
70
+ const numCpus = this.cpuCount();
71
+ const intervalSeconds = intervalMs / 1000;
72
+ const percent = usageSeconds / (intervalSeconds * numCpus);
73
+ resolve(Math.max(Math.min(percent, 1), 0));
74
+ } catch (e) {
75
+ reject(e);
76
+ }
77
+ }, intervalMs);
78
+ timer.unref();
79
+ });
80
+ }
81
+
82
+ #readCpuMax(): [string, number] {
83
+ try {
84
+ const data = readFileSync('/sys/fs/cgroup/cpu.max', 'utf-8').trim().split(/\s+/);
85
+ const quota = data[0] ?? 'max';
86
+ const period = data[1] ? parseInt(data[1]) : 100_000;
87
+ return [quota, Number.isNaN(period) ? 100_000 : period];
88
+ } catch {
89
+ return ['max', 100_000];
90
+ }
91
+ }
92
+
93
+ #readCpuUsage(): number {
94
+ const content = readFileSync('/sys/fs/cgroup/cpu.stat', 'utf-8');
95
+ for (const line of content.split('\n')) {
96
+ if (line.startsWith('usage_usec')) {
97
+ return parseInt(line.split(/\s+/)[1]!);
98
+ }
99
+ }
100
+ throw new Error('Failed to read CPU usage from /sys/fs/cgroup/cpu.stat');
101
+ }
102
+ }
103
+
104
+ /** @internal */
105
+ export class CGroupV1CpuMonitor implements CpuMonitor {
106
+ cpuCount(): number {
107
+ const envCpus = cpuCountFromEnv();
108
+ if (envCpus !== undefined) return envCpus;
109
+ const [quota, period] = this.#readCfsQuotaAndPeriod();
110
+ if (quota === null || quota < 0 || period === null || period <= 0) {
111
+ // do not use the host CPU count as it could overstate the number available to the container
112
+ return 2.0;
113
+ }
114
+ return Math.max(quota / period, 1.0);
115
+ }
116
+
117
+ cpuPercent(intervalMs: number): Promise<number> {
118
+ return new Promise((resolve, reject) => {
119
+ const usageStart = this.#readCpuacctUsage();
120
+ const timer = setTimeout(() => {
121
+ try {
122
+ const usageEnd = this.#readCpuacctUsage();
123
+ const usageDiffNs = usageEnd - usageStart;
124
+ const usageSeconds = usageDiffNs / 1_000_000_000;
125
+ const numCpus = this.cpuCount();
126
+ const intervalSeconds = intervalMs / 1000;
127
+ const percent = usageSeconds / (intervalSeconds * numCpus);
128
+ resolve(Math.max(Math.min(percent, 1.0), 0.0));
129
+ } catch (e) {
130
+ reject(e);
131
+ }
132
+ }, intervalMs);
133
+ timer.unref();
134
+ });
135
+ }
136
+
137
+ #readCfsQuotaAndPeriod(): [number | null, number | null] {
138
+ const quota = readFirstInt('/sys/fs/cgroup/cpu/cpu.cfs_quota_us');
139
+ const period = readFirstInt('/sys/fs/cgroup/cpu/cpu.cfs_period_us');
140
+ return [quota, period];
141
+ }
142
+
143
+ #readCpuacctUsage(): number {
144
+ const value = readFirstInt('/sys/fs/cgroup/cpuacct/cpuacct.usage');
145
+ if (value === null) {
146
+ throw new Error('Failed to read cpuacct.usage for cgroup v1');
147
+ }
148
+ return value;
149
+ }
150
+ }
151
+
152
+ function readFirstInt(path: string): number | null {
153
+ try {
154
+ const val = parseInt(readFileSync(path, 'utf-8').trim());
155
+ return Number.isNaN(val) ? null : val;
156
+ } catch {
157
+ return null;
158
+ }
159
+ }
160
+
161
+ function isCGroupV2(): boolean {
162
+ return existsSync('/sys/fs/cgroup/cpu.stat');
163
+ }
164
+
165
+ function isCGroupV1(): boolean {
166
+ return existsSync('/sys/fs/cgroup/cpuacct/cpuacct.usage');
167
+ }
168
+
169
+ export function getCpuMonitor(): CpuMonitor {
170
+ if (isCGroupV2()) return new CGroupV2CpuMonitor();
171
+ if (isCGroupV1()) return new CGroupV1CpuMonitor();
172
+ return new DefaultCpuMonitor();
173
+ }
@@ -4,10 +4,10 @@
4
4
  import { type IncomingMessage, type Server, type ServerResponse, createServer } from 'node:http';
5
5
  import { log } from './log.js';
6
6
 
7
- const healthCheck = async (res: ServerResponse) => {
8
- res.writeHead(200);
9
- res.end('OK');
10
- };
7
+ export interface HealthCheckResult {
8
+ healthy: boolean;
9
+ message: string;
10
+ }
11
11
 
12
12
  interface WorkerResponse {
13
13
  agent_name: string;
@@ -23,13 +23,25 @@ export class HTTPServer {
23
23
  app: Server;
24
24
  #logger = log();
25
25
 
26
- constructor(host: string, port: number, workerListener: () => WorkerResponse) {
26
+ constructor(
27
+ host: string,
28
+ port: number,
29
+ healthCheckListener: () => HealthCheckResult,
30
+ workerListener: () => WorkerResponse,
31
+ ) {
27
32
  this.host = host;
28
33
  this.port = port;
29
34
 
30
35
  this.app = createServer((req: IncomingMessage, res: ServerResponse) => {
31
36
  if (req.url === '/') {
32
- healthCheck(res);
37
+ const result = healthCheckListener();
38
+ if (result.healthy) {
39
+ res.writeHead(200);
40
+ res.end(result.message);
41
+ } else {
42
+ res.writeHead(503);
43
+ res.end(result.message);
44
+ }
33
45
  } else if (req.url === '/worker') {
34
46
  res.writeHead(200, { 'Content-Type': 'application/json' });
35
47
  res.end(JSON.stringify(workerListener()));
package/src/index.ts CHANGED
@@ -9,29 +9,31 @@
9
9
  * @see {@link https://docs.livekit.io/agents/overview | LiveKit Agents documentation}
10
10
  * @packageDocumentation
11
11
  */
12
- import * as cli from './cli.js';
13
- import * as inference from './inference/index.js';
14
- import * as ipc from './ipc/index.js';
15
- import * as llm from './llm/index.js';
16
- import * as metrics from './metrics/index.js';
17
- import * as stream from './stream/index.js';
18
- import * as stt from './stt/index.js';
19
- import * as tokenize from './tokenize/index.js';
20
- import * as tts from './tts/index.js';
21
- import * as voice from './voice/index.js';
22
-
23
12
  export * from './_exceptions.js';
24
13
  export * from './audio.js';
14
+ export * as beta from './beta/index.js';
15
+ export * as cli from './cli.js';
16
+ export * from './connection_pool.js';
25
17
  export * from './generator.js';
18
+ export * as inference from './inference/index.js';
26
19
  export * from './inference_runner.js';
20
+ export * as ipc from './ipc/index.js';
27
21
  export * from './job.js';
22
+ export * from './language.js';
23
+ export * as llm from './llm/index.js';
28
24
  export * from './log.js';
25
+ export * as metrics from './metrics/index.js';
29
26
  export * from './plugin.js';
27
+ export * as stream from './stream/index.js';
28
+ export * as stt from './stt/index.js';
29
+ export * as telemetry from './telemetry/index.js';
30
+ export * as tokenize from './tokenize/index.js';
30
31
  export * from './transcription.js';
32
+ export * as tts from './tts/index.js';
31
33
  export * from './types.js';
32
34
  export * from './utils.js';
33
35
  export * from './vad.js';
34
36
  export * from './version.js';
37
+ export * as voice from './voice/index.js';
38
+ export { createTimedString, isTimedString, type TimedString } from './voice/io.js';
35
39
  export * from './worker.js';
36
-
37
- export { cli, inference, ipc, llm, metrics, stream, stt, tokenize, tts, voice };
@@ -50,8 +50,8 @@ export const ttsSessionClosedEventSchema = z.object({
50
50
 
51
51
  export const ttsErrorEventSchema = z.object({
52
52
  type: z.literal('error'),
53
- message: z.string(),
54
- session_id: z.string(),
53
+ message: z.string().optional(),
54
+ session_id: z.string().optional(),
55
55
  });
56
56
 
57
57
  export const ttsClientEventSchema = z.discriminatedUnion('type', [
@@ -80,3 +80,86 @@ export type TtsSessionClosedEvent = z.infer<typeof ttsSessionClosedEventSchema>;
80
80
  export type TtsErrorEvent = z.infer<typeof ttsErrorEventSchema>;
81
81
  export type TtsClientEvent = z.infer<typeof ttsClientEventSchema>;
82
82
  export type TtsServerEvent = z.infer<typeof ttsServerEventSchema>;
83
+
84
+ // ============================================================================
85
+ // STT Schemas
86
+ // ============================================================================
87
+
88
+ // Word-level timing data
89
+ export const sttWordSchema = z.object({
90
+ word: z.string().optional().default(''),
91
+ start: z.number().optional().default(0),
92
+ end: z.number().optional().default(0),
93
+ confidence: z.number().optional().default(0.0),
94
+ extra: z.unknown().nullable().optional(),
95
+ });
96
+
97
+ // Interim transcript event
98
+ export const sttInterimTranscriptEventSchema = z.object({
99
+ type: z.literal('interim_transcript'),
100
+ session_id: z.string().optional(),
101
+ transcript: z.string().optional().default(''),
102
+ language: z.string().optional().default(''),
103
+ start: z.number().optional().default(0),
104
+ duration: z.number().optional().default(0),
105
+ confidence: z.number().optional().default(1.0),
106
+ words: z.array(sttWordSchema).optional().default([]),
107
+ extra: z.unknown().nullable().optional(),
108
+ });
109
+
110
+ // Final transcript event
111
+ export const sttFinalTranscriptEventSchema = z.object({
112
+ type: z.literal('final_transcript'),
113
+ session_id: z.string().optional(),
114
+ transcript: z.string().optional().default(''),
115
+ language: z.string().optional().default(''),
116
+ start: z.number().optional().default(0),
117
+ duration: z.number().optional().default(0),
118
+ confidence: z.number().optional().default(1.0),
119
+ words: z.array(sttWordSchema).optional().default([]),
120
+ extra: z.unknown().nullable().optional(),
121
+ });
122
+
123
+ // Session created event
124
+ export const sttSessionCreatedEventSchema = z.object({
125
+ type: z.literal('session.created'),
126
+ session_id: z.string().optional(),
127
+ });
128
+
129
+ // Session finalized event
130
+ export const sttSessionFinalizedEventSchema = z.object({
131
+ type: z.literal('session.finalized'),
132
+ });
133
+
134
+ // Session closed event
135
+ export const sttSessionClosedEventSchema = z.object({
136
+ type: z.literal('session.closed'),
137
+ });
138
+
139
+ // Error event
140
+ export const sttErrorEventSchema = z.object({
141
+ type: z.literal('error'),
142
+ message: z.string().optional(),
143
+ code: z.string().optional(),
144
+ });
145
+
146
+ // Discriminated union for all STT server events
147
+ export const sttServerEventSchema = z.discriminatedUnion('type', [
148
+ sttSessionCreatedEventSchema,
149
+ sttSessionFinalizedEventSchema,
150
+ sttSessionClosedEventSchema,
151
+ sttInterimTranscriptEventSchema,
152
+ sttFinalTranscriptEventSchema,
153
+ sttErrorEventSchema,
154
+ ]);
155
+
156
+ // Type exports for STT
157
+ export type SttWord = z.infer<typeof sttWordSchema>;
158
+ export type SttInterimTranscriptEvent = z.infer<typeof sttInterimTranscriptEventSchema>;
159
+ export type SttFinalTranscriptEvent = z.infer<typeof sttFinalTranscriptEventSchema>;
160
+ export type SttTranscriptEvent = SttInterimTranscriptEvent | SttFinalTranscriptEvent;
161
+ export type SttSessionCreatedEvent = z.infer<typeof sttSessionCreatedEventSchema>;
162
+ export type SttSessionFinalizedEvent = z.infer<typeof sttSessionFinalizedEventSchema>;
163
+ export type SttSessionClosedEvent = z.infer<typeof sttSessionClosedEventSchema>;
164
+ export type SttErrorEvent = z.infer<typeof sttErrorEventSchema>;
165
+ export type SttServerEvent = z.infer<typeof sttServerEventSchema>;
@@ -5,8 +5,36 @@ import * as llm from './llm.js';
5
5
  import * as stt from './stt.js';
6
6
  import * as tts from './tts.js';
7
7
 
8
- export { LLM, LLMStream, type AzureModels, type LLMModels, type LLMOptions } from './llm.js';
9
- export type { GatewayOptions, InferenceLLMOptions } from './llm.js';
10
- export { STT, type STTLanguages, type STTModels, type STTOptions } from './stt.js';
11
- export { TTS, type TTSModels, type TTSOptions } from './tts.js';
8
+ export {
9
+ LLM,
10
+ LLMStream,
11
+ type ChatCompletionOptions,
12
+ type GatewayOptions,
13
+ type InferenceLLMOptions,
14
+ type LLMModels,
15
+ } from './llm.js';
16
+
17
+ export {
18
+ normalizeSTTFallback,
19
+ parseSTTModelString,
20
+ STT,
21
+ type STTFallbackModel,
22
+ type STTFallbackModelType,
23
+ type STTLanguages,
24
+ type STTModels,
25
+ type ModelWithLanguage as STTModelString,
26
+ type STTOptions,
27
+ } from './stt.js';
28
+
29
+ export {
30
+ normalizeTTSFallback,
31
+ parseTTSModelString,
32
+ TTS,
33
+ type TTSFallbackModel,
34
+ type TTSFallbackModelType,
35
+ type TTSModels,
36
+ type ModelWithVoice as TTSModelString,
37
+ type TTSOptions,
38
+ } from './tts.js';
39
+
12
40
  export { llm, stt, tts };
@@ -0,0 +1,51 @@
1
+ // SPDX-FileCopyrightText: 2026 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import type { ApiConnectOptions } from './interruption_stream.js';
5
+ import type { InterruptionOptions } from './types.js';
6
+
7
+ export const MIN_INTERRUPTION_DURATION_IN_S = 0.025 * 2; // 25ms per frame, 2 consecutive frames
8
+ export const THRESHOLD = 0.5;
9
+ export const MAX_AUDIO_DURATION_IN_S = 3.0;
10
+ export const AUDIO_PREFIX_DURATION_IN_S = 0.5;
11
+ export const DETECTION_INTERVAL_IN_S = 0.1;
12
+ export const REMOTE_INFERENCE_TIMEOUT_IN_S = 0.7;
13
+ export const SAMPLE_RATE = 16000;
14
+ export const FRAMES_PER_SECOND = 40;
15
+ export const FRAME_DURATION_IN_S = 0.025; // 25ms per frame
16
+
17
+ export const apiConnectDefaults: ApiConnectOptions = {
18
+ maxRetries: 3,
19
+ retryInterval: 2_000,
20
+ timeout: 10_000,
21
+ } as const;
22
+
23
+ /**
24
+ * Calculate the retry interval using exponential backoff with jitter.
25
+ * Matches the Python implementation's _interval_for_retry behavior.
26
+ */
27
+ export function intervalForRetry(
28
+ attempt: number,
29
+ baseInterval: number = apiConnectDefaults.retryInterval,
30
+ ): number {
31
+ // Exponential backoff: baseInterval * 2^attempt with some jitter
32
+ const exponentialDelay = baseInterval * Math.pow(2, attempt);
33
+ // Add jitter (0-25% of the delay)
34
+ const jitter = exponentialDelay * Math.random() * 0.25;
35
+ return exponentialDelay + jitter;
36
+ }
37
+
38
+ // baseUrl and useProxy are resolved dynamically in the constructor
39
+ // to respect LIVEKIT_REMOTE_EOT_URL environment variable
40
+ export const interruptionOptionDefaults: Omit<InterruptionOptions, 'baseUrl' | 'useProxy'> = {
41
+ sampleRate: SAMPLE_RATE,
42
+ threshold: THRESHOLD,
43
+ minFrames: Math.ceil(MIN_INTERRUPTION_DURATION_IN_S * FRAMES_PER_SECOND),
44
+ maxAudioDurationInS: MAX_AUDIO_DURATION_IN_S,
45
+ audioPrefixDurationInS: AUDIO_PREFIX_DURATION_IN_S,
46
+ detectionIntervalInS: DETECTION_INTERVAL_IN_S,
47
+ inferenceTimeout: REMOTE_INFERENCE_TIMEOUT_IN_S * 1_000,
48
+ apiKey: process.env.LIVEKIT_API_KEY || '',
49
+ apiSecret: process.env.LIVEKIT_API_SECRET || '',
50
+ minInterruptionDurationInS: MIN_INTERRUPTION_DURATION_IN_S,
51
+ } as const;