@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,580 @@
|
|
|
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/processors/aggregators/llm_context.py
|
|
6
|
+
import { FunctionSchema } from "../../adapters/schemas/function_schema.js";
|
|
7
|
+
import { ToolsSchema } from "../../adapters/schemas/tools_schema.js";
|
|
8
|
+
import { pcmToWav } from "../../audio/utils.js";
|
|
9
|
+
import { encodeImage } from "../../utils/image.js";
|
|
10
|
+
import { logger } from "../../utils/logger.js";
|
|
11
|
+
import { NOT_GIVEN } from "../../utils/types.js";
|
|
12
|
+
// The sentinel is part of LLMContext's public surface (tools and toolChoice
|
|
13
|
+
// default to it), so it is re-exported here for callers.
|
|
14
|
+
export { isGiven, NOT_GIVEN, NotGiven } from "../../utils/types.js";
|
|
15
|
+
/**
|
|
16
|
+
* A container for a context message that is specific to a particular LLM service.
|
|
17
|
+
*
|
|
18
|
+
* Enables the use of service-specific message types while maintaining
|
|
19
|
+
* compatibility with the universal LLM context format.
|
|
20
|
+
*/
|
|
21
|
+
export class LLMSpecificMessage {
|
|
22
|
+
llm;
|
|
23
|
+
message;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.llm = options.llm;
|
|
26
|
+
this.message = options.message;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function isDict(value) {
|
|
30
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
31
|
+
return false;
|
|
32
|
+
const proto = Object.getPrototypeOf(value);
|
|
33
|
+
return proto === Object.prototype || proto === null;
|
|
34
|
+
}
|
|
35
|
+
function bytesToBase64(bytes) {
|
|
36
|
+
let binary = "";
|
|
37
|
+
const chunkSize = 0x8000;
|
|
38
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
39
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
|
|
40
|
+
}
|
|
41
|
+
return btoa(binary);
|
|
42
|
+
}
|
|
43
|
+
function typeName(value) {
|
|
44
|
+
if (value === null)
|
|
45
|
+
return "null";
|
|
46
|
+
if (typeof value === "object" || typeof value === "function") {
|
|
47
|
+
return value.constructor?.name ?? typeof value;
|
|
48
|
+
}
|
|
49
|
+
return typeof value;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Return the text of a standard context message, joining the text parts of
|
|
53
|
+
* list content.
|
|
54
|
+
*
|
|
55
|
+
* @param message A context message.
|
|
56
|
+
* @returns The text, or `""` for a message in a service's own format or one
|
|
57
|
+
* that carries no text.
|
|
58
|
+
*/
|
|
59
|
+
export function standardMessageText(message) {
|
|
60
|
+
if (message instanceof LLMSpecificMessage) {
|
|
61
|
+
return "";
|
|
62
|
+
}
|
|
63
|
+
const content = message.content;
|
|
64
|
+
if (typeof content === "string") {
|
|
65
|
+
return content;
|
|
66
|
+
}
|
|
67
|
+
if (Array.isArray(content)) {
|
|
68
|
+
return content
|
|
69
|
+
.filter((part) => isDict(part) && part.type === "text" && part.text)
|
|
70
|
+
.map((part) => part.text ?? "")
|
|
71
|
+
.join(" ");
|
|
72
|
+
}
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Manages conversation context for LLM interactions.
|
|
77
|
+
*
|
|
78
|
+
* Handles message history, tool definitions, tool choices, and multimedia
|
|
79
|
+
* content for LLM conversations. Provides methods for message manipulation,
|
|
80
|
+
* and content formatting.
|
|
81
|
+
*/
|
|
82
|
+
export class LLMContext {
|
|
83
|
+
_messages;
|
|
84
|
+
_tools;
|
|
85
|
+
_toolChoice;
|
|
86
|
+
constructor(options = {}) {
|
|
87
|
+
this._messages = options.messages && options.messages.length > 0 ? options.messages : [];
|
|
88
|
+
this._tools = LLMContext._normalizeAndValidateTools(options.tools ?? NOT_GIVEN);
|
|
89
|
+
this._toolChoice = options.toolChoice ?? NOT_GIVEN;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create a context message containing an image URL.
|
|
93
|
+
*
|
|
94
|
+
* @param options.role The role of this message (defaults to "user").
|
|
95
|
+
* @param options.url The URL of the image.
|
|
96
|
+
* @param options.text Optional text to include with the image.
|
|
97
|
+
*/
|
|
98
|
+
static createImageUrlMessage(options) {
|
|
99
|
+
// TODO: Deprecate support for a non-data `url` here now that
|
|
100
|
+
// `createFileUrlMessage` exists: a URL-referenced image and a
|
|
101
|
+
// URL-referenced file should go through the same path instead of two.
|
|
102
|
+
const role = options.role ?? "user";
|
|
103
|
+
const content = [];
|
|
104
|
+
if (options.text) {
|
|
105
|
+
content.push({ type: "text", text: options.text });
|
|
106
|
+
}
|
|
107
|
+
content.push({ type: "image_url", image_url: { url: options.url } });
|
|
108
|
+
return { role, content };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create a context message containing an image.
|
|
112
|
+
*
|
|
113
|
+
* @param options.role The role of this message (defaults to "user").
|
|
114
|
+
* @param options.format Image format (e.g. 'RGB', 'RGBA', or, if already
|
|
115
|
+
* encoded, the MIME type like 'image/jpeg').
|
|
116
|
+
* @param options.size Image dimensions as [width, height].
|
|
117
|
+
* @param options.image Raw image bytes.
|
|
118
|
+
* @param options.text Optional text to include with the image.
|
|
119
|
+
*/
|
|
120
|
+
static async createImageMessage(options) {
|
|
121
|
+
const [data, contentType] = await encodeImage(options.image, options.size, options.format);
|
|
122
|
+
const encodedImage = bytesToBase64(data);
|
|
123
|
+
const url = `data:${contentType};base64,${encodedImage}`;
|
|
124
|
+
return LLMContext.createImageUrlMessage({
|
|
125
|
+
role: options.role ?? "user",
|
|
126
|
+
url,
|
|
127
|
+
text: options.text ?? null,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a context message containing a file.
|
|
132
|
+
*
|
|
133
|
+
* @param options.role The role of this message (defaults to "user").
|
|
134
|
+
* @param options.type The type of the file.
|
|
135
|
+
* @param options.format MIME type of the file (e.g. "application/pdf").
|
|
136
|
+
* @param options.file Base64 data URL (`data:<mime>;base64,...`) or plain URL string.
|
|
137
|
+
* @param options.name Optional name of the file.
|
|
138
|
+
* @param options.text Optional text to include with the file.
|
|
139
|
+
*/
|
|
140
|
+
static async createFileMessage(options) {
|
|
141
|
+
const role = options.role ?? "user";
|
|
142
|
+
// The URL is stored unresolved; at completion time the LLM service either
|
|
143
|
+
// passes it to the provider to fetch itself or downloads it via its
|
|
144
|
+
// FileResolver, depending on what the provider can consume.
|
|
145
|
+
if (options.type === "url") {
|
|
146
|
+
return LLMContext.createFileUrlMessage({
|
|
147
|
+
role,
|
|
148
|
+
format: options.format,
|
|
149
|
+
url: options.file,
|
|
150
|
+
filename: options.name ?? null,
|
|
151
|
+
text: options.text ?? null,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const content = [];
|
|
155
|
+
if (options.text) {
|
|
156
|
+
content.push({ type: "text", text: options.text });
|
|
157
|
+
}
|
|
158
|
+
const fileM = {
|
|
159
|
+
file_data: options.file,
|
|
160
|
+
filename: options.name ? options.name : "",
|
|
161
|
+
mime_type: options.format,
|
|
162
|
+
};
|
|
163
|
+
content.push({ type: "file_base64", file: fileM });
|
|
164
|
+
return { role, content };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create a context message containing an image or file URL.
|
|
168
|
+
*
|
|
169
|
+
* @param options.role The role of this message (defaults to "user").
|
|
170
|
+
* @param options.format The MIME type of the file (e.g. 'application/pdf').
|
|
171
|
+
* @param options.url The URL of the image or file.
|
|
172
|
+
* @param options.filename Optional name of the file.
|
|
173
|
+
* @param options.text Optional text to include with the image or file.
|
|
174
|
+
*/
|
|
175
|
+
static createFileUrlMessage(options) {
|
|
176
|
+
const role = options.role ?? "user";
|
|
177
|
+
const content = [];
|
|
178
|
+
if (options.text) {
|
|
179
|
+
content.push({ type: "text", text: options.text });
|
|
180
|
+
}
|
|
181
|
+
const fileM = {
|
|
182
|
+
url: options.url,
|
|
183
|
+
filename: options.filename ? options.filename : "",
|
|
184
|
+
mime_type: options.format,
|
|
185
|
+
};
|
|
186
|
+
content.push({ type: "file_url", file: fileM });
|
|
187
|
+
return { role, content };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Create a context message containing audio.
|
|
191
|
+
*
|
|
192
|
+
* @param options.role The role of this message (defaults to "user").
|
|
193
|
+
* @param options.audioFrames List of audio frame objects to include.
|
|
194
|
+
* @param options.text Optional text to include with the audio.
|
|
195
|
+
*/
|
|
196
|
+
static async createAudioMessage(options) {
|
|
197
|
+
const role = options.role ?? "user";
|
|
198
|
+
const audioFrames = options.audioFrames;
|
|
199
|
+
const content = [
|
|
200
|
+
{ type: "text", text: options.text ?? "Audio follows" },
|
|
201
|
+
];
|
|
202
|
+
// Upstream runs this in a thread (asyncio.to_thread); there are no
|
|
203
|
+
// threads on every runtime we target, so it runs inline.
|
|
204
|
+
const encodeAudio = () => {
|
|
205
|
+
const sampleRate = audioFrames[0].sampleRate;
|
|
206
|
+
const numChannels = audioFrames[0].numChannels;
|
|
207
|
+
const total = audioFrames.reduce((n, frame) => n + frame.audio.length, 0);
|
|
208
|
+
const data = new Uint8Array(total);
|
|
209
|
+
let offset = 0;
|
|
210
|
+
for (const frame of audioFrames) {
|
|
211
|
+
data.set(frame.audio, offset);
|
|
212
|
+
offset += frame.audio.length;
|
|
213
|
+
}
|
|
214
|
+
const wav = pcmToWav(data, sampleRate, numChannels);
|
|
215
|
+
return bytesToBase64(wav);
|
|
216
|
+
};
|
|
217
|
+
const encodedAudio = encodeAudio();
|
|
218
|
+
content.push({
|
|
219
|
+
type: "input_audio",
|
|
220
|
+
input_audio: { data: encodedAudio, format: "wav" },
|
|
221
|
+
});
|
|
222
|
+
return { role, content };
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get the current messages list.
|
|
226
|
+
*
|
|
227
|
+
* NOTE: This is equivalent to calling `getMessages()` with no filter. If
|
|
228
|
+
* you want to filter out LLM-specific messages that don't pertain to your
|
|
229
|
+
* LLM, use `getMessages()` directly.
|
|
230
|
+
*
|
|
231
|
+
* @returns List of conversation messages.
|
|
232
|
+
*/
|
|
233
|
+
get messages() {
|
|
234
|
+
return this.getMessages();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get the current messages list.
|
|
238
|
+
*
|
|
239
|
+
* @param llmSpecificFilter Optional filter to return LLM-specific messages
|
|
240
|
+
* for the given LLM, in addition to the standard messages. If messages end
|
|
241
|
+
* up being filtered, an error will be logged; this is intended to catch
|
|
242
|
+
* accidental use of incompatible LLM-specific messages.
|
|
243
|
+
* @param options.truncateLargeValues If true, return deep copies of
|
|
244
|
+
* messages with large values shortened. For standard messages, known
|
|
245
|
+
* binary data (base64-encoded images, audio) is replaced with short
|
|
246
|
+
* placeholders. For LLM-specific messages, long string values are
|
|
247
|
+
* truncated.
|
|
248
|
+
* @returns List of conversation messages.
|
|
249
|
+
*/
|
|
250
|
+
getMessages(llmSpecificFilter = null, options = {}) {
|
|
251
|
+
let messages;
|
|
252
|
+
if (llmSpecificFilter === null) {
|
|
253
|
+
messages = this._messages;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
messages = this._messages.filter((msg) => !(msg instanceof LLMSpecificMessage) || msg.llm === llmSpecificFilter);
|
|
257
|
+
if (messages.length < this._messages.length) {
|
|
258
|
+
logger.error(`Attempted to use incompatible LLMSpecificMessages with LLM '${llmSpecificFilter}'.`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (options.truncateLargeValues ?? false) {
|
|
262
|
+
messages = LLMContext._truncateLargeValuesFromMessages(messages);
|
|
263
|
+
}
|
|
264
|
+
return messages;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Return deep copies of messages with large values replaced by placeholders.
|
|
268
|
+
*
|
|
269
|
+
* For standard (universal-format) messages, the following known binary
|
|
270
|
+
* patterns are replaced with short placeholders:
|
|
271
|
+
*
|
|
272
|
+
* - `image_url` items with `data:image/...` base64 URLs
|
|
273
|
+
* - `input_audio` items with `input_audio.data` or `audio` fields
|
|
274
|
+
* - `audio` items with an `audio` field
|
|
275
|
+
* - Top-level messages with a `mime_type` starting with `image/`
|
|
276
|
+
*
|
|
277
|
+
* For `LLMSpecificMessage` instances, long string values are truncated
|
|
278
|
+
* since the internal structure is provider-specific.
|
|
279
|
+
*/
|
|
280
|
+
static _truncateLargeValuesFromMessages(messages) {
|
|
281
|
+
const result = [];
|
|
282
|
+
for (const message of messages) {
|
|
283
|
+
if (message instanceof LLMSpecificMessage) {
|
|
284
|
+
const msgCopy = new LLMSpecificMessage({
|
|
285
|
+
llm: message.llm,
|
|
286
|
+
message: LLMContext._truncateLongStrings(structuredClone(message.message)),
|
|
287
|
+
});
|
|
288
|
+
result.push(msgCopy);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// The standard message variant is a union of object shapes; the
|
|
292
|
+
// mutations below operate on plain objects at runtime. Treat as such
|
|
293
|
+
// for the duration of the redaction loop.
|
|
294
|
+
const msg = structuredClone(message);
|
|
295
|
+
const content = msg.content;
|
|
296
|
+
if (Array.isArray(content)) {
|
|
297
|
+
for (const item of content) {
|
|
298
|
+
const itemType = item?.type;
|
|
299
|
+
if (itemType === "image_url") {
|
|
300
|
+
const url = item.image_url?.url ?? "";
|
|
301
|
+
if (typeof url === "string" && url.startsWith("data:image/")) {
|
|
302
|
+
item.image_url.url = "data:image/...";
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else if (itemType === "input_audio") {
|
|
306
|
+
if ("input_audio" in item) {
|
|
307
|
+
item.input_audio.data = "...";
|
|
308
|
+
}
|
|
309
|
+
if ("audio" in item) {
|
|
310
|
+
item.audio = "...";
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else if (itemType === "audio") {
|
|
314
|
+
if ("audio" in item) {
|
|
315
|
+
item.audio = "...";
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (itemType === "file_base64") {
|
|
319
|
+
if ("file" in item) {
|
|
320
|
+
item.file.file_data = "...";
|
|
321
|
+
delete item.file._raw_bytes;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const mimeType = msg.mime_type ?? "";
|
|
327
|
+
if (typeof mimeType === "string" && mimeType.startsWith("image/")) {
|
|
328
|
+
msg.data = "...";
|
|
329
|
+
}
|
|
330
|
+
result.push(msg);
|
|
331
|
+
}
|
|
332
|
+
return result;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Recursively truncate long strings in a nested structure.
|
|
336
|
+
*
|
|
337
|
+
* Preserves the structure of objects and lists while truncating any string
|
|
338
|
+
* values that exceed `maxLength`.
|
|
339
|
+
*
|
|
340
|
+
* @param value The value to process (object, list, string, or other).
|
|
341
|
+
* @param options.maxLength Strings longer than this are truncated.
|
|
342
|
+
* @returns A copy of the structure with long strings truncated.
|
|
343
|
+
*/
|
|
344
|
+
static _truncateLongStrings(value, options = {}) {
|
|
345
|
+
const maxLength = options.maxLength ?? 100;
|
|
346
|
+
if (typeof value === "string") {
|
|
347
|
+
if (value.length > maxLength) {
|
|
348
|
+
return `${value.slice(0, maxLength)}...(${value.length} chars)`;
|
|
349
|
+
}
|
|
350
|
+
return value;
|
|
351
|
+
}
|
|
352
|
+
else if (isDict(value)) {
|
|
353
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [
|
|
354
|
+
k,
|
|
355
|
+
LLMContext._truncateLongStrings(v, { maxLength }),
|
|
356
|
+
]));
|
|
357
|
+
}
|
|
358
|
+
else if (Array.isArray(value)) {
|
|
359
|
+
return value.map((item) => LLMContext._truncateLongStrings(item, { maxLength }));
|
|
360
|
+
}
|
|
361
|
+
return value;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Get the tools list.
|
|
365
|
+
*
|
|
366
|
+
* @returns Tools list.
|
|
367
|
+
*/
|
|
368
|
+
get tools() {
|
|
369
|
+
return this._tools;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Get the current tool choice setting.
|
|
373
|
+
*
|
|
374
|
+
* @returns The tool choice configuration.
|
|
375
|
+
*/
|
|
376
|
+
get toolChoice() {
|
|
377
|
+
return this._toolChoice;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Add a single message to the context.
|
|
381
|
+
*
|
|
382
|
+
* @param message The message to add to the conversation history.
|
|
383
|
+
*/
|
|
384
|
+
addMessage(message) {
|
|
385
|
+
this._messages.push(message);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Add multiple messages to the context.
|
|
389
|
+
*
|
|
390
|
+
* @param messages List of messages to add to the conversation history.
|
|
391
|
+
*/
|
|
392
|
+
addMessages(messages) {
|
|
393
|
+
for (const message of messages) {
|
|
394
|
+
this._messages.push(message);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Replace all messages in the context.
|
|
399
|
+
*
|
|
400
|
+
* @param messages New list of messages to replace the current history.
|
|
401
|
+
*/
|
|
402
|
+
setMessages(messages) {
|
|
403
|
+
// In place, like Python's `self._messages[:] = messages`.
|
|
404
|
+
const copy = [...messages];
|
|
405
|
+
this._messages.length = 0;
|
|
406
|
+
for (const message of copy) {
|
|
407
|
+
this._messages.push(message);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Transform the current messages using the provided function.
|
|
412
|
+
*
|
|
413
|
+
* @param transform A function that takes the current list of messages and
|
|
414
|
+
* returns a modified list of messages to set in the context.
|
|
415
|
+
*/
|
|
416
|
+
transformMessages(transform) {
|
|
417
|
+
this.setMessages(transform(this._messages));
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Set the available tools for the LLM.
|
|
421
|
+
*
|
|
422
|
+
* @param tools A ToolsSchema, a plain list of direct functions and/or
|
|
423
|
+
* `FunctionSchema` objects, or NOT_GIVEN to disable tools.
|
|
424
|
+
*/
|
|
425
|
+
setTools(tools = NOT_GIVEN) {
|
|
426
|
+
this._tools = LLMContext._normalizeAndValidateTools(tools);
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Set the tool choice configuration.
|
|
430
|
+
*
|
|
431
|
+
* @param toolChoice Tool selection strategy for the LLM.
|
|
432
|
+
*/
|
|
433
|
+
setToolChoice(toolChoice) {
|
|
434
|
+
this._toolChoice = toolChoice;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Add a message containing an image frame.
|
|
438
|
+
*
|
|
439
|
+
* @param options.format Image format (e.g. 'RGB', 'RGBA', or, if already
|
|
440
|
+
* encoded, the MIME type like 'image/jpeg').
|
|
441
|
+
* @param options.size Image dimensions as [width, height].
|
|
442
|
+
* @param options.image Raw image bytes.
|
|
443
|
+
* @param options.text Optional text to include with the image.
|
|
444
|
+
* @param options.role The role of this message (defaults to "user").
|
|
445
|
+
*/
|
|
446
|
+
async addImageFrameMessage(options) {
|
|
447
|
+
const message = await LLMContext.createImageMessage({
|
|
448
|
+
role: options.role ?? "user",
|
|
449
|
+
format: options.format,
|
|
450
|
+
size: options.size,
|
|
451
|
+
image: options.image,
|
|
452
|
+
text: options.text ?? null,
|
|
453
|
+
});
|
|
454
|
+
this.addMessage(message);
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Add a message containing a file frame.
|
|
458
|
+
*
|
|
459
|
+
* @param options.type File source type.
|
|
460
|
+
* @param options.format MIME type of the file (e.g. 'application/pdf').
|
|
461
|
+
* @param options.file Base64 data URL (`data:<mime>;base64,...`) or plain
|
|
462
|
+
* URL string. URL fetching for providers that require bytes is handled by
|
|
463
|
+
* the provider adapter during message conversion.
|
|
464
|
+
* @param options.text Optional text to accompany the file.
|
|
465
|
+
* @param options.name Optional file name.
|
|
466
|
+
* @param options.role Message role (defaults to 'user').
|
|
467
|
+
*/
|
|
468
|
+
async addFileFrameMessage(options) {
|
|
469
|
+
const message = await LLMContext.createFileMessage({
|
|
470
|
+
role: options.role ?? "user",
|
|
471
|
+
type: options.type,
|
|
472
|
+
format: options.format,
|
|
473
|
+
file: options.file,
|
|
474
|
+
name: options.name ?? null,
|
|
475
|
+
text: options.text ?? null,
|
|
476
|
+
});
|
|
477
|
+
this.addMessage(message);
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Add a message containing audio frames.
|
|
481
|
+
*
|
|
482
|
+
* @param options.audioFrames List of audio frame objects to include.
|
|
483
|
+
* @param options.text Optional text to include with the audio.
|
|
484
|
+
*/
|
|
485
|
+
async addAudioFramesMessage(options) {
|
|
486
|
+
const message = await LLMContext.createAudioMessage({
|
|
487
|
+
audioFrames: options.audioFrames,
|
|
488
|
+
text: options.text ?? "Audio follows",
|
|
489
|
+
});
|
|
490
|
+
this.addMessage(message);
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Remove the oldest file or image message added since the model's last
|
|
494
|
+
* successful reply.
|
|
495
|
+
*
|
|
496
|
+
* Best-effort cleanup for an LLM service to call once it's determined (from
|
|
497
|
+
* a provider-specific error) that a request was rejected due to unsupported
|
|
498
|
+
* or malformed file content, e.g. an unsupported MIME type, corrupt bytes,
|
|
499
|
+
* or an image whose bytes don't match its declared media type. Removing it
|
|
500
|
+
* prevents the context from getting permanently stuck retrying the same
|
|
501
|
+
* failure. Images count as files here: both are discrete client-supplied
|
|
502
|
+
* attachments a provider can reject the same way. Audio content
|
|
503
|
+
* deliberately doesn't: audio-in-context flows append audio as ordinary
|
|
504
|
+
* conversation every turn, so removing the oldest audio message on an
|
|
505
|
+
* unrelated rejection would discard real conversation rather than a bad
|
|
506
|
+
* attachment.
|
|
507
|
+
*
|
|
508
|
+
* Providers don't say which message or content item triggered the
|
|
509
|
+
* rejection, so there's no way to identify the exact culprit; this is a
|
|
510
|
+
* heuristic, not a precise fix. An assistant message proves everything
|
|
511
|
+
* before it was already accepted by a prior successful completion
|
|
512
|
+
* (assistant messages are only ever appended after a completion succeeds),
|
|
513
|
+
* so only file messages added since the last one are candidates; a file
|
|
514
|
+
* from an earlier, already-successful turn is never at risk. If several
|
|
515
|
+
* files are candidates (e.g. sent in quick succession before either went
|
|
516
|
+
* through a completion), only the oldest is removed: if it wasn't the actual
|
|
517
|
+
* culprit, the next retry fails again and removes the next-oldest,
|
|
518
|
+
* converging on the bad file within a few retries without ever knowing
|
|
519
|
+
* which one the provider meant.
|
|
520
|
+
*
|
|
521
|
+
* @returns True if a file or image message was found and removed.
|
|
522
|
+
*/
|
|
523
|
+
removeInvalidFileMessage() {
|
|
524
|
+
let sinceIndex = 0;
|
|
525
|
+
for (let i = this._messages.length - 1; i >= 0; i--) {
|
|
526
|
+
const message = this._messages[i];
|
|
527
|
+
if (!(message instanceof LLMSpecificMessage) && message.role === "assistant") {
|
|
528
|
+
sinceIndex = i + 1;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
for (let i = sinceIndex; i < this._messages.length; i++) {
|
|
533
|
+
const message = this._messages[i];
|
|
534
|
+
if (message instanceof LLMSpecificMessage) {
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
537
|
+
const content = message.content;
|
|
538
|
+
if (Array.isArray(content) &&
|
|
539
|
+
content.some((item) => isDict(item) &&
|
|
540
|
+
(item.type === "file_base64" || item.type === "file_url" || item.type === "image_url"))) {
|
|
541
|
+
logger.warning("Removing message with file or image content from context due to invalid response.");
|
|
542
|
+
this._messages.splice(i, 1);
|
|
543
|
+
return true;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return false;
|
|
547
|
+
}
|
|
548
|
+
static _normalizeAndValidateTools(tools, options = {}) {
|
|
549
|
+
const allowProviderTools = options.allowProviderTools ?? false;
|
|
550
|
+
let normalized = tools;
|
|
551
|
+
if (Array.isArray(tools)) {
|
|
552
|
+
if (allowProviderTools &&
|
|
553
|
+
!tools.every((t) => t instanceof FunctionSchema || typeof t === "function")) {
|
|
554
|
+
// Already-formatted, provider-native tools; pass through unchanged.
|
|
555
|
+
return tools;
|
|
556
|
+
}
|
|
557
|
+
normalized = new ToolsSchema({
|
|
558
|
+
standardTools: tools,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
if (normalized instanceof ToolsSchema) {
|
|
562
|
+
const custom = normalized.customTools;
|
|
563
|
+
const hasCustom = custom instanceof Map
|
|
564
|
+
? custom.size > 0
|
|
565
|
+
: custom != null && Object.keys(custom).length > 0;
|
|
566
|
+
if (normalized.standardTools.length === 0 && !hasCustom) {
|
|
567
|
+
return NOT_GIVEN;
|
|
568
|
+
}
|
|
569
|
+
return normalized;
|
|
570
|
+
}
|
|
571
|
+
else if (normalized === NOT_GIVEN) {
|
|
572
|
+
return NOT_GIVEN;
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
throw new TypeError("In LLMContext, tools must be a ToolsSchema, a list of direct functions / " +
|
|
576
|
+
`FunctionSchema objects, or NOT_GIVEN. Got type: ${typeName(normalized)}`);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
//# sourceMappingURL=llm_context.js.map
|