@pipedog/core 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/soxr_resampler.d.ts +54 -0
- package/dist/audio/resamplers/soxr_resampler.js +69 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +146 -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 +143 -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 +126 -0
- package/dist/audio/vad/vad_analyzer.js +211 -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 +814 -0
- package/dist/pipeline/worker.js +1639 -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 +99 -0
- package/dist/utils/file_storage.js +100 -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 +15 -0
- package/dist/utils/image.js +30 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -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/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +111 -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 +95 -0
- package/dist/utils/tracing/setup.js +110 -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 +90 -0
- package/dist/utils/tracing/turn_trace_observer.js +219 -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 +64 -0
- package/dist/utils/yaml.js +41 -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/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 +46 -3
- package/README.md +0 -5
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronized parallel pipeline that holds output until all branches finish.
|
|
3
|
+
*
|
|
4
|
+
* A SyncParallelPipeline fans each inbound frame out to multiple parallel
|
|
5
|
+
* pipelines and waits for every pipeline to finish processing before releasing
|
|
6
|
+
* any of the resulting output frames. This ensures that all frames produced in
|
|
7
|
+
* response to a single input frame are emitted together.
|
|
8
|
+
*
|
|
9
|
+
* System frames (except EndFrame) are exempt from this synchronization — they
|
|
10
|
+
* pass straight through without waiting, since they are expected to race
|
|
11
|
+
* ahead of regular data frames.
|
|
12
|
+
*/
|
|
13
|
+
import { Queue } from "@pipedog/asyncio";
|
|
14
|
+
import { ControlFrame, type Frame, StartFrame } from "../frames/frames.ts";
|
|
15
|
+
import { FrameDirection, FrameProcessor, type FrameProcessorSetup } from "../processors/frame_processor.ts";
|
|
16
|
+
import { BasePipeline } from "./base_pipeline.ts";
|
|
17
|
+
import { Pipeline } from "./pipeline.ts";
|
|
18
|
+
/**
|
|
19
|
+
* Controls the order in which synchronized frames are pushed downstream.
|
|
20
|
+
*
|
|
21
|
+
* When multiple parallel pipelines produce output for the same input frame,
|
|
22
|
+
* this setting determines the order in which those output frames are pushed.
|
|
23
|
+
*
|
|
24
|
+
* - ARRIVAL: frames are pushed in the order they arrive from any pipeline.
|
|
25
|
+
* This is the default and matches the behavior of prior versions.
|
|
26
|
+
* - PIPELINE: frames are pushed in pipeline definition order — all frames from
|
|
27
|
+
* the first pipeline are pushed, then all frames from the second pipeline,
|
|
28
|
+
* and so on. Useful when the relative ordering between pipelines matters
|
|
29
|
+
* (e.g. ensuring image frames precede audio frames).
|
|
30
|
+
*/
|
|
31
|
+
export declare const FrameOrder: {
|
|
32
|
+
readonly ARRIVAL: "arrival";
|
|
33
|
+
readonly PIPELINE: "pipeline";
|
|
34
|
+
};
|
|
35
|
+
export type FrameOrder = (typeof FrameOrder)[keyof typeof FrameOrder];
|
|
36
|
+
/**
|
|
37
|
+
* Sentinel frame used to detect when a parallel pipeline has finished processing.
|
|
38
|
+
*
|
|
39
|
+
* After sending a real frame into a parallel pipeline, a SyncFrame is sent
|
|
40
|
+
* behind it. When the SyncFrame emerges from the pipeline's output, we know
|
|
41
|
+
* all output frames for the preceding input have been produced.
|
|
42
|
+
*/
|
|
43
|
+
export declare class SyncFrame extends ControlFrame {
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Bookend processor placed at the start of each parallel pipeline.
|
|
47
|
+
*
|
|
48
|
+
* Forwards downstream frames into the pipeline and captures upstream frames
|
|
49
|
+
* into a queue so the parent SyncParallelPipeline can release them later.
|
|
50
|
+
*/
|
|
51
|
+
export declare class SyncParallelPipelineSource extends FrameProcessor {
|
|
52
|
+
protected _upQueue: Queue<Frame>;
|
|
53
|
+
/**
|
|
54
|
+
* Initialize the sync parallel pipeline source.
|
|
55
|
+
*
|
|
56
|
+
* @param upstreamQueue Queue for collecting upstream frames from the pipeline.
|
|
57
|
+
*/
|
|
58
|
+
constructor(upstreamQueue: Queue<Frame>);
|
|
59
|
+
/**
|
|
60
|
+
* Process frames and route them based on direction.
|
|
61
|
+
*
|
|
62
|
+
* @param frame The frame to process.
|
|
63
|
+
* @param direction The direction of frame flow.
|
|
64
|
+
*/
|
|
65
|
+
processFrame(frame: Frame, direction: FrameDirection): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Bookend processor placed at the end of each parallel pipeline.
|
|
69
|
+
*
|
|
70
|
+
* Captures downstream output frames into a queue so the parent
|
|
71
|
+
* SyncParallelPipeline can release them later, and forwards upstream frames
|
|
72
|
+
* back through the pipeline.
|
|
73
|
+
*/
|
|
74
|
+
export declare class SyncParallelPipelineSink extends FrameProcessor {
|
|
75
|
+
protected _downQueue: Queue<Frame>;
|
|
76
|
+
/**
|
|
77
|
+
* Initialize the sync parallel pipeline sink.
|
|
78
|
+
*
|
|
79
|
+
* @param downstreamQueue Queue for collecting downstream frames from the pipeline.
|
|
80
|
+
*/
|
|
81
|
+
constructor(downstreamQueue: Queue<Frame>);
|
|
82
|
+
/**
|
|
83
|
+
* Process frames and route them based on direction.
|
|
84
|
+
*
|
|
85
|
+
* @param frame The frame to process.
|
|
86
|
+
* @param direction The direction of frame flow.
|
|
87
|
+
*/
|
|
88
|
+
processFrame(frame: Frame, direction: FrameDirection): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
/** A bookend processor and the queue its pipeline's output lands in. */
|
|
91
|
+
interface Bookend {
|
|
92
|
+
processor: FrameProcessor;
|
|
93
|
+
queue: Queue<Frame>;
|
|
94
|
+
}
|
|
95
|
+
export interface SyncParallelPipelineOptions {
|
|
96
|
+
/**
|
|
97
|
+
* Controls the order in which synchronized output frames are pushed.
|
|
98
|
+
* `FrameOrder.ARRIVAL` (default) pushes frames in the order they arrive.
|
|
99
|
+
* `FrameOrder.PIPELINE` pushes all frames from the first pipeline before the
|
|
100
|
+
* second, and so on.
|
|
101
|
+
*/
|
|
102
|
+
frameOrder?: FrameOrder;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Fans each input frame to parallel pipelines then holds output until every
|
|
106
|
+
* pipeline finishes.
|
|
107
|
+
*
|
|
108
|
+
* For each inbound frame the pipeline:
|
|
109
|
+
*
|
|
110
|
+
* 1. Sends the frame into every parallel pipeline.
|
|
111
|
+
* 2. Sends a `SyncFrame` sentinel behind it in each pipeline.
|
|
112
|
+
* 3. Waits until every pipeline has produced its `SyncFrame`, meaning all
|
|
113
|
+
* output for that input is ready.
|
|
114
|
+
* 4. Releases the collected output frames (deduplicating by frame id, since
|
|
115
|
+
* the same frame may emerge from more than one branch).
|
|
116
|
+
*
|
|
117
|
+
* System frames (except `EndFrame`) bypass this mechanism entirely — they are
|
|
118
|
+
* forwarded through each pipeline and pushed immediately, since system frames
|
|
119
|
+
* are expected to race ahead of regular data frames.
|
|
120
|
+
*
|
|
121
|
+
* By default, output frames are pushed in the order they arrive from any
|
|
122
|
+
* pipeline (`FrameOrder.ARRIVAL`). Set `frameOrder: FrameOrder.PIPELINE` to
|
|
123
|
+
* push frames in pipeline definition order instead — all output from the
|
|
124
|
+
* first pipeline, then the second, and so on.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* new SyncParallelPipeline([imageGen], [tts], { frameOrder: FrameOrder.PIPELINE });
|
|
128
|
+
*/
|
|
129
|
+
export declare class SyncParallelPipeline extends BasePipeline {
|
|
130
|
+
protected _frameOrder: FrameOrder;
|
|
131
|
+
protected _sinks: Bookend[];
|
|
132
|
+
protected _sources: Bookend[];
|
|
133
|
+
protected _pipelines: Pipeline[];
|
|
134
|
+
protected _upQueue: Queue<Frame>;
|
|
135
|
+
protected _downQueue: Queue<Frame>;
|
|
136
|
+
/**
|
|
137
|
+
* Initialize the synchronous parallel pipeline.
|
|
138
|
+
*
|
|
139
|
+
* @param args Variable number of processor lists, each representing a
|
|
140
|
+
* parallel pipeline path, optionally followed by an options object.
|
|
141
|
+
* @throws Error If no arguments are provided.
|
|
142
|
+
* @throws TypeError If any argument is not a list of processors.
|
|
143
|
+
*/
|
|
144
|
+
constructor(...args: [...FrameProcessor[][], SyncParallelPipelineOptions] | FrameProcessor[][]);
|
|
145
|
+
/**
|
|
146
|
+
* The list of sub-processors contained within this processor.
|
|
147
|
+
*
|
|
148
|
+
* Only compound processors (e.g. pipelines and parallel pipelines) have
|
|
149
|
+
* sub-processors. Non-compound processors will return an empty list.
|
|
150
|
+
*/
|
|
151
|
+
get processors(): FrameProcessor[];
|
|
152
|
+
/**
|
|
153
|
+
* The list of entry processors for this processor.
|
|
154
|
+
*
|
|
155
|
+
* Entry processors are the first processors in a compound processor (e.g.
|
|
156
|
+
* pipelines, parallel pipelines). Note that pipelines can also be an entry
|
|
157
|
+
* processor as pipelines are processors themselves. Non-compound processors
|
|
158
|
+
* will simply return an empty list.
|
|
159
|
+
*/
|
|
160
|
+
get entryProcessors(): FrameProcessor[];
|
|
161
|
+
/**
|
|
162
|
+
* Collect processors that can generate metrics from all parallel pipelines.
|
|
163
|
+
*
|
|
164
|
+
* @returns Frame processors that support metrics collection from all parallel paths.
|
|
165
|
+
*/
|
|
166
|
+
processorsWithMetrics(): FrameProcessor[];
|
|
167
|
+
/**
|
|
168
|
+
* Set up the parallel pipeline and all contained processors.
|
|
169
|
+
*
|
|
170
|
+
* @param setup Configuration for frame processor setup.
|
|
171
|
+
*/
|
|
172
|
+
setup(setup: FrameProcessorSetup): Promise<void>;
|
|
173
|
+
/** Clean up the parallel pipeline and all contained processors. */
|
|
174
|
+
cleanup(): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Send a frame through all parallel pipelines and release output once all finish.
|
|
177
|
+
*
|
|
178
|
+
* System frames (except EndFrame) skip synchronization and pass straight
|
|
179
|
+
* through. All other frames are fanned out to every pipeline, and output is
|
|
180
|
+
* held until every pipeline signals completion (via SyncFrame).
|
|
181
|
+
*
|
|
182
|
+
* @param frame The frame to process.
|
|
183
|
+
* @param direction The direction of frame flow.
|
|
184
|
+
*/
|
|
185
|
+
processFrame(frame: Frame, direction: FrameDirection): Promise<void>;
|
|
186
|
+
/** Start every pipeline, then pass the StartFrame on once it is through all of them. */
|
|
187
|
+
protected _startPipelines(frame: StartFrame): Promise<void>;
|
|
188
|
+
/** Push the StartFrame into a pipeline and wait for it to come out of the pipeline's sink. */
|
|
189
|
+
protected _startPipeline(pipeline: Pipeline, queue: Queue<Frame>, frame: StartFrame): Promise<void>;
|
|
190
|
+
}
|
|
191
|
+
export {};
|
|
192
|
+
//# sourceMappingURL=sync_parallel_pipeline.d.ts.map
|
|
@@ -0,0 +1,387 @@
|
|
|
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/pipeline/sync_parallel_pipeline.py
|
|
6
|
+
/**
|
|
7
|
+
* Synchronized parallel pipeline that holds output until all branches finish.
|
|
8
|
+
*
|
|
9
|
+
* A SyncParallelPipeline fans each inbound frame out to multiple parallel
|
|
10
|
+
* pipelines and waits for every pipeline to finish processing before releasing
|
|
11
|
+
* any of the resulting output frames. This ensures that all frames produced in
|
|
12
|
+
* response to a single input frame are emitted together.
|
|
13
|
+
*
|
|
14
|
+
* System frames (except EndFrame) are exempt from this synchronization — they
|
|
15
|
+
* pass straight through without waiting, since they are expected to race
|
|
16
|
+
* ahead of regular data frames.
|
|
17
|
+
*/
|
|
18
|
+
import { gather, Queue } from "@pipedog/asyncio";
|
|
19
|
+
import { ControlFrame, EndFrame, StartFrame, SystemFrame } from "../frames/frames.js";
|
|
20
|
+
import { FrameDirection, FrameProcessor, } from "../processors/frame_processor.js";
|
|
21
|
+
import { logger } from "../utils/logger.js";
|
|
22
|
+
import { BasePipeline } from "./base_pipeline.js";
|
|
23
|
+
import { Pipeline } from "./pipeline.js";
|
|
24
|
+
/**
|
|
25
|
+
* Controls the order in which synchronized frames are pushed downstream.
|
|
26
|
+
*
|
|
27
|
+
* When multiple parallel pipelines produce output for the same input frame,
|
|
28
|
+
* this setting determines the order in which those output frames are pushed.
|
|
29
|
+
*
|
|
30
|
+
* - ARRIVAL: frames are pushed in the order they arrive from any pipeline.
|
|
31
|
+
* This is the default and matches the behavior of prior versions.
|
|
32
|
+
* - PIPELINE: frames are pushed in pipeline definition order — all frames from
|
|
33
|
+
* the first pipeline are pushed, then all frames from the second pipeline,
|
|
34
|
+
* and so on. Useful when the relative ordering between pipelines matters
|
|
35
|
+
* (e.g. ensuring image frames precede audio frames).
|
|
36
|
+
*/
|
|
37
|
+
export const FrameOrder = {
|
|
38
|
+
ARRIVAL: "arrival",
|
|
39
|
+
PIPELINE: "pipeline",
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Sentinel frame used to detect when a parallel pipeline has finished processing.
|
|
43
|
+
*
|
|
44
|
+
* After sending a real frame into a parallel pipeline, a SyncFrame is sent
|
|
45
|
+
* behind it. When the SyncFrame emerges from the pipeline's output, we know
|
|
46
|
+
* all output frames for the preceding input have been produced.
|
|
47
|
+
*/
|
|
48
|
+
export class SyncFrame extends ControlFrame {
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Bookend processor placed at the start of each parallel pipeline.
|
|
52
|
+
*
|
|
53
|
+
* Forwards downstream frames into the pipeline and captures upstream frames
|
|
54
|
+
* into a queue so the parent SyncParallelPipeline can release them later.
|
|
55
|
+
*/
|
|
56
|
+
export class SyncParallelPipelineSource extends FrameProcessor {
|
|
57
|
+
_upQueue;
|
|
58
|
+
/**
|
|
59
|
+
* Initialize the sync parallel pipeline source.
|
|
60
|
+
*
|
|
61
|
+
* @param upstreamQueue Queue for collecting upstream frames from the pipeline.
|
|
62
|
+
*/
|
|
63
|
+
constructor(upstreamQueue) {
|
|
64
|
+
super({ enableDirectMode: true });
|
|
65
|
+
this._upQueue = upstreamQueue;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Process frames and route them based on direction.
|
|
69
|
+
*
|
|
70
|
+
* @param frame The frame to process.
|
|
71
|
+
* @param direction The direction of frame flow.
|
|
72
|
+
*/
|
|
73
|
+
async processFrame(frame, direction) {
|
|
74
|
+
await super.processFrame(frame, direction);
|
|
75
|
+
switch (direction) {
|
|
76
|
+
case FrameDirection.UPSTREAM:
|
|
77
|
+
await this._upQueue.put(frame);
|
|
78
|
+
break;
|
|
79
|
+
case FrameDirection.DOWNSTREAM:
|
|
80
|
+
await this.pushFrame(frame, direction);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Bookend processor placed at the end of each parallel pipeline.
|
|
87
|
+
*
|
|
88
|
+
* Captures downstream output frames into a queue so the parent
|
|
89
|
+
* SyncParallelPipeline can release them later, and forwards upstream frames
|
|
90
|
+
* back through the pipeline.
|
|
91
|
+
*/
|
|
92
|
+
export class SyncParallelPipelineSink extends FrameProcessor {
|
|
93
|
+
_downQueue;
|
|
94
|
+
/**
|
|
95
|
+
* Initialize the sync parallel pipeline sink.
|
|
96
|
+
*
|
|
97
|
+
* @param downstreamQueue Queue for collecting downstream frames from the pipeline.
|
|
98
|
+
*/
|
|
99
|
+
constructor(downstreamQueue) {
|
|
100
|
+
super({ enableDirectMode: true });
|
|
101
|
+
this._downQueue = downstreamQueue;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Process frames and route them based on direction.
|
|
105
|
+
*
|
|
106
|
+
* @param frame The frame to process.
|
|
107
|
+
* @param direction The direction of frame flow.
|
|
108
|
+
*/
|
|
109
|
+
async processFrame(frame, direction) {
|
|
110
|
+
await super.processFrame(frame, direction);
|
|
111
|
+
switch (direction) {
|
|
112
|
+
case FrameDirection.UPSTREAM:
|
|
113
|
+
await this.pushFrame(frame, direction);
|
|
114
|
+
break;
|
|
115
|
+
case FrameDirection.DOWNSTREAM:
|
|
116
|
+
await this._downQueue.put(frame);
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Fans each input frame to parallel pipelines then holds output until every
|
|
123
|
+
* pipeline finishes.
|
|
124
|
+
*
|
|
125
|
+
* For each inbound frame the pipeline:
|
|
126
|
+
*
|
|
127
|
+
* 1. Sends the frame into every parallel pipeline.
|
|
128
|
+
* 2. Sends a `SyncFrame` sentinel behind it in each pipeline.
|
|
129
|
+
* 3. Waits until every pipeline has produced its `SyncFrame`, meaning all
|
|
130
|
+
* output for that input is ready.
|
|
131
|
+
* 4. Releases the collected output frames (deduplicating by frame id, since
|
|
132
|
+
* the same frame may emerge from more than one branch).
|
|
133
|
+
*
|
|
134
|
+
* System frames (except `EndFrame`) bypass this mechanism entirely — they are
|
|
135
|
+
* forwarded through each pipeline and pushed immediately, since system frames
|
|
136
|
+
* are expected to race ahead of regular data frames.
|
|
137
|
+
*
|
|
138
|
+
* By default, output frames are pushed in the order they arrive from any
|
|
139
|
+
* pipeline (`FrameOrder.ARRIVAL`). Set `frameOrder: FrameOrder.PIPELINE` to
|
|
140
|
+
* push frames in pipeline definition order instead — all output from the
|
|
141
|
+
* first pipeline, then the second, and so on.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* new SyncParallelPipeline([imageGen], [tts], { frameOrder: FrameOrder.PIPELINE });
|
|
145
|
+
*/
|
|
146
|
+
export class SyncParallelPipeline extends BasePipeline {
|
|
147
|
+
_frameOrder;
|
|
148
|
+
_sinks = [];
|
|
149
|
+
_sources = [];
|
|
150
|
+
_pipelines = [];
|
|
151
|
+
_upQueue = new Queue();
|
|
152
|
+
_downQueue = new Queue();
|
|
153
|
+
/**
|
|
154
|
+
* Initialize the synchronous parallel pipeline.
|
|
155
|
+
*
|
|
156
|
+
* @param args Variable number of processor lists, each representing a
|
|
157
|
+
* parallel pipeline path, optionally followed by an options object.
|
|
158
|
+
* @throws Error If no arguments are provided.
|
|
159
|
+
* @throws TypeError If any argument is not a list of processors.
|
|
160
|
+
*/
|
|
161
|
+
constructor(...args) {
|
|
162
|
+
super();
|
|
163
|
+
let options = {};
|
|
164
|
+
let lists = args;
|
|
165
|
+
const last = args[args.length - 1];
|
|
166
|
+
if (last !== undefined && !Array.isArray(last)) {
|
|
167
|
+
options = last;
|
|
168
|
+
lists = args.slice(0, -1);
|
|
169
|
+
}
|
|
170
|
+
this._frameOrder = options.frameOrder ?? FrameOrder.ARRIVAL;
|
|
171
|
+
if (lists.length === 0) {
|
|
172
|
+
throw new Error("SyncParallelPipeline needs at least one argument");
|
|
173
|
+
}
|
|
174
|
+
logger.debug(`Creating ${this} pipelines`);
|
|
175
|
+
for (const processors of lists) {
|
|
176
|
+
if (!Array.isArray(processors)) {
|
|
177
|
+
throw new TypeError(`SyncParallelPipeline argument ${processors} is not a list`);
|
|
178
|
+
}
|
|
179
|
+
// We add a source at the beginning of the pipeline and a sink at the end.
|
|
180
|
+
const upQueue = new Queue();
|
|
181
|
+
const downQueue = new Queue();
|
|
182
|
+
const source = new SyncParallelPipelineSource(upQueue);
|
|
183
|
+
const sink = new SyncParallelPipelineSink(downQueue);
|
|
184
|
+
// Keep track of sources and sinks. We also keep the output queue of the
|
|
185
|
+
// source and the sinks so we can use it later.
|
|
186
|
+
this._sources.push({ processor: source, queue: downQueue });
|
|
187
|
+
this._sinks.push({ processor: sink, queue: upQueue });
|
|
188
|
+
// Create pipeline
|
|
189
|
+
const pipeline = new Pipeline(processors, { source, sink });
|
|
190
|
+
this._pipelines.push(pipeline);
|
|
191
|
+
}
|
|
192
|
+
logger.debug(`Finished creating ${this} pipelines`);
|
|
193
|
+
}
|
|
194
|
+
//
|
|
195
|
+
// Frame processor
|
|
196
|
+
//
|
|
197
|
+
/**
|
|
198
|
+
* The list of sub-processors contained within this processor.
|
|
199
|
+
*
|
|
200
|
+
* Only compound processors (e.g. pipelines and parallel pipelines) have
|
|
201
|
+
* sub-processors. Non-compound processors will return an empty list.
|
|
202
|
+
*/
|
|
203
|
+
get processors() {
|
|
204
|
+
return this._pipelines;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The list of entry processors for this processor.
|
|
208
|
+
*
|
|
209
|
+
* Entry processors are the first processors in a compound processor (e.g.
|
|
210
|
+
* pipelines, parallel pipelines). Note that pipelines can also be an entry
|
|
211
|
+
* processor as pipelines are processors themselves. Non-compound processors
|
|
212
|
+
* will simply return an empty list.
|
|
213
|
+
*/
|
|
214
|
+
get entryProcessors() {
|
|
215
|
+
return this._sources.map((s) => s.processor);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Collect processors that can generate metrics from all parallel pipelines.
|
|
219
|
+
*
|
|
220
|
+
* @returns Frame processors that support metrics collection from all parallel paths.
|
|
221
|
+
*/
|
|
222
|
+
processorsWithMetrics() {
|
|
223
|
+
return this._pipelines.flatMap((p) => p.processorsWithMetrics());
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Set up the parallel pipeline and all contained processors.
|
|
227
|
+
*
|
|
228
|
+
* @param setup Configuration for frame processor setup.
|
|
229
|
+
*/
|
|
230
|
+
async setup(setup) {
|
|
231
|
+
await super.setup(setup);
|
|
232
|
+
// This pipeline is set up, so let the StartFrame in: each branch holds it
|
|
233
|
+
// until its own setup is done.
|
|
234
|
+
this._setupFinished();
|
|
235
|
+
await this._setupProcessors(this._pipelines, setup);
|
|
236
|
+
}
|
|
237
|
+
/** Clean up the parallel pipeline and all contained processors. */
|
|
238
|
+
async cleanup() {
|
|
239
|
+
await super.cleanup();
|
|
240
|
+
await this._cleanupProcessors(this._pipelines);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Send a frame through all parallel pipelines and release output once all finish.
|
|
244
|
+
*
|
|
245
|
+
* System frames (except EndFrame) skip synchronization and pass straight
|
|
246
|
+
* through. All other frames are fanned out to every pipeline, and output is
|
|
247
|
+
* held until every pipeline signals completion (via SyncFrame).
|
|
248
|
+
*
|
|
249
|
+
* @param frame The frame to process.
|
|
250
|
+
* @param direction The direction of frame flow.
|
|
251
|
+
*/
|
|
252
|
+
async processFrame(frame, direction) {
|
|
253
|
+
await super.processFrame(frame, direction);
|
|
254
|
+
if (frame instanceof StartFrame && direction === FrameDirection.DOWNSTREAM) {
|
|
255
|
+
await this._startPipelines(frame);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// SystemFrames are simply passed through all internal pipelines without
|
|
259
|
+
// draining queued output. This avoids the race condition where a
|
|
260
|
+
// SystemFrame's waitForSync steals frames from a concurrent
|
|
261
|
+
// non-SystemFrame's waitForSync.
|
|
262
|
+
if (frame instanceof SystemFrame) {
|
|
263
|
+
if (direction === FrameDirection.UPSTREAM) {
|
|
264
|
+
for (const s of this._sinks) {
|
|
265
|
+
await s.processor.processFrame(frame, direction);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if (direction === FrameDirection.DOWNSTREAM) {
|
|
269
|
+
for (const s of this._sources) {
|
|
270
|
+
await s.processor.processFrame(frame, direction);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
await this.pushFrame(frame, direction);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const usePipelineOrder = this._frameOrder === FrameOrder.PIPELINE;
|
|
277
|
+
// The last processor of each pipeline needs to be synchronous otherwise
|
|
278
|
+
// this element won't work. Since we know it should be synchronous we push
|
|
279
|
+
// a SyncFrame. Since frames are ordered we know this frame will be pushed
|
|
280
|
+
// after the synchronous processor has pushed its data allowing us to
|
|
281
|
+
// synchronize all the internal pipelines by waiting for the SyncFrame in
|
|
282
|
+
// all of them.
|
|
283
|
+
//
|
|
284
|
+
// In ARRIVAL mode, output frames are put onto a shared mainQueue as they
|
|
285
|
+
// arrive. In PIPELINE mode, they are accumulated in a per-pipeline list
|
|
286
|
+
// and returned so the caller can drain them in definition order.
|
|
287
|
+
const waitForSync = async (obj, mainQueue, frame, direction) => {
|
|
288
|
+
const processor = obj.processor;
|
|
289
|
+
const queue = obj.queue;
|
|
290
|
+
const outputFrames = [];
|
|
291
|
+
await processor.processFrame(frame, direction);
|
|
292
|
+
if (frame instanceof EndFrame) {
|
|
293
|
+
let newFrame = await queue.get();
|
|
294
|
+
if (newFrame instanceof EndFrame) {
|
|
295
|
+
if (usePipelineOrder) {
|
|
296
|
+
outputFrames.push(newFrame);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
await mainQueue.put(newFrame);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
while (!(newFrame instanceof EndFrame)) {
|
|
304
|
+
if (usePipelineOrder) {
|
|
305
|
+
outputFrames.push(newFrame);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
await mainQueue.put(newFrame);
|
|
309
|
+
}
|
|
310
|
+
queue.taskDone();
|
|
311
|
+
newFrame = await queue.get();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
await processor.processFrame(new SyncFrame(), direction);
|
|
317
|
+
let newFrame = await queue.get();
|
|
318
|
+
while (!(newFrame instanceof SyncFrame)) {
|
|
319
|
+
if (usePipelineOrder) {
|
|
320
|
+
outputFrames.push(newFrame);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
await mainQueue.put(newFrame);
|
|
324
|
+
}
|
|
325
|
+
queue.taskDone();
|
|
326
|
+
newFrame = await queue.get();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return outputFrames;
|
|
330
|
+
};
|
|
331
|
+
let framesPerPipeline = [];
|
|
332
|
+
if (direction === FrameDirection.UPSTREAM) {
|
|
333
|
+
// If we get an upstream frame we process it in each sink.
|
|
334
|
+
framesPerPipeline = (await gather(...this._sinks.map((s) => () => waitForSync(s, this._upQueue, frame, direction))));
|
|
335
|
+
}
|
|
336
|
+
else if (direction === FrameDirection.DOWNSTREAM) {
|
|
337
|
+
// If we get a downstream frame we process it in each source.
|
|
338
|
+
framesPerPipeline = (await gather(...this._sources.map((s) => () => waitForSync(s, this._downQueue, frame, direction))));
|
|
339
|
+
}
|
|
340
|
+
if (usePipelineOrder) {
|
|
341
|
+
// Push frames in pipeline definition order, deduplicating by id.
|
|
342
|
+
const seenIds = new Set();
|
|
343
|
+
for (const pipelineFrames of framesPerPipeline) {
|
|
344
|
+
for (const f of pipelineFrames) {
|
|
345
|
+
if (!seenIds.has(f.id)) {
|
|
346
|
+
await this.pushFrame(f, direction);
|
|
347
|
+
seenIds.add(f.id);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
// ARRIVAL mode: drain the shared queues in the order frames arrived.
|
|
354
|
+
let seenIds = new Set();
|
|
355
|
+
while (!this._upQueue.empty()) {
|
|
356
|
+
const f = await this._upQueue.get();
|
|
357
|
+
if (!seenIds.has(f.id)) {
|
|
358
|
+
await this.pushFrame(f, FrameDirection.UPSTREAM);
|
|
359
|
+
seenIds.add(f.id);
|
|
360
|
+
}
|
|
361
|
+
this._upQueue.taskDone();
|
|
362
|
+
}
|
|
363
|
+
seenIds = new Set();
|
|
364
|
+
while (!this._downQueue.empty()) {
|
|
365
|
+
const f = await this._downQueue.get();
|
|
366
|
+
if (!seenIds.has(f.id)) {
|
|
367
|
+
await this.pushFrame(f, FrameDirection.DOWNSTREAM);
|
|
368
|
+
seenIds.add(f.id);
|
|
369
|
+
}
|
|
370
|
+
this._downQueue.taskDone();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/** Start every pipeline, then pass the StartFrame on once it is through all of them. */
|
|
375
|
+
async _startPipelines(frame) {
|
|
376
|
+
await gather(...this._pipelines.map((pipeline, i) => () => this._startPipeline(pipeline, this._sources[i].queue, frame)));
|
|
377
|
+
await this.pushFrame(frame);
|
|
378
|
+
}
|
|
379
|
+
/** Push the StartFrame into a pipeline and wait for it to come out of the pipeline's sink. */
|
|
380
|
+
async _startPipeline(pipeline, queue, frame) {
|
|
381
|
+
// Into the pipeline rather than straight to its source, so the pipeline
|
|
382
|
+
// and each of its processors hold it until they are set up.
|
|
383
|
+
await pipeline.queueFrame(frame);
|
|
384
|
+
await queue.get();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=sync_parallel_pipeline.js.map
|