@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,460 @@
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/string.py
6
+ /**
7
+ * Text processing utilities for sentence boundary detection and tag parsing.
8
+ *
9
+ * This module provides utilities for natural language text processing including
10
+ * sentence boundary detection, email and number pattern handling, and XML-style
11
+ * tag parsing for structured text content.
12
+ *
13
+ * Sentence boundaries use sentencex's embedded language rules without external
14
+ * data, like upstream: `@pipedog/sentencex-wasm` is the same sentencex
15
+ * release upstream pins, compiled to WebAssembly so it runs on every runtime.
16
+ * The segmenter is pluggable with `setSentenceSegmenter()`;
17
+ * `intlSentenceSegmenter` is a lighter `Intl.Segmenter`-based alternative.
18
+ *
19
+ * Offsets returned by this module are JavaScript string indices (UTF-16 code
20
+ * units), so `text.slice(0, matchEndofsentence(text))` is the first sentence.
21
+ */
22
+ import { segment } from "@pipedog/sentencex-wasm";
23
+ const QUOTED_WORD_END = /(?<![\p{L}\p{N}_])(["'“‘«‹„‟「『]+)[\p{L}\p{N}_.]+\.$/u;
24
+ /**
25
+ * Normalize a language code for sentencex's language fallback map.
26
+ *
27
+ * @param language Language code, optionally with a region. null, empty, and
28
+ * automatic language selections use English.
29
+ * @returns A lowercase base language code. The segmenter resolves unsupported codes.
30
+ */
31
+ export function resolveSentenceTokenizerLanguage(language) {
32
+ if (typeof language !== "string") {
33
+ return "en";
34
+ }
35
+ const normalized = language.trim().toLowerCase().replaceAll("_", "-").split("-")[0] ?? "";
36
+ return normalized === "" || normalized === "auto" ? "en" : normalized;
37
+ }
38
+ // Words that end in a period without ending a sentence. The default segmenter
39
+ // merges a split that follows one of them. Lowercase, without the period.
40
+ const ABBREVIATIONS = new Set([
41
+ // English
42
+ "mr",
43
+ "mrs",
44
+ "ms",
45
+ "dr",
46
+ "prof",
47
+ "sr",
48
+ "jr",
49
+ "st",
50
+ "mt",
51
+ "vs",
52
+ "etc",
53
+ "e.g",
54
+ "i.e",
55
+ "a.m",
56
+ "p.m",
57
+ "u.s",
58
+ "u.k",
59
+ "no",
60
+ "vol",
61
+ "fig",
62
+ "inc",
63
+ "ltd",
64
+ "co",
65
+ "corp",
66
+ "gen",
67
+ "gov",
68
+ "sen",
69
+ "rep",
70
+ "rev",
71
+ "capt",
72
+ "col",
73
+ "lt",
74
+ "sgt",
75
+ "jan",
76
+ "feb",
77
+ "mar",
78
+ "apr",
79
+ "jun",
80
+ "jul",
81
+ "aug",
82
+ "sep",
83
+ "sept",
84
+ "oct",
85
+ "nov",
86
+ "dec",
87
+ // Other European languages
88
+ "z.b",
89
+ "d.h",
90
+ "bzw",
91
+ "ca",
92
+ "sra",
93
+ "srta",
94
+ "dra",
95
+ "p",
96
+ "pp",
97
+ "dott",
98
+ "sig",
99
+ "ing",
100
+ "avv",
101
+ "mme",
102
+ "mlle",
103
+ ]);
104
+ function endsWithAbbreviation(span) {
105
+ const trimmed = span.trimEnd();
106
+ if (!trimmed.endsWith("."))
107
+ return false;
108
+ const match = /([\p{L}.]+)\.$/u.exec(trimmed);
109
+ if (!match?.[1])
110
+ return false;
111
+ const word = match[1].replace(/^\.+/, "");
112
+ if (ABBREVIATIONS.has(word.toLowerCase()))
113
+ return true;
114
+ // Dotted acronyms such as "U.S.A." or "N.A.S.A." keep going.
115
+ return /^(\p{L}\.)+\p{L}$/u.test(word);
116
+ }
117
+ /** An alternative segmenter: `Intl.Segmenter` plus abbreviation merging. */
118
+ export const intlSentenceSegmenter = (language, text) => {
119
+ let segmenter;
120
+ try {
121
+ segmenter = new Intl.Segmenter(language, { granularity: "sentence" });
122
+ }
123
+ catch {
124
+ segmenter = new Intl.Segmenter("en", { granularity: "sentence" });
125
+ }
126
+ const spans = [];
127
+ for (const { segment } of segmenter.segment(text)) {
128
+ const previous = spans[spans.length - 1];
129
+ if (previous !== undefined && (endsWithAbbreviation(previous) || !previous.trim())) {
130
+ spans[spans.length - 1] = previous + segment;
131
+ }
132
+ else {
133
+ spans.push(segment);
134
+ }
135
+ }
136
+ return spans;
137
+ };
138
+ /** The default segmenter: sentencex, as upstream. */
139
+ export const sentencexSegmenter = (language, text) => segment(language, text);
140
+ let sentenceSegmenter = sentencexSegmenter;
141
+ const tokenizerCache = new Map();
142
+ /**
143
+ * Install the sentence segmenter used for sentence boundary detection (for
144
+ * example `intlSentenceSegmenter`). Pass `null` to restore the default,
145
+ * sentencex.
146
+ */
147
+ export function setSentenceSegmenter(segmenter) {
148
+ sentenceSegmenter = segmenter ?? sentencexSegmenter;
149
+ tokenizerCache.clear();
150
+ }
151
+ /**
152
+ * Return a sentence splitter that preserves source offsets before whitespace.
153
+ *
154
+ * Paragraph separators belong to the following sentence. Trailing whitespace
155
+ * stays in the aggregation buffer until that sentence is emitted.
156
+ */
157
+ function sentTokenizer(language = "en") {
158
+ const cached = tokenizerCache.get(language);
159
+ if (cached)
160
+ return cached;
161
+ const code = resolveSentenceTokenizerLanguage(language);
162
+ const tokenize = (text) => {
163
+ const sentences = [];
164
+ let pending = "";
165
+ for (const span of sentenceSegmenter(code, text)) {
166
+ pending += span;
167
+ if (span.trim()) {
168
+ const sentence = pending.trimEnd();
169
+ sentences.push(sentence);
170
+ pending = pending.slice(sentence.length);
171
+ }
172
+ }
173
+ return sentences;
174
+ };
175
+ tokenizerCache.set(language, tokenize);
176
+ return tokenize;
177
+ }
178
+ export const SENTENCE_ENDING_PUNCTUATION = new Set([
179
+ // Latin script punctuation (most European languages, Filipino, etc.)
180
+ ".",
181
+ "!",
182
+ "?",
183
+ ";",
184
+ "…",
185
+ // East Asian punctuation (Chinese (Traditional & Simplified), Japanese, Korean)
186
+ "。", // Ideographic full stop
187
+ "?", // Full-width question mark
188
+ "!", // Full-width exclamation mark
189
+ ";", // Full-width semicolon
190
+ ".", // Full-width period
191
+ "。", // Halfwidth ideographic period
192
+ // Indic scripts punctuation (Hindi, Sanskrit, Marathi, Nepali, Bengali, Tamil, Telugu, Kannada, Malayalam, Gujarati, Punjabi, Oriya, Assamese)
193
+ "।", // Devanagari danda (single vertical bar)
194
+ "॥", // Devanagari double danda (double vertical bar)
195
+ // Arabic script punctuation (Arabic, Persian, Urdu, Pashto)
196
+ "؟", // Arabic question mark
197
+ "؛", // Arabic semicolon
198
+ "۔", // Urdu full stop
199
+ "؏", // Arabic sign misra (classical texts)
200
+ // Myanmar/Burmese
201
+ "၊", // Myanmar sign little section
202
+ "။", // Myanmar sign section
203
+ // Khmer
204
+ "។", // Khmer sign khan
205
+ "៕", // Khmer sign bariyoosan
206
+ // Lao
207
+ "໌", // Lao cancellation mark (used as period)
208
+ // Tibetan
209
+ "།", // Tibetan mark intersyllabic tsheg
210
+ "༎", // Tibetan mark delimiter tsheg bstar
211
+ // Armenian
212
+ "։", // Armenian full stop
213
+ "՜", // Armenian exclamation mark
214
+ "՞", // Armenian question mark
215
+ // Ethiopic script (Amharic)
216
+ "።", // Ethiopic full stop
217
+ "፧", // Ethiopic question mark
218
+ "፨", // Ethiopic paragraph separator
219
+ ]);
220
+ // Latin punctuation that sentencex handles well — these need sentencex's disambiguation
221
+ // because "." can appear in abbreviations, decimals, etc.
222
+ const LATIN_SENTENCE_ENDING_PUNCTUATION = new Set([".", "!", "?", ";", "…"]);
223
+ // Non-Latin sentence-ending punctuation that is always unambiguous and never needs
224
+ // the tokenizer's disambiguation logic. Used for punctuation outside its rules.
225
+ export const UNAMBIGUOUS_SENTENCE_ENDING_PUNCTUATION = new Set([...SENTENCE_ENDING_PUNCTUATION].filter((p) => !LATIN_SENTENCE_ENDING_PUNCTUATION.has(p)));
226
+ /**
227
+ * Replace occurrences of a substring within a matched section of text.
228
+ *
229
+ * @param text The input text in which replacements will be made.
230
+ * @param match A regex match representing the section of text to modify.
231
+ * @param old The substring to be replaced.
232
+ * @param replacement The substring to replace `old` with.
233
+ * @returns The modified text with the specified replacements made within the matched section.
234
+ */
235
+ export function replaceMatch(text, match, old, replacement) {
236
+ const start = match.index ?? 0;
237
+ const end = start + match[0].length;
238
+ const replaced = text.slice(start, end).replaceAll(old, replacement);
239
+ return text.slice(0, start) + replaced + text.slice(end);
240
+ }
241
+ /**
242
+ * Find the position of the end of a sentence in the provided text.
243
+ *
244
+ * This function uses the sentence tokenizer to detect sentence boundaries in
245
+ * the input text, combined with punctuation verification to ensure that
246
+ * single tokens without proper sentence endings aren't considered complete
247
+ * sentences.
248
+ *
249
+ * @param text The input text in which to find the end of the sentence.
250
+ * @param options.language Language code. Defaults to English.
251
+ * @returns The position of the end of the sentence if found, otherwise 0.
252
+ */
253
+ export function matchEndofsentence(text, options = {}) {
254
+ const language = options.language ?? null;
255
+ text = text.trimEnd();
256
+ if (!text) {
257
+ return 0;
258
+ }
259
+ let sentences = sentTokenizer(resolveSentenceTokenizerLanguage(language))(text);
260
+ if (sentences.length === 0) {
261
+ return 0;
262
+ }
263
+ let firstSentence = sentences[0];
264
+ let tokenizerText = text;
265
+ // With an unfinished quote such as 'She said, "Dr. S', the segmenter can
266
+ // split after '"Dr.'. Recheck a proposed split after a quoted word ending in
267
+ // a period, letting the segmenter decide whether that word is an
268
+ // abbreviation.
269
+ const quote = sentences.length > 1 ? QUOTED_WORD_END.exec(firstSentence) : null;
270
+ if (quote) {
271
+ // Group 1 contains only the opening quote characters. Replace them with
272
+ // equal-width spaces so the segmenter sees the abbreviation without the
273
+ // quote. Boundary offsets still refer to the original text, which keeps
274
+ // its quotes.
275
+ const start = quote.index;
276
+ const end = start + quote[1].length;
277
+ tokenizerText = text.slice(0, start) + " ".repeat(end - start) + text.slice(end);
278
+ sentences = sentTokenizer(resolveSentenceTokenizerLanguage(language))(tokenizerText);
279
+ firstSentence = sentences[0];
280
+ }
281
+ // A single span can be an incomplete fragment; require terminal punctuation.
282
+ if (sentences.length === 1 && firstSentence === tokenizerText) {
283
+ if (text && SENTENCE_ENDING_PUNCTUATION.has(text[text.length - 1])) {
284
+ return text.length;
285
+ }
286
+ // Additional punctuation can delimit sentences outside the selected rules.
287
+ for (let i = 0; i < text.length; i++) {
288
+ if (UNAMBIGUOUS_SENTENCE_ENDING_PUNCTUATION.has(text[i])) {
289
+ return i + 1;
290
+ }
291
+ }
292
+ return 0;
293
+ }
294
+ if (sentences.length > 1) {
295
+ return firstSentence.length;
296
+ }
297
+ return 0;
298
+ }
299
+ function countOccurrences(text, sub) {
300
+ if (sub === "")
301
+ return text.length + 1;
302
+ let count = 0;
303
+ let index = text.indexOf(sub);
304
+ while (index !== -1) {
305
+ count++;
306
+ index = text.indexOf(sub, index + sub.length);
307
+ }
308
+ return count;
309
+ }
310
+ /**
311
+ * Parse text to identify start and end tag pairs.
312
+ *
313
+ * If a start tag was previously found (i.e., currentTag is valid), wait for
314
+ * the corresponding end tag. Otherwise, wait for a start tag.
315
+ *
316
+ * This function returns the index in the text where parsing should continue
317
+ * in the next call and the current or new tags.
318
+ *
319
+ * @param text The text to be parsed.
320
+ * @param tags List of tuples containing start and end tags.
321
+ * @param currentTag The currently active tags, if any.
322
+ * @param currentTagIndex The current index in the text.
323
+ * @returns A tuple containing null or the current tag and the index of the text.
324
+ */
325
+ export function parseStartEndTags(text, tags, currentTag, currentTagIndex) {
326
+ // If we are already inside a tag, check if the end tag is in the text.
327
+ if (currentTag) {
328
+ const [, endTag] = currentTag;
329
+ if (text.slice(currentTagIndex).includes(endTag)) {
330
+ return [null, text.length];
331
+ }
332
+ return [currentTag, currentTagIndex];
333
+ }
334
+ // Check if any start tag appears in the text
335
+ for (const [startTag, endTag] of tags) {
336
+ const rest = text.slice(currentTagIndex);
337
+ const startTagCount = countOccurrences(rest, startTag);
338
+ const endTagCount = countOccurrences(rest, endTag);
339
+ if (startTagCount === 0 && endTagCount === 0) {
340
+ return [null, currentTagIndex];
341
+ }
342
+ else if (startTagCount > endTagCount) {
343
+ return [[startTag, endTag], text.length];
344
+ }
345
+ else if (startTagCount === endTagCount) {
346
+ return [null, text.length];
347
+ }
348
+ }
349
+ return [null, currentTagIndex];
350
+ }
351
+ /**
352
+ * Find the length of the longest suffix of text that is a proper prefix of a candidate.
353
+ *
354
+ * Used to detect a delimiter (e.g., an XML-style start tag) that has been
355
+ * split across two text chunks: the trailing partial delimiter can be held
356
+ * back from output until the next chunk completes it, rather than being
357
+ * flushed as plain text and losing the delimiter.
358
+ *
359
+ * @param text The text to check for a trailing partial match.
360
+ * @param candidates Full strings to match a proper prefix of against the end of text.
361
+ * @returns The length of the longest matching suffix, or 0 if no candidate has a
362
+ * proper prefix matching the end of text.
363
+ */
364
+ export function longestTrailingPartialMatch(text, candidates) {
365
+ let longest = 0;
366
+ for (const candidate of candidates) {
367
+ const maxLen = Math.min(text.length, candidate.length - 1);
368
+ for (let length = maxLen; length > longest; length--) {
369
+ if (text.slice(text.length - length) === candidate.slice(0, length)) {
370
+ longest = length;
371
+ break;
372
+ }
373
+ }
374
+ }
375
+ return longest;
376
+ }
377
+ /**
378
+ * Class representing a part of text for concatenation with `concatenateAggregatedText`.
379
+ *
380
+ * - `text`: The text content.
381
+ * - `includesInterPartSpaces`: Whether any necessary inter-frame
382
+ * (leading/trailing) spaces are already included in the text.
383
+ */
384
+ export class TextPartForConcatenation {
385
+ text;
386
+ includesInterPartSpaces;
387
+ constructor(options) {
388
+ this.text = options.text;
389
+ this.includesInterPartSpaces = options.includesInterPartSpaces;
390
+ }
391
+ toString() {
392
+ return `${this.constructor.name}(text: [${this.text}], includes_inter_part_spaces: ${this.includesInterPartSpaces ? "True" : "False"})`;
393
+ }
394
+ }
395
+ function isSpace(ch) {
396
+ return ch !== undefined && /\s/u.test(ch);
397
+ }
398
+ /**
399
+ * Concatenate a list of text parts into a single string.
400
+ *
401
+ * This function joins the provided list of text parts into a single string,
402
+ * taking into account whether or not the parts already contain spacing.
403
+ *
404
+ * This function is useful for aggregating text segments received from LLMs or
405
+ * transcription services.
406
+ *
407
+ * @param textParts A list of text parts to concatenate.
408
+ * @returns A single concatenated string.
409
+ */
410
+ export function concatenateAggregatedText(textParts) {
411
+ let result = "";
412
+ let lastIncludesInterPartSpaces = false;
413
+ if (textParts.length === 0) {
414
+ return result;
415
+ }
416
+ const appendPart = (part) => {
417
+ result += part.text;
418
+ lastIncludesInterPartSpaces = part.includesInterPartSpaces;
419
+ };
420
+ for (const part of textParts) {
421
+ // Part is empty.
422
+ // Skip.
423
+ if (!part.text) {
424
+ continue;
425
+ }
426
+ // Result is as yet empty.
427
+ // Just append.
428
+ if (!result) {
429
+ appendPart(part);
430
+ continue;
431
+ }
432
+ if (part.includesInterPartSpaces && lastIncludesInterPartSpaces) {
433
+ // This part is part of an ongoing run that has spaces already included.
434
+ // Just append.
435
+ appendPart(part);
436
+ }
437
+ else if (!part.includesInterPartSpaces && !lastIncludesInterPartSpaces) {
438
+ // This part is part of an ongoing run that has no spaces included.
439
+ // Add a space before appending.
440
+ result += " ";
441
+ appendPart(part);
442
+ }
443
+ else {
444
+ // This part represents a transition to a new run (spaces -> no spaces, or vice versa).
445
+ // Add a space if needed, before appending.
446
+ if (!isSpace(result[result.length - 1]) && !isSpace(part.text[0])) {
447
+ result += " ";
448
+ }
449
+ appendPart(part);
450
+ }
451
+ }
452
+ // NOTE: the above logic assumes that runs of text parts with
453
+ // includesInterPartSpaces=true are well-formed, i.e. they're not
454
+ // actually multiple separate runs with a space-less boundary, like
455
+ // "hello ", "world.", "goodnight ", "moon."
456
+ // Clean up any excessive whitespace
457
+ result = result.trim();
458
+ return result;
459
+ }
460
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1,25 @@
1
+ /** Base notifier interface for Pipecat. */
2
+ /**
3
+ * Abstract base class for notification mechanisms.
4
+ *
5
+ * Provides a standard interface for implementing notification and waiting
6
+ * patterns used for event coordination and signaling between components
7
+ * in the Pipecat framework.
8
+ */
9
+ export declare abstract class BaseNotifier {
10
+ /**
11
+ * Send a notification signal.
12
+ *
13
+ * Implementations should trigger any waiting coroutines or processes
14
+ * that are blocked on this notifier.
15
+ */
16
+ abstract notify(): Promise<void>;
17
+ /**
18
+ * Wait for a notification signal.
19
+ *
20
+ * Implementations should block until a notification is received
21
+ * from the corresponding notify() call.
22
+ */
23
+ abstract wait(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=base_notifier.d.ts.map
@@ -0,0 +1,16 @@
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/sync/base_notifier.py
6
+ /** Base notifier interface for Pipecat. */
7
+ /**
8
+ * Abstract base class for notification mechanisms.
9
+ *
10
+ * Provides a standard interface for implementing notification and waiting
11
+ * patterns used for event coordination and signaling between components
12
+ * in the Pipecat framework.
13
+ */
14
+ export class BaseNotifier {
15
+ }
16
+ //# sourceMappingURL=base_notifier.js.map
@@ -0,0 +1,38 @@
1
+ /** Event-based notifier implementation using asyncio Event primitives. */
2
+ import { Event } from "@pipedog/asyncio";
3
+ import { BaseNotifier } from "./base_notifier.ts";
4
+ /**
5
+ * Event-based notifier using asyncio.Event for task synchronization.
6
+ *
7
+ * Provides a simple single-consumer notification mechanism where one task
8
+ * can signal an event and one other task can wait for that event to occur.
9
+ * The event is automatically cleared after each wait operation.
10
+ *
11
+ * Note: This notifier supports only a single waiter at a time. If multiple
12
+ * tasks wait concurrently, notifications may be lost.
13
+ */
14
+ export declare class EventNotifier extends BaseNotifier {
15
+ protected _event: Event;
16
+ /**
17
+ * Initialize the event notifier.
18
+ *
19
+ * Creates an internal asyncio.Event for managing notifications.
20
+ */
21
+ constructor();
22
+ /**
23
+ * Signal the event to notify waiting tasks.
24
+ *
25
+ * Sets the internal event, causing any tasks waiting on this
26
+ * notifier to be awakened.
27
+ */
28
+ notify(): Promise<void>;
29
+ /**
30
+ * Wait for the event to be signaled.
31
+ *
32
+ * Blocks until another task calls notify(). Automatically clears
33
+ * the event after being awakened so subsequent calls will wait
34
+ * for the next notification.
35
+ */
36
+ wait(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=event_notifier.d.ts.map
@@ -0,0 +1,51 @@
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/sync/event_notifier.py
6
+ /** Event-based notifier implementation using asyncio Event primitives. */
7
+ import { Event } from "@pipedog/asyncio";
8
+ import { BaseNotifier } from "./base_notifier.js";
9
+ /**
10
+ * Event-based notifier using asyncio.Event for task synchronization.
11
+ *
12
+ * Provides a simple single-consumer notification mechanism where one task
13
+ * can signal an event and one other task can wait for that event to occur.
14
+ * The event is automatically cleared after each wait operation.
15
+ *
16
+ * Note: This notifier supports only a single waiter at a time. If multiple
17
+ * tasks wait concurrently, notifications may be lost.
18
+ */
19
+ export class EventNotifier extends BaseNotifier {
20
+ _event;
21
+ /**
22
+ * Initialize the event notifier.
23
+ *
24
+ * Creates an internal asyncio.Event for managing notifications.
25
+ */
26
+ constructor() {
27
+ super();
28
+ this._event = new Event();
29
+ }
30
+ /**
31
+ * Signal the event to notify waiting tasks.
32
+ *
33
+ * Sets the internal event, causing any tasks waiting on this
34
+ * notifier to be awakened.
35
+ */
36
+ async notify() {
37
+ this._event.set();
38
+ }
39
+ /**
40
+ * Wait for the event to be signaled.
41
+ *
42
+ * Blocks until another task calls notify(). Automatically clears
43
+ * the event after being awakened so subsequent calls will wait
44
+ * for the next notification.
45
+ */
46
+ async wait() {
47
+ await this._event.wait();
48
+ this._event.clear();
49
+ }
50
+ }
51
+ //# sourceMappingURL=event_notifier.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
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/sync/__init__.py
6
+ export {};
7
+ //# sourceMappingURL=index.js.map