@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,205 @@
|
|
|
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/turns/user_stop/external_user_turn_stop_strategy.py
|
|
6
|
+
/** User turn stop strategy driven by another component in the pipeline. */
|
|
7
|
+
import { Event, TimeoutError, waitFor } from "@pipedog/asyncio";
|
|
8
|
+
import { InterimTranscriptionFrame, ProposedUserStartedSpeakingFrame, ProposedUserStoppedSpeakingFrame, TranscriptionFrame, UserStartedSpeakingFrame, UserStoppedSpeakingFrame, } from "../../frames/frames.js";
|
|
9
|
+
import { logger } from "../../utils/logger.js";
|
|
10
|
+
import { ProcessFrameResult } from "../types.js";
|
|
11
|
+
import { BaseUserTurnStopStrategy, } from "./base_user_turn_stop_strategy.js";
|
|
12
|
+
/**
|
|
13
|
+
* User turn stop strategy driven by another component in the pipeline.
|
|
14
|
+
*
|
|
15
|
+
* The end-of-turn counterpart to `ExternalUserTurnStartStrategy`, taking the
|
|
16
|
+
* same two signals:
|
|
17
|
+
*
|
|
18
|
+
* - `ProposedUserStoppedSpeakingFrame` — a service proposing that the turn has
|
|
19
|
+
* ended. This strategy decides, and emits the `UserStoppedSpeakingFrame`
|
|
20
|
+
* itself. It may also hold the turn open past the proposal, which is what
|
|
21
|
+
* `waitForTranscript` does.
|
|
22
|
+
*
|
|
23
|
+
* - `UserStoppedSpeakingFrame` — the turn end was already decided and
|
|
24
|
+
* announced elsewhere, typically by a shared `UserTurnProcessor`. This
|
|
25
|
+
* strategy adopts that decision and emits nothing.
|
|
26
|
+
*
|
|
27
|
+
* To shift the timing further, subclass this strategy and override
|
|
28
|
+
* `BaseUserTurnStopStrategy.triggerUserTurnStopped`, which both paths reach
|
|
29
|
+
* once they decide the turn is over. Its `enableUserSpeakingFrames` option
|
|
30
|
+
* already carries whichever path got there, so pass it through when the
|
|
31
|
+
* override eventually finalizes.
|
|
32
|
+
*/
|
|
33
|
+
export class ExternalUserTurnStopStrategy extends BaseUserTurnStopStrategy {
|
|
34
|
+
_timeout;
|
|
35
|
+
_waitForTranscript;
|
|
36
|
+
_text = "";
|
|
37
|
+
_userSpeaking = false;
|
|
38
|
+
_seenInterimResults = false;
|
|
39
|
+
_turnAnnouncedElsewhere = false;
|
|
40
|
+
_turnOpen = false;
|
|
41
|
+
_event = new Event();
|
|
42
|
+
_task = null;
|
|
43
|
+
constructor(options = {}) {
|
|
44
|
+
super(options);
|
|
45
|
+
this._timeout = options.timeout ?? 0.5;
|
|
46
|
+
this._waitForTranscript = options.waitForTranscript ?? true;
|
|
47
|
+
}
|
|
48
|
+
/** Whether this strategy resolves proposals into turn stops. */
|
|
49
|
+
get resolvesProposedTurnStopFrames() {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
/** Whether turn-stop signaling waits for transcript text. */
|
|
53
|
+
get waitForTranscript() {
|
|
54
|
+
return this._waitForTranscript;
|
|
55
|
+
}
|
|
56
|
+
set waitForTranscript(value) {
|
|
57
|
+
this._waitForTranscript = value;
|
|
58
|
+
}
|
|
59
|
+
/** Ready the strategy to detect the end of the turn now starting. */
|
|
60
|
+
async handleUserTurnStarted() {
|
|
61
|
+
await this._reset();
|
|
62
|
+
this._turnOpen = true;
|
|
63
|
+
}
|
|
64
|
+
/** Clear per-turn state once the turn has ended. */
|
|
65
|
+
async handleUserTurnStopped() {
|
|
66
|
+
await this._reset();
|
|
67
|
+
this._turnOpen = false;
|
|
68
|
+
}
|
|
69
|
+
/** Clear per-turn state. Runs at both turn boundaries. */
|
|
70
|
+
async _reset() {
|
|
71
|
+
this._text = "";
|
|
72
|
+
this._userSpeaking = false;
|
|
73
|
+
this._seenInterimResults = false;
|
|
74
|
+
this._turnAnnouncedElsewhere = false;
|
|
75
|
+
this._event.clear();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Set up the strategy.
|
|
79
|
+
*
|
|
80
|
+
* @param setup Configuration object containing setup parameters.
|
|
81
|
+
*/
|
|
82
|
+
async setup(setup) {
|
|
83
|
+
await super.setup(setup);
|
|
84
|
+
this._task = this.createTask(() => this._taskHandler(), `${this}::_task_handler`);
|
|
85
|
+
}
|
|
86
|
+
/** Cleanup the strategy. */
|
|
87
|
+
async cleanup() {
|
|
88
|
+
await super.cleanup();
|
|
89
|
+
if (this._task) {
|
|
90
|
+
await this.taskManager.cancelTask(this._task);
|
|
91
|
+
this._task = null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Process an incoming frame to update strategy state.
|
|
96
|
+
*
|
|
97
|
+
* Updates internal transcription text and speaking state. The user end
|
|
98
|
+
* turn will be triggered when appropriate based on the collected frames.
|
|
99
|
+
*
|
|
100
|
+
* @param frame The frame to be analyzed.
|
|
101
|
+
* @returns Always returns CONTINUE so subsequent stop strategies are evaluated.
|
|
102
|
+
*/
|
|
103
|
+
async processFrame(frame) {
|
|
104
|
+
if (frame instanceof ProposedUserStartedSpeakingFrame) {
|
|
105
|
+
await this._handleUserStartedSpeaking({ announcedElsewhere: false });
|
|
106
|
+
}
|
|
107
|
+
else if (frame instanceof ProposedUserStoppedSpeakingFrame) {
|
|
108
|
+
await this._handleUserStoppedSpeaking({ announcedElsewhere: false });
|
|
109
|
+
}
|
|
110
|
+
else if (frame instanceof UserStartedSpeakingFrame) {
|
|
111
|
+
await this._handleUserStartedSpeaking({ announcedElsewhere: true });
|
|
112
|
+
}
|
|
113
|
+
else if (frame instanceof UserStoppedSpeakingFrame) {
|
|
114
|
+
await this._handleUserStoppedSpeaking({ announcedElsewhere: true });
|
|
115
|
+
}
|
|
116
|
+
else if (frame instanceof InterimTranscriptionFrame) {
|
|
117
|
+
await this._handleInterimTranscription(frame);
|
|
118
|
+
}
|
|
119
|
+
else if (frame instanceof TranscriptionFrame) {
|
|
120
|
+
await this._handleTranscription(frame);
|
|
121
|
+
}
|
|
122
|
+
return ProcessFrameResult.CONTINUE;
|
|
123
|
+
}
|
|
124
|
+
/** Handle the external signal that the user is speaking. */
|
|
125
|
+
async _handleUserStartedSpeaking(options) {
|
|
126
|
+
this._userSpeaking = true;
|
|
127
|
+
this._turnAnnouncedElsewhere = options.announcedElsewhere;
|
|
128
|
+
}
|
|
129
|
+
/** Handle the external signal that the user has stopped speaking. */
|
|
130
|
+
async _handleUserStoppedSpeaking(options) {
|
|
131
|
+
this._userSpeaking = false;
|
|
132
|
+
this._turnAnnouncedElsewhere = options.announcedElsewhere;
|
|
133
|
+
await this._maybeTriggerUserTurnStopped();
|
|
134
|
+
}
|
|
135
|
+
async _handleInterimTranscription(_frame) {
|
|
136
|
+
this._seenInterimResults = true;
|
|
137
|
+
}
|
|
138
|
+
/** Handle user transcription. */
|
|
139
|
+
async _handleTranscription(frame) {
|
|
140
|
+
this._text += frame.text;
|
|
141
|
+
// We just got a final result, so let's reset interim results.
|
|
142
|
+
this._seenInterimResults = false;
|
|
143
|
+
// Reset aggregation timer.
|
|
144
|
+
this._event.set();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Asynchronously monitor transcriptions and trigger user end turn when ready.
|
|
148
|
+
*
|
|
149
|
+
* If transcription text exists and the user is not currently speaking,
|
|
150
|
+
* triggers the user end turn. Handles multiple or delayed transcriptions
|
|
151
|
+
* gracefully.
|
|
152
|
+
*/
|
|
153
|
+
async _taskHandler() {
|
|
154
|
+
while (true) {
|
|
155
|
+
try {
|
|
156
|
+
await waitFor(() => this._event.wait(), this._timeout);
|
|
157
|
+
this._event.clear();
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
if (!(e instanceof TimeoutError))
|
|
161
|
+
throw e;
|
|
162
|
+
// Note: with waitForTranscript off (realtime mode) this fires on
|
|
163
|
+
// every tick. The _turnOpen check protects against unnecessarily
|
|
164
|
+
// triggering over and over (harmless, since the controller drops
|
|
165
|
+
// repeated triggers, but noisy).
|
|
166
|
+
if (this._turnOpen) {
|
|
167
|
+
await this._maybeTriggerUserTurnStopped();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* End the turn, emitting the turn frame unless it was already announced.
|
|
174
|
+
*
|
|
175
|
+
* Reads the flag rather than taking it as an argument: finalization can
|
|
176
|
+
* land here from the transcript timeout above, long after the signal that
|
|
177
|
+
* set it.
|
|
178
|
+
*/
|
|
179
|
+
async _triggerUserTurnStopped() {
|
|
180
|
+
if (this._turnAnnouncedElsewhere) {
|
|
181
|
+
logger.debug(`${this}: adopting a user turn stop decided elsewhere`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
logger.debug(`${this}: resolving a proposed user turn stop`);
|
|
185
|
+
}
|
|
186
|
+
await this.triggerUserTurnStopped({
|
|
187
|
+
enableUserSpeakingFrames: this._turnAnnouncedElsewhere ? false : null,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async _maybeTriggerUserTurnStopped() {
|
|
191
|
+
if (this._userSpeaking) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (!this._waitForTranscript) {
|
|
195
|
+
// Fire as soon as the external stop signal arrives —
|
|
196
|
+
// transcripts (if any) are off the latency critical path.
|
|
197
|
+
await this._triggerUserTurnStopped();
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (!this._seenInterimResults && this._text) {
|
|
201
|
+
await this._triggerUserTurnStopped();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=external_user_turn_stop_strategy.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { BaseUserTurnStopStrategy, UserTurnStoppedParams, } from "./base_user_turn_stop_strategy.ts";
|
|
2
|
+
export { DeferredUserTurnStopStrategy, deferred } from "./deferred_user_turn_stop_strategy.ts";
|
|
3
|
+
export { EagerMatchPolicy, ExactMatch, NormalizedMatch } from "./eager_match_policy.ts";
|
|
4
|
+
export { EagerUserTurnStopStrategy } from "./eager_user_turn_stop_strategy.ts";
|
|
5
|
+
export { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.ts";
|
|
6
|
+
export { ExternalUserTurnStopStrategy } from "./external_user_turn_stop_strategy.ts";
|
|
7
|
+
export { LLMTurnCompletionUserTurnStopStrategy } from "./llm_turn_completion_user_turn_stop_strategy.ts";
|
|
8
|
+
export { SpeechTimeoutUserTurnStopStrategy } from "./speech_timeout_user_turn_stop_strategy.ts";
|
|
9
|
+
export { TurnAnalyzerUserTurnStopStrategy } from "./turn_analyzer_user_turn_stop_strategy.ts";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
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/turns/user_stop/__init__.py
|
|
6
|
+
export { BaseUserTurnStopStrategy, UserTurnStoppedParams, } from "./base_user_turn_stop_strategy.js";
|
|
7
|
+
export { DeferredUserTurnStopStrategy, deferred } from "./deferred_user_turn_stop_strategy.js";
|
|
8
|
+
export { EagerMatchPolicy, ExactMatch, NormalizedMatch } from "./eager_match_policy.js";
|
|
9
|
+
export { EagerUserTurnStopStrategy } from "./eager_user_turn_stop_strategy.js";
|
|
10
|
+
export { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.js";
|
|
11
|
+
export { ExternalUserTurnStopStrategy } from "./external_user_turn_stop_strategy.js";
|
|
12
|
+
export { LLMTurnCompletionUserTurnStopStrategy } from "./llm_turn_completion_user_turn_stop_strategy.js";
|
|
13
|
+
export { SpeechTimeoutUserTurnStopStrategy } from "./speech_timeout_user_turn_stop_strategy.js";
|
|
14
|
+
export { TurnAnalyzerUserTurnStopStrategy } from "./turn_analyzer_user_turn_stop_strategy.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** User turn stop strategy gated on the LLM's turn-completion verdict. */
|
|
2
|
+
import { type Frame } from "../../frames/frames.ts";
|
|
3
|
+
import type { ProcessFrameResult } from "../types.ts";
|
|
4
|
+
import { UserTurnCompletionConfig } from "../user_turn_completion_mixin.ts";
|
|
5
|
+
import type { BaseUserTurnStopStrategyOptions } from "./base_user_turn_stop_strategy.ts";
|
|
6
|
+
import { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.ts";
|
|
7
|
+
export interface LLMTurnCompletionUserTurnStopStrategyOptions extends BaseUserTurnStopStrategyOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Configuration applied to the LLM via the `filterIncompleteUserTurns`
|
|
10
|
+
* setting on `StartFrame`. Defaults to `new UserTurnCompletionConfig()`.
|
|
11
|
+
*/
|
|
12
|
+
config?: UserTurnCompletionConfig | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* LLM-gated stop strategy.
|
|
16
|
+
*
|
|
17
|
+
* Extends `ExternalUserTurnCompletionStopStrategy` with the LLM-specific setup
|
|
18
|
+
* needed for the marker-based completion protocol: on `StartFrame`, pushes an
|
|
19
|
+
* `LLMUpdateSettingsFrame` downstream that enables `filterIncompleteUserTurns`
|
|
20
|
+
* on the LLM and seeds the `UserTurnCompletionConfig`. The update is marked
|
|
21
|
+
* `reachInactiveServices` so that every LLM behind an `LLMSwitcher` is
|
|
22
|
+
* configured, not only the one active at startup.
|
|
23
|
+
*
|
|
24
|
+
* Finalization itself is inherited: when the LLM service's
|
|
25
|
+
* `UserTurnCompletionLLMServiceMixin` detects a `●` marker, it broadcasts a
|
|
26
|
+
* `UserTurnInferenceCompletedFrame` and the base class fires
|
|
27
|
+
* `on_user_turn_stopped`. On `incomplete_short` / `incomplete_long` markers
|
|
28
|
+
* the mixin re-prompts internally and no completion frame is emitted, so the
|
|
29
|
+
* public stop event stays deferred.
|
|
30
|
+
*
|
|
31
|
+
* Install alongside one or more `deferred(...)`-wrapped detector strategies
|
|
32
|
+
* that drive `on_user_turn_inference_triggered` but leave finalization to
|
|
33
|
+
* this strategy.
|
|
34
|
+
*/
|
|
35
|
+
export declare class LLMTurnCompletionUserTurnStopStrategy extends ExternalUserTurnCompletionStopStrategy {
|
|
36
|
+
protected _config: UserTurnCompletionConfig;
|
|
37
|
+
constructor(options?: LLMTurnCompletionUserTurnStopStrategyOptions);
|
|
38
|
+
/** Return the configured `UserTurnCompletionConfig`. */
|
|
39
|
+
get config(): UserTurnCompletionConfig;
|
|
40
|
+
/** Configure the LLM on start and delegate completion handling to the base. */
|
|
41
|
+
processFrame(frame: Frame): Promise<ProcessFrameResult>;
|
|
42
|
+
protected _configureLlm(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=llm_turn_completion_user_turn_stop_strategy.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
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/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.py
|
|
6
|
+
/** User turn stop strategy gated on the LLM's turn-completion verdict. */
|
|
7
|
+
import { LLMUpdateSettingsFrame, StartFrame } from "../../frames/frames.js";
|
|
8
|
+
import { LLMSettings } from "../../services/settings.js";
|
|
9
|
+
import { UserTurnCompletionConfig } from "../user_turn_completion_mixin.js";
|
|
10
|
+
import { ExternalUserTurnCompletionStopStrategy } from "./external_user_turn_completion_stop_strategy.js";
|
|
11
|
+
/**
|
|
12
|
+
* LLM-gated stop strategy.
|
|
13
|
+
*
|
|
14
|
+
* Extends `ExternalUserTurnCompletionStopStrategy` with the LLM-specific setup
|
|
15
|
+
* needed for the marker-based completion protocol: on `StartFrame`, pushes an
|
|
16
|
+
* `LLMUpdateSettingsFrame` downstream that enables `filterIncompleteUserTurns`
|
|
17
|
+
* on the LLM and seeds the `UserTurnCompletionConfig`. The update is marked
|
|
18
|
+
* `reachInactiveServices` so that every LLM behind an `LLMSwitcher` is
|
|
19
|
+
* configured, not only the one active at startup.
|
|
20
|
+
*
|
|
21
|
+
* Finalization itself is inherited: when the LLM service's
|
|
22
|
+
* `UserTurnCompletionLLMServiceMixin` detects a `●` marker, it broadcasts a
|
|
23
|
+
* `UserTurnInferenceCompletedFrame` and the base class fires
|
|
24
|
+
* `on_user_turn_stopped`. On `incomplete_short` / `incomplete_long` markers
|
|
25
|
+
* the mixin re-prompts internally and no completion frame is emitted, so the
|
|
26
|
+
* public stop event stays deferred.
|
|
27
|
+
*
|
|
28
|
+
* Install alongside one or more `deferred(...)`-wrapped detector strategies
|
|
29
|
+
* that drive `on_user_turn_inference_triggered` but leave finalization to
|
|
30
|
+
* this strategy.
|
|
31
|
+
*/
|
|
32
|
+
export class LLMTurnCompletionUserTurnStopStrategy extends ExternalUserTurnCompletionStopStrategy {
|
|
33
|
+
_config;
|
|
34
|
+
constructor(options = {}) {
|
|
35
|
+
super(options);
|
|
36
|
+
this._config = options.config ?? new UserTurnCompletionConfig();
|
|
37
|
+
}
|
|
38
|
+
/** Return the configured `UserTurnCompletionConfig`. */
|
|
39
|
+
get config() {
|
|
40
|
+
return this._config;
|
|
41
|
+
}
|
|
42
|
+
/** Configure the LLM on start and delegate completion handling to the base. */
|
|
43
|
+
async processFrame(frame) {
|
|
44
|
+
if (frame instanceof StartFrame) {
|
|
45
|
+
await this._configureLlm();
|
|
46
|
+
}
|
|
47
|
+
return await super.processFrame(frame);
|
|
48
|
+
}
|
|
49
|
+
async _configureLlm() {
|
|
50
|
+
await this.pushFrame(new LLMUpdateSettingsFrame({
|
|
51
|
+
delta: new LLMSettings({
|
|
52
|
+
filterIncompleteUserTurns: true,
|
|
53
|
+
userTurnCompletionConfig: this._config,
|
|
54
|
+
}),
|
|
55
|
+
reachInactiveServices: true,
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=llm_turn_completion_user_turn_stop_strategy.js.map
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/** Speech timeout-based user turn stop strategy. */
|
|
2
|
+
import { type Task } from "@pipedog/asyncio";
|
|
3
|
+
import { type Frame, TranscriptionFrame, VADUserStartedSpeakingFrame, VADUserStoppedSpeakingFrame } from "../../frames/frames.ts";
|
|
4
|
+
import type { FrameProcessorSetup } from "../../processors/frame_processor.ts";
|
|
5
|
+
import { ProcessFrameResult } from "../types.ts";
|
|
6
|
+
import { BaseUserTurnStopStrategy, type BaseUserTurnStopStrategyOptions } from "./base_user_turn_stop_strategy.ts";
|
|
7
|
+
export interface SpeechTimeoutUserTurnStopStrategyOptions extends BaseUserTurnStopStrategyOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Time to wait for the user to potentially say more after they pause
|
|
10
|
+
* speaking. Defaults to 0.6 seconds.
|
|
11
|
+
*/
|
|
12
|
+
userSpeechTimeout?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to require at least one transcript before triggering end-of-turn.
|
|
15
|
+
* When true (default), turn-end fires only after the user-speech timer
|
|
16
|
+
* expires *and* at least one transcript has been received. When false, the
|
|
17
|
+
* strategy signals turn-end as soon as VAD reports end of speech and the
|
|
18
|
+
* user-speech timer has elapsed — independent of transcripts. Set this to
|
|
19
|
+
* false when local turn detection is the intended driver of the
|
|
20
|
+
* conversation (e.g. with a realtime LLM service consuming audio directly),
|
|
21
|
+
* so transcripts are off the latency critical path.
|
|
22
|
+
* `LLMContextAggregatorPair` flips this for you when
|
|
23
|
+
* `realtimeServiceMode: true`.
|
|
24
|
+
*/
|
|
25
|
+
waitForTranscript?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* User turn stop strategy using two independent timers after VAD stop.
|
|
29
|
+
*
|
|
30
|
+
* After the user stops speaking (detected by VAD), this strategy runs two
|
|
31
|
+
* independent timers. The user turn stop is triggered only when both have
|
|
32
|
+
* finished and at least one transcript has been received:
|
|
33
|
+
*
|
|
34
|
+
* - userSpeechTimeout: Policy floor — the window in which the user may
|
|
35
|
+
* resume speaking after a pause. Always runs to completion.
|
|
36
|
+
* - sttTimeout: Safety net for STT latency — the P99 time for the STT
|
|
37
|
+
* service to return a final transcript after VAD stop, adjusted by the
|
|
38
|
+
* VAD stopSecs. Short-circuited when the STT service emits a finalized
|
|
39
|
+
* transcript (`TranscriptionFrame.finalized`), since finalization means
|
|
40
|
+
* STT has nothing more to send.
|
|
41
|
+
*
|
|
42
|
+
* Fallback: when a transcript arrives without a VAD stop event, the
|
|
43
|
+
* userSpeechTimeout timer measures inactivity since the last transcript
|
|
44
|
+
* (rearmed on each transcript). sttTimeout has no meaning here since it
|
|
45
|
+
* is defined relative to VAD stop, and STT has already emitted a
|
|
46
|
+
* transcript — so the stt wait is marked done immediately.
|
|
47
|
+
*/
|
|
48
|
+
export declare class SpeechTimeoutUserTurnStopStrategy extends BaseUserTurnStopStrategy {
|
|
49
|
+
protected _userSpeechTimeout: number;
|
|
50
|
+
protected _waitForTranscript: boolean;
|
|
51
|
+
protected _sttTimeout: number;
|
|
52
|
+
protected _stopSecs: number;
|
|
53
|
+
protected _stopSecsWarned: boolean;
|
|
54
|
+
protected _text: string;
|
|
55
|
+
protected _vadUserSpeaking: boolean;
|
|
56
|
+
protected _transcriptFinalized: boolean;
|
|
57
|
+
protected _vadStopped: boolean;
|
|
58
|
+
protected _userSpeechTimeoutTask: Task<unknown> | null;
|
|
59
|
+
protected _sttTimeoutTask: Task<unknown> | null;
|
|
60
|
+
protected _userSpeechWaitDone: boolean;
|
|
61
|
+
protected _sttWaitDone: boolean;
|
|
62
|
+
constructor(options?: SpeechTimeoutUserTurnStopStrategyOptions);
|
|
63
|
+
/** Whether transcripts gate end-of-turn signalling. */
|
|
64
|
+
get waitForTranscript(): boolean;
|
|
65
|
+
set waitForTranscript(value: boolean);
|
|
66
|
+
/**
|
|
67
|
+
* Ready the strategy to detect the end of the turn now starting.
|
|
68
|
+
*
|
|
69
|
+
* `_vadUserSpeaking` is deliberately preserved: it reflects the live
|
|
70
|
+
* physical VAD state, not turn-scoped bookkeeping. VAD only re-emits a
|
|
71
|
+
* start after a stop, so clearing the flag for a turn that begins while
|
|
72
|
+
* the user is still speaking would leave the strategy with no active VAD
|
|
73
|
+
* reference, treating any transcript as a standalone utterance.
|
|
74
|
+
*/
|
|
75
|
+
handleUserTurnStarted(): Promise<void>;
|
|
76
|
+
/** Clear per-turn state once the turn has ended. */
|
|
77
|
+
handleUserTurnStopped(): Promise<void>;
|
|
78
|
+
/** Clear per-turn state, optionally resetting the live VAD flag. */
|
|
79
|
+
protected _reset(options: {
|
|
80
|
+
clearVadUserSpeaking: boolean;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Drop whatever progress toward an end-of-turn has been made so far.
|
|
84
|
+
*
|
|
85
|
+
* Runs at a turn boundary, and whenever VAD reports the user speaking
|
|
86
|
+
* again — which makes earlier progress stale mid-turn.
|
|
87
|
+
*/
|
|
88
|
+
protected _discardPendingEndOfTurn(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Set up the strategy.
|
|
91
|
+
*
|
|
92
|
+
* @param setup Configuration object containing setup parameters.
|
|
93
|
+
*/
|
|
94
|
+
setup(setup: FrameProcessorSetup): Promise<void>;
|
|
95
|
+
/** Cleanup the strategy. */
|
|
96
|
+
cleanup(): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Process an incoming frame to update strategy state.
|
|
99
|
+
*
|
|
100
|
+
* Updates internal transcription text and VAD state. The user end turn
|
|
101
|
+
* will be triggered when appropriate based on the collected frames.
|
|
102
|
+
*
|
|
103
|
+
* @param frame The frame to be analyzed.
|
|
104
|
+
* @returns Always returns CONTINUE so subsequent stop strategies are evaluated.
|
|
105
|
+
*/
|
|
106
|
+
processFrame(frame: Frame): Promise<ProcessFrameResult>;
|
|
107
|
+
/** Handle when the VAD indicates the user is speaking. */
|
|
108
|
+
protected _handleVadUserStartedSpeaking(_frame: VADUserStartedSpeakingFrame): Promise<void>;
|
|
109
|
+
/** Handle when the VAD indicates the user has stopped speaking. */
|
|
110
|
+
protected _handleVadUserStoppedSpeaking(frame: VADUserStoppedSpeakingFrame): Promise<void>;
|
|
111
|
+
/** Handle user transcription. */
|
|
112
|
+
protected _handleTranscription(frame: TranscriptionFrame): Promise<void>;
|
|
113
|
+
/** Cancel any running user-speech timer and start a fresh one. */
|
|
114
|
+
protected _restartUserSpeechTimer(): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Wait userSpeechTimeout then attempt to trigger user turn stopped.
|
|
117
|
+
*
|
|
118
|
+
* @param timeout The timeout in seconds to wait.
|
|
119
|
+
*/
|
|
120
|
+
protected _userSpeechTimeoutHandler(timeout: number): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Wait sttTimeout then attempt to trigger user turn stopped.
|
|
123
|
+
*
|
|
124
|
+
* @param timeout The timeout in seconds to wait.
|
|
125
|
+
*/
|
|
126
|
+
protected _sttTimeoutHandler(timeout: number): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Trigger user turn stopped if all required conditions are met.
|
|
129
|
+
*
|
|
130
|
+
* Both timers must be done (stt is marked done immediately on the
|
|
131
|
+
* fallback path and when finalization short-circuits the safety net),
|
|
132
|
+
* the user must not be currently speaking, and — when
|
|
133
|
+
* `waitForTranscript` is true — at least one transcript must have been
|
|
134
|
+
* received.
|
|
135
|
+
*/
|
|
136
|
+
protected _maybeTriggerUserTurnStopped(): Promise<void>;
|
|
137
|
+
/** Cancel any running timer tasks and clear the handles. */
|
|
138
|
+
protected _cancelAllTasks(): Promise<void>;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=speech_timeout_user_turn_stop_strategy.d.ts.map
|