@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
@@ -0,0 +1,92 @@
1
+ import type { AgentMetrics } from './base.js';
2
+ export type LLMModelUsage = {
3
+ type: 'llm_usage';
4
+ /** The provider name (e.g., 'openai', 'anthropic'). */
5
+ provider: string;
6
+ /** The model name (e.g., 'gpt-4o', 'claude-3-5-sonnet'). */
7
+ model: string;
8
+ /** Total input tokens. */
9
+ inputTokens: number;
10
+ /** Input tokens served from cache. */
11
+ inputCachedTokens: number;
12
+ /** Input audio tokens (for multimodal models). */
13
+ inputAudioTokens: number;
14
+ /** Cached input audio tokens. */
15
+ inputCachedAudioTokens: number;
16
+ /** Input text tokens. */
17
+ inputTextTokens: number;
18
+ /** Cached input text tokens. */
19
+ inputCachedTextTokens: number;
20
+ /** Input image tokens (for multimodal models). */
21
+ inputImageTokens: number;
22
+ /** Cached input image tokens. */
23
+ inputCachedImageTokens: number;
24
+ /** Total output tokens. */
25
+ outputTokens: number;
26
+ /** Output audio tokens (for multimodal models). */
27
+ outputAudioTokens: number;
28
+ /** Output text tokens. */
29
+ outputTextTokens: number;
30
+ /** Total session connection duration in milliseconds (for session-based billing like xAI). */
31
+ sessionDurationMs: number;
32
+ };
33
+ export type TTSModelUsage = {
34
+ type: 'tts_usage';
35
+ /** The provider name (e.g., 'elevenlabs', 'cartesia'). */
36
+ provider: string;
37
+ /** The model name (e.g., 'eleven_turbo_v2', 'sonic'). */
38
+ model: string;
39
+ /** Input text tokens (for token-based TTS billing, e.g., OpenAI TTS). */
40
+ inputTokens: number;
41
+ /** Output audio tokens (for token-based TTS billing, e.g., OpenAI TTS). */
42
+ outputTokens: number;
43
+ /** Number of characters synthesized (for character-based TTS billing). */
44
+ charactersCount: number;
45
+ /**
46
+ * Duration of generated audio in milliseconds.
47
+ */
48
+ audioDurationMs: number;
49
+ };
50
+ export type STTModelUsage = {
51
+ type: 'stt_usage';
52
+ /** The provider name (e.g., 'deepgram', 'assemblyai'). */
53
+ provider: string;
54
+ /** The model name (e.g., 'nova-2', 'best'). */
55
+ model: string;
56
+ /** Input audio tokens (for token-based STT billing). */
57
+ inputTokens: number;
58
+ /** Output text tokens (for token-based STT billing). */
59
+ outputTokens: number;
60
+ /** Duration of processed audio in milliseconds. */
61
+ audioDurationMs: number;
62
+ };
63
+ export type InterruptionModelUsage = {
64
+ type: 'interruption_usage';
65
+ /** The provider name (e.g., 'livekit'). */
66
+ provider: string;
67
+ /** The model name (e.g., 'adaptive interruption'). */
68
+ model: string;
69
+ /** Total number of requests sent. */
70
+ totalRequests: number;
71
+ };
72
+ export type ModelUsage = LLMModelUsage | TTSModelUsage | STTModelUsage | InterruptionModelUsage;
73
+ export declare function filterZeroValues<T extends ModelUsage>(usage: T): Partial<T>;
74
+ export declare class ModelUsageCollector {
75
+ private llmUsage;
76
+ private ttsUsage;
77
+ private sttUsage;
78
+ private interruptionUsage;
79
+ /** Extract provider and model from metrics metadata. */
80
+ private extractProviderModel;
81
+ /** Get or create an LLMModelUsage for the given provider/model combination. */
82
+ private getLLMUsage;
83
+ /** Get or create a TTSModelUsage for the given provider/model combination. */
84
+ private getTTSUsage;
85
+ /** Get or create an STTModelUsage for the given provider/model combination. */
86
+ private getSTTUsage;
87
+ private getInterruptionUsage;
88
+ /** Collect metrics and aggregate usage by model/provider. */
89
+ collect(metrics: AgentMetrics): void;
90
+ flatten(): ModelUsage[];
91
+ }
92
+ //# sourceMappingURL=model_usage.d.ts.map
@@ -0,0 +1,92 @@
1
+ import type { AgentMetrics } from './base.js';
2
+ export type LLMModelUsage = {
3
+ type: 'llm_usage';
4
+ /** The provider name (e.g., 'openai', 'anthropic'). */
5
+ provider: string;
6
+ /** The model name (e.g., 'gpt-4o', 'claude-3-5-sonnet'). */
7
+ model: string;
8
+ /** Total input tokens. */
9
+ inputTokens: number;
10
+ /** Input tokens served from cache. */
11
+ inputCachedTokens: number;
12
+ /** Input audio tokens (for multimodal models). */
13
+ inputAudioTokens: number;
14
+ /** Cached input audio tokens. */
15
+ inputCachedAudioTokens: number;
16
+ /** Input text tokens. */
17
+ inputTextTokens: number;
18
+ /** Cached input text tokens. */
19
+ inputCachedTextTokens: number;
20
+ /** Input image tokens (for multimodal models). */
21
+ inputImageTokens: number;
22
+ /** Cached input image tokens. */
23
+ inputCachedImageTokens: number;
24
+ /** Total output tokens. */
25
+ outputTokens: number;
26
+ /** Output audio tokens (for multimodal models). */
27
+ outputAudioTokens: number;
28
+ /** Output text tokens. */
29
+ outputTextTokens: number;
30
+ /** Total session connection duration in milliseconds (for session-based billing like xAI). */
31
+ sessionDurationMs: number;
32
+ };
33
+ export type TTSModelUsage = {
34
+ type: 'tts_usage';
35
+ /** The provider name (e.g., 'elevenlabs', 'cartesia'). */
36
+ provider: string;
37
+ /** The model name (e.g., 'eleven_turbo_v2', 'sonic'). */
38
+ model: string;
39
+ /** Input text tokens (for token-based TTS billing, e.g., OpenAI TTS). */
40
+ inputTokens: number;
41
+ /** Output audio tokens (for token-based TTS billing, e.g., OpenAI TTS). */
42
+ outputTokens: number;
43
+ /** Number of characters synthesized (for character-based TTS billing). */
44
+ charactersCount: number;
45
+ /**
46
+ * Duration of generated audio in milliseconds.
47
+ */
48
+ audioDurationMs: number;
49
+ };
50
+ export type STTModelUsage = {
51
+ type: 'stt_usage';
52
+ /** The provider name (e.g., 'deepgram', 'assemblyai'). */
53
+ provider: string;
54
+ /** The model name (e.g., 'nova-2', 'best'). */
55
+ model: string;
56
+ /** Input audio tokens (for token-based STT billing). */
57
+ inputTokens: number;
58
+ /** Output text tokens (for token-based STT billing). */
59
+ outputTokens: number;
60
+ /** Duration of processed audio in milliseconds. */
61
+ audioDurationMs: number;
62
+ };
63
+ export type InterruptionModelUsage = {
64
+ type: 'interruption_usage';
65
+ /** The provider name (e.g., 'livekit'). */
66
+ provider: string;
67
+ /** The model name (e.g., 'adaptive interruption'). */
68
+ model: string;
69
+ /** Total number of requests sent. */
70
+ totalRequests: number;
71
+ };
72
+ export type ModelUsage = LLMModelUsage | TTSModelUsage | STTModelUsage | InterruptionModelUsage;
73
+ export declare function filterZeroValues<T extends ModelUsage>(usage: T): Partial<T>;
74
+ export declare class ModelUsageCollector {
75
+ private llmUsage;
76
+ private ttsUsage;
77
+ private sttUsage;
78
+ private interruptionUsage;
79
+ /** Extract provider and model from metrics metadata. */
80
+ private extractProviderModel;
81
+ /** Get or create an LLMModelUsage for the given provider/model combination. */
82
+ private getLLMUsage;
83
+ /** Get or create a TTSModelUsage for the given provider/model combination. */
84
+ private getTTSUsage;
85
+ /** Get or create an STTModelUsage for the given provider/model combination. */
86
+ private getSTTUsage;
87
+ private getInterruptionUsage;
88
+ /** Collect metrics and aggregate usage by model/provider. */
89
+ collect(metrics: AgentMetrics): void;
90
+ flatten(): ModelUsage[];
91
+ }
92
+ //# sourceMappingURL=model_usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model_usage.d.ts","sourceRoot":"","sources":["../../src/metrics/model_usage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yBAAyB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,8FAA8F;IAC9F,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,sBAAsB,CAAC;AAEhG,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ3E;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,iBAAiB,CAAkD;IAE3E,wDAAwD;IACxD,OAAO,CAAC,oBAAoB;IAY5B,+EAA+E;IAC/E,OAAO,CAAC,WAAW;IA0BnB,8EAA8E;IAC9E,OAAO,CAAC,WAAW;IAkBnB,+EAA+E;IAC/E,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,oBAAoB;IAe5B,6DAA6D;IAC7D,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IA+CpC,OAAO,IAAI,UAAU,EAAE;CAgBxB"}
@@ -0,0 +1,164 @@
1
+ function filterZeroValues(usage) {
2
+ const result = {};
3
+ for (const [key, value] of Object.entries(usage)) {
4
+ if (value !== 0 && value !== 0) {
5
+ result[key] = value;
6
+ }
7
+ }
8
+ return result;
9
+ }
10
+ class ModelUsageCollector {
11
+ llmUsage = /* @__PURE__ */ new Map();
12
+ ttsUsage = /* @__PURE__ */ new Map();
13
+ sttUsage = /* @__PURE__ */ new Map();
14
+ interruptionUsage = /* @__PURE__ */ new Map();
15
+ /** Extract provider and model from metrics metadata. */
16
+ extractProviderModel(metrics) {
17
+ let provider = "";
18
+ let model = "";
19
+ if (metrics.metadata) {
20
+ provider = metrics.metadata.modelProvider || "";
21
+ model = metrics.metadata.modelName || "";
22
+ }
23
+ return [provider, model];
24
+ }
25
+ /** Get or create an LLMModelUsage for the given provider/model combination. */
26
+ getLLMUsage(provider, model) {
27
+ const key = `${provider}:${model}`;
28
+ let usage = this.llmUsage.get(key);
29
+ if (!usage) {
30
+ usage = {
31
+ type: "llm_usage",
32
+ provider,
33
+ model,
34
+ inputTokens: 0,
35
+ inputCachedTokens: 0,
36
+ inputAudioTokens: 0,
37
+ inputCachedAudioTokens: 0,
38
+ inputTextTokens: 0,
39
+ inputCachedTextTokens: 0,
40
+ inputImageTokens: 0,
41
+ inputCachedImageTokens: 0,
42
+ outputTokens: 0,
43
+ outputAudioTokens: 0,
44
+ outputTextTokens: 0,
45
+ sessionDurationMs: 0
46
+ };
47
+ this.llmUsage.set(key, usage);
48
+ }
49
+ return usage;
50
+ }
51
+ /** Get or create a TTSModelUsage for the given provider/model combination. */
52
+ getTTSUsage(provider, model) {
53
+ const key = `${provider}:${model}`;
54
+ let usage = this.ttsUsage.get(key);
55
+ if (!usage) {
56
+ usage = {
57
+ type: "tts_usage",
58
+ provider,
59
+ model,
60
+ inputTokens: 0,
61
+ outputTokens: 0,
62
+ charactersCount: 0,
63
+ audioDurationMs: 0
64
+ };
65
+ this.ttsUsage.set(key, usage);
66
+ }
67
+ return usage;
68
+ }
69
+ /** Get or create an STTModelUsage for the given provider/model combination. */
70
+ getSTTUsage(provider, model) {
71
+ const key = `${provider}:${model}`;
72
+ let usage = this.sttUsage.get(key);
73
+ if (!usage) {
74
+ usage = {
75
+ type: "stt_usage",
76
+ provider,
77
+ model,
78
+ inputTokens: 0,
79
+ outputTokens: 0,
80
+ audioDurationMs: 0
81
+ };
82
+ this.sttUsage.set(key, usage);
83
+ }
84
+ return usage;
85
+ }
86
+ getInterruptionUsage(provider, model) {
87
+ const key = `${provider}:${model}`;
88
+ let usage = this.interruptionUsage.get(key);
89
+ if (!usage) {
90
+ usage = {
91
+ type: "interruption_usage",
92
+ provider,
93
+ model,
94
+ totalRequests: 0
95
+ };
96
+ this.interruptionUsage.set(key, usage);
97
+ }
98
+ return usage;
99
+ }
100
+ /** Collect metrics and aggregate usage by model/provider. */
101
+ collect(metrics) {
102
+ var _a, _b, _c;
103
+ if (metrics.type === "llm_metrics") {
104
+ const [provider, model] = this.extractProviderModel(metrics);
105
+ const usage = this.getLLMUsage(provider, model);
106
+ usage.inputTokens += metrics.promptTokens;
107
+ usage.inputCachedTokens += metrics.promptCachedTokens;
108
+ usage.outputTokens += metrics.completionTokens;
109
+ } else if (metrics.type === "realtime_model_metrics") {
110
+ const [provider, model] = this.extractProviderModel(metrics);
111
+ const usage = this.getLLMUsage(provider, model);
112
+ usage.inputTokens += metrics.inputTokens;
113
+ usage.inputCachedTokens += metrics.inputTokenDetails.cachedTokens;
114
+ usage.inputTextTokens += metrics.inputTokenDetails.textTokens;
115
+ usage.inputCachedTextTokens += ((_a = metrics.inputTokenDetails.cachedTokensDetails) == null ? void 0 : _a.textTokens) ?? 0;
116
+ usage.inputImageTokens += metrics.inputTokenDetails.imageTokens;
117
+ usage.inputCachedImageTokens += ((_b = metrics.inputTokenDetails.cachedTokensDetails) == null ? void 0 : _b.imageTokens) ?? 0;
118
+ usage.inputAudioTokens += metrics.inputTokenDetails.audioTokens;
119
+ usage.inputCachedAudioTokens += ((_c = metrics.inputTokenDetails.cachedTokensDetails) == null ? void 0 : _c.audioTokens) ?? 0;
120
+ usage.outputTextTokens += metrics.outputTokenDetails.textTokens;
121
+ usage.outputAudioTokens += metrics.outputTokenDetails.audioTokens;
122
+ usage.outputTokens += metrics.outputTokens;
123
+ usage.sessionDurationMs += metrics.sessionDurationMs ?? 0;
124
+ } else if (metrics.type === "tts_metrics") {
125
+ const [provider, model] = this.extractProviderModel(metrics);
126
+ const ttsUsage = this.getTTSUsage(provider, model);
127
+ ttsUsage.inputTokens += metrics.inputTokens ?? 0;
128
+ ttsUsage.outputTokens += metrics.outputTokens ?? 0;
129
+ ttsUsage.charactersCount += metrics.charactersCount;
130
+ ttsUsage.audioDurationMs += metrics.audioDurationMs;
131
+ } else if (metrics.type === "stt_metrics") {
132
+ const [provider, model] = this.extractProviderModel(metrics);
133
+ const sttUsage = this.getSTTUsage(provider, model);
134
+ sttUsage.inputTokens += metrics.inputTokens ?? 0;
135
+ sttUsage.outputTokens += metrics.outputTokens ?? 0;
136
+ sttUsage.audioDurationMs += metrics.audioDurationMs;
137
+ } else if (metrics.type === "interruption_metrics") {
138
+ const [provider, model] = this.extractProviderModel(metrics);
139
+ const usage = this.getInterruptionUsage(provider, model);
140
+ usage.totalRequests += metrics.numRequests;
141
+ }
142
+ }
143
+ flatten() {
144
+ const result = [];
145
+ for (const u of this.llmUsage.values()) {
146
+ result.push({ ...u });
147
+ }
148
+ for (const u of this.ttsUsage.values()) {
149
+ result.push({ ...u });
150
+ }
151
+ for (const u of this.sttUsage.values()) {
152
+ result.push({ ...u });
153
+ }
154
+ for (const u of this.interruptionUsage.values()) {
155
+ result.push({ ...u });
156
+ }
157
+ return result;
158
+ }
159
+ }
160
+ export {
161
+ ModelUsageCollector,
162
+ filterZeroValues
163
+ };
164
+ //# sourceMappingURL=model_usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/metrics/model_usage.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n AgentMetrics,\n InterruptionMetrics,\n LLMMetrics,\n RealtimeModelMetrics,\n STTMetrics,\n TTSMetrics,\n} from './base.js';\n\nexport type LLMModelUsage = {\n type: 'llm_usage';\n /** The provider name (e.g., 'openai', 'anthropic'). */\n provider: string;\n /** The model name (e.g., 'gpt-4o', 'claude-3-5-sonnet'). */\n model: string;\n /** Total input tokens. */\n inputTokens: number;\n /** Input tokens served from cache. */\n inputCachedTokens: number;\n /** Input audio tokens (for multimodal models). */\n inputAudioTokens: number;\n /** Cached input audio tokens. */\n inputCachedAudioTokens: number;\n /** Input text tokens. */\n inputTextTokens: number;\n /** Cached input text tokens. */\n inputCachedTextTokens: number;\n /** Input image tokens (for multimodal models). */\n inputImageTokens: number;\n /** Cached input image tokens. */\n inputCachedImageTokens: number;\n /** Total output tokens. */\n outputTokens: number;\n /** Output audio tokens (for multimodal models). */\n outputAudioTokens: number;\n /** Output text tokens. */\n outputTextTokens: number;\n /** Total session connection duration in milliseconds (for session-based billing like xAI). */\n sessionDurationMs: number;\n};\n\nexport type TTSModelUsage = {\n type: 'tts_usage';\n /** The provider name (e.g., 'elevenlabs', 'cartesia'). */\n provider: string;\n /** The model name (e.g., 'eleven_turbo_v2', 'sonic'). */\n model: string;\n /** Input text tokens (for token-based TTS billing, e.g., OpenAI TTS). */\n inputTokens: number;\n /** Output audio tokens (for token-based TTS billing, e.g., OpenAI TTS). */\n outputTokens: number;\n /** Number of characters synthesized (for character-based TTS billing). */\n charactersCount: number;\n /**\n * Duration of generated audio in milliseconds.\n */\n audioDurationMs: number;\n};\n\nexport type STTModelUsage = {\n type: 'stt_usage';\n /** The provider name (e.g., 'deepgram', 'assemblyai'). */\n provider: string;\n /** The model name (e.g., 'nova-2', 'best'). */\n model: string;\n /** Input audio tokens (for token-based STT billing). */\n inputTokens: number;\n /** Output text tokens (for token-based STT billing). */\n outputTokens: number;\n /** Duration of processed audio in milliseconds. */\n audioDurationMs: number;\n};\n\nexport type InterruptionModelUsage = {\n type: 'interruption_usage';\n /** The provider name (e.g., 'livekit'). */\n provider: string;\n /** The model name (e.g., 'adaptive interruption'). */\n model: string;\n /** Total number of requests sent. */\n totalRequests: number;\n};\n\nexport type ModelUsage = LLMModelUsage | TTSModelUsage | STTModelUsage | InterruptionModelUsage;\n\nexport function filterZeroValues<T extends ModelUsage>(usage: T): Partial<T> {\n const result: Partial<T> = {} as Partial<T>;\n for (const [key, value] of Object.entries(usage)) {\n if (value !== 0 && value !== 0.0) {\n (result as Record<string, unknown>)[key] = value;\n }\n }\n return result;\n}\n\nexport class ModelUsageCollector {\n private llmUsage: Map<string, LLMModelUsage> = new Map();\n private ttsUsage: Map<string, TTSModelUsage> = new Map();\n private sttUsage: Map<string, STTModelUsage> = new Map();\n\n private interruptionUsage: Map<string, InterruptionModelUsage> = new Map();\n\n /** Extract provider and model from metrics metadata. */\n private extractProviderModel(\n metrics: LLMMetrics | STTMetrics | TTSMetrics | RealtimeModelMetrics | InterruptionMetrics,\n ): [string, string] {\n let provider = '';\n let model = '';\n if (metrics.metadata) {\n provider = metrics.metadata.modelProvider || '';\n model = metrics.metadata.modelName || '';\n }\n return [provider, model];\n }\n\n /** Get or create an LLMModelUsage for the given provider/model combination. */\n private getLLMUsage(provider: string, model: string): LLMModelUsage {\n const key = `${provider}:${model}`;\n let usage = this.llmUsage.get(key);\n if (!usage) {\n usage = {\n type: 'llm_usage',\n provider,\n model,\n inputTokens: 0,\n inputCachedTokens: 0,\n inputAudioTokens: 0,\n inputCachedAudioTokens: 0,\n inputTextTokens: 0,\n inputCachedTextTokens: 0,\n inputImageTokens: 0,\n inputCachedImageTokens: 0,\n outputTokens: 0,\n outputAudioTokens: 0,\n outputTextTokens: 0,\n sessionDurationMs: 0,\n };\n this.llmUsage.set(key, usage);\n }\n return usage;\n }\n\n /** Get or create a TTSModelUsage for the given provider/model combination. */\n private getTTSUsage(provider: string, model: string): TTSModelUsage {\n const key = `${provider}:${model}`;\n let usage = this.ttsUsage.get(key);\n if (!usage) {\n usage = {\n type: 'tts_usage',\n provider,\n model,\n inputTokens: 0,\n outputTokens: 0,\n charactersCount: 0,\n audioDurationMs: 0,\n };\n this.ttsUsage.set(key, usage);\n }\n return usage;\n }\n\n /** Get or create an STTModelUsage for the given provider/model combination. */\n private getSTTUsage(provider: string, model: string): STTModelUsage {\n const key = `${provider}:${model}`;\n let usage = this.sttUsage.get(key);\n if (!usage) {\n usage = {\n type: 'stt_usage',\n provider,\n model,\n inputTokens: 0,\n outputTokens: 0,\n audioDurationMs: 0,\n };\n this.sttUsage.set(key, usage);\n }\n return usage;\n }\n\n private getInterruptionUsage(provider: string, model: string): InterruptionModelUsage {\n const key = `${provider}:${model}`;\n let usage = this.interruptionUsage.get(key);\n if (!usage) {\n usage = {\n type: 'interruption_usage',\n provider,\n model,\n totalRequests: 0,\n };\n this.interruptionUsage.set(key, usage);\n }\n return usage;\n }\n\n /** Collect metrics and aggregate usage by model/provider. */\n collect(metrics: AgentMetrics): void {\n if (metrics.type === 'llm_metrics') {\n const [provider, model] = this.extractProviderModel(metrics);\n const usage = this.getLLMUsage(provider, model);\n usage.inputTokens += metrics.promptTokens;\n usage.inputCachedTokens += metrics.promptCachedTokens;\n usage.outputTokens += metrics.completionTokens;\n } else if (metrics.type === 'realtime_model_metrics') {\n const [provider, model] = this.extractProviderModel(metrics);\n const usage = this.getLLMUsage(provider, model);\n usage.inputTokens += metrics.inputTokens;\n usage.inputCachedTokens += metrics.inputTokenDetails.cachedTokens;\n\n usage.inputTextTokens += metrics.inputTokenDetails.textTokens;\n usage.inputCachedTextTokens += metrics.inputTokenDetails.cachedTokensDetails?.textTokens ?? 0;\n usage.inputImageTokens += metrics.inputTokenDetails.imageTokens;\n usage.inputCachedImageTokens +=\n metrics.inputTokenDetails.cachedTokensDetails?.imageTokens ?? 0;\n usage.inputAudioTokens += metrics.inputTokenDetails.audioTokens;\n usage.inputCachedAudioTokens +=\n metrics.inputTokenDetails.cachedTokensDetails?.audioTokens ?? 0;\n\n usage.outputTextTokens += metrics.outputTokenDetails.textTokens;\n usage.outputAudioTokens += metrics.outputTokenDetails.audioTokens;\n usage.outputTokens += metrics.outputTokens;\n usage.sessionDurationMs += metrics.sessionDurationMs ?? 0;\n } else if (metrics.type === 'tts_metrics') {\n const [provider, model] = this.extractProviderModel(metrics);\n const ttsUsage = this.getTTSUsage(provider, model);\n ttsUsage.inputTokens += metrics.inputTokens ?? 0;\n ttsUsage.outputTokens += metrics.outputTokens ?? 0;\n ttsUsage.charactersCount += metrics.charactersCount;\n ttsUsage.audioDurationMs += metrics.audioDurationMs;\n } else if (metrics.type === 'stt_metrics') {\n const [provider, model] = this.extractProviderModel(metrics);\n const sttUsage = this.getSTTUsage(provider, model);\n sttUsage.inputTokens += metrics.inputTokens ?? 0;\n sttUsage.outputTokens += metrics.outputTokens ?? 0;\n sttUsage.audioDurationMs += metrics.audioDurationMs;\n } else if (metrics.type === 'interruption_metrics') {\n const [provider, model] = this.extractProviderModel(metrics);\n const usage = this.getInterruptionUsage(provider, model);\n usage.totalRequests += metrics.numRequests;\n }\n // VAD and EOU metrics are not aggregated for usage tracking.\n }\n\n flatten(): ModelUsage[] {\n const result: ModelUsage[] = [];\n for (const u of this.llmUsage.values()) {\n result.push({ ...u });\n }\n for (const u of this.ttsUsage.values()) {\n result.push({ ...u });\n }\n for (const u of this.sttUsage.values()) {\n result.push({ ...u });\n }\n for (const u of this.interruptionUsage.values()) {\n result.push({ ...u });\n }\n return result;\n }\n}\n"],"mappings":"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","names":[]}