@livekit/agents 0.7.8 → 1.0.0-next.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 (627) hide show
  1. package/dist/_exceptions.cjs +109 -0
  2. package/dist/_exceptions.cjs.map +1 -0
  3. package/dist/_exceptions.d.cts +64 -0
  4. package/dist/_exceptions.d.ts +64 -0
  5. package/dist/_exceptions.d.ts.map +1 -0
  6. package/dist/_exceptions.js +80 -0
  7. package/dist/_exceptions.js.map +1 -0
  8. package/dist/audio.cjs +10 -3
  9. package/dist/audio.cjs.map +1 -1
  10. package/dist/audio.d.cts +2 -0
  11. package/dist/audio.d.ts +2 -0
  12. package/dist/audio.d.ts.map +1 -1
  13. package/dist/audio.js +8 -2
  14. package/dist/audio.js.map +1 -1
  15. package/dist/cli.cjs +25 -0
  16. package/dist/cli.cjs.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +25 -0
  19. package/dist/cli.js.map +1 -1
  20. package/dist/constants.cjs +6 -0
  21. package/dist/constants.cjs.map +1 -1
  22. package/dist/constants.d.cts +2 -0
  23. package/dist/constants.d.ts +2 -0
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js +4 -0
  26. package/dist/constants.js.map +1 -1
  27. package/dist/http_server.cjs.map +1 -1
  28. package/dist/http_server.d.cts +1 -0
  29. package/dist/http_server.d.ts +1 -0
  30. package/dist/http_server.d.ts.map +1 -1
  31. package/dist/http_server.js.map +1 -1
  32. package/dist/index.cjs +27 -20
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +13 -10
  35. package/dist/index.d.ts +13 -10
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +15 -11
  38. package/dist/index.js.map +1 -1
  39. package/dist/inference_runner.cjs +0 -1
  40. package/dist/inference_runner.cjs.map +1 -1
  41. package/dist/inference_runner.d.cts +2 -3
  42. package/dist/inference_runner.d.ts +2 -3
  43. package/dist/inference_runner.d.ts.map +1 -1
  44. package/dist/inference_runner.js +0 -1
  45. package/dist/inference_runner.js.map +1 -1
  46. package/dist/ipc/inference_proc_executor.cjs +2 -2
  47. package/dist/ipc/inference_proc_executor.cjs.map +1 -1
  48. package/dist/ipc/inference_proc_executor.js +2 -2
  49. package/dist/ipc/inference_proc_executor.js.map +1 -1
  50. package/dist/ipc/job_executor.cjs.map +1 -1
  51. package/dist/ipc/job_executor.js.map +1 -1
  52. package/dist/ipc/job_proc_executor.cjs +1 -0
  53. package/dist/ipc/job_proc_executor.cjs.map +1 -1
  54. package/dist/ipc/job_proc_executor.js +1 -0
  55. package/dist/ipc/job_proc_executor.js.map +1 -1
  56. package/dist/ipc/job_proc_lazy_main.cjs +1 -1
  57. package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
  58. package/dist/ipc/job_proc_lazy_main.js +1 -1
  59. package/dist/ipc/job_proc_lazy_main.js.map +1 -1
  60. package/dist/ipc/supervised_proc.d.cts +1 -1
  61. package/dist/ipc/supervised_proc.d.ts +1 -1
  62. package/dist/ipc/supervised_proc.d.ts.map +1 -1
  63. package/dist/job.cjs +14 -2
  64. package/dist/job.cjs.map +1 -1
  65. package/dist/job.d.cts +8 -0
  66. package/dist/job.d.ts +8 -0
  67. package/dist/job.d.ts.map +1 -1
  68. package/dist/job.js +12 -1
  69. package/dist/job.js.map +1 -1
  70. package/dist/llm/chat_context.cjs +332 -82
  71. package/dist/llm/chat_context.cjs.map +1 -1
  72. package/dist/llm/chat_context.d.cts +152 -48
  73. package/dist/llm/chat_context.d.ts +152 -48
  74. package/dist/llm/chat_context.d.ts.map +1 -1
  75. package/dist/llm/chat_context.js +327 -81
  76. package/dist/llm/chat_context.js.map +1 -1
  77. package/dist/llm/chat_context.test.cjs +380 -0
  78. package/dist/llm/chat_context.test.cjs.map +1 -0
  79. package/dist/llm/chat_context.test.js +385 -0
  80. package/dist/llm/chat_context.test.js.map +1 -0
  81. package/dist/llm/index.cjs +37 -8
  82. package/dist/llm/index.cjs.map +1 -1
  83. package/dist/llm/index.d.cts +7 -3
  84. package/dist/llm/index.d.ts +7 -3
  85. package/dist/llm/index.d.ts.map +1 -1
  86. package/dist/llm/index.js +39 -9
  87. package/dist/llm/index.js.map +1 -1
  88. package/dist/llm/llm.cjs +98 -33
  89. package/dist/llm/llm.cjs.map +1 -1
  90. package/dist/llm/llm.d.cts +50 -24
  91. package/dist/llm/llm.d.ts +50 -24
  92. package/dist/llm/llm.d.ts.map +1 -1
  93. package/dist/llm/llm.js +99 -33
  94. package/dist/llm/llm.js.map +1 -1
  95. package/dist/llm/provider_format/google.cjs +128 -0
  96. package/dist/llm/provider_format/google.cjs.map +1 -0
  97. package/dist/llm/provider_format/google.d.cts +6 -0
  98. package/dist/llm/provider_format/google.d.ts +6 -0
  99. package/dist/llm/provider_format/google.d.ts.map +1 -0
  100. package/dist/llm/provider_format/google.js +104 -0
  101. package/dist/llm/provider_format/google.js.map +1 -0
  102. package/dist/llm/provider_format/google.test.cjs +676 -0
  103. package/dist/llm/provider_format/google.test.cjs.map +1 -0
  104. package/dist/llm/provider_format/google.test.js +675 -0
  105. package/dist/llm/provider_format/google.test.js.map +1 -0
  106. package/dist/llm/provider_format/index.cjs +40 -0
  107. package/dist/llm/provider_format/index.cjs.map +1 -0
  108. package/dist/llm/provider_format/index.d.cts +4 -0
  109. package/dist/llm/provider_format/index.d.ts +4 -0
  110. package/dist/llm/provider_format/index.d.ts.map +1 -0
  111. package/dist/llm/provider_format/index.js +16 -0
  112. package/dist/llm/provider_format/index.js.map +1 -0
  113. package/dist/llm/provider_format/openai.cjs +116 -0
  114. package/dist/llm/provider_format/openai.cjs.map +1 -0
  115. package/dist/llm/provider_format/openai.d.cts +3 -0
  116. package/dist/llm/provider_format/openai.d.ts +3 -0
  117. package/dist/llm/provider_format/openai.d.ts.map +1 -0
  118. package/dist/llm/provider_format/openai.js +92 -0
  119. package/dist/llm/provider_format/openai.js.map +1 -0
  120. package/dist/llm/provider_format/openai.test.cjs +490 -0
  121. package/dist/llm/provider_format/openai.test.cjs.map +1 -0
  122. package/dist/llm/provider_format/openai.test.js +489 -0
  123. package/dist/llm/provider_format/openai.test.js.map +1 -0
  124. package/dist/llm/provider_format/utils.cjs +146 -0
  125. package/dist/llm/provider_format/utils.cjs.map +1 -0
  126. package/dist/llm/provider_format/utils.d.cts +38 -0
  127. package/dist/llm/provider_format/utils.d.ts +38 -0
  128. package/dist/llm/provider_format/utils.d.ts.map +1 -0
  129. package/dist/llm/provider_format/utils.js +122 -0
  130. package/dist/llm/provider_format/utils.js.map +1 -0
  131. package/dist/llm/realtime.cjs +77 -0
  132. package/dist/llm/realtime.cjs.map +1 -0
  133. package/dist/llm/realtime.d.cts +98 -0
  134. package/dist/llm/realtime.d.ts +98 -0
  135. package/dist/llm/realtime.d.ts.map +1 -0
  136. package/dist/llm/realtime.js +52 -0
  137. package/dist/llm/realtime.js.map +1 -0
  138. package/dist/llm/remote_chat_context.cjs +112 -0
  139. package/dist/llm/remote_chat_context.cjs.map +1 -0
  140. package/dist/llm/remote_chat_context.d.cts +23 -0
  141. package/dist/llm/remote_chat_context.d.ts +23 -0
  142. package/dist/llm/remote_chat_context.d.ts.map +1 -0
  143. package/dist/llm/remote_chat_context.js +88 -0
  144. package/dist/llm/remote_chat_context.js.map +1 -0
  145. package/dist/llm/remote_chat_context.test.cjs +225 -0
  146. package/dist/llm/remote_chat_context.test.cjs.map +1 -0
  147. package/dist/llm/remote_chat_context.test.js +224 -0
  148. package/dist/llm/remote_chat_context.test.js.map +1 -0
  149. package/dist/llm/tool_context.cjs +111 -0
  150. package/dist/llm/tool_context.cjs.map +1 -0
  151. package/dist/llm/tool_context.d.cts +125 -0
  152. package/dist/llm/tool_context.d.ts +125 -0
  153. package/dist/llm/tool_context.d.ts.map +1 -0
  154. package/dist/llm/tool_context.js +80 -0
  155. package/dist/llm/tool_context.js.map +1 -0
  156. package/dist/llm/tool_context.test.cjs +162 -0
  157. package/dist/llm/tool_context.test.cjs.map +1 -0
  158. package/dist/llm/tool_context.test.js +161 -0
  159. package/dist/llm/tool_context.test.js.map +1 -0
  160. package/dist/llm/tool_context.type.test.cjs +92 -0
  161. package/dist/llm/tool_context.type.test.cjs.map +1 -0
  162. package/dist/llm/tool_context.type.test.js +91 -0
  163. package/dist/llm/tool_context.type.test.js.map +1 -0
  164. package/dist/llm/utils.cjs +260 -0
  165. package/dist/llm/utils.cjs.map +1 -0
  166. package/dist/llm/utils.d.cts +42 -0
  167. package/dist/llm/utils.d.ts +42 -0
  168. package/dist/llm/utils.d.ts.map +1 -0
  169. package/dist/llm/utils.js +223 -0
  170. package/dist/llm/utils.js.map +1 -0
  171. package/dist/llm/utils.test.cjs +513 -0
  172. package/dist/llm/utils.test.cjs.map +1 -0
  173. package/dist/llm/utils.test.js +490 -0
  174. package/dist/llm/utils.test.js.map +1 -0
  175. package/dist/metrics/base.cjs +0 -27
  176. package/dist/metrics/base.cjs.map +1 -1
  177. package/dist/metrics/base.d.cts +105 -63
  178. package/dist/metrics/base.d.ts +105 -63
  179. package/dist/metrics/base.d.ts.map +1 -1
  180. package/dist/metrics/base.js +0 -19
  181. package/dist/metrics/base.js.map +1 -1
  182. package/dist/metrics/index.cjs +0 -3
  183. package/dist/metrics/index.cjs.map +1 -1
  184. package/dist/metrics/index.d.cts +2 -3
  185. package/dist/metrics/index.d.ts +2 -3
  186. package/dist/metrics/index.d.ts.map +1 -1
  187. package/dist/metrics/index.js +0 -2
  188. package/dist/metrics/index.js.map +1 -1
  189. package/dist/metrics/usage_collector.cjs +17 -12
  190. package/dist/metrics/usage_collector.cjs.map +1 -1
  191. package/dist/metrics/usage_collector.d.cts +3 -2
  192. package/dist/metrics/usage_collector.d.ts +3 -2
  193. package/dist/metrics/usage_collector.d.ts.map +1 -1
  194. package/dist/metrics/usage_collector.js +17 -12
  195. package/dist/metrics/usage_collector.js.map +1 -1
  196. package/dist/metrics/utils.cjs +22 -59
  197. package/dist/metrics/utils.cjs.map +1 -1
  198. package/dist/metrics/utils.d.cts +1 -8
  199. package/dist/metrics/utils.d.ts +1 -8
  200. package/dist/metrics/utils.d.ts.map +1 -1
  201. package/dist/metrics/utils.js +22 -52
  202. package/dist/metrics/utils.js.map +1 -1
  203. package/dist/multimodal/index.cjs +0 -2
  204. package/dist/multimodal/index.cjs.map +1 -1
  205. package/dist/multimodal/index.d.cts +0 -1
  206. package/dist/multimodal/index.d.ts +0 -1
  207. package/dist/multimodal/index.d.ts.map +1 -1
  208. package/dist/multimodal/index.js +0 -1
  209. package/dist/multimodal/index.js.map +1 -1
  210. package/dist/plugin.cjs +24 -8
  211. package/dist/plugin.cjs.map +1 -1
  212. package/dist/plugin.d.cts +18 -4
  213. package/dist/plugin.d.ts +18 -4
  214. package/dist/plugin.d.ts.map +1 -1
  215. package/dist/plugin.js +22 -7
  216. package/dist/plugin.js.map +1 -1
  217. package/dist/stream/deferred_stream.cjs +98 -0
  218. package/dist/stream/deferred_stream.cjs.map +1 -0
  219. package/dist/stream/deferred_stream.d.cts +27 -0
  220. package/dist/stream/deferred_stream.d.ts +27 -0
  221. package/dist/stream/deferred_stream.d.ts.map +1 -0
  222. package/dist/stream/deferred_stream.js +73 -0
  223. package/dist/stream/deferred_stream.js.map +1 -0
  224. package/dist/stream/deferred_stream.test.cjs +527 -0
  225. package/dist/stream/deferred_stream.test.cjs.map +1 -0
  226. package/dist/stream/deferred_stream.test.js +526 -0
  227. package/dist/stream/deferred_stream.test.js.map +1 -0
  228. package/dist/stream/identity_transform.cjs +42 -0
  229. package/dist/stream/identity_transform.cjs.map +1 -0
  230. package/dist/stream/identity_transform.d.cts +6 -0
  231. package/dist/stream/identity_transform.d.ts +6 -0
  232. package/dist/stream/identity_transform.d.ts.map +1 -0
  233. package/dist/stream/identity_transform.js +18 -0
  234. package/dist/stream/identity_transform.js.map +1 -0
  235. package/dist/stream/identity_transform.test.cjs +125 -0
  236. package/dist/stream/identity_transform.test.cjs.map +1 -0
  237. package/dist/stream/identity_transform.test.js +124 -0
  238. package/dist/stream/identity_transform.test.js.map +1 -0
  239. package/dist/stream/index.cjs +38 -0
  240. package/dist/stream/index.cjs.map +1 -0
  241. package/dist/stream/index.d.cts +5 -0
  242. package/dist/stream/index.d.ts +5 -0
  243. package/dist/stream/index.d.ts.map +1 -0
  244. package/dist/stream/index.js +11 -0
  245. package/dist/stream/index.js.map +1 -0
  246. package/dist/stream/merge_readable_streams.cjs +59 -0
  247. package/dist/stream/merge_readable_streams.cjs.map +1 -0
  248. package/dist/stream/merge_readable_streams.d.cts +4 -0
  249. package/dist/stream/merge_readable_streams.d.ts +4 -0
  250. package/dist/stream/merge_readable_streams.d.ts.map +1 -0
  251. package/dist/stream/merge_readable_streams.js +35 -0
  252. package/dist/stream/merge_readable_streams.js.map +1 -0
  253. package/dist/stream/stream_channel.cjs +47 -0
  254. package/dist/stream/stream_channel.cjs.map +1 -0
  255. package/dist/stream/stream_channel.d.cts +9 -0
  256. package/dist/stream/stream_channel.d.ts +9 -0
  257. package/dist/stream/stream_channel.d.ts.map +1 -0
  258. package/dist/stream/stream_channel.js +23 -0
  259. package/dist/stream/stream_channel.js.map +1 -0
  260. package/dist/stream/stream_channel.test.cjs +97 -0
  261. package/dist/stream/stream_channel.test.cjs.map +1 -0
  262. package/dist/stream/stream_channel.test.js +96 -0
  263. package/dist/stream/stream_channel.test.js.map +1 -0
  264. package/dist/stt/stream_adapter.cjs +3 -4
  265. package/dist/stt/stream_adapter.cjs.map +1 -1
  266. package/dist/stt/stream_adapter.d.cts +1 -0
  267. package/dist/stt/stream_adapter.d.ts +1 -0
  268. package/dist/stt/stream_adapter.d.ts.map +1 -1
  269. package/dist/stt/stream_adapter.js +3 -4
  270. package/dist/stt/stream_adapter.js.map +1 -1
  271. package/dist/stt/stt.cjs +101 -10
  272. package/dist/stt/stt.cjs.map +1 -1
  273. package/dist/stt/stt.d.cts +26 -5
  274. package/dist/stt/stt.d.ts +26 -5
  275. package/dist/stt/stt.d.ts.map +1 -1
  276. package/dist/stt/stt.js +102 -11
  277. package/dist/stt/stt.js.map +1 -1
  278. package/dist/tokenize/basic/basic.cjs +10 -5
  279. package/dist/tokenize/basic/basic.cjs.map +1 -1
  280. package/dist/tokenize/basic/basic.d.cts +7 -1
  281. package/dist/tokenize/basic/basic.d.ts +7 -1
  282. package/dist/tokenize/basic/basic.d.ts.map +1 -1
  283. package/dist/tokenize/basic/basic.js +10 -5
  284. package/dist/tokenize/basic/basic.js.map +1 -1
  285. package/dist/tokenize/basic/sentence.cjs +14 -6
  286. package/dist/tokenize/basic/sentence.cjs.map +1 -1
  287. package/dist/tokenize/basic/sentence.d.cts +1 -1
  288. package/dist/tokenize/basic/sentence.d.ts +1 -1
  289. package/dist/tokenize/basic/sentence.d.ts.map +1 -1
  290. package/dist/tokenize/basic/sentence.js +14 -6
  291. package/dist/tokenize/basic/sentence.js.map +1 -1
  292. package/dist/tokenize/token_stream.cjs +5 -3
  293. package/dist/tokenize/token_stream.cjs.map +1 -1
  294. package/dist/tokenize/token_stream.d.cts +1 -0
  295. package/dist/tokenize/token_stream.d.ts +1 -0
  296. package/dist/tokenize/token_stream.d.ts.map +1 -1
  297. package/dist/tokenize/token_stream.js +6 -4
  298. package/dist/tokenize/token_stream.js.map +1 -1
  299. package/dist/transcription.cjs +1 -2
  300. package/dist/transcription.cjs.map +1 -1
  301. package/dist/transcription.d.ts.map +1 -1
  302. package/dist/transcription.js +2 -3
  303. package/dist/transcription.js.map +1 -1
  304. package/dist/tts/index.cjs +2 -4
  305. package/dist/tts/index.cjs.map +1 -1
  306. package/dist/tts/index.d.cts +1 -1
  307. package/dist/tts/index.d.ts +1 -1
  308. package/dist/tts/index.d.ts.map +1 -1
  309. package/dist/tts/index.js +1 -3
  310. package/dist/tts/index.js.map +1 -1
  311. package/dist/tts/stream_adapter.cjs +26 -13
  312. package/dist/tts/stream_adapter.cjs.map +1 -1
  313. package/dist/tts/stream_adapter.d.cts +1 -1
  314. package/dist/tts/stream_adapter.d.ts +1 -1
  315. package/dist/tts/stream_adapter.d.ts.map +1 -1
  316. package/dist/tts/stream_adapter.js +27 -14
  317. package/dist/tts/stream_adapter.js.map +1 -1
  318. package/dist/tts/tts.cjs +157 -25
  319. package/dist/tts/tts.cjs.map +1 -1
  320. package/dist/tts/tts.d.cts +29 -5
  321. package/dist/tts/tts.d.ts +29 -5
  322. package/dist/tts/tts.d.ts.map +1 -1
  323. package/dist/tts/tts.js +157 -24
  324. package/dist/tts/tts.js.map +1 -1
  325. package/dist/types.cjs +60 -0
  326. package/dist/types.cjs.map +1 -0
  327. package/dist/types.d.cts +13 -0
  328. package/dist/types.d.ts +13 -0
  329. package/dist/types.d.ts.map +1 -0
  330. package/dist/types.js +35 -0
  331. package/dist/types.js.map +1 -0
  332. package/dist/utils.cjs +281 -27
  333. package/dist/utils.cjs.map +1 -1
  334. package/dist/utils.d.cts +134 -9
  335. package/dist/utils.d.ts +134 -9
  336. package/dist/utils.d.ts.map +1 -1
  337. package/dist/utils.js +265 -26
  338. package/dist/utils.js.map +1 -1
  339. package/dist/utils.test.cjs +492 -0
  340. package/dist/utils.test.cjs.map +1 -0
  341. package/dist/utils.test.js +498 -0
  342. package/dist/utils.test.js.map +1 -0
  343. package/dist/vad.cjs +76 -20
  344. package/dist/vad.cjs.map +1 -1
  345. package/dist/vad.d.cts +25 -5
  346. package/dist/vad.d.ts +25 -5
  347. package/dist/vad.d.ts.map +1 -1
  348. package/dist/vad.js +76 -20
  349. package/dist/vad.js.map +1 -1
  350. package/dist/voice/agent.cjs +245 -0
  351. package/dist/voice/agent.cjs.map +1 -0
  352. package/dist/voice/agent.d.cts +78 -0
  353. package/dist/voice/agent.d.ts +78 -0
  354. package/dist/voice/agent.d.ts.map +1 -0
  355. package/dist/voice/agent.js +220 -0
  356. package/dist/voice/agent.js.map +1 -0
  357. package/dist/voice/agent.test.cjs +61 -0
  358. package/dist/voice/agent.test.cjs.map +1 -0
  359. package/dist/voice/agent.test.js +60 -0
  360. package/dist/voice/agent.test.js.map +1 -0
  361. package/dist/voice/agent_activity.cjs +1453 -0
  362. package/dist/voice/agent_activity.cjs.map +1 -0
  363. package/dist/voice/agent_activity.d.cts +94 -0
  364. package/dist/voice/agent_activity.d.ts +94 -0
  365. package/dist/voice/agent_activity.d.ts.map +1 -0
  366. package/dist/voice/agent_activity.js +1449 -0
  367. package/dist/voice/agent_activity.js.map +1 -0
  368. package/dist/voice/agent_session.cjs +312 -0
  369. package/dist/voice/agent_session.cjs.map +1 -0
  370. package/dist/voice/agent_session.d.cts +121 -0
  371. package/dist/voice/agent_session.d.ts +121 -0
  372. package/dist/voice/agent_session.d.ts.map +1 -0
  373. package/dist/voice/agent_session.js +295 -0
  374. package/dist/voice/agent_session.js.map +1 -0
  375. package/dist/voice/audio_recognition.cjs +375 -0
  376. package/dist/voice/audio_recognition.cjs.map +1 -0
  377. package/dist/voice/audio_recognition.d.cts +80 -0
  378. package/dist/voice/audio_recognition.d.ts +80 -0
  379. package/dist/voice/audio_recognition.d.ts.map +1 -0
  380. package/dist/voice/audio_recognition.js +351 -0
  381. package/dist/voice/audio_recognition.js.map +1 -0
  382. package/dist/voice/events.cjs +145 -0
  383. package/dist/voice/events.cjs.map +1 -0
  384. package/dist/voice/events.d.cts +124 -0
  385. package/dist/voice/events.d.ts +124 -0
  386. package/dist/voice/events.d.ts.map +1 -0
  387. package/dist/voice/events.js +110 -0
  388. package/dist/voice/events.js.map +1 -0
  389. package/dist/voice/generation.cjs +700 -0
  390. package/dist/voice/generation.cjs.map +1 -0
  391. package/dist/voice/generation.d.cts +115 -0
  392. package/dist/voice/generation.d.ts +115 -0
  393. package/dist/voice/generation.d.ts.map +1 -0
  394. package/dist/voice/generation.js +672 -0
  395. package/dist/voice/generation.js.map +1 -0
  396. package/dist/voice/index.cjs +40 -0
  397. package/dist/voice/index.cjs.map +1 -0
  398. package/dist/voice/index.d.cts +5 -0
  399. package/dist/voice/index.d.ts +5 -0
  400. package/dist/voice/index.d.ts.map +1 -0
  401. package/dist/voice/index.js +11 -0
  402. package/dist/voice/index.js.map +1 -0
  403. package/dist/voice/io.cjs +245 -0
  404. package/dist/voice/io.cjs.map +1 -0
  405. package/dist/voice/io.d.cts +101 -0
  406. package/dist/voice/io.d.ts +101 -0
  407. package/dist/voice/io.d.ts.map +1 -0
  408. package/dist/voice/io.js +217 -0
  409. package/dist/voice/io.js.map +1 -0
  410. package/dist/voice/room_io/_input.cjs +121 -0
  411. package/dist/voice/room_io/_input.cjs.map +1 -0
  412. package/dist/voice/room_io/_input.d.cts +24 -0
  413. package/dist/voice/room_io/_input.d.ts +24 -0
  414. package/dist/voice/room_io/_input.d.ts.map +1 -0
  415. package/dist/voice/room_io/_input.js +102 -0
  416. package/dist/voice/room_io/_input.js.map +1 -0
  417. package/dist/voice/room_io/_output.cjs +358 -0
  418. package/dist/voice/room_io/_output.cjs.map +1 -0
  419. package/dist/voice/room_io/_output.d.cts +75 -0
  420. package/dist/voice/room_io/_output.d.ts +75 -0
  421. package/dist/voice/room_io/_output.d.ts.map +1 -0
  422. package/dist/voice/room_io/_output.js +342 -0
  423. package/dist/voice/room_io/_output.js.map +1 -0
  424. package/dist/voice/room_io/index.cjs +25 -0
  425. package/dist/voice/room_io/index.cjs.map +1 -0
  426. package/dist/voice/room_io/index.d.cts +3 -0
  427. package/dist/voice/room_io/index.d.ts +3 -0
  428. package/dist/voice/room_io/index.d.ts.map +1 -0
  429. package/dist/voice/room_io/index.js +3 -0
  430. package/dist/voice/room_io/index.js.map +1 -0
  431. package/dist/voice/room_io/room_io.cjs +370 -0
  432. package/dist/voice/room_io/room_io.cjs.map +1 -0
  433. package/dist/voice/room_io/room_io.d.cts +73 -0
  434. package/dist/voice/room_io/room_io.d.ts +73 -0
  435. package/dist/voice/room_io/room_io.d.ts.map +1 -0
  436. package/dist/voice/room_io/room_io.js +361 -0
  437. package/dist/voice/room_io/room_io.js.map +1 -0
  438. package/dist/{pipeline/index.cjs → voice/run_context.cjs} +16 -11
  439. package/dist/voice/run_context.cjs.map +1 -0
  440. package/dist/voice/run_context.d.cts +12 -0
  441. package/dist/voice/run_context.d.ts +12 -0
  442. package/dist/voice/run_context.d.ts.map +1 -0
  443. package/dist/voice/run_context.js +14 -0
  444. package/dist/voice/run_context.js.map +1 -0
  445. package/dist/voice/speech_handle.cjs +105 -0
  446. package/dist/voice/speech_handle.cjs.map +1 -0
  447. package/dist/voice/speech_handle.d.cts +46 -0
  448. package/dist/voice/speech_handle.d.ts +46 -0
  449. package/dist/voice/speech_handle.d.ts.map +1 -0
  450. package/dist/voice/speech_handle.js +81 -0
  451. package/dist/voice/speech_handle.js.map +1 -0
  452. package/dist/voice/transcription/_utils.cjs +45 -0
  453. package/dist/voice/transcription/_utils.cjs.map +1 -0
  454. package/dist/voice/transcription/_utils.d.cts +3 -0
  455. package/dist/voice/transcription/_utils.d.ts +3 -0
  456. package/dist/voice/transcription/_utils.d.ts.map +1 -0
  457. package/dist/voice/transcription/_utils.js +21 -0
  458. package/dist/voice/transcription/_utils.js.map +1 -0
  459. package/dist/voice/transcription/index.cjs +23 -0
  460. package/dist/voice/transcription/index.cjs.map +1 -0
  461. package/dist/voice/transcription/index.d.cts +2 -0
  462. package/dist/voice/transcription/index.d.ts +2 -0
  463. package/dist/voice/transcription/index.d.ts.map +1 -0
  464. package/dist/voice/transcription/index.js +2 -0
  465. package/dist/voice/transcription/index.js.map +1 -0
  466. package/dist/voice/transcription/synchronizer.cjs +380 -0
  467. package/dist/voice/transcription/synchronizer.cjs.map +1 -0
  468. package/dist/voice/transcription/synchronizer.d.cts +86 -0
  469. package/dist/voice/transcription/synchronizer.d.ts +86 -0
  470. package/dist/voice/transcription/synchronizer.d.ts.map +1 -0
  471. package/dist/voice/transcription/synchronizer.js +355 -0
  472. package/dist/voice/transcription/synchronizer.js.map +1 -0
  473. package/dist/worker.cjs +22 -4
  474. package/dist/worker.cjs.map +1 -1
  475. package/dist/worker.d.cts +1 -1
  476. package/dist/worker.d.ts +1 -1
  477. package/dist/worker.d.ts.map +1 -1
  478. package/dist/worker.js +22 -4
  479. package/dist/worker.js.map +1 -1
  480. package/package.json +9 -2
  481. package/src/_exceptions.ts +137 -0
  482. package/src/audio.ts +12 -1
  483. package/src/cli.ts +37 -0
  484. package/src/constants.ts +2 -0
  485. package/src/http_server.ts +1 -0
  486. package/src/index.ts +13 -10
  487. package/src/inference_runner.ts +2 -3
  488. package/src/ipc/inference_proc_executor.ts +2 -2
  489. package/src/ipc/job_executor.ts +1 -1
  490. package/src/ipc/job_proc_executor.ts +1 -1
  491. package/src/ipc/job_proc_lazy_main.ts +1 -1
  492. package/src/job.ts +18 -0
  493. package/src/llm/__snapshots__/chat_context.test.ts.snap +527 -0
  494. package/src/llm/__snapshots__/tool_context.test.ts.snap +177 -0
  495. package/src/llm/__snapshots__/utils.test.ts.snap +65 -0
  496. package/src/llm/chat_context.test.ts +450 -0
  497. package/src/llm/chat_context.ts +501 -103
  498. package/src/llm/index.ts +53 -18
  499. package/src/llm/llm.ts +149 -50
  500. package/src/llm/provider_format/google.test.ts +772 -0
  501. package/src/llm/provider_format/google.ts +130 -0
  502. package/src/llm/provider_format/index.ts +23 -0
  503. package/src/llm/provider_format/openai.test.ts +581 -0
  504. package/src/llm/provider_format/openai.ts +118 -0
  505. package/src/llm/provider_format/utils.ts +183 -0
  506. package/src/llm/realtime.ts +151 -0
  507. package/src/llm/remote_chat_context.test.ts +290 -0
  508. package/src/llm/remote_chat_context.ts +114 -0
  509. package/src/llm/tool_context.test.ts +198 -0
  510. package/src/llm/tool_context.ts +259 -0
  511. package/src/llm/tool_context.type.test.ts +115 -0
  512. package/src/llm/utils.test.ts +670 -0
  513. package/src/llm/utils.ts +324 -0
  514. package/src/metrics/base.ts +110 -78
  515. package/src/metrics/index.ts +3 -9
  516. package/src/metrics/usage_collector.ts +19 -13
  517. package/src/metrics/utils.ts +24 -69
  518. package/src/multimodal/index.ts +0 -1
  519. package/src/plugin.ts +26 -8
  520. package/src/stream/deferred_stream.test.ts +755 -0
  521. package/src/stream/deferred_stream.ts +110 -0
  522. package/src/stream/identity_transform.test.ts +179 -0
  523. package/src/stream/identity_transform.ts +18 -0
  524. package/src/stream/index.ts +7 -0
  525. package/src/stream/merge_readable_streams.ts +40 -0
  526. package/src/stream/stream_channel.test.ts +129 -0
  527. package/src/stream/stream_channel.ts +32 -0
  528. package/src/stt/stream_adapter.ts +3 -5
  529. package/src/stt/stt.ts +135 -17
  530. package/src/tokenize/basic/basic.ts +13 -5
  531. package/src/tokenize/basic/sentence.ts +20 -6
  532. package/src/tokenize/token_stream.ts +7 -4
  533. package/src/transcription.ts +2 -3
  534. package/src/tts/index.ts +0 -1
  535. package/src/tts/stream_adapter.ts +42 -16
  536. package/src/tts/tts.ts +203 -21
  537. package/src/types.ts +42 -0
  538. package/src/utils.test.ts +658 -0
  539. package/src/utils.ts +375 -44
  540. package/src/vad.ts +90 -22
  541. package/src/voice/agent.test.ts +80 -0
  542. package/src/voice/agent.ts +332 -0
  543. package/src/voice/agent_activity.ts +1913 -0
  544. package/src/voice/agent_session.ts +460 -0
  545. package/src/voice/audio_recognition.ts +474 -0
  546. package/src/voice/events.ts +252 -0
  547. package/src/voice/generation.ts +881 -0
  548. package/src/voice/index.ts +7 -0
  549. package/src/voice/io.ts +304 -0
  550. package/src/voice/room_io/_input.ts +144 -0
  551. package/src/voice/room_io/_output.ts +436 -0
  552. package/src/voice/room_io/index.ts +5 -0
  553. package/src/voice/room_io/room_io.ts +495 -0
  554. package/src/voice/run_context.ts +20 -0
  555. package/src/voice/speech_handle.ts +104 -0
  556. package/src/voice/transcription/_utils.ts +25 -0
  557. package/src/voice/transcription/index.ts +4 -0
  558. package/src/voice/transcription/synchronizer.ts +478 -0
  559. package/src/worker.ts +22 -2
  560. package/dist/llm/function_context.cjs +0 -103
  561. package/dist/llm/function_context.cjs.map +0 -1
  562. package/dist/llm/function_context.d.cts +0 -47
  563. package/dist/llm/function_context.d.ts +0 -47
  564. package/dist/llm/function_context.d.ts.map +0 -1
  565. package/dist/llm/function_context.js +0 -78
  566. package/dist/llm/function_context.js.map +0 -1
  567. package/dist/llm/function_context.test.cjs +0 -218
  568. package/dist/llm/function_context.test.cjs.map +0 -1
  569. package/dist/llm/function_context.test.js +0 -217
  570. package/dist/llm/function_context.test.js.map +0 -1
  571. package/dist/multimodal/multimodal_agent.cjs +0 -451
  572. package/dist/multimodal/multimodal_agent.cjs.map +0 -1
  573. package/dist/multimodal/multimodal_agent.d.cts +0 -48
  574. package/dist/multimodal/multimodal_agent.d.ts +0 -48
  575. package/dist/multimodal/multimodal_agent.d.ts.map +0 -1
  576. package/dist/multimodal/multimodal_agent.js +0 -425
  577. package/dist/multimodal/multimodal_agent.js.map +0 -1
  578. package/dist/pipeline/agent_output.cjs +0 -197
  579. package/dist/pipeline/agent_output.cjs.map +0 -1
  580. package/dist/pipeline/agent_output.d.cts +0 -33
  581. package/dist/pipeline/agent_output.d.ts +0 -33
  582. package/dist/pipeline/agent_output.d.ts.map +0 -1
  583. package/dist/pipeline/agent_output.js +0 -172
  584. package/dist/pipeline/agent_output.js.map +0 -1
  585. package/dist/pipeline/agent_playout.cjs +0 -175
  586. package/dist/pipeline/agent_playout.cjs.map +0 -1
  587. package/dist/pipeline/agent_playout.d.cts +0 -40
  588. package/dist/pipeline/agent_playout.d.ts +0 -40
  589. package/dist/pipeline/agent_playout.d.ts.map +0 -1
  590. package/dist/pipeline/agent_playout.js +0 -139
  591. package/dist/pipeline/agent_playout.js.map +0 -1
  592. package/dist/pipeline/human_input.cjs +0 -171
  593. package/dist/pipeline/human_input.cjs.map +0 -1
  594. package/dist/pipeline/human_input.d.cts +0 -30
  595. package/dist/pipeline/human_input.d.ts +0 -30
  596. package/dist/pipeline/human_input.d.ts.map +0 -1
  597. package/dist/pipeline/human_input.js +0 -146
  598. package/dist/pipeline/human_input.js.map +0 -1
  599. package/dist/pipeline/index.cjs.map +0 -1
  600. package/dist/pipeline/index.d.cts +0 -2
  601. package/dist/pipeline/index.d.ts +0 -2
  602. package/dist/pipeline/index.d.ts.map +0 -1
  603. package/dist/pipeline/index.js +0 -11
  604. package/dist/pipeline/index.js.map +0 -1
  605. package/dist/pipeline/pipeline_agent.cjs +0 -849
  606. package/dist/pipeline/pipeline_agent.cjs.map +0 -1
  607. package/dist/pipeline/pipeline_agent.d.cts +0 -150
  608. package/dist/pipeline/pipeline_agent.d.ts +0 -150
  609. package/dist/pipeline/pipeline_agent.d.ts.map +0 -1
  610. package/dist/pipeline/pipeline_agent.js +0 -826
  611. package/dist/pipeline/pipeline_agent.js.map +0 -1
  612. package/dist/pipeline/speech_handle.cjs +0 -176
  613. package/dist/pipeline/speech_handle.cjs.map +0 -1
  614. package/dist/pipeline/speech_handle.d.cts +0 -37
  615. package/dist/pipeline/speech_handle.d.ts +0 -37
  616. package/dist/pipeline/speech_handle.d.ts.map +0 -1
  617. package/dist/pipeline/speech_handle.js +0 -152
  618. package/dist/pipeline/speech_handle.js.map +0 -1
  619. package/src/llm/function_context.test.ts +0 -248
  620. package/src/llm/function_context.ts +0 -142
  621. package/src/multimodal/multimodal_agent.ts +0 -555
  622. package/src/pipeline/agent_output.ts +0 -219
  623. package/src/pipeline/agent_playout.ts +0 -192
  624. package/src/pipeline/human_input.ts +0 -188
  625. package/src/pipeline/index.ts +0 -15
  626. package/src/pipeline/pipeline_agent.ts +0 -1185
  627. package/src/pipeline/speech_handle.ts +0 -201
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_chat_context = require("./chat_context.cjs");
4
+ (0, import_vitest.describe)("ChatContext.toJSON", () => {
5
+ (0, import_vitest.it)("should match snapshot for empty context", () => {
6
+ const context = new import_chat_context.ChatContext();
7
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot();
8
+ });
9
+ (0, import_vitest.it)("should match snapshot for simple conversation", () => {
10
+ const context = new import_chat_context.ChatContext();
11
+ context.addMessage({
12
+ id: "msg_system_1",
13
+ role: "system",
14
+ content: "You are a helpful assistant.",
15
+ createdAt: 1e9
16
+ });
17
+ context.addMessage({
18
+ id: "msg_user_1",
19
+ role: "user",
20
+ content: "Hello, how are you?",
21
+ createdAt: 1000000001
22
+ });
23
+ context.addMessage({
24
+ id: "msg_assistant_1",
25
+ role: "assistant",
26
+ content: "I'm doing well, thank you! How can I help you today?",
27
+ createdAt: 1000000002
28
+ });
29
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot("simple-conversation-no-timestamps");
30
+ (0, import_vitest.expect)(context.toJSON({ excludeTimestamp: false })).toMatchSnapshot(
31
+ "simple-conversation-with-timestamps"
32
+ );
33
+ });
34
+ (0, import_vitest.it)("should match snapshot for multimodal content", () => {
35
+ const context = new import_chat_context.ChatContext();
36
+ const imageContent = {
37
+ id: "img_test_1",
38
+ type: "image_content",
39
+ image: "https://example.com/test-image.jpg",
40
+ inferenceDetail: "high",
41
+ inferenceWidth: 1024,
42
+ inferenceHeight: 768,
43
+ mimeType: "image/jpeg",
44
+ _cache: {}
45
+ };
46
+ const audioContent = {
47
+ type: "audio_content",
48
+ frame: [],
49
+ // This won't be included in JSON
50
+ transcript: "This is a test audio transcript"
51
+ };
52
+ context.addMessage({
53
+ id: "msg_user_2",
54
+ role: "user",
55
+ content: [
56
+ "Check out this image and audio:",
57
+ imageContent,
58
+ audioContent,
59
+ "What do you think?"
60
+ ],
61
+ createdAt: 2e9
62
+ });
63
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot("multimodal-default-exclusions");
64
+ (0, import_vitest.expect)(
65
+ context.toJSON({
66
+ excludeImage: false,
67
+ excludeAudio: true
68
+ })
69
+ ).toMatchSnapshot("multimodal-with-images-only");
70
+ (0, import_vitest.expect)(
71
+ context.toJSON({
72
+ excludeImage: true,
73
+ excludeAudio: false
74
+ })
75
+ ).toMatchSnapshot("multimodal-with-audio-only");
76
+ (0, import_vitest.expect)(
77
+ context.toJSON({
78
+ excludeImage: false,
79
+ excludeAudio: false,
80
+ excludeTimestamp: false
81
+ })
82
+ ).toMatchSnapshot("multimodal-full-content");
83
+ });
84
+ (0, import_vitest.it)("should match snapshot for function calls", () => {
85
+ const context = new import_chat_context.ChatContext();
86
+ context.addMessage({
87
+ id: "msg_user_3",
88
+ role: "user",
89
+ content: "What's the weather in Paris?",
90
+ createdAt: 3e9
91
+ });
92
+ const functionCall = new import_chat_context.FunctionCall({
93
+ id: "func_call_1",
94
+ callId: "call_weather_123",
95
+ name: "get_weather",
96
+ args: '{"location": "Paris, France", "unit": "celsius"}',
97
+ createdAt: 3000000001
98
+ });
99
+ context.insert(functionCall);
100
+ const functionOutput = new import_chat_context.FunctionCallOutput({
101
+ id: "func_output_1",
102
+ callId: "call_weather_123",
103
+ name: "get_weather",
104
+ output: '{"temperature": 22, "condition": "partly cloudy", "humidity": 65}',
105
+ isError: false,
106
+ createdAt: 3000000002
107
+ });
108
+ context.insert(functionOutput);
109
+ context.addMessage({
110
+ id: "msg_assistant_2",
111
+ role: "assistant",
112
+ content: "The weather in Paris is currently 22\xB0C and partly cloudy with 65% humidity.",
113
+ createdAt: 3000000003
114
+ });
115
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot("conversation-with-function-calls");
116
+ (0, import_vitest.expect)(
117
+ context.toJSON({
118
+ excludeFunctionCall: true
119
+ })
120
+ ).toMatchSnapshot("conversation-without-function-calls");
121
+ (0, import_vitest.expect)(
122
+ context.toJSON({
123
+ excludeTimestamp: false
124
+ })
125
+ ).toMatchSnapshot("conversation-with-function-calls-and-timestamps");
126
+ });
127
+ (0, import_vitest.it)("should match snapshot for edge cases", () => {
128
+ const context = new import_chat_context.ChatContext();
129
+ context.addMessage({
130
+ id: "msg_empty_1",
131
+ role: "user",
132
+ content: [],
133
+ createdAt: 5e9
134
+ });
135
+ const silentAudio = {
136
+ type: "audio_content",
137
+ frame: [],
138
+ transcript: void 0
139
+ };
140
+ context.addMessage({
141
+ id: "msg_silent_audio",
142
+ role: "user",
143
+ content: [silentAudio],
144
+ createdAt: 5000000001
145
+ });
146
+ context.addMessage({
147
+ id: "msg_multi_text",
148
+ role: "assistant",
149
+ content: ["Part 1. ", "Part 2. ", "Part 3."],
150
+ createdAt: 5000000002
151
+ });
152
+ const minimalCall = new import_chat_context.FunctionCall({
153
+ id: "func_minimal",
154
+ callId: "minimal",
155
+ name: "test",
156
+ args: "{}",
157
+ createdAt: 5000000003
158
+ });
159
+ context.insert(minimalCall);
160
+ const namelessOutput = new import_chat_context.FunctionCallOutput({
161
+ id: "func_output_nameless",
162
+ callId: "minimal",
163
+ output: "OK",
164
+ isError: false,
165
+ createdAt: 5000000004
166
+ });
167
+ context.insert(namelessOutput);
168
+ context.addMessage({
169
+ id: "msg_special_chars",
170
+ role: "user",
171
+ content: `Test with special chars:
172
+ \r "quotes" 'apostrophes' \\backslashes\\ {braces} [brackets]`,
173
+ createdAt: 5000000005
174
+ });
175
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot("edge-cases-default");
176
+ (0, import_vitest.expect)(
177
+ context.toJSON({
178
+ excludeTimestamp: false,
179
+ excludeAudio: false
180
+ })
181
+ ).toMatchSnapshot("edge-cases-with-details");
182
+ });
183
+ (0, import_vitest.it)("should match snapshot for message property variations", () => {
184
+ const context = new import_chat_context.ChatContext();
185
+ context.addMessage({
186
+ id: "custom-message-id-123",
187
+ role: "user",
188
+ content: "Message with custom ID",
189
+ createdAt: 6e9
190
+ });
191
+ context.addMessage({
192
+ id: "msg_interrupted",
193
+ role: "assistant",
194
+ content: "This response was interrupted...",
195
+ interrupted: true,
196
+ createdAt: 6000000001
197
+ });
198
+ context.addMessage({
199
+ id: "msg_dev_2",
200
+ role: "developer",
201
+ content: "Developer message",
202
+ createdAt: 6000000002
203
+ });
204
+ context.addMessage({
205
+ id: "msg_system_3",
206
+ role: "system",
207
+ content: "System message",
208
+ createdAt: 6000000003
209
+ });
210
+ const detailedImage = {
211
+ id: "img_detailed",
212
+ type: "image_content",
213
+ image: "https://example.com/image.jpg",
214
+ inferenceDetail: "low",
215
+ inferenceWidth: 512,
216
+ inferenceHeight: 512,
217
+ mimeType: "image/png",
218
+ _cache: { cached: true }
219
+ };
220
+ context.addMessage({
221
+ id: "msg_with_image",
222
+ role: "user",
223
+ content: ["Image with all properties:", detailedImage],
224
+ createdAt: 6000000004
225
+ });
226
+ (0, import_vitest.expect)(context.toJSON()).toMatchSnapshot("message-properties-default");
227
+ (0, import_vitest.expect)(
228
+ context.toJSON({
229
+ excludeImage: false,
230
+ excludeTimestamp: false
231
+ })
232
+ ).toMatchSnapshot("message-properties-full");
233
+ });
234
+ });
235
+ (0, import_vitest.describe)("ReadonlyChatContext with immutable array", () => {
236
+ (0, import_vitest.it)("should have readonly property set to true", () => {
237
+ const items = [
238
+ new import_chat_context.ChatMessage({
239
+ id: "msg_1",
240
+ role: "user",
241
+ content: ["Test"],
242
+ interrupted: false,
243
+ createdAt: Date.now()
244
+ })
245
+ ];
246
+ const readonlyContext = new import_chat_context.ReadonlyChatContext(items);
247
+ (0, import_vitest.expect)(readonlyContext.readonly).toBe(true);
248
+ });
249
+ (0, import_vitest.it)("should prevent setting items property", () => {
250
+ const items = [
251
+ new import_chat_context.ChatMessage({
252
+ id: "msg_1",
253
+ role: "user",
254
+ content: ["Test"],
255
+ interrupted: false,
256
+ createdAt: Date.now()
257
+ })
258
+ ];
259
+ const readonlyContext = new import_chat_context.ReadonlyChatContext(items);
260
+ (0, import_vitest.expect)(() => {
261
+ readonlyContext.items = [];
262
+ }).toThrow(
263
+ `Cannot set items on a read-only chat context. Please use .copy() and agent.update_chat_ctx() to modify the chat context.`
264
+ );
265
+ });
266
+ (0, import_vitest.it)("should prevent modifications through array methods", () => {
267
+ const items = [
268
+ new import_chat_context.ChatMessage({
269
+ id: "msg_1",
270
+ role: "user",
271
+ content: ["Test"],
272
+ interrupted: false,
273
+ createdAt: Date.now()
274
+ })
275
+ ];
276
+ const readonlyContext = new import_chat_context.ReadonlyChatContext(items);
277
+ const newItem = new import_chat_context.ChatMessage({
278
+ id: "msg_2",
279
+ role: "assistant",
280
+ content: ["Response"],
281
+ interrupted: false,
282
+ createdAt: Date.now()
283
+ });
284
+ const mutableItems = readonlyContext.items;
285
+ (0, import_vitest.expect)(() => mutableItems.push(newItem)).toThrow(
286
+ "Cannot call push() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
287
+ );
288
+ (0, import_vitest.expect)(() => mutableItems.pop()).toThrow(
289
+ "Cannot call pop() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
290
+ );
291
+ (0, import_vitest.expect)(() => mutableItems.shift()).toThrow(
292
+ "Cannot call shift() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
293
+ );
294
+ (0, import_vitest.expect)(() => mutableItems.unshift(newItem)).toThrow(
295
+ "Cannot call unshift() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
296
+ );
297
+ (0, import_vitest.expect)(() => mutableItems.splice(0, 1)).toThrow(
298
+ "Cannot call splice() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
299
+ );
300
+ (0, import_vitest.expect)(() => mutableItems.sort()).toThrow(
301
+ "Cannot call sort() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
302
+ );
303
+ (0, import_vitest.expect)(() => mutableItems.reverse()).toThrow(
304
+ "Cannot call reverse() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
305
+ );
306
+ (0, import_vitest.expect)(() => mutableItems.fill(newItem)).toThrow(
307
+ "Cannot call fill() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
308
+ );
309
+ (0, import_vitest.expect)(() => mutableItems.copyWithin(0, 1)).toThrow(
310
+ "Cannot call copyWithin() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context."
311
+ );
312
+ });
313
+ (0, import_vitest.it)("should prevent bracket notation assignment and deletion", () => {
314
+ const items = [
315
+ new import_chat_context.ChatMessage({
316
+ id: "msg_1",
317
+ role: "user",
318
+ content: ["Test"],
319
+ interrupted: false,
320
+ createdAt: Date.now()
321
+ })
322
+ ];
323
+ const readonlyContext = new import_chat_context.ReadonlyChatContext(items);
324
+ const newItem = new import_chat_context.ChatMessage({
325
+ id: "msg_2",
326
+ role: "assistant",
327
+ content: ["Response"],
328
+ interrupted: false,
329
+ createdAt: Date.now()
330
+ });
331
+ (0, import_vitest.expect)(() => {
332
+ readonlyContext.items[0] = newItem;
333
+ }).toThrow(
334
+ 'Cannot assign to read-only array index "0". Please use .copy() and agent.update_chat_ctx() to modify the chat context.'
335
+ );
336
+ (0, import_vitest.expect)(() => {
337
+ delete readonlyContext.items[0];
338
+ }).toThrow(
339
+ 'Cannot delete read-only array index "0". Please use .copy() and agent.update_chat_ctx() to modify the chat context.'
340
+ );
341
+ (0, import_vitest.expect)(() => {
342
+ readonlyContext.items[99] = newItem;
343
+ }).toThrow(
344
+ 'Cannot assign to read-only array index "99". Please use .copy() and agent.update_chat_ctx() to modify the chat context.'
345
+ );
346
+ });
347
+ (0, import_vitest.it)("should allow read operations on the immutable array", () => {
348
+ const items = [
349
+ new import_chat_context.ChatMessage({
350
+ id: "msg_1",
351
+ role: "user",
352
+ content: ["Test 1"],
353
+ interrupted: false,
354
+ createdAt: 1e3
355
+ }),
356
+ new import_chat_context.ChatMessage({
357
+ id: "msg_2",
358
+ role: "assistant",
359
+ content: ["Test 2"],
360
+ interrupted: false,
361
+ createdAt: 2e3
362
+ })
363
+ ];
364
+ const readonlyContext = new import_chat_context.ReadonlyChatContext(items);
365
+ (0, import_vitest.expect)(readonlyContext.items.length).toBe(2);
366
+ (0, import_vitest.expect)(readonlyContext.items[0]).toEqual(items[0]);
367
+ (0, import_vitest.expect)(readonlyContext.items[1]).toEqual(items[1]);
368
+ (0, import_vitest.expect)(readonlyContext.items.find((item) => item.id === "msg_2")).toEqual(items[1]);
369
+ (0, import_vitest.expect)(readonlyContext.items.map((item) => item.id)).toEqual(["msg_1", "msg_2"]);
370
+ (0, import_vitest.expect)(
371
+ readonlyContext.items.filter(
372
+ (item) => item.type === "message" && item.role === "user"
373
+ )
374
+ ).toHaveLength(1);
375
+ const ids = [];
376
+ readonlyContext.items.forEach((item) => ids.push(item.id));
377
+ (0, import_vitest.expect)(ids).toEqual(["msg_1", "msg_2"]);
378
+ });
379
+ });
380
+ //# sourceMappingURL=chat_context.test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/chat_context.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport {\n type AudioContent,\n ChatContext,\n type ChatItem,\n ChatMessage,\n FunctionCall,\n FunctionCallOutput,\n type ImageContent,\n ReadonlyChatContext,\n} from './chat_context.js';\n\ndescribe('ChatContext.toJSON', () => {\n it('should match snapshot for empty context', () => {\n const context = new ChatContext();\n expect(context.toJSON()).toMatchSnapshot();\n });\n\n it('should match snapshot for simple conversation', () => {\n const context = new ChatContext();\n\n context.addMessage({\n id: 'msg_system_1',\n role: 'system',\n content: 'You are a helpful assistant.',\n createdAt: 1000000000,\n });\n\n context.addMessage({\n id: 'msg_user_1',\n role: 'user',\n content: 'Hello, how are you?',\n createdAt: 1000000001,\n });\n\n context.addMessage({\n id: 'msg_assistant_1',\n role: 'assistant',\n content: \"I'm doing well, thank you! How can I help you today?\",\n createdAt: 1000000002,\n });\n\n expect(context.toJSON()).toMatchSnapshot('simple-conversation-no-timestamps');\n\n expect(context.toJSON({ excludeTimestamp: false })).toMatchSnapshot(\n 'simple-conversation-with-timestamps',\n );\n });\n\n it('should match snapshot for multimodal content', () => {\n const context = new ChatContext();\n\n const imageContent: ImageContent = {\n id: 'img_test_1',\n type: 'image_content',\n image: 'https://example.com/test-image.jpg',\n inferenceDetail: 'high',\n inferenceWidth: 1024,\n inferenceHeight: 768,\n mimeType: 'image/jpeg',\n _cache: {},\n };\n\n const audioContent: AudioContent = {\n type: 'audio_content',\n frame: [], // This won't be included in JSON\n transcript: 'This is a test audio transcript',\n };\n\n context.addMessage({\n id: 'msg_user_2',\n role: 'user',\n content: [\n 'Check out this image and audio:',\n imageContent,\n audioContent,\n 'What do you think?',\n ],\n createdAt: 2000000000,\n });\n\n expect(context.toJSON()).toMatchSnapshot('multimodal-default-exclusions');\n\n expect(\n context.toJSON({\n excludeImage: false,\n excludeAudio: true,\n }),\n ).toMatchSnapshot('multimodal-with-images-only');\n\n expect(\n context.toJSON({\n excludeImage: true,\n excludeAudio: false,\n }),\n ).toMatchSnapshot('multimodal-with-audio-only');\n\n expect(\n context.toJSON({\n excludeImage: false,\n excludeAudio: false,\n excludeTimestamp: false,\n }),\n ).toMatchSnapshot('multimodal-full-content');\n });\n\n it('should match snapshot for function calls', () => {\n const context = new ChatContext();\n\n context.addMessage({\n id: 'msg_user_3',\n role: 'user',\n content: \"What's the weather in Paris?\",\n createdAt: 3000000000,\n });\n\n const functionCall = new FunctionCall({\n id: 'func_call_1',\n callId: 'call_weather_123',\n name: 'get_weather',\n args: '{\"location\": \"Paris, France\", \"unit\": \"celsius\"}',\n createdAt: 3000000001,\n });\n context.insert(functionCall);\n\n const functionOutput = new FunctionCallOutput({\n id: 'func_output_1',\n callId: 'call_weather_123',\n name: 'get_weather',\n output: '{\"temperature\": 22, \"condition\": \"partly cloudy\", \"humidity\": 65}',\n isError: false,\n createdAt: 3000000002,\n });\n context.insert(functionOutput);\n\n context.addMessage({\n id: 'msg_assistant_2',\n role: 'assistant',\n content: 'The weather in Paris is currently 22°C and partly cloudy with 65% humidity.',\n createdAt: 3000000003,\n });\n\n expect(context.toJSON()).toMatchSnapshot('conversation-with-function-calls');\n\n expect(\n context.toJSON({\n excludeFunctionCall: true,\n }),\n ).toMatchSnapshot('conversation-without-function-calls');\n\n expect(\n context.toJSON({\n excludeTimestamp: false,\n }),\n ).toMatchSnapshot('conversation-with-function-calls-and-timestamps');\n });\n\n it('should match snapshot for edge cases', () => {\n const context = new ChatContext();\n\n context.addMessage({\n id: 'msg_empty_1',\n role: 'user',\n content: [],\n createdAt: 5000000000,\n });\n\n const silentAudio: AudioContent = {\n type: 'audio_content',\n frame: [],\n transcript: undefined,\n };\n\n context.addMessage({\n id: 'msg_silent_audio',\n role: 'user',\n content: [silentAudio],\n createdAt: 5000000001,\n });\n\n context.addMessage({\n id: 'msg_multi_text',\n role: 'assistant',\n content: ['Part 1. ', 'Part 2. ', 'Part 3.'],\n createdAt: 5000000002,\n });\n\n const minimalCall = new FunctionCall({\n id: 'func_minimal',\n callId: 'minimal',\n name: 'test',\n args: '{}',\n createdAt: 5000000003,\n });\n context.insert(minimalCall);\n\n const namelessOutput = new FunctionCallOutput({\n id: 'func_output_nameless',\n callId: 'minimal',\n output: 'OK',\n isError: false,\n createdAt: 5000000004,\n });\n context.insert(namelessOutput);\n\n context.addMessage({\n id: 'msg_special_chars',\n role: 'user',\n content:\n 'Test with special chars: \\n\\t\\r \"quotes\" \\'apostrophes\\' \\\\backslashes\\\\ {braces} [brackets]',\n createdAt: 5000000005,\n });\n\n expect(context.toJSON()).toMatchSnapshot('edge-cases-default');\n expect(\n context.toJSON({\n excludeTimestamp: false,\n excludeAudio: false,\n }),\n ).toMatchSnapshot('edge-cases-with-details');\n });\n\n it('should match snapshot for message property variations', () => {\n const context = new ChatContext();\n\n context.addMessage({\n id: 'custom-message-id-123',\n role: 'user',\n content: 'Message with custom ID',\n createdAt: 6000000000,\n });\n\n context.addMessage({\n id: 'msg_interrupted',\n role: 'assistant',\n content: 'This response was interrupted...',\n interrupted: true,\n createdAt: 6000000001,\n });\n\n context.addMessage({\n id: 'msg_dev_2',\n role: 'developer',\n content: 'Developer message',\n createdAt: 6000000002,\n });\n\n context.addMessage({\n id: 'msg_system_3',\n role: 'system',\n content: 'System message',\n createdAt: 6000000003,\n });\n\n const detailedImage: ImageContent = {\n id: 'img_detailed',\n type: 'image_content',\n image: 'https://example.com/image.jpg',\n inferenceDetail: 'low',\n inferenceWidth: 512,\n inferenceHeight: 512,\n mimeType: 'image/png',\n _cache: { cached: true },\n };\n\n context.addMessage({\n id: 'msg_with_image',\n role: 'user',\n content: ['Image with all properties:', detailedImage],\n createdAt: 6000000004,\n });\n\n expect(context.toJSON()).toMatchSnapshot('message-properties-default');\n expect(\n context.toJSON({\n excludeImage: false,\n excludeTimestamp: false,\n }),\n ).toMatchSnapshot('message-properties-full');\n });\n});\n\ndescribe('ReadonlyChatContext with immutable array', () => {\n it('should have readonly property set to true', () => {\n const items: ChatItem[] = [\n new ChatMessage({\n id: 'msg_1',\n role: 'user',\n content: ['Test'],\n interrupted: false,\n createdAt: Date.now(),\n }),\n ];\n const readonlyContext = new ReadonlyChatContext(items);\n\n expect(readonlyContext.readonly).toBe(true);\n });\n\n it('should prevent setting items property', () => {\n const items: ChatItem[] = [\n new ChatMessage({\n id: 'msg_1',\n role: 'user',\n content: ['Test'],\n interrupted: false,\n createdAt: Date.now(),\n }),\n ];\n const readonlyContext = new ReadonlyChatContext(items);\n expect(() => {\n readonlyContext.items = [];\n }).toThrow(\n `Cannot set items on a read-only chat context. Please use .copy() and agent.update_chat_ctx() to modify the chat context.`,\n );\n });\n\n it('should prevent modifications through array methods', () => {\n const items: ChatItem[] = [\n new ChatMessage({\n id: 'msg_1',\n role: 'user',\n content: ['Test'],\n interrupted: false,\n createdAt: Date.now(),\n }),\n ];\n const readonlyContext = new ReadonlyChatContext(items);\n const newItem = new ChatMessage({\n id: 'msg_2',\n role: 'assistant',\n content: ['Response'],\n interrupted: false,\n createdAt: Date.now(),\n });\n\n const mutableItems = readonlyContext.items;\n expect(() => mutableItems.push(newItem)).toThrow(\n 'Cannot call push() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.pop()).toThrow(\n 'Cannot call pop() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.shift()).toThrow(\n 'Cannot call shift() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.unshift(newItem)).toThrow(\n 'Cannot call unshift() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.splice(0, 1)).toThrow(\n 'Cannot call splice() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.sort()).toThrow(\n 'Cannot call sort() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.reverse()).toThrow(\n 'Cannot call reverse() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.fill(newItem)).toThrow(\n 'Cannot call fill() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => mutableItems.copyWithin(0, 1)).toThrow(\n 'Cannot call copyWithin() on a read-only array. Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n });\n\n it('should prevent bracket notation assignment and deletion', () => {\n const items: ChatItem[] = [\n new ChatMessage({\n id: 'msg_1',\n role: 'user',\n content: ['Test'],\n interrupted: false,\n createdAt: Date.now(),\n }),\n ];\n const readonlyContext = new ReadonlyChatContext(items);\n const newItem = new ChatMessage({\n id: 'msg_2',\n role: 'assistant',\n content: ['Response'],\n interrupted: false,\n createdAt: Date.now(),\n });\n\n expect(() => {\n readonlyContext.items[0] = newItem;\n }).toThrow(\n 'Cannot assign to read-only array index \"0\". Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => {\n delete readonlyContext.items[0];\n }).toThrow(\n 'Cannot delete read-only array index \"0\". Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n\n expect(() => {\n readonlyContext.items[99] = newItem;\n }).toThrow(\n 'Cannot assign to read-only array index \"99\". Please use .copy() and agent.update_chat_ctx() to modify the chat context.',\n );\n });\n\n it('should allow read operations on the immutable array', () => {\n const items: ChatItem[] = [\n new ChatMessage({\n id: 'msg_1',\n role: 'user',\n content: ['Test 1'],\n interrupted: false,\n createdAt: 1000,\n }),\n new ChatMessage({\n id: 'msg_2',\n role: 'assistant',\n content: ['Test 2'],\n interrupted: false,\n createdAt: 2000,\n }),\n ];\n const readonlyContext = new ReadonlyChatContext(items);\n\n expect(readonlyContext.items.length).toBe(2);\n expect(readonlyContext.items[0]).toEqual(items[0]);\n expect(readonlyContext.items[1]).toEqual(items[1]);\n expect(readonlyContext.items.find((item: ChatItem) => item.id === 'msg_2')).toEqual(items[1]);\n expect(readonlyContext.items.map((item: ChatItem) => item.id)).toEqual(['msg_1', 'msg_2']);\n expect(\n readonlyContext.items.filter(\n (item: ChatItem) => item.type === 'message' && item.role === 'user',\n ),\n ).toHaveLength(1);\n\n // forEach should work for reading\n const ids: string[] = [];\n readonlyContext.items.forEach((item) => ids.push(item.id));\n expect(ids).toEqual(['msg_1', 'msg_2']);\n });\n});\n"],"mappings":"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","names":[]}