@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,72 @@
|
|
|
1
|
+
import { type LLMContextMessage } from "../../processors/aggregators/llm_context.ts";
|
|
2
|
+
import { type LLMService } from "../../services/llm_service.ts";
|
|
3
|
+
import { BaseClassifier, type BaseClassifierOptions, type ClassifierImage, type ClassifierQuestion, type ClassifierResult, type ClassifierValue } from "../base_classifier.ts";
|
|
4
|
+
export declare const DEFAULT_INSTRUCTIONS: string;
|
|
5
|
+
export interface LLMClassifierOptions extends BaseClassifierOptions {
|
|
6
|
+
/** The LLM that answers the questions. */
|
|
7
|
+
llm: LLMService;
|
|
8
|
+
/**
|
|
9
|
+
* System instructions for the LLM. The default asks for one JSON object
|
|
10
|
+
* with an answer per question.
|
|
11
|
+
*/
|
|
12
|
+
instructions?: string | null;
|
|
13
|
+
/** Cap on the reply's length, for services that take one. */
|
|
14
|
+
maxTokens?: number | null;
|
|
15
|
+
/** Seconds to wait for the LLM's reply before giving up. Defaults to 10. */
|
|
16
|
+
timeout?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Answers questions by asking an LLM for a JSON object.
|
|
20
|
+
*
|
|
21
|
+
* The probabilities are whatever the LLM wrote, so they are not calibrated.
|
|
22
|
+
* Any service that implements `runInference()` can back a classifier;
|
|
23
|
+
* realtime services cannot. The reply's shape is enforced by the provider
|
|
24
|
+
* where the service supports a reply schema, and otherwise asked for in the
|
|
25
|
+
* prompt and parsed from the reply. Images go to the LLM with the questions,
|
|
26
|
+
* so they need an LLM that can see them.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* const classifier = new LLMClassifier({ llm: new OpenAILLMService({ model: "gpt-4o-mini" }) });
|
|
30
|
+
* const results = await classifier.yesNo("Hi, you've reached Dana. Leave a message.", {
|
|
31
|
+
* voicemail: new YesNoQuestion({ instructions: "is this a voicemail greeting?" }),
|
|
32
|
+
* });
|
|
33
|
+
* results.voicemail.probability;
|
|
34
|
+
*/
|
|
35
|
+
export declare class LLMClassifier extends BaseClassifier {
|
|
36
|
+
protected _llm: LLMService;
|
|
37
|
+
protected _instructions: string;
|
|
38
|
+
protected _maxTokens: number | null;
|
|
39
|
+
protected _timeout: number;
|
|
40
|
+
constructor(options: LLMClassifierOptions);
|
|
41
|
+
/** The LLM that answers the questions. */
|
|
42
|
+
get llm(): LLMService;
|
|
43
|
+
/** The LLM service's model. */
|
|
44
|
+
get model(): string | null;
|
|
45
|
+
/** Whether questions can come with images; the LLM must be able to see them. */
|
|
46
|
+
get supportsImages(): boolean;
|
|
47
|
+
/** Answer the questions in one LLM call. The call reports no token usage. */
|
|
48
|
+
protected _ask(state: ClassifierValue, questions: Readonly<Record<string, ClassifierQuestion>>, images?: readonly ClassifierImage[]): Promise<[Record<string, ClassifierResult>, null]>;
|
|
49
|
+
/** The message the LLM answers: any images, then the state and the questions. */
|
|
50
|
+
protected _message(state: ClassifierValue, questions: Readonly<Record<string, ClassifierQuestion>>, images: readonly ClassifierImage[]): LLMContextMessage;
|
|
51
|
+
/** The image as a base64 data URL. */
|
|
52
|
+
protected _dataUrl(image: ClassifierImage): string;
|
|
53
|
+
/** Write the state and the questions as the message the LLM answers. */
|
|
54
|
+
protected _render(state: ClassifierValue, questions: Readonly<Record<string, ClassifierQuestion>>): string;
|
|
55
|
+
/** The JSON schema of the reply: one answer per question, in its shape. */
|
|
56
|
+
protected _schema(questions: Readonly<Record<string, ClassifierQuestion>>): Record<string, unknown>;
|
|
57
|
+
/** A schema for an object with exactly these properties, all required. */
|
|
58
|
+
protected _object(properties: Record<string, unknown>): Record<string, unknown>;
|
|
59
|
+
/** The JSON object in the LLM's reply, fences and prose around it ignored. */
|
|
60
|
+
protected _parse(reply: string): Record<string, unknown>;
|
|
61
|
+
/** A result built from the LLM's answer to the question. */
|
|
62
|
+
protected _result(question: ClassifierQuestion, answer: Record<string, unknown>): ClassifierResult;
|
|
63
|
+
/** Text for the LLM: a string as is, structured data as JSON. */
|
|
64
|
+
protected _text(value: unknown): string;
|
|
65
|
+
/** The number the LLM wrote under `key`, or a ClassifierError if it did not. */
|
|
66
|
+
protected _number(answer: Record<string, unknown>, key: string): number;
|
|
67
|
+
/** The number under `key` kept between 0 and 1, for probabilities and confidences. */
|
|
68
|
+
protected _unit(answer: Record<string, unknown>, key: string): number;
|
|
69
|
+
/** A number the LLM wrote, kept between 0 and 1. */
|
|
70
|
+
protected _clamp(value: unknown): number;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=classifier.d.ts.map
|
|
@@ -0,0 +1,304 @@
|
|
|
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/llm/classifier.py
|
|
6
|
+
/**
|
|
7
|
+
* Classifier backed by any Pipecat LLM service.
|
|
8
|
+
*
|
|
9
|
+
* Every question about a state goes to the LLM in one out-of-pipeline call,
|
|
10
|
+
* through the service's `runInference()`. The LLM is asked for one JSON
|
|
11
|
+
* object with an answer per question, and the object is parsed into results.
|
|
12
|
+
*/
|
|
13
|
+
import { rethrowIfCancelled, TimeoutError, waitFor } from "@pipedog/asyncio";
|
|
14
|
+
import { LLMContext } from "../../processors/aggregators/llm_context.js";
|
|
15
|
+
import { NotImplementedError } from "../../services/llm_service.js";
|
|
16
|
+
import { BaseClassifier, ChoiceQuestion, ChoiceResult, ClassifierError, ScoreLevel, ScoreResult, YesNoQuestion, YesNoResult, } from "../base_classifier.js";
|
|
17
|
+
import { bytesToBase64, isDict, toFloat } from "../http_client.js";
|
|
18
|
+
export const DEFAULT_INSTRUCTIONS = "You are a classifier. Each message describes some input and asks one or " +
|
|
19
|
+
"more questions about it. Every question has a name and says the shape its " +
|
|
20
|
+
"answer must have. Reply with a single JSON object, and nothing else: one " +
|
|
21
|
+
"key per question name, each holding that question's answer in the shape " +
|
|
22
|
+
"asked for. Probabilities and confidences are numbers from 0 to 1. For " +
|
|
23
|
+
'example, a yes or no question named "voicemail" is answered ' +
|
|
24
|
+
'{"voicemail": {"probability": 0.97}}. A choice question named "department" ' +
|
|
25
|
+
"with the options billing, support and sales is answered " +
|
|
26
|
+
'{"department": {"choice": "billing", "probabilities": {"billing": 0.92, ' +
|
|
27
|
+
'"support": 0.06, "sales": 0.02}}}. A score question named "mood" on a ' +
|
|
28
|
+
"scale of three levels is answered with a probability per level, by position, " +
|
|
29
|
+
'{"mood": {"probabilities": {"0": 0.1, "1": 0.7, "2": 0.2}}}. ' +
|
|
30
|
+
"Several questions about one input get one object with an answer for each " +
|
|
31
|
+
"of them.";
|
|
32
|
+
/** Python's `repr()` of a string. */
|
|
33
|
+
function strRepr(value) {
|
|
34
|
+
return `'${value.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n")}'`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Answers questions by asking an LLM for a JSON object.
|
|
38
|
+
*
|
|
39
|
+
* The probabilities are whatever the LLM wrote, so they are not calibrated.
|
|
40
|
+
* Any service that implements `runInference()` can back a classifier;
|
|
41
|
+
* realtime services cannot. The reply's shape is enforced by the provider
|
|
42
|
+
* where the service supports a reply schema, and otherwise asked for in the
|
|
43
|
+
* prompt and parsed from the reply. Images go to the LLM with the questions,
|
|
44
|
+
* so they need an LLM that can see them.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const classifier = new LLMClassifier({ llm: new OpenAILLMService({ model: "gpt-4o-mini" }) });
|
|
48
|
+
* const results = await classifier.yesNo("Hi, you've reached Dana. Leave a message.", {
|
|
49
|
+
* voicemail: new YesNoQuestion({ instructions: "is this a voicemail greeting?" }),
|
|
50
|
+
* });
|
|
51
|
+
* results.voicemail.probability;
|
|
52
|
+
*/
|
|
53
|
+
export class LLMClassifier extends BaseClassifier {
|
|
54
|
+
_llm;
|
|
55
|
+
_instructions;
|
|
56
|
+
_maxTokens;
|
|
57
|
+
_timeout;
|
|
58
|
+
constructor(options) {
|
|
59
|
+
super(options);
|
|
60
|
+
this._llm = options.llm;
|
|
61
|
+
this._instructions = options.instructions || DEFAULT_INSTRUCTIONS;
|
|
62
|
+
this._maxTokens = options.maxTokens ?? null;
|
|
63
|
+
this._timeout = options.timeout ?? 10.0;
|
|
64
|
+
}
|
|
65
|
+
/** The LLM that answers the questions. */
|
|
66
|
+
get llm() {
|
|
67
|
+
return this._llm;
|
|
68
|
+
}
|
|
69
|
+
/** The LLM service's model. */
|
|
70
|
+
get model() {
|
|
71
|
+
const model = this._llm.settings.model;
|
|
72
|
+
return typeof model === "string" ? model : null;
|
|
73
|
+
}
|
|
74
|
+
/** Whether questions can come with images; the LLM must be able to see them. */
|
|
75
|
+
get supportsImages() {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/** Answer the questions in one LLM call. The call reports no token usage. */
|
|
79
|
+
async _ask(state, questions, images = []) {
|
|
80
|
+
const context = new LLMContext({ messages: [this._message(state, questions, images)] });
|
|
81
|
+
let reply;
|
|
82
|
+
try {
|
|
83
|
+
reply = await waitFor(() => this._llm.runInference(context, {
|
|
84
|
+
maxTokens: this._maxTokens,
|
|
85
|
+
systemInstruction: this._instructions,
|
|
86
|
+
responseSchema: this._schema(questions),
|
|
87
|
+
}), this._timeout);
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
rethrowIfCancelled(e);
|
|
91
|
+
if (e instanceof NotImplementedError) {
|
|
92
|
+
throw new ClassifierError(`${this._llm} cannot run a one-shot inference`, { cause: e });
|
|
93
|
+
}
|
|
94
|
+
if (e instanceof TimeoutError) {
|
|
95
|
+
throw new ClassifierError(`${this._llm} did not answer within ${this._timeout}s`, {
|
|
96
|
+
cause: e,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
throw new ClassifierError(`${this._llm} failed to answer: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
100
|
+
}
|
|
101
|
+
let answers = this._parse(reply || "");
|
|
102
|
+
const names = Object.keys(questions);
|
|
103
|
+
if (names.length === 1 && !names.some((name) => Object.hasOwn(answers, name))) {
|
|
104
|
+
// A lone answer often comes back without its name around it.
|
|
105
|
+
answers = { [names[0]]: answers };
|
|
106
|
+
}
|
|
107
|
+
const results = {};
|
|
108
|
+
for (const [name, question] of Object.entries(questions)) {
|
|
109
|
+
const answer = answers[name];
|
|
110
|
+
if (!isDict(answer)) {
|
|
111
|
+
throw new ClassifierError(`the LLM gave no answer for '${name}'`);
|
|
112
|
+
}
|
|
113
|
+
results[name] = this._result(question, answer);
|
|
114
|
+
}
|
|
115
|
+
return [results, null];
|
|
116
|
+
}
|
|
117
|
+
/** The message the LLM answers: any images, then the state and the questions. */
|
|
118
|
+
_message(state, questions, images) {
|
|
119
|
+
const text = this._render(state, questions);
|
|
120
|
+
if (images.length === 0) {
|
|
121
|
+
return { role: "user", content: text };
|
|
122
|
+
}
|
|
123
|
+
const content = images.map((image) => ({
|
|
124
|
+
type: "image_url",
|
|
125
|
+
image_url: { url: this._dataUrl(image) },
|
|
126
|
+
}));
|
|
127
|
+
content.push({ type: "text", text });
|
|
128
|
+
return { role: "user", content };
|
|
129
|
+
}
|
|
130
|
+
/** The image as a base64 data URL. */
|
|
131
|
+
_dataUrl(image) {
|
|
132
|
+
return `data:${image.contentType};base64,${bytesToBase64(image.data)}`;
|
|
133
|
+
}
|
|
134
|
+
/** Write the state and the questions as the message the LLM answers. */
|
|
135
|
+
_render(state, questions) {
|
|
136
|
+
const parts = [`Input:\n${this._text(state)}`];
|
|
137
|
+
for (const [name, question] of Object.entries(questions)) {
|
|
138
|
+
const lines = [`Question "${name}": ${this._text(question.instructions)}`];
|
|
139
|
+
if (question instanceof YesNoQuestion) {
|
|
140
|
+
if (question.yes !== null) {
|
|
141
|
+
lines.push(`Yes means: ${this._text(question.yes)}`);
|
|
142
|
+
}
|
|
143
|
+
if (question.no !== null) {
|
|
144
|
+
lines.push(`No means: ${this._text(question.no)}`);
|
|
145
|
+
}
|
|
146
|
+
lines.push('Answer shape: {"probability": <probability that the answer is yes>}');
|
|
147
|
+
}
|
|
148
|
+
else if (question instanceof ChoiceQuestion) {
|
|
149
|
+
lines.push("Options:");
|
|
150
|
+
for (const [option, description] of Object.entries(question.options)) {
|
|
151
|
+
lines.push(description !== null ? `- ${option}: ${this._text(description)}` : `- ${option}`);
|
|
152
|
+
}
|
|
153
|
+
lines.push('Answer shape: {"choice": <the option that fits best>, ' +
|
|
154
|
+
'"probabilities": {<a probability per option, summing to 1>}}');
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
lines.push("Scale, lowest first:");
|
|
158
|
+
question.levels.forEach((level, index) => {
|
|
159
|
+
lines.push(`${index}: ${this._text(level)}`);
|
|
160
|
+
});
|
|
161
|
+
const positions = question.levels.map((_l, i) => `"${i}": <probability>`).join(", ");
|
|
162
|
+
lines.push(`Answer shape: {"probabilities": {${positions}}}, one per level by position, summing to 1`);
|
|
163
|
+
}
|
|
164
|
+
parts.push(lines.join("\n"));
|
|
165
|
+
}
|
|
166
|
+
const names = Object.keys(questions)
|
|
167
|
+
.map((name) => `"${name}": <answer to "${name}">`)
|
|
168
|
+
.join(", ");
|
|
169
|
+
parts.push(`Reply with one JSON object of this shape: {${names}}`);
|
|
170
|
+
return parts.join("\n\n");
|
|
171
|
+
}
|
|
172
|
+
/** The JSON schema of the reply: one answer per question, in its shape. */
|
|
173
|
+
_schema(questions) {
|
|
174
|
+
const answers = {};
|
|
175
|
+
for (const [name, question] of Object.entries(questions)) {
|
|
176
|
+
if (question instanceof YesNoQuestion) {
|
|
177
|
+
answers[name] = this._object({ probability: { type: "number" } });
|
|
178
|
+
}
|
|
179
|
+
else if (question instanceof ChoiceQuestion) {
|
|
180
|
+
const options = Object.keys(question.options);
|
|
181
|
+
answers[name] = this._object({
|
|
182
|
+
choice: { type: "string", enum: options },
|
|
183
|
+
probabilities: this._object(Object.fromEntries(options.map((o) => [o, { type: "number" }]))),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const positions = question.levels.map((_l, i) => String(i));
|
|
188
|
+
answers[name] = this._object({
|
|
189
|
+
probabilities: this._object(Object.fromEntries(positions.map((i) => [i, { type: "number" }]))),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return this._object(answers);
|
|
194
|
+
}
|
|
195
|
+
/** A schema for an object with exactly these properties, all required. */
|
|
196
|
+
_object(properties) {
|
|
197
|
+
return {
|
|
198
|
+
type: "object",
|
|
199
|
+
properties,
|
|
200
|
+
required: Object.keys(properties),
|
|
201
|
+
additionalProperties: false,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/** The JSON object in the LLM's reply, fences and prose around it ignored. */
|
|
205
|
+
_parse(reply) {
|
|
206
|
+
let text = reply.trim();
|
|
207
|
+
const fenced = /```(?:json)?\s*([\s\S]*?)```/.exec(text);
|
|
208
|
+
if (fenced) {
|
|
209
|
+
text = (fenced[1] ?? "").trim();
|
|
210
|
+
}
|
|
211
|
+
const start = text.indexOf("{");
|
|
212
|
+
const end = text.lastIndexOf("}");
|
|
213
|
+
if (start === -1 || end === -1) {
|
|
214
|
+
throw new ClassifierError(`the LLM did not answer with a JSON object: ${strRepr(reply)}`);
|
|
215
|
+
}
|
|
216
|
+
let data;
|
|
217
|
+
try {
|
|
218
|
+
data = JSON.parse(text.slice(start, end + 1));
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
rethrowIfCancelled(e);
|
|
222
|
+
throw new ClassifierError(`the LLM's answer is not valid JSON: ${e.message}`, {
|
|
223
|
+
cause: e,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (!isDict(data)) {
|
|
227
|
+
throw new ClassifierError("the LLM's answer is not a JSON object");
|
|
228
|
+
}
|
|
229
|
+
return data;
|
|
230
|
+
}
|
|
231
|
+
/** A result built from the LLM's answer to the question. */
|
|
232
|
+
_result(question, answer) {
|
|
233
|
+
if (question instanceof YesNoQuestion) {
|
|
234
|
+
return new YesNoResult({ probability: this._unit(answer, "probability") });
|
|
235
|
+
}
|
|
236
|
+
if (question instanceof ChoiceQuestion) {
|
|
237
|
+
const choice = String(answer.choice ?? "");
|
|
238
|
+
if (!Object.hasOwn(question.options, choice)) {
|
|
239
|
+
throw new ClassifierError(`the LLM chose '${choice}', which is not an option`);
|
|
240
|
+
}
|
|
241
|
+
const rawGiven = answer.probabilities;
|
|
242
|
+
const given = isDict(rawGiven) ? rawGiven : {};
|
|
243
|
+
const probabilities = {};
|
|
244
|
+
for (const o of Object.keys(question.options)) {
|
|
245
|
+
probabilities[o] = this._clamp(Object.hasOwn(given, o) ? given[o] : 0.0);
|
|
246
|
+
}
|
|
247
|
+
return new ChoiceResult({
|
|
248
|
+
choice,
|
|
249
|
+
probabilities,
|
|
250
|
+
confidence: probabilities[choice],
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// The LLM gives a probability per level, by position. The score is the
|
|
254
|
+
// probability-weighted position and the confidence the largest share, as
|
|
255
|
+
// with Jev; a distribution that does not sum to 1 is scaled to.
|
|
256
|
+
const rawGiven = answer.probabilities;
|
|
257
|
+
const given = isDict(rawGiven) ? rawGiven : {};
|
|
258
|
+
let probabilities = question.levels.map((_l, i) => this._clamp(Object.hasOwn(given, String(i)) ? given[String(i)] : 0.0));
|
|
259
|
+
const total = probabilities.reduce((a, b) => a + b, 0);
|
|
260
|
+
if (total <= 0) {
|
|
261
|
+
throw new ClassifierError("the LLM gave no probability for any level");
|
|
262
|
+
}
|
|
263
|
+
probabilities = probabilities.map((p) => p / total);
|
|
264
|
+
return new ScoreResult({
|
|
265
|
+
score: probabilities.reduce((sum, p, i) => sum + i * p, 0),
|
|
266
|
+
levels: question.levels.map((level, i) => new ScoreLevel({ level, probability: probabilities[i] })),
|
|
267
|
+
confidence: Math.max(...probabilities),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/** Text for the LLM: a string as is, structured data as JSON. */
|
|
271
|
+
_text(value) {
|
|
272
|
+
return typeof value === "string" ? value : JSON.stringify(value, null, 2);
|
|
273
|
+
}
|
|
274
|
+
/** The number the LLM wrote under `key`, or a ClassifierError if it did not. */
|
|
275
|
+
_number(answer, key) {
|
|
276
|
+
try {
|
|
277
|
+
if (!Object.hasOwn(answer, key)) {
|
|
278
|
+
throw new RangeError(key);
|
|
279
|
+
}
|
|
280
|
+
return toFloat(answer[key]);
|
|
281
|
+
}
|
|
282
|
+
catch (e) {
|
|
283
|
+
rethrowIfCancelled(e);
|
|
284
|
+
throw new ClassifierError(`the LLM's answer has no usable '${key}'`, { cause: e });
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/** The number under `key` kept between 0 and 1, for probabilities and confidences. */
|
|
288
|
+
_unit(answer, key) {
|
|
289
|
+
return this._clamp(this._number(answer, key));
|
|
290
|
+
}
|
|
291
|
+
/** A number the LLM wrote, kept between 0 and 1. */
|
|
292
|
+
_clamp(value) {
|
|
293
|
+
try {
|
|
294
|
+
const number = toFloat(value);
|
|
295
|
+
// Python's max(0.0, nan) keeps 0.0.
|
|
296
|
+
return Number.isNaN(number) ? 0.0 : Math.min(1.0, Math.max(0.0, number));
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
rethrowIfCancelled(e);
|
|
300
|
+
return 0.0;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=classifier.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/llm/__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,77 @@
|
|
|
1
|
+
import { LLMTokenUsage } from "../../../metrics/metrics.ts";
|
|
2
|
+
import type { BaseTaskManager } from "../../../utils/asyncio/task_manager.ts";
|
|
3
|
+
import { BaseClassifier, type BaseClassifierOptions, type ClassifierImage, type ClassifierQuestion, type ClassifierResult, type ClassifierValue } from "../../base_classifier.ts";
|
|
4
|
+
import { OpenAIDecisionsClient } from "./client.ts";
|
|
5
|
+
/** The most options the Decisions API takes in one choice question. */
|
|
6
|
+
export declare const OPENAI_DECISIONS_MAX_CHOICE_OPTIONS = 255;
|
|
7
|
+
/** The most images the Decisions API takes in one request. */
|
|
8
|
+
export declare const OPENAI_DECISIONS_MAX_IMAGES = 128;
|
|
9
|
+
export interface OpenAIDecisionsClassifierOptions extends BaseClassifierOptions {
|
|
10
|
+
/** OpenAI API key, when the classifier should have a client of its own. */
|
|
11
|
+
apiKey?: string | null;
|
|
12
|
+
/** A client to share. One of `apiKey` and `client` is required. */
|
|
13
|
+
client?: OpenAIDecisionsClient | null;
|
|
14
|
+
/** The decision model a client of its own asks. */
|
|
15
|
+
model?: string;
|
|
16
|
+
/** Where a client of its own sends its questions. */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/** Seconds a client of its own waits for an answer. */
|
|
19
|
+
timeout?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Answers questions by asking OpenAI's Decisions API.
|
|
23
|
+
*
|
|
24
|
+
* Structured state, instructions and descriptions are sent as JSON. Build
|
|
25
|
+
* one with an API key to get a client of its own, or pass an
|
|
26
|
+
* `OpenAIDecisionsClient` to share one between several classifiers. A client
|
|
27
|
+
* the classifier created is closed in `cleanup()`; a shared one is left to
|
|
28
|
+
* whoever made it.
|
|
29
|
+
*
|
|
30
|
+
* The Decisions API can see images: up to `OPENAI_DECISIONS_MAX_IMAGES` per
|
|
31
|
+
* call.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* const classifier = new OpenAIDecisionsClassifier({ apiKey: process.env.OPENAI_API_KEY });
|
|
35
|
+
*/
|
|
36
|
+
export declare class OpenAIDecisionsClassifier extends BaseClassifier {
|
|
37
|
+
protected _ownsClient: boolean;
|
|
38
|
+
protected _client: OpenAIDecisionsClient;
|
|
39
|
+
constructor(options?: OpenAIDecisionsClassifierOptions);
|
|
40
|
+
/** The client this classifier asks through. */
|
|
41
|
+
get client(): OpenAIDecisionsClient;
|
|
42
|
+
/**
|
|
43
|
+
* Open the connection to OpenAI ahead of the first question.
|
|
44
|
+
*
|
|
45
|
+
* A connection that cannot be opened now is only a warning: the first
|
|
46
|
+
* question opens it itself.
|
|
47
|
+
*
|
|
48
|
+
* @param taskManager The task manager of the owner.
|
|
49
|
+
*/
|
|
50
|
+
setup(taskManager: BaseTaskManager): Promise<void>;
|
|
51
|
+
/** Close the client if this classifier created it. */
|
|
52
|
+
cleanup(): Promise<void>;
|
|
53
|
+
/** The decision model the questions go to. */
|
|
54
|
+
get model(): string;
|
|
55
|
+
/** The Decisions API can see images. */
|
|
56
|
+
get supportsImages(): boolean;
|
|
57
|
+
/** Answer the questions in one request. */
|
|
58
|
+
protected _ask(state: ClassifierValue, questions: Readonly<Record<string, ClassifierQuestion>>, images?: readonly ClassifierImage[]): Promise<[Record<string, ClassifierResult>, LLMTokenUsage]>;
|
|
59
|
+
/** The request's input: the state as text, or a user message with any images first. */
|
|
60
|
+
protected _input(state: ClassifierValue, images: readonly ClassifierImage[]): string | Record<string, unknown>[];
|
|
61
|
+
/** A question in the Decisions API's own format. */
|
|
62
|
+
protected _toOpenai(question: ClassifierQuestion): Record<string, unknown>;
|
|
63
|
+
/** A result built from the Decisions API's answer to the question. */
|
|
64
|
+
protected _fromOpenai(name: string, question: ClassifierQuestion, answer: Record<string, unknown>): ClassifierResult;
|
|
65
|
+
/** Text for the Decisions API: a string as is, structured data as JSON. */
|
|
66
|
+
protected _text(value: unknown): string;
|
|
67
|
+
/** The number the API wrote under `key`, or a ClassifierError if it did not. */
|
|
68
|
+
protected _number(answer: Record<string, unknown>, key: string): number;
|
|
69
|
+
/**
|
|
70
|
+
* The probability the API gave for each key, 0 for the ones it left out.
|
|
71
|
+
*
|
|
72
|
+
* The API lists probabilities as `{"value", "probability"}` items, where
|
|
73
|
+
* the value is a choice's option or a level's position.
|
|
74
|
+
*/
|
|
75
|
+
protected _probabilities(answer: Record<string, unknown>, keys: string[]): Record<string, number>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=classifier.d.ts.map
|