@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,224 @@
1
+ import { beforeEach, describe, expect, it } from "vitest";
2
+ import { ChatMessage } from "./chat_context.js";
3
+ import { RemoteChatContext } from "./remote_chat_context.js";
4
+ function createMessage(id, content) {
5
+ return new ChatMessage({ id, role: "user", content });
6
+ }
7
+ describe("RemoteChatContext", () => {
8
+ let context;
9
+ beforeEach(() => {
10
+ context = new RemoteChatContext();
11
+ });
12
+ describe("empty context", () => {
13
+ it("should return empty ChatContext", () => {
14
+ const chatCtx = context.toChatCtx();
15
+ expect(chatCtx.items).toHaveLength(0);
16
+ });
17
+ it("should return null for non-existent item", () => {
18
+ expect(context.get("nonexistent")).toBeNull();
19
+ });
20
+ it("should throw error when deleting non-existent item", () => {
21
+ expect(() => context.delete("nonexistent")).toThrow("Item with ID nonexistent not found");
22
+ });
23
+ });
24
+ describe("single item operations", () => {
25
+ it("should insert single item at head", () => {
26
+ const msg = createMessage("msg1", "Hello");
27
+ context.insert(void 0, msg);
28
+ expect(context.get("msg1")).toBeDefined();
29
+ expect(context.get("msg1").item).toBe(msg);
30
+ expect(context.toChatCtx().items).toEqual([msg]);
31
+ });
32
+ it("should delete single item", () => {
33
+ const msg = createMessage("msg1", "Hello");
34
+ context.insert(void 0, msg);
35
+ context.delete("msg1");
36
+ expect(context.get("msg1")).toBeNull();
37
+ expect(context.toChatCtx().items).toHaveLength(0);
38
+ });
39
+ });
40
+ describe("multiple item operations", () => {
41
+ it("should insert multiple items at head", () => {
42
+ const msg1 = createMessage("msg1", "First");
43
+ const msg2 = createMessage("msg2", "Second");
44
+ const msg3 = createMessage("msg3", "Third");
45
+ context.insert(void 0, msg1);
46
+ context.insert(void 0, msg2);
47
+ context.insert(void 0, msg3);
48
+ expect(context.toChatCtx().items).toEqual([msg3, msg2, msg1]);
49
+ });
50
+ it("should insert items after specific nodes", () => {
51
+ const msg1 = createMessage("msg1", "First");
52
+ const msg2 = createMessage("msg2", "Second");
53
+ const msg3 = createMessage("msg3", "Third");
54
+ context.insert(void 0, msg1);
55
+ context.insert("msg1", msg2);
56
+ context.insert("msg1", msg3);
57
+ expect(context.toChatCtx().items).toEqual([msg1, msg3, msg2]);
58
+ });
59
+ it("should insert at tail", () => {
60
+ const msg1 = createMessage("msg1", "First");
61
+ const msg2 = createMessage("msg2", "Second");
62
+ const msg3 = createMessage("msg3", "Third");
63
+ context.insert(void 0, msg1);
64
+ context.insert("msg1", msg2);
65
+ context.insert("msg2", msg3);
66
+ expect(context.toChatCtx().items).toEqual([msg1, msg2, msg3]);
67
+ });
68
+ });
69
+ describe("deletion edge cases", () => {
70
+ it("should delete head node from multi-item list", () => {
71
+ const msg1 = createMessage("msg1", "First");
72
+ const msg2 = createMessage("msg2", "Second");
73
+ const msg3 = createMessage("msg3", "Third");
74
+ context.insert(void 0, msg1);
75
+ context.insert("msg1", msg2);
76
+ context.insert("msg2", msg3);
77
+ context.delete("msg1");
78
+ expect(context.toChatCtx().items).toEqual([msg2, msg3]);
79
+ });
80
+ it("should delete tail node from multi-item list", () => {
81
+ const msg1 = createMessage("msg1", "First");
82
+ const msg2 = createMessage("msg2", "Second");
83
+ const msg3 = createMessage("msg3", "Third");
84
+ context.insert(void 0, msg1);
85
+ context.insert("msg1", msg2);
86
+ context.insert("msg2", msg3);
87
+ context.delete("msg3");
88
+ expect(context.toChatCtx().items).toEqual([msg1, msg2]);
89
+ });
90
+ it("should delete middle node from multi-item list", () => {
91
+ const msg1 = createMessage("msg1", "First");
92
+ const msg2 = createMessage("msg2", "Second");
93
+ const msg3 = createMessage("msg3", "Third");
94
+ context.insert(void 0, msg1);
95
+ context.insert("msg1", msg2);
96
+ context.insert("msg2", msg3);
97
+ context.delete("msg2");
98
+ expect(context.toChatCtx().items).toEqual([msg1, msg3]);
99
+ });
100
+ it("should handle multiple deletions", () => {
101
+ const msg1 = createMessage("msg1", "First");
102
+ const msg2 = createMessage("msg2", "Second");
103
+ const msg3 = createMessage("msg3", "Third");
104
+ const msg4 = createMessage("msg4", "Fourth");
105
+ context.insert(void 0, msg1);
106
+ context.insert("msg1", msg2);
107
+ context.insert("msg2", msg3);
108
+ context.insert("msg3", msg4);
109
+ context.delete("msg2");
110
+ context.delete("msg4");
111
+ expect(context.toChatCtx().items).toEqual([msg1, msg3]);
112
+ context.delete("msg1");
113
+ expect(context.toChatCtx().items).toEqual([msg3]);
114
+ context.delete("msg3");
115
+ expect(context.toChatCtx().items).toHaveLength(0);
116
+ });
117
+ });
118
+ describe("error conditions", () => {
119
+ it("should throw error when inserting duplicate ID", () => {
120
+ const msg1 = createMessage("msg1", "First");
121
+ const msg2 = createMessage("msg1", "Duplicate");
122
+ context.insert(void 0, msg1);
123
+ expect(() => context.insert(void 0, msg2)).toThrow("Item with ID msg1 already exists.");
124
+ });
125
+ it("should throw error when inserting after non-existent ID", () => {
126
+ const msg = createMessage("msg1", "Hello");
127
+ expect(() => context.insert("nonexistent", msg)).toThrow(
128
+ "previousItemId nonexistent not found"
129
+ );
130
+ });
131
+ it("should throw error when deleting non-existent ID", () => {
132
+ expect(() => context.delete("nonexistent")).toThrow("Item with ID nonexistent not found");
133
+ });
134
+ });
135
+ describe("complex scenarios", () => {
136
+ it("should handle interleaved inserts and deletes", () => {
137
+ const msg1 = createMessage("msg1", "A");
138
+ const msg2 = createMessage("msg2", "B");
139
+ const msg3 = createMessage("msg3", "C");
140
+ const msg4 = createMessage("msg4", "D");
141
+ context.insert(void 0, msg1);
142
+ context.insert("msg1", msg2);
143
+ context.delete("msg1");
144
+ context.insert("msg2", msg3);
145
+ context.insert(void 0, msg4);
146
+ expect(context.toChatCtx().items).toEqual([msg4, msg2, msg3]);
147
+ });
148
+ it("should maintain correct pointers after complex operations", () => {
149
+ const msg1 = createMessage("msg1", "A");
150
+ const msg2 = createMessage("msg2", "B");
151
+ const msg3 = createMessage("msg3", "C");
152
+ const msg4 = createMessage("msg4", "D");
153
+ const msg5 = createMessage("msg5", "E");
154
+ context.insert(void 0, msg1);
155
+ context.insert("msg1", msg2);
156
+ context.insert("msg2", msg3);
157
+ context.insert("msg1", msg4);
158
+ context.insert("msg4", msg5);
159
+ expect(context.toChatCtx().items).toEqual([msg1, msg4, msg5, msg2, msg3]);
160
+ context.delete("msg4");
161
+ expect(context.toChatCtx().items).toEqual([msg1, msg5, msg2, msg3]);
162
+ context.delete("msg1");
163
+ expect(context.toChatCtx().items).toEqual([msg5, msg2, msg3]);
164
+ context.delete("msg2");
165
+ expect(context.toChatCtx().items).toEqual([msg5, msg3]);
166
+ });
167
+ it("should handle rebuilding from scratch", () => {
168
+ const messages = Array.from(
169
+ { length: 10 },
170
+ (_, i) => createMessage(`msg${i}`, `Content ${i}`)
171
+ );
172
+ for (const msg of messages) {
173
+ context.insert(void 0, msg);
174
+ }
175
+ expect(context.toChatCtx().items).toEqual([...messages].reverse());
176
+ for (let i = 0; i < 5; i++) {
177
+ context.delete(`msg${i}`);
178
+ }
179
+ const remaining = [...messages].reverse().filter((msg) => !["msg0", "msg1", "msg2", "msg3", "msg4"].includes(msg.id));
180
+ expect(context.toChatCtx().items).toEqual(remaining);
181
+ });
182
+ });
183
+ describe("get method", () => {
184
+ it("should return correct item for existing ID", () => {
185
+ const msg1 = createMessage("msg1", "Hello");
186
+ const msg2 = createMessage("msg2", "World");
187
+ context.insert(void 0, msg1);
188
+ context.insert("msg1", msg2);
189
+ const retrieved = context.get("msg2");
190
+ expect(retrieved).toBeDefined();
191
+ expect(retrieved.item).toBe(msg2);
192
+ });
193
+ it("should return null for non-existent ID", () => {
194
+ const msg = createMessage("msg1", "Hello");
195
+ context.insert(void 0, msg);
196
+ expect(context.get("nonexistent")).toBeNull();
197
+ });
198
+ });
199
+ describe("toChatCtx method", () => {
200
+ it("should preserve order in ChatContext", () => {
201
+ const msg1 = createMessage("msg1", "First");
202
+ const msg2 = createMessage("msg2", "Second");
203
+ const msg3 = createMessage("msg3", "Third");
204
+ context.insert(void 0, msg1);
205
+ context.insert("msg1", msg2);
206
+ context.insert("msg2", msg3);
207
+ const chatCtx = context.toChatCtx();
208
+ expect(chatCtx.items).toEqual([msg1, msg2, msg3]);
209
+ });
210
+ it("should work with empty context", () => {
211
+ const chatCtx = context.toChatCtx();
212
+ expect(chatCtx.items).toHaveLength(0);
213
+ });
214
+ it("should create new ChatContext instance", () => {
215
+ const msg = createMessage("msg1", "Hello");
216
+ context.insert(void 0, msg);
217
+ const chatCtx1 = context.toChatCtx();
218
+ const chatCtx2 = context.toChatCtx();
219
+ expect(chatCtx1).not.toBe(chatCtx2);
220
+ expect(chatCtx1.items).toEqual(chatCtx2.items);
221
+ });
222
+ });
223
+ });
224
+ //# sourceMappingURL=remote_chat_context.test.js.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":[]}
@@ -0,0 +1,111 @@
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 tool_context_exports = {};
20
+ __export(tool_context_exports, {
21
+ ToolError: () => ToolError,
22
+ handoff: () => handoff,
23
+ isAgentHandoff: () => isAgentHandoff,
24
+ isFunctionTool: () => isFunctionTool,
25
+ isProviderDefinedTool: () => isProviderDefinedTool,
26
+ isTool: () => isTool,
27
+ isToolError: () => isToolError,
28
+ tool: () => tool
29
+ });
30
+ module.exports = __toCommonJS(tool_context_exports);
31
+ var import_zod = require("zod");
32
+ const TOOL_SYMBOL = Symbol("tool");
33
+ const FUNCTION_TOOL_SYMBOL = Symbol("function_tool");
34
+ const PROVIDER_DEFINED_TOOL_SYMBOL = Symbol("provider_defined_tool");
35
+ const TOOL_ERROR_SYMBOL = Symbol("tool_error");
36
+ const HANDOFF_SYMBOL = Symbol("handoff");
37
+ class ToolError extends Error {
38
+ constructor(message) {
39
+ super(message);
40
+ Object.defineProperty(this, TOOL_ERROR_SYMBOL, {
41
+ value: true
42
+ });
43
+ }
44
+ }
45
+ function handoff(options) {
46
+ return {
47
+ agent: options.agent,
48
+ returns: options.returns,
49
+ [HANDOFF_SYMBOL]: true
50
+ };
51
+ }
52
+ function tool(tool2) {
53
+ if (tool2.execute !== void 0) {
54
+ const parameters = tool2.parameters ?? import_zod.z.object({});
55
+ if (parameters instanceof import_zod.ZodType && parameters._def.typeName !== "ZodObject") {
56
+ throw new Error("Tool parameters must be a Zod object schema (z.object(...))");
57
+ }
58
+ if (!(parameters instanceof import_zod.ZodObject) && !(typeof parameters === "object")) {
59
+ throw new Error("Tool parameters must be a Zod object schema or a raw JSON schema");
60
+ }
61
+ return {
62
+ type: "function",
63
+ description: tool2.description,
64
+ parameters,
65
+ execute: tool2.execute,
66
+ [TOOL_SYMBOL]: true,
67
+ [FUNCTION_TOOL_SYMBOL]: true
68
+ };
69
+ }
70
+ if (tool2.config !== void 0 && tool2.id !== void 0) {
71
+ return {
72
+ type: "provider-defined",
73
+ id: tool2.id,
74
+ config: tool2.config,
75
+ [TOOL_SYMBOL]: true,
76
+ [PROVIDER_DEFINED_TOOL_SYMBOL]: true
77
+ };
78
+ }
79
+ throw new Error("Invalid tool");
80
+ }
81
+ function isTool(tool2) {
82
+ return tool2 && tool2[TOOL_SYMBOL] === true;
83
+ }
84
+ function isFunctionTool(tool2) {
85
+ const isTool2 = tool2 && tool2[TOOL_SYMBOL] === true;
86
+ const isFunctionTool2 = tool2[FUNCTION_TOOL_SYMBOL] === true;
87
+ return isTool2 && isFunctionTool2;
88
+ }
89
+ function isProviderDefinedTool(tool2) {
90
+ const isTool2 = tool2 && tool2[TOOL_SYMBOL] === true;
91
+ const isProviderDefinedTool2 = tool2[PROVIDER_DEFINED_TOOL_SYMBOL] === true;
92
+ return isTool2 && isProviderDefinedTool2;
93
+ }
94
+ function isToolError(error) {
95
+ return error && error[TOOL_ERROR_SYMBOL] === true;
96
+ }
97
+ function isAgentHandoff(handoff2) {
98
+ return handoff2 && handoff2[HANDOFF_SYMBOL] === true;
99
+ }
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ ToolError,
103
+ handoff,
104
+ isAgentHandoff,
105
+ isFunctionTool,
106
+ isProviderDefinedTool,
107
+ isTool,
108
+ isToolError,
109
+ tool
110
+ });
111
+ //# sourceMappingURL=tool_context.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/llm/tool_context.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { JSONSchema7 } from 'json-schema';\nimport { ZodObject, ZodType, z } from 'zod';\nimport type { Agent } from '../voice/agent.js';\nimport type { RunContext, UnknownUserData } from '../voice/run_context.js';\n\n// heavily inspired by Vercel AI's `tool()`:\n// https://github.com/vercel/ai/blob/3b0983b/packages/ai/core/tool/tool.ts\n\nconst TOOL_SYMBOL = Symbol('tool');\nconst FUNCTION_TOOL_SYMBOL = Symbol('function_tool');\nconst PROVIDER_DEFINED_TOOL_SYMBOL = Symbol('provider_defined_tool');\nconst TOOL_ERROR_SYMBOL = Symbol('tool_error');\nconst HANDOFF_SYMBOL = Symbol('handoff');\n\nexport type JSONValue = null | string | number | boolean | JSONObject | JSONArray;\n\nexport type JSONArray = JSONValue[];\n\nexport type JSONObject = {\n [key: string]: JSONValue;\n};\n\n// TODO(AJS-111): support Zod cross-version compatibility, raw JSON schema, both strict and non-strict versions\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ToolInputSchema<T extends JSONObject> = ZodObject<any, any, any, T, T> | JSONSchema7;\n\nexport type ToolType = 'function' | 'provider-defined';\n\nexport type ToolChoice =\n | 'auto'\n | 'none'\n | 'required'\n | {\n type: 'function';\n function: {\n name: string;\n };\n };\n\nexport class ToolError extends Error {\n constructor(message: string) {\n super(message);\n\n Object.defineProperty(this, TOOL_ERROR_SYMBOL, {\n value: true,\n });\n }\n}\n\nexport interface AgentHandoff {\n /**\n * The agent to handoff to.\n */\n agent: Agent;\n\n /**\n * The return value of the tool.\n */\n returns?: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n [HANDOFF_SYMBOL]: true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function handoff(options: { agent: Agent; returns?: any }): AgentHandoff {\n return {\n agent: options.agent,\n returns: options.returns,\n [HANDOFF_SYMBOL]: true,\n };\n}\n\nexport interface ToolOptions<UserData = UnknownUserData> {\n /**\n * RunContext for the current agent session.\n */\n ctx: RunContext<UserData>;\n\n /**\n * The ID of the tool call.\n */\n toolCallId: string;\n\n /**\n * An optional abort signal that indicates that the overall operation should be aborted.\n */\n abortSignal?: AbortSignal;\n}\n\nexport type ToolExecuteFunction<\n Parameters extends JSONObject,\n UserData = UnknownUserData,\n Result = unknown,\n> = (args: Parameters, opts: ToolOptions<UserData>) => Promise<Result>;\n\nexport interface Tool {\n /**\n * The type of the tool.\n * @internal Either user-defined core tool or provider-defined tool.\n */\n type: ToolType;\n\n [TOOL_SYMBOL]: true;\n}\n\n// TODO(AJS-112): support provider-defined tools\nexport interface ProviderDefinedTool extends Tool {\n type: 'provider-defined';\n\n /**\n * The ID of the tool.\n */\n id: string;\n\n /**\n * The configuration of the tool.\n */\n config: Record<string, unknown>;\n\n [PROVIDER_DEFINED_TOOL_SYMBOL]: true;\n}\n\nexport interface FunctionTool<\n Parameters extends JSONObject,\n UserData = UnknownUserData,\n Result = unknown,\n> extends Tool {\n type: 'function';\n\n /**\n * The description of the tool. Will be used by the language model to decide whether to use the tool.\n */\n description: string;\n\n /**\n * The schema of the input that the tool expects. The language model will use this to generate the input.\n * It is also used to validate the output of the language model.\n * Use descriptions to make the input understandable for the language model.\n */\n parameters: ToolInputSchema<Parameters>;\n\n /**\n * An async function that is called with the arguments from the tool call and produces a result.\n * It also carries context about current session, user-defined data, and the tool call id, etc.\n */\n execute: ToolExecuteFunction<Parameters, UserData, Result>;\n\n [FUNCTION_TOOL_SYMBOL]: true;\n}\n\n// TODO(AJS-112): support provider-defined tools in the future)\nexport type ToolContext<UserData = UnknownUserData> = {\n [name: string]: FunctionTool<any, UserData, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n};\n\n/**\n * Create a function tool.\n *\n * @param description - The description of the tool.\n * @param parameters - The schema of the input that the tool expects. If not provided, defaults to z.object({}).\n * @param execute - The function that is called with the arguments from the tool call and produces a result.\n */\nexport function tool<\n Parameters extends JSONObject = Record<string, never>,\n UserData = UnknownUserData,\n Result = unknown,\n>({\n description,\n parameters,\n execute,\n}: {\n description: string;\n parameters?: ToolInputSchema<Parameters>;\n execute: ToolExecuteFunction<Parameters, UserData, Result>;\n}): FunctionTool<Parameters, UserData, Result>;\n\n/**\n * Create a provider-defined tool.\n *\n * @param id - The ID of the tool.\n * @param config - The configuration of the tool.\n */\nexport function tool({\n id,\n config,\n}: {\n id: string;\n config: Record<string, unknown>;\n}): ProviderDefinedTool;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function tool(tool: any): any {\n if (tool.execute !== undefined) {\n // Default parameters to z.object({}) if not provided\n const parameters = tool.parameters ?? z.object({});\n\n // if parameters is not zod object, throw an error\n if (parameters instanceof ZodType && parameters._def.typeName !== 'ZodObject') {\n throw new Error('Tool parameters must be a Zod object schema (z.object(...))');\n }\n\n if (!(parameters instanceof ZodObject) && !(typeof parameters === 'object')) {\n throw new Error('Tool parameters must be a Zod object schema or a raw JSON schema');\n }\n\n return {\n type: 'function',\n description: tool.description,\n parameters,\n execute: tool.execute,\n [TOOL_SYMBOL]: true,\n [FUNCTION_TOOL_SYMBOL]: true,\n };\n }\n\n if (tool.config !== undefined && tool.id !== undefined) {\n return {\n type: 'provider-defined',\n id: tool.id,\n config: tool.config,\n [TOOL_SYMBOL]: true,\n [PROVIDER_DEFINED_TOOL_SYMBOL]: true,\n };\n }\n\n throw new Error('Invalid tool');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isTool(tool: any): tool is Tool {\n return tool && tool[TOOL_SYMBOL] === true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isFunctionTool(tool: any): tool is FunctionTool<any, any, any> {\n const isTool = tool && tool[TOOL_SYMBOL] === true;\n const isFunctionTool = tool[FUNCTION_TOOL_SYMBOL] === true;\n return isTool && isFunctionTool;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isProviderDefinedTool(tool: any): tool is ProviderDefinedTool {\n const isTool = tool && tool[TOOL_SYMBOL] === true;\n const isProviderDefinedTool = tool[PROVIDER_DEFINED_TOOL_SYMBOL] === true;\n return isTool && isProviderDefinedTool;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isToolError(error: any): error is ToolError {\n return error && error[TOOL_ERROR_SYMBOL] === true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isAgentHandoff(handoff: any): handoff is AgentHandoff {\n return handoff && handoff[HANDOFF_SYMBOL] === true;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,iBAAsC;AAOtC,MAAM,cAAc,OAAO,MAAM;AACjC,MAAM,uBAAuB,OAAO,eAAe;AACnD,MAAM,+BAA+B,OAAO,uBAAuB;AACnE,MAAM,oBAAoB,OAAO,YAAY;AAC7C,MAAM,iBAAiB,OAAO,SAAS;AA2BhC,MAAM,kBAAkB,MAAM;AAAA,EACnC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AAEb,WAAO,eAAe,MAAM,mBAAmB;AAAA,MAC7C,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAiBO,SAAS,QAAQ,SAAwD;AAC9E,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,SAAS,QAAQ;AAAA,IACjB,CAAC,cAAc,GAAG;AAAA,EACpB;AACF;AAyHO,SAAS,KAAKA,OAAgB;AACnC,MAAIA,MAAK,YAAY,QAAW;AAE9B,UAAM,aAAaA,MAAK,cAAc,aAAE,OAAO,CAAC,CAAC;AAGjD,QAAI,sBAAsB,sBAAW,WAAW,KAAK,aAAa,aAAa;AAC7E,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AAEA,QAAI,EAAE,sBAAsB,yBAAc,EAAE,OAAO,eAAe,WAAW;AAC3E,YAAM,IAAI,MAAM,kEAAkE;AAAA,IACpF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAaA,MAAK;AAAA,MAClB;AAAA,MACA,SAASA,MAAK;AAAA,MACd,CAAC,WAAW,GAAG;AAAA,MACf,CAAC,oBAAoB,GAAG;AAAA,IAC1B;AAAA,EACF;AAEA,MAAIA,MAAK,WAAW,UAAaA,MAAK,OAAO,QAAW;AACtD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAIA,MAAK;AAAA,MACT,QAAQA,MAAK;AAAA,MACb,CAAC,WAAW,GAAG;AAAA,MACf,CAAC,4BAA4B,GAAG;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,cAAc;AAChC;AAGO,SAAS,OAAOA,OAAyB;AAC9C,SAAOA,SAAQA,MAAK,WAAW,MAAM;AACvC;AAGO,SAAS,eAAeA,OAAgD;AAC7E,QAAMC,UAASD,SAAQA,MAAK,WAAW,MAAM;AAC7C,QAAME,kBAAiBF,MAAK,oBAAoB,MAAM;AACtD,SAAOC,WAAUC;AACnB;AAGO,SAAS,sBAAsBF,OAAwC;AAC5E,QAAMC,UAASD,SAAQA,MAAK,WAAW,MAAM;AAC7C,QAAMG,yBAAwBH,MAAK,4BAA4B,MAAM;AACrE,SAAOC,WAAUE;AACnB;AAGO,SAAS,YAAY,OAAgC;AAC1D,SAAO,SAAS,MAAM,iBAAiB,MAAM;AAC/C;AAGO,SAAS,eAAeC,UAAuC;AACpE,SAAOA,YAAWA,SAAQ,cAAc,MAAM;AAChD;","names":["tool","isTool","isFunctionTool","isProviderDefinedTool","handoff"]}
@@ -0,0 +1,125 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ import { ZodObject } from 'zod';
3
+ import type { Agent } from '../voice/agent.js';
4
+ import type { RunContext, UnknownUserData } from '../voice/run_context.js';
5
+ declare const TOOL_SYMBOL: unique symbol;
6
+ declare const FUNCTION_TOOL_SYMBOL: unique symbol;
7
+ declare const PROVIDER_DEFINED_TOOL_SYMBOL: unique symbol;
8
+ declare const HANDOFF_SYMBOL: unique symbol;
9
+ export type JSONValue = null | string | number | boolean | JSONObject | JSONArray;
10
+ export type JSONArray = JSONValue[];
11
+ export type JSONObject = {
12
+ [key: string]: JSONValue;
13
+ };
14
+ export type ToolInputSchema<T extends JSONObject> = ZodObject<any, any, any, T, T> | JSONSchema7;
15
+ export type ToolType = 'function' | 'provider-defined';
16
+ export type ToolChoice = 'auto' | 'none' | 'required' | {
17
+ type: 'function';
18
+ function: {
19
+ name: string;
20
+ };
21
+ };
22
+ export declare class ToolError extends Error {
23
+ constructor(message: string);
24
+ }
25
+ export interface AgentHandoff {
26
+ /**
27
+ * The agent to handoff to.
28
+ */
29
+ agent: Agent;
30
+ /**
31
+ * The return value of the tool.
32
+ */
33
+ returns?: any;
34
+ [HANDOFF_SYMBOL]: true;
35
+ }
36
+ export declare function handoff(options: {
37
+ agent: Agent;
38
+ returns?: any;
39
+ }): AgentHandoff;
40
+ export interface ToolOptions<UserData = UnknownUserData> {
41
+ /**
42
+ * RunContext for the current agent session.
43
+ */
44
+ ctx: RunContext<UserData>;
45
+ /**
46
+ * The ID of the tool call.
47
+ */
48
+ toolCallId: string;
49
+ /**
50
+ * An optional abort signal that indicates that the overall operation should be aborted.
51
+ */
52
+ abortSignal?: AbortSignal;
53
+ }
54
+ export type ToolExecuteFunction<Parameters extends JSONObject, UserData = UnknownUserData, Result = unknown> = (args: Parameters, opts: ToolOptions<UserData>) => Promise<Result>;
55
+ export interface Tool {
56
+ /**
57
+ * The type of the tool.
58
+ * @internal Either user-defined core tool or provider-defined tool.
59
+ */
60
+ type: ToolType;
61
+ [TOOL_SYMBOL]: true;
62
+ }
63
+ export interface ProviderDefinedTool extends Tool {
64
+ type: 'provider-defined';
65
+ /**
66
+ * The ID of the tool.
67
+ */
68
+ id: string;
69
+ /**
70
+ * The configuration of the tool.
71
+ */
72
+ config: Record<string, unknown>;
73
+ [PROVIDER_DEFINED_TOOL_SYMBOL]: true;
74
+ }
75
+ export interface FunctionTool<Parameters extends JSONObject, UserData = UnknownUserData, Result = unknown> extends Tool {
76
+ type: 'function';
77
+ /**
78
+ * The description of the tool. Will be used by the language model to decide whether to use the tool.
79
+ */
80
+ description: string;
81
+ /**
82
+ * The schema of the input that the tool expects. The language model will use this to generate the input.
83
+ * It is also used to validate the output of the language model.
84
+ * Use descriptions to make the input understandable for the language model.
85
+ */
86
+ parameters: ToolInputSchema<Parameters>;
87
+ /**
88
+ * An async function that is called with the arguments from the tool call and produces a result.
89
+ * It also carries context about current session, user-defined data, and the tool call id, etc.
90
+ */
91
+ execute: ToolExecuteFunction<Parameters, UserData, Result>;
92
+ [FUNCTION_TOOL_SYMBOL]: true;
93
+ }
94
+ export type ToolContext<UserData = UnknownUserData> = {
95
+ [name: string]: FunctionTool<any, UserData, any>;
96
+ };
97
+ /**
98
+ * Create a function tool.
99
+ *
100
+ * @param description - The description of the tool.
101
+ * @param parameters - The schema of the input that the tool expects. If not provided, defaults to z.object({}).
102
+ * @param execute - The function that is called with the arguments from the tool call and produces a result.
103
+ */
104
+ export declare function tool<Parameters extends JSONObject = Record<string, never>, UserData = UnknownUserData, Result = unknown>({ description, parameters, execute, }: {
105
+ description: string;
106
+ parameters?: ToolInputSchema<Parameters>;
107
+ execute: ToolExecuteFunction<Parameters, UserData, Result>;
108
+ }): FunctionTool<Parameters, UserData, Result>;
109
+ /**
110
+ * Create a provider-defined tool.
111
+ *
112
+ * @param id - The ID of the tool.
113
+ * @param config - The configuration of the tool.
114
+ */
115
+ export declare function tool({ id, config, }: {
116
+ id: string;
117
+ config: Record<string, unknown>;
118
+ }): ProviderDefinedTool;
119
+ export declare function isTool(tool: any): tool is Tool;
120
+ export declare function isFunctionTool(tool: any): tool is FunctionTool<any, any, any>;
121
+ export declare function isProviderDefinedTool(tool: any): tool is ProviderDefinedTool;
122
+ export declare function isToolError(error: any): error is ToolError;
123
+ export declare function isAgentHandoff(handoff: any): handoff is AgentHandoff;
124
+ export {};
125
+ //# sourceMappingURL=tool_context.d.ts.map
@@ -0,0 +1,125 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ import { ZodObject } from 'zod';
3
+ import type { Agent } from '../voice/agent.js';
4
+ import type { RunContext, UnknownUserData } from '../voice/run_context.js';
5
+ declare const TOOL_SYMBOL: unique symbol;
6
+ declare const FUNCTION_TOOL_SYMBOL: unique symbol;
7
+ declare const PROVIDER_DEFINED_TOOL_SYMBOL: unique symbol;
8
+ declare const HANDOFF_SYMBOL: unique symbol;
9
+ export type JSONValue = null | string | number | boolean | JSONObject | JSONArray;
10
+ export type JSONArray = JSONValue[];
11
+ export type JSONObject = {
12
+ [key: string]: JSONValue;
13
+ };
14
+ export type ToolInputSchema<T extends JSONObject> = ZodObject<any, any, any, T, T> | JSONSchema7;
15
+ export type ToolType = 'function' | 'provider-defined';
16
+ export type ToolChoice = 'auto' | 'none' | 'required' | {
17
+ type: 'function';
18
+ function: {
19
+ name: string;
20
+ };
21
+ };
22
+ export declare class ToolError extends Error {
23
+ constructor(message: string);
24
+ }
25
+ export interface AgentHandoff {
26
+ /**
27
+ * The agent to handoff to.
28
+ */
29
+ agent: Agent;
30
+ /**
31
+ * The return value of the tool.
32
+ */
33
+ returns?: any;
34
+ [HANDOFF_SYMBOL]: true;
35
+ }
36
+ export declare function handoff(options: {
37
+ agent: Agent;
38
+ returns?: any;
39
+ }): AgentHandoff;
40
+ export interface ToolOptions<UserData = UnknownUserData> {
41
+ /**
42
+ * RunContext for the current agent session.
43
+ */
44
+ ctx: RunContext<UserData>;
45
+ /**
46
+ * The ID of the tool call.
47
+ */
48
+ toolCallId: string;
49
+ /**
50
+ * An optional abort signal that indicates that the overall operation should be aborted.
51
+ */
52
+ abortSignal?: AbortSignal;
53
+ }
54
+ export type ToolExecuteFunction<Parameters extends JSONObject, UserData = UnknownUserData, Result = unknown> = (args: Parameters, opts: ToolOptions<UserData>) => Promise<Result>;
55
+ export interface Tool {
56
+ /**
57
+ * The type of the tool.
58
+ * @internal Either user-defined core tool or provider-defined tool.
59
+ */
60
+ type: ToolType;
61
+ [TOOL_SYMBOL]: true;
62
+ }
63
+ export interface ProviderDefinedTool extends Tool {
64
+ type: 'provider-defined';
65
+ /**
66
+ * The ID of the tool.
67
+ */
68
+ id: string;
69
+ /**
70
+ * The configuration of the tool.
71
+ */
72
+ config: Record<string, unknown>;
73
+ [PROVIDER_DEFINED_TOOL_SYMBOL]: true;
74
+ }
75
+ export interface FunctionTool<Parameters extends JSONObject, UserData = UnknownUserData, Result = unknown> extends Tool {
76
+ type: 'function';
77
+ /**
78
+ * The description of the tool. Will be used by the language model to decide whether to use the tool.
79
+ */
80
+ description: string;
81
+ /**
82
+ * The schema of the input that the tool expects. The language model will use this to generate the input.
83
+ * It is also used to validate the output of the language model.
84
+ * Use descriptions to make the input understandable for the language model.
85
+ */
86
+ parameters: ToolInputSchema<Parameters>;
87
+ /**
88
+ * An async function that is called with the arguments from the tool call and produces a result.
89
+ * It also carries context about current session, user-defined data, and the tool call id, etc.
90
+ */
91
+ execute: ToolExecuteFunction<Parameters, UserData, Result>;
92
+ [FUNCTION_TOOL_SYMBOL]: true;
93
+ }
94
+ export type ToolContext<UserData = UnknownUserData> = {
95
+ [name: string]: FunctionTool<any, UserData, any>;
96
+ };
97
+ /**
98
+ * Create a function tool.
99
+ *
100
+ * @param description - The description of the tool.
101
+ * @param parameters - The schema of the input that the tool expects. If not provided, defaults to z.object({}).
102
+ * @param execute - The function that is called with the arguments from the tool call and produces a result.
103
+ */
104
+ export declare function tool<Parameters extends JSONObject = Record<string, never>, UserData = UnknownUserData, Result = unknown>({ description, parameters, execute, }: {
105
+ description: string;
106
+ parameters?: ToolInputSchema<Parameters>;
107
+ execute: ToolExecuteFunction<Parameters, UserData, Result>;
108
+ }): FunctionTool<Parameters, UserData, Result>;
109
+ /**
110
+ * Create a provider-defined tool.
111
+ *
112
+ * @param id - The ID of the tool.
113
+ * @param config - The configuration of the tool.
114
+ */
115
+ export declare function tool({ id, config, }: {
116
+ id: string;
117
+ config: Record<string, unknown>;
118
+ }): ProviderDefinedTool;
119
+ export declare function isTool(tool: any): tool is Tool;
120
+ export declare function isFunctionTool(tool: any): tool is FunctionTool<any, any, any>;
121
+ export declare function isProviderDefinedTool(tool: any): tool is ProviderDefinedTool;
122
+ export declare function isToolError(error: any): error is ToolError;
123
+ export declare function isAgentHandoff(handoff: any): handoff is AgentHandoff;
124
+ export {};
125
+ //# sourceMappingURL=tool_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_context.d.ts","sourceRoot":"","sources":["../../src/llm/tool_context.ts"],"names":[],"mappings":"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"}