@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,21 @@
1
+ /** Expand phone numbers into space-separated digit sequences for TTS. */
2
+ import type { TextType } from "../../../frames/frames.ts";
3
+ /**
4
+ * Space out phone number digits so TTS reads them individually.
5
+ *
6
+ * This transformer is alphanumeric-preserving: digits are kept, only separators
7
+ * change to spaces, so the `WordCompletionTracker` requires no segment-map
8
+ * overhead.
9
+ *
10
+ * @param text Input text possibly containing phone numbers.
11
+ * @param _textType Text type of the text frame (unused).
12
+ * @returns Text with phone numbers replaced by space-separated digit sequences.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const result = await expandPhoneNumbers("Call 123-456-7890 now", "*");
17
+ * // "Call 1 2 3 4 5 6 7 8 9 0 now"
18
+ * ```
19
+ */
20
+ export declare function expandPhoneNumbers(text: string, _textType: string | TextType): Promise<string>;
21
+ //# sourceMappingURL=phone.d.ts.map
@@ -0,0 +1,39 @@
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/transforms/phone.py
6
+ // Matches common phone formats: (123) 456-7890, 123-456-7890, 123.456.7890,
7
+ // +1 800 555 1234, etc.
8
+ const PHONE_RE = new RegExp("(?<!\\p{Nd})" + // not preceded by a digit (no partial match inside a longer number)
9
+ "(\\+?1[\\s.\\-]?)?" + // optional country code
10
+ "(\\(?\\p{Nd}{3}\\)?[\\s.\\-]?)" + // area code
11
+ "(\\p{Nd}{3}[\\s.\\-]?)" + // exchange
12
+ "(\\p{Nd}{4})" + // subscriber
13
+ "(?!\\p{Nd})", // not followed by a digit
14
+ "gu");
15
+ function spaceDigits(match) {
16
+ const digits = match.replace(/\P{Nd}/gu, "");
17
+ return [...digits].join(" ");
18
+ }
19
+ /**
20
+ * Space out phone number digits so TTS reads them individually.
21
+ *
22
+ * This transformer is alphanumeric-preserving: digits are kept, only separators
23
+ * change to spaces, so the `WordCompletionTracker` requires no segment-map
24
+ * overhead.
25
+ *
26
+ * @param text Input text possibly containing phone numbers.
27
+ * @param _textType Text type of the text frame (unused).
28
+ * @returns Text with phone numbers replaced by space-separated digit sequences.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const result = await expandPhoneNumbers("Call 123-456-7890 now", "*");
33
+ * // "Call 1 2 3 4 5 6 7 8 9 0 now"
34
+ * ```
35
+ */
36
+ export async function expandPhoneNumbers(text, _textType) {
37
+ return text.replace(PHONE_RE, (match) => spaceDigits(match));
38
+ }
39
+ //# sourceMappingURL=phone.js.map
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Replace words with a TTS service's pronunciation markup.
3
+ *
4
+ * Applications usually reach this through a service's
5
+ * `TTSService.pronunciationTransformIpa` static method, which supplies the
6
+ * service's own formatter.
7
+ */
8
+ import type { TextType } from "../../../frames/frames.ts";
9
+ /** Turns `(word, ipa)` into the text to send, or null when it cannot. */
10
+ export type PronunciationFormatter = (word: string, ipa: string) => string | null;
11
+ /** Returns the text to send in place of a match. */
12
+ export type PronunciationReplacer = (match: RegExpExecArray) => string;
13
+ export interface PronunciationTransform {
14
+ (text: string, textType: string | TextType): Promise<string>;
15
+ }
16
+ /**
17
+ * A text transform that replaces words with a service's pronunciation markup.
18
+ *
19
+ * TTS services recognize it among their `textTransforms` and skip it while
20
+ * they cannot read pronunciation markup (see `TTSService.supportsPronunciations`),
21
+ * so the words are spoken as written.
22
+ */
23
+ export declare class PronunciationTransform {
24
+ protected _pattern: RegExp | null;
25
+ protected _replace: PronunciationReplacer;
26
+ /**
27
+ * Initialize the transform.
28
+ *
29
+ * @param pattern Matches the words to replace, or null when there are none.
30
+ * @param replace Returns the text to send in place of a match.
31
+ */
32
+ constructor(pattern: RegExp | null, replace: PronunciationReplacer);
33
+ /**
34
+ * Replace every matched word in `text`.
35
+ *
36
+ * Python's `__call__`; calling the instance runs this.
37
+ *
38
+ * @param text The text about to be sent to the service.
39
+ * @param _textType The text type of the text (unused).
40
+ * @returns The text with each matched word replaced.
41
+ */
42
+ transform(text: string, _textType: string | TextType): string;
43
+ }
44
+ /**
45
+ * Return a transform that replaces each word with its formatted pronunciation.
46
+ *
47
+ * Words match whole and case-insensitively, longest first, and never as part
48
+ * of a longer or hyphenated word. The matched text is passed to the formatter,
49
+ * so markup that keeps the word (such as an SSML `<phoneme>` tag) keeps it as
50
+ * written.
51
+ *
52
+ * Every pronunciation is formatted once here, so one the service cannot use
53
+ * is reported when the transform is built rather than while speaking. Those
54
+ * words are left out and spoken as written.
55
+ *
56
+ * @param pronunciations Word to IPA, e.g. `{ Metformin: "mɛtˈfɔɹmɪn" }`.
57
+ * @param formatPronunciation Turns `(word, ipa)` into the text to send, or
58
+ * null when it cannot.
59
+ * @param options.serviceName Name used in the warning for unusable pronunciations.
60
+ * @returns A transform to register with `textTransforms`.
61
+ */
62
+ export declare function pronunciationTransform(pronunciations: Readonly<Record<string, string>>, formatPronunciation: PronunciationFormatter, options?: {
63
+ serviceName?: string;
64
+ }): PronunciationTransform;
65
+ //# sourceMappingURL=pronunciations.d.ts.map
@@ -0,0 +1,112 @@
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/transforms/pronunciations.py
6
+ import { logger } from "../../logger.js";
7
+ /**
8
+ * A text transform that replaces words with a service's pronunciation markup.
9
+ *
10
+ * TTS services recognize it among their `textTransforms` and skip it while
11
+ * they cannot read pronunciation markup (see `TTSService.supportsPronunciations`),
12
+ * so the words are spoken as written.
13
+ */
14
+ // biome-ignore lint/suspicious/noUnsafeDeclarationMerging: adds Python's `__call__` signature to the class.
15
+ export class PronunciationTransform {
16
+ _pattern;
17
+ _replace;
18
+ /**
19
+ * Initialize the transform.
20
+ *
21
+ * @param pattern Matches the words to replace, or null when there are none.
22
+ * @param replace Returns the text to send in place of a match.
23
+ */
24
+ constructor(pattern, replace) {
25
+ const call = async (text, textType) => self.transform(text, textType);
26
+ const self = Object.setPrototypeOf(call, new.target.prototype);
27
+ self._pattern = pattern;
28
+ self._replace = replace;
29
+ // biome-ignore lint/correctness/noConstructorReturn: returning the callable is the point (see above).
30
+ return self;
31
+ }
32
+ /**
33
+ * Replace every matched word in `text`.
34
+ *
35
+ * Python's `__call__`; calling the instance runs this.
36
+ *
37
+ * @param text The text about to be sent to the service.
38
+ * @param _textType The text type of the text (unused).
39
+ * @returns The text with each matched word replaced.
40
+ */
41
+ transform(text, _textType) {
42
+ const pattern = this._pattern;
43
+ if (!pattern)
44
+ return text;
45
+ pattern.lastIndex = 0;
46
+ return text.replace(pattern, (...args) => {
47
+ // `replace` passes (match, ...groups, offset, input); rebuild an exec array.
48
+ const match = [args[0]];
49
+ return this._replace(match);
50
+ });
51
+ }
52
+ }
53
+ /** Python's `re.escape` for a JS (`u`-flag) regular expression. */
54
+ function escapeRegex(text) {
55
+ return text.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&");
56
+ }
57
+ /**
58
+ * Return a transform that replaces each word with its formatted pronunciation.
59
+ *
60
+ * Words match whole and case-insensitively, longest first, and never as part
61
+ * of a longer or hyphenated word. The matched text is passed to the formatter,
62
+ * so markup that keeps the word (such as an SSML `<phoneme>` tag) keeps it as
63
+ * written.
64
+ *
65
+ * Every pronunciation is formatted once here, so one the service cannot use
66
+ * is reported when the transform is built rather than while speaking. Those
67
+ * words are left out and spoken as written.
68
+ *
69
+ * @param pronunciations Word to IPA, e.g. `{ Metformin: "mɛtˈfɔɹmɪn" }`.
70
+ * @param formatPronunciation Turns `(word, ipa)` into the text to send, or
71
+ * null when it cannot.
72
+ * @param options.serviceName Name used in the warning for unusable pronunciations.
73
+ * @returns A transform to register with `textTransforms`.
74
+ */
75
+ export function pronunciationTransform(pronunciations, formatPronunciation, options = {}) {
76
+ const serviceName = options.serviceName ?? "TTS service";
77
+ const phonemes = new Map();
78
+ const unusable = [];
79
+ for (const [rawWord, value] of Object.entries(pronunciations)) {
80
+ const word = rawWord.trim();
81
+ if (!word)
82
+ continue;
83
+ if (formatPronunciation(word, value) === null) {
84
+ unusable.push(word);
85
+ }
86
+ else {
87
+ phonemes.set(word.toLowerCase(), value);
88
+ }
89
+ }
90
+ if (unusable.length > 0) {
91
+ logger.warning(`${serviceName} cannot use these IPA pronunciations, so they ` +
92
+ `will be spoken as written: ${unusable.join(", ")}`);
93
+ }
94
+ let pattern = null;
95
+ if (phonemes.size > 0) {
96
+ // Python's `len` counts code points, not UTF-16 units.
97
+ const words = [...phonemes.keys()].sort((a, b) => [...b].length - [...a].length);
98
+ // Python's Unicode `\w` is letters, digits and underscore.
99
+ pattern = new RegExp(`(?<![\\p{L}\\p{N}_-])(?:${words.map(escapeRegex).join("|")})(?![\\p{L}\\p{N}_-])`, "giu");
100
+ }
101
+ const replace = (match) => {
102
+ const word = match[0];
103
+ // Python indexes the dict directly; a case-folding mismatch would raise
104
+ // there, here the word is kept as written.
105
+ const ipa = phonemes.get(word.toLowerCase());
106
+ if (ipa === undefined)
107
+ return word;
108
+ return formatPronunciation(word, ipa) || word;
109
+ };
110
+ return new PronunciationTransform(pattern, replace);
111
+ }
112
+ //# sourceMappingURL=pronunciations.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * User-defined text replacements for TTS preprocessing.
3
+ *
4
+ * Porting notes: patterns are JavaScript regular expressions (a `RegExp`, or a
5
+ * string compiled with `new RegExp(pattern, "g")`), and replacement strings use
6
+ * JavaScript's `String.prototype.replace` syntax (`$1`, `$<name>`) rather than
7
+ * Python's (`\1`, `\g<name>`). Every match is replaced, as Python's `re.sub`
8
+ * does, whether or not a `RegExp` carries the `g` flag.
9
+ */
10
+ import type { TextType } from "../../../frames/frames.ts";
11
+ /** A find-and-replace rule: `(regexPattern, replacementString)`. */
12
+ export type TextReplacement = readonly [pattern: string | RegExp, replacement: string];
13
+ /**
14
+ * Return a transform that applies a list of find-and-replace rules.
15
+ *
16
+ * Each rule is a `(pattern, replacement)` tuple. Patterns are treated as
17
+ * regular expressions; escape special characters for literal string matching.
18
+ *
19
+ * Rules are applied in the order provided. Whether the resulting transform is
20
+ * alphanumeric-preserving depends on the replacements supplied.
21
+ *
22
+ * Patterns are compiled at construction time so invalid regex patterns raise
23
+ * `SyntaxError` immediately rather than during live TTS processing.
24
+ *
25
+ * @param replacements Ordered list of `(regexPattern, replacementString)` pairs.
26
+ * @returns An async transform callable compatible with `textTransforms`.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const transform = replaceText([
31
+ * [/\bDr\./, "Doctor"],
32
+ * [/\bSt\./, "Street"],
33
+ * [/\bvs\b/, "versus"],
34
+ * ]);
35
+ * const tts = new CartesiaTTSService({ textTransforms: [["*", transform]] });
36
+ * ```
37
+ */
38
+ export declare function replaceText(replacements: readonly TextReplacement[]): (text: string, textType: string | TextType) => Promise<string>;
39
+ //# sourceMappingURL=replacements.d.ts.map
@@ -0,0 +1,46 @@
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/transforms/replacements.py
6
+ function compile(pattern) {
7
+ if (typeof pattern === "string")
8
+ return new RegExp(pattern, "g");
9
+ return pattern.global ? new RegExp(pattern) : new RegExp(pattern, `${pattern.flags}g`);
10
+ }
11
+ /**
12
+ * Return a transform that applies a list of find-and-replace rules.
13
+ *
14
+ * Each rule is a `(pattern, replacement)` tuple. Patterns are treated as
15
+ * regular expressions; escape special characters for literal string matching.
16
+ *
17
+ * Rules are applied in the order provided. Whether the resulting transform is
18
+ * alphanumeric-preserving depends on the replacements supplied.
19
+ *
20
+ * Patterns are compiled at construction time so invalid regex patterns raise
21
+ * `SyntaxError` immediately rather than during live TTS processing.
22
+ *
23
+ * @param replacements Ordered list of `(regexPattern, replacementString)` pairs.
24
+ * @returns An async transform callable compatible with `textTransforms`.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const transform = replaceText([
29
+ * [/\bDr\./, "Doctor"],
30
+ * [/\bSt\./, "Street"],
31
+ * [/\bvs\b/, "versus"],
32
+ * ]);
33
+ * const tts = new CartesiaTTSService({ textTransforms: [["*", transform]] });
34
+ * ```
35
+ */
36
+ export function replaceText(replacements) {
37
+ const compiled = replacements.map(([pattern, replacement]) => [compile(pattern), replacement]);
38
+ return async (text, _textType) => {
39
+ for (const [pattern, replacement] of compiled) {
40
+ pattern.lastIndex = 0;
41
+ text = text.replace(pattern, replacement);
42
+ }
43
+ return text;
44
+ };
45
+ }
46
+ //# sourceMappingURL=replacements.js.map
@@ -0,0 +1,25 @@
1
+ /** Strip Markdown formatting symbols before TTS synthesis. */
2
+ import type { TextType } from "../../../frames/frames.ts";
3
+ /**
4
+ * Remove Markdown formatting symbols that have no spoken equivalent.
5
+ *
6
+ * Strips bold/italic markers, backtick code spans, fenced code blocks, ATX
7
+ * headers, and blockquote markers. Does not modify link or image syntax since
8
+ * those may carry meaningful text (the link label is preserved verbatim).
9
+ *
10
+ * This transformer is alphanumeric-preserving: the normalized alnum sequence of
11
+ * the output is identical to the input, so the `WordCompletionTracker`
12
+ * requires no segment-map overhead.
13
+ *
14
+ * @param text Input text, potentially containing Markdown formatting.
15
+ * @param _textType Text type of the text frame (unused).
16
+ * @returns Text with Markdown formatting symbols removed.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const result = await stripMarkdown("**Hello** and _world_", "*");
21
+ * // "Hello and world"
22
+ * ```
23
+ */
24
+ export declare function stripMarkdown(text: string, _textType: string | TextType): Promise<string>;
25
+ //# sourceMappingURL=strip_markdown.d.ts.map
@@ -0,0 +1,60 @@
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/transforms/strip_markdown.py
6
+ // Translation notes for the patterns below:
7
+ // - Python's `.` matches anything but `\n` (JS's also skips `\r`, U+2028 and
8
+ // U+2029), so it is written `[^\n]`.
9
+ // - Python's `re.MULTILINE` `^` / `$` only break lines at `\n` (JS's `m` flag
10
+ // also breaks at `\r`, U+2028 and U+2029), so they are written
11
+ // `(?<![^\n])` / `(?![^\n])`.
12
+ // - Python's `\b` is Unicode-aware; next to `_` (a word character) it becomes a
13
+ // lookaround on Unicode `\w` (letters, digits and underscore).
14
+ const W = "[\\p{L}\\p{N}_]";
15
+ const keepGroup = (_match, inner) => inner;
16
+ /**
17
+ * Remove Markdown formatting symbols that have no spoken equivalent.
18
+ *
19
+ * Strips bold/italic markers, backtick code spans, fenced code blocks, ATX
20
+ * headers, and blockquote markers. Does not modify link or image syntax since
21
+ * those may carry meaningful text (the link label is preserved verbatim).
22
+ *
23
+ * This transformer is alphanumeric-preserving: the normalized alnum sequence of
24
+ * the output is identical to the input, so the `WordCompletionTracker`
25
+ * requires no segment-map overhead.
26
+ *
27
+ * @param text Input text, potentially containing Markdown formatting.
28
+ * @param _textType Text type of the text frame (unused).
29
+ * @returns Text with Markdown formatting symbols removed.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const result = await stripMarkdown("**Hello** and _world_", "*");
34
+ * // "Hello and world"
35
+ * ```
36
+ */
37
+ export async function stripMarkdown(text, _textType) {
38
+ // Fenced code blocks (``` or ~~~)
39
+ text = text.replace(/```[\s\S]*?```/g, "");
40
+ text = text.replace(/~~~[\s\S]*?~~~/g, "");
41
+ // Inline code
42
+ text = text.replace(/`([^`]+)`/g, keepGroup);
43
+ // Bold+italic ***text*** or ___text___
44
+ text = text.replace(/\*{3}([^\n]+?)\*{3}/g, keepGroup);
45
+ text = text.replace(/_{3}([^\n]+?)_{3}/g, keepGroup);
46
+ // Bold **text** or __text__
47
+ text = text.replace(/\*{2}([^\n]+?)\*{2}/g, keepGroup);
48
+ text = text.replace(/_{2}([^\n]+?)_{2}/g, keepGroup);
49
+ // Italic *text* or _text_
50
+ text = text.replace(/\*([^\n]+?)\*/g, keepGroup);
51
+ text = text.replace(new RegExp(`(?<!${W})_([^\\n]+?)_(?!${W})`, "gu"), keepGroup);
52
+ // ATX headers (# ## ### etc.)
53
+ text = text.replace(/(?<![^\n])#{1,6}\s+/g, "");
54
+ // Blockquotes
55
+ text = text.replace(/(?<![^\n])>\s?/g, "");
56
+ // Horizontal rules
57
+ text = text.replace(/(?<![^\n])\s*[-*_]{3,}\s*(?![^\n])/g, "");
58
+ return text;
59
+ }
60
+ //# sourceMappingURL=strip_markdown.js.map
@@ -0,0 +1,22 @@
1
+ /** Expand unit abbreviations into their spoken form for TTS. */
2
+ import type { TextType } from "../../../frames/frames.ts";
3
+ /**
4
+ * Expand unit abbreviations to their full spoken form.
5
+ *
6
+ * A quantity of exactly one takes the singular form of the unit.
7
+ *
8
+ * @param text Input text possibly containing unit expressions.
9
+ * @param _textType Text type of the text frame (unused).
10
+ * @returns Text with unit abbreviations replaced by spoken equivalents.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const result = await expandUnits("Run 5km at 100kph", "*");
15
+ * // "Run 5 kilometers at 100 kilometers per hour"
16
+ *
17
+ * const result2 = await expandUnits("Only 1km left", "*");
18
+ * // "Only 1 kilometer left"
19
+ * ```
20
+ */
21
+ export declare function expandUnits(text: string, _textType: string | TextType): Promise<string>;
22
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1,81 @@
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/transforms/units.py
6
+ /** Maps unit abbreviation to (singular, plural) spoken forms. */
7
+ const UNIT_MAP = {
8
+ km: ["kilometer", "kilometers"],
9
+ m: ["meter", "meters"],
10
+ cm: ["centimeter", "centimeters"],
11
+ mm: ["millimeter", "millimeters"],
12
+ mi: ["mile", "miles"],
13
+ ft: ["foot", "feet"],
14
+ in: ["inch", "inches"],
15
+ yd: ["yard", "yards"],
16
+ kg: ["kilogram", "kilograms"],
17
+ g: ["gram", "grams"],
18
+ mg: ["milligram", "milligrams"],
19
+ lb: ["pound", "pounds"],
20
+ oz: ["ounce", "ounces"],
21
+ l: ["liter", "liters"],
22
+ ml: ["milliliter", "milliliters"],
23
+ mph: ["mile per hour", "miles per hour"],
24
+ kph: ["kilometer per hour", "kilometers per hour"],
25
+ kmh: ["kilometer per hour", "kilometers per hour"],
26
+ gb: ["gigabyte", "gigabytes"],
27
+ mb: ["megabyte", "megabytes"],
28
+ kb: ["kilobyte", "kilobytes"],
29
+ tb: ["terabyte", "terabytes"],
30
+ hz: ["hertz", "hertz"],
31
+ khz: ["kilohertz", "kilohertz"],
32
+ mhz: ["megahertz", "megahertz"],
33
+ ghz: ["gigahertz", "gigahertz"],
34
+ };
35
+ // Single-letter units that are also common English words: only expand when
36
+ // they appear immediately after a digit with no intervening space, e.g. "5m"
37
+ // but not "1 m people" (where "m" is a word) or "1 in 5" (preposition).
38
+ const AMBIGUOUS_UNITS = new Set(["in", "m", "g", "l"]);
39
+ // A stable sort, like Python's `sorted`, so equal lengths keep insertion order.
40
+ const sortedUnambiguous = Object.keys(UNIT_MAP)
41
+ .filter((u) => !AMBIGUOUS_UNITS.has(u))
42
+ .sort((a, b) => b.length - a.length);
43
+ const sortedAmbiguous = [...AMBIGUOUS_UNITS].sort((a, b) => b.length - a.length);
44
+ // Python's `\b` (after a unit letter here) is Unicode-aware; the lookahead
45
+ // rebuilds it with Unicode `\w` (letters, digits and underscore). The unit
46
+ // names are plain letters, so they need no escaping.
47
+ const W = "[\\p{L}\\p{N}_]";
48
+ // Unambiguous units allow optional whitespace between the number and the unit.
49
+ const UNIT_RE = new RegExp(`(\\p{Nd}+(?:\\.\\p{Nd}+)?)\\s*(${sortedUnambiguous.join("|")})(?!${W})`, "giu");
50
+ // Ambiguous units require the unit to follow the digit with no space.
51
+ const AMBIGUOUS_UNIT_RE = new RegExp(`(\\p{Nd}+(?:\\.\\p{Nd}+)?)(${sortedAmbiguous.join("|")})(?!${W})`, "giu");
52
+ /**
53
+ * Expand unit abbreviations to their full spoken form.
54
+ *
55
+ * A quantity of exactly one takes the singular form of the unit.
56
+ *
57
+ * @param text Input text possibly containing unit expressions.
58
+ * @param _textType Text type of the text frame (unused).
59
+ * @returns Text with unit abbreviations replaced by spoken equivalents.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const result = await expandUnits("Run 5km at 100kph", "*");
64
+ * // "Run 5 kilometers at 100 kilometers per hour"
65
+ *
66
+ * const result2 = await expandUnits("Only 1km left", "*");
67
+ * // "Only 1 kilometer left"
68
+ * ```
69
+ */
70
+ export async function expandUnits(text, _textType) {
71
+ const replace = (_match, number, unit) => {
72
+ // Python indexes the map directly; every match is a key once lowercased.
73
+ const [singular, plural] = UNIT_MAP[unit.toLowerCase()];
74
+ // Only a bare "1" takes the singular; a decimal such as "1.0" reads as
75
+ // plural in speech.
76
+ return `${number} ${number === "1" ? singular : plural}`;
77
+ };
78
+ text = text.replace(UNIT_RE, replace);
79
+ return text.replace(AMBIGUOUS_UNIT_RE, replace);
80
+ }
81
+ //# sourceMappingURL=units.js.map
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Configurable voice formatting bundle for TTS preprocessing.
3
+ *
4
+ * Porting notes: upstream imports each transform lazily inside `__init__`;
5
+ * here they are imported statically (they have no optional dependencies).
6
+ */
7
+ import type { TextType } from "../../../frames/frames.ts";
8
+ import { type TextReplacement } from "./replacements.ts";
9
+ type Transform = (text: string, textType: string | TextType) => Promise<string>;
10
+ export interface VoiceFormatterOptions {
11
+ /**
12
+ * Strip Markdown formatting symbols (bold, italic, headers, code spans).
13
+ * Enabled by default.
14
+ */
15
+ stripMarkdown?: boolean;
16
+ /** Space out phone number digits for individual pronunciation. Enabled by default. */
17
+ expandPhoneNumbers?: boolean;
18
+ /** Space out uppercase acronyms (e.g. `"API"` → `"A P I"`). Enabled by default. */
19
+ normalizeAcronyms?: boolean;
20
+ /**
21
+ * Expand currency amounts to spoken form (e.g. `"$42.50"` →
22
+ * `"forty two dollars and fifty cents"`). Requires `num2words`.
23
+ */
24
+ expandCurrency?: boolean;
25
+ /**
26
+ * Expand numeric digits to spoken words. Disabled by default since it can
27
+ * affect numbers that are better read as digits. Requires `num2words`.
28
+ */
29
+ expandNumbers?: boolean;
30
+ /**
31
+ * Numbers above this value are read digit-by-digit instead of as a
32
+ * quantity. Defaults to null (expand all numbers as words). Only used when
33
+ * `expandNumbers` is true.
34
+ */
35
+ numberDigitCutoff?: number | bigint | null;
36
+ /** Expand percentage expressions (e.g. `"50%"` → `"fifty percent"`). Requires `num2words`. */
37
+ expandPercentages?: boolean;
38
+ /** Expand unit abbreviations (e.g. `"5km"` → `"5 kilometers"`). Enabled by default. */
39
+ expandUnits?: boolean;
40
+ /** Transform email addresses to spoken form. Enabled by default. */
41
+ emailToSpeech?: boolean;
42
+ /** Expand date expressions to spoken form. Requires `num2words`. */
43
+ normalizeDates?: boolean;
44
+ /** List of `(regexPattern, replacement)` pairs applied after all other transforms. */
45
+ customReplacements?: readonly TextReplacement[] | null;
46
+ }
47
+ export interface VoiceFormatter {
48
+ (text: string, textType: string | TextType): Promise<string>;
49
+ }
50
+ /**
51
+ * Configurable bundle that applies a pipeline of voice-formatting transforms.
52
+ *
53
+ * Each option enables or disables one transform. Transforms are applied in a
54
+ * deliberate order: structural cleanup first, language expansions second, user
55
+ * replacements last.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * const formatter = new VoiceFormatter({
60
+ * stripMarkdown: true,
61
+ * expandCurrency: true,
62
+ * numberDigitCutoff: 2025,
63
+ * customReplacements: [[/\bDr\./, "Doctor"]],
64
+ * });
65
+ * const tts = new CartesiaTTSService({
66
+ * textTransforms: [["*", formatter]],
67
+ * });
68
+ * ```
69
+ */
70
+ export declare class VoiceFormatter {
71
+ protected _transforms: Transform[];
72
+ /** Initialize the voice formatter. */
73
+ constructor(options?: VoiceFormatterOptions);
74
+ /**
75
+ * Apply all configured transforms in order.
76
+ *
77
+ * Python's `__call__`; calling the instance runs this.
78
+ *
79
+ * @param text Input text to transform.
80
+ * @param textType Text type passed through to each transform.
81
+ * @returns Transformed text ready for TTS synthesis.
82
+ */
83
+ transform(text: string, textType: string | TextType): Promise<string>;
84
+ }
85
+ export {};
86
+ //# sourceMappingURL=voice_formatter.d.ts.map