@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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var beta_exports = {};
|
|
20
|
+
__export(beta_exports, {
|
|
21
|
+
TaskGroup: () => import_workflows.TaskGroup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(beta_exports);
|
|
24
|
+
var import_workflows = require("./workflows/index.cjs");
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
TaskGroup
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/beta/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './workflows/index.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAKO;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/beta/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/beta/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './workflows/index.js';\n"],"mappings":"AAGA;AAAA,EACE;AAAA,OAIK;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var workflows_exports = {};
|
|
20
|
+
__export(workflows_exports, {
|
|
21
|
+
TaskGroup: () => import_task_group.TaskGroup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(workflows_exports);
|
|
24
|
+
var import_task_group = require("./task_group.cjs");
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
TaskGroup
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './task_group.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAKO;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/beta/workflows/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './task_group.js';\n"],"mappings":"AAGA;AAAA,EACE;AAAA,OAIK;","names":[]}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var task_group_exports = {};
|
|
20
|
+
__export(task_group_exports, {
|
|
21
|
+
TaskGroup: () => TaskGroup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(task_group_exports);
|
|
24
|
+
var import_zod = require("zod");
|
|
25
|
+
var import_llm = require("../../llm/index.cjs");
|
|
26
|
+
var import_agent = require("../../voice/agent.cjs");
|
|
27
|
+
class OutOfScopeError extends import_llm.ToolError {
|
|
28
|
+
targetTaskIds;
|
|
29
|
+
constructor(targetTaskIds) {
|
|
30
|
+
super("out_of_scope");
|
|
31
|
+
this.targetTaskIds = targetTaskIds;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
class TaskGroup extends import_agent.AgentTask {
|
|
35
|
+
_summarizeChatCtx;
|
|
36
|
+
_returnExceptions;
|
|
37
|
+
_visitedTasks = /* @__PURE__ */ new Set();
|
|
38
|
+
_registeredFactories = /* @__PURE__ */ new Map();
|
|
39
|
+
_taskCompletedCallback;
|
|
40
|
+
_currentTask;
|
|
41
|
+
constructor(options = {}) {
|
|
42
|
+
const { summarizeChatCtx = true, returnExceptions = false, chatCtx, onTaskCompleted } = options;
|
|
43
|
+
super({ instructions: "*empty*", chatCtx });
|
|
44
|
+
this._summarizeChatCtx = summarizeChatCtx;
|
|
45
|
+
this._returnExceptions = returnExceptions;
|
|
46
|
+
this._taskCompletedCallback = onTaskCompleted;
|
|
47
|
+
}
|
|
48
|
+
add(task, { id, description }) {
|
|
49
|
+
this._registeredFactories.set(id, { taskFactory: task, id, description });
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
async onEnter() {
|
|
53
|
+
const taskStack = [...this._registeredFactories.keys()];
|
|
54
|
+
const taskResults = {};
|
|
55
|
+
while (taskStack.length > 0) {
|
|
56
|
+
const taskId = taskStack.shift();
|
|
57
|
+
const factoryInfo = this._registeredFactories.get(taskId);
|
|
58
|
+
this._currentTask = factoryInfo.taskFactory();
|
|
59
|
+
const sharedChatCtx = this._chatCtx.copy();
|
|
60
|
+
await this._currentTask.updateChatCtx(sharedChatCtx);
|
|
61
|
+
const outOfScopeTool = this.buildOutOfScopeTool(taskId);
|
|
62
|
+
if (outOfScopeTool) {
|
|
63
|
+
await this._currentTask.updateTools({
|
|
64
|
+
...this._currentTask.toolCtx,
|
|
65
|
+
out_of_scope: outOfScopeTool
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
this._visitedTasks.add(taskId);
|
|
70
|
+
const res = await this._currentTask.run();
|
|
71
|
+
taskResults[taskId] = res;
|
|
72
|
+
if (this._taskCompletedCallback) {
|
|
73
|
+
await this._taskCompletedCallback({
|
|
74
|
+
agentTask: this._currentTask,
|
|
75
|
+
taskId,
|
|
76
|
+
result: res
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (e instanceof OutOfScopeError) {
|
|
81
|
+
taskStack.unshift(taskId);
|
|
82
|
+
for (let i = e.targetTaskIds.length - 1; i >= 0; i--) {
|
|
83
|
+
taskStack.unshift(e.targetTaskIds[i]);
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (this._returnExceptions) {
|
|
88
|
+
taskResults[taskId] = e;
|
|
89
|
+
continue;
|
|
90
|
+
} else {
|
|
91
|
+
this.complete(e instanceof Error ? e : new Error(String(e)));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
if (this._summarizeChatCtx) {
|
|
98
|
+
const sessionLlm = this.session.llm;
|
|
99
|
+
if (!(sessionLlm instanceof import_llm.LLM)) {
|
|
100
|
+
throw new Error("summarizeChatCtx requires a standard LLM on the session");
|
|
101
|
+
}
|
|
102
|
+
const ctxToSummarize = this._chatCtx.copy({
|
|
103
|
+
excludeInstructions: true,
|
|
104
|
+
excludeHandoff: true,
|
|
105
|
+
excludeEmptyMessage: true,
|
|
106
|
+
excludeFunctionCall: true
|
|
107
|
+
});
|
|
108
|
+
const summarizedChatCtx = await ctxToSummarize._summarize(sessionLlm, {
|
|
109
|
+
keepLastTurns: 0
|
|
110
|
+
});
|
|
111
|
+
await this.updateChatCtx(summarizedChatCtx);
|
|
112
|
+
}
|
|
113
|
+
} catch (e) {
|
|
114
|
+
this.complete(new Error(`failed to summarize the chat_ctx: ${e}`));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.complete({ taskResults });
|
|
118
|
+
}
|
|
119
|
+
buildOutOfScopeTool(activeTaskId) {
|
|
120
|
+
if (this._visitedTasks.size === 0) {
|
|
121
|
+
return void 0;
|
|
122
|
+
}
|
|
123
|
+
const regressionTaskIds = new Set(this._visitedTasks);
|
|
124
|
+
regressionTaskIds.delete(activeTaskId);
|
|
125
|
+
if (regressionTaskIds.size === 0) {
|
|
126
|
+
return void 0;
|
|
127
|
+
}
|
|
128
|
+
const taskRepr = {};
|
|
129
|
+
for (const [id, info] of this._registeredFactories) {
|
|
130
|
+
if (regressionTaskIds.has(id)) {
|
|
131
|
+
taskRepr[id] = info.description;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const taskIdValues = [...regressionTaskIds];
|
|
135
|
+
const description = `Call to regress to other tasks according to what the user requested to modify, return the corresponding task ids. For example, if the user wants to change their email and there is a task with id "email_task" with a description of "Collect the user's email", return the id ("get_email_task"). If the user requests to regress to multiple tasks, such as changing their phone number and email, return both task ids in the order they were requested. The following are the IDs and their corresponding task description. ${JSON.stringify(taskRepr)}`;
|
|
136
|
+
const currentTask = this._currentTask;
|
|
137
|
+
const registeredFactories = this._registeredFactories;
|
|
138
|
+
const visitedTasks = this._visitedTasks;
|
|
139
|
+
return (0, import_llm.tool)({
|
|
140
|
+
description,
|
|
141
|
+
flags: import_llm.ToolFlag.IGNORE_ON_ENTER,
|
|
142
|
+
parameters: import_zod.z.object({
|
|
143
|
+
task_ids: import_zod.z.array(import_zod.z.enum(taskIdValues)).describe("The IDs of the tasks requested")
|
|
144
|
+
}),
|
|
145
|
+
execute: async ({ task_ids }) => {
|
|
146
|
+
for (const tid of task_ids) {
|
|
147
|
+
if (!registeredFactories.has(tid) || !visitedTasks.has(tid)) {
|
|
148
|
+
throw new import_llm.ToolError(`Unable to regress, invalid task id ${tid}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (currentTask && !currentTask.done) {
|
|
152
|
+
currentTask.complete(new OutOfScopeError(task_ids));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
159
|
+
0 && (module.exports = {
|
|
160
|
+
TaskGroup
|
|
161
|
+
});
|
|
162
|
+
//# sourceMappingURL=task_group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/task_group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { z } from 'zod';\nimport type { ChatContext } from '../../llm/chat_context.js';\nimport { LLM, ToolError, ToolFlag, tool } from '../../llm/index.js';\nimport { AgentTask } from '../../voice/agent.js';\n\ninterface FactoryInfo {\n taskFactory: () => AgentTask;\n id: string;\n description: string;\n}\n\nexport interface TaskGroupResult {\n taskResults: Record<string, unknown>;\n}\n\nexport interface TaskCompletedEvent {\n agentTask: AgentTask;\n taskId: string;\n result: unknown;\n}\n\nclass OutOfScopeError extends ToolError {\n readonly targetTaskIds: string[];\n\n constructor(targetTaskIds: string[]) {\n super('out_of_scope');\n this.targetTaskIds = targetTaskIds;\n }\n}\n\nexport interface TaskGroupOptions {\n summarizeChatCtx?: boolean;\n returnExceptions?: boolean;\n chatCtx?: ChatContext;\n onTaskCompleted?: (event: TaskCompletedEvent) => Promise<void>;\n}\n\nexport class TaskGroup extends AgentTask<TaskGroupResult> {\n private _summarizeChatCtx: boolean;\n private _returnExceptions: boolean;\n private _visitedTasks = new Set<string>();\n private _registeredFactories = new Map<string, FactoryInfo>();\n private _taskCompletedCallback?: (event: TaskCompletedEvent) => Promise<void>;\n private _currentTask?: AgentTask;\n\n constructor(options: TaskGroupOptions = {}) {\n const { summarizeChatCtx = true, returnExceptions = false, chatCtx, onTaskCompleted } = options;\n\n super({ instructions: '*empty*', chatCtx });\n\n this._summarizeChatCtx = summarizeChatCtx;\n this._returnExceptions = returnExceptions;\n this._taskCompletedCallback = onTaskCompleted;\n }\n\n add(task: () => AgentTask, { id, description }: { id: string; description: string }): this {\n this._registeredFactories.set(id, { taskFactory: task, id, description });\n return this;\n }\n\n async onEnter(): Promise<void> {\n const taskStack = [...this._registeredFactories.keys()];\n const taskResults: Record<string, unknown> = {};\n\n while (taskStack.length > 0) {\n const taskId = taskStack.shift()!;\n const factoryInfo = this._registeredFactories.get(taskId)!;\n\n this._currentTask = factoryInfo.taskFactory();\n\n const sharedChatCtx = this._chatCtx.copy();\n await this._currentTask.updateChatCtx(sharedChatCtx);\n\n const outOfScopeTool = this.buildOutOfScopeTool(taskId);\n if (outOfScopeTool) {\n await this._currentTask.updateTools({\n ...this._currentTask.toolCtx,\n out_of_scope: outOfScopeTool,\n });\n }\n\n try {\n this._visitedTasks.add(taskId);\n const res = await this._currentTask.run();\n taskResults[taskId] = res;\n\n if (this._taskCompletedCallback) {\n await this._taskCompletedCallback({\n agentTask: this._currentTask,\n taskId,\n result: res,\n });\n }\n } catch (e) {\n if (e instanceof OutOfScopeError) {\n taskStack.unshift(taskId);\n for (let i = e.targetTaskIds.length - 1; i >= 0; i--) {\n taskStack.unshift(e.targetTaskIds[i]!);\n }\n continue;\n }\n\n if (this._returnExceptions) {\n taskResults[taskId] = e;\n continue;\n } else {\n this.complete(e instanceof Error ? e : new Error(String(e)));\n return;\n }\n }\n }\n\n try {\n if (this._summarizeChatCtx) {\n const sessionLlm = this.session.llm;\n if (!(sessionLlm instanceof LLM)) {\n throw new Error('summarizeChatCtx requires a standard LLM on the session');\n }\n\n // TODO(parity): Add excludeConfigUpdate when AgentConfigUpdate is ported\n const ctxToSummarize = this._chatCtx.copy({\n excludeInstructions: true,\n excludeHandoff: true,\n excludeEmptyMessage: true,\n excludeFunctionCall: true,\n });\n\n const summarizedChatCtx = await ctxToSummarize._summarize(sessionLlm, {\n keepLastTurns: 0,\n });\n await this.updateChatCtx(summarizedChatCtx);\n }\n } catch (e) {\n this.complete(new Error(`failed to summarize the chat_ctx: ${e}`));\n return;\n }\n\n this.complete({ taskResults });\n }\n\n private buildOutOfScopeTool(activeTaskId: string) {\n if (this._visitedTasks.size === 0) {\n return undefined;\n }\n\n const regressionTaskIds = new Set(this._visitedTasks);\n regressionTaskIds.delete(activeTaskId);\n\n if (regressionTaskIds.size === 0) {\n return undefined;\n }\n\n const taskRepr: Record<string, string> = {};\n for (const [id, info] of this._registeredFactories) {\n if (regressionTaskIds.has(id)) {\n taskRepr[id] = info.description;\n }\n }\n\n const taskIdValues = [...regressionTaskIds] as [string, ...string[]];\n\n const description =\n 'Call to regress to other tasks according to what the user requested to modify, return the corresponding task ids. ' +\n 'For example, if the user wants to change their email and there is a task with id \"email_task\" with a description of \"Collect the user\\'s email\", return the id (\"get_email_task\"). ' +\n 'If the user requests to regress to multiple tasks, such as changing their phone number and email, return both task ids in the order they were requested. ' +\n `The following are the IDs and their corresponding task description. ${JSON.stringify(taskRepr)}`;\n\n const currentTask = this._currentTask;\n const registeredFactories = this._registeredFactories;\n const visitedTasks = this._visitedTasks;\n\n return tool({\n description,\n flags: ToolFlag.IGNORE_ON_ENTER,\n parameters: z.object({\n task_ids: z.array(z.enum(taskIdValues)).describe('The IDs of the tasks requested'),\n }),\n execute: async ({ task_ids }: { task_ids: string[] }) => {\n for (const tid of task_ids) {\n if (!registeredFactories.has(tid) || !visitedTasks.has(tid)) {\n throw new ToolError(`Unable to regress, invalid task id ${tid}`);\n }\n }\n\n if (currentTask && !currentTask.done) {\n currentTask.complete(new OutOfScopeError(task_ids));\n }\n },\n });\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ChatContext } from '../../llm/chat_context.js';
|
|
2
|
+
import { AgentTask } from '../../voice/agent.js';
|
|
3
|
+
export interface TaskGroupResult {
|
|
4
|
+
taskResults: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface TaskCompletedEvent {
|
|
7
|
+
agentTask: AgentTask;
|
|
8
|
+
taskId: string;
|
|
9
|
+
result: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface TaskGroupOptions {
|
|
12
|
+
summarizeChatCtx?: boolean;
|
|
13
|
+
returnExceptions?: boolean;
|
|
14
|
+
chatCtx?: ChatContext;
|
|
15
|
+
onTaskCompleted?: (event: TaskCompletedEvent) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare class TaskGroup extends AgentTask<TaskGroupResult> {
|
|
18
|
+
private _summarizeChatCtx;
|
|
19
|
+
private _returnExceptions;
|
|
20
|
+
private _visitedTasks;
|
|
21
|
+
private _registeredFactories;
|
|
22
|
+
private _taskCompletedCallback?;
|
|
23
|
+
private _currentTask?;
|
|
24
|
+
constructor(options?: TaskGroupOptions);
|
|
25
|
+
add(task: () => AgentTask, { id, description }: {
|
|
26
|
+
id: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}): this;
|
|
29
|
+
onEnter(): Promise<void>;
|
|
30
|
+
private buildOutOfScopeTool;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=task_group.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ChatContext } from '../../llm/chat_context.js';
|
|
2
|
+
import { AgentTask } from '../../voice/agent.js';
|
|
3
|
+
export interface TaskGroupResult {
|
|
4
|
+
taskResults: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface TaskCompletedEvent {
|
|
7
|
+
agentTask: AgentTask;
|
|
8
|
+
taskId: string;
|
|
9
|
+
result: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface TaskGroupOptions {
|
|
12
|
+
summarizeChatCtx?: boolean;
|
|
13
|
+
returnExceptions?: boolean;
|
|
14
|
+
chatCtx?: ChatContext;
|
|
15
|
+
onTaskCompleted?: (event: TaskCompletedEvent) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare class TaskGroup extends AgentTask<TaskGroupResult> {
|
|
18
|
+
private _summarizeChatCtx;
|
|
19
|
+
private _returnExceptions;
|
|
20
|
+
private _visitedTasks;
|
|
21
|
+
private _registeredFactories;
|
|
22
|
+
private _taskCompletedCallback?;
|
|
23
|
+
private _currentTask?;
|
|
24
|
+
constructor(options?: TaskGroupOptions);
|
|
25
|
+
add(task: () => AgentTask, { id, description }: {
|
|
26
|
+
id: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}): this;
|
|
29
|
+
onEnter(): Promise<void>;
|
|
30
|
+
private buildOutOfScopeTool;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=task_group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task_group.d.ts","sourceRoot":"","sources":["../../../src/beta/workflows/task_group.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQjD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAWD,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,qBAAa,SAAU,SAAQ,SAAS,CAAC,eAAe,CAAC;IACvD,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,sBAAsB,CAAC,CAA+C;IAC9E,OAAO,CAAC,YAAY,CAAC,CAAY;gBAErB,OAAO,GAAE,gBAAqB;IAU1C,GAAG,CAAC,IAAI,EAAE,MAAM,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKpF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgF9B,OAAO,CAAC,mBAAmB;CAkD5B"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { LLM, ToolError, ToolFlag, tool } from "../../llm/index.js";
|
|
3
|
+
import { AgentTask } from "../../voice/agent.js";
|
|
4
|
+
class OutOfScopeError extends ToolError {
|
|
5
|
+
targetTaskIds;
|
|
6
|
+
constructor(targetTaskIds) {
|
|
7
|
+
super("out_of_scope");
|
|
8
|
+
this.targetTaskIds = targetTaskIds;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
class TaskGroup extends AgentTask {
|
|
12
|
+
_summarizeChatCtx;
|
|
13
|
+
_returnExceptions;
|
|
14
|
+
_visitedTasks = /* @__PURE__ */ new Set();
|
|
15
|
+
_registeredFactories = /* @__PURE__ */ new Map();
|
|
16
|
+
_taskCompletedCallback;
|
|
17
|
+
_currentTask;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
const { summarizeChatCtx = true, returnExceptions = false, chatCtx, onTaskCompleted } = options;
|
|
20
|
+
super({ instructions: "*empty*", chatCtx });
|
|
21
|
+
this._summarizeChatCtx = summarizeChatCtx;
|
|
22
|
+
this._returnExceptions = returnExceptions;
|
|
23
|
+
this._taskCompletedCallback = onTaskCompleted;
|
|
24
|
+
}
|
|
25
|
+
add(task, { id, description }) {
|
|
26
|
+
this._registeredFactories.set(id, { taskFactory: task, id, description });
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
async onEnter() {
|
|
30
|
+
const taskStack = [...this._registeredFactories.keys()];
|
|
31
|
+
const taskResults = {};
|
|
32
|
+
while (taskStack.length > 0) {
|
|
33
|
+
const taskId = taskStack.shift();
|
|
34
|
+
const factoryInfo = this._registeredFactories.get(taskId);
|
|
35
|
+
this._currentTask = factoryInfo.taskFactory();
|
|
36
|
+
const sharedChatCtx = this._chatCtx.copy();
|
|
37
|
+
await this._currentTask.updateChatCtx(sharedChatCtx);
|
|
38
|
+
const outOfScopeTool = this.buildOutOfScopeTool(taskId);
|
|
39
|
+
if (outOfScopeTool) {
|
|
40
|
+
await this._currentTask.updateTools({
|
|
41
|
+
...this._currentTask.toolCtx,
|
|
42
|
+
out_of_scope: outOfScopeTool
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
this._visitedTasks.add(taskId);
|
|
47
|
+
const res = await this._currentTask.run();
|
|
48
|
+
taskResults[taskId] = res;
|
|
49
|
+
if (this._taskCompletedCallback) {
|
|
50
|
+
await this._taskCompletedCallback({
|
|
51
|
+
agentTask: this._currentTask,
|
|
52
|
+
taskId,
|
|
53
|
+
result: res
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
} catch (e) {
|
|
57
|
+
if (e instanceof OutOfScopeError) {
|
|
58
|
+
taskStack.unshift(taskId);
|
|
59
|
+
for (let i = e.targetTaskIds.length - 1; i >= 0; i--) {
|
|
60
|
+
taskStack.unshift(e.targetTaskIds[i]);
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (this._returnExceptions) {
|
|
65
|
+
taskResults[taskId] = e;
|
|
66
|
+
continue;
|
|
67
|
+
} else {
|
|
68
|
+
this.complete(e instanceof Error ? e : new Error(String(e)));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
if (this._summarizeChatCtx) {
|
|
75
|
+
const sessionLlm = this.session.llm;
|
|
76
|
+
if (!(sessionLlm instanceof LLM)) {
|
|
77
|
+
throw new Error("summarizeChatCtx requires a standard LLM on the session");
|
|
78
|
+
}
|
|
79
|
+
const ctxToSummarize = this._chatCtx.copy({
|
|
80
|
+
excludeInstructions: true,
|
|
81
|
+
excludeHandoff: true,
|
|
82
|
+
excludeEmptyMessage: true,
|
|
83
|
+
excludeFunctionCall: true
|
|
84
|
+
});
|
|
85
|
+
const summarizedChatCtx = await ctxToSummarize._summarize(sessionLlm, {
|
|
86
|
+
keepLastTurns: 0
|
|
87
|
+
});
|
|
88
|
+
await this.updateChatCtx(summarizedChatCtx);
|
|
89
|
+
}
|
|
90
|
+
} catch (e) {
|
|
91
|
+
this.complete(new Error(`failed to summarize the chat_ctx: ${e}`));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.complete({ taskResults });
|
|
95
|
+
}
|
|
96
|
+
buildOutOfScopeTool(activeTaskId) {
|
|
97
|
+
if (this._visitedTasks.size === 0) {
|
|
98
|
+
return void 0;
|
|
99
|
+
}
|
|
100
|
+
const regressionTaskIds = new Set(this._visitedTasks);
|
|
101
|
+
regressionTaskIds.delete(activeTaskId);
|
|
102
|
+
if (regressionTaskIds.size === 0) {
|
|
103
|
+
return void 0;
|
|
104
|
+
}
|
|
105
|
+
const taskRepr = {};
|
|
106
|
+
for (const [id, info] of this._registeredFactories) {
|
|
107
|
+
if (regressionTaskIds.has(id)) {
|
|
108
|
+
taskRepr[id] = info.description;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const taskIdValues = [...regressionTaskIds];
|
|
112
|
+
const description = `Call to regress to other tasks according to what the user requested to modify, return the corresponding task ids. For example, if the user wants to change their email and there is a task with id "email_task" with a description of "Collect the user's email", return the id ("get_email_task"). If the user requests to regress to multiple tasks, such as changing their phone number and email, return both task ids in the order they were requested. The following are the IDs and their corresponding task description. ${JSON.stringify(taskRepr)}`;
|
|
113
|
+
const currentTask = this._currentTask;
|
|
114
|
+
const registeredFactories = this._registeredFactories;
|
|
115
|
+
const visitedTasks = this._visitedTasks;
|
|
116
|
+
return tool({
|
|
117
|
+
description,
|
|
118
|
+
flags: ToolFlag.IGNORE_ON_ENTER,
|
|
119
|
+
parameters: z.object({
|
|
120
|
+
task_ids: z.array(z.enum(taskIdValues)).describe("The IDs of the tasks requested")
|
|
121
|
+
}),
|
|
122
|
+
execute: async ({ task_ids }) => {
|
|
123
|
+
for (const tid of task_ids) {
|
|
124
|
+
if (!registeredFactories.has(tid) || !visitedTasks.has(tid)) {
|
|
125
|
+
throw new ToolError(`Unable to regress, invalid task id ${tid}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (currentTask && !currentTask.done) {
|
|
129
|
+
currentTask.complete(new OutOfScopeError(task_ids));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export {
|
|
136
|
+
TaskGroup
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=task_group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/task_group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { z } from 'zod';\nimport type { ChatContext } from '../../llm/chat_context.js';\nimport { LLM, ToolError, ToolFlag, tool } from '../../llm/index.js';\nimport { AgentTask } from '../../voice/agent.js';\n\ninterface FactoryInfo {\n taskFactory: () => AgentTask;\n id: string;\n description: string;\n}\n\nexport interface TaskGroupResult {\n taskResults: Record<string, unknown>;\n}\n\nexport interface TaskCompletedEvent {\n agentTask: AgentTask;\n taskId: string;\n result: unknown;\n}\n\nclass OutOfScopeError extends ToolError {\n readonly targetTaskIds: string[];\n\n constructor(targetTaskIds: string[]) {\n super('out_of_scope');\n this.targetTaskIds = targetTaskIds;\n }\n}\n\nexport interface TaskGroupOptions {\n summarizeChatCtx?: boolean;\n returnExceptions?: boolean;\n chatCtx?: ChatContext;\n onTaskCompleted?: (event: TaskCompletedEvent) => Promise<void>;\n}\n\nexport class TaskGroup extends AgentTask<TaskGroupResult> {\n private _summarizeChatCtx: boolean;\n private _returnExceptions: boolean;\n private _visitedTasks = new Set<string>();\n private _registeredFactories = new Map<string, FactoryInfo>();\n private _taskCompletedCallback?: (event: TaskCompletedEvent) => Promise<void>;\n private _currentTask?: AgentTask;\n\n constructor(options: TaskGroupOptions = {}) {\n const { summarizeChatCtx = true, returnExceptions = false, chatCtx, onTaskCompleted } = options;\n\n super({ instructions: '*empty*', chatCtx });\n\n this._summarizeChatCtx = summarizeChatCtx;\n this._returnExceptions = returnExceptions;\n this._taskCompletedCallback = onTaskCompleted;\n }\n\n add(task: () => AgentTask, { id, description }: { id: string; description: string }): this {\n this._registeredFactories.set(id, { taskFactory: task, id, description });\n return this;\n }\n\n async onEnter(): Promise<void> {\n const taskStack = [...this._registeredFactories.keys()];\n const taskResults: Record<string, unknown> = {};\n\n while (taskStack.length > 0) {\n const taskId = taskStack.shift()!;\n const factoryInfo = this._registeredFactories.get(taskId)!;\n\n this._currentTask = factoryInfo.taskFactory();\n\n const sharedChatCtx = this._chatCtx.copy();\n await this._currentTask.updateChatCtx(sharedChatCtx);\n\n const outOfScopeTool = this.buildOutOfScopeTool(taskId);\n if (outOfScopeTool) {\n await this._currentTask.updateTools({\n ...this._currentTask.toolCtx,\n out_of_scope: outOfScopeTool,\n });\n }\n\n try {\n this._visitedTasks.add(taskId);\n const res = await this._currentTask.run();\n taskResults[taskId] = res;\n\n if (this._taskCompletedCallback) {\n await this._taskCompletedCallback({\n agentTask: this._currentTask,\n taskId,\n result: res,\n });\n }\n } catch (e) {\n if (e instanceof OutOfScopeError) {\n taskStack.unshift(taskId);\n for (let i = e.targetTaskIds.length - 1; i >= 0; i--) {\n taskStack.unshift(e.targetTaskIds[i]!);\n }\n continue;\n }\n\n if (this._returnExceptions) {\n taskResults[taskId] = e;\n continue;\n } else {\n this.complete(e instanceof Error ? e : new Error(String(e)));\n return;\n }\n }\n }\n\n try {\n if (this._summarizeChatCtx) {\n const sessionLlm = this.session.llm;\n if (!(sessionLlm instanceof LLM)) {\n throw new Error('summarizeChatCtx requires a standard LLM on the session');\n }\n\n // TODO(parity): Add excludeConfigUpdate when AgentConfigUpdate is ported\n const ctxToSummarize = this._chatCtx.copy({\n excludeInstructions: true,\n excludeHandoff: true,\n excludeEmptyMessage: true,\n excludeFunctionCall: true,\n });\n\n const summarizedChatCtx = await ctxToSummarize._summarize(sessionLlm, {\n keepLastTurns: 0,\n });\n await this.updateChatCtx(summarizedChatCtx);\n }\n } catch (e) {\n this.complete(new Error(`failed to summarize the chat_ctx: ${e}`));\n return;\n }\n\n this.complete({ taskResults });\n }\n\n private buildOutOfScopeTool(activeTaskId: string) {\n if (this._visitedTasks.size === 0) {\n return undefined;\n }\n\n const regressionTaskIds = new Set(this._visitedTasks);\n regressionTaskIds.delete(activeTaskId);\n\n if (regressionTaskIds.size === 0) {\n return undefined;\n }\n\n const taskRepr: Record<string, string> = {};\n for (const [id, info] of this._registeredFactories) {\n if (regressionTaskIds.has(id)) {\n taskRepr[id] = info.description;\n }\n }\n\n const taskIdValues = [...regressionTaskIds] as [string, ...string[]];\n\n const description =\n 'Call to regress to other tasks according to what the user requested to modify, return the corresponding task ids. ' +\n 'For example, if the user wants to change their email and there is a task with id \"email_task\" with a description of \"Collect the user\\'s email\", return the id (\"get_email_task\"). ' +\n 'If the user requests to regress to multiple tasks, such as changing their phone number and email, return both task ids in the order they were requested. ' +\n `The following are the IDs and their corresponding task description. ${JSON.stringify(taskRepr)}`;\n\n const currentTask = this._currentTask;\n const registeredFactories = this._registeredFactories;\n const visitedTasks = this._visitedTasks;\n\n return tool({\n description,\n flags: ToolFlag.IGNORE_ON_ENTER,\n parameters: z.object({\n task_ids: z.array(z.enum(taskIdValues)).describe('The IDs of the tasks requested'),\n }),\n execute: async ({ task_ids }: { task_ids: string[] }) => {\n for (const tid of task_ids) {\n if (!registeredFactories.has(tid) || !visitedTasks.has(tid)) {\n throw new ToolError(`Unable to regress, invalid task id ${tid}`);\n }\n }\n\n if (currentTask && !currentTask.done) {\n currentTask.complete(new OutOfScopeError(task_ids));\n }\n },\n });\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/constants.cjs
CHANGED
|
@@ -18,11 +18,20 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var constants_exports = {};
|
|
20
20
|
__export(constants_exports, {
|
|
21
|
+
ATTRIBUTE_AGENT_NAME: () => ATTRIBUTE_AGENT_NAME,
|
|
22
|
+
ATTRIBUTE_AGENT_STATE: () => ATTRIBUTE_AGENT_STATE,
|
|
21
23
|
ATTRIBUTE_PUBLISH_ON_BEHALF: () => ATTRIBUTE_PUBLISH_ON_BEHALF,
|
|
22
24
|
ATTRIBUTE_TRANSCRIPTION_FINAL: () => ATTRIBUTE_TRANSCRIPTION_FINAL,
|
|
23
25
|
ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID: () => ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID,
|
|
24
26
|
ATTRIBUTE_TRANSCRIPTION_TRACK_ID: () => ATTRIBUTE_TRANSCRIPTION_TRACK_ID,
|
|
27
|
+
RPC_GET_AGENT_INFO: () => RPC_GET_AGENT_INFO,
|
|
28
|
+
RPC_GET_CHAT_HISTORY: () => RPC_GET_CHAT_HISTORY,
|
|
29
|
+
RPC_GET_SESSION_STATE: () => RPC_GET_SESSION_STATE,
|
|
30
|
+
RPC_SEND_MESSAGE: () => RPC_SEND_MESSAGE,
|
|
31
|
+
TOPIC_AGENT_REQUEST: () => TOPIC_AGENT_REQUEST,
|
|
32
|
+
TOPIC_AGENT_RESPONSE: () => TOPIC_AGENT_RESPONSE,
|
|
25
33
|
TOPIC_CHAT: () => TOPIC_CHAT,
|
|
34
|
+
TOPIC_CLIENT_EVENTS: () => TOPIC_CLIENT_EVENTS,
|
|
26
35
|
TOPIC_TRANSCRIPTION: () => TOPIC_TRANSCRIPTION
|
|
27
36
|
});
|
|
28
37
|
module.exports = __toCommonJS(constants_exports);
|
|
@@ -32,13 +41,31 @@ const TOPIC_TRANSCRIPTION = "lk.transcription";
|
|
|
32
41
|
const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = "lk.segment_id";
|
|
33
42
|
const ATTRIBUTE_PUBLISH_ON_BEHALF = "lk.publish_on_behalf";
|
|
34
43
|
const TOPIC_CHAT = "lk.chat";
|
|
44
|
+
const ATTRIBUTE_AGENT_STATE = "lk.agent.state";
|
|
45
|
+
const ATTRIBUTE_AGENT_NAME = "lk.agent.name";
|
|
46
|
+
const TOPIC_CLIENT_EVENTS = "lk.agent.events";
|
|
47
|
+
const RPC_GET_SESSION_STATE = "lk.agent.get_session_state";
|
|
48
|
+
const RPC_GET_CHAT_HISTORY = "lk.agent.get_chat_history";
|
|
49
|
+
const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
|
|
50
|
+
const RPC_SEND_MESSAGE = "lk.agent.send_message";
|
|
51
|
+
const TOPIC_AGENT_REQUEST = "lk.agent.request";
|
|
52
|
+
const TOPIC_AGENT_RESPONSE = "lk.agent.response";
|
|
35
53
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
54
|
0 && (module.exports = {
|
|
55
|
+
ATTRIBUTE_AGENT_NAME,
|
|
56
|
+
ATTRIBUTE_AGENT_STATE,
|
|
37
57
|
ATTRIBUTE_PUBLISH_ON_BEHALF,
|
|
38
58
|
ATTRIBUTE_TRANSCRIPTION_FINAL,
|
|
39
59
|
ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID,
|
|
40
60
|
ATTRIBUTE_TRANSCRIPTION_TRACK_ID,
|
|
61
|
+
RPC_GET_AGENT_INFO,
|
|
62
|
+
RPC_GET_CHAT_HISTORY,
|
|
63
|
+
RPC_GET_SESSION_STATE,
|
|
64
|
+
RPC_SEND_MESSAGE,
|
|
65
|
+
TOPIC_AGENT_REQUEST,
|
|
66
|
+
TOPIC_AGENT_RESPONSE,
|
|
41
67
|
TOPIC_CHAT,
|
|
68
|
+
TOPIC_CLIENT_EVENTS,
|
|
42
69
|
TOPIC_TRANSCRIPTION
|
|
43
70
|
});
|
|
44
71
|
//# sourceMappingURL=constants.cjs.map
|
package/dist/constants.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport const ATTRIBUTE_TRANSCRIPTION_TRACK_ID = 'lk.transcribed_track_id';\nexport const ATTRIBUTE_TRANSCRIPTION_FINAL = 'lk.transcription_final';\nexport const TOPIC_TRANSCRIPTION = 'lk.transcription';\nexport const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = 'lk.segment_id';\nexport const ATTRIBUTE_PUBLISH_ON_BEHALF = 'lk.publish_on_behalf';\nexport const TOPIC_CHAT = 'lk.chat';\n\nexport const ATTRIBUTE_AGENT_STATE = 'lk.agent.state';\nexport const ATTRIBUTE_AGENT_NAME = 'lk.agent.name';\n\n// TODO(eval): export const ATTRIBUTE_SIMULATOR = 'lk.simulator';\n\nexport const TOPIC_CLIENT_EVENTS = 'lk.agent.events';\nexport const RPC_GET_SESSION_STATE = 'lk.agent.get_session_state';\nexport const RPC_GET_CHAT_HISTORY = 'lk.agent.get_chat_history';\nexport const RPC_GET_AGENT_INFO = 'lk.agent.get_agent_info';\nexport const RPC_SEND_MESSAGE = 'lk.agent.send_message';\nexport const TOPIC_AGENT_REQUEST = 'lk.agent.request';\nexport const TOPIC_AGENT_RESPONSE = 'lk.agent.response';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AACtC,MAAM,sBAAsB;AAC5B,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AACpC,MAAM,aAAa;AAEnB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAI7B,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;","names":[]}
|
package/dist/constants.d.cts
CHANGED
|
@@ -4,4 +4,13 @@ export declare const TOPIC_TRANSCRIPTION = "lk.transcription";
|
|
|
4
4
|
export declare const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = "lk.segment_id";
|
|
5
5
|
export declare const ATTRIBUTE_PUBLISH_ON_BEHALF = "lk.publish_on_behalf";
|
|
6
6
|
export declare const TOPIC_CHAT = "lk.chat";
|
|
7
|
+
export declare const ATTRIBUTE_AGENT_STATE = "lk.agent.state";
|
|
8
|
+
export declare const ATTRIBUTE_AGENT_NAME = "lk.agent.name";
|
|
9
|
+
export declare const TOPIC_CLIENT_EVENTS = "lk.agent.events";
|
|
10
|
+
export declare const RPC_GET_SESSION_STATE = "lk.agent.get_session_state";
|
|
11
|
+
export declare const RPC_GET_CHAT_HISTORY = "lk.agent.get_chat_history";
|
|
12
|
+
export declare const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
|
|
13
|
+
export declare const RPC_SEND_MESSAGE = "lk.agent.send_message";
|
|
14
|
+
export declare const TOPIC_AGENT_REQUEST = "lk.agent.request";
|
|
15
|
+
export declare const TOPIC_AGENT_RESPONSE = "lk.agent.response";
|
|
7
16
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts
CHANGED
|
@@ -4,4 +4,13 @@ export declare const TOPIC_TRANSCRIPTION = "lk.transcription";
|
|
|
4
4
|
export declare const ATTRIBUTE_TRANSCRIPTION_SEGMENT_ID = "lk.segment_id";
|
|
5
5
|
export declare const ATTRIBUTE_PUBLISH_ON_BEHALF = "lk.publish_on_behalf";
|
|
6
6
|
export declare const TOPIC_CHAT = "lk.chat";
|
|
7
|
+
export declare const ATTRIBUTE_AGENT_STATE = "lk.agent.state";
|
|
8
|
+
export declare const ATTRIBUTE_AGENT_NAME = "lk.agent.name";
|
|
9
|
+
export declare const TOPIC_CLIENT_EVENTS = "lk.agent.events";
|
|
10
|
+
export declare const RPC_GET_SESSION_STATE = "lk.agent.get_session_state";
|
|
11
|
+
export declare const RPC_GET_CHAT_HISTORY = "lk.agent.get_chat_history";
|
|
12
|
+
export declare const RPC_GET_AGENT_INFO = "lk.agent.get_agent_info";
|
|
13
|
+
export declare const RPC_SEND_MESSAGE = "lk.agent.send_message";
|
|
14
|
+
export declare const TOPIC_AGENT_REQUEST = "lk.agent.request";
|
|
15
|
+
export declare const TOPIC_AGENT_RESPONSE = "lk.agent.response";
|
|
7
16
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AACtE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,UAAU,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AACtE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,UAAU,YAAY,CAAC;AAEpC,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAIpD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAClE,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC"}
|