@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,6 @@
|
|
|
1
|
+
/** LLM worker package -- `LLMWorker`, `LLMContextWorker`, `BackendLLMWorker`, and the `tool` decorator. */
|
|
2
|
+
export { BackendLLMWorker, BackendOutput } from "./backend_llm_worker.ts";
|
|
3
|
+
export { LLMContextWorker } from "./llm_context_worker.ts";
|
|
4
|
+
export { LLMWorker, LLMWorkerActivationArgs } from "./llm_worker.ts";
|
|
5
|
+
export { tool } from "./tool_decorator.ts";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
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/workers/llm/__init__.py
|
|
6
|
+
/** LLM worker package -- `LLMWorker`, `LLMContextWorker`, `BackendLLMWorker`, and the `tool` decorator. */
|
|
7
|
+
export { BackendLLMWorker, BackendOutput } from "./backend_llm_worker.js";
|
|
8
|
+
export { LLMContextWorker } from "./llm_context_worker.js";
|
|
9
|
+
export { LLMWorker, LLMWorkerActivationArgs } from "./llm_worker.js";
|
|
10
|
+
export { tool } from "./tool_decorator.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { LLMContext } from "../../processors/aggregators/llm_context.ts";
|
|
2
|
+
import { type LLMAssistantAggregator, type LLMAssistantAggregatorParams, LLMContextAggregatorPair, type LLMUserAggregator, type LLMUserAggregatorParams } from "../../processors/aggregators/llm_response_universal.ts";
|
|
3
|
+
import type { LLMService } from "../../services/llm_service.ts";
|
|
4
|
+
import { LLMWorker } from "./llm_worker.ts";
|
|
5
|
+
export interface LLMContextWorkerOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Unique name for this worker on the bus. Auto-generated when omitted; give
|
|
8
|
+
* one when other workers address this one by name, as they must when it
|
|
9
|
+
* runs in another process.
|
|
10
|
+
*/
|
|
11
|
+
name?: string | null;
|
|
12
|
+
/** The LLM service. */
|
|
13
|
+
llm: LLMService;
|
|
14
|
+
/** Whether the worker starts active. Defaults to false. */
|
|
15
|
+
active?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Bridge configuration forwarded to `PipelineWorker`. Pass `[]` to wrap the
|
|
18
|
+
* pipeline with bus edges so it can exchange frames with another bridged
|
|
19
|
+
* worker.
|
|
20
|
+
*/
|
|
21
|
+
bridged?: readonly string[] | null;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to defer frames queued during tool execution until all tools
|
|
24
|
+
* complete. Defaults to true.
|
|
25
|
+
*/
|
|
26
|
+
deferToolFrames?: boolean;
|
|
27
|
+
/** Optional pre-built `LLMContext`. When omitted, a fresh empty context is created. */
|
|
28
|
+
context?: LLMContext | null;
|
|
29
|
+
/** Optional parameters for the user aggregator. */
|
|
30
|
+
userParams?: LLMUserAggregatorParams | null;
|
|
31
|
+
/** Optional parameters for the assistant aggregator. */
|
|
32
|
+
assistantParams?: LLMAssistantAggregatorParams | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* LLM worker that owns an `LLMContext` and a context aggregator pair.
|
|
36
|
+
*
|
|
37
|
+
* Useful for workers that need to track their own conversation history,
|
|
38
|
+
* typically workers that run their own LLM pipeline outside of a shared
|
|
39
|
+
* transport pipeline. Subclasses do not need to instantiate the context or
|
|
40
|
+
* aggregators themselves; the pipeline is built as
|
|
41
|
+
* `[userAggregator, llm, assistantAggregator]` automatically.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* const worker = new LLMContextWorker({
|
|
45
|
+
* name: "worker",
|
|
46
|
+
* llm: new OpenAILLMService({ ... }),
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* worker.assistantAggregator.addEventHandler(
|
|
50
|
+
* "on_assistant_turn_stopped",
|
|
51
|
+
* async (aggregator, message) => { ... },
|
|
52
|
+
* );
|
|
53
|
+
*/
|
|
54
|
+
export declare class LLMContextWorker extends LLMWorker {
|
|
55
|
+
protected _context: LLMContext;
|
|
56
|
+
protected _aggregators: LLMContextAggregatorPair;
|
|
57
|
+
/** Initialize the LLMContextWorker. */
|
|
58
|
+
constructor(options: LLMContextWorkerOptions);
|
|
59
|
+
/** The `LLMContext` owned by this worker. */
|
|
60
|
+
get context(): LLMContext;
|
|
61
|
+
/** The user-side context aggregator. */
|
|
62
|
+
get userAggregator(): LLMUserAggregator;
|
|
63
|
+
/** The assistant-side context aggregator. */
|
|
64
|
+
get assistantAggregator(): LLMAssistantAggregator;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=llm_context_worker.d.ts.map
|
|
@@ -0,0 +1,72 @@
|
|
|
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/workers/llm/llm_context_worker.py
|
|
6
|
+
/**
|
|
7
|
+
* LLM worker with a built-in `LLMContext` and aggregator pair.
|
|
8
|
+
*
|
|
9
|
+
* Provides the `LLMContextWorker` class that extends `LLMWorker` with a
|
|
10
|
+
* self-contained conversation context, removing the need for subclasses to
|
|
11
|
+
* manually wire `LLMContextAggregatorPair`.
|
|
12
|
+
*/
|
|
13
|
+
import { Pipeline } from "../../pipeline/pipeline.js";
|
|
14
|
+
import { LLMContext } from "../../processors/aggregators/llm_context.js";
|
|
15
|
+
import { LLMContextAggregatorPair, } from "../../processors/aggregators/llm_response_universal.js";
|
|
16
|
+
import { LLMWorker } from "./llm_worker.js";
|
|
17
|
+
/**
|
|
18
|
+
* LLM worker that owns an `LLMContext` and a context aggregator pair.
|
|
19
|
+
*
|
|
20
|
+
* Useful for workers that need to track their own conversation history,
|
|
21
|
+
* typically workers that run their own LLM pipeline outside of a shared
|
|
22
|
+
* transport pipeline. Subclasses do not need to instantiate the context or
|
|
23
|
+
* aggregators themselves; the pipeline is built as
|
|
24
|
+
* `[userAggregator, llm, assistantAggregator]` automatically.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const worker = new LLMContextWorker({
|
|
28
|
+
* name: "worker",
|
|
29
|
+
* llm: new OpenAILLMService({ ... }),
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* worker.assistantAggregator.addEventHandler(
|
|
33
|
+
* "on_assistant_turn_stopped",
|
|
34
|
+
* async (aggregator, message) => { ... },
|
|
35
|
+
* );
|
|
36
|
+
*/
|
|
37
|
+
export class LLMContextWorker extends LLMWorker {
|
|
38
|
+
_context;
|
|
39
|
+
_aggregators;
|
|
40
|
+
/** Initialize the LLMContextWorker. */
|
|
41
|
+
constructor(options) {
|
|
42
|
+
const context = options.context || new LLMContext();
|
|
43
|
+
const aggregators = new LLMContextAggregatorPair(context, {
|
|
44
|
+
userParams: options.userParams ?? null,
|
|
45
|
+
assistantParams: options.assistantParams ?? null,
|
|
46
|
+
});
|
|
47
|
+
const pipeline = new Pipeline([aggregators.user(), options.llm, aggregators.assistant()]);
|
|
48
|
+
super({
|
|
49
|
+
name: options.name ?? null,
|
|
50
|
+
llm: options.llm,
|
|
51
|
+
pipeline,
|
|
52
|
+
active: options.active ?? false,
|
|
53
|
+
bridged: options.bridged ?? null,
|
|
54
|
+
deferToolFrames: options.deferToolFrames ?? true,
|
|
55
|
+
});
|
|
56
|
+
this._context = context;
|
|
57
|
+
this._aggregators = aggregators;
|
|
58
|
+
}
|
|
59
|
+
/** The `LLMContext` owned by this worker. */
|
|
60
|
+
get context() {
|
|
61
|
+
return this._context;
|
|
62
|
+
}
|
|
63
|
+
/** The user-side context aggregator. */
|
|
64
|
+
get userAggregator() {
|
|
65
|
+
return this._aggregators.user();
|
|
66
|
+
}
|
|
67
|
+
/** The assistant-side context aggregator. */
|
|
68
|
+
get assistantAggregator() {
|
|
69
|
+
return this._aggregators.assistant();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=llm_context_worker.js.map
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { type Frame } from "../../frames/frames.ts";
|
|
2
|
+
import { Pipeline } from "../../pipeline/pipeline.ts";
|
|
3
|
+
import { PipelineWorker } from "../../pipeline/worker.ts";
|
|
4
|
+
import type { LLMContextMessage } from "../../processors/aggregators/llm_context.ts";
|
|
5
|
+
import { FrameDirection } from "../../processors/frame_processor.ts";
|
|
6
|
+
import type { FunctionCallParams, LLMService } from "../../services/llm_service.ts";
|
|
7
|
+
import { WorkerActivationArgs, type WorkerActivationArgsOptions } from "../base_worker.ts";
|
|
8
|
+
import { type LLMTool } from "./tool_decorator.ts";
|
|
9
|
+
type Dict = Record<string, unknown>;
|
|
10
|
+
export interface LLMWorkerActivationArgsOptions extends WorkerActivationArgsOptions {
|
|
11
|
+
/** LLM context messages to inject on activation. */
|
|
12
|
+
messages?: LLMContextMessage[] | null;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to run the LLM after appending messages. Defaults to true when
|
|
15
|
+
* `messages` is set.
|
|
16
|
+
*/
|
|
17
|
+
runLlm?: boolean | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Activation arguments for LLM workers.
|
|
21
|
+
*
|
|
22
|
+
* - `messages`: LLM context messages to inject on activation.
|
|
23
|
+
* - `runLlm`: whether to run the LLM after appending messages. Defaults to
|
|
24
|
+
* true when `messages` is set.
|
|
25
|
+
*/
|
|
26
|
+
export declare class LLMWorkerActivationArgs extends WorkerActivationArgs {
|
|
27
|
+
messages: LLMContextMessage[] | null;
|
|
28
|
+
runLlm: boolean | null;
|
|
29
|
+
constructor(options?: LLMWorkerActivationArgsOptions);
|
|
30
|
+
}
|
|
31
|
+
export interface LLMWorkerOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Unique name for this worker on the bus. Auto-generated when omitted; give
|
|
34
|
+
* one when other workers address this one by name, as they must when it
|
|
35
|
+
* runs in another process.
|
|
36
|
+
*/
|
|
37
|
+
name?: string | null;
|
|
38
|
+
/** The LLM service. `tool` decorated methods are automatically registered on it. */
|
|
39
|
+
llm: LLMService;
|
|
40
|
+
/**
|
|
41
|
+
* Optional pipeline override. When null, defaults to `new Pipeline([llm])`.
|
|
42
|
+
* Subclasses can pass a custom pipeline that wraps the LLM with additional
|
|
43
|
+
* processors.
|
|
44
|
+
*/
|
|
45
|
+
pipeline?: Pipeline | null;
|
|
46
|
+
/** Whether the worker starts active. Defaults to false. */
|
|
47
|
+
active?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Bridge configuration forwarded to `PipelineWorker`. Pass `[]` to wrap the
|
|
50
|
+
* LLM pipeline with bus edge processors so it can exchange frames with
|
|
51
|
+
* another bridged worker.
|
|
52
|
+
*/
|
|
53
|
+
bridged?: readonly string[] | null;
|
|
54
|
+
/**
|
|
55
|
+
* Whether to defer frames queued during tool execution until all tools
|
|
56
|
+
* complete. Defaults to true.
|
|
57
|
+
*/
|
|
58
|
+
deferToolFrames?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Worker with an LLM pipeline and automatic tool registration.
|
|
62
|
+
*
|
|
63
|
+
* Methods decorated with `tool` are registered as direct functions on the LLM
|
|
64
|
+
* and tracked so that frames queued during tool execution can be deferred
|
|
65
|
+
* until all tools complete.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* class MyTask extends LLMWorker {
|
|
69
|
+
* async my_function(params: FunctionCallParams, arg: string) { ... }
|
|
70
|
+
* static {
|
|
71
|
+
* tool(this.prototype.my_function);
|
|
72
|
+
* }
|
|
73
|
+
* }
|
|
74
|
+
*
|
|
75
|
+
* const worker = new MyTask({ name: "worker", llm: new OpenAILLMService({ apiKey: "..." }) });
|
|
76
|
+
*/
|
|
77
|
+
export declare class LLMWorker extends PipelineWorker {
|
|
78
|
+
protected _deferToolFrames: boolean;
|
|
79
|
+
protected _toolCallInflight: number;
|
|
80
|
+
protected _deferredFrames: [Frame, FrameDirection][];
|
|
81
|
+
protected _pendingHandover: (() => Promise<void>) | null;
|
|
82
|
+
protected _closing: boolean;
|
|
83
|
+
protected _llm: LLMService;
|
|
84
|
+
/** Initialize the LLMWorker. */
|
|
85
|
+
constructor(options: LLMWorkerOptions);
|
|
86
|
+
/** The LLM service this worker wraps. */
|
|
87
|
+
get llm(): LLMService;
|
|
88
|
+
/** True when one or more `tool` methods are executing. */
|
|
89
|
+
get toolCallActive(): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Configure the LLM with tools and activation messages.
|
|
92
|
+
*
|
|
93
|
+
* @param args Optional activation arguments with messages to append.
|
|
94
|
+
*/
|
|
95
|
+
onActivated(args: Dict | null): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Queue a frame, holding it if a tool handler queued it.
|
|
98
|
+
*
|
|
99
|
+
* A frame queued from inside one of this worker's `tool` handlers, or from
|
|
100
|
+
* anything that handler awaits, is held and delivered once the last tool
|
|
101
|
+
* finishes. Frames from anywhere else are queued immediately: the worker's
|
|
102
|
+
* own traffic and frames arriving over the bus, which run outside any
|
|
103
|
+
* handler's context, and frames a handler on a different worker queues
|
|
104
|
+
* here, which this worker would never release.
|
|
105
|
+
*
|
|
106
|
+
* @param frame Any `Frame` to deliver.
|
|
107
|
+
* @param direction Direction the frame should travel. Defaults to
|
|
108
|
+
* `FrameDirection.DOWNSTREAM`.
|
|
109
|
+
*/
|
|
110
|
+
queueFrame(frame: Frame, direction?: FrameDirection): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Return the tools for this worker's LLM.
|
|
113
|
+
*
|
|
114
|
+
* By default, returns all methods decorated with `tool`. Override to
|
|
115
|
+
* provide additional or different tools.
|
|
116
|
+
*
|
|
117
|
+
* @returns List of tool functions.
|
|
118
|
+
*/
|
|
119
|
+
buildTools(): LLMTool[];
|
|
120
|
+
/**
|
|
121
|
+
* Request a graceful end of the session.
|
|
122
|
+
*
|
|
123
|
+
* When called from a `tool` handler, deliver the function call result first
|
|
124
|
+
* with `await params.resultCallback(result)`: the LLM output it triggers is
|
|
125
|
+
* delivered before the session ends.
|
|
126
|
+
*
|
|
127
|
+
* @param options.reason Optional human-readable reason for ending.
|
|
128
|
+
*/
|
|
129
|
+
end(options?: {
|
|
130
|
+
reason?: string | null;
|
|
131
|
+
}): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Activate another worker, draining this worker's pipeline to hand over.
|
|
134
|
+
*
|
|
135
|
+
* When called from a `tool` handler, deliver the function call result first
|
|
136
|
+
* with `await params.resultCallback(result)`: the output it triggers is
|
|
137
|
+
* delivered before the target is activated. The handover itself waits
|
|
138
|
+
* until the tool call asking for it has finished.
|
|
139
|
+
*
|
|
140
|
+
* @param workerName The name of the worker to activate.
|
|
141
|
+
* @param options.args Optional `WorkerActivationArgs` forwarded to the
|
|
142
|
+
* target worker's `onActivated` handler.
|
|
143
|
+
* @param options.deactivateSelf Whether to deactivate this worker before
|
|
144
|
+
* activating the target. Deactivating this worker drains its pipeline
|
|
145
|
+
* first; staying active does not. A worker that stays active and wants to
|
|
146
|
+
* drain anyway can call `flushPipeline` before this.
|
|
147
|
+
*/
|
|
148
|
+
activateWorker(workerName: string, options?: {
|
|
149
|
+
args?: WorkerActivationArgs | null;
|
|
150
|
+
deactivateSelf?: boolean;
|
|
151
|
+
}): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Process deferred frames before they are flushed.
|
|
154
|
+
*
|
|
155
|
+
* Called after all in-flight tools complete, before the deferred frames are
|
|
156
|
+
* queued into the pipeline. Override to inspect, modify, reorder, or filter
|
|
157
|
+
* the frames.
|
|
158
|
+
*
|
|
159
|
+
* @param frames The deferred frames collected during tool execution.
|
|
160
|
+
* @returns The frames to queue. Return the list as-is for default behavior.
|
|
161
|
+
*/
|
|
162
|
+
processDeferredToolFrames(frames: [Frame, FrameDirection][]): Promise<[Frame, FrameDirection][]>;
|
|
163
|
+
/** Register `tool` methods on the LLM in place. */
|
|
164
|
+
protected _registerTools(llm: LLMService): void;
|
|
165
|
+
/**
|
|
166
|
+
* Run a handover once no tool call is in flight.
|
|
167
|
+
*
|
|
168
|
+
* A tool asking to end or hand over is still running when it asks, and
|
|
169
|
+
* deactivating a worker mid-call leaves the rest of that call to a worker
|
|
170
|
+
* nobody is listening to. Held here and run once the last call finishes;
|
|
171
|
+
* outside a call there is nothing to wait for, so it runs now.
|
|
172
|
+
*
|
|
173
|
+
* @param handover What to do once the calls are done.
|
|
174
|
+
*/
|
|
175
|
+
protected _afterToolCalls(handover: () => Promise<void>): Promise<void>;
|
|
176
|
+
protected _trackToolCall(method: LLMTool): (params: FunctionCallParams) => Promise<void>;
|
|
177
|
+
protected _flushDeferredFrames(): Promise<void>;
|
|
178
|
+
}
|
|
179
|
+
export {};
|
|
180
|
+
//# sourceMappingURL=llm_worker.d.ts.map
|
|
@@ -0,0 +1,323 @@
|
|
|
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/workers/llm/llm_worker.py
|
|
6
|
+
/**
|
|
7
|
+
* LLM worker with tool registration.
|
|
8
|
+
*
|
|
9
|
+
* Provides the `LLMWorker` class that extends `PipelineWorker` with an LLM
|
|
10
|
+
* pipeline and automatic tool registration.
|
|
11
|
+
*
|
|
12
|
+
* Porting notes:
|
|
13
|
+
* - The deprecated `messages` / `resultCallback` arguments of `end()` and
|
|
14
|
+
* `activateWorker()` are not ported, nor is `_finishFunctionCall`, which
|
|
15
|
+
* only they used. Call `params.resultCallback(result)` before `end()` /
|
|
16
|
+
* `activateWorker()` instead.
|
|
17
|
+
* - `_IN_TOOL_CALL` is a context variable upstream. JavaScript has no
|
|
18
|
+
* context variables in core (no `node:async_hooks` outside
|
|
19
|
+
* `@pipedog/asyncio`), so the worker running a tool is recorded per
|
|
20
|
+
* asyncio-style task instead. DIVERGENCE: a task the tool handler spawns
|
|
21
|
+
* (e.g. with `gather` or `createTask`) does not inherit it, so frames
|
|
22
|
+
* queued from such a task are not held.
|
|
23
|
+
* - Tools are registered with `llm.registerFunction` and a bound direct
|
|
24
|
+
* function wrapper, rather than upstream's private
|
|
25
|
+
* `_register_direct_function`, because a bound (or wrapping) function no
|
|
26
|
+
* longer exposes the parameter list its direct-function schema is read
|
|
27
|
+
* from. The registration is explicit either way, so the advertised tools
|
|
28
|
+
* never auto-register over it.
|
|
29
|
+
*/
|
|
30
|
+
import { currentTask } from "@pipedog/asyncio";
|
|
31
|
+
import { DirectFunctionWrapper } from "../../adapters/schemas/direct_function.js";
|
|
32
|
+
import { ToolsSchema } from "../../adapters/schemas/tools_schema.js";
|
|
33
|
+
import { LLMMessagesAppendFrame, LLMSetToolsFrame } from "../../frames/frames.js";
|
|
34
|
+
import { Pipeline } from "../../pipeline/pipeline.js";
|
|
35
|
+
import { PipelineParams, PipelineWorker } from "../../pipeline/worker.js";
|
|
36
|
+
import { FrameDirection } from "../../processors/frame_processor.js";
|
|
37
|
+
import { WorkerActivationArgs } from "../base_worker.js";
|
|
38
|
+
import { _collectTools } from "./tool_decorator.js";
|
|
39
|
+
/**
|
|
40
|
+
* Activation arguments for LLM workers.
|
|
41
|
+
*
|
|
42
|
+
* - `messages`: LLM context messages to inject on activation.
|
|
43
|
+
* - `runLlm`: whether to run the LLM after appending messages. Defaults to
|
|
44
|
+
* true when `messages` is set.
|
|
45
|
+
*/
|
|
46
|
+
export class LLMWorkerActivationArgs extends WorkerActivationArgs {
|
|
47
|
+
messages;
|
|
48
|
+
runLlm;
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
super(options);
|
|
51
|
+
this.messages = options.messages ?? null;
|
|
52
|
+
this.runLlm = options.runLlm ?? null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The worker whose `tool` handler is running, for the duration of that
|
|
57
|
+
* handler. Upstream this is a context variable rather than a counter so it
|
|
58
|
+
* answers "did this come from a tool", not "is a tool running somewhere": the
|
|
59
|
+
* bus dispatch tasks were created before any tool and carry a context where
|
|
60
|
+
* this is unset, so their frames are never mistaken for a handler's. It holds
|
|
61
|
+
* the worker rather than a flag because a handler can reach another worker,
|
|
62
|
+
* and only the worker running the tool will release what it holds.
|
|
63
|
+
*
|
|
64
|
+
* Here it is kept per task (see the module notes).
|
|
65
|
+
*/
|
|
66
|
+
const IN_TOOL_CALL = new WeakMap();
|
|
67
|
+
function getInToolCall() {
|
|
68
|
+
const task = currentTask();
|
|
69
|
+
return task ? (IN_TOOL_CALL.get(task) ?? null) : null;
|
|
70
|
+
}
|
|
71
|
+
/** Set the current task's value; returns a token to restore the previous one. */
|
|
72
|
+
function setInToolCall(worker) {
|
|
73
|
+
const task = currentTask();
|
|
74
|
+
const previous = task ? (IN_TOOL_CALL.get(task) ?? null) : null;
|
|
75
|
+
if (task) {
|
|
76
|
+
IN_TOOL_CALL.set(task, worker);
|
|
77
|
+
}
|
|
78
|
+
return { task, previous };
|
|
79
|
+
}
|
|
80
|
+
function resetInToolCall(token) {
|
|
81
|
+
if (!token.task)
|
|
82
|
+
return;
|
|
83
|
+
if (token.previous === null) {
|
|
84
|
+
IN_TOOL_CALL.delete(token.task);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
IN_TOOL_CALL.set(token.task, token.previous);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* A direct function wrapper that invokes the function with `this` bound to
|
|
92
|
+
* its owner, so a tool method keeps both its parameter list (read from its
|
|
93
|
+
* source) and its worker.
|
|
94
|
+
*/
|
|
95
|
+
class _BoundDirectFunctionWrapper extends DirectFunctionWrapper {
|
|
96
|
+
#thisArg;
|
|
97
|
+
constructor(fn, thisArg) {
|
|
98
|
+
super(fn);
|
|
99
|
+
this.#thisArg = thisArg;
|
|
100
|
+
}
|
|
101
|
+
async invoke(args, params) {
|
|
102
|
+
const positional = this._argumentNames().map((name) => args[name]);
|
|
103
|
+
return await this.function.call(this.#thisArg, params, ...positional);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Worker with an LLM pipeline and automatic tool registration.
|
|
108
|
+
*
|
|
109
|
+
* Methods decorated with `tool` are registered as direct functions on the LLM
|
|
110
|
+
* and tracked so that frames queued during tool execution can be deferred
|
|
111
|
+
* until all tools complete.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* class MyTask extends LLMWorker {
|
|
115
|
+
* async my_function(params: FunctionCallParams, arg: string) { ... }
|
|
116
|
+
* static {
|
|
117
|
+
* tool(this.prototype.my_function);
|
|
118
|
+
* }
|
|
119
|
+
* }
|
|
120
|
+
*
|
|
121
|
+
* const worker = new MyTask({ name: "worker", llm: new OpenAILLMService({ apiKey: "..." }) });
|
|
122
|
+
*/
|
|
123
|
+
export class LLMWorker extends PipelineWorker {
|
|
124
|
+
// State referenced by tool wrapper closures.
|
|
125
|
+
_deferToolFrames;
|
|
126
|
+
_toolCallInflight = 0;
|
|
127
|
+
_deferredFrames = [];
|
|
128
|
+
// A handover or ending a tool asked for, held until its call is done.
|
|
129
|
+
_pendingHandover = null;
|
|
130
|
+
_closing = false;
|
|
131
|
+
_llm;
|
|
132
|
+
/** Initialize the LLMWorker. */
|
|
133
|
+
constructor(options) {
|
|
134
|
+
const pipeline = options.pipeline ?? new Pipeline([options.llm]);
|
|
135
|
+
super(pipeline, {
|
|
136
|
+
name: options.name ?? null,
|
|
137
|
+
bridged: options.bridged ?? null,
|
|
138
|
+
idleTimeoutSecs: null,
|
|
139
|
+
params: new PipelineParams({
|
|
140
|
+
enableMetrics: true,
|
|
141
|
+
enableUsageMetrics: true,
|
|
142
|
+
}),
|
|
143
|
+
active: options.active ?? false,
|
|
144
|
+
});
|
|
145
|
+
this._deferToolFrames = options.deferToolFrames ?? true;
|
|
146
|
+
this._llm = options.llm;
|
|
147
|
+
this._registerTools(this._llm);
|
|
148
|
+
}
|
|
149
|
+
/** The LLM service this worker wraps. */
|
|
150
|
+
get llm() {
|
|
151
|
+
return this._llm;
|
|
152
|
+
}
|
|
153
|
+
/** True when one or more `tool` methods are executing. */
|
|
154
|
+
get toolCallActive() {
|
|
155
|
+
return this._toolCallInflight > 0;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Configure the LLM with tools and activation messages.
|
|
159
|
+
*
|
|
160
|
+
* @param args Optional activation arguments with messages to append.
|
|
161
|
+
*/
|
|
162
|
+
async onActivated(args) {
|
|
163
|
+
await super.onActivated(args);
|
|
164
|
+
const activation = args
|
|
165
|
+
? LLMWorkerActivationArgs.fromDict(args)
|
|
166
|
+
: new LLMWorkerActivationArgs();
|
|
167
|
+
const tools = this.buildTools();
|
|
168
|
+
if (tools.length > 0) {
|
|
169
|
+
await this.queueFrame(new LLMSetToolsFrame({ tools: new ToolsSchema({ standardTools: tools }) }));
|
|
170
|
+
}
|
|
171
|
+
if (activation.messages && activation.messages.length > 0) {
|
|
172
|
+
const runLlm = activation.runLlm !== null ? activation.runLlm : true;
|
|
173
|
+
await this.queueFrame(new LLMMessagesAppendFrame({ messages: activation.messages, runLlm }));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Queue a frame, holding it if a tool handler queued it.
|
|
178
|
+
*
|
|
179
|
+
* A frame queued from inside one of this worker's `tool` handlers, or from
|
|
180
|
+
* anything that handler awaits, is held and delivered once the last tool
|
|
181
|
+
* finishes. Frames from anywhere else are queued immediately: the worker's
|
|
182
|
+
* own traffic and frames arriving over the bus, which run outside any
|
|
183
|
+
* handler's context, and frames a handler on a different worker queues
|
|
184
|
+
* here, which this worker would never release.
|
|
185
|
+
*
|
|
186
|
+
* @param frame Any `Frame` to deliver.
|
|
187
|
+
* @param direction Direction the frame should travel. Defaults to
|
|
188
|
+
* `FrameDirection.DOWNSTREAM`.
|
|
189
|
+
*/
|
|
190
|
+
async queueFrame(frame, direction = FrameDirection.DOWNSTREAM) {
|
|
191
|
+
if (this._deferToolFrames && getInToolCall() === this && !this._closing) {
|
|
192
|
+
this._deferredFrames.push([frame, direction]);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
await super.queueFrame(frame, direction);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Return the tools for this worker's LLM.
|
|
200
|
+
*
|
|
201
|
+
* By default, returns all methods decorated with `tool`. Override to
|
|
202
|
+
* provide additional or different tools.
|
|
203
|
+
*
|
|
204
|
+
* @returns List of tool functions.
|
|
205
|
+
*/
|
|
206
|
+
buildTools() {
|
|
207
|
+
return _collectTools(this);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Request a graceful end of the session.
|
|
211
|
+
*
|
|
212
|
+
* When called from a `tool` handler, deliver the function call result first
|
|
213
|
+
* with `await params.resultCallback(result)`: the LLM output it triggers is
|
|
214
|
+
* delivered before the session ends.
|
|
215
|
+
*
|
|
216
|
+
* @param options.reason Optional human-readable reason for ending.
|
|
217
|
+
*/
|
|
218
|
+
async end(options = {}) {
|
|
219
|
+
this._closing = true;
|
|
220
|
+
await this._afterToolCalls(() => super.end({ reason: options.reason ?? null }));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Activate another worker, draining this worker's pipeline to hand over.
|
|
224
|
+
*
|
|
225
|
+
* When called from a `tool` handler, deliver the function call result first
|
|
226
|
+
* with `await params.resultCallback(result)`: the output it triggers is
|
|
227
|
+
* delivered before the target is activated. The handover itself waits
|
|
228
|
+
* until the tool call asking for it has finished.
|
|
229
|
+
*
|
|
230
|
+
* @param workerName The name of the worker to activate.
|
|
231
|
+
* @param options.args Optional `WorkerActivationArgs` forwarded to the
|
|
232
|
+
* target worker's `onActivated` handler.
|
|
233
|
+
* @param options.deactivateSelf Whether to deactivate this worker before
|
|
234
|
+
* activating the target. Deactivating this worker drains its pipeline
|
|
235
|
+
* first; staying active does not. A worker that stays active and wants to
|
|
236
|
+
* drain anyway can call `flushPipeline` before this.
|
|
237
|
+
*/
|
|
238
|
+
async activateWorker(workerName, options = {}) {
|
|
239
|
+
await this._afterToolCalls(() => super.activateWorker(workerName, {
|
|
240
|
+
args: options.args ?? null,
|
|
241
|
+
deactivateSelf: options.deactivateSelf ?? false,
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Process deferred frames before they are flushed.
|
|
246
|
+
*
|
|
247
|
+
* Called after all in-flight tools complete, before the deferred frames are
|
|
248
|
+
* queued into the pipeline. Override to inspect, modify, reorder, or filter
|
|
249
|
+
* the frames.
|
|
250
|
+
*
|
|
251
|
+
* @param frames The deferred frames collected during tool execution.
|
|
252
|
+
* @returns The frames to queue. Return the list as-is for default behavior.
|
|
253
|
+
*/
|
|
254
|
+
async processDeferredToolFrames(frames) {
|
|
255
|
+
return frames;
|
|
256
|
+
}
|
|
257
|
+
/** Register `tool` methods on the LLM in place. */
|
|
258
|
+
_registerTools(llm) {
|
|
259
|
+
for (const method of _collectTools(this)) {
|
|
260
|
+
const tracked = this._trackToolCall(method);
|
|
261
|
+
llm.registerFunction(method.name, tracked, {
|
|
262
|
+
cancelOnInterruption: method._pipecatCancelOnInterruption ?? true,
|
|
263
|
+
timeoutSecs: method._pipecatTimeoutSecs ?? null,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Run a handover once no tool call is in flight.
|
|
269
|
+
*
|
|
270
|
+
* A tool asking to end or hand over is still running when it asks, and
|
|
271
|
+
* deactivating a worker mid-call leaves the rest of that call to a worker
|
|
272
|
+
* nobody is listening to. Held here and run once the last call finishes;
|
|
273
|
+
* outside a call there is nothing to wait for, so it runs now.
|
|
274
|
+
*
|
|
275
|
+
* @param handover What to do once the calls are done.
|
|
276
|
+
*/
|
|
277
|
+
async _afterToolCalls(handover) {
|
|
278
|
+
if (this._toolCallInflight) {
|
|
279
|
+
this._pendingHandover = handover;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
await handover();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
_trackToolCall(method) {
|
|
286
|
+
const wrapper = new _BoundDirectFunctionWrapper(method, this);
|
|
287
|
+
return async (params) => {
|
|
288
|
+
this._toolCallInflight += 1;
|
|
289
|
+
const token = setInToolCall(this);
|
|
290
|
+
try {
|
|
291
|
+
await wrapper.invoke(params.arguments, params);
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
resetInToolCall(token);
|
|
295
|
+
this._toolCallInflight = Math.max(0, this._toolCallInflight - 1);
|
|
296
|
+
if (this._toolCallInflight === 0) {
|
|
297
|
+
if (!this._closing) {
|
|
298
|
+
await this._flushDeferredFrames();
|
|
299
|
+
}
|
|
300
|
+
const handover = this._pendingHandover;
|
|
301
|
+
this._pendingHandover = null;
|
|
302
|
+
if (handover) {
|
|
303
|
+
await handover();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
async _flushDeferredFrames() {
|
|
310
|
+
const frames = [...this._deferredFrames];
|
|
311
|
+
this._deferredFrames.length = 0;
|
|
312
|
+
// Held frames go back in behind the function call result, so wait for
|
|
313
|
+
// that to be processed first. With nothing held there is nothing to
|
|
314
|
+
// order, and the round-trip would buy nothing.
|
|
315
|
+
if (frames.length > 0) {
|
|
316
|
+
await this.flushPipeline();
|
|
317
|
+
}
|
|
318
|
+
for (const [frame, direction] of await this.processDeferredToolFrames(frames)) {
|
|
319
|
+
await this.queueFrame(frame, direction);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=llm_worker.js.map
|