@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,233 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/tracing/turn_trace_observer.py
|
|
6
|
+
/**
|
|
7
|
+
* Turn trace observer for OpenTelemetry tracing in Pipecat.
|
|
8
|
+
*
|
|
9
|
+
* This module provides an observer that creates trace spans for each
|
|
10
|
+
* conversation turn, integrating with the turn tracking system to provide
|
|
11
|
+
* hierarchical tracing of conversation flows.
|
|
12
|
+
*
|
|
13
|
+
* Porting notes: upstream gets the tracer in `__init__`. Core imports
|
|
14
|
+
* OpenTelemetry asynchronously, so an observer built before that import
|
|
15
|
+
* finished gets its tracer on first use instead (`_getTracer()`).
|
|
16
|
+
*/
|
|
17
|
+
import { StartFrame } from "../../frames/frames.js";
|
|
18
|
+
import { BaseObserver, } from "../../observers/base_observer.js";
|
|
19
|
+
import { logger } from "../logger.js";
|
|
20
|
+
import { getOpenTelemetry, isTracingAvailable, } from "./setup.js";
|
|
21
|
+
import { TracingContext } from "./tracing_context.js";
|
|
22
|
+
/**
|
|
23
|
+
* Observer that creates trace spans for each conversation turn.
|
|
24
|
+
*
|
|
25
|
+
* This observer uses TurnTrackingObserver to track turns and creates
|
|
26
|
+
* OpenTelemetry spans for each turn. Service spans (STT, LLM, TTS)
|
|
27
|
+
* become children of the turn spans.
|
|
28
|
+
*
|
|
29
|
+
* If conversation tracing is enabled, turns become children of a
|
|
30
|
+
* conversation span that encapsulates the entire session.
|
|
31
|
+
*/
|
|
32
|
+
export class TurnTraceObserver extends BaseObserver {
|
|
33
|
+
_turnTracker;
|
|
34
|
+
_latencyTracker;
|
|
35
|
+
_tracingContext;
|
|
36
|
+
_currentSpan = null;
|
|
37
|
+
_currentTurnNumber = 0;
|
|
38
|
+
_traceContextMap = new Map();
|
|
39
|
+
_tracer;
|
|
40
|
+
// Conversation tracking properties
|
|
41
|
+
_conversationSpan = null;
|
|
42
|
+
_conversationId;
|
|
43
|
+
_additionalSpanAttributes;
|
|
44
|
+
/** Initialize the turn trace observer. */
|
|
45
|
+
constructor(options) {
|
|
46
|
+
super(options);
|
|
47
|
+
this._turnTracker = options.turnTracker;
|
|
48
|
+
this._latencyTracker = options.latencyTracker;
|
|
49
|
+
this._tracingContext = options.tracingContext || new TracingContext();
|
|
50
|
+
this._tracer = getOpenTelemetry()?.api.trace.getTracer("pipecat.turn") ?? null;
|
|
51
|
+
this._conversationId = options.conversationId ?? null;
|
|
52
|
+
this._additionalSpanAttributes = options.additionalSpanAttributes || {};
|
|
53
|
+
this._turnTracker.eventHandler("on_turn_started", async (_tracker, turnNumber) => {
|
|
54
|
+
await this._handleTurnStarted(turnNumber);
|
|
55
|
+
});
|
|
56
|
+
this._turnTracker.eventHandler("on_turn_ended", async (_tracker, turnNumber, duration, wasInterrupted) => {
|
|
57
|
+
await this._handleTurnEnded(turnNumber, duration, wasInterrupted);
|
|
58
|
+
});
|
|
59
|
+
this._latencyTracker.eventHandler("on_latency_measured", async (_tracker, latencySeconds) => {
|
|
60
|
+
await this._handleLatencyMeasured(latencySeconds);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The turn tracer, resolved on first use if OpenTelemetry was not available
|
|
65
|
+
* yet when the observer was built (core imports it asynchronously).
|
|
66
|
+
*/
|
|
67
|
+
_getTracer() {
|
|
68
|
+
this._tracer ??= getOpenTelemetry()?.api.trace.getTracer("pipecat.turn") ?? null;
|
|
69
|
+
return this._tracer;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Handle latency measurement events.
|
|
73
|
+
*
|
|
74
|
+
* Called when the latency tracker measures user-to-bot latency.
|
|
75
|
+
* Adds the latency as an attribute to the current turn span.
|
|
76
|
+
*
|
|
77
|
+
* @param latencySeconds The measured latency in seconds.
|
|
78
|
+
*/
|
|
79
|
+
async _handleLatencyMeasured(latencySeconds) {
|
|
80
|
+
if (this._currentSpan && isTracingAvailable()) {
|
|
81
|
+
this._currentSpan.setAttribute("turn.user_bot_latency_seconds", latencySeconds);
|
|
82
|
+
logger.debug(`Turn ${this._currentTurnNumber} user-bot latency: ${latencySeconds.toFixed(3)}s`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Process a frame without modifying it.
|
|
87
|
+
*
|
|
88
|
+
* Handles StartFrame to begin conversation tracing early, ensuring
|
|
89
|
+
* that any spans created before Turn 1 (e.g., from flow initialization)
|
|
90
|
+
* are properly attached to the conversation trace.
|
|
91
|
+
*
|
|
92
|
+
* @param data The frame push event data.
|
|
93
|
+
*/
|
|
94
|
+
async onPushFrame(data) {
|
|
95
|
+
if (data.frame instanceof StartFrame && !this._conversationSpan) {
|
|
96
|
+
this.startConversationTracing(this._conversationId);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Start a new conversation span.
|
|
101
|
+
*
|
|
102
|
+
* @param conversationId Optional custom ID for the conversation. If null, a UUID will be generated.
|
|
103
|
+
*/
|
|
104
|
+
startConversationTracing(conversationId = null) {
|
|
105
|
+
const tracer = this._getTracer();
|
|
106
|
+
if (!isTracingAvailable() || !tracer) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Generate a conversation ID if not provided
|
|
110
|
+
if (conversationId === null) {
|
|
111
|
+
conversationId = TracingContext.generateConversationId();
|
|
112
|
+
logger.debug(`Generated new conversation ID: ${conversationId}`);
|
|
113
|
+
}
|
|
114
|
+
this._conversationId = conversationId;
|
|
115
|
+
// Create a new span for this conversation
|
|
116
|
+
const conversationSpan = tracer.startSpan("conversation");
|
|
117
|
+
this._conversationSpan = conversationSpan;
|
|
118
|
+
// Set span attributes
|
|
119
|
+
conversationSpan.setAttribute("conversation.id", conversationId);
|
|
120
|
+
conversationSpan.setAttribute("conversation.type", "voice");
|
|
121
|
+
// Set custom otel attributes if provided
|
|
122
|
+
for (const [k, v] of Object.entries(this._additionalSpanAttributes || {})) {
|
|
123
|
+
conversationSpan.setAttribute(k, v);
|
|
124
|
+
}
|
|
125
|
+
// Update the tracing context
|
|
126
|
+
this._tracingContext.setConversationContext(conversationSpan.spanContext(), conversationId);
|
|
127
|
+
logger.debug(`Started tracing for Conversation ${conversationId}`);
|
|
128
|
+
}
|
|
129
|
+
/** End the current conversation span and ensure the last turn is closed. */
|
|
130
|
+
endConversationTracing() {
|
|
131
|
+
if (!isTracingAvailable()) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// First, ensure any active turn is closed properly
|
|
135
|
+
if (this._currentSpan) {
|
|
136
|
+
// If we have an active turn span, end it with a standard duration
|
|
137
|
+
logger.debug(`Ending Turn ${this._currentTurnNumber} due to conversation end`);
|
|
138
|
+
this._currentSpan.setAttribute("turn.was_interrupted", true);
|
|
139
|
+
this._currentSpan.setAttribute("turn.ended_by_conversation_end", true);
|
|
140
|
+
this._currentSpan.end();
|
|
141
|
+
this._currentSpan = null;
|
|
142
|
+
// Clear the turn context
|
|
143
|
+
this._tracingContext.setTurnContext(null);
|
|
144
|
+
}
|
|
145
|
+
// Now end the conversation span if it exists
|
|
146
|
+
if (this._conversationSpan) {
|
|
147
|
+
// End the span
|
|
148
|
+
this._conversationSpan.end();
|
|
149
|
+
this._conversationSpan = null;
|
|
150
|
+
// Clear the conversation context
|
|
151
|
+
this._tracingContext.setConversationContext(null);
|
|
152
|
+
logger.debug(`Ended tracing for Conversation ${this._conversationId}`);
|
|
153
|
+
this._conversationId = null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Handle a turn start event by creating a new span. */
|
|
157
|
+
async _handleTurnStarted(turnNumber) {
|
|
158
|
+
const tracer = this._getTracer();
|
|
159
|
+
if (!isTracingAvailable() || !tracer) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (turnNumber === 1 && !this._conversationSpan) {
|
|
163
|
+
this.startConversationTracing(this._conversationId);
|
|
164
|
+
}
|
|
165
|
+
// Get the parent context - conversation if available, otherwise use root context
|
|
166
|
+
let parentContext = null;
|
|
167
|
+
if (this._conversationSpan) {
|
|
168
|
+
parentContext = this._tracingContext.getConversationContext();
|
|
169
|
+
}
|
|
170
|
+
// Create a new span for this turn
|
|
171
|
+
const currentSpan = tracer.startSpan("turn", undefined, parentContext ?? undefined);
|
|
172
|
+
this._currentSpan = currentSpan;
|
|
173
|
+
this._currentTurnNumber = turnNumber;
|
|
174
|
+
// Set span attributes
|
|
175
|
+
currentSpan.setAttribute("turn.number", turnNumber);
|
|
176
|
+
currentSpan.setAttribute("turn.type", "conversation");
|
|
177
|
+
// Add conversation ID attribute if available
|
|
178
|
+
if (this._conversationId) {
|
|
179
|
+
currentSpan.setAttribute("conversation.id", this._conversationId);
|
|
180
|
+
}
|
|
181
|
+
// Store the span context so services can become children of this span
|
|
182
|
+
this._traceContextMap.set(turnNumber, currentSpan.spanContext());
|
|
183
|
+
// Update the tracing context so services can access this span
|
|
184
|
+
this._tracingContext.setTurnContext(currentSpan.spanContext());
|
|
185
|
+
logger.debug(`Started tracing for Turn ${turnNumber}`);
|
|
186
|
+
}
|
|
187
|
+
/** Handle a turn end event by ending the current span. */
|
|
188
|
+
async _handleTurnEnded(turnNumber, duration, wasInterrupted) {
|
|
189
|
+
if (!isTracingAvailable() || !this._currentSpan) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Only end the span if it matches the current turn
|
|
193
|
+
if (turnNumber === this._currentTurnNumber) {
|
|
194
|
+
// Set additional attributes
|
|
195
|
+
this._currentSpan.setAttribute("turn.duration_seconds", duration);
|
|
196
|
+
this._currentSpan.setAttribute("turn.was_interrupted", wasInterrupted);
|
|
197
|
+
// End the span
|
|
198
|
+
this._currentSpan.end();
|
|
199
|
+
this._currentSpan = null;
|
|
200
|
+
// Clear the turn context
|
|
201
|
+
this._tracingContext.setTurnContext(null);
|
|
202
|
+
logger.debug(`Ended tracing for Turn ${turnNumber}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get the span context for the current turn.
|
|
207
|
+
*
|
|
208
|
+
* This can be used by services to create child spans.
|
|
209
|
+
*
|
|
210
|
+
* @returns The current turn's span context or null if not available.
|
|
211
|
+
*/
|
|
212
|
+
getCurrentTurnContext() {
|
|
213
|
+
if (!isTracingAvailable() || !this._currentSpan) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
return this._currentSpan.spanContext();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get the span context for a specific turn.
|
|
220
|
+
*
|
|
221
|
+
* This can be used by services to create child spans.
|
|
222
|
+
*
|
|
223
|
+
* @param turnNumber The turn number to get context for.
|
|
224
|
+
* @returns The specified turn's span context or null if not available.
|
|
225
|
+
*/
|
|
226
|
+
getTurnContext(turnNumber) {
|
|
227
|
+
if (!isTracingAvailable()) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
return this._traceContextMap.get(turnNumber) ?? null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=turn_trace_observer.js.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types shared across Pipecat, independent of any provider SDK.
|
|
3
|
+
*
|
|
4
|
+
* The `NOT_GIVEN` sentinel lives here so that settings, contexts and anything
|
|
5
|
+
* else needing "this value was not provided" share one meaning. Provider SDKs
|
|
6
|
+
* ship their own equivalents; those belong to the SDK and are translated at the
|
|
7
|
+
* adapter boundary rather than used inside Pipecat.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Sentinel type meaning "this value was not provided".
|
|
11
|
+
*
|
|
12
|
+
* Distinct from `null`, which is a meaningful value in most of the places
|
|
13
|
+
* this is used (typically "this service doesn't support this field").
|
|
14
|
+
* `NOT_GIVEN` is the singleton instance; test for it with `isGiven()`
|
|
15
|
+
* rather than comparing directly.
|
|
16
|
+
*
|
|
17
|
+
* DIVERGENCE: upstream makes the sentinel falsy (`__bool__` returns False) so
|
|
18
|
+
* `value or default` treats a missing value as absent. JavaScript objects are
|
|
19
|
+
* always truthy, so use `isGiven(value) ? value : fallback` instead.
|
|
20
|
+
*/
|
|
21
|
+
export declare class NotGiven {
|
|
22
|
+
#private;
|
|
23
|
+
/** Return the singleton instance, creating it on first use. */
|
|
24
|
+
constructor();
|
|
25
|
+
/** Return the sentinel's name. */
|
|
26
|
+
toString(): string;
|
|
27
|
+
toJSON(): string;
|
|
28
|
+
}
|
|
29
|
+
/** Singleton sentinel meaning "this value was not provided". */
|
|
30
|
+
export declare const NOT_GIVEN: NotGiven;
|
|
31
|
+
/**
|
|
32
|
+
* Check whether a value was explicitly provided.
|
|
33
|
+
*
|
|
34
|
+
* Also acts as a type guard: inside a true branch, the value is narrowed to
|
|
35
|
+
* exclude `NotGiven` (e.g. `string | null | NotGiven` becomes `string | null`).
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* if (isGiven(delta.voice)) {
|
|
39
|
+
* // caller wants to change the voice
|
|
40
|
+
* }
|
|
41
|
+
*
|
|
42
|
+
* @param value The value to check.
|
|
43
|
+
* @returns `true` if `value` is anything other than `NOT_GIVEN`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isGiven<T>(value: T | NotGiven): value is T;
|
|
46
|
+
/**
|
|
47
|
+
* Extract a value that must have been provided.
|
|
48
|
+
*
|
|
49
|
+
* Intended for reads where `NOT_GIVEN` should never appear, such as a
|
|
50
|
+
* store-mode settings object (see `services/settings`). Narrows away
|
|
51
|
+
* `NotGiven` at the type level and throws at runtime if that invariant is
|
|
52
|
+
* violated.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* const resolvedModel = assertGiven(this._settings.model); // narrowed string | null
|
|
56
|
+
*
|
|
57
|
+
* @param value The value to extract.
|
|
58
|
+
* @returns The value, narrowed to exclude `NotGiven`.
|
|
59
|
+
* @throws Error If `value` is `NOT_GIVEN` (upstream: RuntimeError).
|
|
60
|
+
*/
|
|
61
|
+
export declare function assertGiven<T>(value: T | NotGiven): T;
|
|
62
|
+
/**
|
|
63
|
+
* Extract a value that must have been provided and must not be empty.
|
|
64
|
+
*
|
|
65
|
+
* Like `assertGiven()`, but also rejects `null` (and `undefined`) and the
|
|
66
|
+
* empty string, which is what an unset or blank environment variable
|
|
67
|
+
* produces. Use it for settings a service cannot work without, such as a
|
|
68
|
+
* local model or voice that no provider will validate on its behalf.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* const voice = requireGiven(this._settings.voice, "Piper TTS voice"); // narrowed string
|
|
72
|
+
*
|
|
73
|
+
* @param value The value to extract.
|
|
74
|
+
* @param what How to name the value in the error, e.g. `"Piper TTS voice"`.
|
|
75
|
+
* @returns The value, narrowed to exclude `NotGiven` and `null`.
|
|
76
|
+
* @throws Error If `value` is `NOT_GIVEN` (upstream: RuntimeError).
|
|
77
|
+
* @throws Error If `value` is `null` or an empty string (upstream: ValueError).
|
|
78
|
+
*/
|
|
79
|
+
export declare function requireGiven<T>(value: T | null | undefined | NotGiven, what: string): T;
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/types.py
|
|
6
|
+
/**
|
|
7
|
+
* Types shared across Pipecat, independent of any provider SDK.
|
|
8
|
+
*
|
|
9
|
+
* The `NOT_GIVEN` sentinel lives here so that settings, contexts and anything
|
|
10
|
+
* else needing "this value was not provided" share one meaning. Provider SDKs
|
|
11
|
+
* ship their own equivalents; those belong to the SDK and are translated at the
|
|
12
|
+
* adapter boundary rather than used inside Pipecat.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Sentinel type meaning "this value was not provided".
|
|
16
|
+
*
|
|
17
|
+
* Distinct from `null`, which is a meaningful value in most of the places
|
|
18
|
+
* this is used (typically "this service doesn't support this field").
|
|
19
|
+
* `NOT_GIVEN` is the singleton instance; test for it with `isGiven()`
|
|
20
|
+
* rather than comparing directly.
|
|
21
|
+
*
|
|
22
|
+
* DIVERGENCE: upstream makes the sentinel falsy (`__bool__` returns False) so
|
|
23
|
+
* `value or default` treats a missing value as absent. JavaScript objects are
|
|
24
|
+
* always truthy, so use `isGiven(value) ? value : fallback` instead.
|
|
25
|
+
*/
|
|
26
|
+
export class NotGiven {
|
|
27
|
+
static #instance = null;
|
|
28
|
+
/** Return the singleton instance, creating it on first use. */
|
|
29
|
+
constructor() {
|
|
30
|
+
if (NotGiven.#instance !== null) {
|
|
31
|
+
// biome-ignore lint/correctness/noConstructorReturn: singleton, as upstream's __new__.
|
|
32
|
+
return NotGiven.#instance;
|
|
33
|
+
}
|
|
34
|
+
NotGiven.#instance = this;
|
|
35
|
+
}
|
|
36
|
+
/** Return the sentinel's name. */
|
|
37
|
+
toString() {
|
|
38
|
+
return "NOT_GIVEN";
|
|
39
|
+
}
|
|
40
|
+
toJSON() {
|
|
41
|
+
return "NOT_GIVEN";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Singleton sentinel meaning "this value was not provided". */
|
|
45
|
+
export const NOT_GIVEN = new NotGiven();
|
|
46
|
+
/**
|
|
47
|
+
* Check whether a value was explicitly provided.
|
|
48
|
+
*
|
|
49
|
+
* Also acts as a type guard: inside a true branch, the value is narrowed to
|
|
50
|
+
* exclude `NotGiven` (e.g. `string | null | NotGiven` becomes `string | null`).
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* if (isGiven(delta.voice)) {
|
|
54
|
+
* // caller wants to change the voice
|
|
55
|
+
* }
|
|
56
|
+
*
|
|
57
|
+
* @param value The value to check.
|
|
58
|
+
* @returns `true` if `value` is anything other than `NOT_GIVEN`.
|
|
59
|
+
*/
|
|
60
|
+
export function isGiven(value) {
|
|
61
|
+
return !(value instanceof NotGiven);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Extract a value that must have been provided.
|
|
65
|
+
*
|
|
66
|
+
* Intended for reads where `NOT_GIVEN` should never appear, such as a
|
|
67
|
+
* store-mode settings object (see `services/settings`). Narrows away
|
|
68
|
+
* `NotGiven` at the type level and throws at runtime if that invariant is
|
|
69
|
+
* violated.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* const resolvedModel = assertGiven(this._settings.model); // narrowed string | null
|
|
73
|
+
*
|
|
74
|
+
* @param value The value to extract.
|
|
75
|
+
* @returns The value, narrowed to exclude `NotGiven`.
|
|
76
|
+
* @throws Error If `value` is `NOT_GIVEN` (upstream: RuntimeError).
|
|
77
|
+
*/
|
|
78
|
+
export function assertGiven(value) {
|
|
79
|
+
if (!isGiven(value)) {
|
|
80
|
+
throw new Error("Expected a value, got NOT_GIVEN");
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extract a value that must have been provided and must not be empty.
|
|
86
|
+
*
|
|
87
|
+
* Like `assertGiven()`, but also rejects `null` (and `undefined`) and the
|
|
88
|
+
* empty string, which is what an unset or blank environment variable
|
|
89
|
+
* produces. Use it for settings a service cannot work without, such as a
|
|
90
|
+
* local model or voice that no provider will validate on its behalf.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* const voice = requireGiven(this._settings.voice, "Piper TTS voice"); // narrowed string
|
|
94
|
+
*
|
|
95
|
+
* @param value The value to extract.
|
|
96
|
+
* @param what How to name the value in the error, e.g. `"Piper TTS voice"`.
|
|
97
|
+
* @returns The value, narrowed to exclude `NotGiven` and `null`.
|
|
98
|
+
* @throws Error If `value` is `NOT_GIVEN` (upstream: RuntimeError).
|
|
99
|
+
* @throws Error If `value` is `null` or an empty string (upstream: ValueError).
|
|
100
|
+
*/
|
|
101
|
+
export function requireGiven(value, what) {
|
|
102
|
+
const given = assertGiven(value);
|
|
103
|
+
if (given === null || given === undefined || given === "") {
|
|
104
|
+
throw new Error(`${what} must be specified`);
|
|
105
|
+
}
|
|
106
|
+
return given;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/utils.py
|
|
6
|
+
/**
|
|
7
|
+
* Utility functions for object identification and counting.
|
|
8
|
+
*/
|
|
9
|
+
const counts = new Map();
|
|
10
|
+
let nextId = 0;
|
|
11
|
+
/** Generate a unique id for an object. */
|
|
12
|
+
export function objId() {
|
|
13
|
+
return nextId++;
|
|
14
|
+
}
|
|
15
|
+
/** Generate a unique count for an object based on its class name. */
|
|
16
|
+
export function objCount(obj) {
|
|
17
|
+
const name = obj.constructor.name;
|
|
18
|
+
const count = counts.get(name) ?? 0;
|
|
19
|
+
counts.set(name, count + 1);
|
|
20
|
+
return count;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/** Position of a node in its document (0-based line and column, like PyYAML's `Mark`). */
|
|
2
|
+
export interface YamlMark {
|
|
3
|
+
line: number;
|
|
4
|
+
column: number;
|
|
5
|
+
}
|
|
6
|
+
/** Base class of the errors raised while loading YAML (`yaml.YAMLError`). */
|
|
7
|
+
export declare class YAMLError extends Error {
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
/** A YAML error tied to a place in the document (`yaml.MarkedYAMLError`). */
|
|
11
|
+
export declare class MarkedYAMLError extends YAMLError {
|
|
12
|
+
name: string;
|
|
13
|
+
readonly problem: string;
|
|
14
|
+
readonly problemMark: YamlMark | null;
|
|
15
|
+
constructor(problem: string, problemMark?: YamlMark | null);
|
|
16
|
+
}
|
|
17
|
+
/** The document is not valid YAML (`yaml.parser.ParserError` / `yaml.scanner.ScannerError`). */
|
|
18
|
+
export declare class ParserError extends MarkedYAMLError {
|
|
19
|
+
name: string;
|
|
20
|
+
}
|
|
21
|
+
/** A node could not be turned into a value (`yaml.constructor.ConstructorError`). */
|
|
22
|
+
export declare class ConstructorError extends MarkedYAMLError {
|
|
23
|
+
name: string;
|
|
24
|
+
}
|
|
25
|
+
/** A scalar node (`yaml.ScalarNode`). `value` is its text. */
|
|
26
|
+
export declare class ScalarNode {
|
|
27
|
+
readonly isScalar = true;
|
|
28
|
+
readonly tag: string;
|
|
29
|
+
readonly value: string;
|
|
30
|
+
readonly startMark: YamlMark | null;
|
|
31
|
+
/** How the scalar was written: `null` when plain, else `'`, `"`, `|` or `>`. */
|
|
32
|
+
readonly style: string | null;
|
|
33
|
+
constructor(tag: string, value: string, startMark: YamlMark | null, style?: string | null);
|
|
34
|
+
}
|
|
35
|
+
/** A sequence node (`yaml.SequenceNode`). */
|
|
36
|
+
export declare class SequenceNode {
|
|
37
|
+
readonly isScalar = false;
|
|
38
|
+
readonly tag: string;
|
|
39
|
+
readonly value: YamlNode[];
|
|
40
|
+
readonly startMark: YamlMark | null;
|
|
41
|
+
constructor(tag: string, value: YamlNode[], startMark: YamlMark | null);
|
|
42
|
+
}
|
|
43
|
+
/** A mapping node (`yaml.MappingNode`). `value` holds the key and value nodes in order. */
|
|
44
|
+
export declare class MappingNode {
|
|
45
|
+
readonly isScalar = false;
|
|
46
|
+
readonly tag: string;
|
|
47
|
+
value: [YamlNode, YamlNode][];
|
|
48
|
+
readonly startMark: YamlMark | null;
|
|
49
|
+
constructor(tag: string, value: [YamlNode, YamlNode][], startMark: YamlMark | null);
|
|
50
|
+
}
|
|
51
|
+
/** A YAML node, as handed to a constructor. */
|
|
52
|
+
export type YamlNode = ScalarNode | SequenceNode | MappingNode;
|
|
53
|
+
/** A tag constructor registered on a loader class. */
|
|
54
|
+
export type YamlConstructor = (loader: SafeLoader, node: YamlNode) => unknown;
|
|
55
|
+
/**
|
|
56
|
+
* Implicit resolvers by the first character of the plain scalars they apply
|
|
57
|
+
* to (`""` for the empty scalar, `null` for any): `[tag, pattern]` pairs,
|
|
58
|
+
* tried in order.
|
|
59
|
+
*/
|
|
60
|
+
export type YamlImplicitResolvers = Map<string | null, [string, RegExp][]>;
|
|
61
|
+
/** The loader-class shape the helpers work with (a `yaml.SafeLoader` subclass upstream). */
|
|
62
|
+
export interface YamlLoaderClass {
|
|
63
|
+
new (stream: string): SafeLoader;
|
|
64
|
+
yamlConstructors: Map<string, YamlConstructor>;
|
|
65
|
+
yamlImplicitResolvers: YamlImplicitResolvers;
|
|
66
|
+
/** Register a constructor for a tag on this loader class. */
|
|
67
|
+
addConstructor(tag: string, fn: YamlConstructor): void;
|
|
68
|
+
/** Register an implicit resolver on this loader class. */
|
|
69
|
+
addImplicitResolver(tag: string, regexp: RegExp, first: Iterable<string> | null): void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The safe loader (`yaml.SafeLoader`): loads standard YAML 1.1 tags into
|
|
73
|
+
* plain values. Subclass it and register constructors or resolvers on the
|
|
74
|
+
* subclass to extend it; registrations never reach the parent class.
|
|
75
|
+
*/
|
|
76
|
+
export declare class SafeLoader {
|
|
77
|
+
#private;
|
|
78
|
+
static yamlConstructors: Map<string, YamlConstructor>;
|
|
79
|
+
static yamlImplicitResolvers: YamlImplicitResolvers;
|
|
80
|
+
/** Register `fn` as the constructor for `tag` on this class (copying the parent's table first). */
|
|
81
|
+
static addConstructor(tag: string, fn: YamlConstructor): void;
|
|
82
|
+
/**
|
|
83
|
+
* Resolve plain scalars matching `regexp` (and starting with one of `first`,
|
|
84
|
+
* or any character when null) to `tag` on this class.
|
|
85
|
+
*/
|
|
86
|
+
static addImplicitResolver(tag: string, regexp: RegExp, first: Iterable<string> | null): void;
|
|
87
|
+
constructor(stream: string);
|
|
88
|
+
/** Load the stream's single document (`get_single_data`); `null` for an empty stream. */
|
|
89
|
+
getSingleData(): unknown;
|
|
90
|
+
/** Compose the stream's single document into nodes, resolving tags. */
|
|
91
|
+
getSingleNode(): YamlNode | null;
|
|
92
|
+
/** The tag a plain scalar resolves to under this class's implicit resolvers. */
|
|
93
|
+
resolveScalar(value: string): string;
|
|
94
|
+
/** Construct the value of a whole document. */
|
|
95
|
+
constructDocument(node: YamlNode): unknown;
|
|
96
|
+
/** Construct the value of `node` with the constructor registered for its tag. */
|
|
97
|
+
constructObject(node: YamlNode): unknown;
|
|
98
|
+
/** The text of a scalar node. */
|
|
99
|
+
constructScalar(node: YamlNode): string;
|
|
100
|
+
/** The values of a sequence node. */
|
|
101
|
+
constructSequence(node: YamlNode): unknown[];
|
|
102
|
+
/**
|
|
103
|
+
* The entries of a mapping node, as an object, after applying `<<` merge
|
|
104
|
+
* keys. Keys are scalars; a sequence or mapping key is an error, as an
|
|
105
|
+
* unhashable key is upstream.
|
|
106
|
+
*/
|
|
107
|
+
constructMapping(node: YamlNode): Record<string, unknown>;
|
|
108
|
+
/** The entries of a sequence of one-entry mappings (`!!omap`, `!!pairs`) as `[key, value]` pairs. */
|
|
109
|
+
constructPairs(node: YamlNode): [unknown, unknown][];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Parse the single YAML document in `stream` (`yaml.load(stream, Loader)`).
|
|
113
|
+
*
|
|
114
|
+
* @param stream The YAML text.
|
|
115
|
+
* @param Loader The loader class to load with. Defaults to `SafeLoader`.
|
|
116
|
+
*/
|
|
117
|
+
export declare function load(stream: string, Loader?: YamlLoaderClass): unknown;
|
|
118
|
+
/**
|
|
119
|
+
* Register an implicit resolver (`yaml.add_implicit_resolver`) on `Loader`.
|
|
120
|
+
*
|
|
121
|
+
* @param tag The tag plain scalars matching `regexp` resolve to.
|
|
122
|
+
* @param regexp The pattern a plain scalar must match.
|
|
123
|
+
* @param first The characters such scalars start with, or null for any.
|
|
124
|
+
*/
|
|
125
|
+
export declare function addImplicitResolver(tag: string, regexp: RegExp, first?: Iterable<string> | null, options?: {
|
|
126
|
+
Loader?: YamlLoaderClass;
|
|
127
|
+
}): void;
|
|
128
|
+
/**
|
|
129
|
+
* Reads an included file as UTF-8 text. Throws if the file can't be read
|
|
130
|
+
* (Node's `ENOENT` error is upstream's `FileNotFoundError`).
|
|
131
|
+
*/
|
|
132
|
+
export type YamlFileReader = (path: string) => string;
|
|
133
|
+
export interface IncludeOptions {
|
|
134
|
+
/** Reads `!include`d files, e.g. `(p) => readFileSync(p, "utf8")`. */
|
|
135
|
+
readFile: YamlFileReader;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Register an `!include <relative-path>` constructor on `loaderClass`.
|
|
139
|
+
*
|
|
140
|
+
* Included files load with the same loader class, so nested includes work and
|
|
141
|
+
* scalars get the same resolver treatment as the top-level document. Paths
|
|
142
|
+
* resolve against `baseDir` and may reach outside it.
|
|
143
|
+
*
|
|
144
|
+
* This mutates `loaderClass`. Register on a private subclass rather than on
|
|
145
|
+
* `SafeLoader` itself so the constructor has no global side effects;
|
|
146
|
+
* `includeLoader` does that for you.
|
|
147
|
+
*
|
|
148
|
+
* @param loaderClass The loader class to register the constructor on.
|
|
149
|
+
* @param baseDir Directory that `!include` paths resolve against.
|
|
150
|
+
* @param options How to read the included files.
|
|
151
|
+
*/
|
|
152
|
+
export declare function addIncludeConstructor(loaderClass: YamlLoaderClass, baseDir: string, options: IncludeOptions): void;
|
|
153
|
+
export interface IncludeLoaderOptions extends IncludeOptions {
|
|
154
|
+
/**
|
|
155
|
+
* Loader class to subclass. Defaults to `SafeLoader`; pass a custom
|
|
156
|
+
* `SafeLoader` subclass to keep its resolvers and constructors.
|
|
157
|
+
*/
|
|
158
|
+
base?: YamlLoaderClass;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Build a loader class that resolves `!include` relative to `baseDir`.
|
|
162
|
+
*
|
|
163
|
+
* Returns a fresh subclass of `base` with the include constructor
|
|
164
|
+
* registered, so `base` itself is left untouched.
|
|
165
|
+
*
|
|
166
|
+
* @param baseDir Directory that `!include` paths resolve against, typically
|
|
167
|
+
* the directory of the document being loaded.
|
|
168
|
+
* @param options How to read included files, and the loader class to subclass.
|
|
169
|
+
* @returns A loader class to pass to `load`.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```ts
|
|
173
|
+
* const data = load(readFileSync(path, "utf8"), includeLoader(dirname(path), {
|
|
174
|
+
* readFile: (p) => readFileSync(p, "utf8"),
|
|
175
|
+
* }));
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export declare function includeLoader(baseDir: string, options: IncludeLoaderOptions): YamlLoaderClass;
|
|
179
|
+
//# sourceMappingURL=yaml.d.ts.map
|