@livekit/agents 1.1.0-dev.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +2 -0
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/constants.cjs +3 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/cpu.cjs +189 -0
- package/dist/cpu.cjs.map +1 -0
- package/dist/cpu.d.cts +24 -0
- package/dist/cpu.d.ts +24 -0
- package/dist/cpu.d.ts.map +1 -0
- package/dist/cpu.js +152 -0
- package/dist/cpu.js.map +1 -0
- package/dist/cpu.test.cjs +227 -0
- package/dist/cpu.test.cjs.map +1 -0
- package/dist/cpu.test.js +204 -0
- package/dist/cpu.test.js.map +1 -0
- package/dist/index.cjs +12 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/inference/interruption/defaults.cjs +1 -1
- package/dist/inference/interruption/defaults.cjs.map +1 -1
- package/dist/inference/interruption/defaults.d.cts +1 -1
- package/dist/inference/interruption/defaults.d.ts +1 -1
- package/dist/inference/interruption/defaults.d.ts.map +1 -1
- package/dist/inference/interruption/defaults.js +1 -1
- package/dist/inference/interruption/defaults.js.map +1 -1
- package/dist/inference/interruption/http_transport.cjs +44 -28
- package/dist/inference/interruption/http_transport.cjs.map +1 -1
- package/dist/inference/interruption/http_transport.d.ts.map +1 -1
- package/dist/inference/interruption/http_transport.js +45 -29
- package/dist/inference/interruption/http_transport.js.map +1 -1
- package/dist/inference/interruption/interruption_detector.cjs +22 -5
- package/dist/inference/interruption/interruption_detector.cjs.map +1 -1
- package/dist/inference/interruption/interruption_detector.d.cts +2 -2
- package/dist/inference/interruption/interruption_detector.d.ts +2 -2
- package/dist/inference/interruption/interruption_detector.d.ts.map +1 -1
- package/dist/inference/interruption/interruption_detector.js +22 -5
- package/dist/inference/interruption/interruption_detector.js.map +1 -1
- package/dist/inference/interruption/interruption_stream.cjs +4 -4
- package/dist/inference/interruption/interruption_stream.cjs.map +1 -1
- package/dist/inference/interruption/interruption_stream.js +4 -4
- package/dist/inference/interruption/interruption_stream.js.map +1 -1
- package/dist/inference/interruption/types.cjs.map +1 -1
- package/dist/inference/interruption/types.d.cts +2 -2
- package/dist/inference/interruption/types.d.ts +2 -2
- package/dist/inference/interruption/types.d.ts.map +1 -1
- package/dist/inference/interruption/ws_transport.cjs +60 -47
- package/dist/inference/interruption/ws_transport.cjs.map +1 -1
- package/dist/inference/interruption/ws_transport.d.ts.map +1 -1
- package/dist/inference/interruption/ws_transport.js +60 -47
- package/dist/inference/interruption/ws_transport.js.map +1 -1
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.cts +1 -1
- package/dist/inference/llm.d.ts +1 -1
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/stt.cjs +20 -12
- package/dist/inference/stt.cjs.map +1 -1
- package/dist/inference/stt.d.cts +3 -2
- package/dist/inference/stt.d.ts +3 -2
- package/dist/inference/stt.d.ts.map +1 -1
- package/dist/inference/stt.js +20 -12
- package/dist/inference/stt.js.map +1 -1
- package/dist/inference/stt.test.cjs +14 -0
- package/dist/inference/stt.test.cjs.map +1 -1
- package/dist/inference/stt.test.js +14 -0
- package/dist/inference/stt.test.js.map +1 -1
- package/dist/inference/tts.cjs +13 -4
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +8 -1
- package/dist/inference/tts.d.ts +8 -1
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +13 -4
- package/dist/inference/tts.js.map +1 -1
- package/dist/inference/tts.test.cjs +10 -0
- package/dist/inference/tts.test.cjs.map +1 -1
- package/dist/inference/tts.test.js +10 -0
- package/dist/inference/tts.test.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +41 -23
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +41 -23
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/job.cjs +1 -1
- package/dist/job.cjs.map +1 -1
- package/dist/job.js +1 -1
- package/dist/job.js.map +1 -1
- package/dist/language.cjs +394 -0
- package/dist/language.cjs.map +1 -0
- package/dist/language.d.cts +15 -0
- package/dist/language.d.ts +15 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +363 -0
- package/dist/language.js.map +1 -0
- package/dist/language.test.cjs +43 -0
- package/dist/language.test.cjs.map +1 -0
- package/dist/language.test.js +49 -0
- package/dist/language.test.js.map +1 -0
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.cjs.map +1 -1
- package/dist/llm/index.d.cts +1 -1
- package/dist/llm/index.d.ts +1 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/stream/deferred_stream.cjs +6 -2
- package/dist/stream/deferred_stream.cjs.map +1 -1
- package/dist/stream/deferred_stream.d.ts.map +1 -1
- package/dist/stream/deferred_stream.js +6 -2
- package/dist/stream/deferred_stream.js.map +1 -1
- package/dist/stt/stt.cjs.map +1 -1
- package/dist/stt/stt.d.cts +2 -1
- package/dist/stt/stt.d.ts +2 -1
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js.map +1 -1
- package/dist/utils.cjs +15 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +8 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +13 -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 +14 -17
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +10 -11
- package/dist/voice/agent.d.ts +10 -11
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +15 -18
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent.test.cjs +194 -0
- package/dist/voice/agent.test.cjs.map +1 -1
- package/dist/voice/agent.test.js +195 -1
- package/dist/voice/agent.test.js.map +1 -1
- package/dist/voice/agent_activity.cjs +116 -39
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +2 -0
- package/dist/voice/agent_activity.d.ts +2 -0
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +117 -40
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_activity.test.cjs +135 -0
- package/dist/voice/agent_activity.test.cjs.map +1 -0
- package/dist/voice/agent_activity.test.js +134 -0
- package/dist/voice/agent_activity.test.js.map +1 -0
- package/dist/voice/agent_session.cjs +38 -38
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +65 -56
- package/dist/voice/agent_session.d.ts +65 -56
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +37 -37
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/audio_recognition.cjs +106 -52
- package/dist/voice/audio_recognition.cjs.map +1 -1
- package/dist/voice/audio_recognition.d.cts +4 -2
- package/dist/voice/audio_recognition.d.ts +4 -2
- package/dist/voice/audio_recognition.d.ts.map +1 -1
- package/dist/voice/audio_recognition.js +106 -52
- package/dist/voice/audio_recognition.js.map +1 -1
- package/dist/voice/audio_recognition_span.test.cjs +84 -22
- package/dist/voice/audio_recognition_span.test.cjs.map +1 -1
- package/dist/voice/audio_recognition_span.test.js +90 -23
- package/dist/voice/audio_recognition_span.test.js.map +1 -1
- package/dist/voice/events.cjs +1 -1
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +4 -3
- package/dist/voice/events.d.ts +4 -3
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js +1 -1
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/index.cjs +9 -1
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +1 -1
- package/dist/voice/index.d.ts +1 -1
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +10 -1
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/remote_session.cjs +922 -0
- package/dist/voice/remote_session.cjs.map +1 -0
- package/dist/voice/remote_session.d.cts +108 -0
- package/dist/voice/remote_session.d.ts +108 -0
- package/dist/voice/remote_session.d.ts.map +1 -0
- package/dist/voice/remote_session.js +887 -0
- package/dist/voice/remote_session.js.map +1 -0
- package/dist/voice/report.cjs +11 -10
- package/dist/voice/report.cjs.map +1 -1
- package/dist/voice/report.d.cts +5 -3
- package/dist/voice/report.d.ts +5 -3
- package/dist/voice/report.d.ts.map +1 -1
- package/dist/voice/report.js +11 -10
- package/dist/voice/report.js.map +1 -1
- package/dist/voice/report.test.cjs +15 -0
- package/dist/voice/report.test.cjs.map +1 -1
- package/dist/voice/report.test.js +15 -0
- package/dist/voice/report.test.js.map +1 -1
- package/dist/voice/room_io/room_io.cjs +39 -0
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.cts +3 -1
- package/dist/voice/room_io/room_io.d.ts +3 -1
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +40 -1
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/turn_config/interruption.cjs.map +1 -1
- package/dist/voice/turn_config/interruption.d.cts +1 -1
- package/dist/voice/turn_config/interruption.d.ts +1 -1
- package/dist/voice/turn_config/interruption.d.ts.map +1 -1
- package/dist/voice/turn_config/interruption.js.map +1 -1
- package/dist/voice/turn_config/utils.cjs +95 -35
- package/dist/voice/turn_config/utils.cjs.map +1 -1
- package/dist/voice/turn_config/utils.d.cts +17 -5
- package/dist/voice/turn_config/utils.d.ts +17 -5
- package/dist/voice/turn_config/utils.d.ts.map +1 -1
- package/dist/voice/turn_config/utils.js +93 -35
- package/dist/voice/turn_config/utils.js.map +1 -1
- package/dist/voice/turn_config/utils.test.cjs +83 -41
- package/dist/voice/turn_config/utils.test.cjs.map +1 -1
- package/dist/voice/turn_config/utils.test.js +84 -42
- package/dist/voice/turn_config/utils.test.js.map +1 -1
- package/dist/worker.cjs +6 -29
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +6 -19
- package/dist/worker.js.map +1 -1
- package/package.json +3 -2
- package/src/cli.ts +2 -0
- package/src/constants.ts +1 -0
- package/src/cpu.test.ts +239 -0
- package/src/cpu.ts +173 -0
- package/src/index.ts +13 -15
- package/src/inference/interruption/defaults.ts +1 -1
- package/src/inference/interruption/http_transport.ts +49 -30
- package/src/inference/interruption/interruption_detector.ts +22 -6
- package/src/inference/interruption/interruption_stream.ts +4 -4
- package/src/inference/interruption/types.ts +2 -2
- package/src/inference/interruption/ws_transport.ts +63 -59
- package/src/inference/llm.ts +3 -1
- package/src/inference/stt.test.ts +17 -0
- package/src/inference/stt.ts +22 -14
- package/src/inference/tts.test.ts +12 -0
- package/src/inference/tts.ts +22 -6
- package/src/ipc/job_proc_lazy_main.ts +44 -24
- package/src/job.ts +1 -1
- package/src/language.test.ts +62 -0
- package/src/language.ts +380 -0
- package/src/llm/index.ts +2 -0
- package/src/stream/deferred_stream.ts +5 -1
- package/src/stt/stt.ts +2 -1
- package/src/utils.ts +20 -0
- package/src/voice/agent.test.ts +208 -1
- package/src/voice/agent.ts +21 -22
- package/src/voice/agent_activity.test.ts +194 -0
- package/src/voice/agent_activity.ts +161 -43
- package/src/voice/agent_session.ts +103 -92
- package/src/voice/audio_recognition.ts +124 -61
- package/src/voice/audio_recognition_span.test.ts +115 -35
- package/src/voice/events.ts +4 -3
- package/src/voice/index.ts +10 -1
- package/src/voice/remote_session.ts +1083 -0
- package/src/voice/report.test.ts +22 -3
- package/src/voice/report.ts +31 -14
- package/src/voice/room_io/room_io.ts +52 -2
- package/src/voice/turn_config/interruption.ts +1 -1
- package/src/voice/turn_config/utils.test.ts +91 -43
- package/src/voice/turn_config/utils.ts +120 -56
- package/src/worker.ts +34 -50
- package/dist/voice/client_events.cjs +0 -554
- package/dist/voice/client_events.cjs.map +0 -1
- package/dist/voice/client_events.d.cts +0 -195
- package/dist/voice/client_events.d.ts +0 -195
- package/dist/voice/client_events.d.ts.map +0 -1
- package/dist/voice/client_events.js +0 -548
- package/dist/voice/client_events.js.map +0 -1
- package/dist/voice/wire_format.cjs +0 -798
- package/dist/voice/wire_format.cjs.map +0 -1
- package/dist/voice/wire_format.d.cts +0 -5503
- package/dist/voice/wire_format.d.ts +0 -5503
- package/dist/voice/wire_format.d.ts.map +0 -1
- package/dist/voice/wire_format.js +0 -728
- package/dist/voice/wire_format.js.map +0 -1
- package/src/voice/client_events.ts +0 -838
- package/src/voice/wire_format.ts +0 -827
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/voice/remote_session.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Timestamp } from '@bufbuild/protobuf';\nimport { AgentSession as pb } from '@livekit/protocol';\nimport type { ByteStreamReader, Room, TextStreamInfo } from '@livekit/rtc-node';\nimport type { TypedEventEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport { TOPIC_SESSION_MESSAGES } from '../constants.js';\nimport type { OverlappingSpeechEvent } from '../inference/interruption/types.js';\nimport type {\n ChatItem,\n FunctionCall as FCItem,\n FunctionCallOutput as FCOItem,\n} from '../llm/chat_context.js';\nimport type { ToolContext } from '../llm/tool_context.js';\nimport { log } from '../log.js';\nimport type {\n InterruptionModelUsage,\n LLMModelUsage,\n STTModelUsage,\n TTSModelUsage,\n} from '../metrics/model_usage.js';\nimport { Future, Task, shortuuid } from '../utils.js';\nimport type { AgentSession, AgentSessionUsage } from './agent_session.js';\nimport {\n AgentSessionEventTypes,\n type AgentState,\n type AgentStateChangedEvent,\n type ConversationItemAddedEvent,\n type ErrorEvent,\n type FunctionToolsExecutedEvent,\n type MetricsCollectedEvent,\n type UserInputTranscribedEvent,\n type UserState,\n type UserStateChangedEvent,\n} from './events.js';\nimport type { RoomIO } from './room_io/room_io.js';\n\n// ===========================================================================\n// Shared types (TextInput, Client event types, wire format aliases)\n// ===========================================================================\n\nexport interface TextInputEvent {\n text: string;\n info?: TextStreamInfo;\n participantIdentity?: string;\n}\n\nexport type TextInputCallback = (session: AgentSession, ev: TextInputEvent) => void | Promise<void>;\n\n/** @experimental */\nexport type RemoteSessionEventTypes =\n | 'agent_state_changed'\n | 'user_state_changed'\n | 'conversation_item_added'\n | 'user_input_transcribed'\n | 'function_tools_executed'\n | 'overlapping_speech'\n | 'session_usage'\n | 'error';\n\n/** @experimental */\nexport type RemoteSessionCallbacks = {\n agent_state_changed: (ev: pb.AgentSessionEvent_AgentStateChanged) => void;\n user_state_changed: (ev: pb.AgentSessionEvent_UserStateChanged) => void;\n conversation_item_added: (ev: pb.AgentSessionEvent_ConversationItemAdded) => void;\n user_input_transcribed: (ev: pb.AgentSessionEvent_UserInputTranscribed) => void;\n function_tools_executed: (ev: pb.AgentSessionEvent_FunctionToolsExecuted) => void;\n overlapping_speech: (ev: pb.AgentSessionEvent_OverlappingSpeech) => void;\n session_usage: (ev: pb.AgentSessionEvent_SessionUsageUpdated) => void;\n error: (ev: pb.AgentSessionEvent_Error) => void;\n};\n\n// ===========================================================================\n// SessionTransport\n// ===========================================================================\n\nexport abstract class SessionTransport {\n async start(): Promise<void> {}\n abstract sendMessage(msg: pb.AgentSessionMessage): Promise<void>;\n abstract close(): Promise<void>;\n abstract [Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage>;\n}\n\nexport class RoomSessionTransport extends SessionTransport {\n private readonly room: Room;\n private handlerRegistered = false;\n private closed = false;\n private pendingMessages: pb.AgentSessionMessage[] = [];\n private waitingResolve: ((value: IteratorResult<pb.AgentSessionMessage>) => void) | null = null;\n private roomIO: RoomIO;\n\n constructor(room: Room, roomIO: RoomIO) {\n super();\n this.room = room;\n this.roomIO = roomIO;\n }\n\n private getRemoteIdentity() {\n return this.roomIO.linkedParticipant?.identity;\n }\n\n override async start(): Promise<void> {\n if (this.handlerRegistered) return;\n this.room.registerByteStreamHandler(TOPIC_SESSION_MESSAGES, this.onByteStream);\n this.handlerRegistered = true;\n }\n\n private onByteStream = (reader: ByteStreamReader, participantInfo: { identity: string }) => {\n if (this.getRemoteIdentity() && participantInfo.identity !== this.getRemoteIdentity()) {\n return;\n }\n this.readStream(reader).catch((e) => {\n log().warn({ error: e }, 'failed to read binary stream message');\n });\n };\n\n private async readStream(reader: ByteStreamReader): Promise<void> {\n try {\n const chunks = await reader.readAll();\n let totalLength = 0;\n for (const chunk of chunks) {\n totalLength += chunk.length;\n }\n const data = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n data.set(chunk, offset);\n offset += chunk.length;\n }\n const msg = pb.AgentSessionMessage.fromBinary(data);\n this.enqueue(msg);\n } catch (e) {\n if (!this.closed) {\n log().warn({ error: e }, 'failed to parse binary stream message');\n }\n }\n }\n\n override async sendMessage(msg: pb.AgentSessionMessage): Promise<void> {\n if (this.closed || !this.room.isConnected) return;\n\n try {\n const data = msg.toBinary();\n const opts: Record<string, unknown> = {\n topic: TOPIC_SESSION_MESSAGES,\n name: shortuuid('AS_'),\n };\n const remoteIdentity = this.getRemoteIdentity();\n if (remoteIdentity) {\n opts.destinationIdentities = [remoteIdentity];\n }\n const writer = await this.room.localParticipant!.streamBytes(opts);\n await writer.write(new Uint8Array(data));\n await writer.close();\n } catch (e) {\n log().warn({ error: e }, 'failed to send binary stream message');\n }\n }\n\n override async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n\n if (this.handlerRegistered) {\n try {\n this.room.unregisterByteStreamHandler(TOPIC_SESSION_MESSAGES);\n } catch (e) {\n log().debug({ error: e }, 'byte stream handler already unregistered');\n }\n this.handlerRegistered = false;\n }\n\n if (this.waitingResolve) {\n this.waitingResolve({\n value: undefined as unknown as pb.AgentSessionMessage,\n done: true,\n });\n this.waitingResolve = null;\n }\n }\n\n private enqueue(msg: pb.AgentSessionMessage): void {\n if (this.closed) return;\n\n if (this.waitingResolve) {\n const resolve = this.waitingResolve;\n this.waitingResolve = null;\n resolve({ value: msg, done: false });\n } else {\n this.pendingMessages.push(msg);\n }\n }\n\n override [Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage> {\n return {\n next: (): Promise<IteratorResult<pb.AgentSessionMessage>> => {\n if (this.closed && this.pendingMessages.length === 0) {\n return Promise.resolve({\n value: undefined as unknown as pb.AgentSessionMessage,\n done: true,\n });\n }\n\n const pending = this.pendingMessages.shift();\n if (pending) {\n return Promise.resolve({ value: pending, done: false });\n }\n\n return new Promise<IteratorResult<pb.AgentSessionMessage>>((resolve) => {\n this.waitingResolve = resolve;\n });\n },\n return: (): Promise<IteratorResult<pb.AgentSessionMessage>> => {\n this.close();\n return Promise.resolve({\n value: undefined as unknown as pb.AgentSessionMessage,\n done: true,\n });\n },\n };\n }\n}\n\n// ===========================================================================\n// Enum maps\n// ===========================================================================\nconst AGENT_STATE_MAP: Record<AgentState, pb.AgentState> = {\n initializing: pb.AgentState.AS_INITIALIZING,\n idle: pb.AgentState.AS_IDLE,\n listening: pb.AgentState.AS_LISTENING,\n thinking: pb.AgentState.AS_THINKING,\n speaking: pb.AgentState.AS_SPEAKING,\n};\n\nconst USER_STATE_MAP: Record<UserState, pb.UserState> = {\n speaking: pb.UserState.US_SPEAKING,\n listening: pb.UserState.US_LISTENING,\n away: pb.UserState.US_AWAY,\n};\n\n// ===========================================================================\n// Chat item / timestamp conversion helpers\n// ===========================================================================\nfunction msToTimestamp(ms: number): Timestamp {\n return Timestamp.fromDate(new Date(ms));\n}\n\nfunction nowTimestamp(): Timestamp {\n return Timestamp.fromDate(new Date());\n}\n\nfunction chatItemToProto(item: ChatItem): pb.ChatContext_ChatItem {\n switch (item.type) {\n case 'message': {\n const msg = item;\n const roleMap: Record<string, pb.ChatRole> = {\n developer: pb.ChatRole.DEVELOPER,\n system: pb.ChatRole.SYSTEM,\n user: pb.ChatRole.USER,\n assistant: pb.ChatRole.ASSISTANT,\n };\n const content: pb.ChatMessage_ChatContent[] = [];\n for (const c of msg.content) {\n if (typeof c === 'string') {\n content.push(new pb.ChatMessage_ChatContent({ payload: { case: 'text', value: c } }));\n }\n }\n\n const metricsReport = new pb.MetricsReport();\n if (msg.metrics.transcriptionDelay !== undefined)\n metricsReport.transcriptionDelay = msg.metrics.transcriptionDelay;\n if (msg.metrics.endOfTurnDelay !== undefined)\n metricsReport.endOfTurnDelay = msg.metrics.endOfTurnDelay;\n if (msg.metrics.onUserTurnCompletedDelay !== undefined)\n metricsReport.onUserTurnCompletedDelay = msg.metrics.onUserTurnCompletedDelay;\n if (msg.metrics.llmNodeTtft !== undefined)\n metricsReport.llmNodeTtft = msg.metrics.llmNodeTtft;\n if (msg.metrics.ttsNodeTtfb !== undefined)\n metricsReport.ttsNodeTtfb = msg.metrics.ttsNodeTtfb;\n if (msg.metrics.e2eLatency !== undefined) metricsReport.e2eLatency = msg.metrics.e2eLatency;\n\n const pbMsg = new pb.ChatMessage({\n id: msg.id,\n role: roleMap[msg.role] ?? pb.ChatRole.ASSISTANT,\n content,\n interrupted: msg.interrupted,\n metrics: metricsReport,\n createdAt: msToTimestamp(msg.createdAt),\n });\n if (msg.transcriptConfidence !== undefined) {\n pbMsg.transcriptConfidence = msg.transcriptConfidence;\n }\n return new pb.ChatContext_ChatItem({ item: { case: 'message', value: pbMsg } });\n }\n case 'function_call': {\n const fc = item;\n return new pb.ChatContext_ChatItem({\n item: {\n case: 'functionCall',\n value: new pb.FunctionCall({\n id: fc.id,\n callId: fc.callId,\n name: fc.name,\n arguments: fc.args,\n createdAt: msToTimestamp(fc.createdAt),\n }),\n },\n });\n }\n case 'function_call_output': {\n const fco = item;\n return new pb.ChatContext_ChatItem({\n item: {\n case: 'functionCallOutput',\n value: new pb.FunctionCallOutput({\n id: fco.id,\n callId: fco.callId,\n name: fco.name,\n output: fco.output,\n isError: fco.isError,\n createdAt: msToTimestamp(fco.createdAt),\n }),\n },\n });\n }\n case 'agent_handoff': {\n const ah = item;\n return new pb.ChatContext_ChatItem({\n item: {\n case: 'agentHandoff',\n value: new pb.AgentHandoff({\n id: ah.id,\n oldAgentId: ah.oldAgentId,\n newAgentId: ah.newAgentId,\n createdAt: msToTimestamp(ah.createdAt),\n }),\n },\n });\n }\n }\n}\n\n// ===========================================================================\n// Usage conversion helpers\n// ===========================================================================\nfunction sessionUsageToProto(usage: AgentSessionUsage): pb.AgentSessionUsage {\n const modelUsages: pb.ModelUsage[] = [];\n for (const mu of usage.modelUsage) {\n switch (mu.type) {\n case 'llm_usage': {\n const lu = mu as Partial<LLMModelUsage>;\n modelUsages.push(\n new pb.ModelUsage({\n usage: {\n case: 'llm',\n value: new pb.LLMModelUsage({\n provider: lu.provider ?? '',\n model: lu.model ?? '',\n inputTokens: lu.inputTokens ?? 0,\n inputCachedTokens: lu.inputCachedTokens ?? 0,\n inputAudioTokens: lu.inputAudioTokens ?? 0,\n inputCachedAudioTokens: lu.inputCachedAudioTokens ?? 0,\n inputTextTokens: lu.inputTextTokens ?? 0,\n inputCachedTextTokens: lu.inputCachedTextTokens ?? 0,\n inputImageTokens: lu.inputImageTokens ?? 0,\n inputCachedImageTokens: lu.inputCachedImageTokens ?? 0,\n outputTokens: lu.outputTokens ?? 0,\n outputAudioTokens: lu.outputAudioTokens ?? 0,\n outputTextTokens: lu.outputTextTokens ?? 0,\n sessionDuration: (lu.sessionDurationMs ?? 0) / 1000,\n }),\n },\n }),\n );\n break;\n }\n case 'tts_usage': {\n const tu = mu as Partial<TTSModelUsage>;\n modelUsages.push(\n new pb.ModelUsage({\n usage: {\n case: 'tts',\n value: new pb.TTSModelUsage({\n provider: tu.provider ?? '',\n model: tu.model ?? '',\n inputTokens: tu.inputTokens ?? 0,\n outputTokens: tu.outputTokens ?? 0,\n charactersCount: tu.charactersCount ?? 0,\n audioDuration: (tu.audioDurationMs ?? 0) / 1000,\n }),\n },\n }),\n );\n break;\n }\n case 'stt_usage': {\n const su = mu as Partial<STTModelUsage>;\n modelUsages.push(\n new pb.ModelUsage({\n usage: {\n case: 'stt',\n value: new pb.STTModelUsage({\n provider: su.provider ?? '',\n model: su.model ?? '',\n inputTokens: su.inputTokens ?? 0,\n outputTokens: su.outputTokens ?? 0,\n audioDuration: (su.audioDurationMs ?? 0) / 1000,\n }),\n },\n }),\n );\n break;\n }\n case 'interruption_usage': {\n const iu = mu as Partial<InterruptionModelUsage>;\n modelUsages.push(\n new pb.ModelUsage({\n usage: {\n case: 'interruption',\n value: new pb.InterruptionModelUsage({\n provider: iu.provider ?? '',\n model: iu.model ?? '',\n totalRequests: iu.totalRequests ?? 0,\n }),\n },\n }),\n );\n break;\n }\n }\n }\n return new pb.AgentSessionUsage({ modelUsage: modelUsages });\n}\n\nfunction toolNames(toolCtx: ToolContext | undefined): string[] {\n if (!toolCtx) return [];\n return Object.keys(toolCtx);\n}\n\nfunction protoSerializeOptions(opts: {\n turnHandling?: { endpointing?: unknown; interruption?: unknown };\n maxToolSteps?: number;\n userAwayTimeout?: number | null;\n preemptiveGeneration?: boolean;\n useTtsAlignedTranscript?: boolean;\n}): Record<string, string> {\n return {\n endpointing: JSON.stringify(opts.turnHandling?.endpointing ?? {}),\n interruption: JSON.stringify(opts.turnHandling?.interruption ?? {}),\n max_tool_steps: String(opts.maxToolSteps ?? 0),\n user_away_timeout: String(opts.userAwayTimeout ?? ''),\n preemptive_generation: String(opts.preemptiveGeneration ?? false),\n use_tts_aligned_transcript: String(opts.useTtsAlignedTranscript ?? false),\n };\n}\n\n// ===========================================================================\n// SessionHost (protobuf-based server-side handler)\n// ===========================================================================\nexport class SessionHost {\n private readonly transport: SessionTransport;\n private session: AgentSession | undefined;\n private started = false;\n private eventsRegistered = false;\n private recvTask: Task<void> | undefined;\n private readonly tasks = new Set<Task<void>>();\n private textInputCb: TextInputCallback | undefined;\n\n constructor(transport: SessionTransport) {\n this.transport = transport;\n }\n\n registerSession(session: AgentSession): void {\n this.session = session;\n if (!this.eventsRegistered) {\n this.eventsRegistered = true;\n session.on(AgentSessionEventTypes.AgentStateChanged, this.onAgentStateChanged);\n session.on(AgentSessionEventTypes.UserStateChanged, this.onUserStateChanged);\n session.on(AgentSessionEventTypes.ConversationItemAdded, this.onConversationItemAdded);\n session.on(AgentSessionEventTypes.UserInputTranscribed, this.onUserInputTranscribed);\n session.on(AgentSessionEventTypes.FunctionToolsExecuted, this.onFunctionToolsExecuted);\n session.on(AgentSessionEventTypes.MetricsCollected, this.onMetricsCollected);\n session.on(AgentSessionEventTypes.OverlappingSpeech, this.onOverlappingSpeech);\n session.on(AgentSessionEventTypes.Error, this.onHostError);\n }\n }\n\n registerTextInput(textInputCb: TextInputCallback): void {\n this.textInputCb = textInputCb;\n }\n\n async start(): Promise<void> {\n if (this.started) return;\n this.started = true;\n await this.transport.start();\n this.recvTask = Task.from(async () => this.recvLoop());\n }\n\n async close(): Promise<void> {\n if (!this.started) return;\n this.started = false;\n\n if (this.session && this.eventsRegistered) {\n this.eventsRegistered = false;\n this.session.off(AgentSessionEventTypes.AgentStateChanged, this.onAgentStateChanged);\n this.session.off(AgentSessionEventTypes.UserStateChanged, this.onUserStateChanged);\n this.session.off(AgentSessionEventTypes.ConversationItemAdded, this.onConversationItemAdded);\n this.session.off(AgentSessionEventTypes.UserInputTranscribed, this.onUserInputTranscribed);\n this.session.off(AgentSessionEventTypes.FunctionToolsExecuted, this.onFunctionToolsExecuted);\n this.session.off(AgentSessionEventTypes.MetricsCollected, this.onMetricsCollected);\n this.session.off(AgentSessionEventTypes.OverlappingSpeech, this.onOverlappingSpeech);\n this.session.off(AgentSessionEventTypes.Error, this.onHostError);\n }\n\n if (this.recvTask) {\n this.recvTask.cancel();\n }\n\n await Promise.allSettled([...this.tasks].map((task) => task.cancelAndWait()));\n this.tasks.clear();\n\n await this.transport.close();\n }\n\n private async recvLoop(): Promise<void> {\n try {\n for await (const msg of this.transport) {\n if (msg.message.case === 'request') {\n if (this.session) {\n this.trackTask(\n Task.from(async () => this.handleRequestSafe(msg.message.value as pb.SessionRequest)),\n );\n }\n }\n }\n } catch (e) {\n if (this.started) {\n log().warn({ error: e }, 'error processing session message');\n }\n }\n }\n\n private sendEvent(event: pb.AgentSessionEvent): void {\n const msg = new pb.AgentSessionMessage({\n message: { case: 'event', value: event },\n });\n this.trackTask(Task.from(async () => this.transport.sendMessage(msg)));\n }\n\n private emitEvent<Event extends pb.AgentSessionEvent['event']>(\n event: Event,\n createdAt?: number,\n ): void {\n this.sendEvent(\n new pb.AgentSessionEvent({\n createdAt: createdAt ? msToTimestamp(createdAt) : nowTimestamp(),\n event: event,\n }),\n );\n }\n\n private onAgentStateChanged = (event: AgentStateChangedEvent): void => {\n this.emitEvent(\n {\n case: 'agentStateChanged',\n value: new pb.AgentSessionEvent_AgentStateChanged({\n oldState: AGENT_STATE_MAP[event.oldState],\n newState: AGENT_STATE_MAP[event.newState],\n }),\n },\n event.createdAt,\n );\n };\n\n private onUserStateChanged = (event: UserStateChangedEvent): void => {\n this.emitEvent(\n {\n case: 'userStateChanged',\n value: new pb.AgentSessionEvent_UserStateChanged({\n oldState: USER_STATE_MAP[event.oldState],\n newState: USER_STATE_MAP[event.newState],\n }),\n },\n event.createdAt,\n );\n };\n\n private onUserInputTranscribed = (event: UserInputTranscribedEvent): void => {\n this.emitEvent(\n {\n case: 'userInputTranscribed',\n value: new pb.AgentSessionEvent_UserInputTranscribed({\n transcript: event.transcript,\n isFinal: event.isFinal,\n }),\n },\n event.createdAt,\n );\n };\n\n private onConversationItemAdded = (event: ConversationItemAddedEvent): void => {\n this.emitEvent(\n {\n case: 'conversationItemAdded',\n value: new pb.AgentSessionEvent_ConversationItemAdded({\n item: chatItemToProto(event.item),\n }),\n },\n event.createdAt,\n );\n };\n\n private onFunctionToolsExecuted = (event: FunctionToolsExecutedEvent): void => {\n const pbCalls = event.functionCalls.map(\n (fc: FCItem) => new pb.FunctionCall({ name: fc.name, arguments: fc.args, callId: fc.callId }),\n );\n const pbOutputs = event.functionCallOutputs\n .filter((fco): fco is FCOItem => fco != null)\n .map(\n (fco: FCOItem) =>\n new pb.FunctionCallOutput({\n callId: fco.callId,\n output: fco.output,\n isError: fco.isError,\n }),\n );\n this.emitEvent(\n {\n case: 'functionToolsExecuted',\n value: new pb.AgentSessionEvent_FunctionToolsExecuted({\n functionCalls: pbCalls,\n functionCallOutputs: pbOutputs,\n }),\n },\n event.createdAt,\n );\n };\n\n private onOverlappingSpeech = (event: OverlappingSpeechEvent): void => {\n const value = new pb.AgentSessionEvent_OverlappingSpeech({\n isInterruption: event.isInterruption,\n detectionDelay: event.detectionDelayInS,\n detectedAt: msToTimestamp(event.detectedAt),\n });\n if (event.overlapStartedAt != null) {\n value.overlapStartedAt = msToTimestamp(event.overlapStartedAt);\n }\n this.emitEvent({ case: 'overlappingSpeech', value });\n };\n\n private onMetricsCollected = (event: MetricsCollectedEvent): void => {\n if (!this.session) return;\n this.emitEvent(\n {\n case: 'sessionUsageUpdated',\n value: new pb.AgentSessionEvent_SessionUsageUpdated({\n usage: sessionUsageToProto(this.session.usage),\n }),\n },\n event.createdAt,\n );\n };\n\n private onHostError = (event: ErrorEvent): void => {\n this.emitEvent(\n {\n case: 'error',\n value: new pb.AgentSessionEvent_Error({\n message: event.error ? String(event.error) : 'Unknown error',\n }),\n },\n event.createdAt,\n );\n };\n\n private async handleRequestSafe(req: pb.SessionRequest): Promise<void> {\n try {\n await this.handleRequest(req);\n } catch (e) {\n log().warn({ error: e, requestId: req.requestId }, 'error handling session request');\n try {\n const resp = new pb.AgentSessionMessage({\n message: {\n case: 'response',\n value: new pb.SessionResponse({\n requestId: req.requestId,\n error: 'internal error',\n }),\n },\n });\n await this.transport.sendMessage(resp);\n } catch (e) {\n log().debug({ error: e }, 'failed to send error response');\n }\n }\n }\n\n private async handleRequest(req: pb.SessionRequest): Promise<void> {\n if (!this.session) return;\n\n switch (req.request.case) {\n case 'ping':\n return this.sendResponse(req.requestId, {\n case: 'pong',\n value: new pb.SessionResponse_Pong(),\n });\n case 'getChatHistory':\n return this.handleGetChatHistory(req.requestId);\n case 'getAgentInfo':\n return this.handleGetAgentInfo(req.requestId);\n case 'runInput':\n return this.handleRunInput(req.requestId, req.request.value);\n case 'getSessionState':\n return this.handleGetSessionState(req.requestId);\n case 'getRtcStats':\n return this.sendResponse(req.requestId, {\n case: 'getRtcStats',\n value: new pb.SessionResponse_GetRTCStatsResponse({\n publisherStats: [],\n subscriberStats: [],\n }),\n });\n case 'getSessionUsage':\n return this.handleGetSessionUsage(req.requestId);\n }\n }\n\n private async handleGetChatHistory(requestId: string): Promise<void> {\n const items = this.session!.history.items.map(chatItemToProto);\n return this.sendResponse(requestId, {\n case: 'getChatHistory',\n value: new pb.SessionResponse_GetChatHistoryResponse({ items }),\n });\n }\n\n private async handleGetAgentInfo(requestId: string): Promise<void> {\n const agent = this.session!.currentAgent;\n return this.sendResponse(requestId, {\n case: 'getAgentInfo',\n value: new pb.SessionResponse_GetAgentInfoResponse({\n id: agent.id,\n instructions: agent.instructions,\n tools: toolNames(agent.toolCtx),\n chatCtx: agent.chatCtx.items.map(chatItemToProto),\n }),\n });\n }\n\n private async handleRunInput(\n requestId: string,\n input: pb.SessionRequest_RunInput,\n ): Promise<void> {\n const text = input.text;\n let items: pb.ChatContext_ChatItem[] = [];\n let error: string | undefined;\n\n if (text) {\n if (this.textInputCb) {\n const cbResult = this.textInputCb(this.session!, { text });\n if (cbResult instanceof Promise) {\n await cbResult;\n }\n } else {\n try {\n await this.session!.interrupt({ force: true }).await;\n } catch {\n // ignore\n }\n\n const result = this.session!.run({ userInput: text });\n try {\n await result.wait();\n } catch (e) {\n error = e instanceof Error ? e.message : String(e);\n }\n items = result.events.map((ev) => chatItemToProto(ev.item));\n }\n }\n\n return this.sendResponse(\n requestId,\n {\n case: 'runInput',\n value: new pb.SessionResponse_RunInputResponse({ items }),\n },\n error,\n );\n }\n\n private async handleGetSessionState(requestId: string): Promise<void> {\n const agent = this.session!.currentAgent;\n const startedAt = this.session!._startedAt ?? Date.now();\n return this.sendResponse(requestId, {\n case: 'getSessionState',\n value: new pb.SessionResponse_GetSessionStateResponse({\n agentState: AGENT_STATE_MAP[this.session!.agentState],\n userState: USER_STATE_MAP[this.session!.userState],\n agentId: agent.id,\n options: protoSerializeOptions({\n turnHandling: this.session!.sessionOptions.turnHandling,\n maxToolSteps: this.session!.sessionOptions.maxToolSteps,\n userAwayTimeout: this.session!.sessionOptions.userAwayTimeout,\n preemptiveGeneration: this.session!.sessionOptions.preemptiveGeneration,\n useTtsAlignedTranscript: this.session!.sessionOptions.useTtsAlignedTranscript,\n }),\n createdAt: msToTimestamp(startedAt),\n }),\n });\n }\n\n private async handleGetSessionUsage(requestId: string): Promise<void> {\n return this.sendResponse(requestId, {\n case: 'getSessionUsage',\n value: new pb.SessionResponse_GetSessionUsageResponse({\n usage: sessionUsageToProto(this.session!.usage),\n createdAt: nowTimestamp(),\n }),\n });\n }\n\n private async sendResponse(\n requestId: string,\n response: pb.SessionResponse['response'],\n error?: string,\n ): Promise<void> {\n await this.transport.sendMessage(\n new pb.AgentSessionMessage({\n message: {\n case: 'response',\n value: new pb.SessionResponse({ requestId, response, error }),\n },\n }),\n );\n }\n\n private trackTask(task: Task<void>): void {\n this.tasks.add(task);\n task.addDoneCallback(() => {\n this.tasks.delete(task);\n });\n }\n}\n\n// ===========================================================================\n// RemoteSession (protobuf-based client-side interface)\n// ===========================================================================\n\n/** @experimental */\nexport class RemoteSession extends (EventEmitter as new () => TypedEventEmitter<RemoteSessionCallbacks>) {\n private readonly transport: SessionTransport;\n private started = false;\n\n private readonly tasks = new Set<Task<void>>();\n private readonly pendingRequests = new Map<string, Future<pb.SessionResponse>>();\n private recvTask: Task<void> | undefined;\n private readonly _logger = log();\n\n constructor(transport: SessionTransport) {\n super();\n this.transport = transport;\n }\n\n static fromRoom(room: Room, roomIO: RoomIO): RemoteSession {\n const transport = new RoomSessionTransport(room, roomIO);\n return new RemoteSession(transport);\n }\n\n async start(): Promise<void> {\n if (this.started) return;\n this.started = true;\n await this.transport.start();\n this.recvTask = Task.from(async () => this.recvLoop());\n }\n\n async close(): Promise<void> {\n if (!this.started) return;\n this.started = false;\n\n if (this.recvTask) {\n this.recvTask.cancel();\n }\n\n for (const pending of this.pendingRequests.values()) {\n pending.reject(new Error('RemoteSession closed'));\n }\n this.pendingRequests.clear();\n\n for (const task of this.tasks) {\n task.cancel();\n }\n this.tasks.clear();\n\n await this.transport.close();\n }\n\n private async recvLoop(): Promise<void> {\n try {\n for await (const msg of this.transport) {\n switch (msg.message.case) {\n case 'event':\n this.dispatchEvent(msg.message.value);\n break;\n case 'response':\n this.dispatchResponse(msg.message.value);\n break;\n }\n }\n } catch (e) {\n if (this.started) {\n this._logger.warn({ error: e }, 'error in RemoteSession recv loop');\n }\n }\n }\n\n private dispatchEvent(event: pb.AgentSessionEvent): void {\n const ev = event.event;\n switch (ev.case) {\n case 'agentStateChanged':\n this.emit('agent_state_changed', ev.value);\n break;\n case 'userStateChanged':\n this.emit('user_state_changed', ev.value);\n break;\n case 'userInputTranscribed':\n this.emit('user_input_transcribed', ev.value);\n break;\n case 'conversationItemAdded':\n this.emit('conversation_item_added', ev.value);\n break;\n case 'functionToolsExecuted':\n this.emit('function_tools_executed', ev.value);\n break;\n case 'overlappingSpeech':\n this.emit('overlapping_speech', ev.value);\n break;\n case 'sessionUsageUpdated':\n this.emit('session_usage', ev.value);\n break;\n case 'error':\n this.emit('error', ev.value);\n break;\n }\n }\n\n private dispatchResponse(response: pb.SessionResponse): void {\n const future = this.pendingRequests.get(response.requestId);\n this.pendingRequests.delete(response.requestId);\n if (future && !future.done) {\n future.resolve(response);\n }\n }\n\n private async sendRequest(\n buildReq: (requestId: string) => pb.SessionRequest,\n timeout = 60000,\n ): Promise<pb.SessionResponse> {\n const requestId = shortuuid('req_');\n const req = buildReq(requestId);\n req.requestId = requestId;\n\n const future = new Future<pb.SessionResponse>();\n this.pendingRequests.set(requestId, future);\n\n const msg = new pb.AgentSessionMessage({\n message: { case: 'request', value: req },\n });\n await this.transport.sendMessage(msg);\n\n const timer = setTimeout(() => {\n if (!future.done) {\n this.pendingRequests.delete(requestId);\n future.reject(new Error('RemoteSession request timed out'));\n }\n }, timeout);\n\n try {\n const response = await future.await;\n if (response.error) {\n throw new Error(response.error);\n }\n return response;\n } finally {\n clearTimeout(timer);\n }\n }\n\n async fetchSessionState(): Promise<pb.SessionResponse_GetSessionStateResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'getSessionState', value: new pb.SessionRequest_GetSessionState() },\n }),\n );\n if (resp.response.case !== 'getSessionState') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n async fetchChatHistory(): Promise<pb.SessionResponse_GetChatHistoryResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'getChatHistory', value: new pb.SessionRequest_GetChatHistory() },\n }),\n );\n if (resp.response.case !== 'getChatHistory') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n async fetchAgentInfo(): Promise<pb.SessionResponse_GetAgentInfoResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'getAgentInfo', value: new pb.SessionRequest_GetAgentInfo() },\n }),\n );\n if (resp.response.case !== 'getAgentInfo') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n async sendMessage(\n text: string,\n responseTimeout = 60000,\n ): Promise<pb.SessionResponse_RunInputResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'runInput', value: new pb.SessionRequest_RunInput({ text }) },\n }),\n responseTimeout,\n );\n if (resp.response.case !== 'runInput') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n async fetchRtcStats(): Promise<pb.SessionResponse_GetRTCStatsResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'getRtcStats', value: new pb.SessionRequest_GetRTCStats() },\n }),\n );\n if (resp.response.case !== 'getRtcStats') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n async fetchSessionUsage(): Promise<pb.SessionResponse_GetSessionUsageResponse> {\n const resp = await this.sendRequest(\n (id) =>\n new pb.SessionRequest({\n requestId: id,\n request: { case: 'getSessionUsage', value: new pb.SessionRequest_GetSessionUsage() },\n }),\n );\n if (resp.response.case !== 'getSessionUsage') {\n throw new Error('unexpected response type');\n }\n return resp.response.value;\n }\n\n private trackTask(task: Task<void>): void {\n this.tasks.add(task);\n task.addDoneCallback(() => {\n this.tasks.delete(task);\n });\n }\n}\n"],"mappings":"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","names":["import_events","pb","e","EventEmitter"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { AgentSession as pb } from '@livekit/protocol';
|
|
2
|
+
import type { Room, TextStreamInfo } from '@livekit/rtc-node';
|
|
3
|
+
import type { TypedEventEmitter } from '@livekit/typed-emitter';
|
|
4
|
+
import type { AgentSession } from './agent_session.js';
|
|
5
|
+
import type { RoomIO } from './room_io/room_io.js';
|
|
6
|
+
export interface TextInputEvent {
|
|
7
|
+
text: string;
|
|
8
|
+
info?: TextStreamInfo;
|
|
9
|
+
participantIdentity?: string;
|
|
10
|
+
}
|
|
11
|
+
export type TextInputCallback = (session: AgentSession, ev: TextInputEvent) => void | Promise<void>;
|
|
12
|
+
/** @experimental */
|
|
13
|
+
export type RemoteSessionEventTypes = 'agent_state_changed' | 'user_state_changed' | 'conversation_item_added' | 'user_input_transcribed' | 'function_tools_executed' | 'overlapping_speech' | 'session_usage' | 'error';
|
|
14
|
+
/** @experimental */
|
|
15
|
+
export type RemoteSessionCallbacks = {
|
|
16
|
+
agent_state_changed: (ev: pb.AgentSessionEvent_AgentStateChanged) => void;
|
|
17
|
+
user_state_changed: (ev: pb.AgentSessionEvent_UserStateChanged) => void;
|
|
18
|
+
conversation_item_added: (ev: pb.AgentSessionEvent_ConversationItemAdded) => void;
|
|
19
|
+
user_input_transcribed: (ev: pb.AgentSessionEvent_UserInputTranscribed) => void;
|
|
20
|
+
function_tools_executed: (ev: pb.AgentSessionEvent_FunctionToolsExecuted) => void;
|
|
21
|
+
overlapping_speech: (ev: pb.AgentSessionEvent_OverlappingSpeech) => void;
|
|
22
|
+
session_usage: (ev: pb.AgentSessionEvent_SessionUsageUpdated) => void;
|
|
23
|
+
error: (ev: pb.AgentSessionEvent_Error) => void;
|
|
24
|
+
};
|
|
25
|
+
export declare abstract class SessionTransport {
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
abstract sendMessage(msg: pb.AgentSessionMessage): Promise<void>;
|
|
28
|
+
abstract close(): Promise<void>;
|
|
29
|
+
abstract [Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage>;
|
|
30
|
+
}
|
|
31
|
+
export declare class RoomSessionTransport extends SessionTransport {
|
|
32
|
+
private readonly room;
|
|
33
|
+
private handlerRegistered;
|
|
34
|
+
private closed;
|
|
35
|
+
private pendingMessages;
|
|
36
|
+
private waitingResolve;
|
|
37
|
+
private roomIO;
|
|
38
|
+
constructor(room: Room, roomIO: RoomIO);
|
|
39
|
+
private getRemoteIdentity;
|
|
40
|
+
start(): Promise<void>;
|
|
41
|
+
private onByteStream;
|
|
42
|
+
private readStream;
|
|
43
|
+
sendMessage(msg: pb.AgentSessionMessage): Promise<void>;
|
|
44
|
+
close(): Promise<void>;
|
|
45
|
+
private enqueue;
|
|
46
|
+
[Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage>;
|
|
47
|
+
}
|
|
48
|
+
export declare class SessionHost {
|
|
49
|
+
private readonly transport;
|
|
50
|
+
private session;
|
|
51
|
+
private started;
|
|
52
|
+
private eventsRegistered;
|
|
53
|
+
private recvTask;
|
|
54
|
+
private readonly tasks;
|
|
55
|
+
private textInputCb;
|
|
56
|
+
constructor(transport: SessionTransport);
|
|
57
|
+
registerSession(session: AgentSession): void;
|
|
58
|
+
registerTextInput(textInputCb: TextInputCallback): void;
|
|
59
|
+
start(): Promise<void>;
|
|
60
|
+
close(): Promise<void>;
|
|
61
|
+
private recvLoop;
|
|
62
|
+
private sendEvent;
|
|
63
|
+
private emitEvent;
|
|
64
|
+
private onAgentStateChanged;
|
|
65
|
+
private onUserStateChanged;
|
|
66
|
+
private onUserInputTranscribed;
|
|
67
|
+
private onConversationItemAdded;
|
|
68
|
+
private onFunctionToolsExecuted;
|
|
69
|
+
private onOverlappingSpeech;
|
|
70
|
+
private onMetricsCollected;
|
|
71
|
+
private onHostError;
|
|
72
|
+
private handleRequestSafe;
|
|
73
|
+
private handleRequest;
|
|
74
|
+
private handleGetChatHistory;
|
|
75
|
+
private handleGetAgentInfo;
|
|
76
|
+
private handleRunInput;
|
|
77
|
+
private handleGetSessionState;
|
|
78
|
+
private handleGetSessionUsage;
|
|
79
|
+
private sendResponse;
|
|
80
|
+
private trackTask;
|
|
81
|
+
}
|
|
82
|
+
declare const RemoteSession_base: new () => TypedEventEmitter<RemoteSessionCallbacks>;
|
|
83
|
+
/** @experimental */
|
|
84
|
+
export declare class RemoteSession extends RemoteSession_base {
|
|
85
|
+
private readonly transport;
|
|
86
|
+
private started;
|
|
87
|
+
private readonly tasks;
|
|
88
|
+
private readonly pendingRequests;
|
|
89
|
+
private recvTask;
|
|
90
|
+
private readonly _logger;
|
|
91
|
+
constructor(transport: SessionTransport);
|
|
92
|
+
static fromRoom(room: Room, roomIO: RoomIO): RemoteSession;
|
|
93
|
+
start(): Promise<void>;
|
|
94
|
+
close(): Promise<void>;
|
|
95
|
+
private recvLoop;
|
|
96
|
+
private dispatchEvent;
|
|
97
|
+
private dispatchResponse;
|
|
98
|
+
private sendRequest;
|
|
99
|
+
fetchSessionState(): Promise<pb.SessionResponse_GetSessionStateResponse>;
|
|
100
|
+
fetchChatHistory(): Promise<pb.SessionResponse_GetChatHistoryResponse>;
|
|
101
|
+
fetchAgentInfo(): Promise<pb.SessionResponse_GetAgentInfoResponse>;
|
|
102
|
+
sendMessage(text: string, responseTimeout?: number): Promise<pb.SessionResponse_RunInputResponse>;
|
|
103
|
+
fetchRtcStats(): Promise<pb.SessionResponse_GetRTCStatsResponse>;
|
|
104
|
+
fetchSessionUsage(): Promise<pb.SessionResponse_GetSessionUsageResponse>;
|
|
105
|
+
private trackTask;
|
|
106
|
+
}
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=remote_session.d.ts.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { AgentSession as pb } from '@livekit/protocol';
|
|
2
|
+
import type { Room, TextStreamInfo } from '@livekit/rtc-node';
|
|
3
|
+
import type { TypedEventEmitter } from '@livekit/typed-emitter';
|
|
4
|
+
import type { AgentSession } from './agent_session.js';
|
|
5
|
+
import type { RoomIO } from './room_io/room_io.js';
|
|
6
|
+
export interface TextInputEvent {
|
|
7
|
+
text: string;
|
|
8
|
+
info?: TextStreamInfo;
|
|
9
|
+
participantIdentity?: string;
|
|
10
|
+
}
|
|
11
|
+
export type TextInputCallback = (session: AgentSession, ev: TextInputEvent) => void | Promise<void>;
|
|
12
|
+
/** @experimental */
|
|
13
|
+
export type RemoteSessionEventTypes = 'agent_state_changed' | 'user_state_changed' | 'conversation_item_added' | 'user_input_transcribed' | 'function_tools_executed' | 'overlapping_speech' | 'session_usage' | 'error';
|
|
14
|
+
/** @experimental */
|
|
15
|
+
export type RemoteSessionCallbacks = {
|
|
16
|
+
agent_state_changed: (ev: pb.AgentSessionEvent_AgentStateChanged) => void;
|
|
17
|
+
user_state_changed: (ev: pb.AgentSessionEvent_UserStateChanged) => void;
|
|
18
|
+
conversation_item_added: (ev: pb.AgentSessionEvent_ConversationItemAdded) => void;
|
|
19
|
+
user_input_transcribed: (ev: pb.AgentSessionEvent_UserInputTranscribed) => void;
|
|
20
|
+
function_tools_executed: (ev: pb.AgentSessionEvent_FunctionToolsExecuted) => void;
|
|
21
|
+
overlapping_speech: (ev: pb.AgentSessionEvent_OverlappingSpeech) => void;
|
|
22
|
+
session_usage: (ev: pb.AgentSessionEvent_SessionUsageUpdated) => void;
|
|
23
|
+
error: (ev: pb.AgentSessionEvent_Error) => void;
|
|
24
|
+
};
|
|
25
|
+
export declare abstract class SessionTransport {
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
abstract sendMessage(msg: pb.AgentSessionMessage): Promise<void>;
|
|
28
|
+
abstract close(): Promise<void>;
|
|
29
|
+
abstract [Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage>;
|
|
30
|
+
}
|
|
31
|
+
export declare class RoomSessionTransport extends SessionTransport {
|
|
32
|
+
private readonly room;
|
|
33
|
+
private handlerRegistered;
|
|
34
|
+
private closed;
|
|
35
|
+
private pendingMessages;
|
|
36
|
+
private waitingResolve;
|
|
37
|
+
private roomIO;
|
|
38
|
+
constructor(room: Room, roomIO: RoomIO);
|
|
39
|
+
private getRemoteIdentity;
|
|
40
|
+
start(): Promise<void>;
|
|
41
|
+
private onByteStream;
|
|
42
|
+
private readStream;
|
|
43
|
+
sendMessage(msg: pb.AgentSessionMessage): Promise<void>;
|
|
44
|
+
close(): Promise<void>;
|
|
45
|
+
private enqueue;
|
|
46
|
+
[Symbol.asyncIterator](): AsyncIterator<pb.AgentSessionMessage>;
|
|
47
|
+
}
|
|
48
|
+
export declare class SessionHost {
|
|
49
|
+
private readonly transport;
|
|
50
|
+
private session;
|
|
51
|
+
private started;
|
|
52
|
+
private eventsRegistered;
|
|
53
|
+
private recvTask;
|
|
54
|
+
private readonly tasks;
|
|
55
|
+
private textInputCb;
|
|
56
|
+
constructor(transport: SessionTransport);
|
|
57
|
+
registerSession(session: AgentSession): void;
|
|
58
|
+
registerTextInput(textInputCb: TextInputCallback): void;
|
|
59
|
+
start(): Promise<void>;
|
|
60
|
+
close(): Promise<void>;
|
|
61
|
+
private recvLoop;
|
|
62
|
+
private sendEvent;
|
|
63
|
+
private emitEvent;
|
|
64
|
+
private onAgentStateChanged;
|
|
65
|
+
private onUserStateChanged;
|
|
66
|
+
private onUserInputTranscribed;
|
|
67
|
+
private onConversationItemAdded;
|
|
68
|
+
private onFunctionToolsExecuted;
|
|
69
|
+
private onOverlappingSpeech;
|
|
70
|
+
private onMetricsCollected;
|
|
71
|
+
private onHostError;
|
|
72
|
+
private handleRequestSafe;
|
|
73
|
+
private handleRequest;
|
|
74
|
+
private handleGetChatHistory;
|
|
75
|
+
private handleGetAgentInfo;
|
|
76
|
+
private handleRunInput;
|
|
77
|
+
private handleGetSessionState;
|
|
78
|
+
private handleGetSessionUsage;
|
|
79
|
+
private sendResponse;
|
|
80
|
+
private trackTask;
|
|
81
|
+
}
|
|
82
|
+
declare const RemoteSession_base: new () => TypedEventEmitter<RemoteSessionCallbacks>;
|
|
83
|
+
/** @experimental */
|
|
84
|
+
export declare class RemoteSession extends RemoteSession_base {
|
|
85
|
+
private readonly transport;
|
|
86
|
+
private started;
|
|
87
|
+
private readonly tasks;
|
|
88
|
+
private readonly pendingRequests;
|
|
89
|
+
private recvTask;
|
|
90
|
+
private readonly _logger;
|
|
91
|
+
constructor(transport: SessionTransport);
|
|
92
|
+
static fromRoom(room: Room, roomIO: RoomIO): RemoteSession;
|
|
93
|
+
start(): Promise<void>;
|
|
94
|
+
close(): Promise<void>;
|
|
95
|
+
private recvLoop;
|
|
96
|
+
private dispatchEvent;
|
|
97
|
+
private dispatchResponse;
|
|
98
|
+
private sendRequest;
|
|
99
|
+
fetchSessionState(): Promise<pb.SessionResponse_GetSessionStateResponse>;
|
|
100
|
+
fetchChatHistory(): Promise<pb.SessionResponse_GetChatHistoryResponse>;
|
|
101
|
+
fetchAgentInfo(): Promise<pb.SessionResponse_GetAgentInfoResponse>;
|
|
102
|
+
sendMessage(text: string, responseTimeout?: number): Promise<pb.SessionResponse_RunInputResponse>;
|
|
103
|
+
fetchRtcStats(): Promise<pb.SessionResponse_GetRTCStatsResponse>;
|
|
104
|
+
fetchSessionUsage(): Promise<pb.SessionResponse_GetSessionUsageResponse>;
|
|
105
|
+
private trackTask;
|
|
106
|
+
}
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=remote_session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote_session.d.ts","sourceRoot":"","sources":["../../src/voice/remote_session.ts"],"names":[],"mappings":"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"}
|