@pipedog/core 0.0.0 → 0.2.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 (736) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/engine.d.ts +60 -0
  42. package/dist/audio/resamplers/engine.js +89 -0
  43. package/dist/audio/resamplers/index.d.ts +2 -0
  44. package/dist/audio/resamplers/index.js +8 -0
  45. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  46. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  47. package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
  48. package/dist/audio/resamplers/sinc_engine.js +235 -0
  49. package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
  50. package/dist/audio/resamplers/soxr_resampler.js +79 -0
  51. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
  52. package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
  53. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  54. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  55. package/dist/audio/turn/index.d.ts +2 -0
  56. package/dist/audio/turn/index.js +8 -0
  57. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  58. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  59. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  60. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  61. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  62. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
  63. package/dist/audio/utils.d.ts +224 -0
  64. package/dist/audio/utils.js +634 -0
  65. package/dist/audio/vad/data/index.d.ts +2 -0
  66. package/dist/audio/vad/data/index.js +8 -0
  67. package/dist/audio/vad/index.d.ts +2 -0
  68. package/dist/audio/vad/index.js +8 -0
  69. package/dist/audio/vad/vad_analyzer.d.ts +134 -0
  70. package/dist/audio/vad/vad_analyzer.js +249 -0
  71. package/dist/audio/vad/vad_controller.d.ts +143 -0
  72. package/dist/audio/vad/vad_controller.js +228 -0
  73. package/dist/audio/volume.d.ts +38 -0
  74. package/dist/audio/volume.js +75 -0
  75. package/dist/bus/adapters/base.d.ts +35 -0
  76. package/dist/bus/adapters/base.js +19 -0
  77. package/dist/bus/adapters/index.d.ts +10 -0
  78. package/dist/bus/adapters/index.js +15 -0
  79. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  80. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  81. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  82. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  83. package/dist/bus/bridge_processor.d.ts +111 -0
  84. package/dist/bus/bridge_processor.js +166 -0
  85. package/dist/bus/bus.d.ts +110 -0
  86. package/dist/bus/bus.js +200 -0
  87. package/dist/bus/index.d.ts +22 -0
  88. package/dist/bus/index.js +27 -0
  89. package/dist/bus/local/async_queue.d.ts +12 -0
  90. package/dist/bus/local/async_queue.js +21 -0
  91. package/dist/bus/local/index.d.ts +3 -0
  92. package/dist/bus/local/index.js +8 -0
  93. package/dist/bus/messages.d.ts +378 -0
  94. package/dist/bus/messages.js +357 -0
  95. package/dist/bus/network/index.d.ts +16 -0
  96. package/dist/bus/network/index.js +21 -0
  97. package/dist/bus/queue.d.ts +27 -0
  98. package/dist/bus/queue.js +51 -0
  99. package/dist/bus/serializers/base.d.ts +25 -0
  100. package/dist/bus/serializers/base.js +14 -0
  101. package/dist/bus/serializers/index.d.ts +9 -0
  102. package/dist/bus/serializers/index.js +14 -0
  103. package/dist/bus/serializers/json.d.ts +77 -0
  104. package/dist/bus/serializers/json.js +367 -0
  105. package/dist/bus/subscriber.d.ts +46 -0
  106. package/dist/bus/subscriber.js +27 -0
  107. package/dist/bus/ui/index.d.ts +3 -0
  108. package/dist/bus/ui/index.js +8 -0
  109. package/dist/bus/ui/messages.d.ts +186 -0
  110. package/dist/bus/ui/messages.js +171 -0
  111. package/dist/classifiers/base_classifier.d.ts +263 -0
  112. package/dist/classifiers/base_classifier.js +346 -0
  113. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  114. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  115. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  116. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  117. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  118. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  119. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  120. package/dist/classifiers/cloudflare/index.js +8 -0
  121. package/dist/classifiers/http_client.d.ts +70 -0
  122. package/dist/classifiers/http_client.js +161 -0
  123. package/dist/classifiers/index.d.ts +2 -0
  124. package/dist/classifiers/index.js +8 -0
  125. package/dist/classifiers/jev/classifier.d.ts +8 -0
  126. package/dist/classifiers/jev/classifier.js +13 -0
  127. package/dist/classifiers/jev/client.d.ts +8 -0
  128. package/dist/classifiers/jev/client.js +13 -0
  129. package/dist/classifiers/jev/index.d.ts +2 -0
  130. package/dist/classifiers/jev/index.js +8 -0
  131. package/dist/classifiers/llm/classifier.d.ts +72 -0
  132. package/dist/classifiers/llm/classifier.js +304 -0
  133. package/dist/classifiers/llm/index.d.ts +2 -0
  134. package/dist/classifiers/llm/index.js +8 -0
  135. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  136. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  137. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  138. package/dist/classifiers/openai/decisions/client.js +234 -0
  139. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  140. package/dist/classifiers/openai/decisions/index.js +8 -0
  141. package/dist/classifiers/openai/index.d.ts +2 -0
  142. package/dist/classifiers/openai/index.js +8 -0
  143. package/dist/classifiers/typesafe/index.d.ts +2 -0
  144. package/dist/classifiers/typesafe/index.js +8 -0
  145. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  146. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  147. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  148. package/dist/classifiers/typesafe/jev/client.js +233 -0
  149. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  150. package/dist/classifiers/typesafe/jev/index.js +8 -0
  151. package/dist/clocks/base_clock.d.ts +13 -0
  152. package/dist/clocks/base_clock.js +14 -0
  153. package/dist/clocks/index.d.ts +2 -0
  154. package/dist/clocks/index.js +8 -0
  155. package/dist/clocks/system_clock.d.ts +15 -0
  156. package/dist/clocks/system_clock.js +25 -0
  157. package/dist/frames/frames.d.ts +2533 -0
  158. package/dist/frames/frames.js +2485 -0
  159. package/dist/frames/index.d.ts +2 -0
  160. package/dist/frames/index.js +8 -0
  161. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  162. package/dist/frames/protobufs/frames_pb2.js +466 -0
  163. package/dist/index.d.ts +11 -0
  164. package/dist/index.js +56 -0
  165. package/dist/metrics/index.d.ts +2 -0
  166. package/dist/metrics/index.js +8 -0
  167. package/dist/metrics/metrics.d.ts +276 -0
  168. package/dist/metrics/metrics.js +254 -0
  169. package/dist/observers/base_observer.d.ts +173 -0
  170. package/dist/observers/base_observer.js +151 -0
  171. package/dist/observers/error_observer.d.ts +75 -0
  172. package/dist/observers/error_observer.js +87 -0
  173. package/dist/observers/function_call_observer.d.ts +157 -0
  174. package/dist/observers/function_call_observer.js +222 -0
  175. package/dist/observers/index.d.ts +2 -0
  176. package/dist/observers/index.js +8 -0
  177. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  178. package/dist/observers/loggers/debug_log_observer.js +228 -0
  179. package/dist/observers/loggers/index.d.ts +2 -0
  180. package/dist/observers/loggers/index.js +8 -0
  181. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  182. package/dist/observers/loggers/llm_log_observer.js +110 -0
  183. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  184. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  185. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  186. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  187. package/dist/observers/service_metrics_observer.d.ts +168 -0
  188. package/dist/observers/service_metrics_observer.js +236 -0
  189. package/dist/observers/speaking_observer.d.ts +104 -0
  190. package/dist/observers/speaking_observer.js +150 -0
  191. package/dist/observers/startup_timing_observer.d.ts +221 -0
  192. package/dist/observers/startup_timing_observer.js +365 -0
  193. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  194. package/dist/observers/turn_tracking_observer.js +189 -0
  195. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  196. package/dist/observers/user_bot_latency_observer.js +974 -0
  197. package/dist/pipeline/base_pipeline.d.ts +49 -0
  198. package/dist/pipeline/base_pipeline.js +101 -0
  199. package/dist/pipeline/capabilities.d.ts +76 -0
  200. package/dist/pipeline/capabilities.js +97 -0
  201. package/dist/pipeline/index.d.ts +2 -0
  202. package/dist/pipeline/index.js +8 -0
  203. package/dist/pipeline/job_context.d.ts +317 -0
  204. package/dist/pipeline/job_context.js +450 -0
  205. package/dist/pipeline/job_decorator.d.ts +54 -0
  206. package/dist/pipeline/job_decorator.js +92 -0
  207. package/dist/pipeline/llm_switcher.d.ts +84 -0
  208. package/dist/pipeline/llm_switcher.js +107 -0
  209. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  210. package/dist/pipeline/llm_with_backend.js +806 -0
  211. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  212. package/dist/pipeline/parallel_pipeline.js +200 -0
  213. package/dist/pipeline/pipeline.d.ts +126 -0
  214. package/dist/pipeline/pipeline.js +196 -0
  215. package/dist/pipeline/service_switcher.d.ts +287 -0
  216. package/dist/pipeline/service_switcher.js +509 -0
  217. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  218. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  219. package/dist/pipeline/worker.d.ts +821 -0
  220. package/dist/pipeline/worker.js +1656 -0
  221. package/dist/pipeline/worker_observer.d.ts +131 -0
  222. package/dist/pipeline/worker_observer.js +274 -0
  223. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  224. package/dist/pipeline/worker_ready_decorator.js +76 -0
  225. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  226. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  227. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  228. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  229. package/dist/processors/aggregators/gated.d.ts +43 -0
  230. package/dist/processors/aggregators/gated.js +86 -0
  231. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  232. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  233. package/dist/processors/aggregators/index.d.ts +2 -0
  234. package/dist/processors/aggregators/index.js +8 -0
  235. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  236. package/dist/processors/aggregators/llm_context.js +580 -0
  237. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  238. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  239. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  240. package/dist/processors/aggregators/llm_response.js +71 -0
  241. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  242. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  243. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  244. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  245. package/dist/processors/aggregators/sentence.d.ts +39 -0
  246. package/dist/processors/aggregators/sentence.js +69 -0
  247. package/dist/processors/async_generator.d.ts +42 -0
  248. package/dist/processors/async_generator.js +76 -0
  249. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  250. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  251. package/dist/processors/audio/index.d.ts +2 -0
  252. package/dist/processors/audio/index.js +8 -0
  253. package/dist/processors/audio/vad_processor.d.ts +67 -0
  254. package/dist/processors/audio/vad_processor.js +103 -0
  255. package/dist/processors/consumer_processor.d.ts +49 -0
  256. package/dist/processors/consumer_processor.js +85 -0
  257. package/dist/processors/filters/frame_filter.d.ts +39 -0
  258. package/dist/processors/filters/frame_filter.js +52 -0
  259. package/dist/processors/filters/function_filter.d.ts +59 -0
  260. package/dist/processors/filters/function_filter.js +78 -0
  261. package/dist/processors/filters/identity_filter.d.ts +33 -0
  262. package/dist/processors/filters/identity_filter.js +37 -0
  263. package/dist/processors/filters/index.d.ts +2 -0
  264. package/dist/processors/filters/index.js +8 -0
  265. package/dist/processors/filters/null_filter.d.ts +34 -0
  266. package/dist/processors/filters/null_filter.js +47 -0
  267. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  268. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  269. package/dist/processors/frame_processor.d.ts +360 -0
  270. package/dist/processors/frame_processor.js +932 -0
  271. package/dist/processors/frameworks/index.d.ts +2 -0
  272. package/dist/processors/frameworks/index.js +8 -0
  273. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  274. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  275. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  276. package/dist/processors/frameworks/rtvi/index.js +11 -0
  277. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  278. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  279. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  280. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  281. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  282. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  283. package/dist/processors/idle_frame_processor.d.ts +44 -0
  284. package/dist/processors/idle_frame_processor.js +86 -0
  285. package/dist/processors/index.d.ts +2 -0
  286. package/dist/processors/index.js +8 -0
  287. package/dist/processors/logger.d.ts +42 -0
  288. package/dist/processors/logger.js +87 -0
  289. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  290. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  291. package/dist/processors/metrics/index.d.ts +2 -0
  292. package/dist/processors/metrics/index.js +8 -0
  293. package/dist/processors/producer_processor.d.ts +68 -0
  294. package/dist/processors/producer_processor.js +78 -0
  295. package/dist/processors/text_transformer.d.ts +30 -0
  296. package/dist/processors/text_transformer.js +48 -0
  297. package/dist/registry/index.d.ts +3 -0
  298. package/dist/registry/index.js +8 -0
  299. package/dist/registry/registry.d.ts +69 -0
  300. package/dist/registry/registry.js +149 -0
  301. package/dist/registry/types.d.ts +47 -0
  302. package/dist/registry/types.js +39 -0
  303. package/dist/serializers/base_serializer.d.ts +94 -0
  304. package/dist/serializers/base_serializer.js +82 -0
  305. package/dist/serializers/index.d.ts +2 -0
  306. package/dist/serializers/index.js +8 -0
  307. package/dist/services/ai_service.d.ts +145 -0
  308. package/dist/services/ai_service.js +262 -0
  309. package/dist/services/anthropic/index.d.ts +2 -0
  310. package/dist/services/anthropic/index.js +7 -0
  311. package/dist/services/assemblyai/index.d.ts +2 -0
  312. package/dist/services/assemblyai/index.js +7 -0
  313. package/dist/services/asyncai/index.d.ts +2 -0
  314. package/dist/services/asyncai/index.js +7 -0
  315. package/dist/services/aws/index.d.ts +2 -0
  316. package/dist/services/aws/index.js +7 -0
  317. package/dist/services/azure/index.d.ts +2 -0
  318. package/dist/services/azure/index.js +7 -0
  319. package/dist/services/baseten/index.d.ts +2 -0
  320. package/dist/services/baseten/index.js +7 -0
  321. package/dist/services/bland/index.d.ts +2 -0
  322. package/dist/services/bland/index.js +7 -0
  323. package/dist/services/camb/index.d.ts +2 -0
  324. package/dist/services/camb/index.js +7 -0
  325. package/dist/services/cartesia/index.d.ts +2 -0
  326. package/dist/services/cartesia/index.js +7 -0
  327. package/dist/services/cerebras/index.d.ts +2 -0
  328. package/dist/services/cerebras/index.js +7 -0
  329. package/dist/services/crusoe/index.d.ts +2 -0
  330. package/dist/services/crusoe/index.js +7 -0
  331. package/dist/services/deepgram/index.d.ts +2 -0
  332. package/dist/services/deepgram/index.js +7 -0
  333. package/dist/services/deepseek/index.d.ts +2 -0
  334. package/dist/services/deepseek/index.js +7 -0
  335. package/dist/services/elevenlabs/index.d.ts +2 -0
  336. package/dist/services/elevenlabs/index.js +7 -0
  337. package/dist/services/fal/index.d.ts +2 -0
  338. package/dist/services/fal/index.js +7 -0
  339. package/dist/services/fireworks/index.d.ts +2 -0
  340. package/dist/services/fireworks/index.js +7 -0
  341. package/dist/services/fish/index.d.ts +2 -0
  342. package/dist/services/fish/index.js +7 -0
  343. package/dist/services/funasr/index.d.ts +3 -0
  344. package/dist/services/funasr/index.js +8 -0
  345. package/dist/services/gladia/index.d.ts +2 -0
  346. package/dist/services/gladia/index.js +7 -0
  347. package/dist/services/google/index.d.ts +2 -0
  348. package/dist/services/google/index.js +7 -0
  349. package/dist/services/gradium/index.d.ts +2 -0
  350. package/dist/services/gradium/index.js +7 -0
  351. package/dist/services/grok/index.d.ts +2 -0
  352. package/dist/services/grok/index.js +7 -0
  353. package/dist/services/groq/index.d.ts +2 -0
  354. package/dist/services/groq/index.js +7 -0
  355. package/dist/services/heygen/index.d.ts +2 -0
  356. package/dist/services/heygen/index.js +7 -0
  357. package/dist/services/hume/index.d.ts +2 -0
  358. package/dist/services/hume/index.js +7 -0
  359. package/dist/services/image_service.d.ts +52 -0
  360. package/dist/services/image_service.js +60 -0
  361. package/dist/services/inception/index.d.ts +2 -0
  362. package/dist/services/inception/index.js +7 -0
  363. package/dist/services/index.d.ts +2 -0
  364. package/dist/services/index.js +8 -0
  365. package/dist/services/inworld/index.d.ts +2 -0
  366. package/dist/services/inworld/index.js +7 -0
  367. package/dist/services/keenable/index.d.ts +2 -0
  368. package/dist/services/keenable/index.js +7 -0
  369. package/dist/services/kokoro/index.d.ts +2 -0
  370. package/dist/services/kokoro/index.js +7 -0
  371. package/dist/services/llm_service.d.ts +1106 -0
  372. package/dist/services/llm_service.js +2231 -0
  373. package/dist/services/mem0/index.d.ts +2 -0
  374. package/dist/services/mem0/index.js +7 -0
  375. package/dist/services/meta/index.d.ts +2 -0
  376. package/dist/services/meta/index.js +7 -0
  377. package/dist/services/minimax/index.d.ts +2 -0
  378. package/dist/services/minimax/index.js +7 -0
  379. package/dist/services/mistral/index.d.ts +2 -0
  380. package/dist/services/mistral/index.js +7 -0
  381. package/dist/services/moondream/index.d.ts +2 -0
  382. package/dist/services/moondream/index.js +7 -0
  383. package/dist/services/moonshine/index.d.ts +2 -0
  384. package/dist/services/moonshine/index.js +7 -0
  385. package/dist/services/nebius/index.d.ts +2 -0
  386. package/dist/services/nebius/index.js +7 -0
  387. package/dist/services/neuphonic/index.d.ts +2 -0
  388. package/dist/services/neuphonic/index.js +7 -0
  389. package/dist/services/novita/index.d.ts +2 -0
  390. package/dist/services/novita/index.js +7 -0
  391. package/dist/services/nvidia/index.d.ts +2 -0
  392. package/dist/services/nvidia/index.js +11 -0
  393. package/dist/services/ollama/index.d.ts +2 -0
  394. package/dist/services/ollama/index.js +7 -0
  395. package/dist/services/openai/index.d.ts +2 -0
  396. package/dist/services/openai/index.js +7 -0
  397. package/dist/services/openclaw/index.d.ts +14 -0
  398. package/dist/services/openclaw/index.js +19 -0
  399. package/dist/services/openrouter/index.d.ts +2 -0
  400. package/dist/services/openrouter/index.js +7 -0
  401. package/dist/services/perplexity/index.d.ts +2 -0
  402. package/dist/services/perplexity/index.js +7 -0
  403. package/dist/services/piper/index.d.ts +2 -0
  404. package/dist/services/piper/index.js +7 -0
  405. package/dist/services/pocket_tts/index.d.ts +2 -0
  406. package/dist/services/pocket_tts/index.js +7 -0
  407. package/dist/services/qwen/index.d.ts +2 -0
  408. package/dist/services/qwen/index.js +7 -0
  409. package/dist/services/resembleai/index.d.ts +2 -0
  410. package/dist/services/resembleai/index.js +7 -0
  411. package/dist/services/rime/index.d.ts +2 -0
  412. package/dist/services/rime/index.js +7 -0
  413. package/dist/services/sambanova/index.d.ts +2 -0
  414. package/dist/services/sambanova/index.js +7 -0
  415. package/dist/services/sarvam/index.d.ts +2 -0
  416. package/dist/services/sarvam/index.js +7 -0
  417. package/dist/services/settings.d.ts +356 -0
  418. package/dist/services/settings.js +437 -0
  419. package/dist/services/simli/index.d.ts +2 -0
  420. package/dist/services/simli/index.js +7 -0
  421. package/dist/services/smallest/index.d.ts +2 -0
  422. package/dist/services/smallest/index.js +7 -0
  423. package/dist/services/soniox/index.d.ts +2 -0
  424. package/dist/services/soniox/index.js +7 -0
  425. package/dist/services/speechify/index.d.ts +2 -0
  426. package/dist/services/speechify/index.js +7 -0
  427. package/dist/services/speechmatics/index.d.ts +2 -0
  428. package/dist/services/speechmatics/index.js +7 -0
  429. package/dist/services/stt_latency.d.ts +62 -0
  430. package/dist/services/stt_latency.js +71 -0
  431. package/dist/services/stt_service.d.ts +601 -0
  432. package/dist/services/stt_service.js +1044 -0
  433. package/dist/services/tavus/index.d.ts +2 -0
  434. package/dist/services/tavus/index.js +7 -0
  435. package/dist/services/together/index.d.ts +2 -0
  436. package/dist/services/together/index.js +7 -0
  437. package/dist/services/tts_service.d.ts +909 -0
  438. package/dist/services/tts_service.js +2018 -0
  439. package/dist/services/ultravox/index.d.ts +2 -0
  440. package/dist/services/ultravox/index.js +9 -0
  441. package/dist/services/vision_service.d.ts +56 -0
  442. package/dist/services/vision_service.js +62 -0
  443. package/dist/services/websocket_service.d.ts +213 -0
  444. package/dist/services/websocket_service.js +654 -0
  445. package/dist/services/whisper/index.d.ts +2 -0
  446. package/dist/services/whisper/index.js +9 -0
  447. package/dist/services/xai/index.d.ts +2 -0
  448. package/dist/services/xai/index.js +9 -0
  449. package/dist/services/xtts/index.d.ts +2 -0
  450. package/dist/services/xtts/index.js +9 -0
  451. package/dist/tests/index.d.ts +2 -0
  452. package/dist/tests/index.js +8 -0
  453. package/dist/tests/utils.d.ts +123 -0
  454. package/dist/tests/utils.js +212 -0
  455. package/dist/transcriptions/index.d.ts +2 -0
  456. package/dist/transcriptions/index.js +8 -0
  457. package/dist/transcriptions/language.d.ts +376 -0
  458. package/dist/transcriptions/language.js +543 -0
  459. package/dist/transports/base_input.d.ts +149 -0
  460. package/dist/transports/base_input.js +338 -0
  461. package/dist/transports/base_output.d.ts +432 -0
  462. package/dist/transports/base_output.js +1231 -0
  463. package/dist/transports/base_transport.d.ts +223 -0
  464. package/dist/transports/base_transport.js +167 -0
  465. package/dist/transports/daily/index.d.ts +2 -0
  466. package/dist/transports/daily/index.js +9 -0
  467. package/dist/transports/heygen/index.d.ts +2 -0
  468. package/dist/transports/heygen/index.js +9 -0
  469. package/dist/transports/index.d.ts +2 -0
  470. package/dist/transports/index.js +8 -0
  471. package/dist/transports/lemonslice/index.d.ts +2 -0
  472. package/dist/transports/lemonslice/index.js +9 -0
  473. package/dist/transports/livekit/index.d.ts +2 -0
  474. package/dist/transports/livekit/index.js +9 -0
  475. package/dist/transports/local/index.d.ts +2 -0
  476. package/dist/transports/local/index.js +9 -0
  477. package/dist/transports/moq/index.d.ts +2 -0
  478. package/dist/transports/moq/index.js +9 -0
  479. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  480. package/dist/transports/smallwebrtc/index.js +9 -0
  481. package/dist/transports/tavus/index.d.ts +2 -0
  482. package/dist/transports/tavus/index.js +9 -0
  483. package/dist/transports/video_in_sampler.d.ts +157 -0
  484. package/dist/transports/video_in_sampler.js +258 -0
  485. package/dist/transports/vonage/index.d.ts +2 -0
  486. package/dist/transports/vonage/index.js +9 -0
  487. package/dist/transports/websocket/index.d.ts +2 -0
  488. package/dist/transports/websocket/index.js +9 -0
  489. package/dist/transports/whatsapp/index.d.ts +2 -0
  490. package/dist/transports/whatsapp/index.js +9 -0
  491. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  492. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  493. package/dist/turns/empty_user_turn.d.ts +55 -0
  494. package/dist/turns/empty_user_turn.js +53 -0
  495. package/dist/turns/index.d.ts +2 -0
  496. package/dist/turns/index.js +8 -0
  497. package/dist/turns/speculation_gate.d.ts +169 -0
  498. package/dist/turns/speculation_gate.js +294 -0
  499. package/dist/turns/types.d.ts +33 -0
  500. package/dist/turns/types.js +35 -0
  501. package/dist/turns/user_idle_controller.d.ts +94 -0
  502. package/dist/turns/user_idle_controller.js +187 -0
  503. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  504. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  505. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  506. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  507. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  508. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  509. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  510. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  511. package/dist/turns/user_mute/index.d.ts +6 -0
  512. package/dist/turns/user_mute/index.js +11 -0
  513. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  514. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  515. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  516. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  517. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  518. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  519. package/dist/turns/user_start/index.d.ts +8 -0
  520. package/dist/turns/user_start/index.js +16 -0
  521. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  522. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  523. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  524. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  525. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  526. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  527. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  528. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  529. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  530. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  531. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  532. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  533. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  534. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  535. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  536. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  537. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  538. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  539. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  540. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  541. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  542. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  543. package/dist/turns/user_stop/index.d.ts +10 -0
  544. package/dist/turns/user_stop/index.js +15 -0
  545. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  546. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  547. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  548. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  549. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  550. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  551. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  552. package/dist/turns/user_turn_completion_mixin.js +591 -0
  553. package/dist/turns/user_turn_controller.d.ts +134 -0
  554. package/dist/turns/user_turn_controller.js +335 -0
  555. package/dist/turns/user_turn_processor.d.ts +87 -0
  556. package/dist/turns/user_turn_processor.js +180 -0
  557. package/dist/turns/user_turn_strategies.d.ts +187 -0
  558. package/dist/turns/user_turn_strategies.js +222 -0
  559. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  560. package/dist/utils/async_tool_cancellation.js +78 -0
  561. package/dist/utils/asyncio/index.d.ts +2 -0
  562. package/dist/utils/asyncio/index.js +7 -0
  563. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  564. package/dist/utils/asyncio/task_manager.js +105 -0
  565. package/dist/utils/base_object.d.ts +76 -0
  566. package/dist/utils/base_object.js +154 -0
  567. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  568. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  569. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  570. package/dist/utils/context/audio_context_manager.js +233 -0
  571. package/dist/utils/context/index.d.ts +2 -0
  572. package/dist/utils/context/index.js +7 -0
  573. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  574. package/dist/utils/context/llm_context_summarization.js +511 -0
  575. package/dist/utils/context/text_segment_map.d.ts +611 -0
  576. package/dist/utils/context/text_segment_map.js +1132 -0
  577. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  578. package/dist/utils/context/word_completion_tracker.js +441 -0
  579. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  580. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  581. package/dist/utils/deprecation.d.ts +28 -0
  582. package/dist/utils/deprecation.js +75 -0
  583. package/dist/utils/env.d.ts +38 -0
  584. package/dist/utils/env.js +62 -0
  585. package/dist/utils/errors.d.ts +75 -0
  586. package/dist/utils/errors.js +202 -0
  587. package/dist/utils/file_resolver.d.ts +126 -0
  588. package/dist/utils/file_resolver.js +314 -0
  589. package/dist/utils/file_storage.d.ts +115 -0
  590. package/dist/utils/file_storage.js +178 -0
  591. package/dist/utils/frame_queue.d.ts +36 -0
  592. package/dist/utils/frame_queue.js +66 -0
  593. package/dist/utils/http.d.ts +39 -0
  594. package/dist/utils/http.js +53 -0
  595. package/dist/utils/image.d.ts +14 -0
  596. package/dist/utils/image.js +63 -0
  597. package/dist/utils/index.d.ts +2 -0
  598. package/dist/utils/index.js +8 -0
  599. package/dist/utils/jpeg_encoder.d.ts +14 -0
  600. package/dist/utils/jpeg_encoder.js +315 -0
  601. package/dist/utils/log_config.d.ts +34 -0
  602. package/dist/utils/log_config.js +76 -0
  603. package/dist/utils/logger.d.ts +40 -0
  604. package/dist/utils/logger.js +91 -0
  605. package/dist/utils/mixin.d.ts +14 -0
  606. package/dist/utils/mixin.js +63 -0
  607. package/dist/utils/network.d.ts +73 -0
  608. package/dist/utils/network.js +90 -0
  609. package/dist/utils/security/allowed_origins.d.ts +16 -0
  610. package/dist/utils/security/allowed_origins.js +34 -0
  611. package/dist/utils/security/index.d.ts +2 -0
  612. package/dist/utils/security/index.js +7 -0
  613. package/dist/utils/security/redaction.d.ts +27 -0
  614. package/dist/utils/security/redaction.js +123 -0
  615. package/dist/utils/security/ssrf.d.ts +79 -0
  616. package/dist/utils/security/ssrf.js +327 -0
  617. package/dist/utils/shared.d.ts +35 -0
  618. package/dist/utils/shared.js +136 -0
  619. package/dist/utils/startup.d.ts +17 -0
  620. package/dist/utils/startup.js +130 -0
  621. package/dist/utils/string.d.ts +116 -0
  622. package/dist/utils/string.js +460 -0
  623. package/dist/utils/sync/base_notifier.d.ts +25 -0
  624. package/dist/utils/sync/base_notifier.js +16 -0
  625. package/dist/utils/sync/event_notifier.d.ts +38 -0
  626. package/dist/utils/sync/event_notifier.js +51 -0
  627. package/dist/utils/sync/index.d.ts +2 -0
  628. package/dist/utils/sync/index.js +7 -0
  629. package/dist/utils/text/alnum_utils.d.ts +109 -0
  630. package/dist/utils/text/alnum_utils.js +262 -0
  631. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  632. package/dist/utils/text/base_text_aggregator.js +102 -0
  633. package/dist/utils/text/base_text_filter.d.ts +54 -0
  634. package/dist/utils/text/base_text_filter.js +50 -0
  635. package/dist/utils/text/index.d.ts +2 -0
  636. package/dist/utils/text/index.js +7 -0
  637. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  638. package/dist/utils/text/markdown_text_filter.js +522 -0
  639. package/dist/utils/text/markup_utils.d.ts +54 -0
  640. package/dist/utils/text/markup_utils.js +156 -0
  641. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  642. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  643. package/dist/utils/text/phonemes.d.ts +60 -0
  644. package/dist/utils/text/phonemes.js +172 -0
  645. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  646. package/dist/utils/text/simple_text_aggregator.js +254 -0
  647. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  648. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  649. package/dist/utils/text/transforms/acronyms.d.ts +21 -0
  650. package/dist/utils/text/transforms/acronyms.js +31 -0
  651. package/dist/utils/text/transforms/currency.d.ts +16 -0
  652. package/dist/utils/text/transforms/currency.js +56 -0
  653. package/dist/utils/text/transforms/dates.d.ts +18 -0
  654. package/dist/utils/text/transforms/dates.js +102 -0
  655. package/dist/utils/text/transforms/email.d.ts +17 -0
  656. package/dist/utils/text/transforms/email.js +35 -0
  657. package/dist/utils/text/transforms/index.d.ts +37 -0
  658. package/dist/utils/text/transforms/index.js +42 -0
  659. package/dist/utils/text/transforms/numbers.d.ts +25 -0
  660. package/dist/utils/text/transforms/numbers.js +59 -0
  661. package/dist/utils/text/transforms/percentages.d.ts +16 -0
  662. package/dist/utils/text/transforms/percentages.js +32 -0
  663. package/dist/utils/text/transforms/phone.d.ts +21 -0
  664. package/dist/utils/text/transforms/phone.js +39 -0
  665. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  666. package/dist/utils/text/transforms/pronunciations.js +112 -0
  667. package/dist/utils/text/transforms/replacements.d.ts +39 -0
  668. package/dist/utils/text/transforms/replacements.js +46 -0
  669. package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
  670. package/dist/utils/text/transforms/strip_markdown.js +60 -0
  671. package/dist/utils/text/transforms/units.d.ts +22 -0
  672. package/dist/utils/text/transforms/units.js +81 -0
  673. package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
  674. package/dist/utils/text/transforms/voice_formatter.js +98 -0
  675. package/dist/utils/text/unicode_digits.d.ts +3 -0
  676. package/dist/utils/text/unicode_digits.js +34 -0
  677. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  678. package/dist/utils/text/word_timestamp_utils.js +52 -0
  679. package/dist/utils/time.d.ts +13 -0
  680. package/dist/utils/time.js +31 -0
  681. package/dist/utils/tracing/index.d.ts +3 -0
  682. package/dist/utils/tracing/index.js +8 -0
  683. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  684. package/dist/utils/tracing/service_attributes.js +434 -0
  685. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  686. package/dist/utils/tracing/service_decorators.js +1662 -0
  687. package/dist/utils/tracing/setup.d.ts +107 -0
  688. package/dist/utils/tracing/setup.js +160 -0
  689. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  690. package/dist/utils/tracing/tracing_context.js +97 -0
  691. package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
  692. package/dist/utils/tracing/turn_trace_observer.js +233 -0
  693. package/dist/utils/types.d.ts +80 -0
  694. package/dist/utils/types.js +108 -0
  695. package/dist/utils/utils.d.ts +5 -0
  696. package/dist/utils/utils.js +22 -0
  697. package/dist/utils/yaml.d.ts +179 -0
  698. package/dist/utils/yaml.js +556 -0
  699. package/dist/version.d.ts +3 -0
  700. package/dist/version.js +7 -0
  701. package/dist/workers/base_worker.d.ts +772 -0
  702. package/dist/workers/base_worker.js +1298 -0
  703. package/dist/workers/index.d.ts +2 -0
  704. package/dist/workers/index.js +8 -0
  705. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  706. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  707. package/dist/workers/llm/index.d.ts +6 -0
  708. package/dist/workers/llm/index.js +11 -0
  709. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  710. package/dist/workers/llm/llm_context_worker.js +72 -0
  711. package/dist/workers/llm/llm_worker.d.ts +180 -0
  712. package/dist/workers/llm/llm_worker.js +323 -0
  713. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  714. package/dist/workers/llm/tool_decorator.js +60 -0
  715. package/dist/workers/proxy/index.d.ts +3 -0
  716. package/dist/workers/proxy/index.js +9 -0
  717. package/dist/workers/proxy/websocket/client.d.ts +110 -0
  718. package/dist/workers/proxy/websocket/client.js +196 -0
  719. package/dist/workers/proxy/websocket/index.d.ts +3 -0
  720. package/dist/workers/proxy/websocket/index.js +10 -0
  721. package/dist/workers/runner.d.ts +268 -0
  722. package/dist/workers/runner.js +489 -0
  723. package/dist/workers/ui/index.d.ts +22 -0
  724. package/dist/workers/ui/index.js +27 -0
  725. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  726. package/dist/workers/ui/ui_event_decorator.js +75 -0
  727. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  728. package/dist/workers/ui/ui_job_context.js +17 -0
  729. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  730. package/dist/workers/ui/ui_prompts.js +41 -0
  731. package/dist/workers/ui/ui_tools.d.ts +32 -0
  732. package/dist/workers/ui/ui_tools.js +112 -0
  733. package/dist/workers/ui/ui_worker.d.ts +571 -0
  734. package/dist/workers/ui/ui_worker.js +1156 -0
  735. package/package.json +61 -3
  736. package/README.md +0 -5
@@ -0,0 +1,676 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/processors/frameworks/rtvi/processor.py
6
+ /**
7
+ * RTVIProcessor: main RTVI protocol processor.
8
+ *
9
+ * Porting notes:
10
+ * - Deprecated upstream APIs are not ported: the `transport` constructor
11
+ * option (ignored upstream) and `handleFunctionCall()` (superseded by
12
+ * `RTVIObserver`'s `llm-function-call-in-progress` events).
13
+ * - Pydantic models from `models.ts` are dumped to their wire form with
14
+ * `modelDump({ excludeNone })` and parsed with `Model.modelValidate(obj)`.
15
+ * - `ErrorFrame.fatal` is deprecated upstream and not ported, so RTVI `error`
16
+ * messages always carry `fatal: false`.
17
+ */
18
+ import { Queue, rethrowIfCancelled } from "@pipedog/asyncio";
19
+ import { CancelFrame, EndFrame, EndWorkerFrame, ErrorFrame, FunctionCallResultFrame, InputAudioRawFrame, InputDTMFFrame, InputTransportMessageFrame, InputTransportStartAudioStreamingFrame, LLMConfigureOutputFrame, LLMMessagesAppendFrame, OutputTransportMessageUrgentFrame, StartFrame, SystemFrame, UserFileRawFrame, UserImageRawFrame, } from "../../../frames/frames.js";
20
+ import { version as pipecatVersion } from "../../../index.js";
21
+ import { logger } from "../../../utils/logger.js";
22
+ import { FrameProcessor, } from "../../frame_processor.js";
23
+ import { RTVIClientMessageFrame, RTVISendTextFrame, RTVIUICancelJobGroupFrame, RTVIUIEventFrame, RTVIUISnapshotFrame, } from "./frames.js";
24
+ import * as RTVI from "./models.js";
25
+ import { RTVIObserver } from "./observer.js";
26
+ /**
27
+ * Whether `e` is a model validation error (pydantic's `ValidationError`
28
+ * upstream; a `ValidationError` or `ZodError` here).
29
+ */
30
+ export function isValidationError(e) {
31
+ return e instanceof Error && (e.name === "ValidationError" || e.name === "ZodError");
32
+ }
33
+ function errorMessage(e) {
34
+ return e instanceof Error ? e.message : String(e);
35
+ }
36
+ // Python's int(): optional sign, digits, surrounding whitespace allowed.
37
+ function parsePythonInt(value) {
38
+ if (!/^\s*[+-]?\d+\s*$/.test(value)) {
39
+ throw new RangeError(`invalid literal for int() with base 10: '${value}'`);
40
+ }
41
+ return Number.parseInt(value, 10);
42
+ }
43
+ function base64ToBytes(b64) {
44
+ const binary = atob(b64);
45
+ const bytes = new Uint8Array(binary.length);
46
+ for (let i = 0; i < binary.length; i++) {
47
+ bytes[i] = binary.charCodeAt(i);
48
+ }
49
+ return bytes;
50
+ }
51
+ /**
52
+ * Main processor for handling RTVI protocol messages and actions.
53
+ *
54
+ * This processor manages the RTVI protocol communication including
55
+ * client-server handshaking, configuration management, action execution, and
56
+ * message routing. It serves as the central hub for RTVI protocol operations.
57
+ *
58
+ * Event handlers available:
59
+ *
60
+ * - on_bot_started
61
+ * - on_client_ready
62
+ * - on_client_message: called with an `RTVI.ClientMessage`
63
+ * - on_ui_message: called with an `RTVI.UIEventMessage`,
64
+ * `RTVI.UISnapshotMessage` or `RTVI.UICancelJobGroupMessage`
65
+ */
66
+ export class RTVIProcessor extends FrameProcessor {
67
+ _botReady = false;
68
+ _clientReady = false;
69
+ _clientReadyId = "";
70
+ // Default to 0.0.0 to indicate unknown version.
71
+ _clientVersion = [0, 0, 0];
72
+ _llmSkipTts = false; // Keep in sync with llm_service.ts's configuration.
73
+ // A task to process incoming transport messages.
74
+ _messageTask = null;
75
+ _messageQueue;
76
+ /**
77
+ * Initialize the RTVI processor.
78
+ *
79
+ * @param options Options passed to the parent class.
80
+ */
81
+ constructor(options = {}) {
82
+ super(options);
83
+ this._registerEventHandler("on_bot_started");
84
+ this._registerEventHandler("on_client_ready");
85
+ this._registerEventHandler("on_client_message");
86
+ this._registerEventHandler("on_ui_message");
87
+ }
88
+ /**
89
+ * The negotiated client protocol version as [major, minor, patch].
90
+ *
91
+ * Defaults to [0, 0, 0] until the client sends a `client-ready` message.
92
+ */
93
+ get clientVersion() {
94
+ return this._clientVersion;
95
+ }
96
+ /**
97
+ * Creates a new RTVI Observer.
98
+ *
99
+ * @param options.params Settings to enable/disable specific messages.
100
+ * Other options are passed to the observer.
101
+ * @returns A new RTVI observer.
102
+ */
103
+ createRtviObserver(options = {}) {
104
+ return new RTVIObserver(this, options);
105
+ }
106
+ /** Mark the client as ready and trigger the ready event. */
107
+ async setClientReady() {
108
+ logger.debug(`${this}: client is ready`);
109
+ this._clientReady = true;
110
+ await this._callEventHandler("on_client_ready");
111
+ }
112
+ /**
113
+ * Mark the bot as ready and send the bot-ready message.
114
+ *
115
+ * @param about Optional information about the bot to include in the ready
116
+ * message. If left as null, the Pipecat library and version will be used.
117
+ */
118
+ async setBotReady(about = null) {
119
+ this._botReady = true;
120
+ await this._sendBotReady(about);
121
+ }
122
+ /** Send a bot interruption frame upstream. */
123
+ async interruptBot() {
124
+ await this.broadcastInterruption();
125
+ }
126
+ /** Send a server message to the client. */
127
+ async sendServerMessage(data) {
128
+ const message = new RTVI.ServerMessage({ data });
129
+ await this._sendServerMessage(message);
130
+ }
131
+ /** Send a server response for a given client message. */
132
+ async sendServerResponse(clientMsg, data) {
133
+ const message = new RTVI.ServerResponse({
134
+ id: clientMsg.msgId,
135
+ data: new RTVI.RawServerResponseData({ t: clientMsg.type, d: data }),
136
+ });
137
+ await this._sendServerMessage(message);
138
+ }
139
+ /** Send an error response for a given client message. */
140
+ async sendErrorResponse(clientMsg, error) {
141
+ await this._sendErrorResponse(clientMsg.msgId, error);
142
+ }
143
+ /**
144
+ * Send an error message to the client.
145
+ *
146
+ * @param error The error message to send.
147
+ */
148
+ async sendError(error) {
149
+ await this._sendErrorFrame(new ErrorFrame({ error }));
150
+ }
151
+ /** Push a transport message frame. */
152
+ async pushTransportMessage(model, excludeNone = true) {
153
+ const frame = new OutputTransportMessageUrgentFrame({
154
+ message: model.modelDump({ excludeNone }),
155
+ });
156
+ await this.pushFrame(frame);
157
+ }
158
+ /**
159
+ * Handle an incoming RTVI message.
160
+ *
161
+ * @param message The RTVI message to handle.
162
+ * @param userId Identifier for the user who sent it, if known.
163
+ */
164
+ async handleMessage(message, userId = null) {
165
+ await this._messageQueue.put([message, userId]);
166
+ }
167
+ /**
168
+ * Process incoming frames through the RTVI processor.
169
+ *
170
+ * @param frame The frame to process.
171
+ * @param direction The direction of frame flow.
172
+ */
173
+ async processFrame(frame, direction) {
174
+ await super.processFrame(frame, direction);
175
+ // Specific system frames
176
+ if (frame instanceof StartFrame) {
177
+ // Push StartFrame before start(), because we want StartFrame to be
178
+ // processed by every processor before any other frame is processed.
179
+ await this.pushFrame(frame, direction);
180
+ await this._start(frame);
181
+ }
182
+ else if (frame instanceof CancelFrame) {
183
+ await this._cancel(frame);
184
+ await this.pushFrame(frame, direction);
185
+ }
186
+ else if (frame instanceof ErrorFrame) {
187
+ await this._sendErrorFrame(frame);
188
+ await this.pushFrame(frame, direction);
189
+ }
190
+ else if (frame instanceof InputTransportMessageFrame) {
191
+ await this._handleTransportMessage(frame);
192
+ }
193
+ // All other system frames
194
+ else if (frame instanceof SystemFrame) {
195
+ await this.pushFrame(frame, direction);
196
+ }
197
+ // Control frames
198
+ else if (frame instanceof EndFrame) {
199
+ // Push EndFrame before stop(), because stop() waits on the task to
200
+ // finish and the task finishes when EndFrame is processed.
201
+ await this.pushFrame(frame, direction);
202
+ await this._stop(frame);
203
+ }
204
+ // Data frames
205
+ else if (frame instanceof LLMConfigureOutputFrame) {
206
+ this._llmSkipTts = frame.skipTts;
207
+ await this.pushFrame(frame, direction);
208
+ }
209
+ // Other frames
210
+ else {
211
+ await this.pushFrame(frame, direction);
212
+ }
213
+ }
214
+ /** Release resources held by the processor. */
215
+ async cleanup() {
216
+ await super.cleanup();
217
+ await this._cancelTasks();
218
+ }
219
+ /** Start the RTVI processor tasks. */
220
+ async _start(_frame) {
221
+ if (!this._messageTask) {
222
+ this._messageQueue = new Queue();
223
+ this._messageTask = this.createTask(() => this._messageTaskHandler(), "_messageTaskHandler");
224
+ }
225
+ await this._callEventHandler("on_bot_started");
226
+ }
227
+ /** Stop the RTVI processor tasks. */
228
+ async _stop(_frame) {
229
+ await this._cancelTasks();
230
+ }
231
+ /** Cancel the RTVI processor tasks. */
232
+ async _cancel(_frame) {
233
+ await this._cancelTasks();
234
+ }
235
+ /** Cancel all running tasks. */
236
+ async _cancelTasks() {
237
+ if (this._messageTask) {
238
+ await this.cancelTask(this._messageTask);
239
+ this._messageTask = null;
240
+ }
241
+ }
242
+ /** Handle incoming transport messages. */
243
+ async _messageTaskHandler() {
244
+ while (true) {
245
+ const [message, userId] = await this._messageQueue.get();
246
+ await this._handleMessage(message, userId);
247
+ this._messageQueue.taskDone();
248
+ }
249
+ }
250
+ /** Handle an incoming transport message frame. */
251
+ async _handleTransportMessage(frame) {
252
+ try {
253
+ const transportMessage = frame.message;
254
+ if (transportMessage.label !== RTVI.MESSAGE_LABEL) {
255
+ logger.warning(`Ignoring not RTVI message: ${JSON.stringify(transportMessage)}`);
256
+ return;
257
+ }
258
+ const message = RTVI.Message.modelValidate(transportMessage);
259
+ // Transports that know the sender, such as Daily and LiveKit, set it
260
+ // as `participantId` on their subclass of the frame.
261
+ const userId = frame.participantId ?? null;
262
+ await this._messageQueue.put([message, userId]);
263
+ }
264
+ catch (e) {
265
+ rethrowIfCancelled(e);
266
+ if (!isValidationError(e))
267
+ throw e;
268
+ await this.sendError(`Invalid RTVI transport message: ${errorMessage(e)}`);
269
+ logger.warning(`Invalid RTVI transport message: ${errorMessage(e)}`);
270
+ }
271
+ }
272
+ /** Handle a parsed RTVI message. */
273
+ async _handleMessage(message, userId = null) {
274
+ try {
275
+ switch (message.type) {
276
+ case "client-ready": {
277
+ let data = null;
278
+ const raw = (message.data ?? {});
279
+ const version = raw.version;
280
+ if (typeof version === "string") {
281
+ let about = new RTVI.AboutClientData({ library: "unknown" });
282
+ const aboutRaw = raw.about;
283
+ if (aboutRaw !== null && aboutRaw !== undefined) {
284
+ try {
285
+ about = RTVI.AboutClientData.modelValidate(aboutRaw);
286
+ }
287
+ catch (e) {
288
+ rethrowIfCancelled(e);
289
+ if (!isValidationError(e))
290
+ throw e;
291
+ logger.warning("Invalid 'about' data in client-ready message, ignoring.");
292
+ }
293
+ }
294
+ data = new RTVI.ClientReadyData({ version, about });
295
+ }
296
+ await this._handleClientReady(message.id, data);
297
+ break;
298
+ }
299
+ case "disconnect-bot":
300
+ await this.pushFrame(new EndWorkerFrame());
301
+ break;
302
+ case "client-message": {
303
+ const data = RTVI.RawClientMessageData.modelValidate(message.data);
304
+ await this._handleClientMessage(message.id, data);
305
+ break;
306
+ }
307
+ case "ui-event": {
308
+ const eventData = RTVI.UIEventData.modelValidate(message.data ?? {});
309
+ await this.pushFrame(new RTVIUIEventFrame({
310
+ msgId: message.id,
311
+ event: eventData.event,
312
+ payload: eventData.payload,
313
+ }));
314
+ await this._callEventHandler("on_ui_message", new RTVI.UIEventMessage({ id: message.id, data: eventData }));
315
+ break;
316
+ }
317
+ case "ui-snapshot": {
318
+ const snapshotData = RTVI.UISnapshotData.modelValidate(message.data ?? {});
319
+ await this.pushFrame(new RTVIUISnapshotFrame({ msgId: message.id, tree: snapshotData.tree }));
320
+ await this._callEventHandler("on_ui_message", new RTVI.UISnapshotMessage({ id: message.id, data: snapshotData }));
321
+ break;
322
+ }
323
+ case "ui-cancel-job-group": {
324
+ const cancelData = RTVI.UICancelJobGroupData.modelValidate(message.data ?? {});
325
+ await this.pushFrame(new RTVIUICancelJobGroupFrame({
326
+ msgId: message.id,
327
+ jobId: cancelData.jobId,
328
+ reason: cancelData.reason,
329
+ }));
330
+ await this._callEventHandler("on_ui_message", new RTVI.UICancelJobGroupMessage({ id: message.id, data: cancelData }));
331
+ break;
332
+ }
333
+ case "llm-function-call-result": {
334
+ const data = RTVI.LLMFunctionCallResultData.modelValidate(message.data);
335
+ await this._handleFunctionCallResult(data);
336
+ break;
337
+ }
338
+ case "send-text": {
339
+ const data = RTVI.SendTextData.modelValidate(message.data);
340
+ await this._handleSendText(data, message.id, userId);
341
+ break;
342
+ }
343
+ case "send-file": {
344
+ const data = RTVI.SendFileData.modelValidate(message.data);
345
+ await this._handleSendFile(data, message.id);
346
+ break;
347
+ }
348
+ case "raw-audio":
349
+ case "raw-audio-batch":
350
+ await this._handleAudioBuffer(message.data);
351
+ break;
352
+ case "dtmf": {
353
+ const data = RTVI.DTMFInputData.modelValidate(message.data);
354
+ await this._handleDtmf(data);
355
+ break;
356
+ }
357
+ default:
358
+ logger.warning(`Unsupported RTVI message type: ${message.type}`);
359
+ await this._sendErrorResponse(message.id, `Unsupported type ${message.type}`);
360
+ }
361
+ }
362
+ catch (e) {
363
+ rethrowIfCancelled(e);
364
+ if (isValidationError(e)) {
365
+ await this._sendErrorResponse(message.id, `Invalid message: ${errorMessage(e)}`);
366
+ logger.warning(`Invalid message: ${errorMessage(e)}`);
367
+ }
368
+ else {
369
+ await this._sendErrorResponse(message.id, `Exception processing message: ${errorMessage(e)}`);
370
+ logger.warning(`Exception processing message: ${errorMessage(e)}`);
371
+ }
372
+ }
373
+ }
374
+ /** Handle the client-ready message from the client. */
375
+ async _handleClientReady(requestId, data) {
376
+ const version = data ? data.version : null;
377
+ logger.debug(`Received client-ready: version ${version}`);
378
+ let versionError = null;
379
+ if (version) {
380
+ try {
381
+ const parts = version.split(".").map(parsePythonInt);
382
+ if (parts.length !== 3) {
383
+ throw new RangeError("invalid version");
384
+ }
385
+ this._clientVersion = parts;
386
+ const serverMajor = parsePythonInt(RTVI.PROTOCOL_VERSION.split(".")[0]);
387
+ const clientMajor = this._clientVersion[0];
388
+ if (clientMajor === serverMajor) {
389
+ // fully compatible
390
+ }
391
+ else if (clientMajor === RTVI.LEGACY_SUPPORTED_MAJOR) {
392
+ // Any 1.x client is deprecated but still served with the v1 bot-output format.
393
+ // TODO: enable this once RTVI 2.0.0 is supported by all our client SDKs.
394
+ // 1.x.x is deprecated but still served with the v1 bot-output format.
395
+ // const legacyWarning =
396
+ // `RTVI client version ${version} is deprecated. ` +
397
+ // `Please upgrade to protocol ${RTVI.PROTOCOL_VERSION}. ` +
398
+ // "The bot-output event format has changed in 2.0.0.";
399
+ // logger.warning(legacyWarning);
400
+ // await this._sendErrorResponse(requestId, legacyWarning);
401
+ // versionError intentionally left as null — connection proceeds.
402
+ }
403
+ else {
404
+ versionError = `RTVI version ${version} is not compatible with server protocol ${RTVI.PROTOCOL_VERSION}.`;
405
+ }
406
+ }
407
+ catch (e) {
408
+ rethrowIfCancelled(e);
409
+ if (!(e instanceof RangeError))
410
+ throw e;
411
+ versionError = `Invalid client version format (${version}).`;
412
+ }
413
+ }
414
+ else {
415
+ versionError = "Client version unknown.";
416
+ }
417
+ const about = data ? data.about : { library: "unknown" };
418
+ if (versionError) {
419
+ versionError += " Compatibility issues may occur.";
420
+ logger.warning(versionError);
421
+ await this._sendErrorResponse(requestId, versionError);
422
+ }
423
+ logger.debug(`Client Details: ${JSON.stringify(about)}`);
424
+ // Ask the input transport to start streaming audio now that the client
425
+ // is ready.
426
+ await this.pushFrame(new InputTransportStartAudioStreamingFrame());
427
+ this._clientReadyId = requestId;
428
+ await this.setClientReady();
429
+ }
430
+ /**
431
+ * Handle incoming audio buffer data.
432
+ *
433
+ * The RTVIProcessor is prepended to the very top of the pipeline, so
434
+ * pushing `InputAudioRawFrame` downstream reaches the input transport,
435
+ * which feeds it through its VAD/processing path. Frame-based so we don't
436
+ * hold a transport reference.
437
+ */
438
+ async _handleAudioBuffer(data) {
439
+ const raw = data;
440
+ // Extract audio batch ensuring it's a list
441
+ // Python `or`: an empty batch list is falsy, so fall back to the single chunk.
442
+ const batch = raw.base64AudioBatch;
443
+ const audioList = (batch && !(Array.isArray(batch) && batch.length === 0) ? batch : [raw.base64Audio]);
444
+ try {
445
+ // Filter out null/empty values
446
+ for (const base64Audio of audioList.filter(Boolean)) {
447
+ if (typeof base64Audio !== "string") {
448
+ throw new TypeError("base64 audio must be a string");
449
+ }
450
+ for (const key of ["sampleRate", "numChannels"]) {
451
+ if (!(key in raw))
452
+ throw new RangeError(`missing key '${key}'`);
453
+ }
454
+ const pcmBytes = base64ToBytes(base64Audio);
455
+ const frame = new InputAudioRawFrame({
456
+ audio: pcmBytes,
457
+ sampleRate: raw.sampleRate,
458
+ numChannels: raw.numChannels,
459
+ });
460
+ await this.pushFrame(frame);
461
+ }
462
+ }
463
+ catch (e) {
464
+ rethrowIfCancelled(e);
465
+ // Upstream catches only (KeyError, TypeError, ValueError); anything else
466
+ // (e.g. from pushFrame) propagates to `_handleMessage`.
467
+ const handled = e instanceof TypeError ||
468
+ e instanceof RangeError ||
469
+ (e instanceof Error && e.name === "InvalidCharacterError");
470
+ if (!handled)
471
+ throw e;
472
+ // Handle missing keys, decoding errors, and invalid types
473
+ logger.error(`Error processing audio buffer: ${errorMessage(e)}`);
474
+ }
475
+ }
476
+ /**
477
+ * Handle DTMF keypresses from the client.
478
+ *
479
+ * Like `_handleAudioBuffer`, the RTVIProcessor sits at the top of the
480
+ * pipeline, so pushing `InputDTMFFrame` downstream reaches the input
481
+ * transport and the bot's DTMF handling exactly as a telephony transport's
482
+ * keypresses would. A multi-key sequence is pushed as one frame per key,
483
+ * in order.
484
+ */
485
+ async _handleDtmf(data) {
486
+ for (const button of data.buttons) {
487
+ await this.pushFrame(new InputDTMFFrame({ button }));
488
+ }
489
+ }
490
+ /** Handle a send-text message from the client. */
491
+ async _handleSendText(data, messageId, userId = null) {
492
+ const opts = data.options ?? new RTVI.SendTextOptions();
493
+ if (opts.runImmediately) {
494
+ await this.interruptBot();
495
+ // Drain the pipeline before appending the new message. The
496
+ // interruption commits the in-progress assistant response into the
497
+ // context; flushing guarantees that lands *before* we append (and
498
+ // run) the new user message, so the context stays correctly ordered
499
+ // (otherwise the append can overtake the commit and the model
500
+ // continues the interrupted turn). This runs in the message task, so
501
+ // awaiting here doesn't block the frame loop that forwards the probe.
502
+ await this.pipelineWorker.flushPipeline();
503
+ }
504
+ const curLlmSkipTts = this._llmSkipTts;
505
+ const shouldSkipTts = !opts.audioResponse;
506
+ const toggleSkipTts = curLlmSkipTts !== shouldSkipTts;
507
+ if (toggleSkipTts) {
508
+ const outputFrame = new LLMConfigureOutputFrame({ skipTts: shouldSkipTts });
509
+ await this.pushFrame(outputFrame);
510
+ }
511
+ const textFrame = new LLMMessagesAppendFrame({
512
+ messages: [{ role: "user", content: data.content }],
513
+ runLlm: opts.runImmediately,
514
+ });
515
+ await this.pushFrame(textFrame);
516
+ await this.pushFrame(new RTVISendTextFrame({ msgId: messageId, text: data.content, userId }));
517
+ if (toggleSkipTts) {
518
+ const outputFrame = new LLMConfigureOutputFrame({ skipTts: curLlmSkipTts });
519
+ await this.pushFrame(outputFrame);
520
+ }
521
+ }
522
+ /**
523
+ * Handle a send-file message from the client.
524
+ *
525
+ * Validation and framing only: a URL source is passed through unresolved,
526
+ * and whether the LLM provider fetches it itself or the LLM service's
527
+ * `FileResolver` downloads it is decided at completion time.
528
+ */
529
+ async _handleSendFile(data, messageId) {
530
+ const file = data.file;
531
+ const opts = data.options ?? new RTVI.SendFileOptions();
532
+ logger.debug(`Handling file from RTVI: format=${file.format}, type=${file.source.type}`);
533
+ let source;
534
+ let sourceType;
535
+ const fs = file.source;
536
+ if (fs instanceof RTVI.FileBytes) {
537
+ // `bytes` is raw base64, but tolerate clients that send a full data URL.
538
+ if (fs.bytes.startsWith("data:")) {
539
+ source = fs.bytes;
540
+ }
541
+ else {
542
+ source = `data:${file.format};base64,${fs.bytes}`;
543
+ }
544
+ sourceType = "bytes";
545
+ }
546
+ else if (fs instanceof RTVI.FileUrl) {
547
+ source = fs.url;
548
+ sourceType = "url";
549
+ }
550
+ else {
551
+ const type = file.source.type;
552
+ logger.warning(`Unsupported file source type: ${type}`);
553
+ await this._sendErrorResponse(messageId, `Unsupported file source type: ${type}`);
554
+ return;
555
+ }
556
+ let fileFrame;
557
+ if (file.format.startsWith("image/") && sourceType === "bytes") {
558
+ const size = file.source instanceof RTVI.FileBytes
559
+ ? [file.source.width || 0, file.source.height || 0]
560
+ : [0, 0];
561
+ const marker = source.indexOf("base64,");
562
+ if (marker < 0) {
563
+ throw new RangeError("list index out of range");
564
+ }
565
+ const imageBytes = base64ToBytes(source.slice(marker + "base64,".length));
566
+ fileFrame = new UserImageRawFrame({
567
+ text: data.content,
568
+ image: imageBytes,
569
+ size,
570
+ format: file.format,
571
+ appendToContext: true,
572
+ runLlm: opts.runImmediately,
573
+ });
574
+ }
575
+ else {
576
+ fileFrame = new UserFileRawFrame({
577
+ text: data.content,
578
+ file: source,
579
+ type: sourceType,
580
+ filename: file.name,
581
+ format: file.format,
582
+ customOptions: opts.customOptions,
583
+ appendToContext: true,
584
+ runLlm: opts.runImmediately,
585
+ });
586
+ }
587
+ if (opts.runImmediately) {
588
+ await this.interruptBot();
589
+ }
590
+ const curLlmSkipTts = this._llmSkipTts;
591
+ const shouldSkipTts = !opts.audioResponse;
592
+ const toggleSkipTts = curLlmSkipTts !== shouldSkipTts;
593
+ if (toggleSkipTts) {
594
+ const outputFrame = new LLMConfigureOutputFrame({ skipTts: shouldSkipTts });
595
+ await this.pushFrame(outputFrame);
596
+ }
597
+ await this.pushFrame(fileFrame);
598
+ if (toggleSkipTts) {
599
+ const outputFrame = new LLMConfigureOutputFrame({ skipTts: curLlmSkipTts });
600
+ await this.pushFrame(outputFrame);
601
+ }
602
+ }
603
+ /** Handle a client message frame. */
604
+ async _handleClientMessage(msgId, data) {
605
+ // Create a RTVIClientMessageFrame to push the message
606
+ const frame = new RTVIClientMessageFrame({ msgId, type: data.t, data: data.d });
607
+ await this.pushFrame(frame);
608
+ await this._callEventHandler("on_client_message", new RTVI.ClientMessage({
609
+ msgId,
610
+ type: data.t,
611
+ data: data.d,
612
+ }));
613
+ }
614
+ /** Handle a function call result from the client. */
615
+ async _handleFunctionCallResult(data) {
616
+ const frame = new FunctionCallResultFrame({
617
+ functionName: data.functionName,
618
+ toolCallId: data.toolCallId,
619
+ arguments: data.arguments,
620
+ result: data.result,
621
+ });
622
+ await this.pushFrame(frame);
623
+ }
624
+ /**
625
+ * Send the bot-ready message to the client.
626
+ *
627
+ * @param about Optional information about the bot to include in the ready
628
+ * message. If left as null, the pipecat library and version will be used.
629
+ */
630
+ async _sendBotReady(about = null) {
631
+ if (!about || Object.keys(about).length === 0) {
632
+ about = { library: "pipecat-ai", library_version: `${pipecatVersion()}` };
633
+ }
634
+ // Negotiate the protocol version we advertise back to the client.
635
+ // The server observer serves v1-formatted bot-output events to
636
+ // 1.x clients (see `_isLegacyClient`), so advertising the
637
+ // server's own 2.0.0 PROTOCOL_VERSION here would push the client's
638
+ // aggregator onto its v2 path (server-side speech progress) while
639
+ // the wire actually carries v1 events, and the two would collide.
640
+ // For legacy clients, echo their declared version back.
641
+ let version;
642
+ if (this._clientVersion[0] === RTVI.LEGACY_SUPPORTED_MAJOR) {
643
+ version = this._clientVersion.map((v) => String(v)).join(".");
644
+ }
645
+ else {
646
+ version = RTVI.PROTOCOL_VERSION;
647
+ }
648
+ const message = new RTVI.BotReady({
649
+ id: this._clientReadyId,
650
+ data: new RTVI.BotReadyData({
651
+ version,
652
+ about,
653
+ capabilities: this.pipelineWorker.capabilities,
654
+ }),
655
+ });
656
+ await this.pushTransportMessage(message);
657
+ }
658
+ /** Send a message or response to the client. */
659
+ async _sendServerMessage(message) {
660
+ await this.pushTransportMessage(message);
661
+ }
662
+ /** Send an error frame as an RTVI error message. */
663
+ async _sendErrorFrame(frame) {
664
+ // `ErrorFrame.fatal` is deprecated upstream and not ported.
665
+ const message = new RTVI.Error({
666
+ data: new RTVI.ErrorData({ error: frame.error, fatal: false }),
667
+ });
668
+ await this.pushTransportMessage(message);
669
+ }
670
+ /** Send an error response message. */
671
+ async _sendErrorResponse(id, error) {
672
+ const message = new RTVI.ErrorResponse({ id, data: new RTVI.ErrorResponseData({ error }) });
673
+ await this.pushTransportMessage(message);
674
+ }
675
+ }
676
+ //# sourceMappingURL=processor.js.map