@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.
- package/LICENSE +25 -0
- package/NOTICE +9 -0
- package/dist/adapters/base_llm_adapter.d.ts +266 -0
- package/dist/adapters/base_llm_adapter.js +489 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/schemas/direct_function.d.ts +202 -0
- package/dist/adapters/schemas/direct_function.js +302 -0
- package/dist/adapters/schemas/function_schema.d.ts +67 -0
- package/dist/adapters/schemas/function_schema.js +72 -0
- package/dist/adapters/schemas/index.d.ts +2 -0
- package/dist/adapters/schemas/index.js +8 -0
- package/dist/adapters/schemas/tools_schema.d.ts +57 -0
- package/dist/adapters/schemas/tools_schema.js +79 -0
- package/dist/adapters/services/index.d.ts +2 -0
- package/dist/adapters/services/index.js +8 -0
- package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
- package/dist/adapters/services/open_ai_adapter.js +250 -0
- package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
- package/dist/audio/dtmf/dtmf_data.js +22 -0
- package/dist/audio/dtmf/index.d.ts +2 -0
- package/dist/audio/dtmf/index.js +8 -0
- package/dist/audio/dtmf/types.d.ts +31 -0
- package/dist/audio/dtmf/types.js +35 -0
- package/dist/audio/dtmf/utils.d.ts +13 -0
- package/dist/audio/dtmf/utils.js +62 -0
- package/dist/audio/filters/base_audio_filter.d.ts +51 -0
- package/dist/audio/filters/base_audio_filter.js +17 -0
- package/dist/audio/filters/index.d.ts +2 -0
- package/dist/audio/filters/index.js +8 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.js +8 -0
- package/dist/audio/krisp_instance.d.ts +95 -0
- package/dist/audio/krisp_instance.js +229 -0
- package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
- package/dist/audio/mixers/base_audio_mixer.js +16 -0
- package/dist/audio/mixers/index.d.ts +2 -0
- package/dist/audio/mixers/index.js +8 -0
- package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
- package/dist/audio/resamplers/base_audio_resampler.js +35 -0
- package/dist/audio/resamplers/engine.d.ts +60 -0
- package/dist/audio/resamplers/engine.js +89 -0
- package/dist/audio/resamplers/index.d.ts +2 -0
- package/dist/audio/resamplers/index.js +8 -0
- package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
- package/dist/audio/resamplers/resampy_resampler.js +15 -0
- package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
- package/dist/audio/resamplers/sinc_engine.js +235 -0
- package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
- package/dist/audio/resamplers/soxr_resampler.js +79 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
- package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
- package/dist/audio/turn/base_turn_analyzer.js +61 -0
- package/dist/audio/turn/index.d.ts +2 -0
- package/dist/audio/turn/index.js +8 -0
- package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
- package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
- package/dist/audio/utils.d.ts +224 -0
- package/dist/audio/utils.js +634 -0
- package/dist/audio/vad/data/index.d.ts +2 -0
- package/dist/audio/vad/data/index.js +8 -0
- package/dist/audio/vad/index.d.ts +2 -0
- package/dist/audio/vad/index.js +8 -0
- package/dist/audio/vad/vad_analyzer.d.ts +134 -0
- package/dist/audio/vad/vad_analyzer.js +249 -0
- package/dist/audio/vad/vad_controller.d.ts +143 -0
- package/dist/audio/vad/vad_controller.js +228 -0
- package/dist/audio/volume.d.ts +38 -0
- package/dist/audio/volume.js +75 -0
- package/dist/bus/adapters/base.d.ts +35 -0
- package/dist/bus/adapters/base.js +19 -0
- package/dist/bus/adapters/index.d.ts +10 -0
- package/dist/bus/adapters/index.js +15 -0
- package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
- package/dist/bus/adapters/llm_context_adapter.js +82 -0
- package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
- package/dist/bus/adapters/tools_schema_adapter.js +70 -0
- package/dist/bus/bridge_processor.d.ts +111 -0
- package/dist/bus/bridge_processor.js +166 -0
- package/dist/bus/bus.d.ts +110 -0
- package/dist/bus/bus.js +200 -0
- package/dist/bus/index.d.ts +22 -0
- package/dist/bus/index.js +27 -0
- package/dist/bus/local/async_queue.d.ts +12 -0
- package/dist/bus/local/async_queue.js +21 -0
- package/dist/bus/local/index.d.ts +3 -0
- package/dist/bus/local/index.js +8 -0
- package/dist/bus/messages.d.ts +378 -0
- package/dist/bus/messages.js +357 -0
- package/dist/bus/network/index.d.ts +16 -0
- package/dist/bus/network/index.js +21 -0
- package/dist/bus/queue.d.ts +27 -0
- package/dist/bus/queue.js +51 -0
- package/dist/bus/serializers/base.d.ts +25 -0
- package/dist/bus/serializers/base.js +14 -0
- package/dist/bus/serializers/index.d.ts +9 -0
- package/dist/bus/serializers/index.js +14 -0
- package/dist/bus/serializers/json.d.ts +77 -0
- package/dist/bus/serializers/json.js +367 -0
- package/dist/bus/subscriber.d.ts +46 -0
- package/dist/bus/subscriber.js +27 -0
- package/dist/bus/ui/index.d.ts +3 -0
- package/dist/bus/ui/index.js +8 -0
- package/dist/bus/ui/messages.d.ts +186 -0
- package/dist/bus/ui/messages.js +171 -0
- package/dist/classifiers/base_classifier.d.ts +263 -0
- package/dist/classifiers/base_classifier.js +346 -0
- package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
- package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
- package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
- package/dist/classifiers/cloudflare/clef/client.js +234 -0
- package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/clef/index.js +8 -0
- package/dist/classifiers/cloudflare/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/index.js +8 -0
- package/dist/classifiers/http_client.d.ts +70 -0
- package/dist/classifiers/http_client.js +161 -0
- package/dist/classifiers/index.d.ts +2 -0
- package/dist/classifiers/index.js +8 -0
- package/dist/classifiers/jev/classifier.d.ts +8 -0
- package/dist/classifiers/jev/classifier.js +13 -0
- package/dist/classifiers/jev/client.d.ts +8 -0
- package/dist/classifiers/jev/client.js +13 -0
- package/dist/classifiers/jev/index.d.ts +2 -0
- package/dist/classifiers/jev/index.js +8 -0
- package/dist/classifiers/llm/classifier.d.ts +72 -0
- package/dist/classifiers/llm/classifier.js +304 -0
- package/dist/classifiers/llm/index.d.ts +2 -0
- package/dist/classifiers/llm/index.js +8 -0
- package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
- package/dist/classifiers/openai/decisions/classifier.js +241 -0
- package/dist/classifiers/openai/decisions/client.d.ts +108 -0
- package/dist/classifiers/openai/decisions/client.js +234 -0
- package/dist/classifiers/openai/decisions/index.d.ts +2 -0
- package/dist/classifiers/openai/decisions/index.js +8 -0
- package/dist/classifiers/openai/index.d.ts +2 -0
- package/dist/classifiers/openai/index.js +8 -0
- package/dist/classifiers/typesafe/index.d.ts +2 -0
- package/dist/classifiers/typesafe/index.js +8 -0
- package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
- package/dist/classifiers/typesafe/jev/classifier.js +220 -0
- package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
- package/dist/classifiers/typesafe/jev/client.js +233 -0
- package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
- package/dist/classifiers/typesafe/jev/index.js +8 -0
- package/dist/clocks/base_clock.d.ts +13 -0
- package/dist/clocks/base_clock.js +14 -0
- package/dist/clocks/index.d.ts +2 -0
- package/dist/clocks/index.js +8 -0
- package/dist/clocks/system_clock.d.ts +15 -0
- package/dist/clocks/system_clock.js +25 -0
- package/dist/frames/frames.d.ts +2533 -0
- package/dist/frames/frames.js +2485 -0
- package/dist/frames/index.d.ts +2 -0
- package/dist/frames/index.js +8 -0
- package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
- package/dist/frames/protobufs/frames_pb2.js +466 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +56 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/metrics.d.ts +276 -0
- package/dist/metrics/metrics.js +254 -0
- package/dist/observers/base_observer.d.ts +173 -0
- package/dist/observers/base_observer.js +151 -0
- package/dist/observers/error_observer.d.ts +75 -0
- package/dist/observers/error_observer.js +87 -0
- package/dist/observers/function_call_observer.d.ts +157 -0
- package/dist/observers/function_call_observer.js +222 -0
- package/dist/observers/index.d.ts +2 -0
- package/dist/observers/index.js +8 -0
- package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
- package/dist/observers/loggers/debug_log_observer.js +228 -0
- package/dist/observers/loggers/index.d.ts +2 -0
- package/dist/observers/loggers/index.js +8 -0
- package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
- package/dist/observers/loggers/llm_log_observer.js +110 -0
- package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
- package/dist/observers/loggers/metrics_log_observer.js +186 -0
- package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
- package/dist/observers/loggers/transcription_log_observer.js +74 -0
- package/dist/observers/service_metrics_observer.d.ts +168 -0
- package/dist/observers/service_metrics_observer.js +236 -0
- package/dist/observers/speaking_observer.d.ts +104 -0
- package/dist/observers/speaking_observer.js +150 -0
- package/dist/observers/startup_timing_observer.d.ts +221 -0
- package/dist/observers/startup_timing_observer.js +365 -0
- package/dist/observers/turn_tracking_observer.d.ts +78 -0
- package/dist/observers/turn_tracking_observer.js +189 -0
- package/dist/observers/user_bot_latency_observer.d.ts +411 -0
- package/dist/observers/user_bot_latency_observer.js +974 -0
- package/dist/pipeline/base_pipeline.d.ts +49 -0
- package/dist/pipeline/base_pipeline.js +101 -0
- package/dist/pipeline/capabilities.d.ts +76 -0
- package/dist/pipeline/capabilities.js +97 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +8 -0
- package/dist/pipeline/job_context.d.ts +317 -0
- package/dist/pipeline/job_context.js +450 -0
- package/dist/pipeline/job_decorator.d.ts +54 -0
- package/dist/pipeline/job_decorator.js +92 -0
- package/dist/pipeline/llm_switcher.d.ts +84 -0
- package/dist/pipeline/llm_switcher.js +107 -0
- package/dist/pipeline/llm_with_backend.d.ts +435 -0
- package/dist/pipeline/llm_with_backend.js +806 -0
- package/dist/pipeline/parallel_pipeline.d.ts +83 -0
- package/dist/pipeline/parallel_pipeline.js +200 -0
- package/dist/pipeline/pipeline.d.ts +126 -0
- package/dist/pipeline/pipeline.js +196 -0
- package/dist/pipeline/service_switcher.d.ts +287 -0
- package/dist/pipeline/service_switcher.js +509 -0
- package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
- package/dist/pipeline/sync_parallel_pipeline.js +387 -0
- package/dist/pipeline/worker.d.ts +821 -0
- package/dist/pipeline/worker.js +1656 -0
- package/dist/pipeline/worker_observer.d.ts +131 -0
- package/dist/pipeline/worker_observer.js +274 -0
- package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
- package/dist/pipeline/worker_ready_decorator.js +76 -0
- package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
- package/dist/processors/aggregators/async_tool_messages.js +291 -0
- package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
- package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
- package/dist/processors/aggregators/gated.d.ts +43 -0
- package/dist/processors/aggregators/gated.js +86 -0
- package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
- package/dist/processors/aggregators/gated_llm_context.js +86 -0
- package/dist/processors/aggregators/index.d.ts +2 -0
- package/dist/processors/aggregators/index.js +8 -0
- package/dist/processors/aggregators/llm_context.d.ts +370 -0
- package/dist/processors/aggregators/llm_context.js +580 -0
- package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
- package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
- package/dist/processors/aggregators/llm_response.d.ts +37 -0
- package/dist/processors/aggregators/llm_response.js +71 -0
- package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
- package/dist/processors/aggregators/llm_response_universal.js +2394 -0
- package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
- package/dist/processors/aggregators/llm_text_processor.js +102 -0
- package/dist/processors/aggregators/sentence.d.ts +39 -0
- package/dist/processors/aggregators/sentence.js +69 -0
- package/dist/processors/async_generator.d.ts +42 -0
- package/dist/processors/async_generator.js +76 -0
- package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
- package/dist/processors/audio/audio_buffer_processor.js +565 -0
- package/dist/processors/audio/index.d.ts +2 -0
- package/dist/processors/audio/index.js +8 -0
- package/dist/processors/audio/vad_processor.d.ts +67 -0
- package/dist/processors/audio/vad_processor.js +103 -0
- package/dist/processors/consumer_processor.d.ts +49 -0
- package/dist/processors/consumer_processor.js +85 -0
- package/dist/processors/filters/frame_filter.d.ts +39 -0
- package/dist/processors/filters/frame_filter.js +52 -0
- package/dist/processors/filters/function_filter.d.ts +59 -0
- package/dist/processors/filters/function_filter.js +78 -0
- package/dist/processors/filters/identity_filter.d.ts +33 -0
- package/dist/processors/filters/identity_filter.js +37 -0
- package/dist/processors/filters/index.d.ts +2 -0
- package/dist/processors/filters/index.js +8 -0
- package/dist/processors/filters/null_filter.d.ts +34 -0
- package/dist/processors/filters/null_filter.js +47 -0
- package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
- package/dist/processors/filters/wake_notifier_filter.js +49 -0
- package/dist/processors/frame_processor.d.ts +360 -0
- package/dist/processors/frame_processor.js +932 -0
- package/dist/processors/frameworks/index.d.ts +2 -0
- package/dist/processors/frameworks/index.js +8 -0
- package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
- package/dist/processors/frameworks/rtvi/frames.js +259 -0
- package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
- package/dist/processors/frameworks/rtvi/index.js +11 -0
- package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
- package/dist/processors/frameworks/rtvi/models.js +1807 -0
- package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
- package/dist/processors/frameworks/rtvi/observer.js +1113 -0
- package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
- package/dist/processors/frameworks/rtvi/processor.js +676 -0
- package/dist/processors/idle_frame_processor.d.ts +44 -0
- package/dist/processors/idle_frame_processor.js +86 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.js +8 -0
- package/dist/processors/logger.d.ts +42 -0
- package/dist/processors/logger.js +87 -0
- package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
- package/dist/processors/metrics/frame_processor_metrics.js +372 -0
- package/dist/processors/metrics/index.d.ts +2 -0
- package/dist/processors/metrics/index.js +8 -0
- package/dist/processors/producer_processor.d.ts +68 -0
- package/dist/processors/producer_processor.js +78 -0
- package/dist/processors/text_transformer.d.ts +30 -0
- package/dist/processors/text_transformer.js +48 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/registry.d.ts +69 -0
- package/dist/registry/registry.js +149 -0
- package/dist/registry/types.d.ts +47 -0
- package/dist/registry/types.js +39 -0
- package/dist/serializers/base_serializer.d.ts +94 -0
- package/dist/serializers/base_serializer.js +82 -0
- package/dist/serializers/index.d.ts +2 -0
- package/dist/serializers/index.js +8 -0
- package/dist/services/ai_service.d.ts +145 -0
- package/dist/services/ai_service.js +262 -0
- package/dist/services/anthropic/index.d.ts +2 -0
- package/dist/services/anthropic/index.js +7 -0
- package/dist/services/assemblyai/index.d.ts +2 -0
- package/dist/services/assemblyai/index.js +7 -0
- package/dist/services/asyncai/index.d.ts +2 -0
- package/dist/services/asyncai/index.js +7 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.js +7 -0
- package/dist/services/azure/index.d.ts +2 -0
- package/dist/services/azure/index.js +7 -0
- package/dist/services/baseten/index.d.ts +2 -0
- package/dist/services/baseten/index.js +7 -0
- package/dist/services/bland/index.d.ts +2 -0
- package/dist/services/bland/index.js +7 -0
- package/dist/services/camb/index.d.ts +2 -0
- package/dist/services/camb/index.js +7 -0
- package/dist/services/cartesia/index.d.ts +2 -0
- package/dist/services/cartesia/index.js +7 -0
- package/dist/services/cerebras/index.d.ts +2 -0
- package/dist/services/cerebras/index.js +7 -0
- package/dist/services/crusoe/index.d.ts +2 -0
- package/dist/services/crusoe/index.js +7 -0
- package/dist/services/deepgram/index.d.ts +2 -0
- package/dist/services/deepgram/index.js +7 -0
- package/dist/services/deepseek/index.d.ts +2 -0
- package/dist/services/deepseek/index.js +7 -0
- package/dist/services/elevenlabs/index.d.ts +2 -0
- package/dist/services/elevenlabs/index.js +7 -0
- package/dist/services/fal/index.d.ts +2 -0
- package/dist/services/fal/index.js +7 -0
- package/dist/services/fireworks/index.d.ts +2 -0
- package/dist/services/fireworks/index.js +7 -0
- package/dist/services/fish/index.d.ts +2 -0
- package/dist/services/fish/index.js +7 -0
- package/dist/services/funasr/index.d.ts +3 -0
- package/dist/services/funasr/index.js +8 -0
- package/dist/services/gladia/index.d.ts +2 -0
- package/dist/services/gladia/index.js +7 -0
- package/dist/services/google/index.d.ts +2 -0
- package/dist/services/google/index.js +7 -0
- package/dist/services/gradium/index.d.ts +2 -0
- package/dist/services/gradium/index.js +7 -0
- package/dist/services/grok/index.d.ts +2 -0
- package/dist/services/grok/index.js +7 -0
- package/dist/services/groq/index.d.ts +2 -0
- package/dist/services/groq/index.js +7 -0
- package/dist/services/heygen/index.d.ts +2 -0
- package/dist/services/heygen/index.js +7 -0
- package/dist/services/hume/index.d.ts +2 -0
- package/dist/services/hume/index.js +7 -0
- package/dist/services/image_service.d.ts +52 -0
- package/dist/services/image_service.js +60 -0
- package/dist/services/inception/index.d.ts +2 -0
- package/dist/services/inception/index.js +7 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +8 -0
- package/dist/services/inworld/index.d.ts +2 -0
- package/dist/services/inworld/index.js +7 -0
- package/dist/services/keenable/index.d.ts +2 -0
- package/dist/services/keenable/index.js +7 -0
- package/dist/services/kokoro/index.d.ts +2 -0
- package/dist/services/kokoro/index.js +7 -0
- package/dist/services/llm_service.d.ts +1106 -0
- package/dist/services/llm_service.js +2231 -0
- package/dist/services/mem0/index.d.ts +2 -0
- package/dist/services/mem0/index.js +7 -0
- package/dist/services/meta/index.d.ts +2 -0
- package/dist/services/meta/index.js +7 -0
- package/dist/services/minimax/index.d.ts +2 -0
- package/dist/services/minimax/index.js +7 -0
- package/dist/services/mistral/index.d.ts +2 -0
- package/dist/services/mistral/index.js +7 -0
- package/dist/services/moondream/index.d.ts +2 -0
- package/dist/services/moondream/index.js +7 -0
- package/dist/services/moonshine/index.d.ts +2 -0
- package/dist/services/moonshine/index.js +7 -0
- package/dist/services/nebius/index.d.ts +2 -0
- package/dist/services/nebius/index.js +7 -0
- package/dist/services/neuphonic/index.d.ts +2 -0
- package/dist/services/neuphonic/index.js +7 -0
- package/dist/services/novita/index.d.ts +2 -0
- package/dist/services/novita/index.js +7 -0
- package/dist/services/nvidia/index.d.ts +2 -0
- package/dist/services/nvidia/index.js +11 -0
- package/dist/services/ollama/index.d.ts +2 -0
- package/dist/services/ollama/index.js +7 -0
- package/dist/services/openai/index.d.ts +2 -0
- package/dist/services/openai/index.js +7 -0
- package/dist/services/openclaw/index.d.ts +14 -0
- package/dist/services/openclaw/index.js +19 -0
- package/dist/services/openrouter/index.d.ts +2 -0
- package/dist/services/openrouter/index.js +7 -0
- package/dist/services/perplexity/index.d.ts +2 -0
- package/dist/services/perplexity/index.js +7 -0
- package/dist/services/piper/index.d.ts +2 -0
- package/dist/services/piper/index.js +7 -0
- package/dist/services/pocket_tts/index.d.ts +2 -0
- package/dist/services/pocket_tts/index.js +7 -0
- package/dist/services/qwen/index.d.ts +2 -0
- package/dist/services/qwen/index.js +7 -0
- package/dist/services/resembleai/index.d.ts +2 -0
- package/dist/services/resembleai/index.js +7 -0
- package/dist/services/rime/index.d.ts +2 -0
- package/dist/services/rime/index.js +7 -0
- package/dist/services/sambanova/index.d.ts +2 -0
- package/dist/services/sambanova/index.js +7 -0
- package/dist/services/sarvam/index.d.ts +2 -0
- package/dist/services/sarvam/index.js +7 -0
- package/dist/services/settings.d.ts +356 -0
- package/dist/services/settings.js +437 -0
- package/dist/services/simli/index.d.ts +2 -0
- package/dist/services/simli/index.js +7 -0
- package/dist/services/smallest/index.d.ts +2 -0
- package/dist/services/smallest/index.js +7 -0
- package/dist/services/soniox/index.d.ts +2 -0
- package/dist/services/soniox/index.js +7 -0
- package/dist/services/speechify/index.d.ts +2 -0
- package/dist/services/speechify/index.js +7 -0
- package/dist/services/speechmatics/index.d.ts +2 -0
- package/dist/services/speechmatics/index.js +7 -0
- package/dist/services/stt_latency.d.ts +62 -0
- package/dist/services/stt_latency.js +71 -0
- package/dist/services/stt_service.d.ts +601 -0
- package/dist/services/stt_service.js +1044 -0
- package/dist/services/tavus/index.d.ts +2 -0
- package/dist/services/tavus/index.js +7 -0
- package/dist/services/together/index.d.ts +2 -0
- package/dist/services/together/index.js +7 -0
- package/dist/services/tts_service.d.ts +909 -0
- package/dist/services/tts_service.js +2018 -0
- package/dist/services/ultravox/index.d.ts +2 -0
- package/dist/services/ultravox/index.js +9 -0
- package/dist/services/vision_service.d.ts +56 -0
- package/dist/services/vision_service.js +62 -0
- package/dist/services/websocket_service.d.ts +213 -0
- package/dist/services/websocket_service.js +654 -0
- package/dist/services/whisper/index.d.ts +2 -0
- package/dist/services/whisper/index.js +9 -0
- package/dist/services/xai/index.d.ts +2 -0
- package/dist/services/xai/index.js +9 -0
- package/dist/services/xtts/index.d.ts +2 -0
- package/dist/services/xtts/index.js +9 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.js +8 -0
- package/dist/tests/utils.d.ts +123 -0
- package/dist/tests/utils.js +212 -0
- package/dist/transcriptions/index.d.ts +2 -0
- package/dist/transcriptions/index.js +8 -0
- package/dist/transcriptions/language.d.ts +376 -0
- package/dist/transcriptions/language.js +543 -0
- package/dist/transports/base_input.d.ts +149 -0
- package/dist/transports/base_input.js +338 -0
- package/dist/transports/base_output.d.ts +432 -0
- package/dist/transports/base_output.js +1231 -0
- package/dist/transports/base_transport.d.ts +223 -0
- package/dist/transports/base_transport.js +167 -0
- package/dist/transports/daily/index.d.ts +2 -0
- package/dist/transports/daily/index.js +9 -0
- package/dist/transports/heygen/index.d.ts +2 -0
- package/dist/transports/heygen/index.js +9 -0
- package/dist/transports/index.d.ts +2 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/lemonslice/index.d.ts +2 -0
- package/dist/transports/lemonslice/index.js +9 -0
- package/dist/transports/livekit/index.d.ts +2 -0
- package/dist/transports/livekit/index.js +9 -0
- package/dist/transports/local/index.d.ts +2 -0
- package/dist/transports/local/index.js +9 -0
- package/dist/transports/moq/index.d.ts +2 -0
- package/dist/transports/moq/index.js +9 -0
- package/dist/transports/smallwebrtc/index.d.ts +2 -0
- package/dist/transports/smallwebrtc/index.js +9 -0
- package/dist/transports/tavus/index.d.ts +2 -0
- package/dist/transports/tavus/index.js +9 -0
- package/dist/transports/video_in_sampler.d.ts +157 -0
- package/dist/transports/video_in_sampler.js +258 -0
- package/dist/transports/vonage/index.d.ts +2 -0
- package/dist/transports/vonage/index.js +9 -0
- package/dist/transports/websocket/index.d.ts +2 -0
- package/dist/transports/websocket/index.js +9 -0
- package/dist/transports/whatsapp/index.d.ts +2 -0
- package/dist/transports/whatsapp/index.js +9 -0
- package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
- package/dist/turns/eager_end_of_turn_mixin.js +122 -0
- package/dist/turns/empty_user_turn.d.ts +55 -0
- package/dist/turns/empty_user_turn.js +53 -0
- package/dist/turns/index.d.ts +2 -0
- package/dist/turns/index.js +8 -0
- package/dist/turns/speculation_gate.d.ts +169 -0
- package/dist/turns/speculation_gate.js +294 -0
- package/dist/turns/types.d.ts +33 -0
- package/dist/turns/types.js +35 -0
- package/dist/turns/user_idle_controller.d.ts +94 -0
- package/dist/turns/user_idle_controller.js +187 -0
- package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
- package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
- package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
- package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
- package/dist/turns/user_mute/index.d.ts +6 -0
- package/dist/turns/user_mute/index.js +11 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
- package/dist/turns/user_start/index.d.ts +8 -0
- package/dist/turns/user_start/index.js +16 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
- package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
- package/dist/turns/user_stop/eager_match_policy.js +50 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
- package/dist/turns/user_stop/index.d.ts +10 -0
- package/dist/turns/user_stop/index.js +15 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
- package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
- package/dist/turns/user_turn_completion_mixin.js +591 -0
- package/dist/turns/user_turn_controller.d.ts +134 -0
- package/dist/turns/user_turn_controller.js +335 -0
- package/dist/turns/user_turn_processor.d.ts +87 -0
- package/dist/turns/user_turn_processor.js +180 -0
- package/dist/turns/user_turn_strategies.d.ts +187 -0
- package/dist/turns/user_turn_strategies.js +222 -0
- package/dist/utils/async_tool_cancellation.d.ts +35 -0
- package/dist/utils/async_tool_cancellation.js +78 -0
- package/dist/utils/asyncio/index.d.ts +2 -0
- package/dist/utils/asyncio/index.js +7 -0
- package/dist/utils/asyncio/task_manager.d.ts +49 -0
- package/dist/utils/asyncio/task_manager.js +105 -0
- package/dist/utils/base_object.d.ts +76 -0
- package/dist/utils/base_object.js +154 -0
- package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
- package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
- package/dist/utils/context/audio_context_manager.d.ts +131 -0
- package/dist/utils/context/audio_context_manager.js +233 -0
- package/dist/utils/context/index.d.ts +2 -0
- package/dist/utils/context/index.js +7 -0
- package/dist/utils/context/llm_context_summarization.d.ts +258 -0
- package/dist/utils/context/llm_context_summarization.js +511 -0
- package/dist/utils/context/text_segment_map.d.ts +611 -0
- package/dist/utils/context/text_segment_map.js +1132 -0
- package/dist/utils/context/word_completion_tracker.d.ts +273 -0
- package/dist/utils/context/word_completion_tracker.js +441 -0
- package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
- package/dist/utils/context/word_timestamp_tracker.js +98 -0
- package/dist/utils/deprecation.d.ts +28 -0
- package/dist/utils/deprecation.js +75 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.js +62 -0
- package/dist/utils/errors.d.ts +75 -0
- package/dist/utils/errors.js +202 -0
- package/dist/utils/file_resolver.d.ts +126 -0
- package/dist/utils/file_resolver.js +314 -0
- package/dist/utils/file_storage.d.ts +115 -0
- package/dist/utils/file_storage.js +178 -0
- package/dist/utils/frame_queue.d.ts +36 -0
- package/dist/utils/frame_queue.js +66 -0
- package/dist/utils/http.d.ts +39 -0
- package/dist/utils/http.js +53 -0
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +63 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/jpeg_encoder.d.ts +14 -0
- package/dist/utils/jpeg_encoder.js +315 -0
- package/dist/utils/log_config.d.ts +34 -0
- package/dist/utils/log_config.js +76 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/mixin.d.ts +14 -0
- package/dist/utils/mixin.js +63 -0
- package/dist/utils/network.d.ts +73 -0
- package/dist/utils/network.js +90 -0
- package/dist/utils/security/allowed_origins.d.ts +16 -0
- package/dist/utils/security/allowed_origins.js +34 -0
- package/dist/utils/security/index.d.ts +2 -0
- package/dist/utils/security/index.js +7 -0
- package/dist/utils/security/redaction.d.ts +27 -0
- package/dist/utils/security/redaction.js +123 -0
- package/dist/utils/security/ssrf.d.ts +79 -0
- package/dist/utils/security/ssrf.js +327 -0
- package/dist/utils/shared.d.ts +35 -0
- package/dist/utils/shared.js +136 -0
- package/dist/utils/startup.d.ts +17 -0
- package/dist/utils/startup.js +130 -0
- package/dist/utils/string.d.ts +116 -0
- package/dist/utils/string.js +460 -0
- package/dist/utils/sync/base_notifier.d.ts +25 -0
- package/dist/utils/sync/base_notifier.js +16 -0
- package/dist/utils/sync/event_notifier.d.ts +38 -0
- package/dist/utils/sync/event_notifier.js +51 -0
- package/dist/utils/sync/index.d.ts +2 -0
- package/dist/utils/sync/index.js +7 -0
- package/dist/utils/text/alnum_utils.d.ts +109 -0
- package/dist/utils/text/alnum_utils.js +262 -0
- package/dist/utils/text/base_text_aggregator.d.ts +146 -0
- package/dist/utils/text/base_text_aggregator.js +102 -0
- package/dist/utils/text/base_text_filter.d.ts +54 -0
- package/dist/utils/text/base_text_filter.js +50 -0
- package/dist/utils/text/index.d.ts +2 -0
- package/dist/utils/text/index.js +7 -0
- package/dist/utils/text/markdown_text_filter.d.ts +147 -0
- package/dist/utils/text/markdown_text_filter.js +522 -0
- package/dist/utils/text/markup_utils.d.ts +54 -0
- package/dist/utils/text/markup_utils.js +156 -0
- package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
- package/dist/utils/text/pattern_pair_aggregator.js +478 -0
- package/dist/utils/text/phonemes.d.ts +60 -0
- package/dist/utils/text/phonemes.js +172 -0
- package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
- package/dist/utils/text/simple_text_aggregator.js +254 -0
- package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
- package/dist/utils/text/skip_tags_aggregator.js +147 -0
- package/dist/utils/text/transforms/acronyms.d.ts +21 -0
- package/dist/utils/text/transforms/acronyms.js +31 -0
- package/dist/utils/text/transforms/currency.d.ts +16 -0
- package/dist/utils/text/transforms/currency.js +56 -0
- package/dist/utils/text/transforms/dates.d.ts +18 -0
- package/dist/utils/text/transforms/dates.js +102 -0
- package/dist/utils/text/transforms/email.d.ts +17 -0
- package/dist/utils/text/transforms/email.js +35 -0
- package/dist/utils/text/transforms/index.d.ts +37 -0
- package/dist/utils/text/transforms/index.js +42 -0
- package/dist/utils/text/transforms/numbers.d.ts +25 -0
- package/dist/utils/text/transforms/numbers.js +59 -0
- package/dist/utils/text/transforms/percentages.d.ts +16 -0
- package/dist/utils/text/transforms/percentages.js +32 -0
- package/dist/utils/text/transforms/phone.d.ts +21 -0
- package/dist/utils/text/transforms/phone.js +39 -0
- package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +112 -0
- package/dist/utils/text/transforms/replacements.d.ts +39 -0
- package/dist/utils/text/transforms/replacements.js +46 -0
- package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
- package/dist/utils/text/transforms/strip_markdown.js +60 -0
- package/dist/utils/text/transforms/units.d.ts +22 -0
- package/dist/utils/text/transforms/units.js +81 -0
- package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
- package/dist/utils/text/transforms/voice_formatter.js +98 -0
- package/dist/utils/text/unicode_digits.d.ts +3 -0
- package/dist/utils/text/unicode_digits.js +34 -0
- package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
- package/dist/utils/text/word_timestamp_utils.js +52 -0
- package/dist/utils/time.d.ts +13 -0
- package/dist/utils/time.js +31 -0
- package/dist/utils/tracing/index.d.ts +3 -0
- package/dist/utils/tracing/index.js +8 -0
- package/dist/utils/tracing/service_attributes.d.ts +198 -0
- package/dist/utils/tracing/service_attributes.js +434 -0
- package/dist/utils/tracing/service_decorators.d.ts +214 -0
- package/dist/utils/tracing/service_decorators.js +1662 -0
- package/dist/utils/tracing/setup.d.ts +107 -0
- package/dist/utils/tracing/setup.js +160 -0
- package/dist/utils/tracing/tracing_context.d.ts +55 -0
- package/dist/utils/tracing/tracing_context.js +97 -0
- package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
- package/dist/utils/tracing/turn_trace_observer.js +233 -0
- package/dist/utils/types.d.ts +80 -0
- package/dist/utils/types.js +108 -0
- package/dist/utils/utils.d.ts +5 -0
- package/dist/utils/utils.js +22 -0
- package/dist/utils/yaml.d.ts +179 -0
- package/dist/utils/yaml.js +556 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.js +7 -0
- package/dist/workers/base_worker.d.ts +772 -0
- package/dist/workers/base_worker.js +1298 -0
- package/dist/workers/index.d.ts +2 -0
- package/dist/workers/index.js +8 -0
- package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
- package/dist/workers/llm/backend_llm_worker.js +1055 -0
- package/dist/workers/llm/index.d.ts +6 -0
- package/dist/workers/llm/index.js +11 -0
- package/dist/workers/llm/llm_context_worker.d.ts +66 -0
- package/dist/workers/llm/llm_context_worker.js +72 -0
- package/dist/workers/llm/llm_worker.d.ts +180 -0
- package/dist/workers/llm/llm_worker.js +323 -0
- package/dist/workers/llm/tool_decorator.d.ts +68 -0
- package/dist/workers/llm/tool_decorator.js +60 -0
- package/dist/workers/proxy/index.d.ts +3 -0
- package/dist/workers/proxy/index.js +9 -0
- package/dist/workers/proxy/websocket/client.d.ts +110 -0
- package/dist/workers/proxy/websocket/client.js +196 -0
- package/dist/workers/proxy/websocket/index.d.ts +3 -0
- package/dist/workers/proxy/websocket/index.js +10 -0
- package/dist/workers/runner.d.ts +268 -0
- package/dist/workers/runner.js +489 -0
- package/dist/workers/ui/index.d.ts +22 -0
- package/dist/workers/ui/index.js +27 -0
- package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
- package/dist/workers/ui/ui_event_decorator.js +75 -0
- package/dist/workers/ui/ui_job_context.d.ts +12 -0
- package/dist/workers/ui/ui_job_context.js +17 -0
- package/dist/workers/ui/ui_prompts.d.ts +21 -0
- package/dist/workers/ui/ui_prompts.js +41 -0
- package/dist/workers/ui/ui_tools.d.ts +32 -0
- package/dist/workers/ui/ui_tools.js +112 -0
- package/dist/workers/ui/ui_worker.d.ts +571 -0
- package/dist/workers/ui/ui_worker.js +1156 -0
- package/package.json +61 -3
- 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
|