@livekit/agents 1.0.47 → 1.1.0-dev.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 (444) hide show
  1. package/dist/beta/index.cjs +29 -0
  2. package/dist/beta/index.cjs.map +1 -0
  3. package/dist/beta/index.d.cts +2 -0
  4. package/dist/beta/index.d.ts +2 -0
  5. package/dist/beta/index.d.ts.map +1 -0
  6. package/dist/beta/index.js +7 -0
  7. package/dist/beta/index.js.map +1 -0
  8. package/dist/beta/workflows/index.cjs +29 -0
  9. package/dist/beta/workflows/index.cjs.map +1 -0
  10. package/dist/beta/workflows/index.d.cts +2 -0
  11. package/dist/beta/workflows/index.d.ts +2 -0
  12. package/dist/beta/workflows/index.d.ts.map +1 -0
  13. package/dist/beta/workflows/index.js +7 -0
  14. package/dist/beta/workflows/index.js.map +1 -0
  15. package/dist/beta/workflows/task_group.cjs +162 -0
  16. package/dist/beta/workflows/task_group.cjs.map +1 -0
  17. package/dist/beta/workflows/task_group.d.cts +32 -0
  18. package/dist/beta/workflows/task_group.d.ts +32 -0
  19. package/dist/beta/workflows/task_group.d.ts.map +1 -0
  20. package/dist/beta/workflows/task_group.js +138 -0
  21. package/dist/beta/workflows/task_group.js.map +1 -0
  22. package/dist/constants.cjs +27 -0
  23. package/dist/constants.cjs.map +1 -1
  24. package/dist/constants.d.cts +9 -0
  25. package/dist/constants.d.ts +9 -0
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +18 -0
  28. package/dist/constants.js.map +1 -1
  29. package/dist/index.cjs +3 -0
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +2 -1
  32. package/dist/index.d.ts +2 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/inference/api_protos.d.cts +12 -12
  37. package/dist/inference/api_protos.d.ts +12 -12
  38. package/dist/inference/interruption/defaults.cjs +81 -0
  39. package/dist/inference/interruption/defaults.cjs.map +1 -0
  40. package/dist/inference/interruption/defaults.d.cts +19 -0
  41. package/dist/inference/interruption/defaults.d.ts +19 -0
  42. package/dist/inference/interruption/defaults.d.ts.map +1 -0
  43. package/dist/inference/interruption/defaults.js +46 -0
  44. package/dist/inference/interruption/defaults.js.map +1 -0
  45. package/dist/inference/interruption/errors.cjs +44 -0
  46. package/dist/inference/interruption/errors.cjs.map +1 -0
  47. package/dist/inference/interruption/errors.d.cts +12 -0
  48. package/dist/inference/interruption/errors.d.ts +12 -0
  49. package/dist/inference/interruption/errors.d.ts.map +1 -0
  50. package/dist/inference/interruption/errors.js +20 -0
  51. package/dist/inference/interruption/errors.js.map +1 -0
  52. package/dist/inference/interruption/http_transport.cjs +147 -0
  53. package/dist/inference/interruption/http_transport.cjs.map +1 -0
  54. package/dist/inference/interruption/http_transport.d.cts +63 -0
  55. package/dist/inference/interruption/http_transport.d.ts +63 -0
  56. package/dist/inference/interruption/http_transport.d.ts.map +1 -0
  57. package/dist/inference/interruption/http_transport.js +121 -0
  58. package/dist/inference/interruption/http_transport.js.map +1 -0
  59. package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
  60. package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
  61. package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
  62. package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
  63. package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
  64. package/dist/inference/interruption/interruption_cache_entry.js +34 -0
  65. package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
  66. package/dist/inference/interruption/interruption_detector.cjs +181 -0
  67. package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
  68. package/dist/inference/interruption/interruption_detector.d.cts +59 -0
  69. package/dist/inference/interruption/interruption_detector.d.ts +59 -0
  70. package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
  71. package/dist/inference/interruption/interruption_detector.js +147 -0
  72. package/dist/inference/interruption/interruption_detector.js.map +1 -0
  73. package/dist/inference/interruption/interruption_stream.cjs +368 -0
  74. package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
  75. package/dist/inference/interruption/interruption_stream.d.cts +46 -0
  76. package/dist/inference/interruption/interruption_stream.d.ts +46 -0
  77. package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
  78. package/dist/inference/interruption/interruption_stream.js +344 -0
  79. package/dist/inference/interruption/interruption_stream.js.map +1 -0
  80. package/dist/inference/interruption/types.cjs +17 -0
  81. package/dist/inference/interruption/types.cjs.map +1 -0
  82. package/dist/inference/interruption/types.d.cts +66 -0
  83. package/dist/inference/interruption/types.d.ts +66 -0
  84. package/dist/inference/interruption/types.d.ts.map +1 -0
  85. package/dist/inference/interruption/types.js +1 -0
  86. package/dist/inference/interruption/types.js.map +1 -0
  87. package/dist/inference/interruption/utils.cjs +130 -0
  88. package/dist/inference/interruption/utils.cjs.map +1 -0
  89. package/dist/inference/interruption/utils.d.cts +41 -0
  90. package/dist/inference/interruption/utils.d.ts +41 -0
  91. package/dist/inference/interruption/utils.d.ts.map +1 -0
  92. package/dist/inference/interruption/utils.js +105 -0
  93. package/dist/inference/interruption/utils.js.map +1 -0
  94. package/dist/inference/interruption/utils.test.cjs +105 -0
  95. package/dist/inference/interruption/utils.test.cjs.map +1 -0
  96. package/dist/inference/interruption/utils.test.js +104 -0
  97. package/dist/inference/interruption/utils.test.js.map +1 -0
  98. package/dist/inference/interruption/ws_transport.cjs +329 -0
  99. package/dist/inference/interruption/ws_transport.cjs.map +1 -0
  100. package/dist/inference/interruption/ws_transport.d.cts +33 -0
  101. package/dist/inference/interruption/ws_transport.d.ts +33 -0
  102. package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
  103. package/dist/inference/interruption/ws_transport.js +295 -0
  104. package/dist/inference/interruption/ws_transport.js.map +1 -0
  105. package/dist/inference/llm.cjs +14 -10
  106. package/dist/inference/llm.cjs.map +1 -1
  107. package/dist/inference/llm.d.cts +2 -1
  108. package/dist/inference/llm.d.ts +2 -1
  109. package/dist/inference/llm.d.ts.map +1 -1
  110. package/dist/inference/llm.js +8 -10
  111. package/dist/inference/llm.js.map +1 -1
  112. package/dist/inference/stt.cjs +7 -2
  113. package/dist/inference/stt.cjs.map +1 -1
  114. package/dist/inference/stt.d.cts +2 -0
  115. package/dist/inference/stt.d.ts +2 -0
  116. package/dist/inference/stt.d.ts.map +1 -1
  117. package/dist/inference/stt.js +8 -3
  118. package/dist/inference/stt.js.map +1 -1
  119. package/dist/inference/tts.cjs +7 -2
  120. package/dist/inference/tts.cjs.map +1 -1
  121. package/dist/inference/tts.d.cts +2 -0
  122. package/dist/inference/tts.d.ts +2 -0
  123. package/dist/inference/tts.d.ts.map +1 -1
  124. package/dist/inference/tts.js +8 -3
  125. package/dist/inference/tts.js.map +1 -1
  126. package/dist/inference/utils.cjs +26 -7
  127. package/dist/inference/utils.cjs.map +1 -1
  128. package/dist/inference/utils.d.cts +13 -0
  129. package/dist/inference/utils.d.ts +13 -0
  130. package/dist/inference/utils.d.ts.map +1 -1
  131. package/dist/inference/utils.js +18 -2
  132. package/dist/inference/utils.js.map +1 -1
  133. package/dist/llm/chat_context.cjs +108 -2
  134. package/dist/llm/chat_context.cjs.map +1 -1
  135. package/dist/llm/chat_context.d.cts +28 -1
  136. package/dist/llm/chat_context.d.ts +28 -1
  137. package/dist/llm/chat_context.d.ts.map +1 -1
  138. package/dist/llm/chat_context.js +108 -2
  139. package/dist/llm/chat_context.js.map +1 -1
  140. package/dist/llm/chat_context.test.cjs +43 -0
  141. package/dist/llm/chat_context.test.cjs.map +1 -1
  142. package/dist/llm/chat_context.test.js +43 -0
  143. package/dist/llm/chat_context.test.js.map +1 -1
  144. package/dist/llm/index.cjs +2 -0
  145. package/dist/llm/index.cjs.map +1 -1
  146. package/dist/llm/index.d.cts +2 -2
  147. package/dist/llm/index.d.ts +2 -2
  148. package/dist/llm/index.d.ts.map +1 -1
  149. package/dist/llm/index.js +3 -1
  150. package/dist/llm/index.js.map +1 -1
  151. package/dist/llm/llm.cjs +16 -1
  152. package/dist/llm/llm.cjs.map +1 -1
  153. package/dist/llm/llm.d.cts +9 -0
  154. package/dist/llm/llm.d.ts +9 -0
  155. package/dist/llm/llm.d.ts.map +1 -1
  156. package/dist/llm/llm.js +16 -1
  157. package/dist/llm/llm.js.map +1 -1
  158. package/dist/llm/provider_format/index.d.cts +1 -1
  159. package/dist/llm/provider_format/index.d.ts +1 -1
  160. package/dist/llm/realtime.cjs +3 -0
  161. package/dist/llm/realtime.cjs.map +1 -1
  162. package/dist/llm/realtime.d.cts +1 -0
  163. package/dist/llm/realtime.d.ts +1 -0
  164. package/dist/llm/realtime.d.ts.map +1 -1
  165. package/dist/llm/realtime.js +3 -0
  166. package/dist/llm/realtime.js.map +1 -1
  167. package/dist/llm/tool_context.cjs +7 -0
  168. package/dist/llm/tool_context.cjs.map +1 -1
  169. package/dist/llm/tool_context.d.cts +10 -2
  170. package/dist/llm/tool_context.d.ts +10 -2
  171. package/dist/llm/tool_context.d.ts.map +1 -1
  172. package/dist/llm/tool_context.js +6 -0
  173. package/dist/llm/tool_context.js.map +1 -1
  174. package/dist/metrics/base.cjs.map +1 -1
  175. package/dist/metrics/base.d.cts +45 -1
  176. package/dist/metrics/base.d.ts +45 -1
  177. package/dist/metrics/base.d.ts.map +1 -1
  178. package/dist/metrics/index.cjs +5 -0
  179. package/dist/metrics/index.cjs.map +1 -1
  180. package/dist/metrics/index.d.cts +2 -1
  181. package/dist/metrics/index.d.ts +2 -1
  182. package/dist/metrics/index.d.ts.map +1 -1
  183. package/dist/metrics/index.js +6 -0
  184. package/dist/metrics/index.js.map +1 -1
  185. package/dist/metrics/model_usage.cjs +189 -0
  186. package/dist/metrics/model_usage.cjs.map +1 -0
  187. package/dist/metrics/model_usage.d.cts +92 -0
  188. package/dist/metrics/model_usage.d.ts +92 -0
  189. package/dist/metrics/model_usage.d.ts.map +1 -0
  190. package/dist/metrics/model_usage.js +164 -0
  191. package/dist/metrics/model_usage.js.map +1 -0
  192. package/dist/metrics/model_usage.test.cjs +474 -0
  193. package/dist/metrics/model_usage.test.cjs.map +1 -0
  194. package/dist/metrics/model_usage.test.js +476 -0
  195. package/dist/metrics/model_usage.test.js.map +1 -0
  196. package/dist/metrics/usage_collector.cjs +3 -0
  197. package/dist/metrics/usage_collector.cjs.map +1 -1
  198. package/dist/metrics/usage_collector.d.cts +9 -0
  199. package/dist/metrics/usage_collector.d.ts +9 -0
  200. package/dist/metrics/usage_collector.d.ts.map +1 -1
  201. package/dist/metrics/usage_collector.js +3 -0
  202. package/dist/metrics/usage_collector.js.map +1 -1
  203. package/dist/metrics/utils.cjs +9 -0
  204. package/dist/metrics/utils.cjs.map +1 -1
  205. package/dist/metrics/utils.d.ts.map +1 -1
  206. package/dist/metrics/utils.js +9 -0
  207. package/dist/metrics/utils.js.map +1 -1
  208. package/dist/stream/multi_input_stream.test.cjs +4 -0
  209. package/dist/stream/multi_input_stream.test.cjs.map +1 -1
  210. package/dist/stream/multi_input_stream.test.js +5 -1
  211. package/dist/stream/multi_input_stream.test.js.map +1 -1
  212. package/dist/stream/stream_channel.cjs +31 -0
  213. package/dist/stream/stream_channel.cjs.map +1 -1
  214. package/dist/stream/stream_channel.d.cts +4 -2
  215. package/dist/stream/stream_channel.d.ts +4 -2
  216. package/dist/stream/stream_channel.d.ts.map +1 -1
  217. package/dist/stream/stream_channel.js +31 -0
  218. package/dist/stream/stream_channel.js.map +1 -1
  219. package/dist/stt/stt.cjs +34 -2
  220. package/dist/stt/stt.cjs.map +1 -1
  221. package/dist/stt/stt.d.cts +22 -0
  222. package/dist/stt/stt.d.ts +22 -0
  223. package/dist/stt/stt.d.ts.map +1 -1
  224. package/dist/stt/stt.js +34 -2
  225. package/dist/stt/stt.js.map +1 -1
  226. package/dist/telemetry/otel_http_exporter.cjs +24 -5
  227. package/dist/telemetry/otel_http_exporter.cjs.map +1 -1
  228. package/dist/telemetry/otel_http_exporter.d.cts +1 -0
  229. package/dist/telemetry/otel_http_exporter.d.ts +1 -0
  230. package/dist/telemetry/otel_http_exporter.d.ts.map +1 -1
  231. package/dist/telemetry/otel_http_exporter.js +24 -5
  232. package/dist/telemetry/otel_http_exporter.js.map +1 -1
  233. package/dist/telemetry/trace_types.cjs +5 -5
  234. package/dist/telemetry/trace_types.cjs.map +1 -1
  235. package/dist/telemetry/trace_types.d.cts +9 -5
  236. package/dist/telemetry/trace_types.d.ts +9 -5
  237. package/dist/telemetry/trace_types.d.ts.map +1 -1
  238. package/dist/telemetry/trace_types.js +5 -5
  239. package/dist/telemetry/trace_types.js.map +1 -1
  240. package/dist/telemetry/traces.cjs +47 -8
  241. package/dist/telemetry/traces.cjs.map +1 -1
  242. package/dist/telemetry/traces.d.ts.map +1 -1
  243. package/dist/telemetry/traces.js +47 -8
  244. package/dist/telemetry/traces.js.map +1 -1
  245. package/dist/tts/tts.cjs +64 -2
  246. package/dist/tts/tts.cjs.map +1 -1
  247. package/dist/tts/tts.d.cts +34 -0
  248. package/dist/tts/tts.d.ts +34 -0
  249. package/dist/tts/tts.d.ts.map +1 -1
  250. package/dist/tts/tts.js +64 -2
  251. package/dist/tts/tts.js.map +1 -1
  252. package/dist/utils.cjs +1 -0
  253. package/dist/utils.cjs.map +1 -1
  254. package/dist/utils.d.ts.map +1 -1
  255. package/dist/utils.js +1 -0
  256. package/dist/utils.js.map +1 -1
  257. package/dist/version.cjs +1 -1
  258. package/dist/version.js +1 -1
  259. package/dist/voice/agent.cjs +34 -4
  260. package/dist/voice/agent.cjs.map +1 -1
  261. package/dist/voice/agent.d.cts +11 -2
  262. package/dist/voice/agent.d.ts +11 -2
  263. package/dist/voice/agent.d.ts.map +1 -1
  264. package/dist/voice/agent.js +34 -4
  265. package/dist/voice/agent.js.map +1 -1
  266. package/dist/voice/agent_activity.cjs +292 -44
  267. package/dist/voice/agent_activity.cjs.map +1 -1
  268. package/dist/voice/agent_activity.d.cts +27 -6
  269. package/dist/voice/agent_activity.d.ts +27 -6
  270. package/dist/voice/agent_activity.d.ts.map +1 -1
  271. package/dist/voice/agent_activity.js +293 -45
  272. package/dist/voice/agent_activity.js.map +1 -1
  273. package/dist/voice/agent_session.cjs +105 -48
  274. package/dist/voice/agent_session.cjs.map +1 -1
  275. package/dist/voice/agent_session.d.cts +90 -20
  276. package/dist/voice/agent_session.d.ts +90 -20
  277. package/dist/voice/agent_session.d.ts.map +1 -1
  278. package/dist/voice/agent_session.js +105 -46
  279. package/dist/voice/agent_session.js.map +1 -1
  280. package/dist/voice/audio_recognition.cjs +287 -6
  281. package/dist/voice/audio_recognition.cjs.map +1 -1
  282. package/dist/voice/audio_recognition.d.cts +42 -3
  283. package/dist/voice/audio_recognition.d.ts +42 -3
  284. package/dist/voice/audio_recognition.d.ts.map +1 -1
  285. package/dist/voice/audio_recognition.js +289 -7
  286. package/dist/voice/audio_recognition.js.map +1 -1
  287. package/dist/voice/client_events.cjs +554 -0
  288. package/dist/voice/client_events.cjs.map +1 -0
  289. package/dist/voice/client_events.d.cts +195 -0
  290. package/dist/voice/client_events.d.ts +195 -0
  291. package/dist/voice/client_events.d.ts.map +1 -0
  292. package/dist/voice/client_events.js +548 -0
  293. package/dist/voice/client_events.js.map +1 -0
  294. package/dist/voice/events.cjs +1 -0
  295. package/dist/voice/events.cjs.map +1 -1
  296. package/dist/voice/events.d.cts +8 -5
  297. package/dist/voice/events.d.ts +8 -5
  298. package/dist/voice/events.d.ts.map +1 -1
  299. package/dist/voice/events.js +1 -0
  300. package/dist/voice/events.js.map +1 -1
  301. package/dist/voice/generation.cjs +43 -8
  302. package/dist/voice/generation.cjs.map +1 -1
  303. package/dist/voice/generation.d.cts +3 -3
  304. package/dist/voice/generation.d.ts +3 -3
  305. package/dist/voice/generation.d.ts.map +1 -1
  306. package/dist/voice/generation.js +43 -8
  307. package/dist/voice/generation.js.map +1 -1
  308. package/dist/voice/index.cjs +1 -0
  309. package/dist/voice/index.cjs.map +1 -1
  310. package/dist/voice/index.d.cts +1 -0
  311. package/dist/voice/index.d.ts +1 -0
  312. package/dist/voice/index.d.ts.map +1 -1
  313. package/dist/voice/index.js +1 -0
  314. package/dist/voice/index.js.map +1 -1
  315. package/dist/voice/report.cjs +20 -8
  316. package/dist/voice/report.cjs.map +1 -1
  317. package/dist/voice/report.d.cts +5 -0
  318. package/dist/voice/report.d.ts +5 -0
  319. package/dist/voice/report.d.ts.map +1 -1
  320. package/dist/voice/report.js +20 -8
  321. package/dist/voice/report.js.map +1 -1
  322. package/dist/voice/report.test.cjs +106 -0
  323. package/dist/voice/report.test.cjs.map +1 -0
  324. package/dist/voice/report.test.js +105 -0
  325. package/dist/voice/report.test.js.map +1 -0
  326. package/dist/voice/room_io/room_io.cjs +16 -41
  327. package/dist/voice/room_io/room_io.cjs.map +1 -1
  328. package/dist/voice/room_io/room_io.d.cts +4 -9
  329. package/dist/voice/room_io/room_io.d.ts +4 -9
  330. package/dist/voice/room_io/room_io.d.ts.map +1 -1
  331. package/dist/voice/room_io/room_io.js +17 -43
  332. package/dist/voice/room_io/room_io.js.map +1 -1
  333. package/dist/voice/testing/fake_llm.cjs +127 -0
  334. package/dist/voice/testing/fake_llm.cjs.map +1 -0
  335. package/dist/voice/testing/fake_llm.d.cts +30 -0
  336. package/dist/voice/testing/fake_llm.d.ts +30 -0
  337. package/dist/voice/testing/fake_llm.d.ts.map +1 -0
  338. package/dist/voice/testing/fake_llm.js +103 -0
  339. package/dist/voice/testing/fake_llm.js.map +1 -0
  340. package/dist/voice/testing/index.cjs +3 -0
  341. package/dist/voice/testing/index.cjs.map +1 -1
  342. package/dist/voice/testing/index.d.cts +1 -0
  343. package/dist/voice/testing/index.d.ts +1 -0
  344. package/dist/voice/testing/index.d.ts.map +1 -1
  345. package/dist/voice/testing/index.js +2 -0
  346. package/dist/voice/testing/index.js.map +1 -1
  347. package/dist/voice/turn_config/endpointing.cjs +33 -0
  348. package/dist/voice/turn_config/endpointing.cjs.map +1 -0
  349. package/dist/voice/turn_config/endpointing.d.cts +30 -0
  350. package/dist/voice/turn_config/endpointing.d.ts +30 -0
  351. package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
  352. package/dist/voice/turn_config/endpointing.js +9 -0
  353. package/dist/voice/turn_config/endpointing.js.map +1 -0
  354. package/dist/voice/turn_config/interruption.cjs +37 -0
  355. package/dist/voice/turn_config/interruption.cjs.map +1 -0
  356. package/dist/voice/turn_config/interruption.d.cts +53 -0
  357. package/dist/voice/turn_config/interruption.d.ts +53 -0
  358. package/dist/voice/turn_config/interruption.d.ts.map +1 -0
  359. package/dist/voice/turn_config/interruption.js +13 -0
  360. package/dist/voice/turn_config/interruption.js.map +1 -0
  361. package/dist/voice/turn_config/turn_handling.cjs +35 -0
  362. package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
  363. package/dist/voice/turn_config/turn_handling.d.cts +36 -0
  364. package/dist/voice/turn_config/turn_handling.d.ts +36 -0
  365. package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
  366. package/dist/voice/turn_config/turn_handling.js +11 -0
  367. package/dist/voice/turn_config/turn_handling.js.map +1 -0
  368. package/dist/voice/turn_config/utils.cjs +97 -0
  369. package/dist/voice/turn_config/utils.cjs.map +1 -0
  370. package/dist/voice/turn_config/utils.d.cts +25 -0
  371. package/dist/voice/turn_config/utils.d.ts +25 -0
  372. package/dist/voice/turn_config/utils.d.ts.map +1 -0
  373. package/dist/voice/turn_config/utils.js +73 -0
  374. package/dist/voice/turn_config/utils.js.map +1 -0
  375. package/dist/voice/turn_config/utils.test.cjs +86 -0
  376. package/dist/voice/turn_config/utils.test.cjs.map +1 -0
  377. package/dist/voice/turn_config/utils.test.js +85 -0
  378. package/dist/voice/turn_config/utils.test.js.map +1 -0
  379. package/dist/voice/wire_format.cjs +798 -0
  380. package/dist/voice/wire_format.cjs.map +1 -0
  381. package/dist/voice/wire_format.d.cts +5503 -0
  382. package/dist/voice/wire_format.d.ts +5503 -0
  383. package/dist/voice/wire_format.d.ts.map +1 -0
  384. package/dist/voice/wire_format.js +728 -0
  385. package/dist/voice/wire_format.js.map +1 -0
  386. package/package.json +2 -1
  387. package/src/beta/index.ts +9 -0
  388. package/src/beta/workflows/index.ts +9 -0
  389. package/src/beta/workflows/task_group.ts +194 -0
  390. package/src/constants.ts +13 -0
  391. package/src/index.ts +2 -1
  392. package/src/inference/interruption/defaults.ts +51 -0
  393. package/src/inference/interruption/errors.ts +25 -0
  394. package/src/inference/interruption/http_transport.ts +187 -0
  395. package/src/inference/interruption/interruption_cache_entry.ts +50 -0
  396. package/src/inference/interruption/interruption_detector.ts +188 -0
  397. package/src/inference/interruption/interruption_stream.ts +467 -0
  398. package/src/inference/interruption/types.ts +84 -0
  399. package/src/inference/interruption/utils.test.ts +132 -0
  400. package/src/inference/interruption/utils.ts +137 -0
  401. package/src/inference/interruption/ws_transport.ts +402 -0
  402. package/src/inference/llm.ts +9 -12
  403. package/src/inference/stt.ts +10 -3
  404. package/src/inference/tts.ts +10 -3
  405. package/src/inference/utils.ts +29 -1
  406. package/src/llm/chat_context.test.ts +48 -0
  407. package/src/llm/chat_context.ts +161 -0
  408. package/src/llm/index.ts +2 -0
  409. package/src/llm/llm.ts +16 -0
  410. package/src/llm/realtime.ts +4 -0
  411. package/src/llm/tool_context.ts +14 -0
  412. package/src/metrics/base.ts +48 -1
  413. package/src/metrics/index.ts +11 -0
  414. package/src/metrics/model_usage.test.ts +545 -0
  415. package/src/metrics/model_usage.ts +262 -0
  416. package/src/metrics/usage_collector.ts +11 -0
  417. package/src/metrics/utils.ts +11 -0
  418. package/src/stream/multi_input_stream.test.ts +6 -1
  419. package/src/stream/stream_channel.ts +34 -2
  420. package/src/stt/stt.ts +38 -0
  421. package/src/telemetry/otel_http_exporter.ts +28 -5
  422. package/src/telemetry/trace_types.ts +11 -8
  423. package/src/telemetry/traces.ts +111 -54
  424. package/src/tts/tts.ts +69 -1
  425. package/src/utils.ts +5 -0
  426. package/src/voice/agent.ts +41 -3
  427. package/src/voice/agent_activity.ts +371 -34
  428. package/src/voice/agent_session.ts +207 -59
  429. package/src/voice/audio_recognition.ts +385 -9
  430. package/src/voice/client_events.ts +838 -0
  431. package/src/voice/events.ts +14 -4
  432. package/src/voice/generation.ts +52 -9
  433. package/src/voice/index.ts +1 -0
  434. package/src/voice/report.test.ts +117 -0
  435. package/src/voice/report.ts +29 -6
  436. package/src/voice/room_io/room_io.ts +21 -64
  437. package/src/voice/testing/fake_llm.ts +138 -0
  438. package/src/voice/testing/index.ts +2 -0
  439. package/src/voice/turn_config/endpointing.ts +33 -0
  440. package/src/voice/turn_config/interruption.ts +56 -0
  441. package/src/voice/turn_config/turn_handling.ts +45 -0
  442. package/src/voice/turn_config/utils.test.ts +100 -0
  443. package/src/voice/turn_config/utils.ts +103 -0
  444. package/src/voice/wire_format.ts +827 -0
@@ -3,6 +3,7 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import type { AudioFrame, VideoFrame } from '@livekit/rtc-node';
5
5
  import { createImmutableArray, shortuuid } from '../utils.js';
6
+ import type { LLM } from './llm.js';
6
7
  import { type ProviderFormat, toChatCtx } from './provider_format/index.js';
7
8
  import type { JSONObject, JSONValue, ToolContext } from './tool_context.js';
8
9
 
@@ -80,6 +81,17 @@ export function createAudioContent(params: {
80
81
  };
81
82
  }
82
83
 
84
+ export interface MetricsReport {
85
+ startedSpeakingAt?: number;
86
+ stoppedSpeakingAt?: number;
87
+ transcriptionDelay?: number;
88
+ endOfTurnDelay?: number;
89
+ onUserTurnCompletedDelay?: number;
90
+ llmNodeTtft?: number;
91
+ ttsNodeTtfb?: number;
92
+ e2eLatency?: number;
93
+ }
94
+
83
95
  export class ChatMessage {
84
96
  readonly id: string;
85
97
 
@@ -91,6 +103,12 @@ export class ChatMessage {
91
103
 
92
104
  interrupted: boolean;
93
105
 
106
+ transcriptConfidence?: number;
107
+
108
+ extra: Record<string, unknown>;
109
+
110
+ metrics: MetricsReport;
111
+
94
112
  hash?: Uint8Array;
95
113
 
96
114
  createdAt: number;
@@ -101,6 +119,9 @@ export class ChatMessage {
101
119
  id?: string;
102
120
  interrupted?: boolean;
103
121
  createdAt?: number;
122
+ transcriptConfidence?: number;
123
+ metrics?: MetricsReport;
124
+ extra?: Record<string, unknown>;
104
125
  }) {
105
126
  const {
106
127
  role,
@@ -108,12 +129,18 @@ export class ChatMessage {
108
129
  id = shortuuid('item_'),
109
130
  interrupted = false,
110
131
  createdAt = Date.now(),
132
+ transcriptConfidence,
133
+ metrics = {},
134
+ extra = {},
111
135
  } = params;
112
136
  this.id = id;
113
137
  this.role = role;
114
138
  this.content = Array.isArray(content) ? content : [content];
115
139
  this.interrupted = interrupted;
116
140
  this.createdAt = createdAt;
141
+ this.transcriptConfidence = transcriptConfidence;
142
+ this.metrics = metrics;
143
+ this.extra = extra;
117
144
  }
118
145
 
119
146
  static create(params: {
@@ -122,6 +149,9 @@ export class ChatMessage {
122
149
  id?: string;
123
150
  interrupted?: boolean;
124
151
  createdAt?: number;
152
+ transcriptConfidence?: number;
153
+ metrics?: MetricsReport;
154
+ extra?: Record<string, unknown>;
125
155
  }) {
126
156
  return new ChatMessage(params);
127
157
  }
@@ -172,6 +202,16 @@ export class ChatMessage {
172
202
  result.createdAt = this.createdAt;
173
203
  }
174
204
 
205
+ if (this.transcriptConfidence !== undefined) {
206
+ result.transcriptConfidence = this.transcriptConfidence;
207
+ }
208
+ if (Object.keys(this.metrics).length > 0) {
209
+ result.metrics = { ...this.metrics };
210
+ }
211
+ if (Object.keys(this.extra).length > 0) {
212
+ result.extra = this.extra as JSONValue;
213
+ }
214
+
175
215
  return result;
176
216
  }
177
217
  }
@@ -401,6 +441,7 @@ export class AgentHandoffItem {
401
441
  }
402
442
  }
403
443
 
444
+ // TODO(parity): Add AgentConfigUpdate type to ChatItem union
404
445
  export type ChatItem = ChatMessage | FunctionCall | FunctionCallOutput | AgentHandoffItem;
405
446
 
406
447
  export class ChatContext {
@@ -431,6 +472,9 @@ export class ChatContext {
431
472
  id?: string;
432
473
  interrupted?: boolean;
433
474
  createdAt?: number;
475
+ transcriptConfidence?: number;
476
+ metrics?: MetricsReport;
477
+ extra?: Record<string, unknown>;
434
478
  }): ChatMessage {
435
479
  const msg = new ChatMessage(params);
436
480
  if (params.createdAt !== undefined) {
@@ -463,11 +507,13 @@ export class ChatContext {
463
507
  return idx !== -1 ? idx : undefined;
464
508
  }
465
509
 
510
+ // TODO(parity): Add excludeConfigUpdate option when AgentConfigUpdate is ported
466
511
  copy(
467
512
  options: {
468
513
  excludeFunctionCall?: boolean;
469
514
  excludeInstructions?: boolean;
470
515
  excludeEmptyMessage?: boolean;
516
+ excludeHandoff?: boolean;
471
517
  toolCtx?: ToolContext<any>; // eslint-disable-line @typescript-eslint/no-explicit-any
472
518
  } = {},
473
519
  ): ChatContext {
@@ -475,6 +521,7 @@ export class ChatContext {
475
521
  excludeFunctionCall = false,
476
522
  excludeInstructions = false,
477
523
  excludeEmptyMessage = false,
524
+ excludeHandoff = false,
478
525
  toolCtx,
479
526
  } = options;
480
527
  const items: ChatItem[] = [];
@@ -500,6 +547,10 @@ export class ChatContext {
500
547
  continue;
501
548
  }
502
549
 
550
+ if (excludeHandoff && item.type === 'agent_handoff') {
551
+ continue;
552
+ }
553
+
503
554
  if (toolCtx !== undefined && isToolCallOrOutput(item) && toolCtx[item.name] === undefined) {
504
555
  continue;
505
556
  }
@@ -510,6 +561,7 @@ export class ChatContext {
510
561
  return new ChatContext(items);
511
562
  }
512
563
 
564
+ // TODO(parity): Add excludeConfigUpdate option when AgentConfigUpdate is ported
513
565
  merge(
514
566
  other: ChatContext,
515
567
  options: {
@@ -606,6 +658,9 @@ export class ChatContext {
606
658
  id: item.id,
607
659
  interrupted: item.interrupted,
608
660
  createdAt: item.createdAt,
661
+ transcriptConfidence: item.transcriptConfidence,
662
+ metrics: item.metrics,
663
+ extra: item.extra,
609
664
  });
610
665
 
611
666
  // Filter content based on options
@@ -762,6 +817,112 @@ export class ChatContext {
762
817
  return true;
763
818
  }
764
819
 
820
+ async _summarize(llm: LLM, options: { keepLastTurns?: number } = {}): Promise<ChatContext> {
821
+ const { keepLastTurns = 2 } = options;
822
+
823
+ const toSummarize: ChatMessage[] = [];
824
+ for (const item of this._items) {
825
+ if (item.type !== 'message') continue;
826
+ if (item.role !== 'user' && item.role !== 'assistant') continue;
827
+ if (item.extra?.is_summary === true) continue;
828
+
829
+ const text = (item.textContent ?? '').trim();
830
+ if (text) {
831
+ toSummarize.push(item);
832
+ }
833
+ }
834
+
835
+ if (toSummarize.length === 0) {
836
+ return this;
837
+ }
838
+
839
+ const tailN = Math.max(0, Math.min(toSummarize.length, keepLastTurns * 2));
840
+ let head: ChatMessage[];
841
+ let tail: ChatMessage[];
842
+ if (tailN === 0) {
843
+ head = toSummarize;
844
+ tail = [];
845
+ } else {
846
+ head = toSummarize.slice(0, -tailN);
847
+ tail = toSummarize.slice(-tailN);
848
+ }
849
+
850
+ if (head.length === 0) {
851
+ return this;
852
+ }
853
+
854
+ const sourceText = head
855
+ .map((m) => `${m.role}: ${(m.textContent ?? '').trim()}`)
856
+ .join('\n')
857
+ .trim();
858
+
859
+ if (!sourceText) {
860
+ return this;
861
+ }
862
+
863
+ // TODO: refactor this into LLMStream.collect API.
864
+ const promptCtx = new ChatContext();
865
+ promptCtx.addMessage({
866
+ role: 'system',
867
+ content:
868
+ 'Compress older chat history into a short, faithful summary.\n' +
869
+ 'Focus on user goals, constraints, decisions, key facts/preferences/entities, and pending tasks.\n' +
870
+ 'Exclude chit-chat and greetings. Be concise.',
871
+ });
872
+ promptCtx.addMessage({
873
+ role: 'user',
874
+ content: `Conversation to summarize:\n\n${sourceText}`,
875
+ });
876
+
877
+ const chunks: string[] = [];
878
+ for await (const chunk of llm.chat({ chatCtx: promptCtx })) {
879
+ if (chunk.delta?.content) {
880
+ chunks.push(chunk.delta.content);
881
+ }
882
+ }
883
+
884
+ const summary = chunks.join('').trim();
885
+ if (!summary) {
886
+ return this;
887
+ }
888
+
889
+ const tailStartTs = tail.length > 0 ? tail[0]!.createdAt : Infinity;
890
+
891
+ const preserved: ChatItem[] = [];
892
+ for (const it of this._items) {
893
+ if (
894
+ (it.type === 'function_call' || it.type === 'function_call_output') &&
895
+ it.createdAt < tailStartTs
896
+ ) {
897
+ continue;
898
+ }
899
+
900
+ if (it.type === 'message' && (it.role === 'user' || it.role === 'assistant')) {
901
+ continue;
902
+ }
903
+
904
+ preserved.push(it);
905
+ }
906
+
907
+ this._items = preserved;
908
+
909
+ const createdAtHint =
910
+ tail.length > 0 ? tail[0]!.createdAt - 1e-3 : head[head.length - 1]!.createdAt + 1e-3;
911
+
912
+ this.addMessage({
913
+ role: 'assistant',
914
+ content: `[history summary]\n${summary}`,
915
+ createdAt: createdAtHint,
916
+ extra: { is_summary: true },
917
+ });
918
+
919
+ for (const msg of tail) {
920
+ this.insert(msg);
921
+ }
922
+
923
+ return this;
924
+ }
925
+
765
926
  /**
766
927
  * Indicates whether the context is read-only
767
928
  */
package/src/llm/index.ts CHANGED
@@ -6,6 +6,7 @@ export {
6
6
  isFunctionTool,
7
7
  tool,
8
8
  ToolError,
9
+ ToolFlag,
9
10
  type AgentHandoff,
10
11
  type FunctionTool,
11
12
  type ProviderDefinedTool,
@@ -29,6 +30,7 @@ export {
29
30
  type ChatItem,
30
31
  type ChatRole,
31
32
  type ImageContent,
33
+ type MetricsReport,
32
34
  } from './chat_context.js';
33
35
 
34
36
  export type { ProviderFormat } from './provider_format/index.js';
package/src/llm/llm.ts CHANGED
@@ -65,6 +65,18 @@ export abstract class LLM extends (EventEmitter as new () => TypedEmitter<LLMCal
65
65
  return 'unknown';
66
66
  }
67
67
 
68
+ /**
69
+ * Get the provider name for this LLM instance.
70
+ *
71
+ * @returns The provider name if available, "unknown" otherwise.
72
+ *
73
+ * @remarks
74
+ * Plugins should override this property to provide their provider information.
75
+ */
76
+ get provider(): string {
77
+ return 'unknown';
78
+ }
79
+
68
80
  /**
69
81
  * Returns a {@link LLMStream} that can be used to push text and receive LLM responses.
70
82
  */
@@ -248,6 +260,10 @@ export abstract class LLMStream implements AsyncIterableIterator<ChatChunk> {
248
260
  }
249
261
  return (usage?.completionTokens || 0) / (durationMs / 1000);
250
262
  })(),
263
+ metadata: {
264
+ modelProvider: this.#llm.provider,
265
+ modelName: this.#llm.model,
266
+ },
251
267
  };
252
268
 
253
269
  if (this.#llmRequestSpan) {
@@ -73,6 +73,10 @@ export abstract class RealtimeModel {
73
73
  /** The model name/identifier used by this realtime model */
74
74
  abstract get model(): string;
75
75
 
76
+ get provider(): string {
77
+ return 'unknown';
78
+ }
79
+
76
80
  abstract session(): RealtimeSession;
77
81
 
78
82
  abstract close(): Promise<void>;
@@ -80,6 +80,13 @@ export class ToolError extends Error {
80
80
  }
81
81
  }
82
82
 
83
+ export const ToolFlag = {
84
+ NONE: 0,
85
+ IGNORE_ON_ENTER: 1 << 0,
86
+ } as const;
87
+
88
+ export type ToolFlag = (typeof ToolFlag)[keyof typeof ToolFlag];
89
+
83
90
  export interface AgentHandoff {
84
91
  /**
85
92
  * The agent to handoff to.
@@ -178,6 +185,8 @@ export interface FunctionTool<
178
185
  */
179
186
  execute: ToolExecuteFunction<Parameters, UserData, Result>;
180
187
 
188
+ flags: number;
189
+
181
190
  [FUNCTION_TOOL_SYMBOL]: true;
182
191
  }
183
192
 
@@ -242,10 +251,12 @@ export function tool<
242
251
  description,
243
252
  parameters,
244
253
  execute,
254
+ flags,
245
255
  }: {
246
256
  description: string;
247
257
  parameters: Schema;
248
258
  execute: ToolExecuteFunction<InferToolInput<Schema>, UserData, Result>;
259
+ flags?: number;
249
260
  }): FunctionTool<InferToolInput<Schema>, UserData, Result>;
250
261
 
251
262
  /**
@@ -254,10 +265,12 @@ export function tool<
254
265
  export function tool<UserData = UnknownUserData, Result = unknown>({
255
266
  description,
256
267
  execute,
268
+ flags,
257
269
  }: {
258
270
  description: string;
259
271
  parameters?: never;
260
272
  execute: ToolExecuteFunction<Record<string, never>, UserData, Result>;
273
+ flags?: number;
261
274
  }): FunctionTool<Record<string, never>, UserData, Result>;
262
275
 
263
276
  /**
@@ -295,6 +308,7 @@ export function tool(tool: any): any {
295
308
  description: tool.description,
296
309
  parameters,
297
310
  execute: tool.execute,
311
+ flags: tool.flags ?? ToolFlag.NONE,
298
312
  [TOOL_SYMBOL]: true,
299
313
  [FUNCTION_TOOL_SYMBOL]: true,
300
314
  };
@@ -2,13 +2,21 @@
2
2
  //
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ export type MetricsMetadata = {
6
+ /** The provider name (e.g., 'openai', 'anthropic'). */
7
+ modelProvider?: string;
8
+ /** The model name (e.g., 'gpt-4o', 'claude-3-5-sonnet'). */
9
+ modelName?: string;
10
+ };
11
+
5
12
  export type AgentMetrics =
6
13
  | STTMetrics
7
14
  | LLMMetrics
8
15
  | TTSMetrics
9
16
  | VADMetrics
10
17
  | EOUMetrics
11
- | RealtimeModelMetrics;
18
+ | RealtimeModelMetrics
19
+ | InterruptionMetrics;
12
20
 
13
21
  export type LLMMetrics = {
14
22
  type: 'llm_metrics';
@@ -26,6 +34,8 @@ export type LLMMetrics = {
26
34
  totalTokens: number;
27
35
  tokensPerSecond: number;
28
36
  speechId?: string;
37
+ /** Metadata for model provider and name tracking. */
38
+ metadata?: MetricsMetadata;
29
39
  };
30
40
 
31
41
  export type STTMetrics = {
@@ -41,10 +51,16 @@ export type STTMetrics = {
41
51
  * The duration of the pushed audio in milliseconds.
42
52
  */
43
53
  audioDurationMs: number;
54
+ /** Input audio tokens (for token-based billing). */
55
+ inputTokens?: number;
56
+ /** Output text tokens (for token-based billing). */
57
+ outputTokens?: number;
44
58
  /**
45
59
  * Whether the STT is streaming (e.g using websocket).
46
60
  */
47
61
  streamed: boolean;
62
+ /** Metadata for model provider and name tracking. */
63
+ metadata?: MetricsMetadata;
48
64
  };
49
65
 
50
66
  export type TTSMetrics = {
@@ -59,10 +75,17 @@ export type TTSMetrics = {
59
75
  /** Generated audio duration in milliseconds. */
60
76
  audioDurationMs: number;
61
77
  cancelled: boolean;
78
+ /** Number of characters synthesized (for character-based billing). */
62
79
  charactersCount: number;
80
+ /** Input text tokens (for token-based billing, e.g., OpenAI TTS). */
81
+ inputTokens?: number;
82
+ /** Output audio tokens (for token-based billing, e.g., OpenAI TTS). */
83
+ outputTokens?: number;
63
84
  streamed: boolean;
64
85
  segmentId?: string;
65
86
  speechId?: string;
87
+ /** Metadata for model provider and name tracking. */
88
+ metadata?: MetricsMetadata;
66
89
  };
67
90
 
68
91
  export type VADMetrics = {
@@ -133,6 +156,10 @@ export type RealtimeModelMetrics = {
133
156
  * The duration of the response from created to done in milliseconds.
134
157
  */
135
158
  durationMs: number;
159
+ /**
160
+ * The duration of the session connection in milliseconds (for session-based billing like xAI).
161
+ */
162
+ sessionDurationMs?: number;
136
163
  /**
137
164
  * Time to first audio token in milliseconds. -1 if no audio token was sent.
138
165
  */
@@ -165,4 +192,24 @@ export type RealtimeModelMetrics = {
165
192
  * Details about the output tokens used in the Response.
166
193
  */
167
194
  outputTokenDetails: RealtimeModelMetricsOutputTokenDetails;
195
+ /** Metadata for model provider and name tracking. */
196
+ metadata?: MetricsMetadata;
197
+ };
198
+
199
+ export type InterruptionMetrics = {
200
+ type: 'interruption_metrics';
201
+ timestamp: number;
202
+ /** Latest RTT time taken to perform inference, in milliseconds. */
203
+ totalDuration: number;
204
+ /** Latest time taken by the model side, in milliseconds. */
205
+ predictionDuration: number;
206
+ /** Latest total time from onset of speech to final prediction, in milliseconds. */
207
+ detectionDelay: number;
208
+ /** Number of interruptions detected (incremental). */
209
+ numInterruptions: number;
210
+ /** Number of backchannels detected (incremental). */
211
+ numBackchannels: number;
212
+ /** Number of requests sent to the model (incremental). */
213
+ numRequests: number;
214
+ metadata?: MetricsMetadata;
168
215
  };
@@ -5,11 +5,22 @@
5
5
  export type {
6
6
  AgentMetrics,
7
7
  EOUMetrics,
8
+ InterruptionMetrics,
8
9
  LLMMetrics,
10
+ MetricsMetadata,
9
11
  RealtimeModelMetrics,
10
12
  STTMetrics,
11
13
  TTSMetrics,
12
14
  VADMetrics,
13
15
  } from './base.js';
16
+ export {
17
+ filterZeroValues,
18
+ ModelUsageCollector,
19
+ type InterruptionModelUsage,
20
+ type LLMModelUsage,
21
+ type ModelUsage,
22
+ type STTModelUsage,
23
+ type TTSModelUsage,
24
+ } from './model_usage.js';
14
25
  export { UsageCollector, type UsageSummary } from './usage_collector.js';
15
26
  export { logMetrics } from './utils.js';