@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,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for Clef, Cloudflare's decision model on Workers AI.
|
|
3
|
+
*
|
|
4
|
+
* One `ClefClient` holds one connection pool, adds the auth header, retries
|
|
5
|
+
* when Workers AI is busy, and counts the tokens every request used. Several
|
|
6
|
+
* `ClefClassifier` instances can share one.
|
|
7
|
+
*
|
|
8
|
+
* PORTING NOTE: upstream uses `httpx` with HTTP/2 and a 240 s keep-alive;
|
|
9
|
+
* here requests go through `fetch` (see `../../http_client.ts`), and
|
|
10
|
+
* connection reuse is left to the runtime.
|
|
11
|
+
*/
|
|
12
|
+
import { Lock } from "@pipedog/asyncio";
|
|
13
|
+
import { HttpClient, type HttpResponse } from "../../http_client.ts";
|
|
14
|
+
/** Where Cloudflare's API is served. */
|
|
15
|
+
export declare const CLOUDFLARE_API_URL = "https://api.cloudflare.com/client/v4";
|
|
16
|
+
/** The Clef model to ask. */
|
|
17
|
+
export declare const DEFAULT_MODEL = "clef";
|
|
18
|
+
/** Seconds to wait for a reply before giving up. */
|
|
19
|
+
export declare const DEFAULT_TIMEOUT = 10;
|
|
20
|
+
export interface ClefUsageOptions {
|
|
21
|
+
/** Tokens sent. */
|
|
22
|
+
inputTokens?: number;
|
|
23
|
+
/** Tokens received. */
|
|
24
|
+
outputTokens?: number;
|
|
25
|
+
}
|
|
26
|
+
/** Tokens Clef used: for one request, or over every request in `ClefClient.usage`. */
|
|
27
|
+
export declare class ClefUsage {
|
|
28
|
+
inputTokens: number;
|
|
29
|
+
outputTokens: number;
|
|
30
|
+
constructor(options?: ClefUsageOptions);
|
|
31
|
+
/** Build a usage from Clef's wire format (`input_tokens`, `output_tokens`). */
|
|
32
|
+
static fromDict(data: Record<string, unknown>): ClefUsage;
|
|
33
|
+
}
|
|
34
|
+
export interface ClefClientOptions {
|
|
35
|
+
/** Cloudflare account ID. */
|
|
36
|
+
accountId: string;
|
|
37
|
+
/** Cloudflare API token with Workers AI access. */
|
|
38
|
+
apiKey: string;
|
|
39
|
+
/** The Clef model to ask: `clef`, or `clef-flash` for faster answers. */
|
|
40
|
+
model?: string;
|
|
41
|
+
/** Seconds to wait for a reply before giving up. */
|
|
42
|
+
timeout?: number;
|
|
43
|
+
/** How many times to retry a request Workers AI refused because it was busy. */
|
|
44
|
+
maxRetries?: number;
|
|
45
|
+
/** The transport requests go through; the global `fetch` by default. */
|
|
46
|
+
fetch?: typeof fetch;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* HTTP client for Clef on Workers AI.
|
|
50
|
+
*
|
|
51
|
+
* Many small requests can be in flight at the same time. Retries with
|
|
52
|
+
* backoff when Workers AI answers 429. Counts the tokens every request used
|
|
53
|
+
* in `usage`. Errors carry the reasons Cloudflare gave.
|
|
54
|
+
*
|
|
55
|
+
* `connect()` opens the connection ahead of the first question, and
|
|
56
|
+
* `close()` releases it.
|
|
57
|
+
*/
|
|
58
|
+
export declare class ClefClient {
|
|
59
|
+
protected _model: string;
|
|
60
|
+
protected _maxRetries: number;
|
|
61
|
+
protected _usage: ClefUsage;
|
|
62
|
+
protected _connected: boolean;
|
|
63
|
+
protected _connectLock: Lock;
|
|
64
|
+
protected _http: HttpClient;
|
|
65
|
+
constructor(options: ClefClientOptions);
|
|
66
|
+
/** The Clef model the questions go to. */
|
|
67
|
+
get model(): string;
|
|
68
|
+
/** Tokens used so far, over every request. */
|
|
69
|
+
get usage(): ClefUsage;
|
|
70
|
+
/**
|
|
71
|
+
* Open the connection to Workers AI.
|
|
72
|
+
*
|
|
73
|
+
* Asks for the model's schema, a cheap request that also checks the token
|
|
74
|
+
* and the model name. Connects once: a client shared by several
|
|
75
|
+
* classifiers is asked by each of them, and only the first call sends
|
|
76
|
+
* anything.
|
|
77
|
+
*
|
|
78
|
+
* @throws ClassifierError If Workers AI could not be reached or refused the
|
|
79
|
+
* request.
|
|
80
|
+
*/
|
|
81
|
+
connect(): Promise<void>;
|
|
82
|
+
/** Close the connection pool. */
|
|
83
|
+
close(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Send questions about one state and return Clef's answers.
|
|
86
|
+
*
|
|
87
|
+
* @param state What the questions are about.
|
|
88
|
+
* @param questions The questions by name, each in Clef's own format: a
|
|
89
|
+
* `type` of `noul`, `choice` or `score`, `instructions`, and `criteria`.
|
|
90
|
+
* @param images Images the questions can look at, each in Clef's own
|
|
91
|
+
* format: a `content_type` and the `base64` bytes.
|
|
92
|
+
* @returns The answers by the same names, in Clef's own format, and the
|
|
93
|
+
* tokens the request used.
|
|
94
|
+
* @throws ClassifierError If Clef rejected the request, kept refusing it
|
|
95
|
+
* because it was busy, could not be reached, or left a question
|
|
96
|
+
* unanswered.
|
|
97
|
+
*/
|
|
98
|
+
ask(state: unknown, questions: Readonly<Record<string, Record<string, unknown>>>, images?: readonly Readonly<Record<string, string>>[]): Promise<[Record<string, Record<string, unknown>>, ClefUsage]>;
|
|
99
|
+
/** The reply inside Cloudflare's `result` envelope. */
|
|
100
|
+
protected _result(response: HttpResponse): Record<string, unknown>;
|
|
101
|
+
/** A failed response's HTTP status and the reasons Cloudflare gave. */
|
|
102
|
+
protected _failure(response: HttpResponse): string;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1,234 @@
|
|
|
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/classifiers/cloudflare/clef/client.py
|
|
6
|
+
/**
|
|
7
|
+
* HTTP client for Clef, Cloudflare's decision model on Workers AI.
|
|
8
|
+
*
|
|
9
|
+
* One `ClefClient` holds one connection pool, adds the auth header, retries
|
|
10
|
+
* when Workers AI is busy, and counts the tokens every request used. Several
|
|
11
|
+
* `ClefClassifier` instances can share one.
|
|
12
|
+
*
|
|
13
|
+
* PORTING NOTE: upstream uses `httpx` with HTTP/2 and a 240 s keep-alive;
|
|
14
|
+
* here requests go through `fetch` (see `../../http_client.ts`), and
|
|
15
|
+
* connection reuse is left to the runtime.
|
|
16
|
+
*/
|
|
17
|
+
import { Lock, rethrowIfCancelled, sleep } from "@pipedog/asyncio";
|
|
18
|
+
import { logger } from "../../../utils/logger.js";
|
|
19
|
+
import { exponentialBackoffTime } from "../../../utils/network.js";
|
|
20
|
+
import { ClassifierError } from "../../base_classifier.js";
|
|
21
|
+
import { errorRepr, HttpClient, HttpError, isDict } from "../../http_client.js";
|
|
22
|
+
/** Workers AI answers a request with this status when it is out of capacity. */
|
|
23
|
+
const TOO_MANY_REQUESTS = 429;
|
|
24
|
+
/** Where Cloudflare's API is served. */
|
|
25
|
+
export const CLOUDFLARE_API_URL = "https://api.cloudflare.com/client/v4";
|
|
26
|
+
/** The Clef model to ask. */
|
|
27
|
+
export const DEFAULT_MODEL = "clef";
|
|
28
|
+
/** Seconds to wait for a reply before giving up. */
|
|
29
|
+
export const DEFAULT_TIMEOUT = 10.0;
|
|
30
|
+
/** Tokens Clef used: for one request, or over every request in `ClefClient.usage`. */
|
|
31
|
+
export class ClefUsage {
|
|
32
|
+
inputTokens;
|
|
33
|
+
outputTokens;
|
|
34
|
+
constructor(options = {}) {
|
|
35
|
+
this.inputTokens = options.inputTokens ?? 0;
|
|
36
|
+
this.outputTokens = options.outputTokens ?? 0;
|
|
37
|
+
}
|
|
38
|
+
/** Build a usage from Clef's wire format (`input_tokens`, `output_tokens`). */
|
|
39
|
+
static fromDict(data) {
|
|
40
|
+
return new ClefUsage({
|
|
41
|
+
inputTokens: data.input_tokens ?? 0,
|
|
42
|
+
outputTokens: data.output_tokens ?? 0,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* HTTP client for Clef on Workers AI.
|
|
48
|
+
*
|
|
49
|
+
* Many small requests can be in flight at the same time. Retries with
|
|
50
|
+
* backoff when Workers AI answers 429. Counts the tokens every request used
|
|
51
|
+
* in `usage`. Errors carry the reasons Cloudflare gave.
|
|
52
|
+
*
|
|
53
|
+
* `connect()` opens the connection ahead of the first question, and
|
|
54
|
+
* `close()` releases it.
|
|
55
|
+
*/
|
|
56
|
+
export class ClefClient {
|
|
57
|
+
_model;
|
|
58
|
+
_maxRetries;
|
|
59
|
+
_usage = new ClefUsage();
|
|
60
|
+
_connected = false;
|
|
61
|
+
_connectLock = new Lock();
|
|
62
|
+
_http;
|
|
63
|
+
constructor(options) {
|
|
64
|
+
if (!options.accountId) {
|
|
65
|
+
throw new Error("ClefClient needs a Cloudflare account ID");
|
|
66
|
+
}
|
|
67
|
+
if (!options.apiKey) {
|
|
68
|
+
throw new Error("ClefClient needs a Cloudflare API token");
|
|
69
|
+
}
|
|
70
|
+
this._model = options.model ?? DEFAULT_MODEL;
|
|
71
|
+
this._maxRetries = options.maxRetries ?? 3;
|
|
72
|
+
this._http = new HttpClient({
|
|
73
|
+
baseUrl: `${CLOUDFLARE_API_URL}/accounts/${options.accountId}/ai`,
|
|
74
|
+
headers: { Authorization: `Bearer ${options.apiKey}` },
|
|
75
|
+
timeout: options.timeout ?? DEFAULT_TIMEOUT,
|
|
76
|
+
fetch: options.fetch,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** The Clef model the questions go to. */
|
|
80
|
+
get model() {
|
|
81
|
+
return this._model;
|
|
82
|
+
}
|
|
83
|
+
/** Tokens used so far, over every request. */
|
|
84
|
+
get usage() {
|
|
85
|
+
return this._usage;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Open the connection to Workers AI.
|
|
89
|
+
*
|
|
90
|
+
* Asks for the model's schema, a cheap request that also checks the token
|
|
91
|
+
* and the model name. Connects once: a client shared by several
|
|
92
|
+
* classifiers is asked by each of them, and only the first call sends
|
|
93
|
+
* anything.
|
|
94
|
+
*
|
|
95
|
+
* @throws ClassifierError If Workers AI could not be reached or refused the
|
|
96
|
+
* request.
|
|
97
|
+
*/
|
|
98
|
+
async connect() {
|
|
99
|
+
await this._connectLock.run(async () => {
|
|
100
|
+
if (this._connected) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
let response;
|
|
104
|
+
try {
|
|
105
|
+
response = await this._http.get("/models/schema", {
|
|
106
|
+
params: { model: `@cf/cloudflare/${this._model}` },
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
if (e instanceof HttpError) {
|
|
111
|
+
throw new ClassifierError(`could not connect to Clef: ${e.message}`, { cause: e });
|
|
112
|
+
}
|
|
113
|
+
throw e;
|
|
114
|
+
}
|
|
115
|
+
if (response.statusCode !== 200) {
|
|
116
|
+
throw new ClassifierError(`Clef refused the connection: ${this._failure(response)}`);
|
|
117
|
+
}
|
|
118
|
+
this._connected = true;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** Close the connection pool. */
|
|
122
|
+
async close() {
|
|
123
|
+
this._connected = false;
|
|
124
|
+
await this._http.aclose();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Send questions about one state and return Clef's answers.
|
|
128
|
+
*
|
|
129
|
+
* @param state What the questions are about.
|
|
130
|
+
* @param questions The questions by name, each in Clef's own format: a
|
|
131
|
+
* `type` of `noul`, `choice` or `score`, `instructions`, and `criteria`.
|
|
132
|
+
* @param images Images the questions can look at, each in Clef's own
|
|
133
|
+
* format: a `content_type` and the `base64` bytes.
|
|
134
|
+
* @returns The answers by the same names, in Clef's own format, and the
|
|
135
|
+
* tokens the request used.
|
|
136
|
+
* @throws ClassifierError If Clef rejected the request, kept refusing it
|
|
137
|
+
* because it was busy, could not be reached, or left a question
|
|
138
|
+
* unanswered.
|
|
139
|
+
*/
|
|
140
|
+
async ask(state, questions, images = []) {
|
|
141
|
+
const body = {
|
|
142
|
+
model: this._model,
|
|
143
|
+
state,
|
|
144
|
+
questions: { ...questions },
|
|
145
|
+
};
|
|
146
|
+
if (images.length > 0) {
|
|
147
|
+
body.images = images.map((image) => ({ ...image }));
|
|
148
|
+
}
|
|
149
|
+
let attempt = 0;
|
|
150
|
+
while (true) {
|
|
151
|
+
attempt += 1;
|
|
152
|
+
let response;
|
|
153
|
+
try {
|
|
154
|
+
response = await this._http.post(`/run/@cf/cloudflare/${this._model}`, { json: body });
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
if (e instanceof HttpError) {
|
|
158
|
+
// Some errors, such as a timeout, carry no useful message.
|
|
159
|
+
throw new ClassifierError(`Clef request failed: ${errorRepr(e)}`, { cause: e });
|
|
160
|
+
}
|
|
161
|
+
throw e;
|
|
162
|
+
}
|
|
163
|
+
if (response.statusCode === TOO_MANY_REQUESTS) {
|
|
164
|
+
if (attempt > this._maxRetries) {
|
|
165
|
+
throw new ClassifierError(`Clef is busy (${this._failure(response)}) after ${attempt} attempts`);
|
|
166
|
+
}
|
|
167
|
+
const wait = exponentialBackoffTime(attempt, 0.25, 2.0, 0.25);
|
|
168
|
+
logger.debug(`Clef answered ${response.statusCode}, retrying in ${wait}s`);
|
|
169
|
+
await sleep(wait);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (response.statusCode !== 200) {
|
|
173
|
+
throw new ClassifierError(`Clef rejected the request: ${this._failure(response)}`);
|
|
174
|
+
}
|
|
175
|
+
const result = this._result(response);
|
|
176
|
+
const usage = result.usage;
|
|
177
|
+
const requestUsage = isDict(usage) ? ClefUsage.fromDict(usage) : new ClefUsage();
|
|
178
|
+
this._usage.inputTokens += requestUsage.inputTokens;
|
|
179
|
+
this._usage.outputTokens += requestUsage.outputTokens;
|
|
180
|
+
const answers = result.answers;
|
|
181
|
+
if (!isDict(answers)) {
|
|
182
|
+
throw new ClassifierError("Clef reply has no answers");
|
|
183
|
+
}
|
|
184
|
+
const missing = Object.keys(questions).filter((name) => !isDict(answers[name]));
|
|
185
|
+
if (missing.length > 0) {
|
|
186
|
+
throw new ClassifierError(`Clef reply has no answer for ${missing.join(", ")}`);
|
|
187
|
+
}
|
|
188
|
+
const answered = {};
|
|
189
|
+
for (const name of Object.keys(questions)) {
|
|
190
|
+
answered[name] = answers[name];
|
|
191
|
+
}
|
|
192
|
+
return [answered, requestUsage];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** The reply inside Cloudflare's `result` envelope. */
|
|
196
|
+
_result(response) {
|
|
197
|
+
let data;
|
|
198
|
+
try {
|
|
199
|
+
data = response.json();
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
rethrowIfCancelled(e);
|
|
203
|
+
throw new ClassifierError(`Clef reply is not valid JSON: ${e.message}`, {
|
|
204
|
+
cause: e,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
const result = isDict(data) ? data.result : null;
|
|
208
|
+
if (!isDict(result)) {
|
|
209
|
+
throw new ClassifierError("Clef reply has no result");
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/** A failed response's HTTP status and the reasons Cloudflare gave. */
|
|
214
|
+
_failure(response) {
|
|
215
|
+
const status = `HTTP ${response.statusCode}`;
|
|
216
|
+
let errors;
|
|
217
|
+
try {
|
|
218
|
+
const data = response.json();
|
|
219
|
+
if (!isDict(data)) {
|
|
220
|
+
return status;
|
|
221
|
+
}
|
|
222
|
+
errors = data.errors;
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
rethrowIfCancelled(e);
|
|
226
|
+
return status;
|
|
227
|
+
}
|
|
228
|
+
const reasons = (Array.isArray(errors) ? errors : [])
|
|
229
|
+
.filter((error) => isDict(error) && error.message)
|
|
230
|
+
.map((error) => String(error.message));
|
|
231
|
+
return reasons.length > 0 ? `${status}: ${reasons.join("; ")}` : status;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
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/classifiers/cloudflare/clef/__init__.py
|
|
6
|
+
// Upstream's `__init__.py` is empty: import the package's modules directly.
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
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/classifiers/cloudflare/__init__.py
|
|
6
|
+
// Upstream's `__init__.py` is empty: import the package's modules directly.
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** A request could not be sent or answered (upstream's `httpx.HTTPError`). */
|
|
2
|
+
export declare class HttpError extends Error {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
/** The request was not answered in time (upstream's `httpx.TimeoutException`). */
|
|
6
|
+
export declare class HttpTimeoutError extends HttpError {
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
/** Python's `repr()` of an exception: `Name('message')`. */
|
|
10
|
+
export declare function errorRepr(e: unknown): string;
|
|
11
|
+
/** A received response, its body already read. */
|
|
12
|
+
export declare class HttpResponse {
|
|
13
|
+
readonly statusCode: number;
|
|
14
|
+
readonly text: string;
|
|
15
|
+
constructor(statusCode: number, text: string);
|
|
16
|
+
/** The body parsed as JSON; throws a SyntaxError if it is not JSON. */
|
|
17
|
+
json(): unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface HttpClientOptions {
|
|
20
|
+
/** Prepended to every request path. */
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
/** Headers sent with every request. */
|
|
23
|
+
headers?: Record<string, string>;
|
|
24
|
+
/** Seconds to wait for a reply before giving up. */
|
|
25
|
+
timeout?: number;
|
|
26
|
+
/** The transport; the global `fetch` by default. */
|
|
27
|
+
fetch?: typeof fetch;
|
|
28
|
+
}
|
|
29
|
+
export interface HttpRequestOptions {
|
|
30
|
+
/** Query parameters. */
|
|
31
|
+
params?: Record<string, string>;
|
|
32
|
+
/** A body to send as JSON. */
|
|
33
|
+
json?: unknown;
|
|
34
|
+
/** Headers for this request, on top of the client's. */
|
|
35
|
+
headers?: Record<string, string>;
|
|
36
|
+
}
|
|
37
|
+
/** Sends requests to one API. */
|
|
38
|
+
export declare class HttpClient {
|
|
39
|
+
/** The transport requests go through; replace it to answer them in tests. */
|
|
40
|
+
transport: typeof fetch;
|
|
41
|
+
protected _baseUrl: string;
|
|
42
|
+
protected _headers: Record<string, string>;
|
|
43
|
+
protected _timeout: number;
|
|
44
|
+
protected _closed: boolean;
|
|
45
|
+
constructor(options: HttpClientOptions);
|
|
46
|
+
/** Whether the client has been closed. */
|
|
47
|
+
get isClosed(): boolean;
|
|
48
|
+
/** Send a GET request. */
|
|
49
|
+
get(path: string, options?: HttpRequestOptions): Promise<HttpResponse>;
|
|
50
|
+
/** Send a POST request. */
|
|
51
|
+
post(path: string, options?: HttpRequestOptions): Promise<HttpResponse>;
|
|
52
|
+
/**
|
|
53
|
+
* Send a request and read its whole body.
|
|
54
|
+
*
|
|
55
|
+
* @throws HttpError If the request could not be sent, or was not answered
|
|
56
|
+
* within the timeout (`HttpTimeoutError`).
|
|
57
|
+
*/
|
|
58
|
+
request(method: string, path: string, options?: HttpRequestOptions): Promise<HttpResponse>;
|
|
59
|
+
/** Close the client; later requests throw. */
|
|
60
|
+
aclose(): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
/** Base64 of `data`, without `Buffer`. */
|
|
63
|
+
export declare function bytesToBase64(data: Uint8Array): string;
|
|
64
|
+
/** Whether `value` is a JSON object (a Python dict). */
|
|
65
|
+
export declare function isDict(value: unknown): value is Record<string, unknown>;
|
|
66
|
+
/** Python's `float(value)`: a number from a number or numeric string, else a TypeError/ValueError. */
|
|
67
|
+
export declare function toFloat(value: unknown): number;
|
|
68
|
+
/** Python's `value or ""`: the value, or an empty string when it is falsy (null, "", {} or []). */
|
|
69
|
+
export declare function orEmpty(value: unknown): unknown;
|
|
70
|
+
//# sourceMappingURL=http_client.d.ts.map
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// Copyright (c) 2026, pipedog contributors
|
|
2
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
//
|
|
4
|
+
// A small fetch-based HTTP client for the hosted classifier clients, standing
|
|
5
|
+
// in for the parts of `httpx.AsyncClient` they use: a base URL, default
|
|
6
|
+
// headers, a per-request timeout, JSON bodies, and a swappable transport so
|
|
7
|
+
// tests can answer requests without a network (as upstream tests swap in an
|
|
8
|
+
// `httpx.MockTransport`).
|
|
9
|
+
//
|
|
10
|
+
// HTTP/2 and connection keep-alive are left to the runtime's `fetch`.
|
|
11
|
+
import { abortable, currentSignal, rethrowIfCancelled } from "@pipedog/asyncio";
|
|
12
|
+
/** A request could not be sent or answered (upstream's `httpx.HTTPError`). */
|
|
13
|
+
export class HttpError extends Error {
|
|
14
|
+
name = "HttpError";
|
|
15
|
+
}
|
|
16
|
+
/** The request was not answered in time (upstream's `httpx.TimeoutException`). */
|
|
17
|
+
export class HttpTimeoutError extends HttpError {
|
|
18
|
+
name = "HttpTimeoutError";
|
|
19
|
+
}
|
|
20
|
+
/** Python's `repr()` of an exception: `Name('message')`. */
|
|
21
|
+
export function errorRepr(e) {
|
|
22
|
+
if (e instanceof Error) {
|
|
23
|
+
return `${e.name}('${e.message}')`;
|
|
24
|
+
}
|
|
25
|
+
return String(e);
|
|
26
|
+
}
|
|
27
|
+
/** A received response, its body already read. */
|
|
28
|
+
export class HttpResponse {
|
|
29
|
+
statusCode;
|
|
30
|
+
text;
|
|
31
|
+
constructor(statusCode, text) {
|
|
32
|
+
this.statusCode = statusCode;
|
|
33
|
+
this.text = text;
|
|
34
|
+
}
|
|
35
|
+
/** The body parsed as JSON; throws a SyntaxError if it is not JSON. */
|
|
36
|
+
json() {
|
|
37
|
+
return JSON.parse(this.text);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Sends requests to one API. */
|
|
41
|
+
export class HttpClient {
|
|
42
|
+
/** The transport requests go through; replace it to answer them in tests. */
|
|
43
|
+
transport;
|
|
44
|
+
_baseUrl;
|
|
45
|
+
_headers;
|
|
46
|
+
_timeout;
|
|
47
|
+
_closed = false;
|
|
48
|
+
constructor(options) {
|
|
49
|
+
this._baseUrl = options.baseUrl.replace(/\/+$/, "");
|
|
50
|
+
this._headers = options.headers ?? {};
|
|
51
|
+
this._timeout = options.timeout ?? 5.0;
|
|
52
|
+
this.transport = options.fetch ?? ((input, init) => fetch(input, init));
|
|
53
|
+
}
|
|
54
|
+
/** Whether the client has been closed. */
|
|
55
|
+
get isClosed() {
|
|
56
|
+
return this._closed;
|
|
57
|
+
}
|
|
58
|
+
/** Send a GET request. */
|
|
59
|
+
async get(path, options = {}) {
|
|
60
|
+
return await this.request("GET", path, options);
|
|
61
|
+
}
|
|
62
|
+
/** Send a POST request. */
|
|
63
|
+
async post(path, options = {}) {
|
|
64
|
+
return await this.request("POST", path, options);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Send a request and read its whole body.
|
|
68
|
+
*
|
|
69
|
+
* @throws HttpError If the request could not be sent, or was not answered
|
|
70
|
+
* within the timeout (`HttpTimeoutError`).
|
|
71
|
+
*/
|
|
72
|
+
async request(method, path, options = {}) {
|
|
73
|
+
if (this._closed) {
|
|
74
|
+
throw new Error("Cannot send a request, as the client has been closed.");
|
|
75
|
+
}
|
|
76
|
+
let url = `${this._baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
|
|
77
|
+
if (options.params && Object.keys(options.params).length > 0) {
|
|
78
|
+
url += `?${new URLSearchParams(options.params).toString()}`;
|
|
79
|
+
}
|
|
80
|
+
const headers = { ...this._headers, ...(options.headers ?? {}) };
|
|
81
|
+
let body;
|
|
82
|
+
if (options.json !== undefined) {
|
|
83
|
+
body = JSON.stringify(options.json);
|
|
84
|
+
headers["Content-Type"] = "application/json";
|
|
85
|
+
}
|
|
86
|
+
const timeoutSignal = AbortSignal.timeout(this._timeout * 1000);
|
|
87
|
+
const signal = AbortSignal.any([currentSignal(), timeoutSignal]);
|
|
88
|
+
try {
|
|
89
|
+
return await abortable((async () => {
|
|
90
|
+
const response = await this.transport(url, { method, headers, body, signal });
|
|
91
|
+
const text = await response.text();
|
|
92
|
+
return new HttpResponse(response.status, text);
|
|
93
|
+
})());
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
rethrowIfCancelled(e);
|
|
97
|
+
if (timeoutSignal.aborted) {
|
|
98
|
+
throw new HttpTimeoutError(`timed out after ${this._timeout}s`, { cause: e });
|
|
99
|
+
}
|
|
100
|
+
if (e instanceof HttpError) {
|
|
101
|
+
throw e;
|
|
102
|
+
}
|
|
103
|
+
throw new HttpError(e instanceof Error ? e.message : String(e), { cause: e });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Close the client; later requests throw. */
|
|
107
|
+
async aclose() {
|
|
108
|
+
this._closed = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Base64 of `data`, without `Buffer`. */
|
|
112
|
+
export function bytesToBase64(data) {
|
|
113
|
+
let binary = "";
|
|
114
|
+
const chunk = 0x8000;
|
|
115
|
+
for (let i = 0; i < data.length; i += chunk) {
|
|
116
|
+
binary += String.fromCharCode(...data.subarray(i, i + chunk));
|
|
117
|
+
}
|
|
118
|
+
return btoa(binary);
|
|
119
|
+
}
|
|
120
|
+
/** Whether `value` is a JSON object (a Python dict). */
|
|
121
|
+
export function isDict(value) {
|
|
122
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
123
|
+
}
|
|
124
|
+
/** Python's `float(value)`: a number from a number or numeric string, else a TypeError/ValueError. */
|
|
125
|
+
export function toFloat(value) {
|
|
126
|
+
if (typeof value === "number") {
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
if (typeof value === "boolean") {
|
|
130
|
+
return value ? 1 : 0;
|
|
131
|
+
}
|
|
132
|
+
if (typeof value === "string") {
|
|
133
|
+
const trimmed = value.trim().toLowerCase();
|
|
134
|
+
if (/^[+-]?(inf|infinity)$/.test(trimmed)) {
|
|
135
|
+
return trimmed.startsWith("-") ? -Infinity : Infinity;
|
|
136
|
+
}
|
|
137
|
+
if (trimmed === "nan" || trimmed === "+nan" || trimmed === "-nan") {
|
|
138
|
+
return Number.NaN;
|
|
139
|
+
}
|
|
140
|
+
const n = Number(trimmed);
|
|
141
|
+
if (trimmed !== "" && Number.isFinite(n)) {
|
|
142
|
+
return n;
|
|
143
|
+
}
|
|
144
|
+
throw new RangeError(`could not convert string to float: '${value}'`);
|
|
145
|
+
}
|
|
146
|
+
throw new TypeError(`float() argument must be a string or a real number, not '${value === null ? "NoneType" : typeof value}'`);
|
|
147
|
+
}
|
|
148
|
+
/** Python's `value or ""`: the value, or an empty string when it is falsy (null, "", {} or []). */
|
|
149
|
+
export function orEmpty(value) {
|
|
150
|
+
if (value === null || value === undefined || value === "") {
|
|
151
|
+
return "";
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(value)) {
|
|
154
|
+
return value.length === 0 ? "" : value;
|
|
155
|
+
}
|
|
156
|
+
if (isDict(value) && Object.keys(value).length === 0) {
|
|
157
|
+
return "";
|
|
158
|
+
}
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=http_client.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
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/classifiers/__init__.py
|
|
6
|
+
// Upstream's `__init__.py` is empty: import the package's modules directly.
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PORTING NOTE: upstream's `pipecat.classifiers.jev.classifier` is a deprecated
|
|
3
|
+
* alias (since 1.13.0, removed in 2.0.0) that re-exports
|
|
4
|
+
* `pipecat.classifiers.typesafe.jev.classifier`. Deprecated aliases are not
|
|
5
|
+
* ported: import `classifiers/typesafe/jev/classifier.ts` instead.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=classifier.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
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/classifiers/jev/classifier.py
|
|
6
|
+
/**
|
|
7
|
+
* PORTING NOTE: upstream's `pipecat.classifiers.jev.classifier` is a deprecated
|
|
8
|
+
* alias (since 1.13.0, removed in 2.0.0) that re-exports
|
|
9
|
+
* `pipecat.classifiers.typesafe.jev.classifier`. Deprecated aliases are not
|
|
10
|
+
* ported: import `classifiers/typesafe/jev/classifier.ts` instead.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=classifier.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PORTING NOTE: upstream's `pipecat.classifiers.jev.client` is a deprecated
|
|
3
|
+
* alias (since 1.13.0, removed in 2.0.0) that re-exports
|
|
4
|
+
* `pipecat.classifiers.typesafe.jev.client`. Deprecated aliases are not
|
|
5
|
+
* ported: import `classifiers/typesafe/jev/client.ts` instead.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
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/classifiers/jev/client.py
|
|
6
|
+
/**
|
|
7
|
+
* PORTING NOTE: upstream's `pipecat.classifiers.jev.client` is a deprecated
|
|
8
|
+
* alias (since 1.13.0, removed in 2.0.0) that re-exports
|
|
9
|
+
* `pipecat.classifiers.typesafe.jev.client`. Deprecated aliases are not
|
|
10
|
+
* ported: import `classifiers/typesafe/jev/client.ts` instead.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
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/classifiers/jev/__init__.py
|
|
6
|
+
// Upstream's `__init__.py` is empty: import the package's modules directly.
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|