@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,55 @@
1
+ /** Configuration for recovering from user turns that end without a transcript. */
2
+ export declare const DEFAULT_EMPTY_USER_TURN_INTERRUPTED_PROMPT: string;
3
+ export interface EmptyUserTurnConfigOptions {
4
+ /**
5
+ * Developer message for an empty turn that interrupted the bot. `null`
6
+ * leaves such turns unanswered.
7
+ */
8
+ interruptedPrompt?: string | null;
9
+ /**
10
+ * Developer message for an empty turn while the bot was idle. `null` (the
11
+ * default) leaves such turns unanswered.
12
+ */
13
+ idlePrompt?: string | null;
14
+ /**
15
+ * How many empty turns in a row are answered. Further ones are left
16
+ * unanswered until the user says something that is transcribed.
17
+ */
18
+ maxConsecutiveRecoveries?: number;
19
+ }
20
+ /**
21
+ * How the user aggregator responds to a user turn with no transcript.
22
+ *
23
+ * A user turn can start on voice activity alone and then end with no
24
+ * transcript: a cough, background noise, or speech the STT could not
25
+ * recognize. Nothing is written to the context and the LLM does not run.
26
+ * With this config, the aggregator can append a developer message for such
27
+ * a turn and run the LLM once.
28
+ *
29
+ * Either case may be noise. They differ in what happens if the turn goes
30
+ * unanswered, so each has its own prompt:
31
+ *
32
+ * - Interrupted: the turn started while the bot was thinking, speaking or
33
+ * running a function call, and cut it off. Unanswered, the bot stays
34
+ * silent mid-response, so by default the LLM runs and the bot asks the
35
+ * user to repeat or picks up where it left off. A turn before the bot has
36
+ * first finished speaking counts as interrupted too.
37
+ * - Idle: the bot had finished and was waiting for the user. The
38
+ * conversation isn't stuck, and answering what may be noise would be
39
+ * intrusive, so by default the turn gets no answer.
40
+ *
41
+ * - `interruptedPrompt`: Developer message for an empty turn that interrupted
42
+ * the bot. `null` leaves such turns unanswered.
43
+ * - `idlePrompt`: Developer message for an empty turn while the bot was idle.
44
+ * `null` (the default) leaves such turns unanswered.
45
+ * - `maxConsecutiveRecoveries`: How many empty turns in a row are answered.
46
+ * Further ones are left unanswered until the user says something that is
47
+ * transcribed.
48
+ */
49
+ export declare class EmptyUserTurnConfig {
50
+ interruptedPrompt: string | null;
51
+ idlePrompt: string | null;
52
+ maxConsecutiveRecoveries: number;
53
+ constructor(options?: EmptyUserTurnConfigOptions);
54
+ }
55
+ //# sourceMappingURL=empty_user_turn.d.ts.map
@@ -0,0 +1,53 @@
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/empty_user_turn.py
6
+ /** Configuration for recovering from user turns that end without a transcript. */
7
+ export const DEFAULT_EMPTY_USER_TURN_INTERRUPTED_PROMPT = "The user may have said something while you were responding, but it was not " +
8
+ "recognized. Your response was cut off there, and the conversation only includes " +
9
+ "the part they heard, which may be none of it. Briefly ask them to repeat what they said, and " +
10
+ "repeat any question of yours they may have missed.";
11
+ /**
12
+ * How the user aggregator responds to a user turn with no transcript.
13
+ *
14
+ * A user turn can start on voice activity alone and then end with no
15
+ * transcript: a cough, background noise, or speech the STT could not
16
+ * recognize. Nothing is written to the context and the LLM does not run.
17
+ * With this config, the aggregator can append a developer message for such
18
+ * a turn and run the LLM once.
19
+ *
20
+ * Either case may be noise. They differ in what happens if the turn goes
21
+ * unanswered, so each has its own prompt:
22
+ *
23
+ * - Interrupted: the turn started while the bot was thinking, speaking or
24
+ * running a function call, and cut it off. Unanswered, the bot stays
25
+ * silent mid-response, so by default the LLM runs and the bot asks the
26
+ * user to repeat or picks up where it left off. A turn before the bot has
27
+ * first finished speaking counts as interrupted too.
28
+ * - Idle: the bot had finished and was waiting for the user. The
29
+ * conversation isn't stuck, and answering what may be noise would be
30
+ * intrusive, so by default the turn gets no answer.
31
+ *
32
+ * - `interruptedPrompt`: Developer message for an empty turn that interrupted
33
+ * the bot. `null` leaves such turns unanswered.
34
+ * - `idlePrompt`: Developer message for an empty turn while the bot was idle.
35
+ * `null` (the default) leaves such turns unanswered.
36
+ * - `maxConsecutiveRecoveries`: How many empty turns in a row are answered.
37
+ * Further ones are left unanswered until the user says something that is
38
+ * transcribed.
39
+ */
40
+ export class EmptyUserTurnConfig {
41
+ interruptedPrompt;
42
+ idlePrompt;
43
+ maxConsecutiveRecoveries;
44
+ constructor(options = {}) {
45
+ this.interruptedPrompt =
46
+ options.interruptedPrompt === undefined
47
+ ? DEFAULT_EMPTY_USER_TURN_INTERRUPTED_PROMPT
48
+ : options.interruptedPrompt;
49
+ this.idlePrompt = options.idlePrompt ?? null;
50
+ this.maxConsecutiveRecoveries = options.maxConsecutiveRecoveries ?? 1;
51
+ }
52
+ }
53
+ //# sourceMappingURL=empty_user_turn.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
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/__init__.py
6
+ // Upstream's `__init__.py` is empty: import the package's modules directly.
7
+ export {};
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,169 @@
1
+ /** Decision engine holding a speculative bot response until its turn is confirmed. */
2
+ import { type Frame } from "../frames/frames.ts";
3
+ import { FrameDirection } from "../processors/frame_processor.ts";
4
+ import { FrameQueue } from "../utils/frame_queue.ts";
5
+ /** A frame paired with the direction it travels in. */
6
+ export type GatedFrame = [Frame, FrameDirection];
7
+ /**
8
+ * What the gate is doing with the frames passing through it.
9
+ *
10
+ * - `OPEN`: emitting everything.
11
+ * - `HOLDING`: holding a speculative response until it is confirmed.
12
+ * - `DROPPING`: discarding the rest of a withdrawn speculative response.
13
+ */
14
+ export declare const SpeculationState: {
15
+ readonly OPEN: "open";
16
+ readonly HOLDING: "holding";
17
+ readonly DROPPING: "dropping";
18
+ };
19
+ export type SpeculationState = (typeof SpeculationState)[keyof typeof SpeculationState];
20
+ export interface SpeculationGateOptions {
21
+ /** Label used in log messages, typically the owning service's. */
22
+ name?: string;
23
+ }
24
+ /**
25
+ * Decides which frames of a speculative bot response may be emitted, and when.
26
+ *
27
+ * A speculative response is generated from an eager end of turn — a
28
+ * provisional guess that the user has finished talking — so it may answer a
29
+ * transcript the user never actually completed. This holds everything such a
30
+ * response produces until the turn is confirmed, then releases it, or discards
31
+ * it if the guess is withdrawn.
32
+ *
33
+ * A host calls `beginSpeculation` when it starts an inference for a turn that
34
+ * may not have ended, and the response that follows is held from its
35
+ * LLMFullResponseStartFrame onward. A UserStoppedSpeakingFrame releases it —
36
+ * the turn it answers has ended — and an EagerEndOfTurnCancelFrame discards
37
+ * it. Neither names a response: only one speculation is ever in flight, since
38
+ * producing one takes a whole user turn.
39
+ *
40
+ * Whether an inference is still answering an unconfirmed turn is therefore the
41
+ * gate's to answer, through `isSpeculating`, rather than something a host
42
+ * tracks alongside it. A host that kept its own copy would have to clear it on
43
+ * every path that settles a speculation, and the two would disagree on the
44
+ * paths it missed.
45
+ *
46
+ * The gate also tracks whether the turn has ended, because a confirmation can
47
+ * arrive before the inference it confirms — Pipecat dispatches system frames
48
+ * ahead of the queued frames they pass — and a response for a turn already
49
+ * over is not held at all.
50
+ *
51
+ * Both of those resolving frames reach the gate ahead of anything queued
52
+ * behind them, which is what keeps a withdrawal in front of the turn end that
53
+ * follows it. A withdrawal arriving second would find the response already
54
+ * released.
55
+ *
56
+ * While holding, everything is held in arrival order except system frames,
57
+ * which are out-of-band throughout Pipecat — and which carry the verdicts the
58
+ * gate is waiting for, so holding them would deadlock it. That includes
59
+ * uninterruptible frames (`Frame.interruptible` false), which are ordered like
60
+ * any other frame; discarding a speculation keeps them and emits them on,
61
+ * since they can belong to work started before it.
62
+ *
63
+ * This decides rather than processes frames: `process` is synchronous and
64
+ * returns the frames its caller should push, in order. A host can therefore
65
+ * push from several tasks at once — every state transition completes without
66
+ * an await for another task to interleave with. LLMService hosts one, gating
67
+ * every response it produces.
68
+ *
69
+ * Holding is unbounded here. Whoever started the speculation bounds it and
70
+ * withdraws it if it goes unresolved — see EagerUserTurnStopStrategy — so
71
+ * every way a speculation ends reaches this gate as a frame, and the gate
72
+ * never has to abandon one on its own.
73
+ *
74
+ * @example
75
+ * for (const [frame, direction] of gate.process(frame, direction)) {
76
+ * await this.pushFrame(frame, direction);
77
+ * }
78
+ */
79
+ export declare class SpeculationGate {
80
+ protected _name: string;
81
+ protected _state: SpeculationState;
82
+ protected _speculating: boolean;
83
+ protected _turnEnded: boolean;
84
+ protected _buffer: FrameQueue<GatedFrame>;
85
+ /**
86
+ * Initialize the speculation gate.
87
+ *
88
+ * @param options.name Label used in log messages, typically the owning service's.
89
+ */
90
+ constructor(options?: SpeculationGateOptions);
91
+ toString(): string;
92
+ /** What the gate is currently doing with frames passing through it. */
93
+ get state(): SpeculationState;
94
+ /**
95
+ * Whether the inference in flight answers an unconfirmed turn.
96
+ *
97
+ * Set from `beginSpeculation` until the turn settles it, so it covers the
98
+ * whole inference rather than only the stretch with frames in flight. False
99
+ * means whatever is generating now answers a turn that has ended, and its
100
+ * side effects can be let through. Use `state` to ask the narrower question
101
+ * of whether frames are being held right now.
102
+ */
103
+ get isSpeculating(): boolean;
104
+ /**
105
+ * Take note of an inference whose turn may not have ended.
106
+ *
107
+ * Called when the inference starts rather than when its first response
108
+ * frame arrives, so a turn confirmed in between is already accounted for by
109
+ * the time the response shows up.
110
+ *
111
+ * @param speculation Whether the inference answers a turn that may still be
112
+ * open, rather than an ordinary one against a turn that has ended.
113
+ */
114
+ beginSpeculation(speculation: boolean): void;
115
+ /**
116
+ * Decide what a frame passing through the gate releases.
117
+ *
118
+ * @param frame The frame to process.
119
+ * @param direction The direction the frame travels in.
120
+ * @returns The frames to push, in order. Empty while a frame is held or
121
+ * dropped; longer than one frame when a verdict releases what was held
122
+ * behind it.
123
+ */
124
+ process(frame: Frame, direction: FrameDirection): GatedFrame[];
125
+ /**
126
+ * Leave the hold.
127
+ *
128
+ * The single exit from `HOLDING`. Whether the speculation itself is over is
129
+ * a separate question — a response superseded by a new one ends its hold
130
+ * while the inference that replaced it is still pending.
131
+ *
132
+ * @param state What the gate does with the frames that follow.
133
+ */
134
+ protected _endHold(state: SpeculationState): void;
135
+ /** Decide what to do with the response opening here. */
136
+ protected _begin(): GatedFrame[];
137
+ /**
138
+ * Release whatever the turn ending confirms.
139
+ *
140
+ * @returns The frames the confirmation releases, in arrival order.
141
+ */
142
+ protected _release(): GatedFrame[];
143
+ /**
144
+ * Discard the response a withdrawal or an interruption voids.
145
+ *
146
+ * A withdrawal that arrives before the response it voids needs no memory:
147
+ * the response is held on arrival, and whatever answers the turn instead
148
+ * supersedes it — or the bound on the hold runs out if nothing does.
149
+ *
150
+ * @returns Whatever the discarded response was holding back that has to be
151
+ * delivered anyway.
152
+ */
153
+ protected _discard(): GatedFrame[];
154
+ /**
155
+ * Drop the held response.
156
+ *
157
+ * @param reason Why it is being dropped, for the log line.
158
+ * @param options.keepDropping Whether the rest of the response may still be
159
+ * queued behind us and has to be dropped as it arrives. False when
160
+ * something already past it proves there is no tail left.
161
+ * @returns The held frames that must be delivered anyway, in arrival order.
162
+ */
163
+ protected _dropHeld(reason: string, options: {
164
+ keepDropping: boolean;
165
+ }): GatedFrame[];
166
+ /** Take everything the buffer still holds, in the order it arrived. */
167
+ protected _flush(): GatedFrame[];
168
+ }
169
+ //# sourceMappingURL=speculation_gate.d.ts.map
@@ -0,0 +1,294 @@
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/speculation_gate.py
6
+ /** Decision engine holding a speculative bot response until its turn is confirmed. */
7
+ import { EagerEndOfTurnCancelFrame, EndFrame, InterruptionFrame, LLMFullResponseEndFrame, LLMFullResponseStartFrame, SystemFrame, UserStartedSpeakingFrame, UserStoppedSpeakingFrame, } from "../frames/frames.js";
8
+ import { FrameDirection } from "../processors/frame_processor.js";
9
+ import { FrameQueue } from "../utils/frame_queue.js";
10
+ import { logger } from "../utils/logger.js";
11
+ /**
12
+ * What the gate is doing with the frames passing through it.
13
+ *
14
+ * - `OPEN`: emitting everything.
15
+ * - `HOLDING`: holding a speculative response until it is confirmed.
16
+ * - `DROPPING`: discarding the rest of a withdrawn speculative response.
17
+ */
18
+ export const SpeculationState = {
19
+ OPEN: "open",
20
+ HOLDING: "holding",
21
+ DROPPING: "dropping",
22
+ };
23
+ /**
24
+ * Decides which frames of a speculative bot response may be emitted, and when.
25
+ *
26
+ * A speculative response is generated from an eager end of turn — a
27
+ * provisional guess that the user has finished talking — so it may answer a
28
+ * transcript the user never actually completed. This holds everything such a
29
+ * response produces until the turn is confirmed, then releases it, or discards
30
+ * it if the guess is withdrawn.
31
+ *
32
+ * A host calls `beginSpeculation` when it starts an inference for a turn that
33
+ * may not have ended, and the response that follows is held from its
34
+ * LLMFullResponseStartFrame onward. A UserStoppedSpeakingFrame releases it —
35
+ * the turn it answers has ended — and an EagerEndOfTurnCancelFrame discards
36
+ * it. Neither names a response: only one speculation is ever in flight, since
37
+ * producing one takes a whole user turn.
38
+ *
39
+ * Whether an inference is still answering an unconfirmed turn is therefore the
40
+ * gate's to answer, through `isSpeculating`, rather than something a host
41
+ * tracks alongside it. A host that kept its own copy would have to clear it on
42
+ * every path that settles a speculation, and the two would disagree on the
43
+ * paths it missed.
44
+ *
45
+ * The gate also tracks whether the turn has ended, because a confirmation can
46
+ * arrive before the inference it confirms — Pipecat dispatches system frames
47
+ * ahead of the queued frames they pass — and a response for a turn already
48
+ * over is not held at all.
49
+ *
50
+ * Both of those resolving frames reach the gate ahead of anything queued
51
+ * behind them, which is what keeps a withdrawal in front of the turn end that
52
+ * follows it. A withdrawal arriving second would find the response already
53
+ * released.
54
+ *
55
+ * While holding, everything is held in arrival order except system frames,
56
+ * which are out-of-band throughout Pipecat — and which carry the verdicts the
57
+ * gate is waiting for, so holding them would deadlock it. That includes
58
+ * uninterruptible frames (`Frame.interruptible` false), which are ordered like
59
+ * any other frame; discarding a speculation keeps them and emits them on,
60
+ * since they can belong to work started before it.
61
+ *
62
+ * This decides rather than processes frames: `process` is synchronous and
63
+ * returns the frames its caller should push, in order. A host can therefore
64
+ * push from several tasks at once — every state transition completes without
65
+ * an await for another task to interleave with. LLMService hosts one, gating
66
+ * every response it produces.
67
+ *
68
+ * Holding is unbounded here. Whoever started the speculation bounds it and
69
+ * withdraws it if it goes unresolved — see EagerUserTurnStopStrategy — so
70
+ * every way a speculation ends reaches this gate as a frame, and the gate
71
+ * never has to abandon one on its own.
72
+ *
73
+ * @example
74
+ * for (const [frame, direction] of gate.process(frame, direction)) {
75
+ * await this.pushFrame(frame, direction);
76
+ * }
77
+ */
78
+ export class SpeculationGate {
79
+ _name;
80
+ _state = SpeculationState.OPEN;
81
+ // Whether the inference in flight answers a turn that has not been
82
+ // confirmed. Set when the inference starts, cleared when the turn settles it
83
+ // either way — so it outlives any one response frame.
84
+ _speculating = false;
85
+ // Whether the turn ended since it was last seen to start. A speculation
86
+ // registered while this is set answers a turn that is already over, so it is
87
+ // not held. Starts false, so a gate that never sees turn frames holds rather
88
+ // than speaks — the strategy's bound then recovers it.
89
+ _turnEnded = false;
90
+ _buffer = new FrameQueue((item) => item[0]);
91
+ /**
92
+ * Initialize the speculation gate.
93
+ *
94
+ * @param options.name Label used in log messages, typically the owning service's.
95
+ */
96
+ constructor(options = {}) {
97
+ this._name = options.name ?? "SpeculationGate";
98
+ }
99
+ toString() {
100
+ return this._name;
101
+ }
102
+ /** What the gate is currently doing with frames passing through it. */
103
+ get state() {
104
+ return this._state;
105
+ }
106
+ /**
107
+ * Whether the inference in flight answers an unconfirmed turn.
108
+ *
109
+ * Set from `beginSpeculation` until the turn settles it, so it covers the
110
+ * whole inference rather than only the stretch with frames in flight. False
111
+ * means whatever is generating now answers a turn that has ended, and its
112
+ * side effects can be let through. Use `state` to ask the narrower question
113
+ * of whether frames are being held right now.
114
+ */
115
+ get isSpeculating() {
116
+ return this._speculating;
117
+ }
118
+ /**
119
+ * Take note of an inference whose turn may not have ended.
120
+ *
121
+ * Called when the inference starts rather than when its first response
122
+ * frame arrives, so a turn confirmed in between is already accounted for by
123
+ * the time the response shows up.
124
+ *
125
+ * @param speculation Whether the inference answers a turn that may still be
126
+ * open, rather than an ordinary one against a turn that has ended.
127
+ */
128
+ beginSpeculation(speculation) {
129
+ // A turn that ended before the inference reached us leaves nothing to
130
+ // hold for: the response answers a turn that is already over.
131
+ this._speculating = speculation && !this._turnEnded;
132
+ }
133
+ /**
134
+ * Decide what a frame passing through the gate releases.
135
+ *
136
+ * @param frame The frame to process.
137
+ * @param direction The direction the frame travels in.
138
+ * @returns The frames to push, in order. Empty while a frame is held or
139
+ * dropped; longer than one frame when a verdict releases what was held
140
+ * behind it.
141
+ */
142
+ process(frame, direction) {
143
+ if (direction !== FrameDirection.DOWNSTREAM) {
144
+ return [[frame, direction]];
145
+ }
146
+ if (frame instanceof SystemFrame) {
147
+ // Emitted before the verdict is applied, so a released response still
148
+ // follows the frame that ended the turn it answers.
149
+ let emitted = [[frame, direction]];
150
+ if (frame instanceof EagerEndOfTurnCancelFrame || frame instanceof InterruptionFrame) {
151
+ emitted = emitted.concat(this._discard());
152
+ }
153
+ else if (frame instanceof UserStoppedSpeakingFrame) {
154
+ emitted = emitted.concat(this._release());
155
+ }
156
+ else if (frame instanceof UserStartedSpeakingFrame) {
157
+ // A turn is open again, so an inference started from here on answers
158
+ // something that may not have ended.
159
+ this._turnEnded = false;
160
+ }
161
+ return emitted;
162
+ }
163
+ if (frame instanceof EndFrame) {
164
+ // Uninterruptible, and the runner awaits it: holding it hangs shutdown.
165
+ // Discarding first delivers whatever is held that has to outlive the
166
+ // speculation, ahead of it.
167
+ return [...this._discard(), [frame, direction]];
168
+ }
169
+ const emitted = [];
170
+ if (frame instanceof LLMFullResponseStartFrame) {
171
+ emitted.push(...this._begin());
172
+ }
173
+ if (this._state === SpeculationState.HOLDING) {
174
+ // Held in arrival order, uninterruptible frames included: they are
175
+ // ordered like any other, and the buffer preserves them when the
176
+ // speculation around them is discarded.
177
+ this._buffer.putNowait([frame, direction]);
178
+ }
179
+ else if (this._state === SpeculationState.DROPPING) {
180
+ if (!frame.interruptible) {
181
+ // Not part of the response being dropped, and nothing is being held
182
+ // back, so emitting it keeps it in order.
183
+ emitted.push([frame, direction]);
184
+ }
185
+ else if (frame instanceof LLMFullResponseEndFrame) {
186
+ this._state = SpeculationState.OPEN;
187
+ }
188
+ }
189
+ else {
190
+ emitted.push([frame, direction]);
191
+ }
192
+ return emitted;
193
+ }
194
+ /**
195
+ * Leave the hold.
196
+ *
197
+ * The single exit from `HOLDING`. Whether the speculation itself is over is
198
+ * a separate question — a response superseded by a new one ends its hold
199
+ * while the inference that replaced it is still pending.
200
+ *
201
+ * @param state What the gate does with the frames that follow.
202
+ */
203
+ _endHold(state) {
204
+ this._state = state;
205
+ }
206
+ /** Decide what to do with the response opening here. */
207
+ _begin() {
208
+ const emitted = [];
209
+ if (this._state !== SpeculationState.OPEN) {
210
+ // A new response supersedes the one we were holding or dropping. A
211
+ // withdrawn response may never send its end frame, since its generation
212
+ // was cancelled mid-flight, and an unconfirmed one is void once
213
+ // something else starts answering. Nothing of it can still be queued
214
+ // behind this frame, so there is no tail left to drop.
215
+ emitted.push(...this._dropHeld("superseded by a new response", { keepDropping: false }));
216
+ }
217
+ // Whether this response is speculative was settled when its inference
218
+ // started, so a turn confirmed since then already cleared it.
219
+ if (!this._speculating) {
220
+ return emitted;
221
+ }
222
+ this._state = SpeculationState.HOLDING;
223
+ return emitted;
224
+ }
225
+ /**
226
+ * Release whatever the turn ending confirms.
227
+ *
228
+ * @returns The frames the confirmation releases, in arrival order.
229
+ */
230
+ _release() {
231
+ // Remembered so an inference that arrives after this is not held: the turn
232
+ // it answers is already over, and nothing follows to release it.
233
+ this._turnEnded = true;
234
+ // Nothing this inference still produces is speculative either — including
235
+ // a tool call it has yet to reach.
236
+ this._speculating = false;
237
+ if (this._state !== SpeculationState.HOLDING) {
238
+ return [];
239
+ }
240
+ logger.debug(`${this}: releasing speculative response (${this._buffer.qsize()} frames)`);
241
+ this._endHold(SpeculationState.OPEN);
242
+ return this._flush();
243
+ }
244
+ /**
245
+ * Discard the response a withdrawal or an interruption voids.
246
+ *
247
+ * A withdrawal that arrives before the response it voids needs no memory:
248
+ * the response is held on arrival, and whatever answers the turn instead
249
+ * supersedes it — or the bound on the hold runs out if nothing does.
250
+ *
251
+ * @returns Whatever the discarded response was holding back that has to be
252
+ * delivered anyway.
253
+ */
254
+ _discard() {
255
+ // The speculation is void, so nothing the inference still produces
256
+ // answers a turn worth holding for.
257
+ this._speculating = false;
258
+ return this._dropHeld("withdrawn", { keepDropping: true });
259
+ }
260
+ /**
261
+ * Drop the held response.
262
+ *
263
+ * @param reason Why it is being dropped, for the log line.
264
+ * @param options.keepDropping Whether the rest of the response may still be
265
+ * queued behind us and has to be dropped as it arrives. False when
266
+ * something already past it proves there is no tail left.
267
+ * @returns The held frames that must be delivered anyway, in arrival order.
268
+ */
269
+ _dropHeld(reason, options) {
270
+ if (this._state !== SpeculationState.HOLDING) {
271
+ this._state = SpeculationState.OPEN;
272
+ return [];
273
+ }
274
+ logger.debug(`${this}: discarding speculative response (${this._buffer.qsize()} frames, ${reason})`);
275
+ // A response that already ended has no tail left to drop.
276
+ const complete = this._buffer.hasFrame(LLMFullResponseEndFrame);
277
+ // Drops the speculative response and keeps anything that must always be
278
+ // delivered, which is then emitted rather than discarded with it.
279
+ this._buffer.reset();
280
+ this._endHold(options.keepDropping && !complete ? SpeculationState.DROPPING : SpeculationState.OPEN);
281
+ return this._flush();
282
+ }
283
+ /** Take everything the buffer still holds, in the order it arrived. */
284
+ _flush() {
285
+ const emitted = [];
286
+ while (!this._buffer.empty()) {
287
+ const [frame, direction] = this._buffer.getNowait();
288
+ this._buffer.taskDone();
289
+ emitted.push([frame, direction]);
290
+ }
291
+ return emitted;
292
+ }
293
+ }
294
+ //# sourceMappingURL=speculation_gate.js.map
@@ -0,0 +1,33 @@
1
+ /** Shared types for user turn strategy frame processing. */
2
+ /**
3
+ * Result of processing a frame in a user turn strategy.
4
+ *
5
+ * Controls whether the strategy loop in the controller continues to the
6
+ * next strategy or stops early.
7
+ *
8
+ * - CONTINUE: Continue to the next strategy in the loop.
9
+ * - STOP: Stop evaluating further strategies for this frame.
10
+ */
11
+ export declare const ProcessFrameResult: {
12
+ readonly CONTINUE: "continue";
13
+ readonly STOP: "stop";
14
+ };
15
+ export type ProcessFrameResult = (typeof ProcessFrameResult)[keyof typeof ProcessFrameResult];
16
+ export interface UserTurnSpeculationOptions {
17
+ /** The user turn text the inference was run against. */
18
+ text: string;
19
+ }
20
+ /**
21
+ * A speculative inference a stop strategy has in flight.
22
+ *
23
+ * Produced from an eager end of turn: the turn is not over yet, so the
24
+ * inference runs against a provisional context and its response is held back
25
+ * until the turn is confirmed.
26
+ *
27
+ * - `text`: The user turn text the inference was run against.
28
+ */
29
+ export declare class UserTurnSpeculation {
30
+ text: string;
31
+ constructor(options: UserTurnSpeculationOptions);
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,35 @@
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/types.py
6
+ /** Shared types for user turn strategy frame processing. */
7
+ /**
8
+ * Result of processing a frame in a user turn strategy.
9
+ *
10
+ * Controls whether the strategy loop in the controller continues to the
11
+ * next strategy or stops early.
12
+ *
13
+ * - CONTINUE: Continue to the next strategy in the loop.
14
+ * - STOP: Stop evaluating further strategies for this frame.
15
+ */
16
+ export const ProcessFrameResult = {
17
+ CONTINUE: "continue",
18
+ STOP: "stop",
19
+ };
20
+ /**
21
+ * A speculative inference a stop strategy has in flight.
22
+ *
23
+ * Produced from an eager end of turn: the turn is not over yet, so the
24
+ * inference runs against a provisional context and its response is held back
25
+ * until the turn is confirmed.
26
+ *
27
+ * - `text`: The user turn text the inference was run against.
28
+ */
29
+ export class UserTurnSpeculation {
30
+ text;
31
+ constructor(options) {
32
+ this.text = options.text;
33
+ }
34
+ }
35
+ //# sourceMappingURL=types.js.map