@livekit/agents 1.0.47 → 1.1.0-dev.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/dist/beta/index.cjs +29 -0
- package/dist/beta/index.cjs.map +1 -0
- package/dist/beta/index.d.cts +2 -0
- package/dist/beta/index.d.ts +2 -0
- package/dist/beta/index.d.ts.map +1 -0
- package/dist/beta/index.js +7 -0
- package/dist/beta/index.js.map +1 -0
- package/dist/beta/workflows/index.cjs +29 -0
- package/dist/beta/workflows/index.cjs.map +1 -0
- package/dist/beta/workflows/index.d.cts +2 -0
- package/dist/beta/workflows/index.d.ts +2 -0
- package/dist/beta/workflows/index.d.ts.map +1 -0
- package/dist/beta/workflows/index.js +7 -0
- package/dist/beta/workflows/index.js.map +1 -0
- package/dist/beta/workflows/task_group.cjs +162 -0
- package/dist/beta/workflows/task_group.cjs.map +1 -0
- package/dist/beta/workflows/task_group.d.cts +32 -0
- package/dist/beta/workflows/task_group.d.ts +32 -0
- package/dist/beta/workflows/task_group.d.ts.map +1 -0
- package/dist/beta/workflows/task_group.js +138 -0
- package/dist/beta/workflows/task_group.js.map +1 -0
- package/dist/constants.cjs +27 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +9 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/api_protos.d.cts +12 -12
- package/dist/inference/api_protos.d.ts +12 -12
- package/dist/inference/interruption/defaults.cjs +81 -0
- package/dist/inference/interruption/defaults.cjs.map +1 -0
- package/dist/inference/interruption/defaults.d.cts +19 -0
- package/dist/inference/interruption/defaults.d.ts +19 -0
- package/dist/inference/interruption/defaults.d.ts.map +1 -0
- package/dist/inference/interruption/defaults.js +46 -0
- package/dist/inference/interruption/defaults.js.map +1 -0
- package/dist/inference/interruption/errors.cjs +44 -0
- package/dist/inference/interruption/errors.cjs.map +1 -0
- package/dist/inference/interruption/errors.d.cts +12 -0
- package/dist/inference/interruption/errors.d.ts +12 -0
- package/dist/inference/interruption/errors.d.ts.map +1 -0
- package/dist/inference/interruption/errors.js +20 -0
- package/dist/inference/interruption/errors.js.map +1 -0
- package/dist/inference/interruption/http_transport.cjs +147 -0
- package/dist/inference/interruption/http_transport.cjs.map +1 -0
- package/dist/inference/interruption/http_transport.d.cts +63 -0
- package/dist/inference/interruption/http_transport.d.ts +63 -0
- package/dist/inference/interruption/http_transport.d.ts.map +1 -0
- package/dist/inference/interruption/http_transport.js +121 -0
- package/dist/inference/interruption/http_transport.js.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.js +34 -0
- package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
- package/dist/inference/interruption/interruption_detector.cjs +181 -0
- package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
- package/dist/inference/interruption/interruption_detector.d.cts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_detector.js +147 -0
- package/dist/inference/interruption/interruption_detector.js.map +1 -0
- package/dist/inference/interruption/interruption_stream.cjs +368 -0
- package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
- package/dist/inference/interruption/interruption_stream.d.cts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_stream.js +344 -0
- package/dist/inference/interruption/interruption_stream.js.map +1 -0
- package/dist/inference/interruption/types.cjs +17 -0
- package/dist/inference/interruption/types.cjs.map +1 -0
- package/dist/inference/interruption/types.d.cts +66 -0
- package/dist/inference/interruption/types.d.ts +66 -0
- package/dist/inference/interruption/types.d.ts.map +1 -0
- package/dist/inference/interruption/types.js +1 -0
- package/dist/inference/interruption/types.js.map +1 -0
- package/dist/inference/interruption/utils.cjs +130 -0
- package/dist/inference/interruption/utils.cjs.map +1 -0
- package/dist/inference/interruption/utils.d.cts +41 -0
- package/dist/inference/interruption/utils.d.ts +41 -0
- package/dist/inference/interruption/utils.d.ts.map +1 -0
- package/dist/inference/interruption/utils.js +105 -0
- package/dist/inference/interruption/utils.js.map +1 -0
- package/dist/inference/interruption/utils.test.cjs +105 -0
- package/dist/inference/interruption/utils.test.cjs.map +1 -0
- package/dist/inference/interruption/utils.test.js +104 -0
- package/dist/inference/interruption/utils.test.js.map +1 -0
- package/dist/inference/interruption/ws_transport.cjs +329 -0
- package/dist/inference/interruption/ws_transport.cjs.map +1 -0
- package/dist/inference/interruption/ws_transport.d.cts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
- package/dist/inference/interruption/ws_transport.js +295 -0
- package/dist/inference/interruption/ws_transport.js.map +1 -0
- package/dist/inference/llm.cjs +14 -10
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.cts +2 -1
- package/dist/inference/llm.d.ts +2 -1
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js +8 -10
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/stt.cjs +7 -2
- package/dist/inference/stt.cjs.map +1 -1
- package/dist/inference/stt.d.cts +2 -0
- package/dist/inference/stt.d.ts +2 -0
- package/dist/inference/stt.d.ts.map +1 -1
- package/dist/inference/stt.js +8 -3
- package/dist/inference/stt.js.map +1 -1
- package/dist/inference/tts.cjs +7 -2
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +2 -0
- package/dist/inference/tts.d.ts +2 -0
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +8 -3
- package/dist/inference/tts.js.map +1 -1
- package/dist/inference/utils.cjs +26 -7
- package/dist/inference/utils.cjs.map +1 -1
- package/dist/inference/utils.d.cts +13 -0
- package/dist/inference/utils.d.ts +13 -0
- package/dist/inference/utils.d.ts.map +1 -1
- package/dist/inference/utils.js +18 -2
- package/dist/inference/utils.js.map +1 -1
- package/dist/llm/chat_context.cjs +108 -2
- package/dist/llm/chat_context.cjs.map +1 -1
- package/dist/llm/chat_context.d.cts +28 -1
- package/dist/llm/chat_context.d.ts +28 -1
- package/dist/llm/chat_context.d.ts.map +1 -1
- package/dist/llm/chat_context.js +108 -2
- package/dist/llm/chat_context.js.map +1 -1
- package/dist/llm/chat_context.test.cjs +43 -0
- package/dist/llm/chat_context.test.cjs.map +1 -1
- package/dist/llm/chat_context.test.js +43 -0
- package/dist/llm/chat_context.test.js.map +1 -1
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.cjs.map +1 -1
- package/dist/llm/index.d.cts +2 -2
- package/dist/llm/index.d.ts +2 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +3 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm.cjs +16 -1
- package/dist/llm/llm.cjs.map +1 -1
- package/dist/llm/llm.d.cts +9 -0
- package/dist/llm/llm.d.ts +9 -0
- package/dist/llm/llm.d.ts.map +1 -1
- package/dist/llm/llm.js +16 -1
- package/dist/llm/llm.js.map +1 -1
- package/dist/llm/provider_format/index.d.cts +1 -1
- package/dist/llm/provider_format/index.d.ts +1 -1
- package/dist/llm/realtime.cjs +3 -0
- package/dist/llm/realtime.cjs.map +1 -1
- package/dist/llm/realtime.d.cts +1 -0
- package/dist/llm/realtime.d.ts +1 -0
- package/dist/llm/realtime.d.ts.map +1 -1
- package/dist/llm/realtime.js +3 -0
- package/dist/llm/realtime.js.map +1 -1
- package/dist/llm/tool_context.cjs +7 -0
- package/dist/llm/tool_context.cjs.map +1 -1
- package/dist/llm/tool_context.d.cts +10 -2
- package/dist/llm/tool_context.d.ts +10 -2
- package/dist/llm/tool_context.d.ts.map +1 -1
- package/dist/llm/tool_context.js +6 -0
- package/dist/llm/tool_context.js.map +1 -1
- package/dist/metrics/base.cjs.map +1 -1
- package/dist/metrics/base.d.cts +45 -1
- package/dist/metrics/base.d.ts +45 -1
- package/dist/metrics/base.d.ts.map +1 -1
- package/dist/metrics/index.cjs +5 -0
- package/dist/metrics/index.cjs.map +1 -1
- package/dist/metrics/index.d.cts +2 -1
- package/dist/metrics/index.d.ts +2 -1
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +6 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/model_usage.cjs +189 -0
- package/dist/metrics/model_usage.cjs.map +1 -0
- package/dist/metrics/model_usage.d.cts +92 -0
- package/dist/metrics/model_usage.d.ts +92 -0
- package/dist/metrics/model_usage.d.ts.map +1 -0
- package/dist/metrics/model_usage.js +164 -0
- package/dist/metrics/model_usage.js.map +1 -0
- package/dist/metrics/model_usage.test.cjs +474 -0
- package/dist/metrics/model_usage.test.cjs.map +1 -0
- package/dist/metrics/model_usage.test.js +476 -0
- package/dist/metrics/model_usage.test.js.map +1 -0
- package/dist/metrics/usage_collector.cjs +3 -0
- package/dist/metrics/usage_collector.cjs.map +1 -1
- package/dist/metrics/usage_collector.d.cts +9 -0
- package/dist/metrics/usage_collector.d.ts +9 -0
- package/dist/metrics/usage_collector.d.ts.map +1 -1
- package/dist/metrics/usage_collector.js +3 -0
- package/dist/metrics/usage_collector.js.map +1 -1
- package/dist/metrics/utils.cjs +9 -0
- package/dist/metrics/utils.cjs.map +1 -1
- package/dist/metrics/utils.d.ts.map +1 -1
- package/dist/metrics/utils.js +9 -0
- package/dist/metrics/utils.js.map +1 -1
- package/dist/stream/multi_input_stream.test.cjs +4 -0
- package/dist/stream/multi_input_stream.test.cjs.map +1 -1
- package/dist/stream/multi_input_stream.test.js +5 -1
- package/dist/stream/multi_input_stream.test.js.map +1 -1
- package/dist/stream/stream_channel.cjs +31 -0
- package/dist/stream/stream_channel.cjs.map +1 -1
- package/dist/stream/stream_channel.d.cts +4 -2
- package/dist/stream/stream_channel.d.ts +4 -2
- package/dist/stream/stream_channel.d.ts.map +1 -1
- package/dist/stream/stream_channel.js +31 -0
- package/dist/stream/stream_channel.js.map +1 -1
- package/dist/stt/stt.cjs +34 -2
- package/dist/stt/stt.cjs.map +1 -1
- package/dist/stt/stt.d.cts +22 -0
- package/dist/stt/stt.d.ts +22 -0
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +34 -2
- package/dist/stt/stt.js.map +1 -1
- package/dist/telemetry/otel_http_exporter.cjs +24 -5
- package/dist/telemetry/otel_http_exporter.cjs.map +1 -1
- package/dist/telemetry/otel_http_exporter.d.cts +1 -0
- package/dist/telemetry/otel_http_exporter.d.ts +1 -0
- package/dist/telemetry/otel_http_exporter.d.ts.map +1 -1
- package/dist/telemetry/otel_http_exporter.js +24 -5
- package/dist/telemetry/otel_http_exporter.js.map +1 -1
- package/dist/telemetry/trace_types.cjs +5 -5
- package/dist/telemetry/trace_types.cjs.map +1 -1
- package/dist/telemetry/trace_types.d.cts +9 -5
- package/dist/telemetry/trace_types.d.ts +9 -5
- package/dist/telemetry/trace_types.d.ts.map +1 -1
- package/dist/telemetry/trace_types.js +5 -5
- package/dist/telemetry/trace_types.js.map +1 -1
- package/dist/telemetry/traces.cjs +47 -8
- package/dist/telemetry/traces.cjs.map +1 -1
- package/dist/telemetry/traces.d.ts.map +1 -1
- package/dist/telemetry/traces.js +47 -8
- package/dist/telemetry/traces.js.map +1 -1
- package/dist/tts/tts.cjs +64 -2
- package/dist/tts/tts.cjs.map +1 -1
- package/dist/tts/tts.d.cts +34 -0
- package/dist/tts/tts.d.ts +34 -0
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +64 -2
- package/dist/tts/tts.js.map +1 -1
- package/dist/utils.cjs +1 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/agent.cjs +34 -4
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +11 -2
- package/dist/voice/agent.d.ts +11 -2
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +34 -4
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent_activity.cjs +292 -44
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +27 -6
- package/dist/voice/agent_activity.d.ts +27 -6
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +293 -45
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_session.cjs +105 -48
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +90 -20
- package/dist/voice/agent_session.d.ts +90 -20
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +105 -46
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/audio_recognition.cjs +287 -6
- package/dist/voice/audio_recognition.cjs.map +1 -1
- package/dist/voice/audio_recognition.d.cts +42 -3
- package/dist/voice/audio_recognition.d.ts +42 -3
- package/dist/voice/audio_recognition.d.ts.map +1 -1
- package/dist/voice/audio_recognition.js +289 -7
- package/dist/voice/audio_recognition.js.map +1 -1
- package/dist/voice/client_events.cjs +554 -0
- package/dist/voice/client_events.cjs.map +1 -0
- package/dist/voice/client_events.d.cts +195 -0
- package/dist/voice/client_events.d.ts +195 -0
- package/dist/voice/client_events.d.ts.map +1 -0
- package/dist/voice/client_events.js +548 -0
- package/dist/voice/client_events.js.map +1 -0
- package/dist/voice/events.cjs +1 -0
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +8 -5
- package/dist/voice/events.d.ts +8 -5
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js +1 -0
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/generation.cjs +43 -8
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.cts +3 -3
- package/dist/voice/generation.d.ts +3 -3
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +43 -8
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/index.cjs +1 -0
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +1 -0
- package/dist/voice/index.d.ts +1 -0
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +1 -0
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/report.cjs +20 -8
- package/dist/voice/report.cjs.map +1 -1
- package/dist/voice/report.d.cts +5 -0
- package/dist/voice/report.d.ts +5 -0
- package/dist/voice/report.d.ts.map +1 -1
- package/dist/voice/report.js +20 -8
- package/dist/voice/report.js.map +1 -1
- package/dist/voice/report.test.cjs +106 -0
- package/dist/voice/report.test.cjs.map +1 -0
- package/dist/voice/report.test.js +105 -0
- package/dist/voice/report.test.js.map +1 -0
- package/dist/voice/room_io/room_io.cjs +16 -41
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.cts +4 -9
- package/dist/voice/room_io/room_io.d.ts +4 -9
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +17 -43
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/testing/fake_llm.cjs +127 -0
- package/dist/voice/testing/fake_llm.cjs.map +1 -0
- package/dist/voice/testing/fake_llm.d.cts +30 -0
- package/dist/voice/testing/fake_llm.d.ts +30 -0
- package/dist/voice/testing/fake_llm.d.ts.map +1 -0
- package/dist/voice/testing/fake_llm.js +103 -0
- package/dist/voice/testing/fake_llm.js.map +1 -0
- package/dist/voice/testing/index.cjs +3 -0
- package/dist/voice/testing/index.cjs.map +1 -1
- package/dist/voice/testing/index.d.cts +1 -0
- package/dist/voice/testing/index.d.ts +1 -0
- package/dist/voice/testing/index.d.ts.map +1 -1
- package/dist/voice/testing/index.js +2 -0
- package/dist/voice/testing/index.js.map +1 -1
- package/dist/voice/turn_config/endpointing.cjs +33 -0
- package/dist/voice/turn_config/endpointing.cjs.map +1 -0
- package/dist/voice/turn_config/endpointing.d.cts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
- package/dist/voice/turn_config/endpointing.js +9 -0
- package/dist/voice/turn_config/endpointing.js.map +1 -0
- package/dist/voice/turn_config/interruption.cjs +37 -0
- package/dist/voice/turn_config/interruption.cjs.map +1 -0
- package/dist/voice/turn_config/interruption.d.cts +53 -0
- package/dist/voice/turn_config/interruption.d.ts +53 -0
- package/dist/voice/turn_config/interruption.d.ts.map +1 -0
- package/dist/voice/turn_config/interruption.js +13 -0
- package/dist/voice/turn_config/interruption.js.map +1 -0
- package/dist/voice/turn_config/turn_handling.cjs +35 -0
- package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
- package/dist/voice/turn_config/turn_handling.d.cts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
- package/dist/voice/turn_config/turn_handling.js +11 -0
- package/dist/voice/turn_config/turn_handling.js.map +1 -0
- package/dist/voice/turn_config/utils.cjs +97 -0
- package/dist/voice/turn_config/utils.cjs.map +1 -0
- package/dist/voice/turn_config/utils.d.cts +25 -0
- package/dist/voice/turn_config/utils.d.ts +25 -0
- package/dist/voice/turn_config/utils.d.ts.map +1 -0
- package/dist/voice/turn_config/utils.js +73 -0
- package/dist/voice/turn_config/utils.js.map +1 -0
- package/dist/voice/turn_config/utils.test.cjs +86 -0
- package/dist/voice/turn_config/utils.test.cjs.map +1 -0
- package/dist/voice/turn_config/utils.test.js +85 -0
- package/dist/voice/turn_config/utils.test.js.map +1 -0
- package/dist/voice/wire_format.cjs +798 -0
- package/dist/voice/wire_format.cjs.map +1 -0
- package/dist/voice/wire_format.d.cts +5503 -0
- package/dist/voice/wire_format.d.ts +5503 -0
- package/dist/voice/wire_format.d.ts.map +1 -0
- package/dist/voice/wire_format.js +728 -0
- package/dist/voice/wire_format.js.map +1 -0
- package/package.json +2 -1
- package/src/beta/index.ts +9 -0
- package/src/beta/workflows/index.ts +9 -0
- package/src/beta/workflows/task_group.ts +194 -0
- package/src/constants.ts +13 -0
- package/src/index.ts +2 -1
- package/src/inference/interruption/defaults.ts +51 -0
- package/src/inference/interruption/errors.ts +25 -0
- package/src/inference/interruption/http_transport.ts +187 -0
- package/src/inference/interruption/interruption_cache_entry.ts +50 -0
- package/src/inference/interruption/interruption_detector.ts +188 -0
- package/src/inference/interruption/interruption_stream.ts +467 -0
- package/src/inference/interruption/types.ts +84 -0
- package/src/inference/interruption/utils.test.ts +132 -0
- package/src/inference/interruption/utils.ts +137 -0
- package/src/inference/interruption/ws_transport.ts +402 -0
- package/src/inference/llm.ts +9 -12
- package/src/inference/stt.ts +10 -3
- package/src/inference/tts.ts +10 -3
- package/src/inference/utils.ts +29 -1
- package/src/llm/chat_context.test.ts +48 -0
- package/src/llm/chat_context.ts +161 -0
- package/src/llm/index.ts +2 -0
- package/src/llm/llm.ts +16 -0
- package/src/llm/realtime.ts +4 -0
- package/src/llm/tool_context.ts +14 -0
- package/src/metrics/base.ts +48 -1
- package/src/metrics/index.ts +11 -0
- package/src/metrics/model_usage.test.ts +545 -0
- package/src/metrics/model_usage.ts +262 -0
- package/src/metrics/usage_collector.ts +11 -0
- package/src/metrics/utils.ts +11 -0
- package/src/stream/multi_input_stream.test.ts +6 -1
- package/src/stream/stream_channel.ts +34 -2
- package/src/stt/stt.ts +38 -0
- package/src/telemetry/otel_http_exporter.ts +28 -5
- package/src/telemetry/trace_types.ts +11 -8
- package/src/telemetry/traces.ts +111 -54
- package/src/tts/tts.ts +69 -1
- package/src/utils.ts +5 -0
- package/src/voice/agent.ts +41 -3
- package/src/voice/agent_activity.ts +371 -34
- package/src/voice/agent_session.ts +207 -59
- package/src/voice/audio_recognition.ts +385 -9
- package/src/voice/client_events.ts +838 -0
- package/src/voice/events.ts +14 -4
- package/src/voice/generation.ts +52 -9
- package/src/voice/index.ts +1 -0
- package/src/voice/report.test.ts +117 -0
- package/src/voice/report.ts +29 -6
- package/src/voice/room_io/room_io.ts +21 -64
- package/src/voice/testing/fake_llm.ts +138 -0
- package/src/voice/testing/index.ts +2 -0
- package/src/voice/turn_config/endpointing.ts +33 -0
- package/src/voice/turn_config/interruption.ts +56 -0
- package/src/voice/turn_config/turn_handling.ts +45 -0
- package/src/voice/turn_config/utils.test.ts +100 -0
- package/src/voice/turn_config/utils.ts +103 -0
- package/src/voice/wire_format.ts +827 -0
package/src/llm/chat_context.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
import type { AudioFrame, VideoFrame } from '@livekit/rtc-node';
|
|
5
5
|
import { createImmutableArray, shortuuid } from '../utils.js';
|
|
6
|
+
import type { LLM } from './llm.js';
|
|
6
7
|
import { type ProviderFormat, toChatCtx } from './provider_format/index.js';
|
|
7
8
|
import type { JSONObject, JSONValue, ToolContext } from './tool_context.js';
|
|
8
9
|
|
|
@@ -80,6 +81,17 @@ export function createAudioContent(params: {
|
|
|
80
81
|
};
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
export interface MetricsReport {
|
|
85
|
+
startedSpeakingAt?: number;
|
|
86
|
+
stoppedSpeakingAt?: number;
|
|
87
|
+
transcriptionDelay?: number;
|
|
88
|
+
endOfTurnDelay?: number;
|
|
89
|
+
onUserTurnCompletedDelay?: number;
|
|
90
|
+
llmNodeTtft?: number;
|
|
91
|
+
ttsNodeTtfb?: number;
|
|
92
|
+
e2eLatency?: number;
|
|
93
|
+
}
|
|
94
|
+
|
|
83
95
|
export class ChatMessage {
|
|
84
96
|
readonly id: string;
|
|
85
97
|
|
|
@@ -91,6 +103,12 @@ export class ChatMessage {
|
|
|
91
103
|
|
|
92
104
|
interrupted: boolean;
|
|
93
105
|
|
|
106
|
+
transcriptConfidence?: number;
|
|
107
|
+
|
|
108
|
+
extra: Record<string, unknown>;
|
|
109
|
+
|
|
110
|
+
metrics: MetricsReport;
|
|
111
|
+
|
|
94
112
|
hash?: Uint8Array;
|
|
95
113
|
|
|
96
114
|
createdAt: number;
|
|
@@ -101,6 +119,9 @@ export class ChatMessage {
|
|
|
101
119
|
id?: string;
|
|
102
120
|
interrupted?: boolean;
|
|
103
121
|
createdAt?: number;
|
|
122
|
+
transcriptConfidence?: number;
|
|
123
|
+
metrics?: MetricsReport;
|
|
124
|
+
extra?: Record<string, unknown>;
|
|
104
125
|
}) {
|
|
105
126
|
const {
|
|
106
127
|
role,
|
|
@@ -108,12 +129,18 @@ export class ChatMessage {
|
|
|
108
129
|
id = shortuuid('item_'),
|
|
109
130
|
interrupted = false,
|
|
110
131
|
createdAt = Date.now(),
|
|
132
|
+
transcriptConfidence,
|
|
133
|
+
metrics = {},
|
|
134
|
+
extra = {},
|
|
111
135
|
} = params;
|
|
112
136
|
this.id = id;
|
|
113
137
|
this.role = role;
|
|
114
138
|
this.content = Array.isArray(content) ? content : [content];
|
|
115
139
|
this.interrupted = interrupted;
|
|
116
140
|
this.createdAt = createdAt;
|
|
141
|
+
this.transcriptConfidence = transcriptConfidence;
|
|
142
|
+
this.metrics = metrics;
|
|
143
|
+
this.extra = extra;
|
|
117
144
|
}
|
|
118
145
|
|
|
119
146
|
static create(params: {
|
|
@@ -122,6 +149,9 @@ export class ChatMessage {
|
|
|
122
149
|
id?: string;
|
|
123
150
|
interrupted?: boolean;
|
|
124
151
|
createdAt?: number;
|
|
152
|
+
transcriptConfidence?: number;
|
|
153
|
+
metrics?: MetricsReport;
|
|
154
|
+
extra?: Record<string, unknown>;
|
|
125
155
|
}) {
|
|
126
156
|
return new ChatMessage(params);
|
|
127
157
|
}
|
|
@@ -172,6 +202,16 @@ export class ChatMessage {
|
|
|
172
202
|
result.createdAt = this.createdAt;
|
|
173
203
|
}
|
|
174
204
|
|
|
205
|
+
if (this.transcriptConfidence !== undefined) {
|
|
206
|
+
result.transcriptConfidence = this.transcriptConfidence;
|
|
207
|
+
}
|
|
208
|
+
if (Object.keys(this.metrics).length > 0) {
|
|
209
|
+
result.metrics = { ...this.metrics };
|
|
210
|
+
}
|
|
211
|
+
if (Object.keys(this.extra).length > 0) {
|
|
212
|
+
result.extra = this.extra as JSONValue;
|
|
213
|
+
}
|
|
214
|
+
|
|
175
215
|
return result;
|
|
176
216
|
}
|
|
177
217
|
}
|
|
@@ -401,6 +441,7 @@ export class AgentHandoffItem {
|
|
|
401
441
|
}
|
|
402
442
|
}
|
|
403
443
|
|
|
444
|
+
// TODO(parity): Add AgentConfigUpdate type to ChatItem union
|
|
404
445
|
export type ChatItem = ChatMessage | FunctionCall | FunctionCallOutput | AgentHandoffItem;
|
|
405
446
|
|
|
406
447
|
export class ChatContext {
|
|
@@ -431,6 +472,9 @@ export class ChatContext {
|
|
|
431
472
|
id?: string;
|
|
432
473
|
interrupted?: boolean;
|
|
433
474
|
createdAt?: number;
|
|
475
|
+
transcriptConfidence?: number;
|
|
476
|
+
metrics?: MetricsReport;
|
|
477
|
+
extra?: Record<string, unknown>;
|
|
434
478
|
}): ChatMessage {
|
|
435
479
|
const msg = new ChatMessage(params);
|
|
436
480
|
if (params.createdAt !== undefined) {
|
|
@@ -463,11 +507,13 @@ export class ChatContext {
|
|
|
463
507
|
return idx !== -1 ? idx : undefined;
|
|
464
508
|
}
|
|
465
509
|
|
|
510
|
+
// TODO(parity): Add excludeConfigUpdate option when AgentConfigUpdate is ported
|
|
466
511
|
copy(
|
|
467
512
|
options: {
|
|
468
513
|
excludeFunctionCall?: boolean;
|
|
469
514
|
excludeInstructions?: boolean;
|
|
470
515
|
excludeEmptyMessage?: boolean;
|
|
516
|
+
excludeHandoff?: boolean;
|
|
471
517
|
toolCtx?: ToolContext<any>; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
472
518
|
} = {},
|
|
473
519
|
): ChatContext {
|
|
@@ -475,6 +521,7 @@ export class ChatContext {
|
|
|
475
521
|
excludeFunctionCall = false,
|
|
476
522
|
excludeInstructions = false,
|
|
477
523
|
excludeEmptyMessage = false,
|
|
524
|
+
excludeHandoff = false,
|
|
478
525
|
toolCtx,
|
|
479
526
|
} = options;
|
|
480
527
|
const items: ChatItem[] = [];
|
|
@@ -500,6 +547,10 @@ export class ChatContext {
|
|
|
500
547
|
continue;
|
|
501
548
|
}
|
|
502
549
|
|
|
550
|
+
if (excludeHandoff && item.type === 'agent_handoff') {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
|
|
503
554
|
if (toolCtx !== undefined && isToolCallOrOutput(item) && toolCtx[item.name] === undefined) {
|
|
504
555
|
continue;
|
|
505
556
|
}
|
|
@@ -510,6 +561,7 @@ export class ChatContext {
|
|
|
510
561
|
return new ChatContext(items);
|
|
511
562
|
}
|
|
512
563
|
|
|
564
|
+
// TODO(parity): Add excludeConfigUpdate option when AgentConfigUpdate is ported
|
|
513
565
|
merge(
|
|
514
566
|
other: ChatContext,
|
|
515
567
|
options: {
|
|
@@ -606,6 +658,9 @@ export class ChatContext {
|
|
|
606
658
|
id: item.id,
|
|
607
659
|
interrupted: item.interrupted,
|
|
608
660
|
createdAt: item.createdAt,
|
|
661
|
+
transcriptConfidence: item.transcriptConfidence,
|
|
662
|
+
metrics: item.metrics,
|
|
663
|
+
extra: item.extra,
|
|
609
664
|
});
|
|
610
665
|
|
|
611
666
|
// Filter content based on options
|
|
@@ -762,6 +817,112 @@ export class ChatContext {
|
|
|
762
817
|
return true;
|
|
763
818
|
}
|
|
764
819
|
|
|
820
|
+
async _summarize(llm: LLM, options: { keepLastTurns?: number } = {}): Promise<ChatContext> {
|
|
821
|
+
const { keepLastTurns = 2 } = options;
|
|
822
|
+
|
|
823
|
+
const toSummarize: ChatMessage[] = [];
|
|
824
|
+
for (const item of this._items) {
|
|
825
|
+
if (item.type !== 'message') continue;
|
|
826
|
+
if (item.role !== 'user' && item.role !== 'assistant') continue;
|
|
827
|
+
if (item.extra?.is_summary === true) continue;
|
|
828
|
+
|
|
829
|
+
const text = (item.textContent ?? '').trim();
|
|
830
|
+
if (text) {
|
|
831
|
+
toSummarize.push(item);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
if (toSummarize.length === 0) {
|
|
836
|
+
return this;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
const tailN = Math.max(0, Math.min(toSummarize.length, keepLastTurns * 2));
|
|
840
|
+
let head: ChatMessage[];
|
|
841
|
+
let tail: ChatMessage[];
|
|
842
|
+
if (tailN === 0) {
|
|
843
|
+
head = toSummarize;
|
|
844
|
+
tail = [];
|
|
845
|
+
} else {
|
|
846
|
+
head = toSummarize.slice(0, -tailN);
|
|
847
|
+
tail = toSummarize.slice(-tailN);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
if (head.length === 0) {
|
|
851
|
+
return this;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
const sourceText = head
|
|
855
|
+
.map((m) => `${m.role}: ${(m.textContent ?? '').trim()}`)
|
|
856
|
+
.join('\n')
|
|
857
|
+
.trim();
|
|
858
|
+
|
|
859
|
+
if (!sourceText) {
|
|
860
|
+
return this;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
// TODO: refactor this into LLMStream.collect API.
|
|
864
|
+
const promptCtx = new ChatContext();
|
|
865
|
+
promptCtx.addMessage({
|
|
866
|
+
role: 'system',
|
|
867
|
+
content:
|
|
868
|
+
'Compress older chat history into a short, faithful summary.\n' +
|
|
869
|
+
'Focus on user goals, constraints, decisions, key facts/preferences/entities, and pending tasks.\n' +
|
|
870
|
+
'Exclude chit-chat and greetings. Be concise.',
|
|
871
|
+
});
|
|
872
|
+
promptCtx.addMessage({
|
|
873
|
+
role: 'user',
|
|
874
|
+
content: `Conversation to summarize:\n\n${sourceText}`,
|
|
875
|
+
});
|
|
876
|
+
|
|
877
|
+
const chunks: string[] = [];
|
|
878
|
+
for await (const chunk of llm.chat({ chatCtx: promptCtx })) {
|
|
879
|
+
if (chunk.delta?.content) {
|
|
880
|
+
chunks.push(chunk.delta.content);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
const summary = chunks.join('').trim();
|
|
885
|
+
if (!summary) {
|
|
886
|
+
return this;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const tailStartTs = tail.length > 0 ? tail[0]!.createdAt : Infinity;
|
|
890
|
+
|
|
891
|
+
const preserved: ChatItem[] = [];
|
|
892
|
+
for (const it of this._items) {
|
|
893
|
+
if (
|
|
894
|
+
(it.type === 'function_call' || it.type === 'function_call_output') &&
|
|
895
|
+
it.createdAt < tailStartTs
|
|
896
|
+
) {
|
|
897
|
+
continue;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
if (it.type === 'message' && (it.role === 'user' || it.role === 'assistant')) {
|
|
901
|
+
continue;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
preserved.push(it);
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
this._items = preserved;
|
|
908
|
+
|
|
909
|
+
const createdAtHint =
|
|
910
|
+
tail.length > 0 ? tail[0]!.createdAt - 1e-3 : head[head.length - 1]!.createdAt + 1e-3;
|
|
911
|
+
|
|
912
|
+
this.addMessage({
|
|
913
|
+
role: 'assistant',
|
|
914
|
+
content: `[history summary]\n${summary}`,
|
|
915
|
+
createdAt: createdAtHint,
|
|
916
|
+
extra: { is_summary: true },
|
|
917
|
+
});
|
|
918
|
+
|
|
919
|
+
for (const msg of tail) {
|
|
920
|
+
this.insert(msg);
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
return this;
|
|
924
|
+
}
|
|
925
|
+
|
|
765
926
|
/**
|
|
766
927
|
* Indicates whether the context is read-only
|
|
767
928
|
*/
|
package/src/llm/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export {
|
|
|
6
6
|
isFunctionTool,
|
|
7
7
|
tool,
|
|
8
8
|
ToolError,
|
|
9
|
+
ToolFlag,
|
|
9
10
|
type AgentHandoff,
|
|
10
11
|
type FunctionTool,
|
|
11
12
|
type ProviderDefinedTool,
|
|
@@ -29,6 +30,7 @@ export {
|
|
|
29
30
|
type ChatItem,
|
|
30
31
|
type ChatRole,
|
|
31
32
|
type ImageContent,
|
|
33
|
+
type MetricsReport,
|
|
32
34
|
} from './chat_context.js';
|
|
33
35
|
|
|
34
36
|
export type { ProviderFormat } from './provider_format/index.js';
|
package/src/llm/llm.ts
CHANGED
|
@@ -65,6 +65,18 @@ export abstract class LLM extends (EventEmitter as new () => TypedEmitter<LLMCal
|
|
|
65
65
|
return 'unknown';
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Get the provider name for this LLM instance.
|
|
70
|
+
*
|
|
71
|
+
* @returns The provider name if available, "unknown" otherwise.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* Plugins should override this property to provide their provider information.
|
|
75
|
+
*/
|
|
76
|
+
get provider(): string {
|
|
77
|
+
return 'unknown';
|
|
78
|
+
}
|
|
79
|
+
|
|
68
80
|
/**
|
|
69
81
|
* Returns a {@link LLMStream} that can be used to push text and receive LLM responses.
|
|
70
82
|
*/
|
|
@@ -248,6 +260,10 @@ export abstract class LLMStream implements AsyncIterableIterator<ChatChunk> {
|
|
|
248
260
|
}
|
|
249
261
|
return (usage?.completionTokens || 0) / (durationMs / 1000);
|
|
250
262
|
})(),
|
|
263
|
+
metadata: {
|
|
264
|
+
modelProvider: this.#llm.provider,
|
|
265
|
+
modelName: this.#llm.model,
|
|
266
|
+
},
|
|
251
267
|
};
|
|
252
268
|
|
|
253
269
|
if (this.#llmRequestSpan) {
|
package/src/llm/realtime.ts
CHANGED
|
@@ -73,6 +73,10 @@ export abstract class RealtimeModel {
|
|
|
73
73
|
/** The model name/identifier used by this realtime model */
|
|
74
74
|
abstract get model(): string;
|
|
75
75
|
|
|
76
|
+
get provider(): string {
|
|
77
|
+
return 'unknown';
|
|
78
|
+
}
|
|
79
|
+
|
|
76
80
|
abstract session(): RealtimeSession;
|
|
77
81
|
|
|
78
82
|
abstract close(): Promise<void>;
|
package/src/llm/tool_context.ts
CHANGED
|
@@ -80,6 +80,13 @@ export class ToolError extends Error {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
export const ToolFlag = {
|
|
84
|
+
NONE: 0,
|
|
85
|
+
IGNORE_ON_ENTER: 1 << 0,
|
|
86
|
+
} as const;
|
|
87
|
+
|
|
88
|
+
export type ToolFlag = (typeof ToolFlag)[keyof typeof ToolFlag];
|
|
89
|
+
|
|
83
90
|
export interface AgentHandoff {
|
|
84
91
|
/**
|
|
85
92
|
* The agent to handoff to.
|
|
@@ -178,6 +185,8 @@ export interface FunctionTool<
|
|
|
178
185
|
*/
|
|
179
186
|
execute: ToolExecuteFunction<Parameters, UserData, Result>;
|
|
180
187
|
|
|
188
|
+
flags: number;
|
|
189
|
+
|
|
181
190
|
[FUNCTION_TOOL_SYMBOL]: true;
|
|
182
191
|
}
|
|
183
192
|
|
|
@@ -242,10 +251,12 @@ export function tool<
|
|
|
242
251
|
description,
|
|
243
252
|
parameters,
|
|
244
253
|
execute,
|
|
254
|
+
flags,
|
|
245
255
|
}: {
|
|
246
256
|
description: string;
|
|
247
257
|
parameters: Schema;
|
|
248
258
|
execute: ToolExecuteFunction<InferToolInput<Schema>, UserData, Result>;
|
|
259
|
+
flags?: number;
|
|
249
260
|
}): FunctionTool<InferToolInput<Schema>, UserData, Result>;
|
|
250
261
|
|
|
251
262
|
/**
|
|
@@ -254,10 +265,12 @@ export function tool<
|
|
|
254
265
|
export function tool<UserData = UnknownUserData, Result = unknown>({
|
|
255
266
|
description,
|
|
256
267
|
execute,
|
|
268
|
+
flags,
|
|
257
269
|
}: {
|
|
258
270
|
description: string;
|
|
259
271
|
parameters?: never;
|
|
260
272
|
execute: ToolExecuteFunction<Record<string, never>, UserData, Result>;
|
|
273
|
+
flags?: number;
|
|
261
274
|
}): FunctionTool<Record<string, never>, UserData, Result>;
|
|
262
275
|
|
|
263
276
|
/**
|
|
@@ -295,6 +308,7 @@ export function tool(tool: any): any {
|
|
|
295
308
|
description: tool.description,
|
|
296
309
|
parameters,
|
|
297
310
|
execute: tool.execute,
|
|
311
|
+
flags: tool.flags ?? ToolFlag.NONE,
|
|
298
312
|
[TOOL_SYMBOL]: true,
|
|
299
313
|
[FUNCTION_TOOL_SYMBOL]: true,
|
|
300
314
|
};
|
package/src/metrics/base.ts
CHANGED
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
|
|
5
|
+
export type MetricsMetadata = {
|
|
6
|
+
/** The provider name (e.g., 'openai', 'anthropic'). */
|
|
7
|
+
modelProvider?: string;
|
|
8
|
+
/** The model name (e.g., 'gpt-4o', 'claude-3-5-sonnet'). */
|
|
9
|
+
modelName?: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
5
12
|
export type AgentMetrics =
|
|
6
13
|
| STTMetrics
|
|
7
14
|
| LLMMetrics
|
|
8
15
|
| TTSMetrics
|
|
9
16
|
| VADMetrics
|
|
10
17
|
| EOUMetrics
|
|
11
|
-
| RealtimeModelMetrics
|
|
18
|
+
| RealtimeModelMetrics
|
|
19
|
+
| InterruptionMetrics;
|
|
12
20
|
|
|
13
21
|
export type LLMMetrics = {
|
|
14
22
|
type: 'llm_metrics';
|
|
@@ -26,6 +34,8 @@ export type LLMMetrics = {
|
|
|
26
34
|
totalTokens: number;
|
|
27
35
|
tokensPerSecond: number;
|
|
28
36
|
speechId?: string;
|
|
37
|
+
/** Metadata for model provider and name tracking. */
|
|
38
|
+
metadata?: MetricsMetadata;
|
|
29
39
|
};
|
|
30
40
|
|
|
31
41
|
export type STTMetrics = {
|
|
@@ -41,10 +51,16 @@ export type STTMetrics = {
|
|
|
41
51
|
* The duration of the pushed audio in milliseconds.
|
|
42
52
|
*/
|
|
43
53
|
audioDurationMs: number;
|
|
54
|
+
/** Input audio tokens (for token-based billing). */
|
|
55
|
+
inputTokens?: number;
|
|
56
|
+
/** Output text tokens (for token-based billing). */
|
|
57
|
+
outputTokens?: number;
|
|
44
58
|
/**
|
|
45
59
|
* Whether the STT is streaming (e.g using websocket).
|
|
46
60
|
*/
|
|
47
61
|
streamed: boolean;
|
|
62
|
+
/** Metadata for model provider and name tracking. */
|
|
63
|
+
metadata?: MetricsMetadata;
|
|
48
64
|
};
|
|
49
65
|
|
|
50
66
|
export type TTSMetrics = {
|
|
@@ -59,10 +75,17 @@ export type TTSMetrics = {
|
|
|
59
75
|
/** Generated audio duration in milliseconds. */
|
|
60
76
|
audioDurationMs: number;
|
|
61
77
|
cancelled: boolean;
|
|
78
|
+
/** Number of characters synthesized (for character-based billing). */
|
|
62
79
|
charactersCount: number;
|
|
80
|
+
/** Input text tokens (for token-based billing, e.g., OpenAI TTS). */
|
|
81
|
+
inputTokens?: number;
|
|
82
|
+
/** Output audio tokens (for token-based billing, e.g., OpenAI TTS). */
|
|
83
|
+
outputTokens?: number;
|
|
63
84
|
streamed: boolean;
|
|
64
85
|
segmentId?: string;
|
|
65
86
|
speechId?: string;
|
|
87
|
+
/** Metadata for model provider and name tracking. */
|
|
88
|
+
metadata?: MetricsMetadata;
|
|
66
89
|
};
|
|
67
90
|
|
|
68
91
|
export type VADMetrics = {
|
|
@@ -133,6 +156,10 @@ export type RealtimeModelMetrics = {
|
|
|
133
156
|
* The duration of the response from created to done in milliseconds.
|
|
134
157
|
*/
|
|
135
158
|
durationMs: number;
|
|
159
|
+
/**
|
|
160
|
+
* The duration of the session connection in milliseconds (for session-based billing like xAI).
|
|
161
|
+
*/
|
|
162
|
+
sessionDurationMs?: number;
|
|
136
163
|
/**
|
|
137
164
|
* Time to first audio token in milliseconds. -1 if no audio token was sent.
|
|
138
165
|
*/
|
|
@@ -165,4 +192,24 @@ export type RealtimeModelMetrics = {
|
|
|
165
192
|
* Details about the output tokens used in the Response.
|
|
166
193
|
*/
|
|
167
194
|
outputTokenDetails: RealtimeModelMetricsOutputTokenDetails;
|
|
195
|
+
/** Metadata for model provider and name tracking. */
|
|
196
|
+
metadata?: MetricsMetadata;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
export type InterruptionMetrics = {
|
|
200
|
+
type: 'interruption_metrics';
|
|
201
|
+
timestamp: number;
|
|
202
|
+
/** Latest RTT time taken to perform inference, in milliseconds. */
|
|
203
|
+
totalDuration: number;
|
|
204
|
+
/** Latest time taken by the model side, in milliseconds. */
|
|
205
|
+
predictionDuration: number;
|
|
206
|
+
/** Latest total time from onset of speech to final prediction, in milliseconds. */
|
|
207
|
+
detectionDelay: number;
|
|
208
|
+
/** Number of interruptions detected (incremental). */
|
|
209
|
+
numInterruptions: number;
|
|
210
|
+
/** Number of backchannels detected (incremental). */
|
|
211
|
+
numBackchannels: number;
|
|
212
|
+
/** Number of requests sent to the model (incremental). */
|
|
213
|
+
numRequests: number;
|
|
214
|
+
metadata?: MetricsMetadata;
|
|
168
215
|
};
|
package/src/metrics/index.ts
CHANGED
|
@@ -5,11 +5,22 @@
|
|
|
5
5
|
export type {
|
|
6
6
|
AgentMetrics,
|
|
7
7
|
EOUMetrics,
|
|
8
|
+
InterruptionMetrics,
|
|
8
9
|
LLMMetrics,
|
|
10
|
+
MetricsMetadata,
|
|
9
11
|
RealtimeModelMetrics,
|
|
10
12
|
STTMetrics,
|
|
11
13
|
TTSMetrics,
|
|
12
14
|
VADMetrics,
|
|
13
15
|
} from './base.js';
|
|
16
|
+
export {
|
|
17
|
+
filterZeroValues,
|
|
18
|
+
ModelUsageCollector,
|
|
19
|
+
type InterruptionModelUsage,
|
|
20
|
+
type LLMModelUsage,
|
|
21
|
+
type ModelUsage,
|
|
22
|
+
type STTModelUsage,
|
|
23
|
+
type TTSModelUsage,
|
|
24
|
+
} from './model_usage.js';
|
|
14
25
|
export { UsageCollector, type UsageSummary } from './usage_collector.js';
|
|
15
26
|
export { logMetrics } from './utils.js';
|