@pipedog/core 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/NOTICE +9 -0
- package/dist/adapters/base_llm_adapter.d.ts +266 -0
- package/dist/adapters/base_llm_adapter.js +489 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/schemas/direct_function.d.ts +202 -0
- package/dist/adapters/schemas/direct_function.js +302 -0
- package/dist/adapters/schemas/function_schema.d.ts +67 -0
- package/dist/adapters/schemas/function_schema.js +72 -0
- package/dist/adapters/schemas/index.d.ts +2 -0
- package/dist/adapters/schemas/index.js +8 -0
- package/dist/adapters/schemas/tools_schema.d.ts +57 -0
- package/dist/adapters/schemas/tools_schema.js +79 -0
- package/dist/adapters/services/index.d.ts +2 -0
- package/dist/adapters/services/index.js +8 -0
- package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
- package/dist/adapters/services/open_ai_adapter.js +250 -0
- package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
- package/dist/audio/dtmf/dtmf_data.js +22 -0
- package/dist/audio/dtmf/index.d.ts +2 -0
- package/dist/audio/dtmf/index.js +8 -0
- package/dist/audio/dtmf/types.d.ts +31 -0
- package/dist/audio/dtmf/types.js +35 -0
- package/dist/audio/dtmf/utils.d.ts +13 -0
- package/dist/audio/dtmf/utils.js +62 -0
- package/dist/audio/filters/base_audio_filter.d.ts +51 -0
- package/dist/audio/filters/base_audio_filter.js +17 -0
- package/dist/audio/filters/index.d.ts +2 -0
- package/dist/audio/filters/index.js +8 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.js +8 -0
- package/dist/audio/krisp_instance.d.ts +95 -0
- package/dist/audio/krisp_instance.js +229 -0
- package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
- package/dist/audio/mixers/base_audio_mixer.js +16 -0
- package/dist/audio/mixers/index.d.ts +2 -0
- package/dist/audio/mixers/index.js +8 -0
- package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
- package/dist/audio/resamplers/base_audio_resampler.js +35 -0
- package/dist/audio/resamplers/index.d.ts +2 -0
- package/dist/audio/resamplers/index.js +8 -0
- package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
- package/dist/audio/resamplers/resampy_resampler.js +15 -0
- package/dist/audio/resamplers/soxr_resampler.d.ts +54 -0
- package/dist/audio/resamplers/soxr_resampler.js +69 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +146 -0
- package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
- package/dist/audio/turn/base_turn_analyzer.js +61 -0
- package/dist/audio/turn/index.d.ts +2 -0
- package/dist/audio/turn/index.js +8 -0
- package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
- package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +143 -0
- package/dist/audio/utils.d.ts +224 -0
- package/dist/audio/utils.js +634 -0
- package/dist/audio/vad/data/index.d.ts +2 -0
- package/dist/audio/vad/data/index.js +8 -0
- package/dist/audio/vad/index.d.ts +2 -0
- package/dist/audio/vad/index.js +8 -0
- package/dist/audio/vad/vad_analyzer.d.ts +126 -0
- package/dist/audio/vad/vad_analyzer.js +211 -0
- package/dist/audio/vad/vad_controller.d.ts +143 -0
- package/dist/audio/vad/vad_controller.js +228 -0
- package/dist/audio/volume.d.ts +38 -0
- package/dist/audio/volume.js +75 -0
- package/dist/bus/adapters/base.d.ts +35 -0
- package/dist/bus/adapters/base.js +19 -0
- package/dist/bus/adapters/index.d.ts +10 -0
- package/dist/bus/adapters/index.js +15 -0
- package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
- package/dist/bus/adapters/llm_context_adapter.js +82 -0
- package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
- package/dist/bus/adapters/tools_schema_adapter.js +70 -0
- package/dist/bus/bridge_processor.d.ts +111 -0
- package/dist/bus/bridge_processor.js +166 -0
- package/dist/bus/bus.d.ts +110 -0
- package/dist/bus/bus.js +200 -0
- package/dist/bus/index.d.ts +22 -0
- package/dist/bus/index.js +27 -0
- package/dist/bus/local/async_queue.d.ts +12 -0
- package/dist/bus/local/async_queue.js +21 -0
- package/dist/bus/local/index.d.ts +3 -0
- package/dist/bus/local/index.js +8 -0
- package/dist/bus/messages.d.ts +378 -0
- package/dist/bus/messages.js +357 -0
- package/dist/bus/network/index.d.ts +16 -0
- package/dist/bus/network/index.js +21 -0
- package/dist/bus/queue.d.ts +27 -0
- package/dist/bus/queue.js +51 -0
- package/dist/bus/serializers/base.d.ts +25 -0
- package/dist/bus/serializers/base.js +14 -0
- package/dist/bus/serializers/index.d.ts +9 -0
- package/dist/bus/serializers/index.js +14 -0
- package/dist/bus/serializers/json.d.ts +77 -0
- package/dist/bus/serializers/json.js +367 -0
- package/dist/bus/subscriber.d.ts +46 -0
- package/dist/bus/subscriber.js +27 -0
- package/dist/bus/ui/index.d.ts +3 -0
- package/dist/bus/ui/index.js +8 -0
- package/dist/bus/ui/messages.d.ts +186 -0
- package/dist/bus/ui/messages.js +171 -0
- package/dist/classifiers/base_classifier.d.ts +263 -0
- package/dist/classifiers/base_classifier.js +346 -0
- package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
- package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
- package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
- package/dist/classifiers/cloudflare/clef/client.js +234 -0
- package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/clef/index.js +8 -0
- package/dist/classifiers/cloudflare/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/index.js +8 -0
- package/dist/classifiers/http_client.d.ts +70 -0
- package/dist/classifiers/http_client.js +161 -0
- package/dist/classifiers/index.d.ts +2 -0
- package/dist/classifiers/index.js +8 -0
- package/dist/classifiers/jev/classifier.d.ts +8 -0
- package/dist/classifiers/jev/classifier.js +13 -0
- package/dist/classifiers/jev/client.d.ts +8 -0
- package/dist/classifiers/jev/client.js +13 -0
- package/dist/classifiers/jev/index.d.ts +2 -0
- package/dist/classifiers/jev/index.js +8 -0
- package/dist/classifiers/llm/classifier.d.ts +72 -0
- package/dist/classifiers/llm/classifier.js +304 -0
- package/dist/classifiers/llm/index.d.ts +2 -0
- package/dist/classifiers/llm/index.js +8 -0
- package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
- package/dist/classifiers/openai/decisions/classifier.js +241 -0
- package/dist/classifiers/openai/decisions/client.d.ts +108 -0
- package/dist/classifiers/openai/decisions/client.js +234 -0
- package/dist/classifiers/openai/decisions/index.d.ts +2 -0
- package/dist/classifiers/openai/decisions/index.js +8 -0
- package/dist/classifiers/openai/index.d.ts +2 -0
- package/dist/classifiers/openai/index.js +8 -0
- package/dist/classifiers/typesafe/index.d.ts +2 -0
- package/dist/classifiers/typesafe/index.js +8 -0
- package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
- package/dist/classifiers/typesafe/jev/classifier.js +220 -0
- package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
- package/dist/classifiers/typesafe/jev/client.js +233 -0
- package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
- package/dist/classifiers/typesafe/jev/index.js +8 -0
- package/dist/clocks/base_clock.d.ts +13 -0
- package/dist/clocks/base_clock.js +14 -0
- package/dist/clocks/index.d.ts +2 -0
- package/dist/clocks/index.js +8 -0
- package/dist/clocks/system_clock.d.ts +15 -0
- package/dist/clocks/system_clock.js +25 -0
- package/dist/frames/frames.d.ts +2533 -0
- package/dist/frames/frames.js +2485 -0
- package/dist/frames/index.d.ts +2 -0
- package/dist/frames/index.js +8 -0
- package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
- package/dist/frames/protobufs/frames_pb2.js +466 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +56 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/metrics.d.ts +276 -0
- package/dist/metrics/metrics.js +254 -0
- package/dist/observers/base_observer.d.ts +173 -0
- package/dist/observers/base_observer.js +151 -0
- package/dist/observers/error_observer.d.ts +75 -0
- package/dist/observers/error_observer.js +87 -0
- package/dist/observers/function_call_observer.d.ts +157 -0
- package/dist/observers/function_call_observer.js +222 -0
- package/dist/observers/index.d.ts +2 -0
- package/dist/observers/index.js +8 -0
- package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
- package/dist/observers/loggers/debug_log_observer.js +228 -0
- package/dist/observers/loggers/index.d.ts +2 -0
- package/dist/observers/loggers/index.js +8 -0
- package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
- package/dist/observers/loggers/llm_log_observer.js +110 -0
- package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
- package/dist/observers/loggers/metrics_log_observer.js +186 -0
- package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
- package/dist/observers/loggers/transcription_log_observer.js +74 -0
- package/dist/observers/service_metrics_observer.d.ts +168 -0
- package/dist/observers/service_metrics_observer.js +236 -0
- package/dist/observers/speaking_observer.d.ts +104 -0
- package/dist/observers/speaking_observer.js +150 -0
- package/dist/observers/startup_timing_observer.d.ts +221 -0
- package/dist/observers/startup_timing_observer.js +365 -0
- package/dist/observers/turn_tracking_observer.d.ts +78 -0
- package/dist/observers/turn_tracking_observer.js +189 -0
- package/dist/observers/user_bot_latency_observer.d.ts +411 -0
- package/dist/observers/user_bot_latency_observer.js +974 -0
- package/dist/pipeline/base_pipeline.d.ts +49 -0
- package/dist/pipeline/base_pipeline.js +101 -0
- package/dist/pipeline/capabilities.d.ts +76 -0
- package/dist/pipeline/capabilities.js +97 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +8 -0
- package/dist/pipeline/job_context.d.ts +317 -0
- package/dist/pipeline/job_context.js +450 -0
- package/dist/pipeline/job_decorator.d.ts +54 -0
- package/dist/pipeline/job_decorator.js +92 -0
- package/dist/pipeline/llm_switcher.d.ts +84 -0
- package/dist/pipeline/llm_switcher.js +107 -0
- package/dist/pipeline/llm_with_backend.d.ts +435 -0
- package/dist/pipeline/llm_with_backend.js +806 -0
- package/dist/pipeline/parallel_pipeline.d.ts +83 -0
- package/dist/pipeline/parallel_pipeline.js +200 -0
- package/dist/pipeline/pipeline.d.ts +126 -0
- package/dist/pipeline/pipeline.js +196 -0
- package/dist/pipeline/service_switcher.d.ts +287 -0
- package/dist/pipeline/service_switcher.js +509 -0
- package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
- package/dist/pipeline/sync_parallel_pipeline.js +387 -0
- package/dist/pipeline/worker.d.ts +814 -0
- package/dist/pipeline/worker.js +1639 -0
- package/dist/pipeline/worker_observer.d.ts +131 -0
- package/dist/pipeline/worker_observer.js +274 -0
- package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
- package/dist/pipeline/worker_ready_decorator.js +76 -0
- package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
- package/dist/processors/aggregators/async_tool_messages.js +291 -0
- package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
- package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
- package/dist/processors/aggregators/gated.d.ts +43 -0
- package/dist/processors/aggregators/gated.js +86 -0
- package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
- package/dist/processors/aggregators/gated_llm_context.js +86 -0
- package/dist/processors/aggregators/index.d.ts +2 -0
- package/dist/processors/aggregators/index.js +8 -0
- package/dist/processors/aggregators/llm_context.d.ts +370 -0
- package/dist/processors/aggregators/llm_context.js +580 -0
- package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
- package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
- package/dist/processors/aggregators/llm_response.d.ts +37 -0
- package/dist/processors/aggregators/llm_response.js +71 -0
- package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
- package/dist/processors/aggregators/llm_response_universal.js +2394 -0
- package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
- package/dist/processors/aggregators/llm_text_processor.js +102 -0
- package/dist/processors/aggregators/sentence.d.ts +39 -0
- package/dist/processors/aggregators/sentence.js +69 -0
- package/dist/processors/async_generator.d.ts +42 -0
- package/dist/processors/async_generator.js +76 -0
- package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
- package/dist/processors/audio/audio_buffer_processor.js +565 -0
- package/dist/processors/audio/index.d.ts +2 -0
- package/dist/processors/audio/index.js +8 -0
- package/dist/processors/audio/vad_processor.d.ts +67 -0
- package/dist/processors/audio/vad_processor.js +103 -0
- package/dist/processors/consumer_processor.d.ts +49 -0
- package/dist/processors/consumer_processor.js +85 -0
- package/dist/processors/filters/frame_filter.d.ts +39 -0
- package/dist/processors/filters/frame_filter.js +52 -0
- package/dist/processors/filters/function_filter.d.ts +59 -0
- package/dist/processors/filters/function_filter.js +78 -0
- package/dist/processors/filters/identity_filter.d.ts +33 -0
- package/dist/processors/filters/identity_filter.js +37 -0
- package/dist/processors/filters/index.d.ts +2 -0
- package/dist/processors/filters/index.js +8 -0
- package/dist/processors/filters/null_filter.d.ts +34 -0
- package/dist/processors/filters/null_filter.js +47 -0
- package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
- package/dist/processors/filters/wake_notifier_filter.js +49 -0
- package/dist/processors/frame_processor.d.ts +360 -0
- package/dist/processors/frame_processor.js +932 -0
- package/dist/processors/frameworks/index.d.ts +2 -0
- package/dist/processors/frameworks/index.js +8 -0
- package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
- package/dist/processors/frameworks/rtvi/frames.js +259 -0
- package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
- package/dist/processors/frameworks/rtvi/index.js +11 -0
- package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
- package/dist/processors/frameworks/rtvi/models.js +1807 -0
- package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
- package/dist/processors/frameworks/rtvi/observer.js +1113 -0
- package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
- package/dist/processors/frameworks/rtvi/processor.js +676 -0
- package/dist/processors/idle_frame_processor.d.ts +44 -0
- package/dist/processors/idle_frame_processor.js +86 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.js +8 -0
- package/dist/processors/logger.d.ts +42 -0
- package/dist/processors/logger.js +87 -0
- package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
- package/dist/processors/metrics/frame_processor_metrics.js +372 -0
- package/dist/processors/metrics/index.d.ts +2 -0
- package/dist/processors/metrics/index.js +8 -0
- package/dist/processors/producer_processor.d.ts +68 -0
- package/dist/processors/producer_processor.js +78 -0
- package/dist/processors/text_transformer.d.ts +30 -0
- package/dist/processors/text_transformer.js +48 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/registry.d.ts +69 -0
- package/dist/registry/registry.js +149 -0
- package/dist/registry/types.d.ts +47 -0
- package/dist/registry/types.js +39 -0
- package/dist/serializers/base_serializer.d.ts +94 -0
- package/dist/serializers/base_serializer.js +82 -0
- package/dist/serializers/index.d.ts +2 -0
- package/dist/serializers/index.js +8 -0
- package/dist/services/ai_service.d.ts +145 -0
- package/dist/services/ai_service.js +262 -0
- package/dist/services/anthropic/index.d.ts +2 -0
- package/dist/services/anthropic/index.js +7 -0
- package/dist/services/assemblyai/index.d.ts +2 -0
- package/dist/services/assemblyai/index.js +7 -0
- package/dist/services/asyncai/index.d.ts +2 -0
- package/dist/services/asyncai/index.js +7 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.js +7 -0
- package/dist/services/azure/index.d.ts +2 -0
- package/dist/services/azure/index.js +7 -0
- package/dist/services/baseten/index.d.ts +2 -0
- package/dist/services/baseten/index.js +7 -0
- package/dist/services/bland/index.d.ts +2 -0
- package/dist/services/bland/index.js +7 -0
- package/dist/services/camb/index.d.ts +2 -0
- package/dist/services/camb/index.js +7 -0
- package/dist/services/cartesia/index.d.ts +2 -0
- package/dist/services/cartesia/index.js +7 -0
- package/dist/services/cerebras/index.d.ts +2 -0
- package/dist/services/cerebras/index.js +7 -0
- package/dist/services/crusoe/index.d.ts +2 -0
- package/dist/services/crusoe/index.js +7 -0
- package/dist/services/deepgram/index.d.ts +2 -0
- package/dist/services/deepgram/index.js +7 -0
- package/dist/services/deepseek/index.d.ts +2 -0
- package/dist/services/deepseek/index.js +7 -0
- package/dist/services/elevenlabs/index.d.ts +2 -0
- package/dist/services/elevenlabs/index.js +7 -0
- package/dist/services/fal/index.d.ts +2 -0
- package/dist/services/fal/index.js +7 -0
- package/dist/services/fireworks/index.d.ts +2 -0
- package/dist/services/fireworks/index.js +7 -0
- package/dist/services/fish/index.d.ts +2 -0
- package/dist/services/fish/index.js +7 -0
- package/dist/services/funasr/index.d.ts +3 -0
- package/dist/services/funasr/index.js +8 -0
- package/dist/services/gladia/index.d.ts +2 -0
- package/dist/services/gladia/index.js +7 -0
- package/dist/services/google/index.d.ts +2 -0
- package/dist/services/google/index.js +7 -0
- package/dist/services/gradium/index.d.ts +2 -0
- package/dist/services/gradium/index.js +7 -0
- package/dist/services/grok/index.d.ts +2 -0
- package/dist/services/grok/index.js +7 -0
- package/dist/services/groq/index.d.ts +2 -0
- package/dist/services/groq/index.js +7 -0
- package/dist/services/heygen/index.d.ts +2 -0
- package/dist/services/heygen/index.js +7 -0
- package/dist/services/hume/index.d.ts +2 -0
- package/dist/services/hume/index.js +7 -0
- package/dist/services/image_service.d.ts +52 -0
- package/dist/services/image_service.js +60 -0
- package/dist/services/inception/index.d.ts +2 -0
- package/dist/services/inception/index.js +7 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +8 -0
- package/dist/services/inworld/index.d.ts +2 -0
- package/dist/services/inworld/index.js +7 -0
- package/dist/services/keenable/index.d.ts +2 -0
- package/dist/services/keenable/index.js +7 -0
- package/dist/services/kokoro/index.d.ts +2 -0
- package/dist/services/kokoro/index.js +7 -0
- package/dist/services/llm_service.d.ts +1106 -0
- package/dist/services/llm_service.js +2231 -0
- package/dist/services/mem0/index.d.ts +2 -0
- package/dist/services/mem0/index.js +7 -0
- package/dist/services/meta/index.d.ts +2 -0
- package/dist/services/meta/index.js +7 -0
- package/dist/services/minimax/index.d.ts +2 -0
- package/dist/services/minimax/index.js +7 -0
- package/dist/services/mistral/index.d.ts +2 -0
- package/dist/services/mistral/index.js +7 -0
- package/dist/services/moondream/index.d.ts +2 -0
- package/dist/services/moondream/index.js +7 -0
- package/dist/services/moonshine/index.d.ts +2 -0
- package/dist/services/moonshine/index.js +7 -0
- package/dist/services/nebius/index.d.ts +2 -0
- package/dist/services/nebius/index.js +7 -0
- package/dist/services/neuphonic/index.d.ts +2 -0
- package/dist/services/neuphonic/index.js +7 -0
- package/dist/services/novita/index.d.ts +2 -0
- package/dist/services/novita/index.js +7 -0
- package/dist/services/nvidia/index.d.ts +2 -0
- package/dist/services/nvidia/index.js +11 -0
- package/dist/services/ollama/index.d.ts +2 -0
- package/dist/services/ollama/index.js +7 -0
- package/dist/services/openai/index.d.ts +2 -0
- package/dist/services/openai/index.js +7 -0
- package/dist/services/openclaw/index.d.ts +14 -0
- package/dist/services/openclaw/index.js +19 -0
- package/dist/services/openrouter/index.d.ts +2 -0
- package/dist/services/openrouter/index.js +7 -0
- package/dist/services/perplexity/index.d.ts +2 -0
- package/dist/services/perplexity/index.js +7 -0
- package/dist/services/piper/index.d.ts +2 -0
- package/dist/services/piper/index.js +7 -0
- package/dist/services/pocket_tts/index.d.ts +2 -0
- package/dist/services/pocket_tts/index.js +7 -0
- package/dist/services/qwen/index.d.ts +2 -0
- package/dist/services/qwen/index.js +7 -0
- package/dist/services/resembleai/index.d.ts +2 -0
- package/dist/services/resembleai/index.js +7 -0
- package/dist/services/rime/index.d.ts +2 -0
- package/dist/services/rime/index.js +7 -0
- package/dist/services/sambanova/index.d.ts +2 -0
- package/dist/services/sambanova/index.js +7 -0
- package/dist/services/sarvam/index.d.ts +2 -0
- package/dist/services/sarvam/index.js +7 -0
- package/dist/services/settings.d.ts +356 -0
- package/dist/services/settings.js +437 -0
- package/dist/services/simli/index.d.ts +2 -0
- package/dist/services/simli/index.js +7 -0
- package/dist/services/smallest/index.d.ts +2 -0
- package/dist/services/smallest/index.js +7 -0
- package/dist/services/soniox/index.d.ts +2 -0
- package/dist/services/soniox/index.js +7 -0
- package/dist/services/speechify/index.d.ts +2 -0
- package/dist/services/speechify/index.js +7 -0
- package/dist/services/speechmatics/index.d.ts +2 -0
- package/dist/services/speechmatics/index.js +7 -0
- package/dist/services/stt_latency.d.ts +62 -0
- package/dist/services/stt_latency.js +71 -0
- package/dist/services/stt_service.d.ts +601 -0
- package/dist/services/stt_service.js +1044 -0
- package/dist/services/tavus/index.d.ts +2 -0
- package/dist/services/tavus/index.js +7 -0
- package/dist/services/together/index.d.ts +2 -0
- package/dist/services/together/index.js +7 -0
- package/dist/services/tts_service.d.ts +909 -0
- package/dist/services/tts_service.js +2018 -0
- package/dist/services/ultravox/index.d.ts +2 -0
- package/dist/services/ultravox/index.js +9 -0
- package/dist/services/vision_service.d.ts +56 -0
- package/dist/services/vision_service.js +62 -0
- package/dist/services/websocket_service.d.ts +213 -0
- package/dist/services/websocket_service.js +654 -0
- package/dist/services/whisper/index.d.ts +2 -0
- package/dist/services/whisper/index.js +9 -0
- package/dist/services/xai/index.d.ts +2 -0
- package/dist/services/xai/index.js +9 -0
- package/dist/services/xtts/index.d.ts +2 -0
- package/dist/services/xtts/index.js +9 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.js +8 -0
- package/dist/tests/utils.d.ts +123 -0
- package/dist/tests/utils.js +212 -0
- package/dist/transcriptions/index.d.ts +2 -0
- package/dist/transcriptions/index.js +8 -0
- package/dist/transcriptions/language.d.ts +376 -0
- package/dist/transcriptions/language.js +543 -0
- package/dist/transports/base_input.d.ts +149 -0
- package/dist/transports/base_input.js +338 -0
- package/dist/transports/base_output.d.ts +432 -0
- package/dist/transports/base_output.js +1231 -0
- package/dist/transports/base_transport.d.ts +223 -0
- package/dist/transports/base_transport.js +167 -0
- package/dist/transports/daily/index.d.ts +2 -0
- package/dist/transports/daily/index.js +9 -0
- package/dist/transports/heygen/index.d.ts +2 -0
- package/dist/transports/heygen/index.js +9 -0
- package/dist/transports/index.d.ts +2 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/lemonslice/index.d.ts +2 -0
- package/dist/transports/lemonslice/index.js +9 -0
- package/dist/transports/livekit/index.d.ts +2 -0
- package/dist/transports/livekit/index.js +9 -0
- package/dist/transports/local/index.d.ts +2 -0
- package/dist/transports/local/index.js +9 -0
- package/dist/transports/moq/index.d.ts +2 -0
- package/dist/transports/moq/index.js +9 -0
- package/dist/transports/smallwebrtc/index.d.ts +2 -0
- package/dist/transports/smallwebrtc/index.js +9 -0
- package/dist/transports/tavus/index.d.ts +2 -0
- package/dist/transports/tavus/index.js +9 -0
- package/dist/transports/video_in_sampler.d.ts +157 -0
- package/dist/transports/video_in_sampler.js +258 -0
- package/dist/transports/vonage/index.d.ts +2 -0
- package/dist/transports/vonage/index.js +9 -0
- package/dist/transports/websocket/index.d.ts +2 -0
- package/dist/transports/websocket/index.js +9 -0
- package/dist/transports/whatsapp/index.d.ts +2 -0
- package/dist/transports/whatsapp/index.js +9 -0
- package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
- package/dist/turns/eager_end_of_turn_mixin.js +122 -0
- package/dist/turns/empty_user_turn.d.ts +55 -0
- package/dist/turns/empty_user_turn.js +53 -0
- package/dist/turns/index.d.ts +2 -0
- package/dist/turns/index.js +8 -0
- package/dist/turns/speculation_gate.d.ts +169 -0
- package/dist/turns/speculation_gate.js +294 -0
- package/dist/turns/types.d.ts +33 -0
- package/dist/turns/types.js +35 -0
- package/dist/turns/user_idle_controller.d.ts +94 -0
- package/dist/turns/user_idle_controller.js +187 -0
- package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
- package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
- package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
- package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
- package/dist/turns/user_mute/index.d.ts +6 -0
- package/dist/turns/user_mute/index.js +11 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
- package/dist/turns/user_start/index.d.ts +8 -0
- package/dist/turns/user_start/index.js +16 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
- package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
- package/dist/turns/user_stop/eager_match_policy.js +50 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
- package/dist/turns/user_stop/index.d.ts +10 -0
- package/dist/turns/user_stop/index.js +15 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
- package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
- package/dist/turns/user_turn_completion_mixin.js +591 -0
- package/dist/turns/user_turn_controller.d.ts +134 -0
- package/dist/turns/user_turn_controller.js +335 -0
- package/dist/turns/user_turn_processor.d.ts +87 -0
- package/dist/turns/user_turn_processor.js +180 -0
- package/dist/turns/user_turn_strategies.d.ts +187 -0
- package/dist/turns/user_turn_strategies.js +222 -0
- package/dist/utils/async_tool_cancellation.d.ts +35 -0
- package/dist/utils/async_tool_cancellation.js +78 -0
- package/dist/utils/asyncio/index.d.ts +2 -0
- package/dist/utils/asyncio/index.js +7 -0
- package/dist/utils/asyncio/task_manager.d.ts +49 -0
- package/dist/utils/asyncio/task_manager.js +105 -0
- package/dist/utils/base_object.d.ts +76 -0
- package/dist/utils/base_object.js +154 -0
- package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
- package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
- package/dist/utils/context/audio_context_manager.d.ts +131 -0
- package/dist/utils/context/audio_context_manager.js +233 -0
- package/dist/utils/context/index.d.ts +2 -0
- package/dist/utils/context/index.js +7 -0
- package/dist/utils/context/llm_context_summarization.d.ts +258 -0
- package/dist/utils/context/llm_context_summarization.js +511 -0
- package/dist/utils/context/text_segment_map.d.ts +611 -0
- package/dist/utils/context/text_segment_map.js +1132 -0
- package/dist/utils/context/word_completion_tracker.d.ts +273 -0
- package/dist/utils/context/word_completion_tracker.js +441 -0
- package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
- package/dist/utils/context/word_timestamp_tracker.js +98 -0
- package/dist/utils/deprecation.d.ts +28 -0
- package/dist/utils/deprecation.js +75 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.js +62 -0
- package/dist/utils/errors.d.ts +75 -0
- package/dist/utils/errors.js +202 -0
- package/dist/utils/file_resolver.d.ts +126 -0
- package/dist/utils/file_resolver.js +314 -0
- package/dist/utils/file_storage.d.ts +99 -0
- package/dist/utils/file_storage.js +100 -0
- package/dist/utils/frame_queue.d.ts +36 -0
- package/dist/utils/frame_queue.js +66 -0
- package/dist/utils/http.d.ts +39 -0
- package/dist/utils/http.js +53 -0
- package/dist/utils/image.d.ts +15 -0
- package/dist/utils/image.js +30 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/log_config.d.ts +34 -0
- package/dist/utils/log_config.js +76 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/mixin.d.ts +14 -0
- package/dist/utils/mixin.js +63 -0
- package/dist/utils/network.d.ts +73 -0
- package/dist/utils/network.js +90 -0
- package/dist/utils/security/allowed_origins.d.ts +16 -0
- package/dist/utils/security/allowed_origins.js +34 -0
- package/dist/utils/security/index.d.ts +2 -0
- package/dist/utils/security/index.js +7 -0
- package/dist/utils/security/redaction.d.ts +27 -0
- package/dist/utils/security/redaction.js +123 -0
- package/dist/utils/security/ssrf.d.ts +79 -0
- package/dist/utils/security/ssrf.js +327 -0
- package/dist/utils/shared.d.ts +35 -0
- package/dist/utils/shared.js +136 -0
- package/dist/utils/startup.d.ts +17 -0
- package/dist/utils/startup.js +130 -0
- package/dist/utils/string.d.ts +116 -0
- package/dist/utils/string.js +460 -0
- package/dist/utils/sync/base_notifier.d.ts +25 -0
- package/dist/utils/sync/base_notifier.js +16 -0
- package/dist/utils/sync/event_notifier.d.ts +38 -0
- package/dist/utils/sync/event_notifier.js +51 -0
- package/dist/utils/sync/index.d.ts +2 -0
- package/dist/utils/sync/index.js +7 -0
- package/dist/utils/text/alnum_utils.d.ts +109 -0
- package/dist/utils/text/alnum_utils.js +262 -0
- package/dist/utils/text/base_text_aggregator.d.ts +146 -0
- package/dist/utils/text/base_text_aggregator.js +102 -0
- package/dist/utils/text/base_text_filter.d.ts +54 -0
- package/dist/utils/text/base_text_filter.js +50 -0
- package/dist/utils/text/index.d.ts +2 -0
- package/dist/utils/text/index.js +7 -0
- package/dist/utils/text/markdown_text_filter.d.ts +147 -0
- package/dist/utils/text/markdown_text_filter.js +522 -0
- package/dist/utils/text/markup_utils.d.ts +54 -0
- package/dist/utils/text/markup_utils.js +156 -0
- package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
- package/dist/utils/text/pattern_pair_aggregator.js +478 -0
- package/dist/utils/text/phonemes.d.ts +60 -0
- package/dist/utils/text/phonemes.js +172 -0
- package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
- package/dist/utils/text/simple_text_aggregator.js +254 -0
- package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
- package/dist/utils/text/skip_tags_aggregator.js +147 -0
- package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +111 -0
- package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
- package/dist/utils/text/word_timestamp_utils.js +52 -0
- package/dist/utils/time.d.ts +13 -0
- package/dist/utils/time.js +31 -0
- package/dist/utils/tracing/index.d.ts +3 -0
- package/dist/utils/tracing/index.js +8 -0
- package/dist/utils/tracing/service_attributes.d.ts +198 -0
- package/dist/utils/tracing/service_attributes.js +434 -0
- package/dist/utils/tracing/service_decorators.d.ts +214 -0
- package/dist/utils/tracing/service_decorators.js +1662 -0
- package/dist/utils/tracing/setup.d.ts +95 -0
- package/dist/utils/tracing/setup.js +110 -0
- package/dist/utils/tracing/tracing_context.d.ts +55 -0
- package/dist/utils/tracing/tracing_context.js +97 -0
- package/dist/utils/tracing/turn_trace_observer.d.ts +90 -0
- package/dist/utils/tracing/turn_trace_observer.js +219 -0
- package/dist/utils/types.d.ts +80 -0
- package/dist/utils/types.js +108 -0
- package/dist/utils/utils.d.ts +5 -0
- package/dist/utils/utils.js +22 -0
- package/dist/utils/yaml.d.ts +64 -0
- package/dist/utils/yaml.js +41 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.js +7 -0
- package/dist/workers/base_worker.d.ts +772 -0
- package/dist/workers/base_worker.js +1298 -0
- package/dist/workers/index.d.ts +2 -0
- package/dist/workers/index.js +8 -0
- package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
- package/dist/workers/llm/backend_llm_worker.js +1055 -0
- package/dist/workers/llm/index.d.ts +6 -0
- package/dist/workers/llm/index.js +11 -0
- package/dist/workers/llm/llm_context_worker.d.ts +66 -0
- package/dist/workers/llm/llm_context_worker.js +72 -0
- package/dist/workers/llm/llm_worker.d.ts +180 -0
- package/dist/workers/llm/llm_worker.js +323 -0
- package/dist/workers/llm/tool_decorator.d.ts +68 -0
- package/dist/workers/llm/tool_decorator.js +60 -0
- package/dist/workers/runner.d.ts +268 -0
- package/dist/workers/runner.js +489 -0
- package/dist/workers/ui/index.d.ts +22 -0
- package/dist/workers/ui/index.js +27 -0
- package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
- package/dist/workers/ui/ui_event_decorator.js +75 -0
- package/dist/workers/ui/ui_job_context.d.ts +12 -0
- package/dist/workers/ui/ui_job_context.js +17 -0
- package/dist/workers/ui/ui_prompts.d.ts +21 -0
- package/dist/workers/ui/ui_prompts.js +41 -0
- package/dist/workers/ui/ui_tools.d.ts +32 -0
- package/dist/workers/ui/ui_tools.js +112 -0
- package/dist/workers/ui/ui_worker.d.ts +571 -0
- package/dist/workers/ui/ui_worker.js +1156 -0
- package/package.json +46 -3
- package/README.md +0 -5
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export type OtelAttributeValue = string | number | boolean | readonly string[] | readonly number[] | readonly boolean[];
|
|
2
|
+
/** `SpanContext` from `@opentelemetry/api`. */
|
|
3
|
+
export interface OtelSpanContext {
|
|
4
|
+
traceId: string;
|
|
5
|
+
spanId: string;
|
|
6
|
+
traceFlags: number;
|
|
7
|
+
isRemote?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** `Span` from `@opentelemetry/api`. */
|
|
10
|
+
export interface OtelSpan {
|
|
11
|
+
spanContext(): OtelSpanContext;
|
|
12
|
+
setAttribute(key: string, value: OtelAttributeValue): unknown;
|
|
13
|
+
end(endTime?: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
/** `Context` from `@opentelemetry/api` (opaque). */
|
|
16
|
+
export interface OtelContext {
|
|
17
|
+
getValue(key: symbol): unknown;
|
|
18
|
+
}
|
|
19
|
+
/** `Tracer` from `@opentelemetry/api`. */
|
|
20
|
+
export interface OtelTracer {
|
|
21
|
+
startSpan(name: string, options?: Record<string, unknown>, context?: OtelContext): OtelSpan;
|
|
22
|
+
}
|
|
23
|
+
/** The `@opentelemetry/api` module. */
|
|
24
|
+
export interface OtelApi {
|
|
25
|
+
trace: {
|
|
26
|
+
getTracer(name: string, version?: string): OtelTracer;
|
|
27
|
+
wrapSpanContext(spanContext: OtelSpanContext): OtelSpan;
|
|
28
|
+
setSpan(context: OtelContext, span: OtelSpan): OtelContext;
|
|
29
|
+
setGlobalTracerProvider(provider: unknown): unknown;
|
|
30
|
+
};
|
|
31
|
+
context: {
|
|
32
|
+
active(): OtelContext;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** The `@opentelemetry/sdk-trace-base` module (v2). */
|
|
36
|
+
export interface OtelSdkTraceBase {
|
|
37
|
+
BasicTracerProvider: new (config?: {
|
|
38
|
+
resource?: unknown;
|
|
39
|
+
spanProcessors?: unknown[];
|
|
40
|
+
}) => unknown;
|
|
41
|
+
BatchSpanProcessor: new (exporter: unknown) => unknown;
|
|
42
|
+
ConsoleSpanExporter: new () => unknown;
|
|
43
|
+
}
|
|
44
|
+
/** The `@opentelemetry/resources` module (v2). */
|
|
45
|
+
export interface OtelResources {
|
|
46
|
+
resourceFromAttributes(attributes: Record<string, string>): unknown;
|
|
47
|
+
}
|
|
48
|
+
/** The OpenTelemetry modules handed to `registerOpenTelemetry()`. */
|
|
49
|
+
export interface OpenTelemetryModules {
|
|
50
|
+
/** `@opentelemetry/api`. Enables tracing. */
|
|
51
|
+
api: OtelApi;
|
|
52
|
+
/** `@opentelemetry/sdk-trace-base`. Needed by `setupTracing()`. */
|
|
53
|
+
sdk?: OtelSdkTraceBase | null;
|
|
54
|
+
/** `@opentelemetry/resources`. Needed by `setupTracing()`. */
|
|
55
|
+
resources?: OtelResources | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Make OpenTelemetry available to Pipecat (upstream's optional import).
|
|
59
|
+
* Pass `null` to disable tracing again.
|
|
60
|
+
*/
|
|
61
|
+
export declare function registerOpenTelemetry(modules: OpenTelemetryModules | null): void;
|
|
62
|
+
/** The registered OpenTelemetry modules, or null if tracing is unavailable. */
|
|
63
|
+
export declare function getOpenTelemetry(): OpenTelemetryModules | null;
|
|
64
|
+
/**
|
|
65
|
+
* Check if OpenTelemetry tracing is available and configured.
|
|
66
|
+
*
|
|
67
|
+
* @returns True if tracing is available, False otherwise.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isTracingAvailable(): boolean;
|
|
70
|
+
export interface SetupTracingOptions {
|
|
71
|
+
/** The name of the service for traces. Defaults to `"pipecat"`. */
|
|
72
|
+
serviceName?: string;
|
|
73
|
+
/**
|
|
74
|
+
* A pre-configured OpenTelemetry span exporter instance. If null, only
|
|
75
|
+
* console export will be available if enabled.
|
|
76
|
+
*/
|
|
77
|
+
exporter?: unknown;
|
|
78
|
+
/** Whether to also export traces to console (useful for debugging). */
|
|
79
|
+
consoleExport?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Set up OpenTelemetry tracing with a user-provided exporter.
|
|
83
|
+
*
|
|
84
|
+
* Requires `registerOpenTelemetry()` to have been called with the `sdk` and
|
|
85
|
+
* `resources` modules.
|
|
86
|
+
*
|
|
87
|
+
* @returns True if setup was successful, False otherwise.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* // With OTLP exporter
|
|
91
|
+
* const exporter = new OTLPTraceExporter({ url: "http://localhost:4318/v1/traces" });
|
|
92
|
+
* setupTracing({ serviceName: "my-service", exporter });
|
|
93
|
+
*/
|
|
94
|
+
export declare function setupTracing(options?: SetupTracingOptions): boolean;
|
|
95
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1,110 @@
|
|
|
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/setup.py
|
|
6
|
+
/**
|
|
7
|
+
* Core OpenTelemetry tracing utilities and setup for Pipecat.
|
|
8
|
+
*
|
|
9
|
+
* This module provides functions to check availability and configure
|
|
10
|
+
* OpenTelemetry tracing for Pipecat applications. It handles the optional
|
|
11
|
+
* nature of OpenTelemetry dependencies and provides a safe setup process.
|
|
12
|
+
*
|
|
13
|
+
* Porting notes: upstream detects OpenTelemetry by trying to import it. Core
|
|
14
|
+
* takes no third-party dependencies, so the OpenTelemetry JS modules are
|
|
15
|
+
* handed in instead, once, at startup:
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import * as api from "@opentelemetry/api";
|
|
19
|
+
* import * as sdk from "@opentelemetry/sdk-trace-base";
|
|
20
|
+
* import * as resources from "@opentelemetry/resources";
|
|
21
|
+
* import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
22
|
+
*
|
|
23
|
+
* registerOpenTelemetry({ api, sdk, resources });
|
|
24
|
+
* setupTracing({
|
|
25
|
+
* serviceName: "my-service",
|
|
26
|
+
* exporter: new OTLPTraceExporter({ url: "http://localhost:4318/v1/traces" }),
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* Until `registerOpenTelemetry()` is called, `isTracingAvailable()` is false and
|
|
30
|
+
* every tracing helper is a no-op, as upstream behaves without OpenTelemetry.
|
|
31
|
+
*/
|
|
32
|
+
import { rethrowIfCancelled } from "@pipedog/asyncio";
|
|
33
|
+
import { logger } from "../logger.js";
|
|
34
|
+
let openTelemetry = null;
|
|
35
|
+
/**
|
|
36
|
+
* Make OpenTelemetry available to Pipecat (upstream's optional import).
|
|
37
|
+
* Pass `null` to disable tracing again.
|
|
38
|
+
*/
|
|
39
|
+
export function registerOpenTelemetry(modules) {
|
|
40
|
+
openTelemetry = modules;
|
|
41
|
+
}
|
|
42
|
+
/** The registered OpenTelemetry modules, or null if tracing is unavailable. */
|
|
43
|
+
export function getOpenTelemetry() {
|
|
44
|
+
return openTelemetry;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if OpenTelemetry tracing is available and configured.
|
|
48
|
+
*
|
|
49
|
+
* @returns True if tracing is available, False otherwise.
|
|
50
|
+
*/
|
|
51
|
+
export function isTracingAvailable() {
|
|
52
|
+
return openTelemetry !== null;
|
|
53
|
+
}
|
|
54
|
+
function getenv(name) {
|
|
55
|
+
return globalThis.process?.env?.[name];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set up OpenTelemetry tracing with a user-provided exporter.
|
|
59
|
+
*
|
|
60
|
+
* Requires `registerOpenTelemetry()` to have been called with the `sdk` and
|
|
61
|
+
* `resources` modules.
|
|
62
|
+
*
|
|
63
|
+
* @returns True if setup was successful, False otherwise.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* // With OTLP exporter
|
|
67
|
+
* const exporter = new OTLPTraceExporter({ url: "http://localhost:4318/v1/traces" });
|
|
68
|
+
* setupTracing({ serviceName: "my-service", exporter });
|
|
69
|
+
*/
|
|
70
|
+
export function setupTracing(options = {}) {
|
|
71
|
+
const serviceName = options.serviceName ?? "pipecat";
|
|
72
|
+
const exporter = options.exporter ?? null;
|
|
73
|
+
const consoleExport = options.consoleExport ?? false;
|
|
74
|
+
const otel = openTelemetry;
|
|
75
|
+
if (!otel) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const { sdk, resources } = otel;
|
|
80
|
+
if (!sdk || !resources) {
|
|
81
|
+
throw new Error("the OpenTelemetry `sdk` and `resources` modules were not registered");
|
|
82
|
+
}
|
|
83
|
+
// Create a resource with service info
|
|
84
|
+
const resource = resources.resourceFromAttributes({
|
|
85
|
+
"service.name": serviceName,
|
|
86
|
+
"service.instance.id": getenv("HOSTNAME") ?? "unknown",
|
|
87
|
+
"deployment.environment": getenv("ENVIRONMENT") ?? "development",
|
|
88
|
+
});
|
|
89
|
+
const spanProcessors = [];
|
|
90
|
+
// Add console exporter if requested (good for debugging)
|
|
91
|
+
if (consoleExport) {
|
|
92
|
+
const consoleExporter = new sdk.ConsoleSpanExporter();
|
|
93
|
+
spanProcessors.push(new sdk.BatchSpanProcessor(consoleExporter));
|
|
94
|
+
}
|
|
95
|
+
// Add user-provided exporter if available
|
|
96
|
+
if (exporter) {
|
|
97
|
+
spanProcessors.push(new sdk.BatchSpanProcessor(exporter));
|
|
98
|
+
}
|
|
99
|
+
// Set up the tracer provider with the resource
|
|
100
|
+
const tracerProvider = new sdk.BasicTracerProvider({ resource, spanProcessors });
|
|
101
|
+
otel.api.trace.setGlobalTracerProvider(tracerProvider);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
rethrowIfCancelled(e);
|
|
106
|
+
logger.error(`Error setting up tracing: ${e instanceof Error ? e.message : e}`);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline-scoped tracing context for OpenTelemetry tracing in Pipecat.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a per-pipeline tracing context that holds the current
|
|
5
|
+
* conversation and turn span contexts. Each PipelineWorker creates its own
|
|
6
|
+
* TracingContext, ensuring concurrent pipelines do not interfere with each
|
|
7
|
+
* other.
|
|
8
|
+
*/
|
|
9
|
+
import { type OtelContext, type OtelSpanContext } from "./setup.ts";
|
|
10
|
+
/**
|
|
11
|
+
* Pipeline-scoped tracing context.
|
|
12
|
+
*
|
|
13
|
+
* Holds the current conversation and turn span contexts for a single pipeline.
|
|
14
|
+
* Created by PipelineWorker, passed to TurnTraceObserver (writer) and services
|
|
15
|
+
* (readers) via StartFrame.
|
|
16
|
+
*/
|
|
17
|
+
export declare class TracingContext {
|
|
18
|
+
protected _conversationContext: OtelContext | null;
|
|
19
|
+
protected _turnContext: OtelContext | null;
|
|
20
|
+
protected _conversationId: string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Set the current conversation context.
|
|
23
|
+
*
|
|
24
|
+
* @param spanContext The span context for the current conversation or null to clear it.
|
|
25
|
+
* @param conversationId Optional ID for the conversation.
|
|
26
|
+
*/
|
|
27
|
+
setConversationContext(spanContext: OtelSpanContext | null, conversationId?: string | null): void;
|
|
28
|
+
/**
|
|
29
|
+
* Get the OpenTelemetry context for the current conversation.
|
|
30
|
+
*
|
|
31
|
+
* @returns The current conversation context or null if not available.
|
|
32
|
+
*/
|
|
33
|
+
getConversationContext(): OtelContext | null;
|
|
34
|
+
/**
|
|
35
|
+
* Set the current turn context.
|
|
36
|
+
*
|
|
37
|
+
* @param spanContext The span context for the current turn or null to clear it.
|
|
38
|
+
*/
|
|
39
|
+
setTurnContext(spanContext: OtelSpanContext | null): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get the OpenTelemetry context for the current turn.
|
|
42
|
+
*
|
|
43
|
+
* @returns The current turn context or null if not available.
|
|
44
|
+
*/
|
|
45
|
+
getTurnContext(): OtelContext | null;
|
|
46
|
+
/** The ID for the current conversation, or null if not available. */
|
|
47
|
+
get conversationId(): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Generate a new conversation ID.
|
|
50
|
+
*
|
|
51
|
+
* @returns A new randomly generated UUID string.
|
|
52
|
+
*/
|
|
53
|
+
static generateConversationId(): string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=tracing_context.d.ts.map
|
|
@@ -0,0 +1,97 @@
|
|
|
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/tracing_context.py
|
|
6
|
+
/**
|
|
7
|
+
* Pipeline-scoped tracing context for OpenTelemetry tracing in Pipecat.
|
|
8
|
+
*
|
|
9
|
+
* This module provides a per-pipeline tracing context that holds the current
|
|
10
|
+
* conversation and turn span contexts. Each PipelineWorker creates its own
|
|
11
|
+
* TracingContext, ensuring concurrent pipelines do not interfere with each
|
|
12
|
+
* other.
|
|
13
|
+
*/
|
|
14
|
+
import { getOpenTelemetry } from "./setup.js";
|
|
15
|
+
/** Wrap a span context in a non-recording span and put it in a context. */
|
|
16
|
+
function contextWithSpanContext(spanContext) {
|
|
17
|
+
const otel = getOpenTelemetry();
|
|
18
|
+
if (!otel)
|
|
19
|
+
return null;
|
|
20
|
+
const nonRecordingSpan = otel.api.trace.wrapSpanContext(spanContext);
|
|
21
|
+
return otel.api.trace.setSpan(otel.api.context.active(), nonRecordingSpan);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pipeline-scoped tracing context.
|
|
25
|
+
*
|
|
26
|
+
* Holds the current conversation and turn span contexts for a single pipeline.
|
|
27
|
+
* Created by PipelineWorker, passed to TurnTraceObserver (writer) and services
|
|
28
|
+
* (readers) via StartFrame.
|
|
29
|
+
*/
|
|
30
|
+
export class TracingContext {
|
|
31
|
+
_conversationContext = null;
|
|
32
|
+
_turnContext = null;
|
|
33
|
+
_conversationId = null;
|
|
34
|
+
/**
|
|
35
|
+
* Set the current conversation context.
|
|
36
|
+
*
|
|
37
|
+
* @param spanContext The span context for the current conversation or null to clear it.
|
|
38
|
+
* @param conversationId Optional ID for the conversation.
|
|
39
|
+
*/
|
|
40
|
+
setConversationContext(spanContext, conversationId = null) {
|
|
41
|
+
if (getOpenTelemetry() === null) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this._conversationId = conversationId;
|
|
45
|
+
if (spanContext) {
|
|
46
|
+
this._conversationContext = contextWithSpanContext(spanContext);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this._conversationContext = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the OpenTelemetry context for the current conversation.
|
|
54
|
+
*
|
|
55
|
+
* @returns The current conversation context or null if not available.
|
|
56
|
+
*/
|
|
57
|
+
getConversationContext() {
|
|
58
|
+
return this._conversationContext;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Set the current turn context.
|
|
62
|
+
*
|
|
63
|
+
* @param spanContext The span context for the current turn or null to clear it.
|
|
64
|
+
*/
|
|
65
|
+
setTurnContext(spanContext) {
|
|
66
|
+
if (getOpenTelemetry() === null) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (spanContext) {
|
|
70
|
+
this._turnContext = contextWithSpanContext(spanContext);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this._turnContext = null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the OpenTelemetry context for the current turn.
|
|
78
|
+
*
|
|
79
|
+
* @returns The current turn context or null if not available.
|
|
80
|
+
*/
|
|
81
|
+
getTurnContext() {
|
|
82
|
+
return this._turnContext;
|
|
83
|
+
}
|
|
84
|
+
/** The ID for the current conversation, or null if not available. */
|
|
85
|
+
get conversationId() {
|
|
86
|
+
return this._conversationId;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Generate a new conversation ID.
|
|
90
|
+
*
|
|
91
|
+
* @returns A new randomly generated UUID string.
|
|
92
|
+
*/
|
|
93
|
+
static generateConversationId() {
|
|
94
|
+
return crypto.randomUUID();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=tracing_context.js.map
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { BaseObserver, type BaseObserverOptions, type FramePushed } from "../../observers/base_observer.ts";
|
|
2
|
+
import type { TurnTrackingObserver } from "../../observers/turn_tracking_observer.ts";
|
|
3
|
+
import type { UserBotLatencyObserver } from "../../observers/user_bot_latency_observer.ts";
|
|
4
|
+
import { type OtelAttributeValue, type OtelSpan, type OtelSpanContext, type OtelTracer } from "./setup.ts";
|
|
5
|
+
import { TracingContext } from "./tracing_context.ts";
|
|
6
|
+
export interface TurnTraceObserverOptions extends BaseObserverOptions {
|
|
7
|
+
/** The turn tracking observer to monitor. */
|
|
8
|
+
turnTracker: TurnTrackingObserver;
|
|
9
|
+
/** The latency tracking observer for user-bot latency. */
|
|
10
|
+
latencyTracker: UserBotLatencyObserver;
|
|
11
|
+
/** Optional conversation ID for grouping turns. */
|
|
12
|
+
conversationId?: string | null;
|
|
13
|
+
/** Additional attributes to add to spans. */
|
|
14
|
+
additionalSpanAttributes?: Record<string, OtelAttributeValue> | null;
|
|
15
|
+
/** Pipeline-scoped tracing context for span hierarchy. */
|
|
16
|
+
tracingContext?: TracingContext | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Observer that creates trace spans for each conversation turn.
|
|
20
|
+
*
|
|
21
|
+
* This observer uses TurnTrackingObserver to track turns and creates
|
|
22
|
+
* OpenTelemetry spans for each turn. Service spans (STT, LLM, TTS)
|
|
23
|
+
* become children of the turn spans.
|
|
24
|
+
*
|
|
25
|
+
* If conversation tracing is enabled, turns become children of a
|
|
26
|
+
* conversation span that encapsulates the entire session.
|
|
27
|
+
*/
|
|
28
|
+
export declare class TurnTraceObserver extends BaseObserver {
|
|
29
|
+
protected _turnTracker: TurnTrackingObserver;
|
|
30
|
+
protected _latencyTracker: UserBotLatencyObserver;
|
|
31
|
+
protected _tracingContext: TracingContext;
|
|
32
|
+
protected _currentSpan: OtelSpan | null;
|
|
33
|
+
protected _currentTurnNumber: number;
|
|
34
|
+
protected _traceContextMap: Map<number, OtelSpanContext>;
|
|
35
|
+
protected _tracer: OtelTracer | null;
|
|
36
|
+
protected _conversationSpan: OtelSpan | null;
|
|
37
|
+
protected _conversationId: string | null;
|
|
38
|
+
protected _additionalSpanAttributes: Record<string, OtelAttributeValue>;
|
|
39
|
+
/** Initialize the turn trace observer. */
|
|
40
|
+
constructor(options: TurnTraceObserverOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Handle latency measurement events.
|
|
43
|
+
*
|
|
44
|
+
* Called when the latency tracker measures user-to-bot latency.
|
|
45
|
+
* Adds the latency as an attribute to the current turn span.
|
|
46
|
+
*
|
|
47
|
+
* @param latencySeconds The measured latency in seconds.
|
|
48
|
+
*/
|
|
49
|
+
protected _handleLatencyMeasured(latencySeconds: number): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Process a frame without modifying it.
|
|
52
|
+
*
|
|
53
|
+
* Handles StartFrame to begin conversation tracing early, ensuring
|
|
54
|
+
* that any spans created before Turn 1 (e.g., from flow initialization)
|
|
55
|
+
* are properly attached to the conversation trace.
|
|
56
|
+
*
|
|
57
|
+
* @param data The frame push event data.
|
|
58
|
+
*/
|
|
59
|
+
onPushFrame(data: FramePushed): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Start a new conversation span.
|
|
62
|
+
*
|
|
63
|
+
* @param conversationId Optional custom ID for the conversation. If null, a UUID will be generated.
|
|
64
|
+
*/
|
|
65
|
+
startConversationTracing(conversationId?: string | null): void;
|
|
66
|
+
/** End the current conversation span and ensure the last turn is closed. */
|
|
67
|
+
endConversationTracing(): void;
|
|
68
|
+
/** Handle a turn start event by creating a new span. */
|
|
69
|
+
protected _handleTurnStarted(turnNumber: number): Promise<void>;
|
|
70
|
+
/** Handle a turn end event by ending the current span. */
|
|
71
|
+
protected _handleTurnEnded(turnNumber: number, duration: number, wasInterrupted: boolean): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Get the span context for the current turn.
|
|
74
|
+
*
|
|
75
|
+
* This can be used by services to create child spans.
|
|
76
|
+
*
|
|
77
|
+
* @returns The current turn's span context or null if not available.
|
|
78
|
+
*/
|
|
79
|
+
getCurrentTurnContext(): OtelSpanContext | null;
|
|
80
|
+
/**
|
|
81
|
+
* Get the span context for a specific turn.
|
|
82
|
+
*
|
|
83
|
+
* This can be used by services to create child spans.
|
|
84
|
+
*
|
|
85
|
+
* @param turnNumber The turn number to get context for.
|
|
86
|
+
* @returns The specified turn's span context or null if not available.
|
|
87
|
+
*/
|
|
88
|
+
getTurnContext(turnNumber: number): OtelSpanContext | null;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=turn_trace_observer.d.ts.map
|
|
@@ -0,0 +1,219 @@
|
|
|
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
|
+
import { StartFrame } from "../../frames/frames.js";
|
|
14
|
+
import { BaseObserver, } from "../../observers/base_observer.js";
|
|
15
|
+
import { logger } from "../logger.js";
|
|
16
|
+
import { getOpenTelemetry, isTracingAvailable, } from "./setup.js";
|
|
17
|
+
import { TracingContext } from "./tracing_context.js";
|
|
18
|
+
/**
|
|
19
|
+
* Observer that creates trace spans for each conversation turn.
|
|
20
|
+
*
|
|
21
|
+
* This observer uses TurnTrackingObserver to track turns and creates
|
|
22
|
+
* OpenTelemetry spans for each turn. Service spans (STT, LLM, TTS)
|
|
23
|
+
* become children of the turn spans.
|
|
24
|
+
*
|
|
25
|
+
* If conversation tracing is enabled, turns become children of a
|
|
26
|
+
* conversation span that encapsulates the entire session.
|
|
27
|
+
*/
|
|
28
|
+
export class TurnTraceObserver extends BaseObserver {
|
|
29
|
+
_turnTracker;
|
|
30
|
+
_latencyTracker;
|
|
31
|
+
_tracingContext;
|
|
32
|
+
_currentSpan = null;
|
|
33
|
+
_currentTurnNumber = 0;
|
|
34
|
+
_traceContextMap = new Map();
|
|
35
|
+
_tracer;
|
|
36
|
+
// Conversation tracking properties
|
|
37
|
+
_conversationSpan = null;
|
|
38
|
+
_conversationId;
|
|
39
|
+
_additionalSpanAttributes;
|
|
40
|
+
/** Initialize the turn trace observer. */
|
|
41
|
+
constructor(options) {
|
|
42
|
+
super(options);
|
|
43
|
+
this._turnTracker = options.turnTracker;
|
|
44
|
+
this._latencyTracker = options.latencyTracker;
|
|
45
|
+
this._tracingContext = options.tracingContext || new TracingContext();
|
|
46
|
+
this._tracer = getOpenTelemetry()?.api.trace.getTracer("pipecat.turn") ?? null;
|
|
47
|
+
this._conversationId = options.conversationId ?? null;
|
|
48
|
+
this._additionalSpanAttributes = options.additionalSpanAttributes || {};
|
|
49
|
+
this._turnTracker.eventHandler("on_turn_started", async (_tracker, turnNumber) => {
|
|
50
|
+
await this._handleTurnStarted(turnNumber);
|
|
51
|
+
});
|
|
52
|
+
this._turnTracker.eventHandler("on_turn_ended", async (_tracker, turnNumber, duration, wasInterrupted) => {
|
|
53
|
+
await this._handleTurnEnded(turnNumber, duration, wasInterrupted);
|
|
54
|
+
});
|
|
55
|
+
this._latencyTracker.eventHandler("on_latency_measured", async (_tracker, latencySeconds) => {
|
|
56
|
+
await this._handleLatencyMeasured(latencySeconds);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Handle latency measurement events.
|
|
61
|
+
*
|
|
62
|
+
* Called when the latency tracker measures user-to-bot latency.
|
|
63
|
+
* Adds the latency as an attribute to the current turn span.
|
|
64
|
+
*
|
|
65
|
+
* @param latencySeconds The measured latency in seconds.
|
|
66
|
+
*/
|
|
67
|
+
async _handleLatencyMeasured(latencySeconds) {
|
|
68
|
+
if (this._currentSpan && isTracingAvailable()) {
|
|
69
|
+
this._currentSpan.setAttribute("turn.user_bot_latency_seconds", latencySeconds);
|
|
70
|
+
logger.debug(`Turn ${this._currentTurnNumber} user-bot latency: ${latencySeconds.toFixed(3)}s`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Process a frame without modifying it.
|
|
75
|
+
*
|
|
76
|
+
* Handles StartFrame to begin conversation tracing early, ensuring
|
|
77
|
+
* that any spans created before Turn 1 (e.g., from flow initialization)
|
|
78
|
+
* are properly attached to the conversation trace.
|
|
79
|
+
*
|
|
80
|
+
* @param data The frame push event data.
|
|
81
|
+
*/
|
|
82
|
+
async onPushFrame(data) {
|
|
83
|
+
if (data.frame instanceof StartFrame && !this._conversationSpan) {
|
|
84
|
+
this.startConversationTracing(this._conversationId);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Start a new conversation span.
|
|
89
|
+
*
|
|
90
|
+
* @param conversationId Optional custom ID for the conversation. If null, a UUID will be generated.
|
|
91
|
+
*/
|
|
92
|
+
startConversationTracing(conversationId = null) {
|
|
93
|
+
if (!isTracingAvailable() || !this._tracer) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Generate a conversation ID if not provided
|
|
97
|
+
if (conversationId === null) {
|
|
98
|
+
conversationId = TracingContext.generateConversationId();
|
|
99
|
+
logger.debug(`Generated new conversation ID: ${conversationId}`);
|
|
100
|
+
}
|
|
101
|
+
this._conversationId = conversationId;
|
|
102
|
+
// Create a new span for this conversation
|
|
103
|
+
const conversationSpan = this._tracer.startSpan("conversation");
|
|
104
|
+
this._conversationSpan = conversationSpan;
|
|
105
|
+
// Set span attributes
|
|
106
|
+
conversationSpan.setAttribute("conversation.id", conversationId);
|
|
107
|
+
conversationSpan.setAttribute("conversation.type", "voice");
|
|
108
|
+
// Set custom otel attributes if provided
|
|
109
|
+
for (const [k, v] of Object.entries(this._additionalSpanAttributes || {})) {
|
|
110
|
+
conversationSpan.setAttribute(k, v);
|
|
111
|
+
}
|
|
112
|
+
// Update the tracing context
|
|
113
|
+
this._tracingContext.setConversationContext(conversationSpan.spanContext(), conversationId);
|
|
114
|
+
logger.debug(`Started tracing for Conversation ${conversationId}`);
|
|
115
|
+
}
|
|
116
|
+
/** End the current conversation span and ensure the last turn is closed. */
|
|
117
|
+
endConversationTracing() {
|
|
118
|
+
if (!isTracingAvailable()) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// First, ensure any active turn is closed properly
|
|
122
|
+
if (this._currentSpan) {
|
|
123
|
+
// If we have an active turn span, end it with a standard duration
|
|
124
|
+
logger.debug(`Ending Turn ${this._currentTurnNumber} due to conversation end`);
|
|
125
|
+
this._currentSpan.setAttribute("turn.was_interrupted", true);
|
|
126
|
+
this._currentSpan.setAttribute("turn.ended_by_conversation_end", true);
|
|
127
|
+
this._currentSpan.end();
|
|
128
|
+
this._currentSpan = null;
|
|
129
|
+
// Clear the turn context
|
|
130
|
+
this._tracingContext.setTurnContext(null);
|
|
131
|
+
}
|
|
132
|
+
// Now end the conversation span if it exists
|
|
133
|
+
if (this._conversationSpan) {
|
|
134
|
+
// End the span
|
|
135
|
+
this._conversationSpan.end();
|
|
136
|
+
this._conversationSpan = null;
|
|
137
|
+
// Clear the conversation context
|
|
138
|
+
this._tracingContext.setConversationContext(null);
|
|
139
|
+
logger.debug(`Ended tracing for Conversation ${this._conversationId}`);
|
|
140
|
+
this._conversationId = null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Handle a turn start event by creating a new span. */
|
|
144
|
+
async _handleTurnStarted(turnNumber) {
|
|
145
|
+
if (!isTracingAvailable() || !this._tracer) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (turnNumber === 1 && !this._conversationSpan) {
|
|
149
|
+
this.startConversationTracing(this._conversationId);
|
|
150
|
+
}
|
|
151
|
+
// Get the parent context - conversation if available, otherwise use root context
|
|
152
|
+
let parentContext = null;
|
|
153
|
+
if (this._conversationSpan) {
|
|
154
|
+
parentContext = this._tracingContext.getConversationContext();
|
|
155
|
+
}
|
|
156
|
+
// Create a new span for this turn
|
|
157
|
+
const currentSpan = this._tracer.startSpan("turn", undefined, parentContext ?? undefined);
|
|
158
|
+
this._currentSpan = currentSpan;
|
|
159
|
+
this._currentTurnNumber = turnNumber;
|
|
160
|
+
// Set span attributes
|
|
161
|
+
currentSpan.setAttribute("turn.number", turnNumber);
|
|
162
|
+
currentSpan.setAttribute("turn.type", "conversation");
|
|
163
|
+
// Add conversation ID attribute if available
|
|
164
|
+
if (this._conversationId) {
|
|
165
|
+
currentSpan.setAttribute("conversation.id", this._conversationId);
|
|
166
|
+
}
|
|
167
|
+
// Store the span context so services can become children of this span
|
|
168
|
+
this._traceContextMap.set(turnNumber, currentSpan.spanContext());
|
|
169
|
+
// Update the tracing context so services can access this span
|
|
170
|
+
this._tracingContext.setTurnContext(currentSpan.spanContext());
|
|
171
|
+
logger.debug(`Started tracing for Turn ${turnNumber}`);
|
|
172
|
+
}
|
|
173
|
+
/** Handle a turn end event by ending the current span. */
|
|
174
|
+
async _handleTurnEnded(turnNumber, duration, wasInterrupted) {
|
|
175
|
+
if (!isTracingAvailable() || !this._currentSpan) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Only end the span if it matches the current turn
|
|
179
|
+
if (turnNumber === this._currentTurnNumber) {
|
|
180
|
+
// Set additional attributes
|
|
181
|
+
this._currentSpan.setAttribute("turn.duration_seconds", duration);
|
|
182
|
+
this._currentSpan.setAttribute("turn.was_interrupted", wasInterrupted);
|
|
183
|
+
// End the span
|
|
184
|
+
this._currentSpan.end();
|
|
185
|
+
this._currentSpan = null;
|
|
186
|
+
// Clear the turn context
|
|
187
|
+
this._tracingContext.setTurnContext(null);
|
|
188
|
+
logger.debug(`Ended tracing for Turn ${turnNumber}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get the span context for the current turn.
|
|
193
|
+
*
|
|
194
|
+
* This can be used by services to create child spans.
|
|
195
|
+
*
|
|
196
|
+
* @returns The current turn's span context or null if not available.
|
|
197
|
+
*/
|
|
198
|
+
getCurrentTurnContext() {
|
|
199
|
+
if (!isTracingAvailable() || !this._currentSpan) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return this._currentSpan.spanContext();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get the span context for a specific turn.
|
|
206
|
+
*
|
|
207
|
+
* This can be used by services to create child spans.
|
|
208
|
+
*
|
|
209
|
+
* @param turnNumber The turn number to get context for.
|
|
210
|
+
* @returns The specified turn's span context or null if not available.
|
|
211
|
+
*/
|
|
212
|
+
getTurnContext(turnNumber) {
|
|
213
|
+
if (!isTracingAvailable()) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
return this._traceContextMap.get(turnNumber) ?? null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=turn_trace_observer.js.map
|