@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,131 @@
|
|
|
1
|
+
/** Audio contexts a TTS service plays one after another. */
|
|
2
|
+
import { Queue } from "@pipedog/asyncio";
|
|
3
|
+
import { Frame, TTSAudioRawFrame } from "../../frames/frames.ts";
|
|
4
|
+
import { FrameQueue } from "../frame_queue.ts";
|
|
5
|
+
export interface AudioContextFrameOptions {
|
|
6
|
+
/** The audio context to play. */
|
|
7
|
+
contextId: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Marks where an audio context plays among the queued frames.
|
|
11
|
+
*
|
|
12
|
+
* - `contextId`: the audio context to play.
|
|
13
|
+
*/
|
|
14
|
+
export declare class AudioContextFrame extends Frame {
|
|
15
|
+
contextId: string;
|
|
16
|
+
constructor(options: AudioContextFrameOptions);
|
|
17
|
+
}
|
|
18
|
+
/** The bytes of a sample split across audio chunks, with their format. */
|
|
19
|
+
interface AudioRemainder {
|
|
20
|
+
audio: Uint8Array;
|
|
21
|
+
sampleRate: number;
|
|
22
|
+
numChannels: number;
|
|
23
|
+
}
|
|
24
|
+
/** An item queued on an audio context: audio, other frames, word timestamps... `null` ends it. */
|
|
25
|
+
export type AudioContextItem = unknown;
|
|
26
|
+
/**
|
|
27
|
+
* Audio contexts and frames, played in the order they are queued.
|
|
28
|
+
*
|
|
29
|
+
* Each audio context has its own queue of items (audio, other frames, word
|
|
30
|
+
* timestamps), so a context's audio can arrive while an earlier one is still
|
|
31
|
+
* playing. `nextForPlayback` returns the next context or frame to play, and
|
|
32
|
+
* `get` returns a context's items until the context ends.
|
|
33
|
+
*
|
|
34
|
+
* `playingContextId` is the context `nextForPlayback` returned last. The
|
|
35
|
+
* caller sets it back to `null` when that context stops playing.
|
|
36
|
+
*/
|
|
37
|
+
export declare class AudioContextManager {
|
|
38
|
+
#private;
|
|
39
|
+
protected _contexts: Map<string, Queue<unknown>>;
|
|
40
|
+
protected _remainders: Map<string, AudioRemainder>;
|
|
41
|
+
protected _queue: FrameQueue<Frame | null>;
|
|
42
|
+
playingContextId: string | null;
|
|
43
|
+
/** The audio contexts that haven't finished playing. */
|
|
44
|
+
get contextIds(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Whether an audio context exists and hasn't finished playing.
|
|
47
|
+
*
|
|
48
|
+
* @param contextId The audio context to check.
|
|
49
|
+
*/
|
|
50
|
+
available(contextId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Create an audio context and queue it to play after what's already queued.
|
|
53
|
+
*
|
|
54
|
+
* @param contextId The audio context to create.
|
|
55
|
+
* @param options.interruptible Whether `reset` drops the context while it
|
|
56
|
+
* waits to play. Defaults to true.
|
|
57
|
+
*/
|
|
58
|
+
create(contextId: string, options?: {
|
|
59
|
+
interruptible?: boolean;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Append an item to an audio context. `null` ends the context.
|
|
63
|
+
*
|
|
64
|
+
* Audio is trimmed to whole samples, and a split sample is carried to the
|
|
65
|
+
* context's next audio frame. Providers may cut their PCM stream at any
|
|
66
|
+
* byte, but consumers read audio frame by frame.
|
|
67
|
+
*
|
|
68
|
+
* @param contextId The audio context to append to. It must exist.
|
|
69
|
+
* @param item The item to append, or `null` to end the context.
|
|
70
|
+
*/
|
|
71
|
+
append(contextId: string, item: AudioContextItem): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Restart the wait of `get` for an audio context, if it exists.
|
|
74
|
+
*
|
|
75
|
+
* @param contextId The audio context still in use.
|
|
76
|
+
*/
|
|
77
|
+
keepalive(contextId: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Queue a frame to play after what's already queued.
|
|
80
|
+
*
|
|
81
|
+
* @param frame The frame to queue.
|
|
82
|
+
*/
|
|
83
|
+
putFrame(frame: Frame): Promise<void>;
|
|
84
|
+
/** End playback once everything already queued has played. */
|
|
85
|
+
endPlayback(): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* Wait for the next audio context or frame to play.
|
|
88
|
+
*
|
|
89
|
+
* Contexts removed before they play are skipped.
|
|
90
|
+
*
|
|
91
|
+
* @returns An `AudioContextFrame`, whose context becomes the playing one,
|
|
92
|
+
* another queued frame, or `null` when playback ends.
|
|
93
|
+
*/
|
|
94
|
+
nextForPlayback(): Promise<Frame | null>;
|
|
95
|
+
/**
|
|
96
|
+
* Return an audio context's next item, waiting up to `timeout` for it.
|
|
97
|
+
*
|
|
98
|
+
* A keepalive restarts the wait and is not returned.
|
|
99
|
+
*
|
|
100
|
+
* @param contextId The audio context to read.
|
|
101
|
+
* @param timeout Seconds to wait for an item.
|
|
102
|
+
* @returns The next item, or `null` when the context ends.
|
|
103
|
+
* @throws TimeoutError If no item arrives in time.
|
|
104
|
+
*/
|
|
105
|
+
get(contextId: string, timeout: number): Promise<AudioContextItem>;
|
|
106
|
+
/**
|
|
107
|
+
* Remove an audio context and its queued items.
|
|
108
|
+
*
|
|
109
|
+
* @param contextId The audio context to remove.
|
|
110
|
+
*/
|
|
111
|
+
remove(contextId: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Drop the frames and contexts waiting to play, except uninterruptible ones.
|
|
114
|
+
*
|
|
115
|
+
* The dropped contexts stay available until they are removed.
|
|
116
|
+
*/
|
|
117
|
+
reset(): void;
|
|
118
|
+
/** Take the next item in play order. */
|
|
119
|
+
protected _nextQueued(): Promise<Frame | null>;
|
|
120
|
+
/**
|
|
121
|
+
* Trim an audio frame to whole samples, carrying a split sample forward.
|
|
122
|
+
*
|
|
123
|
+
* @returns False if the frame holds less than one whole sample and should
|
|
124
|
+
* be dropped, true otherwise.
|
|
125
|
+
*/
|
|
126
|
+
protected _alignAudioFrame(contextId: string, frame: TTSAudioRawFrame): boolean;
|
|
127
|
+
/** Queue a context's held-back partial sample, zero-padded to a whole one. */
|
|
128
|
+
protected _flushAudioRemainder(contextId: string): Promise<void>;
|
|
129
|
+
}
|
|
130
|
+
export {};
|
|
131
|
+
//# sourceMappingURL=audio_context_manager.d.ts.map
|
|
@@ -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/context/audio_context_manager.py
|
|
6
|
+
/** Audio contexts a TTS service plays one after another. */
|
|
7
|
+
import { Queue, waitFor } from "@pipedog/asyncio";
|
|
8
|
+
import { Frame, TTSAudioRawFrame, TTSStoppedFrame } from "../../frames/frames.js";
|
|
9
|
+
import { FrameQueue } from "../frame_queue.js";
|
|
10
|
+
/**
|
|
11
|
+
* Marks where an audio context plays among the queued frames.
|
|
12
|
+
*
|
|
13
|
+
* - `contextId`: the audio context to play.
|
|
14
|
+
*/
|
|
15
|
+
export class AudioContextFrame extends Frame {
|
|
16
|
+
contextId;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super(options);
|
|
19
|
+
this.contextId = options.contextId;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const KEEPALIVE = Symbol("AudioContextManager.KEEPALIVE");
|
|
23
|
+
function concatBytes(a, b) {
|
|
24
|
+
const out = new Uint8Array(a.length + b.length);
|
|
25
|
+
out.set(a, 0);
|
|
26
|
+
out.set(b, a.length);
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Audio contexts and frames, played in the order they are queued.
|
|
31
|
+
*
|
|
32
|
+
* Each audio context has its own queue of items (audio, other frames, word
|
|
33
|
+
* timestamps), so a context's audio can arrive while an earlier one is still
|
|
34
|
+
* playing. `nextForPlayback` returns the next context or frame to play, and
|
|
35
|
+
* `get` returns a context's items until the context ends.
|
|
36
|
+
*
|
|
37
|
+
* `playingContextId` is the context `nextForPlayback` returned last. The
|
|
38
|
+
* caller sets it back to `null` when that context stops playing.
|
|
39
|
+
*/
|
|
40
|
+
export class AudioContextManager {
|
|
41
|
+
_contexts = new Map();
|
|
42
|
+
// Trailing bytes of a sample split across audio chunks, per context.
|
|
43
|
+
_remainders = new Map();
|
|
44
|
+
// Contexts and frames in play order. null ends playback.
|
|
45
|
+
_queue = new FrameQueue((item) => (item instanceof Frame ? item : null));
|
|
46
|
+
playingContextId = null;
|
|
47
|
+
/** The audio contexts that haven't finished playing. */
|
|
48
|
+
get contextIds() {
|
|
49
|
+
return [...this._contexts.keys()];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Whether an audio context exists and hasn't finished playing.
|
|
53
|
+
*
|
|
54
|
+
* @param contextId The audio context to check.
|
|
55
|
+
*/
|
|
56
|
+
available(contextId) {
|
|
57
|
+
return this._contexts.has(contextId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an audio context and queue it to play after what's already queued.
|
|
61
|
+
*
|
|
62
|
+
* @param contextId The audio context to create.
|
|
63
|
+
* @param options.interruptible Whether `reset` drops the context while it
|
|
64
|
+
* waits to play. Defaults to true.
|
|
65
|
+
*/
|
|
66
|
+
async create(contextId, options = {}) {
|
|
67
|
+
this._contexts.set(contextId, new Queue());
|
|
68
|
+
const frame = new AudioContextFrame({ contextId });
|
|
69
|
+
frame.interruptible = options.interruptible ?? true;
|
|
70
|
+
await this._queue.put(frame);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Append an item to an audio context. `null` ends the context.
|
|
74
|
+
*
|
|
75
|
+
* Audio is trimmed to whole samples, and a split sample is carried to the
|
|
76
|
+
* context's next audio frame. Providers may cut their PCM stream at any
|
|
77
|
+
* byte, but consumers read audio frame by frame.
|
|
78
|
+
*
|
|
79
|
+
* @param contextId The audio context to append to. It must exist.
|
|
80
|
+
* @param item The item to append, or `null` to end the context.
|
|
81
|
+
*/
|
|
82
|
+
async append(contextId, item) {
|
|
83
|
+
if (item instanceof TTSAudioRawFrame && !this._alignAudioFrame(contextId, item)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// The context's audio ends here, so a held-back partial sample is
|
|
87
|
+
// queued before the stop frame (or the end marker) that follows it.
|
|
88
|
+
if (item === null || item instanceof TTSStoppedFrame) {
|
|
89
|
+
await this._flushAudioRemainder(contextId);
|
|
90
|
+
}
|
|
91
|
+
await this.#context(contextId).put(item);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Restart the wait of `get` for an audio context, if it exists.
|
|
95
|
+
*
|
|
96
|
+
* @param contextId The audio context still in use.
|
|
97
|
+
*/
|
|
98
|
+
keepalive(contextId) {
|
|
99
|
+
if (this.available(contextId)) {
|
|
100
|
+
this.#context(contextId).putNowait(KEEPALIVE);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Queue a frame to play after what's already queued.
|
|
105
|
+
*
|
|
106
|
+
* @param frame The frame to queue.
|
|
107
|
+
*/
|
|
108
|
+
async putFrame(frame) {
|
|
109
|
+
await this._queue.put(frame);
|
|
110
|
+
}
|
|
111
|
+
/** End playback once everything already queued has played. */
|
|
112
|
+
async endPlayback() {
|
|
113
|
+
await this._queue.put(null);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Wait for the next audio context or frame to play.
|
|
117
|
+
*
|
|
118
|
+
* Contexts removed before they play are skipped.
|
|
119
|
+
*
|
|
120
|
+
* @returns An `AudioContextFrame`, whose context becomes the playing one,
|
|
121
|
+
* another queued frame, or `null` when playback ends.
|
|
122
|
+
*/
|
|
123
|
+
async nextForPlayback() {
|
|
124
|
+
let item = await this._nextQueued();
|
|
125
|
+
while (item instanceof AudioContextFrame && !this.available(item.contextId)) {
|
|
126
|
+
item = await this._nextQueued();
|
|
127
|
+
}
|
|
128
|
+
if (item instanceof AudioContextFrame) {
|
|
129
|
+
this.playingContextId = item.contextId;
|
|
130
|
+
}
|
|
131
|
+
return item;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Return an audio context's next item, waiting up to `timeout` for it.
|
|
135
|
+
*
|
|
136
|
+
* A keepalive restarts the wait and is not returned.
|
|
137
|
+
*
|
|
138
|
+
* @param contextId The audio context to read.
|
|
139
|
+
* @param timeout Seconds to wait for an item.
|
|
140
|
+
* @returns The next item, or `null` when the context ends.
|
|
141
|
+
* @throws TimeoutError If no item arrives in time.
|
|
142
|
+
*/
|
|
143
|
+
async get(contextId, timeout) {
|
|
144
|
+
const queue = this.#context(contextId);
|
|
145
|
+
let item = KEEPALIVE;
|
|
146
|
+
while (item === KEEPALIVE) {
|
|
147
|
+
item = await waitFor(() => queue.get(), timeout);
|
|
148
|
+
}
|
|
149
|
+
return item;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Remove an audio context and its queued items.
|
|
153
|
+
*
|
|
154
|
+
* @param contextId The audio context to remove.
|
|
155
|
+
*/
|
|
156
|
+
remove(contextId) {
|
|
157
|
+
this._contexts.delete(contextId);
|
|
158
|
+
this._remainders.delete(contextId);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Drop the frames and contexts waiting to play, except uninterruptible ones.
|
|
162
|
+
*
|
|
163
|
+
* The dropped contexts stay available until they are removed.
|
|
164
|
+
*/
|
|
165
|
+
reset() {
|
|
166
|
+
this._queue.reset();
|
|
167
|
+
}
|
|
168
|
+
/** Take the next item in play order. */
|
|
169
|
+
async _nextQueued() {
|
|
170
|
+
const item = await this._queue.get();
|
|
171
|
+
this._queue.taskDone();
|
|
172
|
+
return item;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Trim an audio frame to whole samples, carrying a split sample forward.
|
|
176
|
+
*
|
|
177
|
+
* @returns False if the frame holds less than one whole sample and should
|
|
178
|
+
* be dropped, true otherwise.
|
|
179
|
+
*/
|
|
180
|
+
_alignAudioFrame(contextId, frame) {
|
|
181
|
+
const blockSize = 2 * Math.max(frame.numChannels, 1);
|
|
182
|
+
const remainder = this._remainders.get(contextId);
|
|
183
|
+
this._remainders.delete(contextId);
|
|
184
|
+
if (!remainder && frame.audio.length % blockSize === 0) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
const audio = remainder ? concatBytes(remainder.audio, frame.audio) : frame.audio;
|
|
188
|
+
const alignedLength = audio.length - (audio.length % blockSize);
|
|
189
|
+
if (alignedLength < audio.length) {
|
|
190
|
+
this._remainders.set(contextId, {
|
|
191
|
+
audio: audio.slice(alignedLength),
|
|
192
|
+
sampleRate: frame.sampleRate,
|
|
193
|
+
numChannels: frame.numChannels,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (alignedLength) {
|
|
197
|
+
frame.audio = audio.slice(0, alignedLength);
|
|
198
|
+
frame.numFrames = Math.trunc(alignedLength / blockSize);
|
|
199
|
+
}
|
|
200
|
+
return alignedLength > 0;
|
|
201
|
+
}
|
|
202
|
+
/** Queue a context's held-back partial sample, zero-padded to a whole one. */
|
|
203
|
+
async _flushAudioRemainder(contextId) {
|
|
204
|
+
const remainder = this._remainders.get(contextId);
|
|
205
|
+
this._remainders.delete(contextId);
|
|
206
|
+
if (!remainder) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const blockSize = 2 * Math.max(remainder.numChannels, 1);
|
|
210
|
+
let audio = remainder.audio;
|
|
211
|
+
if (audio.length < blockSize) {
|
|
212
|
+
const padded = new Uint8Array(blockSize);
|
|
213
|
+
padded.set(audio, 0);
|
|
214
|
+
audio = padded;
|
|
215
|
+
}
|
|
216
|
+
const frame = new TTSAudioRawFrame({
|
|
217
|
+
audio,
|
|
218
|
+
sampleRate: remainder.sampleRate,
|
|
219
|
+
numChannels: remainder.numChannels,
|
|
220
|
+
contextId,
|
|
221
|
+
});
|
|
222
|
+
await this.#context(contextId).put(frame);
|
|
223
|
+
}
|
|
224
|
+
#context(contextId) {
|
|
225
|
+
const queue = this._contexts.get(contextId);
|
|
226
|
+
if (!queue) {
|
|
227
|
+
// Upstream raises KeyError.
|
|
228
|
+
throw new Error(`KeyError: '${contextId}'`);
|
|
229
|
+
}
|
|
230
|
+
return queue;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=audio_context_manager.js.map
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility for context summarization in LLM services.
|
|
3
|
+
*
|
|
4
|
+
* This module provides reusable functionality for automatically compressing
|
|
5
|
+
* conversation context when token limits are reached, enabling efficient
|
|
6
|
+
* long-running conversations.
|
|
7
|
+
*
|
|
8
|
+
* The deprecated `LLMContextSummarizationConfig` is not ported; use
|
|
9
|
+
* `LLMAutoContextSummarizationConfig` with a nested `LLMContextSummaryConfig`.
|
|
10
|
+
*/
|
|
11
|
+
import { type LLMContext, type LLMContextMessage } from "../../processors/aggregators/llm_context.ts";
|
|
12
|
+
import type { LLMService } from "../../services/llm_service.ts";
|
|
13
|
+
/** Fallback timeout (seconds) used when summarizationTimeout is null. */
|
|
14
|
+
export declare const DEFAULT_SUMMARIZATION_TIMEOUT = 120;
|
|
15
|
+
/** Industry-standard heuristic: 1 token ≈ 4 characters. */
|
|
16
|
+
export declare const CHARS_PER_TOKEN = 4;
|
|
17
|
+
/** Estimated structural overhead per message. */
|
|
18
|
+
export declare const TOKEN_OVERHEAD_PER_MESSAGE = 10;
|
|
19
|
+
/** Rough estimate for image content. */
|
|
20
|
+
export declare const IMAGE_TOKEN_ESTIMATE = 500;
|
|
21
|
+
/** Keep summary at 80% of available space for safety. */
|
|
22
|
+
export declare const SUMMARY_TOKEN_BUFFER = 0.8;
|
|
23
|
+
/** Minimum tokens to allocate for summary. */
|
|
24
|
+
export declare const MIN_SUMMARY_TOKENS = 100;
|
|
25
|
+
export declare const DEFAULT_SUMMARIZATION_PROMPT = "You are summarizing a conversation between a user and an AI assistant.\n\nYour task:\n1. Create a concise summary that preserves:\n - Key facts, decisions, and agreements\n - Important context needed to continue the conversation\n - User preferences and requirements mentioned\n - Any unresolved questions or action items\n\n2. Format:\n - Use clear, factual statements\n - Group related information\n - Prioritize information likely to be referenced later\n - Keep the summary concise to fit within the specified token budget\n\n3. Omit:\n - Greetings and small talk\n - Redundant information\n - Tangential discussions that were resolved\n\nThe conversation transcript follows. Generate only the summary, no other text.";
|
|
26
|
+
export interface LLMContextSummaryConfigOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Maximum token size for the generated summary. This value is passed
|
|
29
|
+
* directly to the LLM as the max_tokens parameter when generating the
|
|
30
|
+
* summary. Should be sized appropriately to allow the summary plus recent
|
|
31
|
+
* preserved messages to fit within reasonable context limits.
|
|
32
|
+
*/
|
|
33
|
+
targetContextTokens?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Number of recent messages to preserve uncompressed after each
|
|
36
|
+
* summarization. These messages maintain immediate conversational context.
|
|
37
|
+
*/
|
|
38
|
+
minMessagesAfterSummary?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Custom prompt for the LLM to use when generating summaries. If null,
|
|
41
|
+
* uses DEFAULT_SUMMARIZATION_PROMPT.
|
|
42
|
+
*/
|
|
43
|
+
summarizationPrompt?: string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Template for formatting the summary when injected into context. Must
|
|
46
|
+
* contain `{summary}` as a placeholder for the generated summary text.
|
|
47
|
+
* Allows applications to wrap the summary in custom delimiters (e.g., XML
|
|
48
|
+
* tags) so that system prompts can distinguish summaries from live
|
|
49
|
+
* conversation.
|
|
50
|
+
*/
|
|
51
|
+
summaryMessageTemplate?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Optional separate LLM service for generating summaries. When set,
|
|
54
|
+
* summarization requests are sent to this service instead of the
|
|
55
|
+
* pipeline's primary LLM. Useful for routing summarization to a
|
|
56
|
+
* cheaper/faster model (e.g., Gemini Flash) while keeping an expensive
|
|
57
|
+
* model for conversation. If null, uses the pipeline LLM.
|
|
58
|
+
*/
|
|
59
|
+
llm?: LLMService | null;
|
|
60
|
+
/**
|
|
61
|
+
* Maximum time in seconds to wait for the LLM to generate a summary. If
|
|
62
|
+
* the call exceeds this timeout, summarization is aborted with an error
|
|
63
|
+
* and future summarizations are unblocked.
|
|
64
|
+
*/
|
|
65
|
+
summarizationTimeout?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configuration for summary generation parameters.
|
|
69
|
+
*
|
|
70
|
+
* Contains settings that control how a summary is generated. Used by both
|
|
71
|
+
* automatic and manual summarization modes. See
|
|
72
|
+
* `LLMContextSummaryConfigOptions` for the fields.
|
|
73
|
+
*/
|
|
74
|
+
export declare class LLMContextSummaryConfig {
|
|
75
|
+
targetContextTokens: number;
|
|
76
|
+
minMessagesAfterSummary: number;
|
|
77
|
+
summarizationPrompt: string | null;
|
|
78
|
+
summaryMessageTemplate: string;
|
|
79
|
+
llm: LLMService | null;
|
|
80
|
+
summarizationTimeout: number;
|
|
81
|
+
/**
|
|
82
|
+
* @throws Error If a parameter is out of range (upstream: ValueError).
|
|
83
|
+
*/
|
|
84
|
+
constructor(options?: LLMContextSummaryConfigOptions);
|
|
85
|
+
/**
|
|
86
|
+
* The summarization prompt to use: the custom prompt if set, otherwise the
|
|
87
|
+
* default summarization prompt.
|
|
88
|
+
*/
|
|
89
|
+
get summaryPrompt(): string;
|
|
90
|
+
}
|
|
91
|
+
export interface LLMAutoContextSummarizationConfigOptions {
|
|
92
|
+
/**
|
|
93
|
+
* Maximum allowed context size in tokens. When this limit is reached,
|
|
94
|
+
* summarization is triggered to compress the context. The tokens are
|
|
95
|
+
* calculated using the industry-standard approximation of 1 token ≈ 4
|
|
96
|
+
* characters. This measures the context messages only: the LLM service's
|
|
97
|
+
* `systemInstruction` is sent on every inference but is not part of the
|
|
98
|
+
* context, and summarization cannot compress it. Size this limit against
|
|
99
|
+
* the model's window minus the instruction. Set to null to disable
|
|
100
|
+
* token-based triggering. Defaults to 8000.
|
|
101
|
+
*/
|
|
102
|
+
maxContextTokens?: number | null;
|
|
103
|
+
/**
|
|
104
|
+
* Maximum number of new messages that can accumulate since the last
|
|
105
|
+
* summary before triggering a new summarization. This ensures regular
|
|
106
|
+
* compression even if token limits are not reached. Set to null to disable
|
|
107
|
+
* message-count triggering. Defaults to 20.
|
|
108
|
+
*/
|
|
109
|
+
maxUnsummarizedMessages?: number | null;
|
|
110
|
+
/**
|
|
111
|
+
* Configuration for summary generation parameters (prompt, token budget,
|
|
112
|
+
* messages to keep). If not provided, uses default `LLMContextSummaryConfig`
|
|
113
|
+
* values.
|
|
114
|
+
*/
|
|
115
|
+
summaryConfig?: LLMContextSummaryConfig;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Configuration for automatic context summarization.
|
|
119
|
+
*
|
|
120
|
+
* Controls when conversation context is automatically compressed and how
|
|
121
|
+
* that summary is generated. Summarization is triggered when either the
|
|
122
|
+
* token limit or the unsummarized message count threshold is exceeded.
|
|
123
|
+
*
|
|
124
|
+
* At least one of `maxContextTokens` and `maxUnsummarizedMessages` must be
|
|
125
|
+
* set. Set the other to null to disable that threshold.
|
|
126
|
+
*/
|
|
127
|
+
export declare class LLMAutoContextSummarizationConfig {
|
|
128
|
+
maxContextTokens: number | null;
|
|
129
|
+
maxUnsummarizedMessages: number | null;
|
|
130
|
+
summaryConfig: LLMContextSummaryConfig;
|
|
131
|
+
/**
|
|
132
|
+
* @throws Error If a parameter is out of range (upstream: ValueError).
|
|
133
|
+
*/
|
|
134
|
+
constructor(options?: LLMAutoContextSummarizationConfigOptions);
|
|
135
|
+
}
|
|
136
|
+
export interface LLMMessagesToSummarizeOptions {
|
|
137
|
+
/** Messages to include in the summary. */
|
|
138
|
+
messages: LLMContextMessage[];
|
|
139
|
+
/** Index of the last message being summarized. */
|
|
140
|
+
lastSummarizedIndex: number;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Result of the getMessagesToSummarize operation.
|
|
144
|
+
*
|
|
145
|
+
* - `messages`: Messages to include in the summary.
|
|
146
|
+
* - `lastSummarizedIndex`: Index of the last message being summarized.
|
|
147
|
+
*/
|
|
148
|
+
export declare class LLMMessagesToSummarize {
|
|
149
|
+
messages: LLMContextMessage[];
|
|
150
|
+
lastSummarizedIndex: number;
|
|
151
|
+
constructor(options: LLMMessagesToSummarizeOptions);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Utility providing context summarization capabilities for LLM processing.
|
|
155
|
+
*
|
|
156
|
+
* This utility enables automatic conversation context compression when token
|
|
157
|
+
* limits are reached. It provides functionality for both aggregators
|
|
158
|
+
* (which decide when to summarize) and LLM services (which generate summaries).
|
|
159
|
+
*
|
|
160
|
+
* Key features:
|
|
161
|
+
* - Token estimation using character-count heuristics (chars / 4)
|
|
162
|
+
* - Smart message selection (preserves system messages and recent context)
|
|
163
|
+
* - Function call awareness (avoids summarizing incomplete tool interactions)
|
|
164
|
+
* - Flexible transcript formatting for summarization
|
|
165
|
+
* - Maximum summary token calculation with safety buffers
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* // Use the static methods directly on the class:
|
|
169
|
+
* const tokens = LLMContextSummarizationUtil.estimateContextTokens(context);
|
|
170
|
+
* const result = LLMContextSummarizationUtil.getMessagesToSummarize(context, 4);
|
|
171
|
+
* const transcript = LLMContextSummarizationUtil.formatMessagesForSummary(messages);
|
|
172
|
+
*
|
|
173
|
+
* Note: token estimation uses the industry-standard heuristic of 1 token ≈ 4 characters.
|
|
174
|
+
*/
|
|
175
|
+
export declare class LLMContextSummarizationUtil {
|
|
176
|
+
/**
|
|
177
|
+
* Estimate token count for text using character count heuristic.
|
|
178
|
+
*
|
|
179
|
+
* Uses the industry-standard approximation of 1 token ≈ 4 characters.
|
|
180
|
+
* This works well across different content types (prose, code, etc.)
|
|
181
|
+
* and languages.
|
|
182
|
+
*
|
|
183
|
+
* Note: for more accurate token counts, use the model's official tokenizer.
|
|
184
|
+
* This is a rough estimate suitable for threshold checks and budgeting.
|
|
185
|
+
*
|
|
186
|
+
* @param text Text to estimate tokens for.
|
|
187
|
+
* @returns Estimated token count (characters / 4, rounded down).
|
|
188
|
+
*/
|
|
189
|
+
static estimateTokens(text: string | null | undefined): number;
|
|
190
|
+
/**
|
|
191
|
+
* Estimate total token count for a context.
|
|
192
|
+
*
|
|
193
|
+
* Calculates an approximate token count by analyzing all messages,
|
|
194
|
+
* including text content, tool calls, and structural overhead.
|
|
195
|
+
*
|
|
196
|
+
* @param context LLM context to estimate.
|
|
197
|
+
* @returns The estimated total token count, covering message content (text
|
|
198
|
+
* and images), tool calls and their arguments, tool results, and
|
|
199
|
+
* `TOKEN_OVERHEAD_PER_MESSAGE` of structural overhead per message.
|
|
200
|
+
*/
|
|
201
|
+
static estimateContextTokens(context: LLMContext): number;
|
|
202
|
+
/**
|
|
203
|
+
* Return true if a tool message content represents an unresolved call.
|
|
204
|
+
*
|
|
205
|
+
* A tool message is considered pending (unresolved) when its content is
|
|
206
|
+
* the synchronous `"IN_PROGRESS"` sentinel or the async
|
|
207
|
+
* `{"type": "async_tool", "status": "started"}` marker — both indicate
|
|
208
|
+
* that the actual result has not yet been written back to the context.
|
|
209
|
+
*
|
|
210
|
+
* @param content The `content` field of a tool-role context message.
|
|
211
|
+
* @returns True if the tool call should be treated as still in progress.
|
|
212
|
+
*/
|
|
213
|
+
protected static _isToolMessagePending(content: string): boolean;
|
|
214
|
+
/**
|
|
215
|
+
* Find the earliest message index with incomplete function calls.
|
|
216
|
+
*
|
|
217
|
+
* Scans messages from `startIdx` up to (but not including) `summaryEnd`
|
|
218
|
+
* to identify tool calls whose responses either don't exist yet, fall in
|
|
219
|
+
* the kept portion of the context (>= summaryEnd), or are still marked as
|
|
220
|
+
* `IN_PROGRESS` (async calls whose results have not yet arrived).
|
|
221
|
+
*
|
|
222
|
+
* This prevents summarizing tool call requests when their responses would
|
|
223
|
+
* remain in the kept context as orphans, which the OpenAI API rejects,
|
|
224
|
+
* and avoids summarizing async function calls before their results arrive.
|
|
225
|
+
*
|
|
226
|
+
* @param messages List of messages to check.
|
|
227
|
+
* @param startIdx Index to start checking from.
|
|
228
|
+
* @param summaryEnd Exclusive upper bound for the scan (the first kept
|
|
229
|
+
* message index). Only tool responses within this range count as
|
|
230
|
+
* completing a call; responses beyond it are treated as absent, leaving
|
|
231
|
+
* the call "in progress".
|
|
232
|
+
* @returns Index of first message with function call in progress, or -1 if
|
|
233
|
+
* all function calls are complete within the scanned range.
|
|
234
|
+
*/
|
|
235
|
+
protected static _getEarliestFunctionCallNotResolvedInRange(messages: readonly LLMContextMessage[], startIdx: number, summaryEnd: number): number;
|
|
236
|
+
/**
|
|
237
|
+
* Determine which messages should be included in summarization.
|
|
238
|
+
*
|
|
239
|
+
* Intelligently selects messages for summarization while preserving:
|
|
240
|
+
* - The first system message (defines assistant behavior)
|
|
241
|
+
* - The last N messages (maintains immediate conversation context)
|
|
242
|
+
* - Incomplete function call sequences (preserves tool interaction integrity)
|
|
243
|
+
*
|
|
244
|
+
* @param context The LLM context containing all messages.
|
|
245
|
+
* @param minMessagesToKeep Number of recent messages to exclude from summarization.
|
|
246
|
+
* @returns LLMMessagesToSummarize containing the messages to summarize and
|
|
247
|
+
* the index of the last message included.
|
|
248
|
+
*/
|
|
249
|
+
static getMessagesToSummarize(context: LLMContext, minMessagesToKeep: number): LLMMessagesToSummarize;
|
|
250
|
+
/**
|
|
251
|
+
* Format messages as a transcript for summarization.
|
|
252
|
+
*
|
|
253
|
+
* @param messages Messages to format.
|
|
254
|
+
* @returns Formatted transcript string.
|
|
255
|
+
*/
|
|
256
|
+
static formatMessagesForSummary(messages: readonly LLMContextMessage[]): string;
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=llm_context_summarization.d.ts.map
|