@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 @@
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/llm/realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from "events";
2
+ import { DeferredReadableStream } from "../stream/deferred_stream.js";
3
+ import { Task } from "../utils.js";
4
+ class RealtimeModel {
5
+ _capabilities;
6
+ constructor(capabilities) {
7
+ this._capabilities = capabilities;
8
+ }
9
+ get capabilities() {
10
+ return this._capabilities;
11
+ }
12
+ }
13
+ class RealtimeSession extends EventEmitter {
14
+ _realtimeModel;
15
+ deferredInputStream = new DeferredReadableStream();
16
+ _mainTask;
17
+ constructor(realtimeModel) {
18
+ super();
19
+ this._realtimeModel = realtimeModel;
20
+ this._mainTask = Task.from((controller) => this._mainTaskImpl(controller.signal));
21
+ }
22
+ get realtimeModel() {
23
+ return this._realtimeModel;
24
+ }
25
+ async close() {
26
+ this._mainTask.cancel();
27
+ }
28
+ /**
29
+ * Notifies the model that user activity has started
30
+ */
31
+ startUserActivity() {
32
+ return;
33
+ }
34
+ async _mainTaskImpl(signal) {
35
+ const reader = this.deferredInputStream.stream.getReader();
36
+ while (true) {
37
+ const { done, value } = await reader.read();
38
+ if (done || signal.aborted) {
39
+ break;
40
+ }
41
+ this.pushAudio(value);
42
+ }
43
+ }
44
+ setInputAudioStream(audioStream) {
45
+ this.deferredInputStream.setSource(audioStream);
46
+ }
47
+ }
48
+ export {
49
+ RealtimeModel,
50
+ RealtimeSession
51
+ };
52
+ //# sourceMappingURL=realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/realtime.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { AudioFrame } from '@livekit/rtc-node';\nimport { EventEmitter } from 'events';\nimport type { ReadableStream } from 'node:stream/web';\nimport { DeferredReadableStream } from '../stream/deferred_stream.js';\nimport { Task } from '../utils.js';\nimport type { ChatContext, FunctionCall } from './chat_context.js';\nimport type { ToolChoice, ToolContext } from './tool_context.js';\n\nexport type InputSpeechStartedEvent = object;\n\nexport interface InputSpeechStoppedEvent {\n userTranscriptionEnabled: boolean;\n}\n\nexport interface MessageGeneration {\n messageId: string;\n textStream: ReadableStream<string>;\n audioStream: ReadableStream<AudioFrame>;\n}\n\nexport interface GenerationCreatedEvent {\n messageStream: ReadableStream<MessageGeneration>;\n functionStream: ReadableStream<FunctionCall>;\n userInitiated: boolean;\n}\n\nexport interface RealtimeModelError {\n type: 'realtime_model_error';\n timestamp: number;\n label: string;\n error: Error;\n recoverable: boolean;\n}\n\nexport interface RealtimeCapabilities {\n messageTruncation: boolean;\n turnDetection: boolean;\n userTranscription: boolean;\n autoToolReplyGeneration: boolean;\n}\n\nexport interface InputTranscriptionCompleted {\n itemId: string;\n transcript: string;\n isFinal: boolean;\n}\n\nexport interface RealtimeSessionReconnectedEvent {}\n\nexport abstract class RealtimeModel {\n private _capabilities: RealtimeCapabilities;\n\n constructor(capabilities: RealtimeCapabilities) {\n this._capabilities = capabilities;\n }\n\n get capabilities() {\n return this._capabilities;\n }\n\n abstract session(): RealtimeSession;\n\n abstract close(): Promise<void>;\n}\n\nexport abstract class RealtimeSession extends EventEmitter {\n protected _realtimeModel: RealtimeModel;\n private deferredInputStream = new DeferredReadableStream<AudioFrame>();\n private _mainTask: Task<void>;\n\n constructor(realtimeModel: RealtimeModel) {\n super();\n this._realtimeModel = realtimeModel;\n this._mainTask = Task.from((controller) => this._mainTaskImpl(controller.signal));\n }\n\n get realtimeModel() {\n return this._realtimeModel;\n }\n\n abstract get chatCtx(): ChatContext;\n\n abstract get tools(): ToolContext;\n\n abstract updateInstructions(instructions: string): Promise<void>;\n\n /**\n * @throws RealtimeError on Timeout\n */\n abstract updateChatCtx(chatCtx: ChatContext): Promise<void>;\n\n abstract updateTools(tools: ToolContext): Promise<void>;\n\n abstract updateOptions(options: { toolChoice?: ToolChoice | null }): void;\n\n abstract pushAudio(frame: AudioFrame): void;\n\n /**\n * @throws RealtimeError on Timeout\n */\n abstract generateReply(instructions?: string): Promise<GenerationCreatedEvent>;\n\n /**\n * Commit the input audio buffer to the server\n */\n abstract commitAudio(): Promise<void>;\n\n /**\n * Clear the input audio buffer to the server\n */\n abstract clearAudio(): Promise<void>;\n\n /**\n * Cancel the current generation (do nothing if no generation is in progress)\n */\n abstract interrupt(): Promise<void>;\n\n /**\n * Truncate the message at the given audio end time\n */\n abstract truncate(options: { messageId: string; audioEndMs: number }): Promise<void>;\n\n async close(): Promise<void> {\n this._mainTask.cancel();\n }\n\n /**\n * Notifies the model that user activity has started\n */\n startUserActivity(): void {\n return;\n }\n\n private async _mainTaskImpl(signal: AbortSignal): Promise<void> {\n const reader = this.deferredInputStream.stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done || signal.aborted) {\n break;\n }\n this.pushAudio(value);\n }\n }\n\n setInputAudioStream(audioStream: ReadableStream<AudioFrame>): void {\n this.deferredInputStream.setSource(audioStream);\n }\n}\n"],"mappings":"AAIA,SAAS,oBAAoB;AAE7B,SAAS,8BAA8B;AACvC,SAAS,YAAY;AA6Cd,MAAe,cAAc;AAAA,EAC1B;AAAA,EAER,YAAY,cAAoC;AAC9C,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAKF;AAEO,MAAe,wBAAwB,aAAa;AAAA,EAC/C;AAAA,EACF,sBAAsB,IAAI,uBAAmC;AAAA,EAC7D;AAAA,EAER,YAAY,eAA8B;AACxC,UAAM;AACN,SAAK,iBAAiB;AACtB,SAAK,YAAY,KAAK,KAAK,CAAC,eAAe,KAAK,cAAc,WAAW,MAAM,CAAC;AAAA,EAClF;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EA4CA,MAAM,QAAuB;AAC3B,SAAK,UAAU,OAAO;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA0B;AACxB;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,QAAoC;AAC9D,UAAM,SAAS,KAAK,oBAAoB,OAAO,UAAU;AACzD,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,QAAQ,OAAO,SAAS;AAC1B;AAAA,MACF;AACA,WAAK,UAAU,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,oBAAoB,aAA+C;AACjE,SAAK,oBAAoB,UAAU,WAAW;AAAA,EAChD;AACF;","names":[]}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var remote_chat_context_exports = {};
20
+ __export(remote_chat_context_exports, {
21
+ RemoteChatContext: () => RemoteChatContext
22
+ });
23
+ module.exports = __toCommonJS(remote_chat_context_exports);
24
+ var import_chat_context = require("./chat_context.cjs");
25
+ class RemoteChatContext {
26
+ head;
27
+ tail;
28
+ idToItem = {};
29
+ toChatCtx() {
30
+ const items = [];
31
+ let currentNode = this.head;
32
+ while (currentNode) {
33
+ items.push(currentNode.item);
34
+ currentNode = currentNode._next;
35
+ }
36
+ return new import_chat_context.ChatContext(items);
37
+ }
38
+ get(itemId) {
39
+ return this.idToItem[itemId] ?? null;
40
+ }
41
+ /**
42
+ * Insert `message` after the node with ID `previousItemId`.
43
+ * If `previousItemId` is undefined, insert at the head.
44
+ * @param previousItemId - The ID of the item after which to insert the new item.
45
+ * @param message - The item to insert.
46
+ */
47
+ insert(previousItemId, message) {
48
+ const itemId = message.id;
49
+ if (itemId in this.idToItem) {
50
+ throw new Error(`Item with ID ${itemId} already exists.`);
51
+ }
52
+ const newNode = { item: message };
53
+ if (!previousItemId) {
54
+ if (this.head) {
55
+ newNode._next = this.head;
56
+ this.head._prev = newNode;
57
+ } else {
58
+ this.tail = newNode;
59
+ }
60
+ this.head = newNode;
61
+ this.idToItem[itemId] = newNode;
62
+ return;
63
+ }
64
+ const prevNode = this.idToItem[previousItemId];
65
+ if (!prevNode) {
66
+ throw new Error(`previousItemId ${previousItemId} not found`);
67
+ }
68
+ newNode._prev = prevNode;
69
+ newNode._next = prevNode._next;
70
+ prevNode._next = newNode;
71
+ if (newNode._next) {
72
+ newNode._next._prev = newNode;
73
+ } else {
74
+ this.tail = newNode;
75
+ }
76
+ this.idToItem[itemId] = newNode;
77
+ }
78
+ delete(itemId) {
79
+ const node = this.idToItem[itemId];
80
+ if (!node) {
81
+ throw new Error(`Item with ID ${itemId} not found`);
82
+ }
83
+ const prevNode = node._prev;
84
+ const nextNode = node._next;
85
+ if (this.head === node) {
86
+ this.head = nextNode;
87
+ if (this.head) {
88
+ this.head._prev = void 0;
89
+ }
90
+ } else {
91
+ if (prevNode) {
92
+ prevNode._next = nextNode;
93
+ }
94
+ }
95
+ if (this.tail === node) {
96
+ this.tail = prevNode;
97
+ if (this.tail) {
98
+ this.tail._next = void 0;
99
+ }
100
+ } else {
101
+ if (nextNode) {
102
+ nextNode._prev = prevNode;
103
+ }
104
+ }
105
+ delete this.idToItem[itemId];
106
+ }
107
+ }
108
+ // Annotate the CommonJS export names for ESM import in node:
109
+ 0 && (module.exports = {
110
+ RemoteChatContext
111
+ });
112
+ //# sourceMappingURL=remote_chat_context.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/remote_chat_context.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { ChatContext } from './chat_context.js';\nimport type { ChatItem } from './chat_context.js';\n\nexport interface RemoteChatItem {\n item: ChatItem;\n /* @internal */\n _prev?: RemoteChatItem | null;\n /* @internal */\n _next?: RemoteChatItem | null;\n}\n\nexport class RemoteChatContext {\n private head?: RemoteChatItem | null;\n private tail?: RemoteChatItem | null;\n private idToItem: Record<string, RemoteChatItem> = {};\n\n toChatCtx(): ChatContext {\n const items: ChatItem[] = [];\n let currentNode = this.head;\n while (currentNode) {\n items.push(currentNode.item);\n currentNode = currentNode._next;\n }\n\n return new ChatContext(items);\n }\n\n get(itemId: string): RemoteChatItem | null {\n return this.idToItem[itemId] ?? null;\n }\n\n /**\n * Insert `message` after the node with ID `previousItemId`.\n * If `previousItemId` is undefined, insert at the head.\n * @param previousItemId - The ID of the item after which to insert the new item.\n * @param message - The item to insert.\n */\n insert(previousItemId: string | undefined, message: ChatItem): void {\n const itemId = message.id;\n\n if (itemId in this.idToItem) {\n throw new Error(`Item with ID ${itemId} already exists.`);\n }\n\n const newNode: RemoteChatItem = { item: message };\n\n if (!previousItemId) {\n if (this.head) {\n newNode._next = this.head;\n this.head._prev = newNode;\n } else {\n this.tail = newNode;\n }\n this.head = newNode;\n this.idToItem[itemId] = newNode;\n return;\n }\n\n const prevNode = this.idToItem[previousItemId];\n if (!prevNode) {\n throw new Error(`previousItemId ${previousItemId} not found`);\n }\n\n newNode._prev = prevNode;\n newNode._next = prevNode._next;\n\n prevNode._next = newNode;\n\n if (newNode._next) {\n newNode._next._prev = newNode;\n } else {\n this.tail = newNode;\n }\n\n this.idToItem[itemId] = newNode;\n }\n\n delete(itemId: string): void {\n const node = this.idToItem[itemId];\n if (!node) {\n throw new Error(`Item with ID ${itemId} not found`);\n }\n\n const prevNode = node._prev;\n const nextNode = node._next;\n\n if (this.head === node) {\n this.head = nextNode;\n if (this.head) {\n this.head._prev = undefined;\n }\n } else {\n if (prevNode) {\n prevNode._next = nextNode;\n }\n }\n\n if (this.tail === node) {\n this.tail = prevNode;\n if (this.tail) {\n this.tail._next = undefined;\n }\n } else {\n if (nextNode) {\n nextNode._prev = prevNode;\n }\n }\n\n delete this.idToItem[itemId];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAA4B;AAWrB,MAAM,kBAAkB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAA2C,CAAC;AAAA,EAEpD,YAAyB;AACvB,UAAM,QAAoB,CAAC;AAC3B,QAAI,cAAc,KAAK;AACvB,WAAO,aAAa;AAClB,YAAM,KAAK,YAAY,IAAI;AAC3B,oBAAc,YAAY;AAAA,IAC5B;AAEA,WAAO,IAAI,gCAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAI,QAAuC;AACzC,WAAO,KAAK,SAAS,MAAM,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,gBAAoC,SAAyB;AAClE,UAAM,SAAS,QAAQ;AAEvB,QAAI,UAAU,KAAK,UAAU;AAC3B,YAAM,IAAI,MAAM,gBAAgB,MAAM,kBAAkB;AAAA,IAC1D;AAEA,UAAM,UAA0B,EAAE,MAAM,QAAQ;AAEhD,QAAI,CAAC,gBAAgB;AACnB,UAAI,KAAK,MAAM;AACb,gBAAQ,QAAQ,KAAK;AACrB,aAAK,KAAK,QAAQ;AAAA,MACpB,OAAO;AACL,aAAK,OAAO;AAAA,MACd;AACA,WAAK,OAAO;AACZ,WAAK,SAAS,MAAM,IAAI;AACxB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,SAAS,cAAc;AAC7C,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,kBAAkB,cAAc,YAAY;AAAA,IAC9D;AAEA,YAAQ,QAAQ;AAChB,YAAQ,QAAQ,SAAS;AAEzB,aAAS,QAAQ;AAEjB,QAAI,QAAQ,OAAO;AACjB,cAAQ,MAAM,QAAQ;AAAA,IACxB,OAAO;AACL,WAAK,OAAO;AAAA,IACd;AAEA,SAAK,SAAS,MAAM,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,QAAsB;AAC3B,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,gBAAgB,MAAM,YAAY;AAAA,IACpD;AAEA,UAAM,WAAW,KAAK;AACtB,UAAM,WAAW,KAAK;AAEtB,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,UAAI,KAAK,MAAM;AACb,aAAK,KAAK,QAAQ;AAAA,MACpB;AAAA,IACF,OAAO;AACL,UAAI,UAAU;AACZ,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,UAAI,KAAK,MAAM;AACb,aAAK,KAAK,QAAQ;AAAA,MACpB;AAAA,IACF,OAAO;AACL,UAAI,UAAU;AACZ,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,KAAK,SAAS,MAAM;AAAA,EAC7B;AACF;","names":[]}
@@ -0,0 +1,23 @@
1
+ import { ChatContext } from './chat_context.js';
2
+ import type { ChatItem } from './chat_context.js';
3
+ export interface RemoteChatItem {
4
+ item: ChatItem;
5
+ _prev?: RemoteChatItem | null;
6
+ _next?: RemoteChatItem | null;
7
+ }
8
+ export declare class RemoteChatContext {
9
+ private head?;
10
+ private tail?;
11
+ private idToItem;
12
+ toChatCtx(): ChatContext;
13
+ get(itemId: string): RemoteChatItem | null;
14
+ /**
15
+ * Insert `message` after the node with ID `previousItemId`.
16
+ * If `previousItemId` is undefined, insert at the head.
17
+ * @param previousItemId - The ID of the item after which to insert the new item.
18
+ * @param message - The item to insert.
19
+ */
20
+ insert(previousItemId: string | undefined, message: ChatItem): void;
21
+ delete(itemId: string): void;
22
+ }
23
+ //# sourceMappingURL=remote_chat_context.d.ts.map
@@ -0,0 +1,23 @@
1
+ import { ChatContext } from './chat_context.js';
2
+ import type { ChatItem } from './chat_context.js';
3
+ export interface RemoteChatItem {
4
+ item: ChatItem;
5
+ _prev?: RemoteChatItem | null;
6
+ _next?: RemoteChatItem | null;
7
+ }
8
+ export declare class RemoteChatContext {
9
+ private head?;
10
+ private tail?;
11
+ private idToItem;
12
+ toChatCtx(): ChatContext;
13
+ get(itemId: string): RemoteChatItem | null;
14
+ /**
15
+ * Insert `message` after the node with ID `previousItemId`.
16
+ * If `previousItemId` is undefined, insert at the head.
17
+ * @param previousItemId - The ID of the item after which to insert the new item.
18
+ * @param message - The item to insert.
19
+ */
20
+ insert(previousItemId: string | undefined, message: ChatItem): void;
21
+ delete(itemId: string): void;
22
+ }
23
+ //# sourceMappingURL=remote_chat_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote_chat_context.d.ts","sourceRoot":"","sources":["../../src/llm/remote_chat_context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IAEf,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAE9B,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAwB;IACrC,OAAO,CAAC,IAAI,CAAC,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAsC;IAEtD,SAAS,IAAI,WAAW;IAWxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAwCnE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAiC7B"}
@@ -0,0 +1,88 @@
1
+ import { ChatContext } from "./chat_context.js";
2
+ class RemoteChatContext {
3
+ head;
4
+ tail;
5
+ idToItem = {};
6
+ toChatCtx() {
7
+ const items = [];
8
+ let currentNode = this.head;
9
+ while (currentNode) {
10
+ items.push(currentNode.item);
11
+ currentNode = currentNode._next;
12
+ }
13
+ return new ChatContext(items);
14
+ }
15
+ get(itemId) {
16
+ return this.idToItem[itemId] ?? null;
17
+ }
18
+ /**
19
+ * Insert `message` after the node with ID `previousItemId`.
20
+ * If `previousItemId` is undefined, insert at the head.
21
+ * @param previousItemId - The ID of the item after which to insert the new item.
22
+ * @param message - The item to insert.
23
+ */
24
+ insert(previousItemId, message) {
25
+ const itemId = message.id;
26
+ if (itemId in this.idToItem) {
27
+ throw new Error(`Item with ID ${itemId} already exists.`);
28
+ }
29
+ const newNode = { item: message };
30
+ if (!previousItemId) {
31
+ if (this.head) {
32
+ newNode._next = this.head;
33
+ this.head._prev = newNode;
34
+ } else {
35
+ this.tail = newNode;
36
+ }
37
+ this.head = newNode;
38
+ this.idToItem[itemId] = newNode;
39
+ return;
40
+ }
41
+ const prevNode = this.idToItem[previousItemId];
42
+ if (!prevNode) {
43
+ throw new Error(`previousItemId ${previousItemId} not found`);
44
+ }
45
+ newNode._prev = prevNode;
46
+ newNode._next = prevNode._next;
47
+ prevNode._next = newNode;
48
+ if (newNode._next) {
49
+ newNode._next._prev = newNode;
50
+ } else {
51
+ this.tail = newNode;
52
+ }
53
+ this.idToItem[itemId] = newNode;
54
+ }
55
+ delete(itemId) {
56
+ const node = this.idToItem[itemId];
57
+ if (!node) {
58
+ throw new Error(`Item with ID ${itemId} not found`);
59
+ }
60
+ const prevNode = node._prev;
61
+ const nextNode = node._next;
62
+ if (this.head === node) {
63
+ this.head = nextNode;
64
+ if (this.head) {
65
+ this.head._prev = void 0;
66
+ }
67
+ } else {
68
+ if (prevNode) {
69
+ prevNode._next = nextNode;
70
+ }
71
+ }
72
+ if (this.tail === node) {
73
+ this.tail = prevNode;
74
+ if (this.tail) {
75
+ this.tail._next = void 0;
76
+ }
77
+ } else {
78
+ if (nextNode) {
79
+ nextNode._prev = prevNode;
80
+ }
81
+ }
82
+ delete this.idToItem[itemId];
83
+ }
84
+ }
85
+ export {
86
+ RemoteChatContext
87
+ };
88
+ //# sourceMappingURL=remote_chat_context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/remote_chat_context.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { ChatContext } from './chat_context.js';\nimport type { ChatItem } from './chat_context.js';\n\nexport interface RemoteChatItem {\n item: ChatItem;\n /* @internal */\n _prev?: RemoteChatItem | null;\n /* @internal */\n _next?: RemoteChatItem | null;\n}\n\nexport class RemoteChatContext {\n private head?: RemoteChatItem | null;\n private tail?: RemoteChatItem | null;\n private idToItem: Record<string, RemoteChatItem> = {};\n\n toChatCtx(): ChatContext {\n const items: ChatItem[] = [];\n let currentNode = this.head;\n while (currentNode) {\n items.push(currentNode.item);\n currentNode = currentNode._next;\n }\n\n return new ChatContext(items);\n }\n\n get(itemId: string): RemoteChatItem | null {\n return this.idToItem[itemId] ?? null;\n }\n\n /**\n * Insert `message` after the node with ID `previousItemId`.\n * If `previousItemId` is undefined, insert at the head.\n * @param previousItemId - The ID of the item after which to insert the new item.\n * @param message - The item to insert.\n */\n insert(previousItemId: string | undefined, message: ChatItem): void {\n const itemId = message.id;\n\n if (itemId in this.idToItem) {\n throw new Error(`Item with ID ${itemId} already exists.`);\n }\n\n const newNode: RemoteChatItem = { item: message };\n\n if (!previousItemId) {\n if (this.head) {\n newNode._next = this.head;\n this.head._prev = newNode;\n } else {\n this.tail = newNode;\n }\n this.head = newNode;\n this.idToItem[itemId] = newNode;\n return;\n }\n\n const prevNode = this.idToItem[previousItemId];\n if (!prevNode) {\n throw new Error(`previousItemId ${previousItemId} not found`);\n }\n\n newNode._prev = prevNode;\n newNode._next = prevNode._next;\n\n prevNode._next = newNode;\n\n if (newNode._next) {\n newNode._next._prev = newNode;\n } else {\n this.tail = newNode;\n }\n\n this.idToItem[itemId] = newNode;\n }\n\n delete(itemId: string): void {\n const node = this.idToItem[itemId];\n if (!node) {\n throw new Error(`Item with ID ${itemId} not found`);\n }\n\n const prevNode = node._prev;\n const nextNode = node._next;\n\n if (this.head === node) {\n this.head = nextNode;\n if (this.head) {\n this.head._prev = undefined;\n }\n } else {\n if (prevNode) {\n prevNode._next = nextNode;\n }\n }\n\n if (this.tail === node) {\n this.tail = prevNode;\n if (this.tail) {\n this.tail._next = undefined;\n }\n } else {\n if (nextNode) {\n nextNode._prev = prevNode;\n }\n }\n\n delete this.idToItem[itemId];\n }\n}\n"],"mappings":"AAGA,SAAS,mBAAmB;AAWrB,MAAM,kBAAkB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAA2C,CAAC;AAAA,EAEpD,YAAyB;AACvB,UAAM,QAAoB,CAAC;AAC3B,QAAI,cAAc,KAAK;AACvB,WAAO,aAAa;AAClB,YAAM,KAAK,YAAY,IAAI;AAC3B,oBAAc,YAAY;AAAA,IAC5B;AAEA,WAAO,IAAI,YAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAI,QAAuC;AACzC,WAAO,KAAK,SAAS,MAAM,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,gBAAoC,SAAyB;AAClE,UAAM,SAAS,QAAQ;AAEvB,QAAI,UAAU,KAAK,UAAU;AAC3B,YAAM,IAAI,MAAM,gBAAgB,MAAM,kBAAkB;AAAA,IAC1D;AAEA,UAAM,UAA0B,EAAE,MAAM,QAAQ;AAEhD,QAAI,CAAC,gBAAgB;AACnB,UAAI,KAAK,MAAM;AACb,gBAAQ,QAAQ,KAAK;AACrB,aAAK,KAAK,QAAQ;AAAA,MACpB,OAAO;AACL,aAAK,OAAO;AAAA,MACd;AACA,WAAK,OAAO;AACZ,WAAK,SAAS,MAAM,IAAI;AACxB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,SAAS,cAAc;AAC7C,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,kBAAkB,cAAc,YAAY;AAAA,IAC9D;AAEA,YAAQ,QAAQ;AAChB,YAAQ,QAAQ,SAAS;AAEzB,aAAS,QAAQ;AAEjB,QAAI,QAAQ,OAAO;AACjB,cAAQ,MAAM,QAAQ;AAAA,IACxB,OAAO;AACL,WAAK,OAAO;AAAA,IACd;AAEA,SAAK,SAAS,MAAM,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,QAAsB;AAC3B,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,gBAAgB,MAAM,YAAY;AAAA,IACpD;AAEA,UAAM,WAAW,KAAK;AACtB,UAAM,WAAW,KAAK;AAEtB,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,UAAI,KAAK,MAAM;AACb,aAAK,KAAK,QAAQ;AAAA,MACpB;AAAA,IACF,OAAO;AACL,UAAI,UAAU;AACZ,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,UAAI,KAAK,MAAM;AACb,aAAK,KAAK,QAAQ;AAAA,MACpB;AAAA,IACF,OAAO;AACL,UAAI,UAAU;AACZ,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,KAAK,SAAS,MAAM;AAAA,EAC7B;AACF;","names":[]}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_chat_context = require("./chat_context.cjs");
4
+ var import_remote_chat_context = require("./remote_chat_context.cjs");
5
+ function createMessage(id, content) {
6
+ return new import_chat_context.ChatMessage({ id, role: "user", content });
7
+ }
8
+ (0, import_vitest.describe)("RemoteChatContext", () => {
9
+ let context;
10
+ (0, import_vitest.beforeEach)(() => {
11
+ context = new import_remote_chat_context.RemoteChatContext();
12
+ });
13
+ (0, import_vitest.describe)("empty context", () => {
14
+ (0, import_vitest.it)("should return empty ChatContext", () => {
15
+ const chatCtx = context.toChatCtx();
16
+ (0, import_vitest.expect)(chatCtx.items).toHaveLength(0);
17
+ });
18
+ (0, import_vitest.it)("should return null for non-existent item", () => {
19
+ (0, import_vitest.expect)(context.get("nonexistent")).toBeNull();
20
+ });
21
+ (0, import_vitest.it)("should throw error when deleting non-existent item", () => {
22
+ (0, import_vitest.expect)(() => context.delete("nonexistent")).toThrow("Item with ID nonexistent not found");
23
+ });
24
+ });
25
+ (0, import_vitest.describe)("single item operations", () => {
26
+ (0, import_vitest.it)("should insert single item at head", () => {
27
+ const msg = createMessage("msg1", "Hello");
28
+ context.insert(void 0, msg);
29
+ (0, import_vitest.expect)(context.get("msg1")).toBeDefined();
30
+ (0, import_vitest.expect)(context.get("msg1").item).toBe(msg);
31
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg]);
32
+ });
33
+ (0, import_vitest.it)("should delete single item", () => {
34
+ const msg = createMessage("msg1", "Hello");
35
+ context.insert(void 0, msg);
36
+ context.delete("msg1");
37
+ (0, import_vitest.expect)(context.get("msg1")).toBeNull();
38
+ (0, import_vitest.expect)(context.toChatCtx().items).toHaveLength(0);
39
+ });
40
+ });
41
+ (0, import_vitest.describe)("multiple item operations", () => {
42
+ (0, import_vitest.it)("should insert multiple items at head", () => {
43
+ const msg1 = createMessage("msg1", "First");
44
+ const msg2 = createMessage("msg2", "Second");
45
+ const msg3 = createMessage("msg3", "Third");
46
+ context.insert(void 0, msg1);
47
+ context.insert(void 0, msg2);
48
+ context.insert(void 0, msg3);
49
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg3, msg2, msg1]);
50
+ });
51
+ (0, import_vitest.it)("should insert items after specific nodes", () => {
52
+ const msg1 = createMessage("msg1", "First");
53
+ const msg2 = createMessage("msg2", "Second");
54
+ const msg3 = createMessage("msg3", "Third");
55
+ context.insert(void 0, msg1);
56
+ context.insert("msg1", msg2);
57
+ context.insert("msg1", msg3);
58
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg3, msg2]);
59
+ });
60
+ (0, import_vitest.it)("should insert at tail", () => {
61
+ const msg1 = createMessage("msg1", "First");
62
+ const msg2 = createMessage("msg2", "Second");
63
+ const msg3 = createMessage("msg3", "Third");
64
+ context.insert(void 0, msg1);
65
+ context.insert("msg1", msg2);
66
+ context.insert("msg2", msg3);
67
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg2, msg3]);
68
+ });
69
+ });
70
+ (0, import_vitest.describe)("deletion edge cases", () => {
71
+ (0, import_vitest.it)("should delete head node from multi-item list", () => {
72
+ const msg1 = createMessage("msg1", "First");
73
+ const msg2 = createMessage("msg2", "Second");
74
+ const msg3 = createMessage("msg3", "Third");
75
+ context.insert(void 0, msg1);
76
+ context.insert("msg1", msg2);
77
+ context.insert("msg2", msg3);
78
+ context.delete("msg1");
79
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg2, msg3]);
80
+ });
81
+ (0, import_vitest.it)("should delete tail node from multi-item list", () => {
82
+ const msg1 = createMessage("msg1", "First");
83
+ const msg2 = createMessage("msg2", "Second");
84
+ const msg3 = createMessage("msg3", "Third");
85
+ context.insert(void 0, msg1);
86
+ context.insert("msg1", msg2);
87
+ context.insert("msg2", msg3);
88
+ context.delete("msg3");
89
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg2]);
90
+ });
91
+ (0, import_vitest.it)("should delete middle node from multi-item list", () => {
92
+ const msg1 = createMessage("msg1", "First");
93
+ const msg2 = createMessage("msg2", "Second");
94
+ const msg3 = createMessage("msg3", "Third");
95
+ context.insert(void 0, msg1);
96
+ context.insert("msg1", msg2);
97
+ context.insert("msg2", msg3);
98
+ context.delete("msg2");
99
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg3]);
100
+ });
101
+ (0, import_vitest.it)("should handle multiple deletions", () => {
102
+ const msg1 = createMessage("msg1", "First");
103
+ const msg2 = createMessage("msg2", "Second");
104
+ const msg3 = createMessage("msg3", "Third");
105
+ const msg4 = createMessage("msg4", "Fourth");
106
+ context.insert(void 0, msg1);
107
+ context.insert("msg1", msg2);
108
+ context.insert("msg2", msg3);
109
+ context.insert("msg3", msg4);
110
+ context.delete("msg2");
111
+ context.delete("msg4");
112
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg3]);
113
+ context.delete("msg1");
114
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg3]);
115
+ context.delete("msg3");
116
+ (0, import_vitest.expect)(context.toChatCtx().items).toHaveLength(0);
117
+ });
118
+ });
119
+ (0, import_vitest.describe)("error conditions", () => {
120
+ (0, import_vitest.it)("should throw error when inserting duplicate ID", () => {
121
+ const msg1 = createMessage("msg1", "First");
122
+ const msg2 = createMessage("msg1", "Duplicate");
123
+ context.insert(void 0, msg1);
124
+ (0, import_vitest.expect)(() => context.insert(void 0, msg2)).toThrow("Item with ID msg1 already exists.");
125
+ });
126
+ (0, import_vitest.it)("should throw error when inserting after non-existent ID", () => {
127
+ const msg = createMessage("msg1", "Hello");
128
+ (0, import_vitest.expect)(() => context.insert("nonexistent", msg)).toThrow(
129
+ "previousItemId nonexistent not found"
130
+ );
131
+ });
132
+ (0, import_vitest.it)("should throw error when deleting non-existent ID", () => {
133
+ (0, import_vitest.expect)(() => context.delete("nonexistent")).toThrow("Item with ID nonexistent not found");
134
+ });
135
+ });
136
+ (0, import_vitest.describe)("complex scenarios", () => {
137
+ (0, import_vitest.it)("should handle interleaved inserts and deletes", () => {
138
+ const msg1 = createMessage("msg1", "A");
139
+ const msg2 = createMessage("msg2", "B");
140
+ const msg3 = createMessage("msg3", "C");
141
+ const msg4 = createMessage("msg4", "D");
142
+ context.insert(void 0, msg1);
143
+ context.insert("msg1", msg2);
144
+ context.delete("msg1");
145
+ context.insert("msg2", msg3);
146
+ context.insert(void 0, msg4);
147
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg4, msg2, msg3]);
148
+ });
149
+ (0, import_vitest.it)("should maintain correct pointers after complex operations", () => {
150
+ const msg1 = createMessage("msg1", "A");
151
+ const msg2 = createMessage("msg2", "B");
152
+ const msg3 = createMessage("msg3", "C");
153
+ const msg4 = createMessage("msg4", "D");
154
+ const msg5 = createMessage("msg5", "E");
155
+ context.insert(void 0, msg1);
156
+ context.insert("msg1", msg2);
157
+ context.insert("msg2", msg3);
158
+ context.insert("msg1", msg4);
159
+ context.insert("msg4", msg5);
160
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg4, msg5, msg2, msg3]);
161
+ context.delete("msg4");
162
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg1, msg5, msg2, msg3]);
163
+ context.delete("msg1");
164
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg5, msg2, msg3]);
165
+ context.delete("msg2");
166
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([msg5, msg3]);
167
+ });
168
+ (0, import_vitest.it)("should handle rebuilding from scratch", () => {
169
+ const messages = Array.from(
170
+ { length: 10 },
171
+ (_, i) => createMessage(`msg${i}`, `Content ${i}`)
172
+ );
173
+ for (const msg of messages) {
174
+ context.insert(void 0, msg);
175
+ }
176
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual([...messages].reverse());
177
+ for (let i = 0; i < 5; i++) {
178
+ context.delete(`msg${i}`);
179
+ }
180
+ const remaining = [...messages].reverse().filter((msg) => !["msg0", "msg1", "msg2", "msg3", "msg4"].includes(msg.id));
181
+ (0, import_vitest.expect)(context.toChatCtx().items).toEqual(remaining);
182
+ });
183
+ });
184
+ (0, import_vitest.describe)("get method", () => {
185
+ (0, import_vitest.it)("should return correct item for existing ID", () => {
186
+ const msg1 = createMessage("msg1", "Hello");
187
+ const msg2 = createMessage("msg2", "World");
188
+ context.insert(void 0, msg1);
189
+ context.insert("msg1", msg2);
190
+ const retrieved = context.get("msg2");
191
+ (0, import_vitest.expect)(retrieved).toBeDefined();
192
+ (0, import_vitest.expect)(retrieved.item).toBe(msg2);
193
+ });
194
+ (0, import_vitest.it)("should return null for non-existent ID", () => {
195
+ const msg = createMessage("msg1", "Hello");
196
+ context.insert(void 0, msg);
197
+ (0, import_vitest.expect)(context.get("nonexistent")).toBeNull();
198
+ });
199
+ });
200
+ (0, import_vitest.describe)("toChatCtx method", () => {
201
+ (0, import_vitest.it)("should preserve order in ChatContext", () => {
202
+ const msg1 = createMessage("msg1", "First");
203
+ const msg2 = createMessage("msg2", "Second");
204
+ const msg3 = createMessage("msg3", "Third");
205
+ context.insert(void 0, msg1);
206
+ context.insert("msg1", msg2);
207
+ context.insert("msg2", msg3);
208
+ const chatCtx = context.toChatCtx();
209
+ (0, import_vitest.expect)(chatCtx.items).toEqual([msg1, msg2, msg3]);
210
+ });
211
+ (0, import_vitest.it)("should work with empty context", () => {
212
+ const chatCtx = context.toChatCtx();
213
+ (0, import_vitest.expect)(chatCtx.items).toHaveLength(0);
214
+ });
215
+ (0, import_vitest.it)("should create new ChatContext instance", () => {
216
+ const msg = createMessage("msg1", "Hello");
217
+ context.insert(void 0, msg);
218
+ const chatCtx1 = context.toChatCtx();
219
+ const chatCtx2 = context.toChatCtx();
220
+ (0, import_vitest.expect)(chatCtx1).not.toBe(chatCtx2);
221
+ (0, import_vitest.expect)(chatCtx1.items).toEqual(chatCtx2.items);
222
+ });
223
+ });
224
+ });
225
+ //# sourceMappingURL=remote_chat_context.test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/remote_chat_context.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { beforeEach, describe, expect, it } from 'vitest';\nimport { ChatMessage } from './chat_context.js';\nimport { RemoteChatContext } from './remote_chat_context.js';\n\nfunction createMessage(id: string, content: string): ChatMessage {\n return new ChatMessage({ id, role: 'user', content });\n}\n\ndescribe('RemoteChatContext', () => {\n let context: RemoteChatContext;\n\n beforeEach(() => {\n context = new RemoteChatContext();\n });\n\n describe('empty context', () => {\n it('should return empty ChatContext', () => {\n const chatCtx = context.toChatCtx();\n expect(chatCtx.items).toHaveLength(0);\n });\n\n it('should return null for non-existent item', () => {\n expect(context.get('nonexistent')).toBeNull();\n });\n\n it('should throw error when deleting non-existent item', () => {\n expect(() => context.delete('nonexistent')).toThrow('Item with ID nonexistent not found');\n });\n });\n\n describe('single item operations', () => {\n it('should insert single item at head', () => {\n const msg = createMessage('msg1', 'Hello');\n context.insert(undefined, msg);\n\n expect(context.get('msg1')).toBeDefined();\n expect(context.get('msg1')!.item).toBe(msg);\n expect(context.toChatCtx().items).toEqual([msg]);\n });\n\n it('should delete single item', () => {\n const msg = createMessage('msg1', 'Hello');\n context.insert(undefined, msg);\n context.delete('msg1');\n\n expect(context.get('msg1')).toBeNull();\n expect(context.toChatCtx().items).toHaveLength(0);\n });\n });\n\n describe('multiple item operations', () => {\n it('should insert multiple items at head', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert(undefined, msg2);\n context.insert(undefined, msg3);\n\n expect(context.toChatCtx().items).toEqual([msg3, msg2, msg1]);\n });\n\n it('should insert items after specific nodes', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg1', msg3);\n\n expect(context.toChatCtx().items).toEqual([msg1, msg3, msg2]);\n });\n\n it('should insert at tail', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n\n expect(context.toChatCtx().items).toEqual([msg1, msg2, msg3]);\n });\n });\n\n describe('deletion edge cases', () => {\n it('should delete head node from multi-item list', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n\n context.delete('msg1');\n expect(context.toChatCtx().items).toEqual([msg2, msg3]);\n });\n\n it('should delete tail node from multi-item list', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n\n context.delete('msg3');\n expect(context.toChatCtx().items).toEqual([msg1, msg2]);\n });\n\n it('should delete middle node from multi-item list', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n\n context.delete('msg2');\n expect(context.toChatCtx().items).toEqual([msg1, msg3]);\n });\n\n it('should handle multiple deletions', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n const msg4 = createMessage('msg4', 'Fourth');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n context.insert('msg3', msg4);\n\n context.delete('msg2');\n context.delete('msg4');\n expect(context.toChatCtx().items).toEqual([msg1, msg3]);\n\n context.delete('msg1');\n expect(context.toChatCtx().items).toEqual([msg3]);\n\n context.delete('msg3');\n expect(context.toChatCtx().items).toHaveLength(0);\n });\n });\n\n describe('error conditions', () => {\n it('should throw error when inserting duplicate ID', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg1', 'Duplicate');\n\n context.insert(undefined, msg1);\n expect(() => context.insert(undefined, msg2)).toThrow('Item with ID msg1 already exists.');\n });\n\n it('should throw error when inserting after non-existent ID', () => {\n const msg = createMessage('msg1', 'Hello');\n expect(() => context.insert('nonexistent', msg)).toThrow(\n 'previousItemId nonexistent not found',\n );\n });\n\n it('should throw error when deleting non-existent ID', () => {\n expect(() => context.delete('nonexistent')).toThrow('Item with ID nonexistent not found');\n });\n });\n\n describe('complex scenarios', () => {\n it('should handle interleaved inserts and deletes', () => {\n const msg1 = createMessage('msg1', 'A');\n const msg2 = createMessage('msg2', 'B');\n const msg3 = createMessage('msg3', 'C');\n const msg4 = createMessage('msg4', 'D');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.delete('msg1');\n context.insert('msg2', msg3);\n context.insert(undefined, msg4);\n\n expect(context.toChatCtx().items).toEqual([msg4, msg2, msg3]);\n });\n\n it('should maintain correct pointers after complex operations', () => {\n const msg1 = createMessage('msg1', 'A');\n const msg2 = createMessage('msg2', 'B');\n const msg3 = createMessage('msg3', 'C');\n const msg4 = createMessage('msg4', 'D');\n const msg5 = createMessage('msg5', 'E');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n context.insert('msg1', msg4);\n context.insert('msg4', msg5);\n\n expect(context.toChatCtx().items).toEqual([msg1, msg4, msg5, msg2, msg3]);\n\n context.delete('msg4');\n expect(context.toChatCtx().items).toEqual([msg1, msg5, msg2, msg3]);\n\n context.delete('msg1');\n expect(context.toChatCtx().items).toEqual([msg5, msg2, msg3]);\n\n context.delete('msg2');\n expect(context.toChatCtx().items).toEqual([msg5, msg3]);\n });\n\n it('should handle rebuilding from scratch', () => {\n const messages = Array.from({ length: 10 }, (_, i) =>\n createMessage(`msg${i}`, `Content ${i}`),\n );\n\n for (const msg of messages) {\n context.insert(undefined, msg);\n }\n\n expect(context.toChatCtx().items).toEqual([...messages].reverse());\n\n for (let i = 0; i < 5; i++) {\n context.delete(`msg${i}`);\n }\n\n const remaining = [...messages]\n .reverse()\n .filter((msg) => !['msg0', 'msg1', 'msg2', 'msg3', 'msg4'].includes(msg.id));\n expect(context.toChatCtx().items).toEqual(remaining);\n });\n });\n\n describe('get method', () => {\n it('should return correct item for existing ID', () => {\n const msg1 = createMessage('msg1', 'Hello');\n const msg2 = createMessage('msg2', 'World');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n\n const retrieved = context.get('msg2');\n expect(retrieved).toBeDefined();\n expect(retrieved!.item).toBe(msg2);\n });\n\n it('should return null for non-existent ID', () => {\n const msg = createMessage('msg1', 'Hello');\n context.insert(undefined, msg);\n\n expect(context.get('nonexistent')).toBeNull();\n });\n });\n\n describe('toChatCtx method', () => {\n it('should preserve order in ChatContext', () => {\n const msg1 = createMessage('msg1', 'First');\n const msg2 = createMessage('msg2', 'Second');\n const msg3 = createMessage('msg3', 'Third');\n\n context.insert(undefined, msg1);\n context.insert('msg1', msg2);\n context.insert('msg2', msg3);\n\n const chatCtx = context.toChatCtx();\n expect(chatCtx.items).toEqual([msg1, msg2, msg3]);\n });\n\n it('should work with empty context', () => {\n const chatCtx = context.toChatCtx();\n expect(chatCtx.items).toHaveLength(0);\n });\n\n it('should create new ChatContext instance', () => {\n const msg = createMessage('msg1', 'Hello');\n context.insert(undefined, msg);\n\n const chatCtx1 = context.toChatCtx();\n const chatCtx2 = context.toChatCtx();\n\n expect(chatCtx1).not.toBe(chatCtx2);\n expect(chatCtx1.items).toEqual(chatCtx2.items);\n });\n });\n});\n"],"mappings":"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","names":[]}