@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,109 @@
|
|
|
1
|
+
/** Python's `ch.isalnum()` for a single character. */
|
|
2
|
+
export declare function isAlnum(ch: string | undefined): boolean;
|
|
3
|
+
/** Python's `ch.isalpha()` for a single character. */
|
|
4
|
+
export declare function isAlpha(ch: string | undefined): boolean;
|
|
5
|
+
/** Python's `ch.isspace()` for a single character. */
|
|
6
|
+
export declare function isSpace(ch: string | undefined): boolean;
|
|
7
|
+
/** Python's `unicodedata.category(ch).startswith("P")` for a single character. */
|
|
8
|
+
export declare function isPunctuation(ch: string | undefined): boolean;
|
|
9
|
+
/** The character (code point) at code unit offset `pos` of `text`. */
|
|
10
|
+
export declare function charAt(text: string, pos: number): string;
|
|
11
|
+
/**
|
|
12
|
+
* Remove punctuation only at the very end of `text`.
|
|
13
|
+
*
|
|
14
|
+
* @param text Input text to trim.
|
|
15
|
+
* @returns `text` with any trailing run of Unicode punctuation characters removed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripTrailingPunctuation(text: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Replace typographic punctuation variants with their ASCII equivalents.
|
|
20
|
+
*
|
|
21
|
+
* @param text Input text to fold.
|
|
22
|
+
* @returns `text` with typographic quotes and dashes replaced by ASCII; same
|
|
23
|
+
* length as `text`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function foldTypography(text: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Fold away surface variation between two spellings of the same text, 1:1.
|
|
28
|
+
*
|
|
29
|
+
* Unlike `alnumOnly`, this never removes or merges characters -- punctuation,
|
|
30
|
+
* spaces, and markup are passed through unchanged, and each output character
|
|
31
|
+
* corresponds to exactly the same-index input character. A raw offset
|
|
32
|
+
* computed against the folded text therefore applies unchanged to the
|
|
33
|
+
* original, so callers can use it as a drop-in transform before a
|
|
34
|
+
* position-based literal comparison, without the risk of a fully-normalized
|
|
35
|
+
* (whitespace/punctuation-stripped) comparison matching across a boundary
|
|
36
|
+
* that wasn't already a candidate in the untransformed comparison.
|
|
37
|
+
*
|
|
38
|
+
* Folds case, accents, and typographic punctuation (`’` -> `'`,
|
|
39
|
+
* `–` -> `-`) -- the variations a TTS service may introduce between the
|
|
40
|
+
* text it was sent and the words it reports back. Deliberately narrow: each
|
|
41
|
+
* folded character is listed in `TYPOGRAPHIC_FOLD`, rather than applying a
|
|
42
|
+
* blanket Unicode compatibility normalization, which would silently fold
|
|
43
|
+
* thousands of characters (CJK compatibility ideographs, halfwidth katakana,
|
|
44
|
+
* math alphanumerics) that no service is known to substitute.
|
|
45
|
+
*
|
|
46
|
+
* @param text Input text to fold.
|
|
47
|
+
* @returns `text` with those variations folded away; same length as `text`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function foldForMatching(text: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Strip XML/HTML tags then keep only lowercase alphanumeric characters.
|
|
52
|
+
*
|
|
53
|
+
* Accented letters (e.g. ã, é) are reduced to their base letter so TTS output
|
|
54
|
+
* can be matched against LLM text even when the provider strips diacritics.
|
|
55
|
+
* Non-Latin scripts (CJK, Hangul) are kept as-is — each original character
|
|
56
|
+
* contributes exactly one char to the result, keeping normalized length in
|
|
57
|
+
* sync with raw alnum counts used by `advanceByAlnums`.
|
|
58
|
+
*
|
|
59
|
+
* @param text Input text to reduce.
|
|
60
|
+
* @returns Lowercase alphanumeric-only string with tags stripped.
|
|
61
|
+
*/
|
|
62
|
+
export declare function alnumOnly(text: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* Return true if `text` holds anything alphanumeric once markup is stripped.
|
|
65
|
+
*
|
|
66
|
+
* The predicate form of `alnumOnly`, for the question the callers actually
|
|
67
|
+
* ask: is there anything left to speak here? A tag's letters do not count --
|
|
68
|
+
* `"<break/>"` is empty by this measure.
|
|
69
|
+
*/
|
|
70
|
+
export declare function hasAlnum(text: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Return the position in `text` after advancing past `n` characters.
|
|
73
|
+
*
|
|
74
|
+
* XML/HTML tags (`<...>`) are crossed without counting against the budget, so
|
|
75
|
+
* the span returned includes any tag met on the way. Everything else counts,
|
|
76
|
+
* punctuation and spaces included.
|
|
77
|
+
*
|
|
78
|
+
* This keeps a cursor in step with one walking the same content written
|
|
79
|
+
* without the tags: both move over the same characters, so neither reaches
|
|
80
|
+
* past what the other has. Where the budget is a count of letters and digits
|
|
81
|
+
* instead, use `advanceByAlnums`.
|
|
82
|
+
*
|
|
83
|
+
* @param text The source text to scan.
|
|
84
|
+
* @param startPos Starting position in `text`.
|
|
85
|
+
* @param n Number of characters (code units) to consume.
|
|
86
|
+
* @returns New position in `text` after consuming `n` characters.
|
|
87
|
+
*/
|
|
88
|
+
export declare function advanceByChars(text: string, startPos: number, n: number): number;
|
|
89
|
+
/**
|
|
90
|
+
* Return the position in `text` after advancing past `n` alphanumeric chars.
|
|
91
|
+
*
|
|
92
|
+
* Moves through the text one character at a time, counting only alphanumeric
|
|
93
|
+
* characters. XML/HTML tags (`<...>`) are skipped entirely — their content is
|
|
94
|
+
* not counted against the budget, so the returned span includes the full tag.
|
|
95
|
+
* Other non-alphanumeric characters (spaces, punctuation) are also passed over
|
|
96
|
+
* without decrementing the budget.
|
|
97
|
+
*
|
|
98
|
+
* After the `n` alnum chars are consumed, advances further past any
|
|
99
|
+
* immediately following punctuation (e.g. the `,` in `"questions,"` or the `.`
|
|
100
|
+
* in `"done."`), stopping before the next space, alnum char, or XML tag.
|
|
101
|
+
*
|
|
102
|
+
* @param text The source text to scan.
|
|
103
|
+
* @param startPos Starting position in `text`.
|
|
104
|
+
* @param n Number of alphanumeric characters (code units) to consume.
|
|
105
|
+
* @returns New position in `text` after consuming `n` alnum chars and
|
|
106
|
+
* trailing punctuation.
|
|
107
|
+
*/
|
|
108
|
+
export declare function advanceByAlnums(text: string, startPos: number, n: number): number;
|
|
109
|
+
//# sourceMappingURL=alnum_utils.d.ts.map
|
|
@@ -0,0 +1,262 @@
|
|
|
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/alnum_utils.py
|
|
6
|
+
/**
|
|
7
|
+
* Shared alphanumeric utilities for text normalization and cursor advancement.
|
|
8
|
+
*
|
|
9
|
+
* Positions and counts are UTF-16 code units, as JavaScript string indices
|
|
10
|
+
* are (upstream counts code points). Every count produced here (`alnumOnly`
|
|
11
|
+
* lengths) and every count consumed (`advanceByAlnums`, `advanceByChars`)
|
|
12
|
+
* uses the same unit, so they stay in step; they only differ from upstream
|
|
13
|
+
* for characters outside the Basic Multilingual Plane.
|
|
14
|
+
*/
|
|
15
|
+
import { stripCompleteMarkup } from "./markup_utils.js";
|
|
16
|
+
//
|
|
17
|
+
// Python `str` predicates, for one character (code point).
|
|
18
|
+
//
|
|
19
|
+
const ALNUM_RE = /^[\p{L}\p{N}]$/u;
|
|
20
|
+
const ALPHA_RE = /^\p{L}$/u;
|
|
21
|
+
const PUNCT_RE = /^\p{P}$/u;
|
|
22
|
+
// Python's `str.isspace()` set (differs from JS `\s` on \x1c-\x1f, \x85 and \ufeff).
|
|
23
|
+
// The \x1c-\x1f separators are checked by code in `isSpace`.
|
|
24
|
+
const SPACE_RE = /^[\t\n\v\f\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]$/;
|
|
25
|
+
/** Python's `ch.isalnum()` for a single character. */
|
|
26
|
+
export function isAlnum(ch) {
|
|
27
|
+
return ch !== undefined && ALNUM_RE.test(ch);
|
|
28
|
+
}
|
|
29
|
+
/** Python's `ch.isalpha()` for a single character. */
|
|
30
|
+
export function isAlpha(ch) {
|
|
31
|
+
return ch !== undefined && ALPHA_RE.test(ch);
|
|
32
|
+
}
|
|
33
|
+
/** Python's `ch.isspace()` for a single character. */
|
|
34
|
+
export function isSpace(ch) {
|
|
35
|
+
if (ch === undefined)
|
|
36
|
+
return false;
|
|
37
|
+
const code = ch.charCodeAt(0);
|
|
38
|
+
return (ch.length === 1 && code >= 0x1c && code <= 0x1f) || SPACE_RE.test(ch);
|
|
39
|
+
}
|
|
40
|
+
/** Python's `unicodedata.category(ch).startswith("P")` for a single character. */
|
|
41
|
+
export function isPunctuation(ch) {
|
|
42
|
+
return ch !== undefined && PUNCT_RE.test(ch);
|
|
43
|
+
}
|
|
44
|
+
/** The character (code point) at code unit offset `pos` of `text`. */
|
|
45
|
+
export function charAt(text, pos) {
|
|
46
|
+
const cp = text.codePointAt(pos);
|
|
47
|
+
return cp === undefined ? "" : String.fromCodePoint(cp);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Remove punctuation only at the very end of `text`.
|
|
51
|
+
*
|
|
52
|
+
* @param text Input text to trim.
|
|
53
|
+
* @returns `text` with any trailing run of Unicode punctuation characters removed.
|
|
54
|
+
*/
|
|
55
|
+
export function stripTrailingPunctuation(text) {
|
|
56
|
+
return text.replace(/\p{P}+$/u, "");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Typographic punctuation variants mapped to their ASCII equivalents.
|
|
60
|
+
*
|
|
61
|
+
* LLMs emit the typographic forms and TTS services may report the ASCII ones
|
|
62
|
+
* in word-timestamp events (or the reverse). Every entry is a single
|
|
63
|
+
* character mapped to a single character, which is what lets
|
|
64
|
+
* `foldForMatching` keep its 1:1 length contract.
|
|
65
|
+
*/
|
|
66
|
+
const TYPOGRAPHIC_FOLD = {
|
|
67
|
+
"‘": "'", // ‘ LEFT SINGLE QUOTATION MARK
|
|
68
|
+
"’": "'", // ’ RIGHT SINGLE QUOTATION MARK
|
|
69
|
+
ʼ: "'", // ʼ MODIFIER LETTER APOSTROPHE
|
|
70
|
+
"“": '"', // “ LEFT DOUBLE QUOTATION MARK
|
|
71
|
+
"”": '"', // ” RIGHT DOUBLE QUOTATION MARK
|
|
72
|
+
"–": "-", // – EN DASH
|
|
73
|
+
"—": "-", // — EM DASH
|
|
74
|
+
};
|
|
75
|
+
const TYPOGRAPHIC_FOLD_RE = /[\u2018\u2019\u02bc\u201c\u201d\u2013\u2014]/g;
|
|
76
|
+
/**
|
|
77
|
+
* Replace typographic punctuation variants with their ASCII equivalents.
|
|
78
|
+
*
|
|
79
|
+
* @param text Input text to fold.
|
|
80
|
+
* @returns `text` with typographic quotes and dashes replaced by ASCII; same
|
|
81
|
+
* length as `text`.
|
|
82
|
+
*/
|
|
83
|
+
export function foldTypography(text) {
|
|
84
|
+
return text.replace(TYPOGRAPHIC_FOLD_RE, (ch) => TYPOGRAPHIC_FOLD[ch] ?? ch);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Lowercase `char`, reduced to its base letter if it carries a combining accent.
|
|
88
|
+
*
|
|
89
|
+
* NFD decomposes an accented character into a base letter plus a combining
|
|
90
|
+
* mark (e.g. `é` -> `e` + `◌́`, category `Mn`); dropping the mark keeps only
|
|
91
|
+
* the base letter. Always returns exactly one character of the same length,
|
|
92
|
+
* so callers can rely on a 1:1 length mapping with the input.
|
|
93
|
+
*/
|
|
94
|
+
function foldAccentedChar(char) {
|
|
95
|
+
const nfd = [...char.normalize("NFD")];
|
|
96
|
+
let folded;
|
|
97
|
+
if (nfd.length >= 2 && /^\p{Mn}$/u.test(nfd[1])) {
|
|
98
|
+
folded = nfd[0].toLowerCase();
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
folded = char.toLowerCase();
|
|
102
|
+
}
|
|
103
|
+
// A few lowercase mappings change length (they do in Python too); keep the
|
|
104
|
+
// 1:1 length contract by leaving such a character as it is.
|
|
105
|
+
return folded.length === char.length ? folded : char;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Fold away surface variation between two spellings of the same text, 1:1.
|
|
109
|
+
*
|
|
110
|
+
* Unlike `alnumOnly`, this never removes or merges characters -- punctuation,
|
|
111
|
+
* spaces, and markup are passed through unchanged, and each output character
|
|
112
|
+
* corresponds to exactly the same-index input character. A raw offset
|
|
113
|
+
* computed against the folded text therefore applies unchanged to the
|
|
114
|
+
* original, so callers can use it as a drop-in transform before a
|
|
115
|
+
* position-based literal comparison, without the risk of a fully-normalized
|
|
116
|
+
* (whitespace/punctuation-stripped) comparison matching across a boundary
|
|
117
|
+
* that wasn't already a candidate in the untransformed comparison.
|
|
118
|
+
*
|
|
119
|
+
* Folds case, accents, and typographic punctuation (`’` -> `'`,
|
|
120
|
+
* `–` -> `-`) -- the variations a TTS service may introduce between the
|
|
121
|
+
* text it was sent and the words it reports back. Deliberately narrow: each
|
|
122
|
+
* folded character is listed in `TYPOGRAPHIC_FOLD`, rather than applying a
|
|
123
|
+
* blanket Unicode compatibility normalization, which would silently fold
|
|
124
|
+
* thousands of characters (CJK compatibility ideographs, halfwidth katakana,
|
|
125
|
+
* math alphanumerics) that no service is known to substitute.
|
|
126
|
+
*
|
|
127
|
+
* @param text Input text to fold.
|
|
128
|
+
* @returns `text` with those variations folded away; same length as `text`.
|
|
129
|
+
*/
|
|
130
|
+
export function foldForMatching(text) {
|
|
131
|
+
let folded = "";
|
|
132
|
+
for (const ch of text) {
|
|
133
|
+
folded += isAlpha(ch) ? foldAccentedChar(ch) : ch;
|
|
134
|
+
}
|
|
135
|
+
return foldTypography(folded);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Strip XML/HTML tags then keep only lowercase alphanumeric characters.
|
|
139
|
+
*
|
|
140
|
+
* Accented letters (e.g. ã, é) are reduced to their base letter so TTS output
|
|
141
|
+
* can be matched against LLM text even when the provider strips diacritics.
|
|
142
|
+
* Non-Latin scripts (CJK, Hangul) are kept as-is — each original character
|
|
143
|
+
* contributes exactly one char to the result, keeping normalized length in
|
|
144
|
+
* sync with raw alnum counts used by `advanceByAlnums`.
|
|
145
|
+
*
|
|
146
|
+
* @param text Input text to reduce.
|
|
147
|
+
* @returns Lowercase alphanumeric-only string with tags stripped.
|
|
148
|
+
*/
|
|
149
|
+
export function alnumOnly(text) {
|
|
150
|
+
text = stripCompleteMarkup(text);
|
|
151
|
+
let result = "";
|
|
152
|
+
for (const char of text) {
|
|
153
|
+
// Ignore punctuation, spaces, emojis, etc.
|
|
154
|
+
// Keep only letters and numbers.
|
|
155
|
+
if (!isAlnum(char)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (isAlpha(char)) {
|
|
159
|
+
// Letters, including CJK and Hangul: fold accents, a no-op for scripts
|
|
160
|
+
// that have none.
|
|
161
|
+
result += foldAccentedChar(char);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// Digits and other alnum-but-not-alphabetic characters: no case or
|
|
165
|
+
// accent to fold, so keep as-is (lowercase conversion is a no-op).
|
|
166
|
+
const lower = char.toLowerCase();
|
|
167
|
+
result += lower.length === char.length ? lower : char;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Return true if `text` holds anything alphanumeric once markup is stripped.
|
|
174
|
+
*
|
|
175
|
+
* The predicate form of `alnumOnly`, for the question the callers actually
|
|
176
|
+
* ask: is there anything left to speak here? A tag's letters do not count --
|
|
177
|
+
* `"<break/>"` is empty by this measure.
|
|
178
|
+
*/
|
|
179
|
+
export function hasAlnum(text) {
|
|
180
|
+
return alnumOnly(text).length > 0;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Return the position in `text` after advancing past `n` characters.
|
|
184
|
+
*
|
|
185
|
+
* XML/HTML tags (`<...>`) are crossed without counting against the budget, so
|
|
186
|
+
* the span returned includes any tag met on the way. Everything else counts,
|
|
187
|
+
* punctuation and spaces included.
|
|
188
|
+
*
|
|
189
|
+
* This keeps a cursor in step with one walking the same content written
|
|
190
|
+
* without the tags: both move over the same characters, so neither reaches
|
|
191
|
+
* past what the other has. Where the budget is a count of letters and digits
|
|
192
|
+
* instead, use `advanceByAlnums`.
|
|
193
|
+
*
|
|
194
|
+
* @param text The source text to scan.
|
|
195
|
+
* @param startPos Starting position in `text`.
|
|
196
|
+
* @param n Number of characters (code units) to consume.
|
|
197
|
+
* @returns New position in `text` after consuming `n` characters.
|
|
198
|
+
*/
|
|
199
|
+
export function advanceByChars(text, startPos, n) {
|
|
200
|
+
let pos = startPos;
|
|
201
|
+
let count = 0;
|
|
202
|
+
while (pos < text.length && count < n) {
|
|
203
|
+
if (text[pos] === "<") {
|
|
204
|
+
const end = text.indexOf(">", pos);
|
|
205
|
+
pos = end !== -1 ? end + 1 : pos + 1;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const len = charAt(text, pos).length;
|
|
209
|
+
count += len;
|
|
210
|
+
pos += len;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return pos;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Return the position in `text` after advancing past `n` alphanumeric chars.
|
|
217
|
+
*
|
|
218
|
+
* Moves through the text one character at a time, counting only alphanumeric
|
|
219
|
+
* characters. XML/HTML tags (`<...>`) are skipped entirely — their content is
|
|
220
|
+
* not counted against the budget, so the returned span includes the full tag.
|
|
221
|
+
* Other non-alphanumeric characters (spaces, punctuation) are also passed over
|
|
222
|
+
* without decrementing the budget.
|
|
223
|
+
*
|
|
224
|
+
* After the `n` alnum chars are consumed, advances further past any
|
|
225
|
+
* immediately following punctuation (e.g. the `,` in `"questions,"` or the `.`
|
|
226
|
+
* in `"done."`), stopping before the next space, alnum char, or XML tag.
|
|
227
|
+
*
|
|
228
|
+
* @param text The source text to scan.
|
|
229
|
+
* @param startPos Starting position in `text`.
|
|
230
|
+
* @param n Number of alphanumeric characters (code units) to consume.
|
|
231
|
+
* @returns New position in `text` after consuming `n` alnum chars and
|
|
232
|
+
* trailing punctuation.
|
|
233
|
+
*/
|
|
234
|
+
export function advanceByAlnums(text, startPos, n) {
|
|
235
|
+
let pos = startPos;
|
|
236
|
+
let count = 0;
|
|
237
|
+
while (pos < text.length && count < n) {
|
|
238
|
+
if (text[pos] === "<") {
|
|
239
|
+
const end = text.indexOf(">", pos);
|
|
240
|
+
pos = end !== -1 ? end + 1 : pos + 1;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const ch = charAt(text, pos);
|
|
244
|
+
if (isAlnum(ch)) {
|
|
245
|
+
count += ch.length;
|
|
246
|
+
}
|
|
247
|
+
pos += ch.length;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
while (pos < text.length) {
|
|
251
|
+
if (text[pos] === "<") {
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
const ch = charAt(text, pos);
|
|
255
|
+
if (isAlnum(ch) || isSpace(ch)) {
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
pos += ch.length;
|
|
259
|
+
}
|
|
260
|
+
return pos;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=alnum_utils.js.map
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in text types.
|
|
3
|
+
*
|
|
4
|
+
* `BACKCHANNEL` is a short acknowledgment the bot says while the user talks,
|
|
5
|
+
* such as "Mm-hmm.". Text can also have a type of its own, such as `"code"`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TextType: {
|
|
8
|
+
readonly BACKCHANNEL: "backchannel";
|
|
9
|
+
readonly SENTENCE: "sentence";
|
|
10
|
+
readonly TOKEN: "token";
|
|
11
|
+
readonly WORD: "word";
|
|
12
|
+
};
|
|
13
|
+
export type TextType = (typeof TextType)[keyof typeof TextType];
|
|
14
|
+
export interface AggregationOptions {
|
|
15
|
+
/** The aggregated text content. */
|
|
16
|
+
text: string;
|
|
17
|
+
/**
|
|
18
|
+
* What the text represents: a `TextType` such as a sentence or a word, or a
|
|
19
|
+
* custom type such as `"code"`.
|
|
20
|
+
*/
|
|
21
|
+
type: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Data class representing aggregated text and its type.
|
|
25
|
+
*
|
|
26
|
+
* An Aggregation object is created whenever a stream of text is aggregated by
|
|
27
|
+
* a text aggregator. It contains the aggregated text and a type saying what
|
|
28
|
+
* the text represents.
|
|
29
|
+
*
|
|
30
|
+
* - `text`: The aggregated text content.
|
|
31
|
+
* - `type`: What the text represents: a `TextType` such as a sentence or
|
|
32
|
+
* a word, or a custom type such as `"code"`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class Aggregation {
|
|
35
|
+
text: string;
|
|
36
|
+
type: string;
|
|
37
|
+
constructor(options: AggregationOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Return a string representation of the aggregation.
|
|
40
|
+
*
|
|
41
|
+
* @returns A descriptive string showing the type and text of the aggregation.
|
|
42
|
+
*/
|
|
43
|
+
toString(): string;
|
|
44
|
+
}
|
|
45
|
+
export interface BaseTextAggregatorOptions {
|
|
46
|
+
/**
|
|
47
|
+
* The aggregation strategy to use. SENTENCE buffers text until sentence
|
|
48
|
+
* boundaries are detected, TOKEN passes text through immediately, and WORD
|
|
49
|
+
* buffers until word boundaries.
|
|
50
|
+
*/
|
|
51
|
+
aggregationType?: TextType;
|
|
52
|
+
/** Language code for sentence detection. */
|
|
53
|
+
language?: string | null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Base class for text aggregators in the Pipecat framework.
|
|
57
|
+
*
|
|
58
|
+
* Text aggregators are usually used by the TTS service to aggregate LLM tokens
|
|
59
|
+
* and decide when the aggregated text should be pushed to the TTS service.
|
|
60
|
+
*
|
|
61
|
+
* Text aggregators can also be used to manipulate text while it's being
|
|
62
|
+
* aggregated (e.g. reasoning blocks can be removed).
|
|
63
|
+
*
|
|
64
|
+
* Subclasses must implement all abstract methods to define specific aggregation
|
|
65
|
+
* logic, text manipulation behavior, and state management for interruptions.
|
|
66
|
+
*/
|
|
67
|
+
export declare abstract class BaseTextAggregator {
|
|
68
|
+
protected _aggregationType: TextType;
|
|
69
|
+
protected _language: string;
|
|
70
|
+
/**
|
|
71
|
+
* Initialize the base text aggregator.
|
|
72
|
+
*
|
|
73
|
+
* @throws Error If `aggregationType` is not a `TextType` (upstream: ValueError).
|
|
74
|
+
*/
|
|
75
|
+
constructor(options?: BaseTextAggregatorOptions);
|
|
76
|
+
/** The normalized language code used for sentence detection. */
|
|
77
|
+
get language(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Select a sentence tokenizer without discarding buffered text.
|
|
80
|
+
*
|
|
81
|
+
* @param language Language code. Call between generations to keep one
|
|
82
|
+
* language for all text within a generation.
|
|
83
|
+
*/
|
|
84
|
+
setLanguage(language: string | null): void;
|
|
85
|
+
/** The aggregation type for this aggregator. */
|
|
86
|
+
get aggregationType(): TextType;
|
|
87
|
+
/**
|
|
88
|
+
* The currently aggregated text.
|
|
89
|
+
*
|
|
90
|
+
* Subclasses must implement this property to return the text that has
|
|
91
|
+
* been accumulated so far in their internal buffer or storage.
|
|
92
|
+
*/
|
|
93
|
+
abstract get text(): Aggregation;
|
|
94
|
+
/**
|
|
95
|
+
* Aggregate the specified text and yield completed aggregations.
|
|
96
|
+
*
|
|
97
|
+
* This method processes the input text character-by-character internally
|
|
98
|
+
* and yields Aggregation objects as they complete.
|
|
99
|
+
*
|
|
100
|
+
* Subclasses should implement their specific logic for:
|
|
101
|
+
*
|
|
102
|
+
* - How to process text character-by-character
|
|
103
|
+
* - When to consider the aggregated text ready for processing
|
|
104
|
+
* - What criteria determine text completion (e.g., sentence boundaries)
|
|
105
|
+
* - When a completion occurs, yield an Aggregation object containing the
|
|
106
|
+
* aggregated text (stripped of leading/trailing whitespace) and its type
|
|
107
|
+
*
|
|
108
|
+
* @param text The text to be aggregated.
|
|
109
|
+
* @returns An async iterable of Aggregation objects as they complete. Each
|
|
110
|
+
* Aggregation consists of the aggregated text (stripped of
|
|
111
|
+
* leading/trailing whitespace) and a type saying what it represents: a
|
|
112
|
+
* `TextType` such as a sentence or a word, or a custom type such as
|
|
113
|
+
* `"code"`.
|
|
114
|
+
*/
|
|
115
|
+
abstract aggregate(text: string): AsyncIterable<Aggregation>;
|
|
116
|
+
/**
|
|
117
|
+
* Flush any pending aggregation.
|
|
118
|
+
*
|
|
119
|
+
* This method is called at the end of a stream (e.g., when receiving
|
|
120
|
+
* LLMFullResponseEndFrame) to return any text that was buffered.
|
|
121
|
+
*
|
|
122
|
+
* @returns An Aggregation object if there is pending text, or null if there
|
|
123
|
+
* is no pending text.
|
|
124
|
+
*/
|
|
125
|
+
abstract flush(): Promise<Aggregation | null>;
|
|
126
|
+
/**
|
|
127
|
+
* Handle interruptions in the text aggregation process.
|
|
128
|
+
*
|
|
129
|
+
* When an interruption occurs it is possible that we might want to discard
|
|
130
|
+
* the aggregated text or do some internal modifications to the aggregated text.
|
|
131
|
+
*
|
|
132
|
+
* Subclasses should implement this method to define how they respond to
|
|
133
|
+
* interruptions, such as clearing buffers, resetting state, or preserving
|
|
134
|
+
* partial content.
|
|
135
|
+
*/
|
|
136
|
+
abstract handleInterruption(): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Clear the internally aggregated text and reset to initial state.
|
|
139
|
+
*
|
|
140
|
+
* Subclasses should implement this method to return the aggregator to its
|
|
141
|
+
* initial state, discarding any previously accumulated text content and
|
|
142
|
+
* resetting any internal tracking variables.
|
|
143
|
+
*/
|
|
144
|
+
abstract reset(): Promise<void>;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=base_text_aggregator.d.ts.map
|
|
@@ -0,0 +1,102 @@
|
|
|
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/base_text_aggregator.py
|
|
6
|
+
/**
|
|
7
|
+
* Base text aggregator interface for Pipecat text processing.
|
|
8
|
+
*
|
|
9
|
+
* This module defines the abstract base class for text aggregators that
|
|
10
|
+
* accumulate and process text tokens, typically used by TTS services to
|
|
11
|
+
* determine when aggregated text should be sent for speech synthesis.
|
|
12
|
+
*
|
|
13
|
+
* The deprecated `AggregationType` alias of `TextType` is not ported.
|
|
14
|
+
*/
|
|
15
|
+
import { resolveSentenceTokenizerLanguage } from "../string.js";
|
|
16
|
+
/**
|
|
17
|
+
* Built-in text types.
|
|
18
|
+
*
|
|
19
|
+
* `BACKCHANNEL` is a short acknowledgment the bot says while the user talks,
|
|
20
|
+
* such as "Mm-hmm.". Text can also have a type of its own, such as `"code"`.
|
|
21
|
+
*/
|
|
22
|
+
export const TextType = {
|
|
23
|
+
BACKCHANNEL: "backchannel",
|
|
24
|
+
SENTENCE: "sentence",
|
|
25
|
+
TOKEN: "token",
|
|
26
|
+
WORD: "word",
|
|
27
|
+
};
|
|
28
|
+
const TEXT_TYPE_VALUES = new Set(Object.values(TextType));
|
|
29
|
+
/**
|
|
30
|
+
* Data class representing aggregated text and its type.
|
|
31
|
+
*
|
|
32
|
+
* An Aggregation object is created whenever a stream of text is aggregated by
|
|
33
|
+
* a text aggregator. It contains the aggregated text and a type saying what
|
|
34
|
+
* the text represents.
|
|
35
|
+
*
|
|
36
|
+
* - `text`: The aggregated text content.
|
|
37
|
+
* - `type`: What the text represents: a `TextType` such as a sentence or
|
|
38
|
+
* a word, or a custom type such as `"code"`.
|
|
39
|
+
*/
|
|
40
|
+
export class Aggregation {
|
|
41
|
+
text;
|
|
42
|
+
type;
|
|
43
|
+
constructor(options) {
|
|
44
|
+
this.text = options.text;
|
|
45
|
+
this.type = options.type;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Return a string representation of the aggregation.
|
|
49
|
+
*
|
|
50
|
+
* @returns A descriptive string showing the type and text of the aggregation.
|
|
51
|
+
*/
|
|
52
|
+
toString() {
|
|
53
|
+
return `Aggregation by ${this.type}: ${this.text}`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Base class for text aggregators in the Pipecat framework.
|
|
58
|
+
*
|
|
59
|
+
* Text aggregators are usually used by the TTS service to aggregate LLM tokens
|
|
60
|
+
* and decide when the aggregated text should be pushed to the TTS service.
|
|
61
|
+
*
|
|
62
|
+
* Text aggregators can also be used to manipulate text while it's being
|
|
63
|
+
* aggregated (e.g. reasoning blocks can be removed).
|
|
64
|
+
*
|
|
65
|
+
* Subclasses must implement all abstract methods to define specific aggregation
|
|
66
|
+
* logic, text manipulation behavior, and state management for interruptions.
|
|
67
|
+
*/
|
|
68
|
+
export class BaseTextAggregator {
|
|
69
|
+
_aggregationType;
|
|
70
|
+
_language;
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the base text aggregator.
|
|
73
|
+
*
|
|
74
|
+
* @throws Error If `aggregationType` is not a `TextType` (upstream: ValueError).
|
|
75
|
+
*/
|
|
76
|
+
constructor(options = {}) {
|
|
77
|
+
const aggregationType = options.aggregationType ?? TextType.SENTENCE;
|
|
78
|
+
if (!TEXT_TYPE_VALUES.has(aggregationType)) {
|
|
79
|
+
throw new Error(`'${aggregationType}' is not a valid TextType`);
|
|
80
|
+
}
|
|
81
|
+
this._aggregationType = aggregationType;
|
|
82
|
+
this._language = resolveSentenceTokenizerLanguage(options.language ?? null);
|
|
83
|
+
}
|
|
84
|
+
/** The normalized language code used for sentence detection. */
|
|
85
|
+
get language() {
|
|
86
|
+
return this._language;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Select a sentence tokenizer without discarding buffered text.
|
|
90
|
+
*
|
|
91
|
+
* @param language Language code. Call between generations to keep one
|
|
92
|
+
* language for all text within a generation.
|
|
93
|
+
*/
|
|
94
|
+
setLanguage(language) {
|
|
95
|
+
this._language = resolveSentenceTokenizerLanguage(language);
|
|
96
|
+
}
|
|
97
|
+
/** The aggregation type for this aggregator. */
|
|
98
|
+
get aggregationType() {
|
|
99
|
+
return this._aggregationType;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=base_text_aggregator.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base text filter interface for Pipecat text processing.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the abstract base class for text filters that can
|
|
5
|
+
* modify text content in the processing pipeline, including support for
|
|
6
|
+
* settings updates and interruption handling.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base class for text filters in the Pipecat framework.
|
|
10
|
+
*
|
|
11
|
+
* Text filters are responsible for modifying text content as it flows through
|
|
12
|
+
* the processing pipeline. They support dynamic settings updates and can
|
|
13
|
+
* handle interruptions to reset their internal state.
|
|
14
|
+
*
|
|
15
|
+
* Subclasses must implement all abstract methods to define specific filtering
|
|
16
|
+
* behavior, settings management, and interruption handling logic.
|
|
17
|
+
*/
|
|
18
|
+
export declare abstract class BaseTextFilter {
|
|
19
|
+
constructor(_options?: object);
|
|
20
|
+
/**
|
|
21
|
+
* Update the filter's configuration settings.
|
|
22
|
+
*
|
|
23
|
+
* Subclasses should implement this method to handle dynamic configuration
|
|
24
|
+
* updates during runtime, updating internal state as needed.
|
|
25
|
+
*
|
|
26
|
+
* @param settings Dictionary of setting names to values for configuration.
|
|
27
|
+
*/
|
|
28
|
+
updateSettings(_settings: Readonly<Record<string, unknown>>): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Apply filtering transformations to the input text.
|
|
31
|
+
*
|
|
32
|
+
* Subclasses must implement this method to define the specific text
|
|
33
|
+
* transformations that should be applied to the input.
|
|
34
|
+
*
|
|
35
|
+
* @param text The input text to be filtered.
|
|
36
|
+
* @returns The filtered text after applying transformations.
|
|
37
|
+
*/
|
|
38
|
+
abstract filter(text: string): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Handle interruption events in the processing pipeline.
|
|
41
|
+
*
|
|
42
|
+
* Subclasses should implement this method to reset internal state, clear
|
|
43
|
+
* buffers, or perform other cleanup when an interruption occurs.
|
|
44
|
+
*/
|
|
45
|
+
handleInterruption(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Reset the filter state after an interruption has been handled.
|
|
48
|
+
*
|
|
49
|
+
* Subclasses should implement this method to restore the filter to normal
|
|
50
|
+
* operation after an interruption has been processed and resolved.
|
|
51
|
+
*/
|
|
52
|
+
resetInterruption(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=base_text_filter.d.ts.map
|