@livekit/agents 0.7.9 → 1.0.0-next.1

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 -3
  21. package/dist/constants.cjs.map +1 -1
  22. package/dist/constants.d.cts +2 -1
  23. package/dist/constants.d.ts +2 -1
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js +4 -2
  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 +97 -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 +98 -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 +100 -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 +101 -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 +156 -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 +156 -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 +298 -27
  333. package/dist/utils.cjs.map +1 -1
  334. package/dist/utils.d.cts +145 -9
  335. package/dist/utils.d.ts +145 -9
  336. package/dist/utils.d.ts.map +1 -1
  337. package/dist/utils.js +281 -26
  338. package/dist/utils.js.map +1 -1
  339. package/dist/utils.test.cjs +491 -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 +374 -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 +350 -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 +379 -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 +354 -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 +8 -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 -1
  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 +148 -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 +134 -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 +202 -21
  537. package/src/types.ts +42 -0
  538. package/src/utils.test.ts +658 -0
  539. package/src/utils.ts +402 -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 +473 -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 +477 -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 -486
  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 -461
  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 -859
  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 -837
  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 -592
  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 -1197
  627. package/src/pipeline/speech_handle.ts +0 -201
@@ -1,47 +0,0 @@
1
- import { z } from 'zod';
2
- /** Type reinforcement for the callable function's execute parameters. */
3
- export type inferParameters<P extends z.ZodTypeAny> = z.infer<P>;
4
- /** Raw OpenAI-adherent function parameters. */
5
- export type OpenAIFunctionParameters = {
6
- type: 'object';
7
- properties: {
8
- [id: string]: any;
9
- };
10
- required: string[];
11
- additionalProperties: boolean;
12
- };
13
- /** A definition for a function callable by the LLM. */
14
- export interface CallableFunction<P extends z.ZodTypeAny = any, R = any> {
15
- description: string;
16
- parameters: OpenAIFunctionParameters | P;
17
- execute: (args: inferParameters<P>) => PromiseLike<R>;
18
- }
19
- /** A function that has been called but is not yet running */
20
- export interface FunctionCallInfo<P extends z.ZodTypeAny = any, R = any> {
21
- name: string;
22
- func: CallableFunction<P, R>;
23
- toolCallId: string;
24
- rawParams: string;
25
- params: inferParameters<P>;
26
- task?: PromiseLike<CallableFunctionResult>;
27
- }
28
- /** The result of a ran FunctionCallInfo. */
29
- export interface CallableFunctionResult {
30
- name: string;
31
- toolCallId: string;
32
- result?: any;
33
- error?: any;
34
- }
35
- /** An object containing callable functions and their names */
36
- export type FunctionContext = {
37
- [name: string]: CallableFunction;
38
- };
39
- /** @internal */
40
- export declare const oaiParams: (p: z.AnyZodObject) => {
41
- type: "object";
42
- properties: Record<string, any>;
43
- required: string[];
44
- };
45
- /** @internal */
46
- export declare const oaiBuildFunctionInfo: (fncCtx: FunctionContext, toolCallId: string, fncName: string, rawArgs: string) => FunctionCallInfo;
47
- //# sourceMappingURL=function_context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function_context.d.ts","sourceRoot":"","sources":["../../src/llm/function_context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,yEAAyE;AACzE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,+CAA+C;AAC/C,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,wBAAwB,GAAG,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;CAC5C;AAED,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAClC,CAAC;AAeF,gBAAgB;AAChB,eAAO,MAAM,SAAS;;;;CAuDrB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,oBAAoB,WACvB,eAAe,cACX,MAAM,WACT,MAAM,WACN,MAAM,KACd,gBAaF,CAAC"}
@@ -1,78 +0,0 @@
1
- import { z } from "zod";
2
- const looksLikeInstanceof = (value, target) => {
3
- let current = value == null ? void 0 : value.constructor;
4
- do {
5
- if ((current == null ? void 0 : current.name) === target.name) return true;
6
- current = Object.getPrototypeOf(current);
7
- } while (current == null ? void 0 : current.name);
8
- return false;
9
- };
10
- const oaiParams = (p) => {
11
- const properties = {};
12
- const requiredProperties = [];
13
- const processZodType = (field) => {
14
- const isOptional = field instanceof z.ZodOptional;
15
- const nestedField = isOptional ? field._def.innerType : field;
16
- const description = field._def.description;
17
- if (looksLikeInstanceof(nestedField, z.ZodEnum)) {
18
- return {
19
- type: typeof nestedField._def.values[0],
20
- ...description && { description },
21
- enum: nestedField._def.values
22
- };
23
- } else if (looksLikeInstanceof(nestedField, z.ZodArray)) {
24
- const elementType = nestedField._def.type;
25
- return {
26
- type: "array",
27
- ...description && { description },
28
- items: processZodType(elementType)
29
- };
30
- } else if (looksLikeInstanceof(nestedField, z.ZodObject)) {
31
- const { properties: properties2, required } = oaiParams(nestedField);
32
- return {
33
- type: "object",
34
- ...description && { description },
35
- properties: properties2,
36
- required
37
- };
38
- } else {
39
- let type2 = nestedField._def.typeName.toLowerCase();
40
- type2 = type2.includes("zod") ? type2.substring(3) : type2;
41
- return {
42
- type: type2,
43
- ...description && { description }
44
- };
45
- }
46
- };
47
- for (const key in p.shape) {
48
- const field = p.shape[key];
49
- properties[key] = processZodType(field);
50
- if (!(field instanceof z.ZodOptional)) {
51
- requiredProperties.push(key);
52
- }
53
- }
54
- const type = "object";
55
- return {
56
- type,
57
- properties,
58
- required: requiredProperties
59
- };
60
- };
61
- const oaiBuildFunctionInfo = (fncCtx, toolCallId, fncName, rawArgs) => {
62
- const func = fncCtx[fncName];
63
- if (!func) {
64
- throw new Error(`AI function ${fncName} not found`);
65
- }
66
- return {
67
- name: fncName,
68
- func,
69
- toolCallId,
70
- rawParams: rawArgs,
71
- params: JSON.parse(rawArgs)
72
- };
73
- };
74
- export {
75
- oaiBuildFunctionInfo,
76
- oaiParams
77
- };
78
- //# sourceMappingURL=function_context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/llm/function_context.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { z } from 'zod';\n\n// heavily inspired by Vercel AI's `tool()`:\n// https://github.com/vercel/ai/blob/3b0983b/packages/ai/core/tool/tool.ts\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** Type reinforcement for the callable function's execute parameters. */\nexport type inferParameters<P extends z.ZodTypeAny> = z.infer<P>;\n\n/** Raw OpenAI-adherent function parameters. */\nexport type OpenAIFunctionParameters = {\n type: 'object';\n properties: { [id: string]: any };\n required: string[];\n additionalProperties: boolean;\n};\n\n/** A definition for a function callable by the LLM. */\nexport interface CallableFunction<P extends z.ZodTypeAny = any, R = any> {\n description: string;\n parameters: OpenAIFunctionParameters | P;\n execute: (args: inferParameters<P>) => PromiseLike<R>;\n}\n\n/** A function that has been called but is not yet running */\nexport interface FunctionCallInfo<P extends z.ZodTypeAny = any, R = any> {\n name: string;\n func: CallableFunction<P, R>;\n toolCallId: string;\n rawParams: string;\n params: inferParameters<P>;\n task?: PromiseLike<CallableFunctionResult>;\n}\n\n/** The result of a ran FunctionCallInfo. */\nexport interface CallableFunctionResult {\n name: string;\n toolCallId: string;\n result?: any;\n error?: any;\n}\n\n/** An object containing callable functions and their names */\nexport type FunctionContext = {\n [name: string]: CallableFunction;\n};\n\n// XXX: Zod is victim to the dual-package hazard. this is a hacky sorta-fix\n// until Zod v4.0.0 is released.\n// https://github.com/colinhacks/zod/issues/2241#issuecomment-2142688925\nconst looksLikeInstanceof = <T>(value: unknown, target: new (...args: any[]) => T): value is T => {\n let current = value?.constructor;\n do {\n if (current?.name === target.name) return true;\n // eslint-disable-next-line @typescript-eslint/ban-types\n current = Object.getPrototypeOf(current) as Function;\n } while (current?.name);\n return false;\n};\n\n/** @internal */\nexport const oaiParams = (p: z.AnyZodObject) => {\n const properties: Record<string, any> = {};\n const requiredProperties: string[] = [];\n\n const processZodType = (field: z.ZodTypeAny): any => {\n const isOptional = field instanceof z.ZodOptional;\n const nestedField = isOptional ? field._def.innerType : field;\n const description = field._def.description;\n\n if (looksLikeInstanceof(nestedField, z.ZodEnum)) {\n return {\n type: typeof nestedField._def.values[0],\n ...(description && { description }),\n enum: nestedField._def.values,\n };\n } else if (looksLikeInstanceof(nestedField, z.ZodArray)) {\n const elementType = nestedField._def.type;\n return {\n type: 'array',\n ...(description && { description }),\n items: processZodType(elementType),\n };\n } else if (looksLikeInstanceof(nestedField, z.ZodObject)) {\n const { properties, required } = oaiParams(nestedField);\n return {\n type: 'object',\n ...(description && { description }),\n properties,\n required,\n };\n } else {\n let type = nestedField._def.typeName.toLowerCase();\n type = type.includes('zod') ? type.substring(3) : type;\n return {\n type,\n ...(description && { description }),\n };\n }\n };\n\n for (const key in p.shape) {\n const field = p.shape[key];\n properties[key] = processZodType(field);\n\n if (!(field instanceof z.ZodOptional)) {\n requiredProperties.push(key);\n }\n }\n\n const type = 'object' as const;\n return {\n type,\n properties,\n required: requiredProperties,\n };\n};\n\n/** @internal */\nexport const oaiBuildFunctionInfo = (\n fncCtx: FunctionContext,\n toolCallId: string,\n fncName: string,\n rawArgs: string,\n): FunctionCallInfo => {\n const func = fncCtx[fncName];\n if (!func) {\n throw new Error(`AI function ${fncName} not found`);\n }\n\n return {\n name: fncName,\n func,\n toolCallId,\n rawParams: rawArgs,\n params: JSON.parse(rawArgs),\n };\n};\n"],"mappings":"AAGA,SAAS,SAAS;AAmDlB,MAAM,sBAAsB,CAAI,OAAgB,WAAkD;AAChG,MAAI,UAAU,+BAAO;AACrB,KAAG;AACD,SAAI,mCAAS,UAAS,OAAO,KAAM,QAAO;AAE1C,cAAU,OAAO,eAAe,OAAO;AAAA,EACzC,SAAS,mCAAS;AAClB,SAAO;AACT;AAGO,MAAM,YAAY,CAAC,MAAsB;AAC9C,QAAM,aAAkC,CAAC;AACzC,QAAM,qBAA+B,CAAC;AAEtC,QAAM,iBAAiB,CAAC,UAA6B;AACnD,UAAM,aAAa,iBAAiB,EAAE;AACtC,UAAM,cAAc,aAAa,MAAM,KAAK,YAAY;AACxD,UAAM,cAAc,MAAM,KAAK;AAE/B,QAAI,oBAAoB,aAAa,EAAE,OAAO,GAAG;AAC/C,aAAO;AAAA,QACL,MAAM,OAAO,YAAY,KAAK,OAAO,CAAC;AAAA,QACtC,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,MAAM,YAAY,KAAK;AAAA,MACzB;AAAA,IACF,WAAW,oBAAoB,aAAa,EAAE,QAAQ,GAAG;AACvD,YAAM,cAAc,YAAY,KAAK;AACrC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,eAAe,WAAW;AAAA,MACnC;AAAA,IACF,WAAW,oBAAoB,aAAa,EAAE,SAAS,GAAG;AACxD,YAAM,EAAE,YAAAA,aAAY,SAAS,IAAI,UAAU,WAAW;AACtD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,YAAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAIC,QAAO,YAAY,KAAK,SAAS,YAAY;AACjD,MAAAA,QAAOA,MAAK,SAAS,KAAK,IAAIA,MAAK,UAAU,CAAC,IAAIA;AAClD,aAAO;AAAA,QACL,MAAAA;AAAA,QACA,GAAI,eAAe,EAAE,YAAY;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,EAAE,OAAO;AACzB,UAAM,QAAQ,EAAE,MAAM,GAAG;AACzB,eAAW,GAAG,IAAI,eAAe,KAAK;AAEtC,QAAI,EAAE,iBAAiB,EAAE,cAAc;AACrC,yBAAmB,KAAK,GAAG;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,OAAO;AACb,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAGO,MAAM,uBAAuB,CAClC,QACA,YACA,SACA,YACqB;AACrB,QAAM,OAAO,OAAO,OAAO;AAC3B,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,eAAe,OAAO,YAAY;AAAA,EACpD;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,QAAQ,KAAK,MAAM,OAAO;AAAA,EAC5B;AACF;","names":["properties","type"]}
@@ -1,218 +0,0 @@
1
- "use strict";
2
- var import_vitest = require("vitest");
3
- var import_zod = require("zod");
4
- var import_function_context = require("./function_context.cjs");
5
- (0, import_vitest.describe)("function_context", () => {
6
- (0, import_vitest.describe)("oaiParams", () => {
7
- (0, import_vitest.it)("should handle basic object schema", () => {
8
- const schema = import_zod.z.object({
9
- name: import_zod.z.string().describe("The user name"),
10
- age: import_zod.z.number().describe("The user age")
11
- });
12
- const result = (0, import_function_context.oaiParams)(schema);
13
- (0, import_vitest.expect)(result).toEqual({
14
- type: "object",
15
- properties: {
16
- name: {
17
- type: "string",
18
- description: "The user name"
19
- },
20
- age: {
21
- type: "number",
22
- description: "The user age"
23
- }
24
- },
25
- required: ["name", "age"]
26
- });
27
- });
28
- (0, import_vitest.it)("should handle enum fields", () => {
29
- const schema = import_zod.z.object({
30
- color: import_zod.z.enum(["red", "blue", "green"]).describe("Choose a color")
31
- });
32
- const result = (0, import_function_context.oaiParams)(schema);
33
- (0, import_vitest.expect)(result).toEqual({
34
- type: "object",
35
- properties: {
36
- color: {
37
- type: "string",
38
- description: "Choose a color",
39
- enum: ["red", "blue", "green"]
40
- }
41
- },
42
- required: ["color"]
43
- });
44
- });
45
- (0, import_vitest.it)("should handle array fields", () => {
46
- const schema = import_zod.z.object({
47
- tags: import_zod.z.array(import_zod.z.string()).describe("List of tags")
48
- });
49
- const result = (0, import_function_context.oaiParams)(schema);
50
- (0, import_vitest.expect)(result).toEqual({
51
- type: "object",
52
- properties: {
53
- tags: {
54
- type: "array",
55
- description: "List of tags",
56
- items: {
57
- type: "string"
58
- }
59
- }
60
- },
61
- required: ["tags"]
62
- });
63
- });
64
- (0, import_vitest.it)("should handle array of enums", () => {
65
- const schema = import_zod.z.object({
66
- colors: import_zod.z.array(import_zod.z.enum(["red", "blue", "green"])).describe("List of colors")
67
- });
68
- const result = (0, import_function_context.oaiParams)(schema);
69
- (0, import_vitest.expect)(result).toEqual({
70
- type: "object",
71
- properties: {
72
- colors: {
73
- type: "array",
74
- description: "List of colors",
75
- items: {
76
- type: "string",
77
- enum: ["red", "blue", "green"]
78
- }
79
- }
80
- },
81
- required: ["colors"]
82
- });
83
- });
84
- (0, import_vitest.it)("should handle optional fields", () => {
85
- const schema = import_zod.z.object({
86
- name: import_zod.z.string().describe("The user name"),
87
- age: import_zod.z.number().optional().describe("The user age")
88
- });
89
- const result = (0, import_function_context.oaiParams)(schema);
90
- (0, import_vitest.expect)(result).toEqual({
91
- type: "object",
92
- properties: {
93
- name: {
94
- type: "string",
95
- description: "The user name"
96
- },
97
- age: {
98
- type: "number",
99
- description: "The user age"
100
- }
101
- },
102
- required: ["name"]
103
- // age should not be required
104
- });
105
- });
106
- (0, import_vitest.it)("should handle fields without descriptions", () => {
107
- const schema = import_zod.z.object({
108
- name: import_zod.z.string(),
109
- age: import_zod.z.number()
110
- });
111
- const result = (0, import_function_context.oaiParams)(schema);
112
- (0, import_vitest.expect)(result).toEqual({
113
- type: "object",
114
- properties: {
115
- name: {
116
- type: "string",
117
- description: void 0
118
- },
119
- age: {
120
- type: "number",
121
- description: void 0
122
- }
123
- },
124
- required: ["name", "age"]
125
- });
126
- });
127
- });
128
- (0, import_vitest.describe)("CallableFunction type", () => {
129
- (0, import_vitest.it)("should properly type a callable function", async () => {
130
- const schema = import_zod.z.object({
131
- name: import_zod.z.string().describe("The user name"),
132
- age: import_zod.z.number().describe("The user age")
133
- });
134
- const testFunction = {
135
- description: "Test function",
136
- parameters: schema,
137
- execute: async (args) => {
138
- return `${args.name} is ${args.age} years old`;
139
- }
140
- };
141
- const result = await testFunction.execute({ name: "John", age: 30 });
142
- (0, import_vitest.expect)(result).toBe("John is 30 years old");
143
- });
144
- (0, import_vitest.it)("should handle async execution", async () => {
145
- const schema = import_zod.z.object({
146
- delay: import_zod.z.number().describe("Delay in milliseconds")
147
- });
148
- const testFunction = {
149
- description: "Async test function",
150
- parameters: schema,
151
- execute: async (args) => {
152
- await new Promise((resolve) => setTimeout(resolve, args.delay));
153
- return args.delay;
154
- }
155
- };
156
- const start = Date.now();
157
- const result = await testFunction.execute({ delay: 100 });
158
- const duration = Date.now() - start;
159
- (0, import_vitest.expect)(result).toBe(100);
160
- (0, import_vitest.expect)(duration).toBeGreaterThanOrEqual(95);
161
- });
162
- (0, import_vitest.describe)("nested array support", () => {
163
- (0, import_vitest.it)("should handle nested array fields", () => {
164
- const schema = import_zod.z.object({
165
- items: import_zod.z.array(
166
- import_zod.z.object({
167
- name: import_zod.z.string().describe("the item name"),
168
- modifiers: import_zod.z.array(
169
- import_zod.z.object({
170
- modifier_name: import_zod.z.string(),
171
- modifier_value: import_zod.z.string()
172
- })
173
- ).describe("list of the modifiers applied on this item, such as size")
174
- })
175
- )
176
- });
177
- const result = (0, import_function_context.oaiParams)(schema);
178
- (0, import_vitest.expect)(result).toEqual({
179
- type: "object",
180
- properties: {
181
- items: {
182
- type: "array",
183
- description: void 0,
184
- items: {
185
- type: "object",
186
- properties: {
187
- name: {
188
- type: "string",
189
- description: "the item name"
190
- },
191
- modifiers: {
192
- type: "array",
193
- description: "list of the modifiers applied on this item, such as size",
194
- items: {
195
- type: "object",
196
- properties: {
197
- modifier_name: {
198
- type: "string"
199
- },
200
- modifier_value: {
201
- type: "string"
202
- }
203
- },
204
- required: ["modifier_name", "modifier_value"]
205
- }
206
- }
207
- },
208
- required: ["name", "modifiers"]
209
- }
210
- }
211
- },
212
- required: ["items"]
213
- });
214
- });
215
- });
216
- });
217
- });
218
- //# sourceMappingURL=function_context.test.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/llm/function_context.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport { z } from 'zod';\nimport type { CallableFunction } from './function_context.js';\nimport { oaiParams } from './function_context.js';\n\ndescribe('function_context', () => {\n describe('oaiParams', () => {\n it('should handle basic object schema', () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().describe('The user age'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The user name',\n },\n age: {\n type: 'number',\n description: 'The user age',\n },\n },\n required: ['name', 'age'],\n });\n });\n\n it('should handle enum fields', () => {\n const schema = z.object({\n color: z.enum(['red', 'blue', 'green']).describe('Choose a color'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n color: {\n type: 'string',\n description: 'Choose a color',\n enum: ['red', 'blue', 'green'],\n },\n },\n required: ['color'],\n });\n });\n\n it('should handle array fields', () => {\n const schema = z.object({\n tags: z.array(z.string()).describe('List of tags'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n tags: {\n type: 'array',\n description: 'List of tags',\n items: {\n type: 'string',\n },\n },\n },\n required: ['tags'],\n });\n });\n\n it('should handle array of enums', () => {\n const schema = z.object({\n colors: z.array(z.enum(['red', 'blue', 'green'])).describe('List of colors'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n colors: {\n type: 'array',\n description: 'List of colors',\n items: {\n type: 'string',\n enum: ['red', 'blue', 'green'],\n },\n },\n },\n required: ['colors'],\n });\n });\n\n it('should handle optional fields', () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().optional().describe('The user age'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The user name',\n },\n age: {\n type: 'number',\n description: 'The user age',\n },\n },\n required: ['name'], // age should not be required\n });\n });\n\n it('should handle fields without descriptions', () => {\n const schema = z.object({\n name: z.string(),\n age: z.number(),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: undefined,\n },\n age: {\n type: 'number',\n description: undefined,\n },\n },\n required: ['name', 'age'],\n });\n });\n });\n\n describe('CallableFunction type', () => {\n it('should properly type a callable function', async () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().describe('The user age'),\n });\n\n const testFunction: CallableFunction<typeof schema, string> = {\n description: 'Test function',\n parameters: schema,\n execute: async (args: z.infer<typeof schema>) => {\n // TypeScript should recognize args.name and args.age\n return `${args.name} is ${args.age} years old`;\n },\n };\n\n const result = await testFunction.execute({ name: 'John', age: 30 });\n expect(result).toBe('John is 30 years old');\n });\n\n it('should handle async execution', async () => {\n const schema = z.object({\n delay: z.number().describe('Delay in milliseconds'),\n });\n\n const testFunction: CallableFunction<typeof schema, number> = {\n description: 'Async test function',\n parameters: schema,\n execute: async (args: z.infer<typeof schema>) => {\n await new Promise((resolve) => setTimeout(resolve, args.delay));\n return args.delay;\n },\n };\n\n const start = Date.now();\n const result = await testFunction.execute({ delay: 100 });\n const duration = Date.now() - start;\n\n expect(result).toBe(100);\n expect(duration).toBeGreaterThanOrEqual(95); // Allow for small timing variations\n });\n\n describe('nested array support', () => {\n it('should handle nested array fields', () => {\n const schema = z.object({\n items: z.array(\n z.object({\n name: z.string().describe('the item name'),\n modifiers: z\n .array(\n z.object({\n modifier_name: z.string(),\n modifier_value: z.string(),\n }),\n )\n .describe('list of the modifiers applied on this item, such as size'),\n }),\n ),\n });\n const result = oaiParams(schema);\n expect(result).toEqual({\n type: 'object',\n properties: {\n items: {\n type: 'array',\n description: undefined,\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'the item name',\n },\n modifiers: {\n type: 'array',\n description: 'list of the modifiers applied on this item, such as size',\n items: {\n type: 'object',\n properties: {\n modifier_name: {\n type: 'string',\n },\n modifier_value: {\n type: 'string',\n },\n },\n required: ['modifier_name', 'modifier_value'],\n },\n },\n },\n required: ['name', 'modifiers'],\n },\n },\n },\n required: ['items'],\n });\n });\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -1,217 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { z } from "zod";
3
- import { oaiParams } from "./function_context.js";
4
- describe("function_context", () => {
5
- describe("oaiParams", () => {
6
- it("should handle basic object schema", () => {
7
- const schema = z.object({
8
- name: z.string().describe("The user name"),
9
- age: z.number().describe("The user age")
10
- });
11
- const result = oaiParams(schema);
12
- expect(result).toEqual({
13
- type: "object",
14
- properties: {
15
- name: {
16
- type: "string",
17
- description: "The user name"
18
- },
19
- age: {
20
- type: "number",
21
- description: "The user age"
22
- }
23
- },
24
- required: ["name", "age"]
25
- });
26
- });
27
- it("should handle enum fields", () => {
28
- const schema = z.object({
29
- color: z.enum(["red", "blue", "green"]).describe("Choose a color")
30
- });
31
- const result = oaiParams(schema);
32
- expect(result).toEqual({
33
- type: "object",
34
- properties: {
35
- color: {
36
- type: "string",
37
- description: "Choose a color",
38
- enum: ["red", "blue", "green"]
39
- }
40
- },
41
- required: ["color"]
42
- });
43
- });
44
- it("should handle array fields", () => {
45
- const schema = z.object({
46
- tags: z.array(z.string()).describe("List of tags")
47
- });
48
- const result = oaiParams(schema);
49
- expect(result).toEqual({
50
- type: "object",
51
- properties: {
52
- tags: {
53
- type: "array",
54
- description: "List of tags",
55
- items: {
56
- type: "string"
57
- }
58
- }
59
- },
60
- required: ["tags"]
61
- });
62
- });
63
- it("should handle array of enums", () => {
64
- const schema = z.object({
65
- colors: z.array(z.enum(["red", "blue", "green"])).describe("List of colors")
66
- });
67
- const result = oaiParams(schema);
68
- expect(result).toEqual({
69
- type: "object",
70
- properties: {
71
- colors: {
72
- type: "array",
73
- description: "List of colors",
74
- items: {
75
- type: "string",
76
- enum: ["red", "blue", "green"]
77
- }
78
- }
79
- },
80
- required: ["colors"]
81
- });
82
- });
83
- it("should handle optional fields", () => {
84
- const schema = z.object({
85
- name: z.string().describe("The user name"),
86
- age: z.number().optional().describe("The user age")
87
- });
88
- const result = oaiParams(schema);
89
- expect(result).toEqual({
90
- type: "object",
91
- properties: {
92
- name: {
93
- type: "string",
94
- description: "The user name"
95
- },
96
- age: {
97
- type: "number",
98
- description: "The user age"
99
- }
100
- },
101
- required: ["name"]
102
- // age should not be required
103
- });
104
- });
105
- it("should handle fields without descriptions", () => {
106
- const schema = z.object({
107
- name: z.string(),
108
- age: z.number()
109
- });
110
- const result = oaiParams(schema);
111
- expect(result).toEqual({
112
- type: "object",
113
- properties: {
114
- name: {
115
- type: "string",
116
- description: void 0
117
- },
118
- age: {
119
- type: "number",
120
- description: void 0
121
- }
122
- },
123
- required: ["name", "age"]
124
- });
125
- });
126
- });
127
- describe("CallableFunction type", () => {
128
- it("should properly type a callable function", async () => {
129
- const schema = z.object({
130
- name: z.string().describe("The user name"),
131
- age: z.number().describe("The user age")
132
- });
133
- const testFunction = {
134
- description: "Test function",
135
- parameters: schema,
136
- execute: async (args) => {
137
- return `${args.name} is ${args.age} years old`;
138
- }
139
- };
140
- const result = await testFunction.execute({ name: "John", age: 30 });
141
- expect(result).toBe("John is 30 years old");
142
- });
143
- it("should handle async execution", async () => {
144
- const schema = z.object({
145
- delay: z.number().describe("Delay in milliseconds")
146
- });
147
- const testFunction = {
148
- description: "Async test function",
149
- parameters: schema,
150
- execute: async (args) => {
151
- await new Promise((resolve) => setTimeout(resolve, args.delay));
152
- return args.delay;
153
- }
154
- };
155
- const start = Date.now();
156
- const result = await testFunction.execute({ delay: 100 });
157
- const duration = Date.now() - start;
158
- expect(result).toBe(100);
159
- expect(duration).toBeGreaterThanOrEqual(95);
160
- });
161
- describe("nested array support", () => {
162
- it("should handle nested array fields", () => {
163
- const schema = z.object({
164
- items: z.array(
165
- z.object({
166
- name: z.string().describe("the item name"),
167
- modifiers: z.array(
168
- z.object({
169
- modifier_name: z.string(),
170
- modifier_value: z.string()
171
- })
172
- ).describe("list of the modifiers applied on this item, such as size")
173
- })
174
- )
175
- });
176
- const result = oaiParams(schema);
177
- expect(result).toEqual({
178
- type: "object",
179
- properties: {
180
- items: {
181
- type: "array",
182
- description: void 0,
183
- items: {
184
- type: "object",
185
- properties: {
186
- name: {
187
- type: "string",
188
- description: "the item name"
189
- },
190
- modifiers: {
191
- type: "array",
192
- description: "list of the modifiers applied on this item, such as size",
193
- items: {
194
- type: "object",
195
- properties: {
196
- modifier_name: {
197
- type: "string"
198
- },
199
- modifier_value: {
200
- type: "string"
201
- }
202
- },
203
- required: ["modifier_name", "modifier_value"]
204
- }
205
- }
206
- },
207
- required: ["name", "modifiers"]
208
- }
209
- }
210
- },
211
- required: ["items"]
212
- });
213
- });
214
- });
215
- });
216
- });
217
- //# sourceMappingURL=function_context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/llm/function_context.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport { z } from 'zod';\nimport type { CallableFunction } from './function_context.js';\nimport { oaiParams } from './function_context.js';\n\ndescribe('function_context', () => {\n describe('oaiParams', () => {\n it('should handle basic object schema', () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().describe('The user age'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The user name',\n },\n age: {\n type: 'number',\n description: 'The user age',\n },\n },\n required: ['name', 'age'],\n });\n });\n\n it('should handle enum fields', () => {\n const schema = z.object({\n color: z.enum(['red', 'blue', 'green']).describe('Choose a color'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n color: {\n type: 'string',\n description: 'Choose a color',\n enum: ['red', 'blue', 'green'],\n },\n },\n required: ['color'],\n });\n });\n\n it('should handle array fields', () => {\n const schema = z.object({\n tags: z.array(z.string()).describe('List of tags'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n tags: {\n type: 'array',\n description: 'List of tags',\n items: {\n type: 'string',\n },\n },\n },\n required: ['tags'],\n });\n });\n\n it('should handle array of enums', () => {\n const schema = z.object({\n colors: z.array(z.enum(['red', 'blue', 'green'])).describe('List of colors'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n colors: {\n type: 'array',\n description: 'List of colors',\n items: {\n type: 'string',\n enum: ['red', 'blue', 'green'],\n },\n },\n },\n required: ['colors'],\n });\n });\n\n it('should handle optional fields', () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().optional().describe('The user age'),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The user name',\n },\n age: {\n type: 'number',\n description: 'The user age',\n },\n },\n required: ['name'], // age should not be required\n });\n });\n\n it('should handle fields without descriptions', () => {\n const schema = z.object({\n name: z.string(),\n age: z.number(),\n });\n\n const result = oaiParams(schema);\n\n expect(result).toEqual({\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: undefined,\n },\n age: {\n type: 'number',\n description: undefined,\n },\n },\n required: ['name', 'age'],\n });\n });\n });\n\n describe('CallableFunction type', () => {\n it('should properly type a callable function', async () => {\n const schema = z.object({\n name: z.string().describe('The user name'),\n age: z.number().describe('The user age'),\n });\n\n const testFunction: CallableFunction<typeof schema, string> = {\n description: 'Test function',\n parameters: schema,\n execute: async (args: z.infer<typeof schema>) => {\n // TypeScript should recognize args.name and args.age\n return `${args.name} is ${args.age} years old`;\n },\n };\n\n const result = await testFunction.execute({ name: 'John', age: 30 });\n expect(result).toBe('John is 30 years old');\n });\n\n it('should handle async execution', async () => {\n const schema = z.object({\n delay: z.number().describe('Delay in milliseconds'),\n });\n\n const testFunction: CallableFunction<typeof schema, number> = {\n description: 'Async test function',\n parameters: schema,\n execute: async (args: z.infer<typeof schema>) => {\n await new Promise((resolve) => setTimeout(resolve, args.delay));\n return args.delay;\n },\n };\n\n const start = Date.now();\n const result = await testFunction.execute({ delay: 100 });\n const duration = Date.now() - start;\n\n expect(result).toBe(100);\n expect(duration).toBeGreaterThanOrEqual(95); // Allow for small timing variations\n });\n\n describe('nested array support', () => {\n it('should handle nested array fields', () => {\n const schema = z.object({\n items: z.array(\n z.object({\n name: z.string().describe('the item name'),\n modifiers: z\n .array(\n z.object({\n modifier_name: z.string(),\n modifier_value: z.string(),\n }),\n )\n .describe('list of the modifiers applied on this item, such as size'),\n }),\n ),\n });\n const result = oaiParams(schema);\n expect(result).toEqual({\n type: 'object',\n properties: {\n items: {\n type: 'array',\n description: undefined,\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'the item name',\n },\n modifiers: {\n type: 'array',\n description: 'list of the modifiers applied on this item, such as size',\n items: {\n type: 'object',\n properties: {\n modifier_name: {\n type: 'string',\n },\n modifier_value: {\n type: 'string',\n },\n },\n required: ['modifier_name', 'modifier_value'],\n },\n },\n },\n required: ['name', 'modifiers'],\n },\n },\n },\n required: ['items'],\n });\n });\n });\n });\n});\n"],"mappings":"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","names":[]}