@pipedog/core 0.0.0 → 0.1.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 (698) 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/index.d.ts +2 -0
  42. package/dist/audio/resamplers/index.js +8 -0
  43. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  44. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  45. package/dist/audio/resamplers/soxr_resampler.d.ts +54 -0
  46. package/dist/audio/resamplers/soxr_resampler.js +69 -0
  47. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
  48. package/dist/audio/resamplers/soxr_stream_resampler.js +146 -0
  49. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  50. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  51. package/dist/audio/turn/index.d.ts +2 -0
  52. package/dist/audio/turn/index.js +8 -0
  53. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  54. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  55. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  56. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  57. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  58. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +143 -0
  59. package/dist/audio/utils.d.ts +224 -0
  60. package/dist/audio/utils.js +634 -0
  61. package/dist/audio/vad/data/index.d.ts +2 -0
  62. package/dist/audio/vad/data/index.js +8 -0
  63. package/dist/audio/vad/index.d.ts +2 -0
  64. package/dist/audio/vad/index.js +8 -0
  65. package/dist/audio/vad/vad_analyzer.d.ts +126 -0
  66. package/dist/audio/vad/vad_analyzer.js +211 -0
  67. package/dist/audio/vad/vad_controller.d.ts +143 -0
  68. package/dist/audio/vad/vad_controller.js +228 -0
  69. package/dist/audio/volume.d.ts +38 -0
  70. package/dist/audio/volume.js +75 -0
  71. package/dist/bus/adapters/base.d.ts +35 -0
  72. package/dist/bus/adapters/base.js +19 -0
  73. package/dist/bus/adapters/index.d.ts +10 -0
  74. package/dist/bus/adapters/index.js +15 -0
  75. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  76. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  77. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  78. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  79. package/dist/bus/bridge_processor.d.ts +111 -0
  80. package/dist/bus/bridge_processor.js +166 -0
  81. package/dist/bus/bus.d.ts +110 -0
  82. package/dist/bus/bus.js +200 -0
  83. package/dist/bus/index.d.ts +22 -0
  84. package/dist/bus/index.js +27 -0
  85. package/dist/bus/local/async_queue.d.ts +12 -0
  86. package/dist/bus/local/async_queue.js +21 -0
  87. package/dist/bus/local/index.d.ts +3 -0
  88. package/dist/bus/local/index.js +8 -0
  89. package/dist/bus/messages.d.ts +378 -0
  90. package/dist/bus/messages.js +357 -0
  91. package/dist/bus/network/index.d.ts +16 -0
  92. package/dist/bus/network/index.js +21 -0
  93. package/dist/bus/queue.d.ts +27 -0
  94. package/dist/bus/queue.js +51 -0
  95. package/dist/bus/serializers/base.d.ts +25 -0
  96. package/dist/bus/serializers/base.js +14 -0
  97. package/dist/bus/serializers/index.d.ts +9 -0
  98. package/dist/bus/serializers/index.js +14 -0
  99. package/dist/bus/serializers/json.d.ts +77 -0
  100. package/dist/bus/serializers/json.js +367 -0
  101. package/dist/bus/subscriber.d.ts +46 -0
  102. package/dist/bus/subscriber.js +27 -0
  103. package/dist/bus/ui/index.d.ts +3 -0
  104. package/dist/bus/ui/index.js +8 -0
  105. package/dist/bus/ui/messages.d.ts +186 -0
  106. package/dist/bus/ui/messages.js +171 -0
  107. package/dist/classifiers/base_classifier.d.ts +263 -0
  108. package/dist/classifiers/base_classifier.js +346 -0
  109. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  110. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  111. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  112. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  113. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  114. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  115. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  116. package/dist/classifiers/cloudflare/index.js +8 -0
  117. package/dist/classifiers/http_client.d.ts +70 -0
  118. package/dist/classifiers/http_client.js +161 -0
  119. package/dist/classifiers/index.d.ts +2 -0
  120. package/dist/classifiers/index.js +8 -0
  121. package/dist/classifiers/jev/classifier.d.ts +8 -0
  122. package/dist/classifiers/jev/classifier.js +13 -0
  123. package/dist/classifiers/jev/client.d.ts +8 -0
  124. package/dist/classifiers/jev/client.js +13 -0
  125. package/dist/classifiers/jev/index.d.ts +2 -0
  126. package/dist/classifiers/jev/index.js +8 -0
  127. package/dist/classifiers/llm/classifier.d.ts +72 -0
  128. package/dist/classifiers/llm/classifier.js +304 -0
  129. package/dist/classifiers/llm/index.d.ts +2 -0
  130. package/dist/classifiers/llm/index.js +8 -0
  131. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  132. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  133. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  134. package/dist/classifiers/openai/decisions/client.js +234 -0
  135. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  136. package/dist/classifiers/openai/decisions/index.js +8 -0
  137. package/dist/classifiers/openai/index.d.ts +2 -0
  138. package/dist/classifiers/openai/index.js +8 -0
  139. package/dist/classifiers/typesafe/index.d.ts +2 -0
  140. package/dist/classifiers/typesafe/index.js +8 -0
  141. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  142. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  143. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  144. package/dist/classifiers/typesafe/jev/client.js +233 -0
  145. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  146. package/dist/classifiers/typesafe/jev/index.js +8 -0
  147. package/dist/clocks/base_clock.d.ts +13 -0
  148. package/dist/clocks/base_clock.js +14 -0
  149. package/dist/clocks/index.d.ts +2 -0
  150. package/dist/clocks/index.js +8 -0
  151. package/dist/clocks/system_clock.d.ts +15 -0
  152. package/dist/clocks/system_clock.js +25 -0
  153. package/dist/frames/frames.d.ts +2533 -0
  154. package/dist/frames/frames.js +2485 -0
  155. package/dist/frames/index.d.ts +2 -0
  156. package/dist/frames/index.js +8 -0
  157. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  158. package/dist/frames/protobufs/frames_pb2.js +466 -0
  159. package/dist/index.d.ts +11 -0
  160. package/dist/index.js +56 -0
  161. package/dist/metrics/index.d.ts +2 -0
  162. package/dist/metrics/index.js +8 -0
  163. package/dist/metrics/metrics.d.ts +276 -0
  164. package/dist/metrics/metrics.js +254 -0
  165. package/dist/observers/base_observer.d.ts +173 -0
  166. package/dist/observers/base_observer.js +151 -0
  167. package/dist/observers/error_observer.d.ts +75 -0
  168. package/dist/observers/error_observer.js +87 -0
  169. package/dist/observers/function_call_observer.d.ts +157 -0
  170. package/dist/observers/function_call_observer.js +222 -0
  171. package/dist/observers/index.d.ts +2 -0
  172. package/dist/observers/index.js +8 -0
  173. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  174. package/dist/observers/loggers/debug_log_observer.js +228 -0
  175. package/dist/observers/loggers/index.d.ts +2 -0
  176. package/dist/observers/loggers/index.js +8 -0
  177. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  178. package/dist/observers/loggers/llm_log_observer.js +110 -0
  179. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  180. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  181. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  182. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  183. package/dist/observers/service_metrics_observer.d.ts +168 -0
  184. package/dist/observers/service_metrics_observer.js +236 -0
  185. package/dist/observers/speaking_observer.d.ts +104 -0
  186. package/dist/observers/speaking_observer.js +150 -0
  187. package/dist/observers/startup_timing_observer.d.ts +221 -0
  188. package/dist/observers/startup_timing_observer.js +365 -0
  189. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  190. package/dist/observers/turn_tracking_observer.js +189 -0
  191. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  192. package/dist/observers/user_bot_latency_observer.js +974 -0
  193. package/dist/pipeline/base_pipeline.d.ts +49 -0
  194. package/dist/pipeline/base_pipeline.js +101 -0
  195. package/dist/pipeline/capabilities.d.ts +76 -0
  196. package/dist/pipeline/capabilities.js +97 -0
  197. package/dist/pipeline/index.d.ts +2 -0
  198. package/dist/pipeline/index.js +8 -0
  199. package/dist/pipeline/job_context.d.ts +317 -0
  200. package/dist/pipeline/job_context.js +450 -0
  201. package/dist/pipeline/job_decorator.d.ts +54 -0
  202. package/dist/pipeline/job_decorator.js +92 -0
  203. package/dist/pipeline/llm_switcher.d.ts +84 -0
  204. package/dist/pipeline/llm_switcher.js +107 -0
  205. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  206. package/dist/pipeline/llm_with_backend.js +806 -0
  207. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  208. package/dist/pipeline/parallel_pipeline.js +200 -0
  209. package/dist/pipeline/pipeline.d.ts +126 -0
  210. package/dist/pipeline/pipeline.js +196 -0
  211. package/dist/pipeline/service_switcher.d.ts +287 -0
  212. package/dist/pipeline/service_switcher.js +509 -0
  213. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  214. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  215. package/dist/pipeline/worker.d.ts +814 -0
  216. package/dist/pipeline/worker.js +1639 -0
  217. package/dist/pipeline/worker_observer.d.ts +131 -0
  218. package/dist/pipeline/worker_observer.js +274 -0
  219. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  220. package/dist/pipeline/worker_ready_decorator.js +76 -0
  221. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  222. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  223. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  224. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  225. package/dist/processors/aggregators/gated.d.ts +43 -0
  226. package/dist/processors/aggregators/gated.js +86 -0
  227. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  228. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  229. package/dist/processors/aggregators/index.d.ts +2 -0
  230. package/dist/processors/aggregators/index.js +8 -0
  231. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  232. package/dist/processors/aggregators/llm_context.js +580 -0
  233. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  234. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  235. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  236. package/dist/processors/aggregators/llm_response.js +71 -0
  237. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  238. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  239. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  240. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  241. package/dist/processors/aggregators/sentence.d.ts +39 -0
  242. package/dist/processors/aggregators/sentence.js +69 -0
  243. package/dist/processors/async_generator.d.ts +42 -0
  244. package/dist/processors/async_generator.js +76 -0
  245. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  246. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  247. package/dist/processors/audio/index.d.ts +2 -0
  248. package/dist/processors/audio/index.js +8 -0
  249. package/dist/processors/audio/vad_processor.d.ts +67 -0
  250. package/dist/processors/audio/vad_processor.js +103 -0
  251. package/dist/processors/consumer_processor.d.ts +49 -0
  252. package/dist/processors/consumer_processor.js +85 -0
  253. package/dist/processors/filters/frame_filter.d.ts +39 -0
  254. package/dist/processors/filters/frame_filter.js +52 -0
  255. package/dist/processors/filters/function_filter.d.ts +59 -0
  256. package/dist/processors/filters/function_filter.js +78 -0
  257. package/dist/processors/filters/identity_filter.d.ts +33 -0
  258. package/dist/processors/filters/identity_filter.js +37 -0
  259. package/dist/processors/filters/index.d.ts +2 -0
  260. package/dist/processors/filters/index.js +8 -0
  261. package/dist/processors/filters/null_filter.d.ts +34 -0
  262. package/dist/processors/filters/null_filter.js +47 -0
  263. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  264. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  265. package/dist/processors/frame_processor.d.ts +360 -0
  266. package/dist/processors/frame_processor.js +932 -0
  267. package/dist/processors/frameworks/index.d.ts +2 -0
  268. package/dist/processors/frameworks/index.js +8 -0
  269. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  270. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  271. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  272. package/dist/processors/frameworks/rtvi/index.js +11 -0
  273. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  274. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  275. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  276. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  277. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  278. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  279. package/dist/processors/idle_frame_processor.d.ts +44 -0
  280. package/dist/processors/idle_frame_processor.js +86 -0
  281. package/dist/processors/index.d.ts +2 -0
  282. package/dist/processors/index.js +8 -0
  283. package/dist/processors/logger.d.ts +42 -0
  284. package/dist/processors/logger.js +87 -0
  285. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  286. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  287. package/dist/processors/metrics/index.d.ts +2 -0
  288. package/dist/processors/metrics/index.js +8 -0
  289. package/dist/processors/producer_processor.d.ts +68 -0
  290. package/dist/processors/producer_processor.js +78 -0
  291. package/dist/processors/text_transformer.d.ts +30 -0
  292. package/dist/processors/text_transformer.js +48 -0
  293. package/dist/registry/index.d.ts +3 -0
  294. package/dist/registry/index.js +8 -0
  295. package/dist/registry/registry.d.ts +69 -0
  296. package/dist/registry/registry.js +149 -0
  297. package/dist/registry/types.d.ts +47 -0
  298. package/dist/registry/types.js +39 -0
  299. package/dist/serializers/base_serializer.d.ts +94 -0
  300. package/dist/serializers/base_serializer.js +82 -0
  301. package/dist/serializers/index.d.ts +2 -0
  302. package/dist/serializers/index.js +8 -0
  303. package/dist/services/ai_service.d.ts +145 -0
  304. package/dist/services/ai_service.js +262 -0
  305. package/dist/services/anthropic/index.d.ts +2 -0
  306. package/dist/services/anthropic/index.js +7 -0
  307. package/dist/services/assemblyai/index.d.ts +2 -0
  308. package/dist/services/assemblyai/index.js +7 -0
  309. package/dist/services/asyncai/index.d.ts +2 -0
  310. package/dist/services/asyncai/index.js +7 -0
  311. package/dist/services/aws/index.d.ts +2 -0
  312. package/dist/services/aws/index.js +7 -0
  313. package/dist/services/azure/index.d.ts +2 -0
  314. package/dist/services/azure/index.js +7 -0
  315. package/dist/services/baseten/index.d.ts +2 -0
  316. package/dist/services/baseten/index.js +7 -0
  317. package/dist/services/bland/index.d.ts +2 -0
  318. package/dist/services/bland/index.js +7 -0
  319. package/dist/services/camb/index.d.ts +2 -0
  320. package/dist/services/camb/index.js +7 -0
  321. package/dist/services/cartesia/index.d.ts +2 -0
  322. package/dist/services/cartesia/index.js +7 -0
  323. package/dist/services/cerebras/index.d.ts +2 -0
  324. package/dist/services/cerebras/index.js +7 -0
  325. package/dist/services/crusoe/index.d.ts +2 -0
  326. package/dist/services/crusoe/index.js +7 -0
  327. package/dist/services/deepgram/index.d.ts +2 -0
  328. package/dist/services/deepgram/index.js +7 -0
  329. package/dist/services/deepseek/index.d.ts +2 -0
  330. package/dist/services/deepseek/index.js +7 -0
  331. package/dist/services/elevenlabs/index.d.ts +2 -0
  332. package/dist/services/elevenlabs/index.js +7 -0
  333. package/dist/services/fal/index.d.ts +2 -0
  334. package/dist/services/fal/index.js +7 -0
  335. package/dist/services/fireworks/index.d.ts +2 -0
  336. package/dist/services/fireworks/index.js +7 -0
  337. package/dist/services/fish/index.d.ts +2 -0
  338. package/dist/services/fish/index.js +7 -0
  339. package/dist/services/funasr/index.d.ts +3 -0
  340. package/dist/services/funasr/index.js +8 -0
  341. package/dist/services/gladia/index.d.ts +2 -0
  342. package/dist/services/gladia/index.js +7 -0
  343. package/dist/services/google/index.d.ts +2 -0
  344. package/dist/services/google/index.js +7 -0
  345. package/dist/services/gradium/index.d.ts +2 -0
  346. package/dist/services/gradium/index.js +7 -0
  347. package/dist/services/grok/index.d.ts +2 -0
  348. package/dist/services/grok/index.js +7 -0
  349. package/dist/services/groq/index.d.ts +2 -0
  350. package/dist/services/groq/index.js +7 -0
  351. package/dist/services/heygen/index.d.ts +2 -0
  352. package/dist/services/heygen/index.js +7 -0
  353. package/dist/services/hume/index.d.ts +2 -0
  354. package/dist/services/hume/index.js +7 -0
  355. package/dist/services/image_service.d.ts +52 -0
  356. package/dist/services/image_service.js +60 -0
  357. package/dist/services/inception/index.d.ts +2 -0
  358. package/dist/services/inception/index.js +7 -0
  359. package/dist/services/index.d.ts +2 -0
  360. package/dist/services/index.js +8 -0
  361. package/dist/services/inworld/index.d.ts +2 -0
  362. package/dist/services/inworld/index.js +7 -0
  363. package/dist/services/keenable/index.d.ts +2 -0
  364. package/dist/services/keenable/index.js +7 -0
  365. package/dist/services/kokoro/index.d.ts +2 -0
  366. package/dist/services/kokoro/index.js +7 -0
  367. package/dist/services/llm_service.d.ts +1106 -0
  368. package/dist/services/llm_service.js +2231 -0
  369. package/dist/services/mem0/index.d.ts +2 -0
  370. package/dist/services/mem0/index.js +7 -0
  371. package/dist/services/meta/index.d.ts +2 -0
  372. package/dist/services/meta/index.js +7 -0
  373. package/dist/services/minimax/index.d.ts +2 -0
  374. package/dist/services/minimax/index.js +7 -0
  375. package/dist/services/mistral/index.d.ts +2 -0
  376. package/dist/services/mistral/index.js +7 -0
  377. package/dist/services/moondream/index.d.ts +2 -0
  378. package/dist/services/moondream/index.js +7 -0
  379. package/dist/services/moonshine/index.d.ts +2 -0
  380. package/dist/services/moonshine/index.js +7 -0
  381. package/dist/services/nebius/index.d.ts +2 -0
  382. package/dist/services/nebius/index.js +7 -0
  383. package/dist/services/neuphonic/index.d.ts +2 -0
  384. package/dist/services/neuphonic/index.js +7 -0
  385. package/dist/services/novita/index.d.ts +2 -0
  386. package/dist/services/novita/index.js +7 -0
  387. package/dist/services/nvidia/index.d.ts +2 -0
  388. package/dist/services/nvidia/index.js +11 -0
  389. package/dist/services/ollama/index.d.ts +2 -0
  390. package/dist/services/ollama/index.js +7 -0
  391. package/dist/services/openai/index.d.ts +2 -0
  392. package/dist/services/openai/index.js +7 -0
  393. package/dist/services/openclaw/index.d.ts +14 -0
  394. package/dist/services/openclaw/index.js +19 -0
  395. package/dist/services/openrouter/index.d.ts +2 -0
  396. package/dist/services/openrouter/index.js +7 -0
  397. package/dist/services/perplexity/index.d.ts +2 -0
  398. package/dist/services/perplexity/index.js +7 -0
  399. package/dist/services/piper/index.d.ts +2 -0
  400. package/dist/services/piper/index.js +7 -0
  401. package/dist/services/pocket_tts/index.d.ts +2 -0
  402. package/dist/services/pocket_tts/index.js +7 -0
  403. package/dist/services/qwen/index.d.ts +2 -0
  404. package/dist/services/qwen/index.js +7 -0
  405. package/dist/services/resembleai/index.d.ts +2 -0
  406. package/dist/services/resembleai/index.js +7 -0
  407. package/dist/services/rime/index.d.ts +2 -0
  408. package/dist/services/rime/index.js +7 -0
  409. package/dist/services/sambanova/index.d.ts +2 -0
  410. package/dist/services/sambanova/index.js +7 -0
  411. package/dist/services/sarvam/index.d.ts +2 -0
  412. package/dist/services/sarvam/index.js +7 -0
  413. package/dist/services/settings.d.ts +356 -0
  414. package/dist/services/settings.js +437 -0
  415. package/dist/services/simli/index.d.ts +2 -0
  416. package/dist/services/simli/index.js +7 -0
  417. package/dist/services/smallest/index.d.ts +2 -0
  418. package/dist/services/smallest/index.js +7 -0
  419. package/dist/services/soniox/index.d.ts +2 -0
  420. package/dist/services/soniox/index.js +7 -0
  421. package/dist/services/speechify/index.d.ts +2 -0
  422. package/dist/services/speechify/index.js +7 -0
  423. package/dist/services/speechmatics/index.d.ts +2 -0
  424. package/dist/services/speechmatics/index.js +7 -0
  425. package/dist/services/stt_latency.d.ts +62 -0
  426. package/dist/services/stt_latency.js +71 -0
  427. package/dist/services/stt_service.d.ts +601 -0
  428. package/dist/services/stt_service.js +1044 -0
  429. package/dist/services/tavus/index.d.ts +2 -0
  430. package/dist/services/tavus/index.js +7 -0
  431. package/dist/services/together/index.d.ts +2 -0
  432. package/dist/services/together/index.js +7 -0
  433. package/dist/services/tts_service.d.ts +909 -0
  434. package/dist/services/tts_service.js +2018 -0
  435. package/dist/services/ultravox/index.d.ts +2 -0
  436. package/dist/services/ultravox/index.js +9 -0
  437. package/dist/services/vision_service.d.ts +56 -0
  438. package/dist/services/vision_service.js +62 -0
  439. package/dist/services/websocket_service.d.ts +213 -0
  440. package/dist/services/websocket_service.js +654 -0
  441. package/dist/services/whisper/index.d.ts +2 -0
  442. package/dist/services/whisper/index.js +9 -0
  443. package/dist/services/xai/index.d.ts +2 -0
  444. package/dist/services/xai/index.js +9 -0
  445. package/dist/services/xtts/index.d.ts +2 -0
  446. package/dist/services/xtts/index.js +9 -0
  447. package/dist/tests/index.d.ts +2 -0
  448. package/dist/tests/index.js +8 -0
  449. package/dist/tests/utils.d.ts +123 -0
  450. package/dist/tests/utils.js +212 -0
  451. package/dist/transcriptions/index.d.ts +2 -0
  452. package/dist/transcriptions/index.js +8 -0
  453. package/dist/transcriptions/language.d.ts +376 -0
  454. package/dist/transcriptions/language.js +543 -0
  455. package/dist/transports/base_input.d.ts +149 -0
  456. package/dist/transports/base_input.js +338 -0
  457. package/dist/transports/base_output.d.ts +432 -0
  458. package/dist/transports/base_output.js +1231 -0
  459. package/dist/transports/base_transport.d.ts +223 -0
  460. package/dist/transports/base_transport.js +167 -0
  461. package/dist/transports/daily/index.d.ts +2 -0
  462. package/dist/transports/daily/index.js +9 -0
  463. package/dist/transports/heygen/index.d.ts +2 -0
  464. package/dist/transports/heygen/index.js +9 -0
  465. package/dist/transports/index.d.ts +2 -0
  466. package/dist/transports/index.js +8 -0
  467. package/dist/transports/lemonslice/index.d.ts +2 -0
  468. package/dist/transports/lemonslice/index.js +9 -0
  469. package/dist/transports/livekit/index.d.ts +2 -0
  470. package/dist/transports/livekit/index.js +9 -0
  471. package/dist/transports/local/index.d.ts +2 -0
  472. package/dist/transports/local/index.js +9 -0
  473. package/dist/transports/moq/index.d.ts +2 -0
  474. package/dist/transports/moq/index.js +9 -0
  475. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  476. package/dist/transports/smallwebrtc/index.js +9 -0
  477. package/dist/transports/tavus/index.d.ts +2 -0
  478. package/dist/transports/tavus/index.js +9 -0
  479. package/dist/transports/video_in_sampler.d.ts +157 -0
  480. package/dist/transports/video_in_sampler.js +258 -0
  481. package/dist/transports/vonage/index.d.ts +2 -0
  482. package/dist/transports/vonage/index.js +9 -0
  483. package/dist/transports/websocket/index.d.ts +2 -0
  484. package/dist/transports/websocket/index.js +9 -0
  485. package/dist/transports/whatsapp/index.d.ts +2 -0
  486. package/dist/transports/whatsapp/index.js +9 -0
  487. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  488. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  489. package/dist/turns/empty_user_turn.d.ts +55 -0
  490. package/dist/turns/empty_user_turn.js +53 -0
  491. package/dist/turns/index.d.ts +2 -0
  492. package/dist/turns/index.js +8 -0
  493. package/dist/turns/speculation_gate.d.ts +169 -0
  494. package/dist/turns/speculation_gate.js +294 -0
  495. package/dist/turns/types.d.ts +33 -0
  496. package/dist/turns/types.js +35 -0
  497. package/dist/turns/user_idle_controller.d.ts +94 -0
  498. package/dist/turns/user_idle_controller.js +187 -0
  499. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  500. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  501. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  502. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  503. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  504. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  505. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  506. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  507. package/dist/turns/user_mute/index.d.ts +6 -0
  508. package/dist/turns/user_mute/index.js +11 -0
  509. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  510. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  511. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  512. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  513. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  514. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  515. package/dist/turns/user_start/index.d.ts +8 -0
  516. package/dist/turns/user_start/index.js +16 -0
  517. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  518. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  519. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  520. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  521. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  522. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  523. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  524. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  525. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  526. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  527. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  528. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  529. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  530. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  531. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  532. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  533. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  534. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  535. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  536. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  537. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  538. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  539. package/dist/turns/user_stop/index.d.ts +10 -0
  540. package/dist/turns/user_stop/index.js +15 -0
  541. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  542. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  543. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  544. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  545. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  546. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  547. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  548. package/dist/turns/user_turn_completion_mixin.js +591 -0
  549. package/dist/turns/user_turn_controller.d.ts +134 -0
  550. package/dist/turns/user_turn_controller.js +335 -0
  551. package/dist/turns/user_turn_processor.d.ts +87 -0
  552. package/dist/turns/user_turn_processor.js +180 -0
  553. package/dist/turns/user_turn_strategies.d.ts +187 -0
  554. package/dist/turns/user_turn_strategies.js +222 -0
  555. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  556. package/dist/utils/async_tool_cancellation.js +78 -0
  557. package/dist/utils/asyncio/index.d.ts +2 -0
  558. package/dist/utils/asyncio/index.js +7 -0
  559. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  560. package/dist/utils/asyncio/task_manager.js +105 -0
  561. package/dist/utils/base_object.d.ts +76 -0
  562. package/dist/utils/base_object.js +154 -0
  563. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  564. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  565. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  566. package/dist/utils/context/audio_context_manager.js +233 -0
  567. package/dist/utils/context/index.d.ts +2 -0
  568. package/dist/utils/context/index.js +7 -0
  569. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  570. package/dist/utils/context/llm_context_summarization.js +511 -0
  571. package/dist/utils/context/text_segment_map.d.ts +611 -0
  572. package/dist/utils/context/text_segment_map.js +1132 -0
  573. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  574. package/dist/utils/context/word_completion_tracker.js +441 -0
  575. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  576. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  577. package/dist/utils/deprecation.d.ts +28 -0
  578. package/dist/utils/deprecation.js +75 -0
  579. package/dist/utils/env.d.ts +38 -0
  580. package/dist/utils/env.js +62 -0
  581. package/dist/utils/errors.d.ts +75 -0
  582. package/dist/utils/errors.js +202 -0
  583. package/dist/utils/file_resolver.d.ts +126 -0
  584. package/dist/utils/file_resolver.js +314 -0
  585. package/dist/utils/file_storage.d.ts +99 -0
  586. package/dist/utils/file_storage.js +100 -0
  587. package/dist/utils/frame_queue.d.ts +36 -0
  588. package/dist/utils/frame_queue.js +66 -0
  589. package/dist/utils/http.d.ts +39 -0
  590. package/dist/utils/http.js +53 -0
  591. package/dist/utils/image.d.ts +15 -0
  592. package/dist/utils/image.js +30 -0
  593. package/dist/utils/index.d.ts +2 -0
  594. package/dist/utils/index.js +8 -0
  595. package/dist/utils/log_config.d.ts +34 -0
  596. package/dist/utils/log_config.js +76 -0
  597. package/dist/utils/logger.d.ts +40 -0
  598. package/dist/utils/logger.js +91 -0
  599. package/dist/utils/mixin.d.ts +14 -0
  600. package/dist/utils/mixin.js +63 -0
  601. package/dist/utils/network.d.ts +73 -0
  602. package/dist/utils/network.js +90 -0
  603. package/dist/utils/security/allowed_origins.d.ts +16 -0
  604. package/dist/utils/security/allowed_origins.js +34 -0
  605. package/dist/utils/security/index.d.ts +2 -0
  606. package/dist/utils/security/index.js +7 -0
  607. package/dist/utils/security/redaction.d.ts +27 -0
  608. package/dist/utils/security/redaction.js +123 -0
  609. package/dist/utils/security/ssrf.d.ts +79 -0
  610. package/dist/utils/security/ssrf.js +327 -0
  611. package/dist/utils/shared.d.ts +35 -0
  612. package/dist/utils/shared.js +136 -0
  613. package/dist/utils/startup.d.ts +17 -0
  614. package/dist/utils/startup.js +130 -0
  615. package/dist/utils/string.d.ts +116 -0
  616. package/dist/utils/string.js +460 -0
  617. package/dist/utils/sync/base_notifier.d.ts +25 -0
  618. package/dist/utils/sync/base_notifier.js +16 -0
  619. package/dist/utils/sync/event_notifier.d.ts +38 -0
  620. package/dist/utils/sync/event_notifier.js +51 -0
  621. package/dist/utils/sync/index.d.ts +2 -0
  622. package/dist/utils/sync/index.js +7 -0
  623. package/dist/utils/text/alnum_utils.d.ts +109 -0
  624. package/dist/utils/text/alnum_utils.js +262 -0
  625. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  626. package/dist/utils/text/base_text_aggregator.js +102 -0
  627. package/dist/utils/text/base_text_filter.d.ts +54 -0
  628. package/dist/utils/text/base_text_filter.js +50 -0
  629. package/dist/utils/text/index.d.ts +2 -0
  630. package/dist/utils/text/index.js +7 -0
  631. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  632. package/dist/utils/text/markdown_text_filter.js +522 -0
  633. package/dist/utils/text/markup_utils.d.ts +54 -0
  634. package/dist/utils/text/markup_utils.js +156 -0
  635. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  636. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  637. package/dist/utils/text/phonemes.d.ts +60 -0
  638. package/dist/utils/text/phonemes.js +172 -0
  639. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  640. package/dist/utils/text/simple_text_aggregator.js +254 -0
  641. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  642. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  643. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  644. package/dist/utils/text/transforms/pronunciations.js +111 -0
  645. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  646. package/dist/utils/text/word_timestamp_utils.js +52 -0
  647. package/dist/utils/time.d.ts +13 -0
  648. package/dist/utils/time.js +31 -0
  649. package/dist/utils/tracing/index.d.ts +3 -0
  650. package/dist/utils/tracing/index.js +8 -0
  651. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  652. package/dist/utils/tracing/service_attributes.js +434 -0
  653. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  654. package/dist/utils/tracing/service_decorators.js +1662 -0
  655. package/dist/utils/tracing/setup.d.ts +95 -0
  656. package/dist/utils/tracing/setup.js +110 -0
  657. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  658. package/dist/utils/tracing/tracing_context.js +97 -0
  659. package/dist/utils/tracing/turn_trace_observer.d.ts +90 -0
  660. package/dist/utils/tracing/turn_trace_observer.js +219 -0
  661. package/dist/utils/types.d.ts +80 -0
  662. package/dist/utils/types.js +108 -0
  663. package/dist/utils/utils.d.ts +5 -0
  664. package/dist/utils/utils.js +22 -0
  665. package/dist/utils/yaml.d.ts +64 -0
  666. package/dist/utils/yaml.js +41 -0
  667. package/dist/version.d.ts +3 -0
  668. package/dist/version.js +7 -0
  669. package/dist/workers/base_worker.d.ts +772 -0
  670. package/dist/workers/base_worker.js +1298 -0
  671. package/dist/workers/index.d.ts +2 -0
  672. package/dist/workers/index.js +8 -0
  673. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  674. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  675. package/dist/workers/llm/index.d.ts +6 -0
  676. package/dist/workers/llm/index.js +11 -0
  677. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  678. package/dist/workers/llm/llm_context_worker.js +72 -0
  679. package/dist/workers/llm/llm_worker.d.ts +180 -0
  680. package/dist/workers/llm/llm_worker.js +323 -0
  681. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  682. package/dist/workers/llm/tool_decorator.js +60 -0
  683. package/dist/workers/runner.d.ts +268 -0
  684. package/dist/workers/runner.js +489 -0
  685. package/dist/workers/ui/index.d.ts +22 -0
  686. package/dist/workers/ui/index.js +27 -0
  687. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  688. package/dist/workers/ui/ui_event_decorator.js +75 -0
  689. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  690. package/dist/workers/ui/ui_job_context.js +17 -0
  691. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  692. package/dist/workers/ui/ui_prompts.js +41 -0
  693. package/dist/workers/ui/ui_tools.d.ts +32 -0
  694. package/dist/workers/ui/ui_tools.js +112 -0
  695. package/dist/workers/ui/ui_worker.d.ts +571 -0
  696. package/dist/workers/ui/ui_worker.js +1156 -0
  697. package/package.json +46 -3
  698. package/README.md +0 -5
@@ -0,0 +1,205 @@
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/turns/user_stop/external_user_turn_stop_strategy.py
6
+ /** User turn stop strategy driven by another component in the pipeline. */
7
+ import { Event, TimeoutError, waitFor } from "@pipedog/asyncio";
8
+ import { InterimTranscriptionFrame, ProposedUserStartedSpeakingFrame, ProposedUserStoppedSpeakingFrame, TranscriptionFrame, UserStartedSpeakingFrame, UserStoppedSpeakingFrame, } from "../../frames/frames.js";
9
+ import { logger } from "../../utils/logger.js";
10
+ import { ProcessFrameResult } from "../types.js";
11
+ import { BaseUserTurnStopStrategy, } from "./base_user_turn_stop_strategy.js";
12
+ /**
13
+ * User turn stop strategy driven by another component in the pipeline.
14
+ *
15
+ * The end-of-turn counterpart to `ExternalUserTurnStartStrategy`, taking the
16
+ * same two signals:
17
+ *
18
+ * - `ProposedUserStoppedSpeakingFrame` — a service proposing that the turn has
19
+ * ended. This strategy decides, and emits the `UserStoppedSpeakingFrame`
20
+ * itself. It may also hold the turn open past the proposal, which is what
21
+ * `waitForTranscript` does.
22
+ *
23
+ * - `UserStoppedSpeakingFrame` — the turn end was already decided and
24
+ * announced elsewhere, typically by a shared `UserTurnProcessor`. This
25
+ * strategy adopts that decision and emits nothing.
26
+ *
27
+ * To shift the timing further, subclass this strategy and override
28
+ * `BaseUserTurnStopStrategy.triggerUserTurnStopped`, which both paths reach
29
+ * once they decide the turn is over. Its `enableUserSpeakingFrames` option
30
+ * already carries whichever path got there, so pass it through when the
31
+ * override eventually finalizes.
32
+ */
33
+ export class ExternalUserTurnStopStrategy extends BaseUserTurnStopStrategy {
34
+ _timeout;
35
+ _waitForTranscript;
36
+ _text = "";
37
+ _userSpeaking = false;
38
+ _seenInterimResults = false;
39
+ _turnAnnouncedElsewhere = false;
40
+ _turnOpen = false;
41
+ _event = new Event();
42
+ _task = null;
43
+ constructor(options = {}) {
44
+ super(options);
45
+ this._timeout = options.timeout ?? 0.5;
46
+ this._waitForTranscript = options.waitForTranscript ?? true;
47
+ }
48
+ /** Whether this strategy resolves proposals into turn stops. */
49
+ get resolvesProposedTurnStopFrames() {
50
+ return true;
51
+ }
52
+ /** Whether turn-stop signaling waits for transcript text. */
53
+ get waitForTranscript() {
54
+ return this._waitForTranscript;
55
+ }
56
+ set waitForTranscript(value) {
57
+ this._waitForTranscript = value;
58
+ }
59
+ /** Ready the strategy to detect the end of the turn now starting. */
60
+ async handleUserTurnStarted() {
61
+ await this._reset();
62
+ this._turnOpen = true;
63
+ }
64
+ /** Clear per-turn state once the turn has ended. */
65
+ async handleUserTurnStopped() {
66
+ await this._reset();
67
+ this._turnOpen = false;
68
+ }
69
+ /** Clear per-turn state. Runs at both turn boundaries. */
70
+ async _reset() {
71
+ this._text = "";
72
+ this._userSpeaking = false;
73
+ this._seenInterimResults = false;
74
+ this._turnAnnouncedElsewhere = false;
75
+ this._event.clear();
76
+ }
77
+ /**
78
+ * Set up the strategy.
79
+ *
80
+ * @param setup Configuration object containing setup parameters.
81
+ */
82
+ async setup(setup) {
83
+ await super.setup(setup);
84
+ this._task = this.createTask(() => this._taskHandler(), `${this}::_task_handler`);
85
+ }
86
+ /** Cleanup the strategy. */
87
+ async cleanup() {
88
+ await super.cleanup();
89
+ if (this._task) {
90
+ await this.taskManager.cancelTask(this._task);
91
+ this._task = null;
92
+ }
93
+ }
94
+ /**
95
+ * Process an incoming frame to update strategy state.
96
+ *
97
+ * Updates internal transcription text and speaking state. The user end
98
+ * turn will be triggered when appropriate based on the collected frames.
99
+ *
100
+ * @param frame The frame to be analyzed.
101
+ * @returns Always returns CONTINUE so subsequent stop strategies are evaluated.
102
+ */
103
+ async processFrame(frame) {
104
+ if (frame instanceof ProposedUserStartedSpeakingFrame) {
105
+ await this._handleUserStartedSpeaking({ announcedElsewhere: false });
106
+ }
107
+ else if (frame instanceof ProposedUserStoppedSpeakingFrame) {
108
+ await this._handleUserStoppedSpeaking({ announcedElsewhere: false });
109
+ }
110
+ else if (frame instanceof UserStartedSpeakingFrame) {
111
+ await this._handleUserStartedSpeaking({ announcedElsewhere: true });
112
+ }
113
+ else if (frame instanceof UserStoppedSpeakingFrame) {
114
+ await this._handleUserStoppedSpeaking({ announcedElsewhere: true });
115
+ }
116
+ else if (frame instanceof InterimTranscriptionFrame) {
117
+ await this._handleInterimTranscription(frame);
118
+ }
119
+ else if (frame instanceof TranscriptionFrame) {
120
+ await this._handleTranscription(frame);
121
+ }
122
+ return ProcessFrameResult.CONTINUE;
123
+ }
124
+ /** Handle the external signal that the user is speaking. */
125
+ async _handleUserStartedSpeaking(options) {
126
+ this._userSpeaking = true;
127
+ this._turnAnnouncedElsewhere = options.announcedElsewhere;
128
+ }
129
+ /** Handle the external signal that the user has stopped speaking. */
130
+ async _handleUserStoppedSpeaking(options) {
131
+ this._userSpeaking = false;
132
+ this._turnAnnouncedElsewhere = options.announcedElsewhere;
133
+ await this._maybeTriggerUserTurnStopped();
134
+ }
135
+ async _handleInterimTranscription(_frame) {
136
+ this._seenInterimResults = true;
137
+ }
138
+ /** Handle user transcription. */
139
+ async _handleTranscription(frame) {
140
+ this._text += frame.text;
141
+ // We just got a final result, so let's reset interim results.
142
+ this._seenInterimResults = false;
143
+ // Reset aggregation timer.
144
+ this._event.set();
145
+ }
146
+ /**
147
+ * Asynchronously monitor transcriptions and trigger user end turn when ready.
148
+ *
149
+ * If transcription text exists and the user is not currently speaking,
150
+ * triggers the user end turn. Handles multiple or delayed transcriptions
151
+ * gracefully.
152
+ */
153
+ async _taskHandler() {
154
+ while (true) {
155
+ try {
156
+ await waitFor(() => this._event.wait(), this._timeout);
157
+ this._event.clear();
158
+ }
159
+ catch (e) {
160
+ if (!(e instanceof TimeoutError))
161
+ throw e;
162
+ // Note: with waitForTranscript off (realtime mode) this fires on
163
+ // every tick. The _turnOpen check protects against unnecessarily
164
+ // triggering over and over (harmless, since the controller drops
165
+ // repeated triggers, but noisy).
166
+ if (this._turnOpen) {
167
+ await this._maybeTriggerUserTurnStopped();
168
+ }
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * End the turn, emitting the turn frame unless it was already announced.
174
+ *
175
+ * Reads the flag rather than taking it as an argument: finalization can
176
+ * land here from the transcript timeout above, long after the signal that
177
+ * set it.
178
+ */
179
+ async _triggerUserTurnStopped() {
180
+ if (this._turnAnnouncedElsewhere) {
181
+ logger.debug(`${this}: adopting a user turn stop decided elsewhere`);
182
+ }
183
+ else {
184
+ logger.debug(`${this}: resolving a proposed user turn stop`);
185
+ }
186
+ await this.triggerUserTurnStopped({
187
+ enableUserSpeakingFrames: this._turnAnnouncedElsewhere ? false : null,
188
+ });
189
+ }
190
+ async _maybeTriggerUserTurnStopped() {
191
+ if (this._userSpeaking) {
192
+ return;
193
+ }
194
+ if (!this._waitForTranscript) {
195
+ // Fire as soon as the external stop signal arrives —
196
+ // transcripts (if any) are off the latency critical path.
197
+ await this._triggerUserTurnStopped();
198
+ return;
199
+ }
200
+ if (!this._seenInterimResults && this._text) {
201
+ await this._triggerUserTurnStopped();
202
+ }
203
+ }
204
+ }
205
+ //# sourceMappingURL=external_user_turn_stop_strategy.js.map
@@ -0,0 +1,10 @@
1
+ export { BaseUserTurnStopStrategy, UserTurnStoppedParams, } from "./base_user_turn_stop_strategy.ts";
2
+ export { DeferredUserTurnStopStrategy, deferred } from "./deferred_user_turn_stop_strategy.ts";
3
+ export { EagerMatchPolicy, ExactMatch, NormalizedMatch } from "./eager_match_policy.ts";
4
+ export { EagerUserTurnStopStrategy } from "./eager_user_turn_stop_strategy.ts";
5
+ export { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.ts";
6
+ export { ExternalUserTurnStopStrategy } from "./external_user_turn_stop_strategy.ts";
7
+ export { LLMTurnCompletionUserTurnStopStrategy } from "./llm_turn_completion_user_turn_stop_strategy.ts";
8
+ export { SpeechTimeoutUserTurnStopStrategy } from "./speech_timeout_user_turn_stop_strategy.ts";
9
+ export { TurnAnalyzerUserTurnStopStrategy } from "./turn_analyzer_user_turn_stop_strategy.ts";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,15 @@
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/turns/user_stop/__init__.py
6
+ export { BaseUserTurnStopStrategy, UserTurnStoppedParams, } from "./base_user_turn_stop_strategy.js";
7
+ export { DeferredUserTurnStopStrategy, deferred } from "./deferred_user_turn_stop_strategy.js";
8
+ export { EagerMatchPolicy, ExactMatch, NormalizedMatch } from "./eager_match_policy.js";
9
+ export { EagerUserTurnStopStrategy } from "./eager_user_turn_stop_strategy.js";
10
+ export { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.js";
11
+ export { ExternalUserTurnStopStrategy } from "./external_user_turn_stop_strategy.js";
12
+ export { LLMTurnCompletionUserTurnStopStrategy } from "./llm_turn_completion_user_turn_stop_strategy.js";
13
+ export { SpeechTimeoutUserTurnStopStrategy } from "./speech_timeout_user_turn_stop_strategy.js";
14
+ export { TurnAnalyzerUserTurnStopStrategy } from "./turn_analyzer_user_turn_stop_strategy.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,44 @@
1
+ /** User turn stop strategy gated on the LLM's turn-completion verdict. */
2
+ import { type Frame } from "../../frames/frames.ts";
3
+ import type { ProcessFrameResult } from "../types.ts";
4
+ import { UserTurnCompletionConfig } from "../user_turn_completion_mixin.ts";
5
+ import type { BaseUserTurnStopStrategyOptions } from "./base_user_turn_stop_strategy.ts";
6
+ import { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.ts";
7
+ export interface LLMTurnCompletionUserTurnStopStrategyOptions extends BaseUserTurnStopStrategyOptions {
8
+ /**
9
+ * Configuration applied to the LLM via the `filterIncompleteUserTurns`
10
+ * setting on `StartFrame`. Defaults to `new UserTurnCompletionConfig()`.
11
+ */
12
+ config?: UserTurnCompletionConfig | null;
13
+ }
14
+ /**
15
+ * LLM-gated stop strategy.
16
+ *
17
+ * Extends `ExternalUserTurnCompletionStopStrategy` with the LLM-specific setup
18
+ * needed for the marker-based completion protocol: on `StartFrame`, pushes an
19
+ * `LLMUpdateSettingsFrame` downstream that enables `filterIncompleteUserTurns`
20
+ * on the LLM and seeds the `UserTurnCompletionConfig`. The update is marked
21
+ * `reachInactiveServices` so that every LLM behind an `LLMSwitcher` is
22
+ * configured, not only the one active at startup.
23
+ *
24
+ * Finalization itself is inherited: when the LLM service's
25
+ * `UserTurnCompletionLLMServiceMixin` detects a `●` marker, it broadcasts a
26
+ * `UserTurnInferenceCompletedFrame` and the base class fires
27
+ * `on_user_turn_stopped`. On `incomplete_short` / `incomplete_long` markers
28
+ * the mixin re-prompts internally and no completion frame is emitted, so the
29
+ * public stop event stays deferred.
30
+ *
31
+ * Install alongside one or more `deferred(...)`-wrapped detector strategies
32
+ * that drive `on_user_turn_inference_triggered` but leave finalization to
33
+ * this strategy.
34
+ */
35
+ export declare class LLMTurnCompletionUserTurnStopStrategy extends ExternalUserTurnCompletionStopStrategy {
36
+ protected _config: UserTurnCompletionConfig;
37
+ constructor(options?: LLMTurnCompletionUserTurnStopStrategyOptions);
38
+ /** Return the configured `UserTurnCompletionConfig`. */
39
+ get config(): UserTurnCompletionConfig;
40
+ /** Configure the LLM on start and delegate completion handling to the base. */
41
+ processFrame(frame: Frame): Promise<ProcessFrameResult>;
42
+ protected _configureLlm(): Promise<void>;
43
+ }
44
+ //# sourceMappingURL=llm_turn_completion_user_turn_stop_strategy.d.ts.map
@@ -0,0 +1,59 @@
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/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.py
6
+ /** User turn stop strategy gated on the LLM's turn-completion verdict. */
7
+ import { LLMUpdateSettingsFrame, StartFrame } from "../../frames/frames.js";
8
+ import { LLMSettings } from "../../services/settings.js";
9
+ import { UserTurnCompletionConfig } from "../user_turn_completion_mixin.js";
10
+ import { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.js";
11
+ /**
12
+ * LLM-gated stop strategy.
13
+ *
14
+ * Extends `ExternalUserTurnCompletionStopStrategy` with the LLM-specific setup
15
+ * needed for the marker-based completion protocol: on `StartFrame`, pushes an
16
+ * `LLMUpdateSettingsFrame` downstream that enables `filterIncompleteUserTurns`
17
+ * on the LLM and seeds the `UserTurnCompletionConfig`. The update is marked
18
+ * `reachInactiveServices` so that every LLM behind an `LLMSwitcher` is
19
+ * configured, not only the one active at startup.
20
+ *
21
+ * Finalization itself is inherited: when the LLM service's
22
+ * `UserTurnCompletionLLMServiceMixin` detects a `●` marker, it broadcasts a
23
+ * `UserTurnInferenceCompletedFrame` and the base class fires
24
+ * `on_user_turn_stopped`. On `incomplete_short` / `incomplete_long` markers
25
+ * the mixin re-prompts internally and no completion frame is emitted, so the
26
+ * public stop event stays deferred.
27
+ *
28
+ * Install alongside one or more `deferred(...)`-wrapped detector strategies
29
+ * that drive `on_user_turn_inference_triggered` but leave finalization to
30
+ * this strategy.
31
+ */
32
+ export class LLMTurnCompletionUserTurnStopStrategy extends ExternalUserTurnCompletionStopStrategy {
33
+ _config;
34
+ constructor(options = {}) {
35
+ super(options);
36
+ this._config = options.config ?? new UserTurnCompletionConfig();
37
+ }
38
+ /** Return the configured `UserTurnCompletionConfig`. */
39
+ get config() {
40
+ return this._config;
41
+ }
42
+ /** Configure the LLM on start and delegate completion handling to the base. */
43
+ async processFrame(frame) {
44
+ if (frame instanceof StartFrame) {
45
+ await this._configureLlm();
46
+ }
47
+ return await super.processFrame(frame);
48
+ }
49
+ async _configureLlm() {
50
+ await this.pushFrame(new LLMUpdateSettingsFrame({
51
+ delta: new LLMSettings({
52
+ filterIncompleteUserTurns: true,
53
+ userTurnCompletionConfig: this._config,
54
+ }),
55
+ reachInactiveServices: true,
56
+ }));
57
+ }
58
+ }
59
+ //# sourceMappingURL=llm_turn_completion_user_turn_stop_strategy.js.map
@@ -0,0 +1,140 @@
1
+ /** Speech timeout-based user turn stop strategy. */
2
+ import { type Task } from "@pipedog/asyncio";
3
+ import { type Frame, TranscriptionFrame, VADUserStartedSpeakingFrame, VADUserStoppedSpeakingFrame } from "../../frames/frames.ts";
4
+ import type { FrameProcessorSetup } from "../../processors/frame_processor.ts";
5
+ import { ProcessFrameResult } from "../types.ts";
6
+ import { BaseUserTurnStopStrategy, type BaseUserTurnStopStrategyOptions } from "./base_user_turn_stop_strategy.ts";
7
+ export interface SpeechTimeoutUserTurnStopStrategyOptions extends BaseUserTurnStopStrategyOptions {
8
+ /**
9
+ * Time to wait for the user to potentially say more after they pause
10
+ * speaking. Defaults to 0.6 seconds.
11
+ */
12
+ userSpeechTimeout?: number;
13
+ /**
14
+ * Whether to require at least one transcript before triggering end-of-turn.
15
+ * When true (default), turn-end fires only after the user-speech timer
16
+ * expires *and* at least one transcript has been received. When false, the
17
+ * strategy signals turn-end as soon as VAD reports end of speech and the
18
+ * user-speech timer has elapsed — independent of transcripts. Set this to
19
+ * false when local turn detection is the intended driver of the
20
+ * conversation (e.g. with a realtime LLM service consuming audio directly),
21
+ * so transcripts are off the latency critical path.
22
+ * `LLMContextAggregatorPair` flips this for you when
23
+ * `realtimeServiceMode: true`.
24
+ */
25
+ waitForTranscript?: boolean;
26
+ }
27
+ /**
28
+ * User turn stop strategy using two independent timers after VAD stop.
29
+ *
30
+ * After the user stops speaking (detected by VAD), this strategy runs two
31
+ * independent timers. The user turn stop is triggered only when both have
32
+ * finished and at least one transcript has been received:
33
+ *
34
+ * - userSpeechTimeout: Policy floor — the window in which the user may
35
+ * resume speaking after a pause. Always runs to completion.
36
+ * - sttTimeout: Safety net for STT latency — the P99 time for the STT
37
+ * service to return a final transcript after VAD stop, adjusted by the
38
+ * VAD stopSecs. Short-circuited when the STT service emits a finalized
39
+ * transcript (`TranscriptionFrame.finalized`), since finalization means
40
+ * STT has nothing more to send.
41
+ *
42
+ * Fallback: when a transcript arrives without a VAD stop event, the
43
+ * userSpeechTimeout timer measures inactivity since the last transcript
44
+ * (rearmed on each transcript). sttTimeout has no meaning here since it
45
+ * is defined relative to VAD stop, and STT has already emitted a
46
+ * transcript — so the stt wait is marked done immediately.
47
+ */
48
+ export declare class SpeechTimeoutUserTurnStopStrategy extends BaseUserTurnStopStrategy {
49
+ protected _userSpeechTimeout: number;
50
+ protected _waitForTranscript: boolean;
51
+ protected _sttTimeout: number;
52
+ protected _stopSecs: number;
53
+ protected _stopSecsWarned: boolean;
54
+ protected _text: string;
55
+ protected _vadUserSpeaking: boolean;
56
+ protected _transcriptFinalized: boolean;
57
+ protected _vadStopped: boolean;
58
+ protected _userSpeechTimeoutTask: Task<unknown> | null;
59
+ protected _sttTimeoutTask: Task<unknown> | null;
60
+ protected _userSpeechWaitDone: boolean;
61
+ protected _sttWaitDone: boolean;
62
+ constructor(options?: SpeechTimeoutUserTurnStopStrategyOptions);
63
+ /** Whether transcripts gate end-of-turn signalling. */
64
+ get waitForTranscript(): boolean;
65
+ set waitForTranscript(value: boolean);
66
+ /**
67
+ * Ready the strategy to detect the end of the turn now starting.
68
+ *
69
+ * `_vadUserSpeaking` is deliberately preserved: it reflects the live
70
+ * physical VAD state, not turn-scoped bookkeeping. VAD only re-emits a
71
+ * start after a stop, so clearing the flag for a turn that begins while
72
+ * the user is still speaking would leave the strategy with no active VAD
73
+ * reference, treating any transcript as a standalone utterance.
74
+ */
75
+ handleUserTurnStarted(): Promise<void>;
76
+ /** Clear per-turn state once the turn has ended. */
77
+ handleUserTurnStopped(): Promise<void>;
78
+ /** Clear per-turn state, optionally resetting the live VAD flag. */
79
+ protected _reset(options: {
80
+ clearVadUserSpeaking: boolean;
81
+ }): Promise<void>;
82
+ /**
83
+ * Drop whatever progress toward an end-of-turn has been made so far.
84
+ *
85
+ * Runs at a turn boundary, and whenever VAD reports the user speaking
86
+ * again — which makes earlier progress stale mid-turn.
87
+ */
88
+ protected _discardPendingEndOfTurn(): Promise<void>;
89
+ /**
90
+ * Set up the strategy.
91
+ *
92
+ * @param setup Configuration object containing setup parameters.
93
+ */
94
+ setup(setup: FrameProcessorSetup): Promise<void>;
95
+ /** Cleanup the strategy. */
96
+ cleanup(): Promise<void>;
97
+ /**
98
+ * Process an incoming frame to update strategy state.
99
+ *
100
+ * Updates internal transcription text and VAD state. The user end turn
101
+ * will be triggered when appropriate based on the collected frames.
102
+ *
103
+ * @param frame The frame to be analyzed.
104
+ * @returns Always returns CONTINUE so subsequent stop strategies are evaluated.
105
+ */
106
+ processFrame(frame: Frame): Promise<ProcessFrameResult>;
107
+ /** Handle when the VAD indicates the user is speaking. */
108
+ protected _handleVadUserStartedSpeaking(_frame: VADUserStartedSpeakingFrame): Promise<void>;
109
+ /** Handle when the VAD indicates the user has stopped speaking. */
110
+ protected _handleVadUserStoppedSpeaking(frame: VADUserStoppedSpeakingFrame): Promise<void>;
111
+ /** Handle user transcription. */
112
+ protected _handleTranscription(frame: TranscriptionFrame): Promise<void>;
113
+ /** Cancel any running user-speech timer and start a fresh one. */
114
+ protected _restartUserSpeechTimer(): Promise<void>;
115
+ /**
116
+ * Wait userSpeechTimeout then attempt to trigger user turn stopped.
117
+ *
118
+ * @param timeout The timeout in seconds to wait.
119
+ */
120
+ protected _userSpeechTimeoutHandler(timeout: number): Promise<void>;
121
+ /**
122
+ * Wait sttTimeout then attempt to trigger user turn stopped.
123
+ *
124
+ * @param timeout The timeout in seconds to wait.
125
+ */
126
+ protected _sttTimeoutHandler(timeout: number): Promise<void>;
127
+ /**
128
+ * Trigger user turn stopped if all required conditions are met.
129
+ *
130
+ * Both timers must be done (stt is marked done immediately on the
131
+ * fallback path and when finalization short-circuits the safety net),
132
+ * the user must not be currently speaking, and — when
133
+ * `waitForTranscript` is true — at least one transcript must have been
134
+ * received.
135
+ */
136
+ protected _maybeTriggerUserTurnStopped(): Promise<void>;
137
+ /** Cancel any running timer tasks and clear the handles. */
138
+ protected _cancelAllTasks(): Promise<void>;
139
+ }
140
+ //# sourceMappingURL=speech_timeout_user_turn_stop_strategy.d.ts.map