@pipedog/core 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/engine.d.ts +60 -0
  42. package/dist/audio/resamplers/engine.js +89 -0
  43. package/dist/audio/resamplers/index.d.ts +2 -0
  44. package/dist/audio/resamplers/index.js +8 -0
  45. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  46. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  47. package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
  48. package/dist/audio/resamplers/sinc_engine.js +235 -0
  49. package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
  50. package/dist/audio/resamplers/soxr_resampler.js +79 -0
  51. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
  52. package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
  53. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  54. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  55. package/dist/audio/turn/index.d.ts +2 -0
  56. package/dist/audio/turn/index.js +8 -0
  57. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  58. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  59. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  60. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  61. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  62. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
  63. package/dist/audio/utils.d.ts +224 -0
  64. package/dist/audio/utils.js +634 -0
  65. package/dist/audio/vad/data/index.d.ts +2 -0
  66. package/dist/audio/vad/data/index.js +8 -0
  67. package/dist/audio/vad/index.d.ts +2 -0
  68. package/dist/audio/vad/index.js +8 -0
  69. package/dist/audio/vad/vad_analyzer.d.ts +134 -0
  70. package/dist/audio/vad/vad_analyzer.js +249 -0
  71. package/dist/audio/vad/vad_controller.d.ts +143 -0
  72. package/dist/audio/vad/vad_controller.js +228 -0
  73. package/dist/audio/volume.d.ts +38 -0
  74. package/dist/audio/volume.js +75 -0
  75. package/dist/bus/adapters/base.d.ts +35 -0
  76. package/dist/bus/adapters/base.js +19 -0
  77. package/dist/bus/adapters/index.d.ts +10 -0
  78. package/dist/bus/adapters/index.js +15 -0
  79. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  80. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  81. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  82. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  83. package/dist/bus/bridge_processor.d.ts +111 -0
  84. package/dist/bus/bridge_processor.js +166 -0
  85. package/dist/bus/bus.d.ts +110 -0
  86. package/dist/bus/bus.js +200 -0
  87. package/dist/bus/index.d.ts +22 -0
  88. package/dist/bus/index.js +27 -0
  89. package/dist/bus/local/async_queue.d.ts +12 -0
  90. package/dist/bus/local/async_queue.js +21 -0
  91. package/dist/bus/local/index.d.ts +3 -0
  92. package/dist/bus/local/index.js +8 -0
  93. package/dist/bus/messages.d.ts +378 -0
  94. package/dist/bus/messages.js +357 -0
  95. package/dist/bus/network/index.d.ts +16 -0
  96. package/dist/bus/network/index.js +21 -0
  97. package/dist/bus/queue.d.ts +27 -0
  98. package/dist/bus/queue.js +51 -0
  99. package/dist/bus/serializers/base.d.ts +25 -0
  100. package/dist/bus/serializers/base.js +14 -0
  101. package/dist/bus/serializers/index.d.ts +9 -0
  102. package/dist/bus/serializers/index.js +14 -0
  103. package/dist/bus/serializers/json.d.ts +77 -0
  104. package/dist/bus/serializers/json.js +367 -0
  105. package/dist/bus/subscriber.d.ts +46 -0
  106. package/dist/bus/subscriber.js +27 -0
  107. package/dist/bus/ui/index.d.ts +3 -0
  108. package/dist/bus/ui/index.js +8 -0
  109. package/dist/bus/ui/messages.d.ts +186 -0
  110. package/dist/bus/ui/messages.js +171 -0
  111. package/dist/classifiers/base_classifier.d.ts +263 -0
  112. package/dist/classifiers/base_classifier.js +346 -0
  113. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  114. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  115. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  116. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  117. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  118. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  119. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  120. package/dist/classifiers/cloudflare/index.js +8 -0
  121. package/dist/classifiers/http_client.d.ts +70 -0
  122. package/dist/classifiers/http_client.js +161 -0
  123. package/dist/classifiers/index.d.ts +2 -0
  124. package/dist/classifiers/index.js +8 -0
  125. package/dist/classifiers/jev/classifier.d.ts +8 -0
  126. package/dist/classifiers/jev/classifier.js +13 -0
  127. package/dist/classifiers/jev/client.d.ts +8 -0
  128. package/dist/classifiers/jev/client.js +13 -0
  129. package/dist/classifiers/jev/index.d.ts +2 -0
  130. package/dist/classifiers/jev/index.js +8 -0
  131. package/dist/classifiers/llm/classifier.d.ts +72 -0
  132. package/dist/classifiers/llm/classifier.js +304 -0
  133. package/dist/classifiers/llm/index.d.ts +2 -0
  134. package/dist/classifiers/llm/index.js +8 -0
  135. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  136. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  137. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  138. package/dist/classifiers/openai/decisions/client.js +234 -0
  139. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  140. package/dist/classifiers/openai/decisions/index.js +8 -0
  141. package/dist/classifiers/openai/index.d.ts +2 -0
  142. package/dist/classifiers/openai/index.js +8 -0
  143. package/dist/classifiers/typesafe/index.d.ts +2 -0
  144. package/dist/classifiers/typesafe/index.js +8 -0
  145. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  146. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  147. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  148. package/dist/classifiers/typesafe/jev/client.js +233 -0
  149. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  150. package/dist/classifiers/typesafe/jev/index.js +8 -0
  151. package/dist/clocks/base_clock.d.ts +13 -0
  152. package/dist/clocks/base_clock.js +14 -0
  153. package/dist/clocks/index.d.ts +2 -0
  154. package/dist/clocks/index.js +8 -0
  155. package/dist/clocks/system_clock.d.ts +15 -0
  156. package/dist/clocks/system_clock.js +25 -0
  157. package/dist/frames/frames.d.ts +2533 -0
  158. package/dist/frames/frames.js +2485 -0
  159. package/dist/frames/index.d.ts +2 -0
  160. package/dist/frames/index.js +8 -0
  161. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  162. package/dist/frames/protobufs/frames_pb2.js +466 -0
  163. package/dist/index.d.ts +11 -0
  164. package/dist/index.js +56 -0
  165. package/dist/metrics/index.d.ts +2 -0
  166. package/dist/metrics/index.js +8 -0
  167. package/dist/metrics/metrics.d.ts +276 -0
  168. package/dist/metrics/metrics.js +254 -0
  169. package/dist/observers/base_observer.d.ts +173 -0
  170. package/dist/observers/base_observer.js +151 -0
  171. package/dist/observers/error_observer.d.ts +75 -0
  172. package/dist/observers/error_observer.js +87 -0
  173. package/dist/observers/function_call_observer.d.ts +157 -0
  174. package/dist/observers/function_call_observer.js +222 -0
  175. package/dist/observers/index.d.ts +2 -0
  176. package/dist/observers/index.js +8 -0
  177. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  178. package/dist/observers/loggers/debug_log_observer.js +228 -0
  179. package/dist/observers/loggers/index.d.ts +2 -0
  180. package/dist/observers/loggers/index.js +8 -0
  181. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  182. package/dist/observers/loggers/llm_log_observer.js +110 -0
  183. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  184. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  185. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  186. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  187. package/dist/observers/service_metrics_observer.d.ts +168 -0
  188. package/dist/observers/service_metrics_observer.js +236 -0
  189. package/dist/observers/speaking_observer.d.ts +104 -0
  190. package/dist/observers/speaking_observer.js +150 -0
  191. package/dist/observers/startup_timing_observer.d.ts +221 -0
  192. package/dist/observers/startup_timing_observer.js +365 -0
  193. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  194. package/dist/observers/turn_tracking_observer.js +189 -0
  195. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  196. package/dist/observers/user_bot_latency_observer.js +974 -0
  197. package/dist/pipeline/base_pipeline.d.ts +49 -0
  198. package/dist/pipeline/base_pipeline.js +101 -0
  199. package/dist/pipeline/capabilities.d.ts +76 -0
  200. package/dist/pipeline/capabilities.js +97 -0
  201. package/dist/pipeline/index.d.ts +2 -0
  202. package/dist/pipeline/index.js +8 -0
  203. package/dist/pipeline/job_context.d.ts +317 -0
  204. package/dist/pipeline/job_context.js +450 -0
  205. package/dist/pipeline/job_decorator.d.ts +54 -0
  206. package/dist/pipeline/job_decorator.js +92 -0
  207. package/dist/pipeline/llm_switcher.d.ts +84 -0
  208. package/dist/pipeline/llm_switcher.js +107 -0
  209. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  210. package/dist/pipeline/llm_with_backend.js +806 -0
  211. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  212. package/dist/pipeline/parallel_pipeline.js +200 -0
  213. package/dist/pipeline/pipeline.d.ts +126 -0
  214. package/dist/pipeline/pipeline.js +196 -0
  215. package/dist/pipeline/service_switcher.d.ts +287 -0
  216. package/dist/pipeline/service_switcher.js +509 -0
  217. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  218. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  219. package/dist/pipeline/worker.d.ts +821 -0
  220. package/dist/pipeline/worker.js +1656 -0
  221. package/dist/pipeline/worker_observer.d.ts +131 -0
  222. package/dist/pipeline/worker_observer.js +274 -0
  223. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  224. package/dist/pipeline/worker_ready_decorator.js +76 -0
  225. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  226. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  227. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  228. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  229. package/dist/processors/aggregators/gated.d.ts +43 -0
  230. package/dist/processors/aggregators/gated.js +86 -0
  231. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  232. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  233. package/dist/processors/aggregators/index.d.ts +2 -0
  234. package/dist/processors/aggregators/index.js +8 -0
  235. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  236. package/dist/processors/aggregators/llm_context.js +580 -0
  237. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  238. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  239. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  240. package/dist/processors/aggregators/llm_response.js +71 -0
  241. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  242. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  243. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  244. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  245. package/dist/processors/aggregators/sentence.d.ts +39 -0
  246. package/dist/processors/aggregators/sentence.js +69 -0
  247. package/dist/processors/async_generator.d.ts +42 -0
  248. package/dist/processors/async_generator.js +76 -0
  249. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  250. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  251. package/dist/processors/audio/index.d.ts +2 -0
  252. package/dist/processors/audio/index.js +8 -0
  253. package/dist/processors/audio/vad_processor.d.ts +67 -0
  254. package/dist/processors/audio/vad_processor.js +103 -0
  255. package/dist/processors/consumer_processor.d.ts +49 -0
  256. package/dist/processors/consumer_processor.js +85 -0
  257. package/dist/processors/filters/frame_filter.d.ts +39 -0
  258. package/dist/processors/filters/frame_filter.js +52 -0
  259. package/dist/processors/filters/function_filter.d.ts +59 -0
  260. package/dist/processors/filters/function_filter.js +78 -0
  261. package/dist/processors/filters/identity_filter.d.ts +33 -0
  262. package/dist/processors/filters/identity_filter.js +37 -0
  263. package/dist/processors/filters/index.d.ts +2 -0
  264. package/dist/processors/filters/index.js +8 -0
  265. package/dist/processors/filters/null_filter.d.ts +34 -0
  266. package/dist/processors/filters/null_filter.js +47 -0
  267. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  268. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  269. package/dist/processors/frame_processor.d.ts +360 -0
  270. package/dist/processors/frame_processor.js +932 -0
  271. package/dist/processors/frameworks/index.d.ts +2 -0
  272. package/dist/processors/frameworks/index.js +8 -0
  273. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  274. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  275. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  276. package/dist/processors/frameworks/rtvi/index.js +11 -0
  277. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  278. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  279. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  280. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  281. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  282. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  283. package/dist/processors/idle_frame_processor.d.ts +44 -0
  284. package/dist/processors/idle_frame_processor.js +86 -0
  285. package/dist/processors/index.d.ts +2 -0
  286. package/dist/processors/index.js +8 -0
  287. package/dist/processors/logger.d.ts +42 -0
  288. package/dist/processors/logger.js +87 -0
  289. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  290. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  291. package/dist/processors/metrics/index.d.ts +2 -0
  292. package/dist/processors/metrics/index.js +8 -0
  293. package/dist/processors/producer_processor.d.ts +68 -0
  294. package/dist/processors/producer_processor.js +78 -0
  295. package/dist/processors/text_transformer.d.ts +30 -0
  296. package/dist/processors/text_transformer.js +48 -0
  297. package/dist/registry/index.d.ts +3 -0
  298. package/dist/registry/index.js +8 -0
  299. package/dist/registry/registry.d.ts +69 -0
  300. package/dist/registry/registry.js +149 -0
  301. package/dist/registry/types.d.ts +47 -0
  302. package/dist/registry/types.js +39 -0
  303. package/dist/serializers/base_serializer.d.ts +94 -0
  304. package/dist/serializers/base_serializer.js +82 -0
  305. package/dist/serializers/index.d.ts +2 -0
  306. package/dist/serializers/index.js +8 -0
  307. package/dist/services/ai_service.d.ts +145 -0
  308. package/dist/services/ai_service.js +262 -0
  309. package/dist/services/anthropic/index.d.ts +2 -0
  310. package/dist/services/anthropic/index.js +7 -0
  311. package/dist/services/assemblyai/index.d.ts +2 -0
  312. package/dist/services/assemblyai/index.js +7 -0
  313. package/dist/services/asyncai/index.d.ts +2 -0
  314. package/dist/services/asyncai/index.js +7 -0
  315. package/dist/services/aws/index.d.ts +2 -0
  316. package/dist/services/aws/index.js +7 -0
  317. package/dist/services/azure/index.d.ts +2 -0
  318. package/dist/services/azure/index.js +7 -0
  319. package/dist/services/baseten/index.d.ts +2 -0
  320. package/dist/services/baseten/index.js +7 -0
  321. package/dist/services/bland/index.d.ts +2 -0
  322. package/dist/services/bland/index.js +7 -0
  323. package/dist/services/camb/index.d.ts +2 -0
  324. package/dist/services/camb/index.js +7 -0
  325. package/dist/services/cartesia/index.d.ts +2 -0
  326. package/dist/services/cartesia/index.js +7 -0
  327. package/dist/services/cerebras/index.d.ts +2 -0
  328. package/dist/services/cerebras/index.js +7 -0
  329. package/dist/services/crusoe/index.d.ts +2 -0
  330. package/dist/services/crusoe/index.js +7 -0
  331. package/dist/services/deepgram/index.d.ts +2 -0
  332. package/dist/services/deepgram/index.js +7 -0
  333. package/dist/services/deepseek/index.d.ts +2 -0
  334. package/dist/services/deepseek/index.js +7 -0
  335. package/dist/services/elevenlabs/index.d.ts +2 -0
  336. package/dist/services/elevenlabs/index.js +7 -0
  337. package/dist/services/fal/index.d.ts +2 -0
  338. package/dist/services/fal/index.js +7 -0
  339. package/dist/services/fireworks/index.d.ts +2 -0
  340. package/dist/services/fireworks/index.js +7 -0
  341. package/dist/services/fish/index.d.ts +2 -0
  342. package/dist/services/fish/index.js +7 -0
  343. package/dist/services/funasr/index.d.ts +3 -0
  344. package/dist/services/funasr/index.js +8 -0
  345. package/dist/services/gladia/index.d.ts +2 -0
  346. package/dist/services/gladia/index.js +7 -0
  347. package/dist/services/google/index.d.ts +2 -0
  348. package/dist/services/google/index.js +7 -0
  349. package/dist/services/gradium/index.d.ts +2 -0
  350. package/dist/services/gradium/index.js +7 -0
  351. package/dist/services/grok/index.d.ts +2 -0
  352. package/dist/services/grok/index.js +7 -0
  353. package/dist/services/groq/index.d.ts +2 -0
  354. package/dist/services/groq/index.js +7 -0
  355. package/dist/services/heygen/index.d.ts +2 -0
  356. package/dist/services/heygen/index.js +7 -0
  357. package/dist/services/hume/index.d.ts +2 -0
  358. package/dist/services/hume/index.js +7 -0
  359. package/dist/services/image_service.d.ts +52 -0
  360. package/dist/services/image_service.js +60 -0
  361. package/dist/services/inception/index.d.ts +2 -0
  362. package/dist/services/inception/index.js +7 -0
  363. package/dist/services/index.d.ts +2 -0
  364. package/dist/services/index.js +8 -0
  365. package/dist/services/inworld/index.d.ts +2 -0
  366. package/dist/services/inworld/index.js +7 -0
  367. package/dist/services/keenable/index.d.ts +2 -0
  368. package/dist/services/keenable/index.js +7 -0
  369. package/dist/services/kokoro/index.d.ts +2 -0
  370. package/dist/services/kokoro/index.js +7 -0
  371. package/dist/services/llm_service.d.ts +1106 -0
  372. package/dist/services/llm_service.js +2231 -0
  373. package/dist/services/mem0/index.d.ts +2 -0
  374. package/dist/services/mem0/index.js +7 -0
  375. package/dist/services/meta/index.d.ts +2 -0
  376. package/dist/services/meta/index.js +7 -0
  377. package/dist/services/minimax/index.d.ts +2 -0
  378. package/dist/services/minimax/index.js +7 -0
  379. package/dist/services/mistral/index.d.ts +2 -0
  380. package/dist/services/mistral/index.js +7 -0
  381. package/dist/services/moondream/index.d.ts +2 -0
  382. package/dist/services/moondream/index.js +7 -0
  383. package/dist/services/moonshine/index.d.ts +2 -0
  384. package/dist/services/moonshine/index.js +7 -0
  385. package/dist/services/nebius/index.d.ts +2 -0
  386. package/dist/services/nebius/index.js +7 -0
  387. package/dist/services/neuphonic/index.d.ts +2 -0
  388. package/dist/services/neuphonic/index.js +7 -0
  389. package/dist/services/novita/index.d.ts +2 -0
  390. package/dist/services/novita/index.js +7 -0
  391. package/dist/services/nvidia/index.d.ts +2 -0
  392. package/dist/services/nvidia/index.js +11 -0
  393. package/dist/services/ollama/index.d.ts +2 -0
  394. package/dist/services/ollama/index.js +7 -0
  395. package/dist/services/openai/index.d.ts +2 -0
  396. package/dist/services/openai/index.js +7 -0
  397. package/dist/services/openclaw/index.d.ts +14 -0
  398. package/dist/services/openclaw/index.js +19 -0
  399. package/dist/services/openrouter/index.d.ts +2 -0
  400. package/dist/services/openrouter/index.js +7 -0
  401. package/dist/services/perplexity/index.d.ts +2 -0
  402. package/dist/services/perplexity/index.js +7 -0
  403. package/dist/services/piper/index.d.ts +2 -0
  404. package/dist/services/piper/index.js +7 -0
  405. package/dist/services/pocket_tts/index.d.ts +2 -0
  406. package/dist/services/pocket_tts/index.js +7 -0
  407. package/dist/services/qwen/index.d.ts +2 -0
  408. package/dist/services/qwen/index.js +7 -0
  409. package/dist/services/resembleai/index.d.ts +2 -0
  410. package/dist/services/resembleai/index.js +7 -0
  411. package/dist/services/rime/index.d.ts +2 -0
  412. package/dist/services/rime/index.js +7 -0
  413. package/dist/services/sambanova/index.d.ts +2 -0
  414. package/dist/services/sambanova/index.js +7 -0
  415. package/dist/services/sarvam/index.d.ts +2 -0
  416. package/dist/services/sarvam/index.js +7 -0
  417. package/dist/services/settings.d.ts +356 -0
  418. package/dist/services/settings.js +437 -0
  419. package/dist/services/simli/index.d.ts +2 -0
  420. package/dist/services/simli/index.js +7 -0
  421. package/dist/services/smallest/index.d.ts +2 -0
  422. package/dist/services/smallest/index.js +7 -0
  423. package/dist/services/soniox/index.d.ts +2 -0
  424. package/dist/services/soniox/index.js +7 -0
  425. package/dist/services/speechify/index.d.ts +2 -0
  426. package/dist/services/speechify/index.js +7 -0
  427. package/dist/services/speechmatics/index.d.ts +2 -0
  428. package/dist/services/speechmatics/index.js +7 -0
  429. package/dist/services/stt_latency.d.ts +62 -0
  430. package/dist/services/stt_latency.js +71 -0
  431. package/dist/services/stt_service.d.ts +601 -0
  432. package/dist/services/stt_service.js +1044 -0
  433. package/dist/services/tavus/index.d.ts +2 -0
  434. package/dist/services/tavus/index.js +7 -0
  435. package/dist/services/together/index.d.ts +2 -0
  436. package/dist/services/together/index.js +7 -0
  437. package/dist/services/tts_service.d.ts +909 -0
  438. package/dist/services/tts_service.js +2018 -0
  439. package/dist/services/ultravox/index.d.ts +2 -0
  440. package/dist/services/ultravox/index.js +9 -0
  441. package/dist/services/vision_service.d.ts +56 -0
  442. package/dist/services/vision_service.js +62 -0
  443. package/dist/services/websocket_service.d.ts +213 -0
  444. package/dist/services/websocket_service.js +654 -0
  445. package/dist/services/whisper/index.d.ts +2 -0
  446. package/dist/services/whisper/index.js +9 -0
  447. package/dist/services/xai/index.d.ts +2 -0
  448. package/dist/services/xai/index.js +9 -0
  449. package/dist/services/xtts/index.d.ts +2 -0
  450. package/dist/services/xtts/index.js +9 -0
  451. package/dist/tests/index.d.ts +2 -0
  452. package/dist/tests/index.js +8 -0
  453. package/dist/tests/utils.d.ts +123 -0
  454. package/dist/tests/utils.js +212 -0
  455. package/dist/transcriptions/index.d.ts +2 -0
  456. package/dist/transcriptions/index.js +8 -0
  457. package/dist/transcriptions/language.d.ts +376 -0
  458. package/dist/transcriptions/language.js +543 -0
  459. package/dist/transports/base_input.d.ts +149 -0
  460. package/dist/transports/base_input.js +338 -0
  461. package/dist/transports/base_output.d.ts +432 -0
  462. package/dist/transports/base_output.js +1231 -0
  463. package/dist/transports/base_transport.d.ts +223 -0
  464. package/dist/transports/base_transport.js +167 -0
  465. package/dist/transports/daily/index.d.ts +2 -0
  466. package/dist/transports/daily/index.js +9 -0
  467. package/dist/transports/heygen/index.d.ts +2 -0
  468. package/dist/transports/heygen/index.js +9 -0
  469. package/dist/transports/index.d.ts +2 -0
  470. package/dist/transports/index.js +8 -0
  471. package/dist/transports/lemonslice/index.d.ts +2 -0
  472. package/dist/transports/lemonslice/index.js +9 -0
  473. package/dist/transports/livekit/index.d.ts +2 -0
  474. package/dist/transports/livekit/index.js +9 -0
  475. package/dist/transports/local/index.d.ts +2 -0
  476. package/dist/transports/local/index.js +9 -0
  477. package/dist/transports/moq/index.d.ts +2 -0
  478. package/dist/transports/moq/index.js +9 -0
  479. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  480. package/dist/transports/smallwebrtc/index.js +9 -0
  481. package/dist/transports/tavus/index.d.ts +2 -0
  482. package/dist/transports/tavus/index.js +9 -0
  483. package/dist/transports/video_in_sampler.d.ts +157 -0
  484. package/dist/transports/video_in_sampler.js +258 -0
  485. package/dist/transports/vonage/index.d.ts +2 -0
  486. package/dist/transports/vonage/index.js +9 -0
  487. package/dist/transports/websocket/index.d.ts +2 -0
  488. package/dist/transports/websocket/index.js +9 -0
  489. package/dist/transports/whatsapp/index.d.ts +2 -0
  490. package/dist/transports/whatsapp/index.js +9 -0
  491. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  492. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  493. package/dist/turns/empty_user_turn.d.ts +55 -0
  494. package/dist/turns/empty_user_turn.js +53 -0
  495. package/dist/turns/index.d.ts +2 -0
  496. package/dist/turns/index.js +8 -0
  497. package/dist/turns/speculation_gate.d.ts +169 -0
  498. package/dist/turns/speculation_gate.js +294 -0
  499. package/dist/turns/types.d.ts +33 -0
  500. package/dist/turns/types.js +35 -0
  501. package/dist/turns/user_idle_controller.d.ts +94 -0
  502. package/dist/turns/user_idle_controller.js +187 -0
  503. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  504. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  505. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  506. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  507. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  508. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  509. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  510. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  511. package/dist/turns/user_mute/index.d.ts +6 -0
  512. package/dist/turns/user_mute/index.js +11 -0
  513. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  514. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  515. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  516. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  517. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  518. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  519. package/dist/turns/user_start/index.d.ts +8 -0
  520. package/dist/turns/user_start/index.js +16 -0
  521. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  522. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  523. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  524. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  525. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  526. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  527. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  528. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  529. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  530. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  531. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  532. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  533. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  534. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  535. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  536. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  537. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  538. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  539. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  540. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  541. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  542. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  543. package/dist/turns/user_stop/index.d.ts +10 -0
  544. package/dist/turns/user_stop/index.js +15 -0
  545. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  546. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  547. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  548. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  549. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  550. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  551. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  552. package/dist/turns/user_turn_completion_mixin.js +591 -0
  553. package/dist/turns/user_turn_controller.d.ts +134 -0
  554. package/dist/turns/user_turn_controller.js +335 -0
  555. package/dist/turns/user_turn_processor.d.ts +87 -0
  556. package/dist/turns/user_turn_processor.js +180 -0
  557. package/dist/turns/user_turn_strategies.d.ts +187 -0
  558. package/dist/turns/user_turn_strategies.js +222 -0
  559. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  560. package/dist/utils/async_tool_cancellation.js +78 -0
  561. package/dist/utils/asyncio/index.d.ts +2 -0
  562. package/dist/utils/asyncio/index.js +7 -0
  563. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  564. package/dist/utils/asyncio/task_manager.js +105 -0
  565. package/dist/utils/base_object.d.ts +76 -0
  566. package/dist/utils/base_object.js +154 -0
  567. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  568. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  569. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  570. package/dist/utils/context/audio_context_manager.js +233 -0
  571. package/dist/utils/context/index.d.ts +2 -0
  572. package/dist/utils/context/index.js +7 -0
  573. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  574. package/dist/utils/context/llm_context_summarization.js +511 -0
  575. package/dist/utils/context/text_segment_map.d.ts +611 -0
  576. package/dist/utils/context/text_segment_map.js +1132 -0
  577. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  578. package/dist/utils/context/word_completion_tracker.js +441 -0
  579. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  580. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  581. package/dist/utils/deprecation.d.ts +28 -0
  582. package/dist/utils/deprecation.js +75 -0
  583. package/dist/utils/env.d.ts +38 -0
  584. package/dist/utils/env.js +62 -0
  585. package/dist/utils/errors.d.ts +75 -0
  586. package/dist/utils/errors.js +202 -0
  587. package/dist/utils/file_resolver.d.ts +126 -0
  588. package/dist/utils/file_resolver.js +314 -0
  589. package/dist/utils/file_storage.d.ts +115 -0
  590. package/dist/utils/file_storage.js +178 -0
  591. package/dist/utils/frame_queue.d.ts +36 -0
  592. package/dist/utils/frame_queue.js +66 -0
  593. package/dist/utils/http.d.ts +39 -0
  594. package/dist/utils/http.js +53 -0
  595. package/dist/utils/image.d.ts +14 -0
  596. package/dist/utils/image.js +63 -0
  597. package/dist/utils/index.d.ts +2 -0
  598. package/dist/utils/index.js +8 -0
  599. package/dist/utils/jpeg_encoder.d.ts +14 -0
  600. package/dist/utils/jpeg_encoder.js +315 -0
  601. package/dist/utils/log_config.d.ts +34 -0
  602. package/dist/utils/log_config.js +76 -0
  603. package/dist/utils/logger.d.ts +40 -0
  604. package/dist/utils/logger.js +91 -0
  605. package/dist/utils/mixin.d.ts +14 -0
  606. package/dist/utils/mixin.js +63 -0
  607. package/dist/utils/network.d.ts +73 -0
  608. package/dist/utils/network.js +90 -0
  609. package/dist/utils/security/allowed_origins.d.ts +16 -0
  610. package/dist/utils/security/allowed_origins.js +34 -0
  611. package/dist/utils/security/index.d.ts +2 -0
  612. package/dist/utils/security/index.js +7 -0
  613. package/dist/utils/security/redaction.d.ts +27 -0
  614. package/dist/utils/security/redaction.js +123 -0
  615. package/dist/utils/security/ssrf.d.ts +79 -0
  616. package/dist/utils/security/ssrf.js +327 -0
  617. package/dist/utils/shared.d.ts +35 -0
  618. package/dist/utils/shared.js +136 -0
  619. package/dist/utils/startup.d.ts +17 -0
  620. package/dist/utils/startup.js +130 -0
  621. package/dist/utils/string.d.ts +116 -0
  622. package/dist/utils/string.js +460 -0
  623. package/dist/utils/sync/base_notifier.d.ts +25 -0
  624. package/dist/utils/sync/base_notifier.js +16 -0
  625. package/dist/utils/sync/event_notifier.d.ts +38 -0
  626. package/dist/utils/sync/event_notifier.js +51 -0
  627. package/dist/utils/sync/index.d.ts +2 -0
  628. package/dist/utils/sync/index.js +7 -0
  629. package/dist/utils/text/alnum_utils.d.ts +109 -0
  630. package/dist/utils/text/alnum_utils.js +262 -0
  631. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  632. package/dist/utils/text/base_text_aggregator.js +102 -0
  633. package/dist/utils/text/base_text_filter.d.ts +54 -0
  634. package/dist/utils/text/base_text_filter.js +50 -0
  635. package/dist/utils/text/index.d.ts +2 -0
  636. package/dist/utils/text/index.js +7 -0
  637. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  638. package/dist/utils/text/markdown_text_filter.js +522 -0
  639. package/dist/utils/text/markup_utils.d.ts +54 -0
  640. package/dist/utils/text/markup_utils.js +156 -0
  641. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  642. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  643. package/dist/utils/text/phonemes.d.ts +60 -0
  644. package/dist/utils/text/phonemes.js +172 -0
  645. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  646. package/dist/utils/text/simple_text_aggregator.js +254 -0
  647. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  648. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  649. package/dist/utils/text/transforms/acronyms.d.ts +21 -0
  650. package/dist/utils/text/transforms/acronyms.js +31 -0
  651. package/dist/utils/text/transforms/currency.d.ts +16 -0
  652. package/dist/utils/text/transforms/currency.js +56 -0
  653. package/dist/utils/text/transforms/dates.d.ts +18 -0
  654. package/dist/utils/text/transforms/dates.js +102 -0
  655. package/dist/utils/text/transforms/email.d.ts +17 -0
  656. package/dist/utils/text/transforms/email.js +35 -0
  657. package/dist/utils/text/transforms/index.d.ts +37 -0
  658. package/dist/utils/text/transforms/index.js +42 -0
  659. package/dist/utils/text/transforms/numbers.d.ts +25 -0
  660. package/dist/utils/text/transforms/numbers.js +59 -0
  661. package/dist/utils/text/transforms/percentages.d.ts +16 -0
  662. package/dist/utils/text/transforms/percentages.js +32 -0
  663. package/dist/utils/text/transforms/phone.d.ts +21 -0
  664. package/dist/utils/text/transforms/phone.js +39 -0
  665. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  666. package/dist/utils/text/transforms/pronunciations.js +112 -0
  667. package/dist/utils/text/transforms/replacements.d.ts +39 -0
  668. package/dist/utils/text/transforms/replacements.js +46 -0
  669. package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
  670. package/dist/utils/text/transforms/strip_markdown.js +60 -0
  671. package/dist/utils/text/transforms/units.d.ts +22 -0
  672. package/dist/utils/text/transforms/units.js +81 -0
  673. package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
  674. package/dist/utils/text/transforms/voice_formatter.js +98 -0
  675. package/dist/utils/text/unicode_digits.d.ts +3 -0
  676. package/dist/utils/text/unicode_digits.js +34 -0
  677. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  678. package/dist/utils/text/word_timestamp_utils.js +52 -0
  679. package/dist/utils/time.d.ts +13 -0
  680. package/dist/utils/time.js +31 -0
  681. package/dist/utils/tracing/index.d.ts +3 -0
  682. package/dist/utils/tracing/index.js +8 -0
  683. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  684. package/dist/utils/tracing/service_attributes.js +434 -0
  685. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  686. package/dist/utils/tracing/service_decorators.js +1662 -0
  687. package/dist/utils/tracing/setup.d.ts +107 -0
  688. package/dist/utils/tracing/setup.js +160 -0
  689. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  690. package/dist/utils/tracing/tracing_context.js +97 -0
  691. package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
  692. package/dist/utils/tracing/turn_trace_observer.js +233 -0
  693. package/dist/utils/types.d.ts +80 -0
  694. package/dist/utils/types.js +108 -0
  695. package/dist/utils/utils.d.ts +5 -0
  696. package/dist/utils/utils.js +22 -0
  697. package/dist/utils/yaml.d.ts +179 -0
  698. package/dist/utils/yaml.js +556 -0
  699. package/dist/version.d.ts +3 -0
  700. package/dist/version.js +7 -0
  701. package/dist/workers/base_worker.d.ts +772 -0
  702. package/dist/workers/base_worker.js +1298 -0
  703. package/dist/workers/index.d.ts +2 -0
  704. package/dist/workers/index.js +8 -0
  705. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  706. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  707. package/dist/workers/llm/index.d.ts +6 -0
  708. package/dist/workers/llm/index.js +11 -0
  709. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  710. package/dist/workers/llm/llm_context_worker.js +72 -0
  711. package/dist/workers/llm/llm_worker.d.ts +180 -0
  712. package/dist/workers/llm/llm_worker.js +323 -0
  713. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  714. package/dist/workers/llm/tool_decorator.js +60 -0
  715. package/dist/workers/proxy/index.d.ts +3 -0
  716. package/dist/workers/proxy/index.js +9 -0
  717. package/dist/workers/proxy/websocket/client.d.ts +110 -0
  718. package/dist/workers/proxy/websocket/client.js +196 -0
  719. package/dist/workers/proxy/websocket/index.d.ts +3 -0
  720. package/dist/workers/proxy/websocket/index.js +10 -0
  721. package/dist/workers/runner.d.ts +268 -0
  722. package/dist/workers/runner.js +489 -0
  723. package/dist/workers/ui/index.d.ts +22 -0
  724. package/dist/workers/ui/index.js +27 -0
  725. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  726. package/dist/workers/ui/ui_event_decorator.js +75 -0
  727. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  728. package/dist/workers/ui/ui_job_context.js +17 -0
  729. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  730. package/dist/workers/ui/ui_prompts.js +41 -0
  731. package/dist/workers/ui/ui_tools.d.ts +32 -0
  732. package/dist/workers/ui/ui_tools.js +112 -0
  733. package/dist/workers/ui/ui_worker.d.ts +571 -0
  734. package/dist/workers/ui/ui_worker.js +1156 -0
  735. package/package.json +61 -3
  736. package/README.md +0 -5
@@ -0,0 +1,172 @@
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/utils/text/phonemes.py
6
+ /**
7
+ * Shared pronunciation parsing and normalization utilities for TTS services.
8
+ *
9
+ * A pronunciation reaches a TTS service as an IPA string. Services each want their
10
+ * own markup for it, but they all start from the same steps: tidy the notation,
11
+ * split it into phones, and find which vowel each stress mark belongs to. Those
12
+ * steps live here, so a service's formatter only has to render the result.
13
+ *
14
+ * Normalization is notation-only. It unifies ways of writing the same symbol
15
+ * (`ʧ` and `tʃ`, `g` and `ɡ`, `'` and `ˈ`) and never changes which sound
16
+ * is written, so it is safe for any language.
17
+ */
18
+ export const PRIMARY_STRESS = "ˈ";
19
+ export const SECONDARY_STRESS = "ˌ";
20
+ export const STRESS_MARKS = [PRIMARY_STRESS, SECONDARY_STRESS];
21
+ export const TIE_BAR = "͡";
22
+ // Ligatures and ASCII look-alikes of IPA symbols. "tʃ" and "dʒ" are always read
23
+ // as one phone, so they are written untied; other affricates keep the tie bar
24
+ // that tells them apart from a cluster.
25
+ const _IPA_NOTATION = [
26
+ ["͜", TIE_BAR], // tie bar below
27
+ ["ʧ", "tʃ"],
28
+ ["ʤ", "dʒ"],
29
+ [`t${TIE_BAR}ʃ`, "tʃ"],
30
+ [`d${TIE_BAR}ʒ`, "dʒ"],
31
+ ["ʦ", `t${TIE_BAR}s`],
32
+ ["ʣ", `d${TIE_BAR}z`],
33
+ ["g", "ɡ"],
34
+ ["'", PRIMARY_STRESS],
35
+ [":", "ː"],
36
+ [".", ""], // syllable break
37
+ ];
38
+ // Sequences read as a single phone even without a tie bar: affricates written
39
+ // this way in nearly every dictionary, and the English diphthongs. Anything else
40
+ // ("ts" in "cats" against Italian "pizza") is one phone only when tied.
41
+ const _IPA_MULTI = ["tʃ", "dʒ", "aɪ", "aʊ", "ɔɪ", "oʊ", "eɪ"].map((m) => Array.from(m));
42
+ const _IPA_VOWELS = new Set(Array.from("aeiouyæɑɒɔəɚɛɜɝɪʊʌɐᵻɨʉɯɤøœɶɵɘɞ"));
43
+ // Characters that belong to the phone before them rather than starting a new one.
44
+ const _IPA_MODIFIERS = new Set(Array.from("ːˑ"));
45
+ const _NONSPACING_MARK_RE = /^\p{Mn}$/u;
46
+ function isStressMark(char) {
47
+ return char === PRIMARY_STRESS || char === SECONDARY_STRESS;
48
+ }
49
+ function isModifierChar(char) {
50
+ return _IPA_MODIFIERS.has(char) || _NONSPACING_MARK_RE.test(char);
51
+ }
52
+ /** Whether the code points `chars` start with `prefix` (code points) at `index`. */
53
+ function startsWithAt(chars, prefix, index) {
54
+ if (index + prefix.length > chars.length)
55
+ return false;
56
+ return prefix.every((c, k) => chars[index + k] === c);
57
+ }
58
+ /**
59
+ * Unify the notation of an IPA string without changing what it says.
60
+ *
61
+ * Strips surrounding `/…/` or `[…]`, composes Unicode, replaces ligatures and
62
+ * ASCII look-alikes with their IPA symbols, writes `tʃ` and `dʒ` untied and
63
+ * other affricates tied (`ʦ` becomes `t͡s`), drops syllable breaks, and
64
+ * collapses whitespace.
65
+ *
66
+ * @param ipa An IPA transcription.
67
+ * @returns The same transcription in canonical notation.
68
+ *
69
+ * @example
70
+ * normalizeIpa("/ˈʧɪ.kən/"); // "ˈtʃɪkən"
71
+ */
72
+ export function normalizeIpa(ipa) {
73
+ ipa = ipa.trim().normalize("NFC");
74
+ const chars = Array.from(ipa);
75
+ if (chars.length >= 2) {
76
+ const pair = `${chars[0]}${chars[chars.length - 1]}`;
77
+ if (pair === "//" || pair === "[]") {
78
+ ipa = chars.slice(1, -1).join("");
79
+ }
80
+ }
81
+ for (const [old, replacement] of _IPA_NOTATION) {
82
+ ipa = ipa.replaceAll(old, replacement);
83
+ }
84
+ return ipa
85
+ .split(/\s+/u)
86
+ .filter((part) => part.length > 0)
87
+ .join(" ");
88
+ }
89
+ /**
90
+ * Split one IPA word into phones, in written order.
91
+ *
92
+ * Stress marks are returned as tokens of their own, where they were written.
93
+ * Tied sequences (`t͡s`), `tʃ`, `dʒ` and the English diphthongs are one
94
+ * phone each, returned without the tie bar; length marks and combining
95
+ * diacritics stay with the phone they modify.
96
+ *
97
+ * @param ipa An IPA transcription of a single word.
98
+ * @returns The phones and stress marks of the word.
99
+ *
100
+ * @example
101
+ * ipaPhones("mɛtˈfɔɹmɪn"); // ["m", "ɛ", "t", "ˈ", "f", "ɔ", "ɹ", "m", "ɪ", "n"]
102
+ */
103
+ export function ipaPhones(ipa) {
104
+ const chars = Array.from(normalizeIpa(ipa).replaceAll(" ", ""));
105
+ const phones = [];
106
+ let i = 0;
107
+ while (i < chars.length) {
108
+ const char = chars[i];
109
+ if (isStressMark(char)) {
110
+ phones.push(char);
111
+ i += 1;
112
+ continue;
113
+ }
114
+ let phone;
115
+ if (chars[i + 1] === TIE_BAR && i + 2 < chars.length) {
116
+ phone = char + chars[i + 2];
117
+ i += 3;
118
+ }
119
+ else {
120
+ const multi = _IPA_MULTI.find((m) => startsWithAt(chars, m, i));
121
+ phone = multi ? multi.join("") : char;
122
+ i += multi ? multi.length : 1;
123
+ }
124
+ while (i < chars.length && isModifierChar(chars[i])) {
125
+ phone += chars[i];
126
+ i += 1;
127
+ }
128
+ const last = phones[phones.length - 1];
129
+ if (last !== undefined && !isStressMark(last) && _isModifierOnly(phone)) {
130
+ phones[phones.length - 1] = last + phone;
131
+ }
132
+ else {
133
+ phones.push(phone);
134
+ }
135
+ }
136
+ return phones;
137
+ }
138
+ /** Whether an IPA phone (as returned by `ipaPhones`) is a vowel. */
139
+ export function isIpaVowel(phone) {
140
+ const first = Array.from(phone)[0];
141
+ return first !== undefined && _IPA_VOWELS.has(first);
142
+ }
143
+ /**
144
+ * Move each stress mark from where it was written to just before its vowel.
145
+ *
146
+ * Transcriptions usually put stress at the start of the syllable
147
+ * (`mɛtˈfɔɹmɪn`); some services want it on the vowel itself
148
+ * (`mɛtfˈɔɹmɪn`). A stress mark with no vowel after it is dropped.
149
+ *
150
+ * @param phones Phones and stress marks, as returned by `ipaPhones`.
151
+ * @returns The same phones with every stress mark directly before a vowel.
152
+ */
153
+ export function stressBeforeVowels(phones) {
154
+ const result = [];
155
+ let pending = null;
156
+ for (const phone of phones) {
157
+ if (isStressMark(phone)) {
158
+ pending = phone;
159
+ continue;
160
+ }
161
+ if (pending && isIpaVowel(phone)) {
162
+ result.push(pending);
163
+ pending = null;
164
+ }
165
+ result.push(phone);
166
+ }
167
+ return result;
168
+ }
169
+ function _isModifierOnly(phone) {
170
+ return Array.from(phone).every(isModifierChar);
171
+ }
172
+ //# sourceMappingURL=phonemes.js.map
@@ -0,0 +1,135 @@
1
+ import { Aggregation, BaseTextAggregator, type BaseTextAggregatorOptions } from "./base_text_aggregator.ts";
2
+ /**
3
+ * Track lookahead across chunks for early emission and a word-end retry.
4
+ *
5
+ * Clear boundaries can emit at the first character; unresolved ones wait for
6
+ * a complete word. For example, "Hello. N" can emit without waiting for "Next ".
7
+ * Waiting for word completion added up to 297 ms in our Anthropic sample.
8
+ *
9
+ * Unresolved boundaries retry only when the following word ends. In "Albert I.
10
+ * Douglas", checking the partial word "Do" could mistake it for a sentence
11
+ * starter and split after the initial.
12
+ */
13
+ declare const _LookaheadState: {
14
+ readonly IDLE: 1;
15
+ readonly AWAITING_CHARACTER: 2;
16
+ readonly AWAITING_WORD: 3;
17
+ readonly IN_WORD: 4;
18
+ };
19
+ type _LookaheadState = (typeof _LookaheadState)[keyof typeof _LookaheadState];
20
+ /** Python `str.strip(" ")`: strip only ASCII spaces. */
21
+ export declare function _stripSpaces(text: string): string;
22
+ export interface SimpleTextAggregatorOptions extends BaseTextAggregatorOptions {
23
+ }
24
+ /**
25
+ * Simple text aggregator that accumulates text until sentence boundaries.
26
+ *
27
+ * This aggregator provides basic functionality for accumulating text tokens
28
+ * and releasing them when an end-of-sentence marker is detected. It's the
29
+ * most straightforward implementation of text aggregation for TTS processing.
30
+ */
31
+ export declare class SimpleTextAggregator extends BaseTextAggregator {
32
+ protected _text: string;
33
+ protected _lookaheadState: _LookaheadState;
34
+ /**
35
+ * Initialize the simple text aggregator.
36
+ *
37
+ * Creates an empty text buffer ready to begin accumulating text tokens.
38
+ *
39
+ * @param options Additional arguments passed to BaseTextAggregator (e.g. aggregationType).
40
+ */
41
+ constructor(options?: SimpleTextAggregatorOptions);
42
+ /**
43
+ * Get the currently aggregated text.
44
+ *
45
+ * @returns The text that has been accumulated in the buffer.
46
+ */
47
+ get text(): Aggregation;
48
+ /**
49
+ * Aggregate text and yield completed aggregations.
50
+ *
51
+ * In SENTENCE mode, processes the input text character-by-character. When
52
+ * sentence-ending punctuation is detected, it waits for non-whitespace
53
+ * lookahead before calling the sentence tokenizer.
54
+ *
55
+ * In TOKEN mode, yields the text immediately without buffering.
56
+ *
57
+ * @param text Text to aggregate.
58
+ * @returns Aggregation objects (sentences in SENTENCE mode, tokens in TOKEN mode).
59
+ */
60
+ aggregate(text: string): AsyncGenerator<Aggregation>;
61
+ /**
62
+ * Check a possible sentence ending using text that arrives after it.
63
+ *
64
+ * `char` is already appended to `this._text`. Punctuation starts a
65
+ * candidate, but the tokenizer decides whether it actually ends a sentence:
66
+ *
67
+ * - `Hello.` or `Hello. `: keep buffering until meaningful text follows.
68
+ * - `Hello. N`: check immediately and emit `Hello.`. In contrast,
69
+ * `Dr. N` and `$29.9` stay buffered as an abbreviation and a decimal.
70
+ * - `...you and I. D`: if unresolved, retry when the word `Did` ends.
71
+ * Don't check intermediate prefixes: `Do` in `Albert I. Douglas`
72
+ * could be mistaken for a sentence starter.
73
+ * - `...you and I. Did?`: the question mark ends the lookahead word and
74
+ * starts a new candidate. First check the earlier period without `?`;
75
+ * then wait for lookahead after `?`.
76
+ *
77
+ * A confirmed boundary emits only the prefix; the following text stays in
78
+ * the buffer. After a word-end retry, stop checking that candidate even if
79
+ * unresolved. At response end, `flush` returns any remaining text.
80
+ *
81
+ * Subclasses can call this via super for tag or pattern handling.
82
+ *
83
+ * @param char The character just appended to the aggregation buffer.
84
+ * @returns Aggregation if a sentence boundary is confirmed, otherwise null.
85
+ */
86
+ protected _checkSentenceWithLookahead(char: string): Promise<Aggregation | null>;
87
+ /**
88
+ * Advance the pending candidate and decide whether to check its boundary.
89
+ *
90
+ * Check once at the first non-whitespace character, then once more when
91
+ * the following word ends. Opening quotes or symbols do not start a word.
92
+ *
93
+ * If the first tokenizer check finds no boundary:
94
+ *
95
+ * 'I. ' -> AWAITING_CHARACTER
96
+ * 'I. "' -> AWAITING_WORD (check at the quote)
97
+ * 'I. "D' -> IN_WORD (no check)
98
+ * 'I. "Did ' -> IDLE (retry at the word-ending space)
99
+ *
100
+ * The caller performs the tokenizer check when this method returns true.
101
+ *
102
+ * @param char The most recently appended character.
103
+ * @param options.isPunctuation Whether the character is sentence-ending punctuation.
104
+ * @returns Whether the buffered text is ready for a tokenizer check.
105
+ */
106
+ protected _advanceLookahead(char: string, options: {
107
+ isPunctuation: boolean;
108
+ }): boolean;
109
+ /**
110
+ * Flush any remaining text in the buffer.
111
+ *
112
+ * Returns any text remaining in the buffer. This is called at the end
113
+ * of a stream to ensure all text is processed. In TOKEN mode, returns
114
+ * null since tokens are yielded immediately.
115
+ *
116
+ * @returns Any remaining text as a sentence, or null if buffer is empty or in TOKEN mode.
117
+ */
118
+ flush(): Promise<Aggregation | null>;
119
+ /**
120
+ * Handle interruptions by clearing the text buffer.
121
+ *
122
+ * Called when an interruption occurs in the processing pipeline,
123
+ * discarding any partially accumulated text.
124
+ */
125
+ handleInterruption(): Promise<void>;
126
+ /**
127
+ * Clear the internally aggregated text.
128
+ *
129
+ * Resets the aggregator to its initial empty state, discarding
130
+ * any accumulated text content.
131
+ */
132
+ reset(): Promise<void>;
133
+ }
134
+ export {};
135
+ //# sourceMappingURL=simple_text_aggregator.d.ts.map
@@ -0,0 +1,254 @@
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/utils/text/simple_text_aggregator.py
6
+ /**
7
+ * Simple text aggregator for basic sentence-boundary text processing.
8
+ *
9
+ * This module provides a straightforward text aggregator that accumulates text
10
+ * until it finds an end-of-sentence marker, making it suitable for basic TTS
11
+ * text processing scenarios.
12
+ */
13
+ import { matchEndofsentence, SENTENCE_ENDING_PUNCTUATION } from "../string.js";
14
+ import { Aggregation, BaseTextAggregator, TextType, } from "./base_text_aggregator.js";
15
+ /**
16
+ * Track lookahead across chunks for early emission and a word-end retry.
17
+ *
18
+ * Clear boundaries can emit at the first character; unresolved ones wait for
19
+ * a complete word. For example, "Hello. N" can emit without waiting for "Next ".
20
+ * Waiting for word completion added up to 297 ms in our Anthropic sample.
21
+ *
22
+ * Unresolved boundaries retry only when the following word ends. In "Albert I.
23
+ * Douglas", checking the partial word "Do" could mistake it for a sentence
24
+ * starter and split after the initial.
25
+ */
26
+ const _LookaheadState = {
27
+ IDLE: 1,
28
+ AWAITING_CHARACTER: 2,
29
+ AWAITING_WORD: 3,
30
+ IN_WORD: 4,
31
+ };
32
+ const SPACE_RE = /^\s+$/u;
33
+ const ALNUM_RE = /^[\p{L}\p{N}]+$/u;
34
+ /** Python `str.isspace()` for a single character. */
35
+ function isSpace(char) {
36
+ return SPACE_RE.test(char);
37
+ }
38
+ /** Python `str.isalnum()` for a single character. */
39
+ function isAlnum(char) {
40
+ return ALNUM_RE.test(char);
41
+ }
42
+ /** Python `str.strip(" ")`: strip only ASCII spaces. */
43
+ export function _stripSpaces(text) {
44
+ let start = 0;
45
+ let end = text.length;
46
+ while (start < end && text[start] === " ")
47
+ start++;
48
+ while (end > start && text[end - 1] === " ")
49
+ end--;
50
+ return text.slice(start, end);
51
+ }
52
+ /**
53
+ * Simple text aggregator that accumulates text until sentence boundaries.
54
+ *
55
+ * This aggregator provides basic functionality for accumulating text tokens
56
+ * and releasing them when an end-of-sentence marker is detected. It's the
57
+ * most straightforward implementation of text aggregation for TTS processing.
58
+ */
59
+ export class SimpleTextAggregator extends BaseTextAggregator {
60
+ _text;
61
+ _lookaheadState;
62
+ /**
63
+ * Initialize the simple text aggregator.
64
+ *
65
+ * Creates an empty text buffer ready to begin accumulating text tokens.
66
+ *
67
+ * @param options Additional arguments passed to BaseTextAggregator (e.g. aggregationType).
68
+ */
69
+ constructor(options = {}) {
70
+ super(options);
71
+ this._text = "";
72
+ this._lookaheadState = _LookaheadState.IDLE;
73
+ }
74
+ /**
75
+ * Get the currently aggregated text.
76
+ *
77
+ * @returns The text that has been accumulated in the buffer.
78
+ */
79
+ get text() {
80
+ return new Aggregation({ text: _stripSpaces(this._text), type: TextType.SENTENCE });
81
+ }
82
+ /**
83
+ * Aggregate text and yield completed aggregations.
84
+ *
85
+ * In SENTENCE mode, processes the input text character-by-character. When
86
+ * sentence-ending punctuation is detected, it waits for non-whitespace
87
+ * lookahead before calling the sentence tokenizer.
88
+ *
89
+ * In TOKEN mode, yields the text immediately without buffering.
90
+ *
91
+ * @param text Text to aggregate.
92
+ * @returns Aggregation objects (sentences in SENTENCE mode, tokens in TOKEN mode).
93
+ */
94
+ async *aggregate(text) {
95
+ if (this._aggregationType === TextType.TOKEN) {
96
+ if (text) {
97
+ yield new Aggregation({ text, type: TextType.TOKEN });
98
+ }
99
+ return;
100
+ }
101
+ // Process text character by character
102
+ for (const char of text) {
103
+ this._text += char;
104
+ // Check for sentence with lookahead
105
+ const result = await this._checkSentenceWithLookahead(char);
106
+ if (result) {
107
+ yield result;
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Check a possible sentence ending using text that arrives after it.
113
+ *
114
+ * `char` is already appended to `this._text`. Punctuation starts a
115
+ * candidate, but the tokenizer decides whether it actually ends a sentence:
116
+ *
117
+ * - `Hello.` or `Hello. `: keep buffering until meaningful text follows.
118
+ * - `Hello. N`: check immediately and emit `Hello.`. In contrast,
119
+ * `Dr. N` and `$29.9` stay buffered as an abbreviation and a decimal.
120
+ * - `...you and I. D`: if unresolved, retry when the word `Did` ends.
121
+ * Don't check intermediate prefixes: `Do` in `Albert I. Douglas`
122
+ * could be mistaken for a sentence starter.
123
+ * - `...you and I. Did?`: the question mark ends the lookahead word and
124
+ * starts a new candidate. First check the earlier period without `?`;
125
+ * then wait for lookahead after `?`.
126
+ *
127
+ * A confirmed boundary emits only the prefix; the following text stays in
128
+ * the buffer. After a word-end retry, stop checking that candidate even if
129
+ * unresolved. At response end, `flush` returns any remaining text.
130
+ *
131
+ * Subclasses can call this via super for tag or pattern handling.
132
+ *
133
+ * @param char The character just appended to the aggregation buffer.
134
+ * @returns Aggregation if a sentence boundary is confirmed, otherwise null.
135
+ */
136
+ async _checkSentenceWithLookahead(char) {
137
+ const isPunctuation = SENTENCE_ENDING_PUNCTUATION.has(char);
138
+ let result = null;
139
+ // The state machine requests a check at the first lookahead character
140
+ // or the following word's end, not at every character in between.
141
+ if (this._advanceLookahead(char, { isPunctuation })) {
142
+ // For "...I. Did?", check "...I. Did" for the earlier boundary.
143
+ // Including "?" could make the terminal-punctuation fallback accept
144
+ // the whole buffer. This temporary slice does not discard the "?".
145
+ const candidate = isPunctuation ? this._text.slice(0, -char.length) : this._text;
146
+ const eosMarker = matchEndofsentence(candidate, { language: this.language });
147
+ if (eosMarker) {
148
+ result = new Aggregation({
149
+ text: _stripSpaces(this._text.slice(0, eosMarker)),
150
+ type: TextType.SENTENCE,
151
+ });
152
+ // Keep the lookahead text for the next sentence ("N" in "Hello. N").
153
+ this._text = this._text.slice(eosMarker);
154
+ this._lookaheadState = _LookaheadState.IDLE;
155
+ }
156
+ }
157
+ // A trailing "?" in "...I. Did?" needs its own lookahead, whether or not
158
+ // the retry above found a boundary at the earlier period.
159
+ if (isPunctuation) {
160
+ this._lookaheadState = _LookaheadState.AWAITING_CHARACTER;
161
+ }
162
+ return result;
163
+ }
164
+ /**
165
+ * Advance the pending candidate and decide whether to check its boundary.
166
+ *
167
+ * Check once at the first non-whitespace character, then once more when
168
+ * the following word ends. Opening quotes or symbols do not start a word.
169
+ *
170
+ * If the first tokenizer check finds no boundary:
171
+ *
172
+ * 'I. ' -> AWAITING_CHARACTER
173
+ * 'I. "' -> AWAITING_WORD (check at the quote)
174
+ * 'I. "D' -> IN_WORD (no check)
175
+ * 'I. "Did ' -> IDLE (retry at the word-ending space)
176
+ *
177
+ * The caller performs the tokenizer check when this method returns true.
178
+ *
179
+ * @param char The most recently appended character.
180
+ * @param options.isPunctuation Whether the character is sentence-ending punctuation.
181
+ * @returns Whether the buffered text is ready for a tokenizer check.
182
+ */
183
+ _advanceLookahead(char, options) {
184
+ const { isPunctuation } = options;
185
+ switch (this._lookaheadState) {
186
+ case _LookaheadState.IDLE:
187
+ return false;
188
+ case _LookaheadState.AWAITING_CHARACTER:
189
+ if (isSpace(char) || isPunctuation) {
190
+ return false;
191
+ }
192
+ this._lookaheadState = isAlnum(char)
193
+ ? _LookaheadState.IN_WORD
194
+ : _LookaheadState.AWAITING_WORD;
195
+ // Ordinary boundaries such as "Hello. N" can emit immediately.
196
+ return true;
197
+ case _LookaheadState.AWAITING_WORD:
198
+ if (isAlnum(char)) {
199
+ this._lookaheadState = _LookaheadState.IN_WORD;
200
+ }
201
+ return false;
202
+ case _LookaheadState.IN_WORD:
203
+ // Never retry at a partial prefix such as "Do" inside "Douglas".
204
+ if (isSpace(char) || isPunctuation) {
205
+ this._lookaheadState = _LookaheadState.IDLE;
206
+ return true;
207
+ }
208
+ return false;
209
+ }
210
+ return false;
211
+ }
212
+ /**
213
+ * Flush any remaining text in the buffer.
214
+ *
215
+ * Returns any text remaining in the buffer. This is called at the end
216
+ * of a stream to ensure all text is processed. In TOKEN mode, returns
217
+ * null since tokens are yielded immediately.
218
+ *
219
+ * @returns Any remaining text as a sentence, or null if buffer is empty or in TOKEN mode.
220
+ */
221
+ async flush() {
222
+ if (this._aggregationType === TextType.TOKEN) {
223
+ return null;
224
+ }
225
+ if (this._text) {
226
+ // Return whatever we have in the buffer
227
+ const result = this._text;
228
+ await this.reset();
229
+ return new Aggregation({ text: _stripSpaces(result), type: TextType.SENTENCE });
230
+ }
231
+ return null;
232
+ }
233
+ /**
234
+ * Handle interruptions by clearing the text buffer.
235
+ *
236
+ * Called when an interruption occurs in the processing pipeline,
237
+ * discarding any partially accumulated text.
238
+ */
239
+ async handleInterruption() {
240
+ this._text = "";
241
+ this._lookaheadState = _LookaheadState.IDLE;
242
+ }
243
+ /**
244
+ * Clear the internally aggregated text.
245
+ *
246
+ * Resets the aggregator to its initial empty state, discarding
247
+ * any accumulated text content.
248
+ */
249
+ async reset() {
250
+ this._text = "";
251
+ this._lookaheadState = _LookaheadState.IDLE;
252
+ }
253
+ }
254
+ //# sourceMappingURL=simple_text_aggregator.js.map
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Skip tags aggregator for preventing sentence boundaries within tagged content.
3
+ *
4
+ * This module provides a text aggregator that prevents end-of-sentence matching
5
+ * between specified start/end tag pairs, ensuring that tagged content is processed
6
+ * as a unit regardless of internal punctuation.
7
+ */
8
+ import { type StartEndTags } from "../string.ts";
9
+ import { Aggregation } from "./base_text_aggregator.ts";
10
+ import { SimpleTextAggregator, type SimpleTextAggregatorOptions } from "./simple_text_aggregator.ts";
11
+ export interface SkipTagsAggregatorOptions extends SimpleTextAggregatorOptions {
12
+ /**
13
+ * Sequence of StartEndTags defining the tag pairs that should prevent
14
+ * sentence boundary detection.
15
+ */
16
+ tags: readonly StartEndTags[];
17
+ }
18
+ /**
19
+ * Aggregator that prevents end of sentence matching between start/end tags.
20
+ *
21
+ * This aggregator buffers text until it finds an end of sentence or a start
22
+ * tag. If a start tag is found the aggregator will keep aggregating text
23
+ * unconditionally until the corresponding end tag is found. It's particularly
24
+ * useful for processing content with custom delimiters that should prevent
25
+ * text from being considered for end of sentence matching.
26
+ *
27
+ * The aggregator ensures that tags spanning multiple text chunks are correctly
28
+ * identified and that content within tags is never split at sentence boundaries.
29
+ */
30
+ export declare class SkipTagsAggregator extends SimpleTextAggregator {
31
+ protected _tags: readonly StartEndTags[];
32
+ protected _currentTag: StartEndTags | null;
33
+ protected _currentTagIndex: number;
34
+ /**
35
+ * Initialize the skip tags aggregator.
36
+ *
37
+ * @param options.tags Tag pairs that should prevent sentence boundary detection.
38
+ * Other options are passed to SimpleTextAggregator (e.g. aggregationType).
39
+ */
40
+ constructor(options: SkipTagsAggregatorOptions);
41
+ /**
42
+ * Aggregate text while respecting tag boundaries.
43
+ *
44
+ * Processes the input text character-by-character, updates tag state, and
45
+ * uses the parent's lookahead logic for sentence detection when not
46
+ * inside tags.
47
+ *
48
+ * In TOKEN mode, text is passed through immediately unless we're inside
49
+ * a tag, in which case we buffer until the closing tag is found. Text
50
+ * ending in a partial start tag (e.g. `<spe` of `<spell>`) is held
51
+ * back until a later chunk determines whether it begins a tag, so a tag
52
+ * split across chunks is still recognized.
53
+ *
54
+ * @param text Text to aggregate.
55
+ * @returns Aggregation objects containing text up to a sentence boundary,
56
+ * marked as SENTENCE type (or TOKEN type in TOKEN mode).
57
+ */
58
+ aggregate(text: string): AsyncGenerator<Aggregation>;
59
+ /**
60
+ * Flush any remaining text in the buffer.
61
+ *
62
+ * In SENTENCE mode, returns the buffered text as-is: tags are
63
+ * pass-through markers, so content is spoken whether or not a start
64
+ * tag's closing tag ever arrived. In TOKEN mode, returns any text
65
+ * still buffered behind an unclosed tag instead of discarding it.
66
+ *
67
+ * @returns Any remaining text, or null if the buffer is empty.
68
+ */
69
+ flush(): Promise<Aggregation | null>;
70
+ /**
71
+ * Handle interruptions by clearing the buffer and tag state.
72
+ *
73
+ * Called when an interruption occurs in the processing pipeline,
74
+ * to reset the state and discard any partially aggregated text.
75
+ */
76
+ handleInterruption(): Promise<void>;
77
+ /**
78
+ * Clear the internally aggregated text and tag state.
79
+ *
80
+ * Resets the aggregator to its initial state, discarding any
81
+ * buffered text.
82
+ */
83
+ reset(): Promise<void>;
84
+ }
85
+ //# sourceMappingURL=skip_tags_aggregator.d.ts.map