@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.
Files changed (292) hide show
  1. package/dist/cli.cjs +2 -0
  2. package/dist/cli.cjs.map +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +2 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/constants.cjs +3 -0
  7. package/dist/constants.cjs.map +1 -1
  8. package/dist/constants.d.cts +1 -0
  9. package/dist/constants.d.ts +1 -0
  10. package/dist/constants.d.ts.map +1 -1
  11. package/dist/constants.js +2 -0
  12. package/dist/constants.js.map +1 -1
  13. package/dist/cpu.cjs +189 -0
  14. package/dist/cpu.cjs.map +1 -0
  15. package/dist/cpu.d.cts +24 -0
  16. package/dist/cpu.d.ts +24 -0
  17. package/dist/cpu.d.ts.map +1 -0
  18. package/dist/cpu.js +152 -0
  19. package/dist/cpu.js.map +1 -0
  20. package/dist/cpu.test.cjs +227 -0
  21. package/dist/cpu.test.cjs.map +1 -0
  22. package/dist/cpu.test.js +204 -0
  23. package/dist/cpu.test.js.map +1 -0
  24. package/dist/index.cjs +12 -10
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +13 -13
  27. package/dist/index.d.ts +13 -13
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -10
  30. package/dist/index.js.map +1 -1
  31. package/dist/inference/interruption/defaults.cjs +1 -1
  32. package/dist/inference/interruption/defaults.cjs.map +1 -1
  33. package/dist/inference/interruption/defaults.d.cts +1 -1
  34. package/dist/inference/interruption/defaults.d.ts +1 -1
  35. package/dist/inference/interruption/defaults.d.ts.map +1 -1
  36. package/dist/inference/interruption/defaults.js +1 -1
  37. package/dist/inference/interruption/defaults.js.map +1 -1
  38. package/dist/inference/interruption/http_transport.cjs +44 -28
  39. package/dist/inference/interruption/http_transport.cjs.map +1 -1
  40. package/dist/inference/interruption/http_transport.d.ts.map +1 -1
  41. package/dist/inference/interruption/http_transport.js +45 -29
  42. package/dist/inference/interruption/http_transport.js.map +1 -1
  43. package/dist/inference/interruption/interruption_detector.cjs +22 -5
  44. package/dist/inference/interruption/interruption_detector.cjs.map +1 -1
  45. package/dist/inference/interruption/interruption_detector.d.cts +2 -2
  46. package/dist/inference/interruption/interruption_detector.d.ts +2 -2
  47. package/dist/inference/interruption/interruption_detector.d.ts.map +1 -1
  48. package/dist/inference/interruption/interruption_detector.js +22 -5
  49. package/dist/inference/interruption/interruption_detector.js.map +1 -1
  50. package/dist/inference/interruption/interruption_stream.cjs +4 -4
  51. package/dist/inference/interruption/interruption_stream.cjs.map +1 -1
  52. package/dist/inference/interruption/interruption_stream.js +4 -4
  53. package/dist/inference/interruption/interruption_stream.js.map +1 -1
  54. package/dist/inference/interruption/types.cjs.map +1 -1
  55. package/dist/inference/interruption/types.d.cts +2 -2
  56. package/dist/inference/interruption/types.d.ts +2 -2
  57. package/dist/inference/interruption/types.d.ts.map +1 -1
  58. package/dist/inference/interruption/ws_transport.cjs +60 -47
  59. package/dist/inference/interruption/ws_transport.cjs.map +1 -1
  60. package/dist/inference/interruption/ws_transport.d.ts.map +1 -1
  61. package/dist/inference/interruption/ws_transport.js +60 -47
  62. package/dist/inference/interruption/ws_transport.js.map +1 -1
  63. package/dist/inference/llm.cjs.map +1 -1
  64. package/dist/inference/llm.d.cts +1 -1
  65. package/dist/inference/llm.d.ts +1 -1
  66. package/dist/inference/llm.d.ts.map +1 -1
  67. package/dist/inference/llm.js.map +1 -1
  68. package/dist/inference/stt.cjs +20 -12
  69. package/dist/inference/stt.cjs.map +1 -1
  70. package/dist/inference/stt.d.cts +3 -2
  71. package/dist/inference/stt.d.ts +3 -2
  72. package/dist/inference/stt.d.ts.map +1 -1
  73. package/dist/inference/stt.js +20 -12
  74. package/dist/inference/stt.js.map +1 -1
  75. package/dist/inference/stt.test.cjs +14 -0
  76. package/dist/inference/stt.test.cjs.map +1 -1
  77. package/dist/inference/stt.test.js +14 -0
  78. package/dist/inference/stt.test.js.map +1 -1
  79. package/dist/inference/tts.cjs +13 -4
  80. package/dist/inference/tts.cjs.map +1 -1
  81. package/dist/inference/tts.d.cts +8 -1
  82. package/dist/inference/tts.d.ts +8 -1
  83. package/dist/inference/tts.d.ts.map +1 -1
  84. package/dist/inference/tts.js +13 -4
  85. package/dist/inference/tts.js.map +1 -1
  86. package/dist/inference/tts.test.cjs +10 -0
  87. package/dist/inference/tts.test.cjs.map +1 -1
  88. package/dist/inference/tts.test.js +10 -0
  89. package/dist/inference/tts.test.js.map +1 -1
  90. package/dist/ipc/job_proc_lazy_main.cjs +41 -23
  91. package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
  92. package/dist/ipc/job_proc_lazy_main.js +41 -23
  93. package/dist/ipc/job_proc_lazy_main.js.map +1 -1
  94. package/dist/job.cjs +1 -1
  95. package/dist/job.cjs.map +1 -1
  96. package/dist/job.js +1 -1
  97. package/dist/job.js.map +1 -1
  98. package/dist/language.cjs +394 -0
  99. package/dist/language.cjs.map +1 -0
  100. package/dist/language.d.cts +15 -0
  101. package/dist/language.d.ts +15 -0
  102. package/dist/language.d.ts.map +1 -0
  103. package/dist/language.js +363 -0
  104. package/dist/language.js.map +1 -0
  105. package/dist/language.test.cjs +43 -0
  106. package/dist/language.test.cjs.map +1 -0
  107. package/dist/language.test.js +49 -0
  108. package/dist/language.test.js.map +1 -0
  109. package/dist/llm/index.cjs +2 -0
  110. package/dist/llm/index.cjs.map +1 -1
  111. package/dist/llm/index.d.cts +1 -1
  112. package/dist/llm/index.d.ts +1 -1
  113. package/dist/llm/index.d.ts.map +1 -1
  114. package/dist/llm/index.js +2 -0
  115. package/dist/llm/index.js.map +1 -1
  116. package/dist/stream/deferred_stream.cjs +6 -2
  117. package/dist/stream/deferred_stream.cjs.map +1 -1
  118. package/dist/stream/deferred_stream.d.ts.map +1 -1
  119. package/dist/stream/deferred_stream.js +6 -2
  120. package/dist/stream/deferred_stream.js.map +1 -1
  121. package/dist/stt/stt.cjs.map +1 -1
  122. package/dist/stt/stt.d.cts +2 -1
  123. package/dist/stt/stt.d.ts +2 -1
  124. package/dist/stt/stt.d.ts.map +1 -1
  125. package/dist/stt/stt.js.map +1 -1
  126. package/dist/utils.cjs +15 -0
  127. package/dist/utils.cjs.map +1 -1
  128. package/dist/utils.d.cts +8 -0
  129. package/dist/utils.d.ts +8 -0
  130. package/dist/utils.d.ts.map +1 -1
  131. package/dist/utils.js +13 -0
  132. package/dist/utils.js.map +1 -1
  133. package/dist/version.cjs +1 -1
  134. package/dist/version.js +1 -1
  135. package/dist/voice/agent.cjs +14 -17
  136. package/dist/voice/agent.cjs.map +1 -1
  137. package/dist/voice/agent.d.cts +10 -11
  138. package/dist/voice/agent.d.ts +10 -11
  139. package/dist/voice/agent.d.ts.map +1 -1
  140. package/dist/voice/agent.js +15 -18
  141. package/dist/voice/agent.js.map +1 -1
  142. package/dist/voice/agent.test.cjs +194 -0
  143. package/dist/voice/agent.test.cjs.map +1 -1
  144. package/dist/voice/agent.test.js +195 -1
  145. package/dist/voice/agent.test.js.map +1 -1
  146. package/dist/voice/agent_activity.cjs +116 -39
  147. package/dist/voice/agent_activity.cjs.map +1 -1
  148. package/dist/voice/agent_activity.d.cts +2 -0
  149. package/dist/voice/agent_activity.d.ts +2 -0
  150. package/dist/voice/agent_activity.d.ts.map +1 -1
  151. package/dist/voice/agent_activity.js +117 -40
  152. package/dist/voice/agent_activity.js.map +1 -1
  153. package/dist/voice/agent_activity.test.cjs +135 -0
  154. package/dist/voice/agent_activity.test.cjs.map +1 -0
  155. package/dist/voice/agent_activity.test.js +134 -0
  156. package/dist/voice/agent_activity.test.js.map +1 -0
  157. package/dist/voice/agent_session.cjs +38 -38
  158. package/dist/voice/agent_session.cjs.map +1 -1
  159. package/dist/voice/agent_session.d.cts +65 -56
  160. package/dist/voice/agent_session.d.ts +65 -56
  161. package/dist/voice/agent_session.d.ts.map +1 -1
  162. package/dist/voice/agent_session.js +37 -37
  163. package/dist/voice/agent_session.js.map +1 -1
  164. package/dist/voice/audio_recognition.cjs +106 -52
  165. package/dist/voice/audio_recognition.cjs.map +1 -1
  166. package/dist/voice/audio_recognition.d.cts +4 -2
  167. package/dist/voice/audio_recognition.d.ts +4 -2
  168. package/dist/voice/audio_recognition.d.ts.map +1 -1
  169. package/dist/voice/audio_recognition.js +106 -52
  170. package/dist/voice/audio_recognition.js.map +1 -1
  171. package/dist/voice/audio_recognition_span.test.cjs +84 -22
  172. package/dist/voice/audio_recognition_span.test.cjs.map +1 -1
  173. package/dist/voice/audio_recognition_span.test.js +90 -23
  174. package/dist/voice/audio_recognition_span.test.js.map +1 -1
  175. package/dist/voice/events.cjs +1 -1
  176. package/dist/voice/events.cjs.map +1 -1
  177. package/dist/voice/events.d.cts +4 -3
  178. package/dist/voice/events.d.ts +4 -3
  179. package/dist/voice/events.d.ts.map +1 -1
  180. package/dist/voice/events.js +1 -1
  181. package/dist/voice/events.js.map +1 -1
  182. package/dist/voice/index.cjs +9 -1
  183. package/dist/voice/index.cjs.map +1 -1
  184. package/dist/voice/index.d.cts +1 -1
  185. package/dist/voice/index.d.ts +1 -1
  186. package/dist/voice/index.d.ts.map +1 -1
  187. package/dist/voice/index.js +10 -1
  188. package/dist/voice/index.js.map +1 -1
  189. package/dist/voice/remote_session.cjs +922 -0
  190. package/dist/voice/remote_session.cjs.map +1 -0
  191. package/dist/voice/remote_session.d.cts +108 -0
  192. package/dist/voice/remote_session.d.ts +108 -0
  193. package/dist/voice/remote_session.d.ts.map +1 -0
  194. package/dist/voice/remote_session.js +887 -0
  195. package/dist/voice/remote_session.js.map +1 -0
  196. package/dist/voice/report.cjs +11 -10
  197. package/dist/voice/report.cjs.map +1 -1
  198. package/dist/voice/report.d.cts +5 -3
  199. package/dist/voice/report.d.ts +5 -3
  200. package/dist/voice/report.d.ts.map +1 -1
  201. package/dist/voice/report.js +11 -10
  202. package/dist/voice/report.js.map +1 -1
  203. package/dist/voice/report.test.cjs +15 -0
  204. package/dist/voice/report.test.cjs.map +1 -1
  205. package/dist/voice/report.test.js +15 -0
  206. package/dist/voice/report.test.js.map +1 -1
  207. package/dist/voice/room_io/room_io.cjs +39 -0
  208. package/dist/voice/room_io/room_io.cjs.map +1 -1
  209. package/dist/voice/room_io/room_io.d.cts +3 -1
  210. package/dist/voice/room_io/room_io.d.ts +3 -1
  211. package/dist/voice/room_io/room_io.d.ts.map +1 -1
  212. package/dist/voice/room_io/room_io.js +40 -1
  213. package/dist/voice/room_io/room_io.js.map +1 -1
  214. package/dist/voice/turn_config/interruption.cjs.map +1 -1
  215. package/dist/voice/turn_config/interruption.d.cts +1 -1
  216. package/dist/voice/turn_config/interruption.d.ts +1 -1
  217. package/dist/voice/turn_config/interruption.d.ts.map +1 -1
  218. package/dist/voice/turn_config/interruption.js.map +1 -1
  219. package/dist/voice/turn_config/utils.cjs +95 -35
  220. package/dist/voice/turn_config/utils.cjs.map +1 -1
  221. package/dist/voice/turn_config/utils.d.cts +17 -5
  222. package/dist/voice/turn_config/utils.d.ts +17 -5
  223. package/dist/voice/turn_config/utils.d.ts.map +1 -1
  224. package/dist/voice/turn_config/utils.js +93 -35
  225. package/dist/voice/turn_config/utils.js.map +1 -1
  226. package/dist/voice/turn_config/utils.test.cjs +83 -41
  227. package/dist/voice/turn_config/utils.test.cjs.map +1 -1
  228. package/dist/voice/turn_config/utils.test.js +84 -42
  229. package/dist/voice/turn_config/utils.test.js.map +1 -1
  230. package/dist/worker.cjs +6 -29
  231. package/dist/worker.cjs.map +1 -1
  232. package/dist/worker.d.ts.map +1 -1
  233. package/dist/worker.js +6 -19
  234. package/dist/worker.js.map +1 -1
  235. package/package.json +3 -2
  236. package/src/cli.ts +2 -0
  237. package/src/constants.ts +1 -0
  238. package/src/cpu.test.ts +239 -0
  239. package/src/cpu.ts +173 -0
  240. package/src/index.ts +13 -15
  241. package/src/inference/interruption/defaults.ts +1 -1
  242. package/src/inference/interruption/http_transport.ts +49 -30
  243. package/src/inference/interruption/interruption_detector.ts +22 -6
  244. package/src/inference/interruption/interruption_stream.ts +4 -4
  245. package/src/inference/interruption/types.ts +2 -2
  246. package/src/inference/interruption/ws_transport.ts +63 -59
  247. package/src/inference/llm.ts +3 -1
  248. package/src/inference/stt.test.ts +17 -0
  249. package/src/inference/stt.ts +22 -14
  250. package/src/inference/tts.test.ts +12 -0
  251. package/src/inference/tts.ts +22 -6
  252. package/src/ipc/job_proc_lazy_main.ts +44 -24
  253. package/src/job.ts +1 -1
  254. package/src/language.test.ts +62 -0
  255. package/src/language.ts +380 -0
  256. package/src/llm/index.ts +2 -0
  257. package/src/stream/deferred_stream.ts +5 -1
  258. package/src/stt/stt.ts +2 -1
  259. package/src/utils.ts +20 -0
  260. package/src/voice/agent.test.ts +208 -1
  261. package/src/voice/agent.ts +21 -22
  262. package/src/voice/agent_activity.test.ts +194 -0
  263. package/src/voice/agent_activity.ts +161 -43
  264. package/src/voice/agent_session.ts +103 -92
  265. package/src/voice/audio_recognition.ts +124 -61
  266. package/src/voice/audio_recognition_span.test.ts +115 -35
  267. package/src/voice/events.ts +4 -3
  268. package/src/voice/index.ts +10 -1
  269. package/src/voice/remote_session.ts +1083 -0
  270. package/src/voice/report.test.ts +22 -3
  271. package/src/voice/report.ts +31 -14
  272. package/src/voice/room_io/room_io.ts +52 -2
  273. package/src/voice/turn_config/interruption.ts +1 -1
  274. package/src/voice/turn_config/utils.test.ts +91 -43
  275. package/src/voice/turn_config/utils.ts +120 -56
  276. package/src/worker.ts +34 -50
  277. package/dist/voice/client_events.cjs +0 -554
  278. package/dist/voice/client_events.cjs.map +0 -1
  279. package/dist/voice/client_events.d.cts +0 -195
  280. package/dist/voice/client_events.d.ts +0 -195
  281. package/dist/voice/client_events.d.ts.map +0 -1
  282. package/dist/voice/client_events.js +0 -548
  283. package/dist/voice/client_events.js.map +0 -1
  284. package/dist/voice/wire_format.cjs +0 -798
  285. package/dist/voice/wire_format.cjs.map +0 -1
  286. package/dist/voice/wire_format.d.cts +0 -5503
  287. package/dist/voice/wire_format.d.ts +0 -5503
  288. package/dist/voice/wire_format.d.ts.map +0 -1
  289. package/dist/voice/wire_format.js +0 -728
  290. package/dist/voice/wire_format.js.map +0 -1
  291. package/src/voice/client_events.ts +0 -838
  292. package/src/voice/wire_format.ts +0 -827
@@ -11,7 +11,7 @@ import type { FunctionCall, FunctionCallOutput } from '../llm/chat_context.js';
11
11
  import { ChatContext, ChatMessage } from '../llm/chat_context.js';
12
12
  import type { LLM, RealtimeModel, RealtimeModelError, ToolChoice } from '../llm/index.js';
13
13
  import type { LLMError } from '../llm/llm.js';
14
- import { type ModelUsage } from '../metrics/model_usage.js';
14
+ import { type ModelUsage, ModelUsageCollector } from '../metrics/model_usage.js';
15
15
  import type { STT } from '../stt/index.js';
16
16
  import type { STTError } from '../stt/stt.js';
17
17
  import type { TTS, TTSError } from '../tts/tts.js';
@@ -32,60 +32,38 @@ export interface AgentSessionUsage {
32
32
  /** List of usage summaries, one per model/provider combination. */
33
33
  modelUsage: Array<Partial<ModelUsage>>;
34
34
  }
35
- export interface SessionOptions {
35
+ export interface InternalSessionOptions<UserData> extends AgentSessionOptions<UserData> {
36
+ turnHandling: InternalTurnHandlingOptions;
37
+ useTtsAlignedTranscript: boolean;
36
38
  maxToolSteps: number;
37
- /**
38
- * Whether to speculatively begin LLM and TTS requests before an end-of-turn is detected.
39
- * When `true`, the agent sends inference calls as soon as a user transcript is received rather
40
- * than waiting for a definitive turn boundary. This can reduce response latency by overlapping
41
- * model inference with user audio, but may incur extra compute if the user interrupts or
42
- * revises mid-utterance.
43
- * @defaultValue false
44
- */
45
- preemptiveGeneration: boolean;
46
- /**
47
- * If set, set the user state as "away" after this amount of time after user and agent are
48
- * silent. Set to `null` to disable.
49
- * @defaultValue 15.0
50
- */
51
39
  userAwayTimeout: number | null;
52
- /**
53
- * Duration in milliseconds for AEC (Acoustic Echo Cancellation) warmup, during which
54
- * interruptions from audio activity are suppressed. Set to `null` to disable.
55
- * @defaultValue 3000
56
- */
57
- aecWarmupDuration: number | null;
58
- /**
59
- * Configuration for turn handling.
60
- */
61
- turnHandling: Partial<TurnHandlingOptions>;
62
- useTtsAlignedTranscript: boolean;
63
- /** @deprecated Use {@link SessionOptions.turnHandling}.interruption.mode instead. */
64
- allowInterruptions?: boolean;
65
- /** @deprecated Use {@link SessionOptions.turnHandling}.interruption.discardAudioIfUninterruptible instead. */
66
- discardAudioIfUninterruptible?: boolean;
67
- /** @deprecated Use {@link SessionOptions.turnHandling}.interruption.minDuration instead. */
68
- minInterruptionDuration?: number;
69
- /** @deprecated Use {@link SessionOptions.turnHandling}.interruption.minWords instead. */
70
- minInterruptionWords?: number;
71
- /** @deprecated Use {@link SessionOptions.turnHandling}.endpointing.minDelay instead. */
72
- minEndpointingDelay?: number;
73
- /** @deprecated Use {@link SessionOptions.turnHandling}.endpointing.maxDelay instead. */
74
- maxEndpointingDelay?: number;
75
- }
76
- export interface InternalSessionOptions extends SessionOptions {
77
- turnHandling: InternalTurnHandlingOptions;
78
40
  }
79
- export declare const defaultSessionOptions: {
41
+ export declare const defaultAgentSessionOptions: {
80
42
  readonly maxToolSteps: 3;
81
- readonly preemptiveGeneration: false;
43
+ readonly preemptiveGeneration: true;
82
44
  readonly userAwayTimeout: 15;
83
45
  readonly aecWarmupDuration: 3000;
84
46
  readonly turnHandling: {};
85
47
  readonly useTtsAlignedTranscript: true;
86
48
  };
87
- /** @deprecated {@link VoiceOptions} has been renamed to {@link SessionOptions} */
88
- export type VoiceOptions = SessionOptions;
49
+ /** @deprecated {@link VoiceOptions} has been flattened onto to {@link AgentSessionOptions} */
50
+ export type VoiceOptions = {
51
+ maxToolSteps: number;
52
+ preemptiveGeneration: boolean;
53
+ userAwayTimeout?: number | null;
54
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.interruption.mode instead. */
55
+ allowInterruptions?: boolean;
56
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.interruption.discardAudioIfUninterruptible instead. */
57
+ discardAudioIfUninterruptible?: boolean;
58
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.interruption.minDuration instead. */
59
+ minInterruptionDuration?: number;
60
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.interruption.minWords instead. */
61
+ minInterruptionWords?: number;
62
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.endpointing.minDelay instead. */
63
+ minEndpointingDelay?: number;
64
+ /** @deprecated Use {@link AgentSessionOptions.turnHandling}.endpointing.maxDelay instead. */
65
+ maxEndpointingDelay?: number;
66
+ };
89
67
  export type TurnDetectionMode = 'stt' | 'vad' | 'realtime_llm' | 'manual' | _TurnDetector;
90
68
  export type AgentSessionCallbacks = {
91
69
  [AgentSessionEventTypes.UserInputTranscribed]: (ev: UserInputTranscribedEvent) => void;
@@ -97,7 +75,7 @@ export type AgentSessionCallbacks = {
97
75
  [AgentSessionEventTypes.SpeechCreated]: (ev: SpeechCreatedEvent) => void;
98
76
  [AgentSessionEventTypes.Error]: (ev: ErrorEvent) => void;
99
77
  [AgentSessionEventTypes.Close]: (ev: CloseEvent) => void;
100
- [AgentSessionEventTypes.UserOverlappingSpeech]: (ev: OverlappingSpeechEvent) => void;
78
+ [AgentSessionEventTypes.OverlappingSpeech]: (ev: OverlappingSpeechEvent) => void;
101
79
  };
102
80
  export type AgentSessionOptions<UserData = UnknownUserData> = {
103
81
  stt?: STT | STTModelString;
@@ -105,12 +83,38 @@ export type AgentSessionOptions<UserData = UnknownUserData> = {
105
83
  llm?: LLM | RealtimeModel | LLMModels;
106
84
  tts?: TTS | TTSModelString;
107
85
  userData?: UserData;
108
- options?: Partial<SessionOptions>;
109
86
  connOptions?: SessionConnectOptions;
110
- /** @deprecated use {@link AgentSessionOptions.options}.turnHandling.turnDetection instead */
87
+ /** @deprecated use turnHandling.turnDetection instead */
111
88
  turnDetection?: TurnDetectionMode;
112
- /** @deprecated use {@link AgentSessionOptions.options} instead */
89
+ /** @deprecated use top-level SessionOptions fields instead */
113
90
  voiceOptions?: Partial<VoiceOptions>;
91
+ maxToolSteps?: number;
92
+ /**
93
+ * Whether to speculatively begin LLM and TTS requests before an end-of-turn is detected.
94
+ * When `true`, the agent sends inference calls as soon as a user transcript is received rather
95
+ * than waiting for a definitive turn boundary. This can reduce response latency by overlapping
96
+ * model inference with user audio, but may incur extra compute if the user interrupts or
97
+ * revises mid-utterance.
98
+ * @defaultValue true
99
+ */
100
+ preemptiveGeneration?: boolean;
101
+ /**
102
+ * If set, set the user state as "away" after this amount of time after user and agent are
103
+ * silent. Set to `null` to disable.
104
+ * @defaultValue 15.0
105
+ */
106
+ userAwayTimeout?: number | null;
107
+ /**
108
+ * Duration in milliseconds for AEC (Acoustic Echo Cancellation) warmup, during which
109
+ * interruptions from audio activity are suppressed. Set to `null` to disable.
110
+ * @defaultValue 3000
111
+ */
112
+ aecWarmupDuration?: number | null;
113
+ /**
114
+ * Configuration for turn handling.
115
+ */
116
+ turnHandling?: Partial<TurnHandlingOptions>;
117
+ useTtsAlignedTranscript?: boolean;
114
118
  };
115
119
  type ActivityTransitionOptions = {
116
120
  previousActivity?: 'close' | 'pause';
@@ -125,14 +129,16 @@ export declare class AgentSession<UserData = UnknownUserData> extends AgentSessi
125
129
  llm?: LLM | RealtimeModel;
126
130
  tts?: TTS;
127
131
  turnDetection?: TurnDetectionMode;
128
- readonly options: InternalSessionOptions;
132
+ /** @deprecated use {@link sessionOptions } instead */
133
+ readonly options: VoiceOptions;
134
+ readonly sessionOptions: InternalSessionOptions<UserData>;
129
135
  private readonly activityLock;
130
136
  private agent?;
131
137
  private activity?;
132
138
  private nextActivity?;
133
139
  private updateActivityTask?;
134
140
  private started;
135
- private clientEventsHandler?;
141
+ private sessionHost?;
136
142
  private _chatCtx;
137
143
  private _userData;
138
144
  private _userState;
@@ -145,11 +151,11 @@ export declare class AgentSession<UserData = UnknownUserData> extends AgentSessi
145
151
  private _connOptions;
146
152
  private llmErrorCounts;
147
153
  private ttsErrorCounts;
148
- private interruptionDetectionErrorCounts;
149
154
  private sessionSpan?;
150
155
  private agentSpeakingSpan?;
151
156
  private _interruptionDetection?;
152
- private _usageCollector;
157
+ /** @internal */
158
+ _usageCollector: ModelUsageCollector;
153
159
  /** @internal */
154
160
  _roomIO?: RoomIO;
155
161
  /** @internal */
@@ -177,7 +183,7 @@ export declare class AgentSession<UserData = UnknownUserData> extends AgentSessi
177
183
  get history(): ChatContext;
178
184
  /** Connection options for STT, LLM, and TTS. */
179
185
  get connOptions(): ResolvedSessionConnectOptions;
180
- get interruptionDetection(): false | "vad" | "adaptive" | undefined;
186
+ get interruptionDetection(): "vad" | "adaptive" | undefined;
181
187
  /**
182
188
  * Returns usage summaries for this session, one per model/provider combination.
183
189
  */
@@ -258,7 +264,10 @@ export declare class AgentSession<UserData = UnknownUserData> extends AgentSessi
258
264
  otelContext?: Context;
259
265
  }): void;
260
266
  /** @internal */
261
- _updateUserState(state: UserState, lastSpeakingTime?: number): void;
267
+ _updateUserState(state: UserState, options?: {
268
+ lastSpeakingTime?: number;
269
+ otelContext?: Context;
270
+ }): void;
262
271
  private onAudioInputChanged;
263
272
  private onAudioOutputChanged;
264
273
  private onTextOutputChanged;
@@ -1 +1 @@
1
- {"version":3,"file":"agent_session.d.ts","sourceRoot":"","sources":["../../src/voice/agent_session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent_session.d.ts","sourceRoot":"","sources":["../../src/voice/agent_session.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,6 @@ import {
17
17
  } from "../types.js";
18
18
  import { Task } from "../utils.js";
19
19
  import { AgentActivity } from "./agent_activity.js";
20
- import { ClientEventsHandler } from "./client_events.js";
21
20
  import {
22
21
  AgentSessionEventTypes,
23
22
  CloseReason,
@@ -28,6 +27,7 @@ import {
28
27
  } from "./events.js";
29
28
  import { AgentInput, AgentOutput } from "./io.js";
30
29
  import { RecorderIO } from "./recorder_io/index.js";
30
+ import { RoomSessionTransport, SessionHost } from "./remote_session.js";
31
31
  import {
32
32
  DEFAULT_TEXT_INPUT_CALLBACK,
33
33
  RoomIO
@@ -35,9 +35,9 @@ import {
35
35
  import { RunResult } from "./testing/run_result.js";
36
36
  import { migrateLegacyOptions } from "./turn_config/utils.js";
37
37
  import { setParticipantSpanAttributes } from "./utils.js";
38
- const defaultSessionOptions = {
38
+ const defaultAgentSessionOptions = {
39
39
  maxToolSteps: 3,
40
- preemptiveGeneration: false,
40
+ preemptiveGeneration: true,
41
41
  userAwayTimeout: 15,
42
42
  aecWarmupDuration: 3e3,
43
43
  turnHandling: {},
@@ -49,14 +49,16 @@ class AgentSession extends EventEmitter {
49
49
  llm;
50
50
  tts;
51
51
  turnDetection;
52
+ /** @deprecated use {@link sessionOptions } instead */
52
53
  options;
54
+ sessionOptions;
53
55
  activityLock = new Mutex();
54
56
  agent;
55
57
  activity;
56
58
  nextActivity;
57
59
  updateActivityTask;
58
60
  started = false;
59
- clientEventsHandler;
61
+ sessionHost;
60
62
  _chatCtx;
61
63
  _userData;
62
64
  _userState = "listening";
@@ -71,10 +73,10 @@ class AgentSession extends EventEmitter {
71
73
  // Unrecoverable error counts, reset after agent speaking
72
74
  llmErrorCounts = 0;
73
75
  ttsErrorCounts = 0;
74
- interruptionDetectionErrorCounts = 0;
75
76
  sessionSpan;
76
77
  agentSpeakingSpan;
77
78
  _interruptionDetection;
79
+ /** @internal */
78
80
  _usageCollector = new ModelUsageCollector();
79
81
  /** @internal */
80
82
  _roomIO;
@@ -96,10 +98,10 @@ class AgentSession extends EventEmitter {
96
98
  _userSpeakingSpan;
97
99
  logger = log();
98
100
  constructor(options) {
99
- var _a, _b, _c;
101
+ var _a;
100
102
  super();
101
- const opts = migrateLegacyOptions(options);
102
- const { vad, stt, llm, tts, userData, connOptions, options: sessionOptions } = opts;
103
+ const { agentSessionOptions: opts, legacyVoiceOptions } = migrateLegacyOptions(options);
104
+ const { vad, stt, llm, tts, userData, connOptions, ...resolvedSessionOptions } = opts;
103
105
  this._connOptions = {
104
106
  sttConnOptions: { ...DEFAULT_API_CONNECT_OPTIONS, ...connOptions == null ? void 0 : connOptions.sttConnOptions },
105
107
  llmConnOptions: { ...DEFAULT_API_CONNECT_OPTIONS, ...connOptions == null ? void 0 : connOptions.llmConnOptions },
@@ -122,23 +124,21 @@ class AgentSession extends EventEmitter {
122
124
  } else {
123
125
  this.tts = tts;
124
126
  }
125
- this.turnDetection = (_a = sessionOptions == null ? void 0 : sessionOptions.turnHandling) == null ? void 0 : _a.turnDetection;
126
- this._interruptionDetection = (_c = (_b = sessionOptions == null ? void 0 : sessionOptions.turnHandling) == null ? void 0 : _b.interruption) == null ? void 0 : _c.mode;
127
+ this.turnDetection = resolvedSessionOptions.turnHandling.turnDetection;
128
+ this._interruptionDetection = (_a = resolvedSessionOptions.turnHandling.interruption) == null ? void 0 : _a.mode;
127
129
  this._userData = userData;
128
130
  this._input = new AgentInput(this.onAudioInputChanged);
129
131
  this._output = new AgentOutput(this.onAudioOutputChanged, this.onTextOutputChanged);
130
132
  this._chatCtx = ChatContext.empty();
131
- this.options = opts.options;
132
- this._aecWarmupRemaining = this.options.aecWarmupDuration ?? 0;
133
+ this.sessionOptions = resolvedSessionOptions;
134
+ this.options = legacyVoiceOptions;
135
+ this._aecWarmupRemaining = this.sessionOptions.aecWarmupDuration ?? 0;
133
136
  this._onUserInputTranscribed = this._onUserInputTranscribed.bind(this);
134
137
  this.on(AgentSessionEventTypes.UserInputTranscribed, this._onUserInputTranscribed);
135
138
  }
136
139
  emit(event, ...args) {
137
140
  const eventData = args[0];
138
141
  this._recordedEvents.push(eventData);
139
- if (event === AgentSessionEventTypes.MetricsCollected) {
140
- this._usageCollector.collect(eventData.metrics);
141
- }
142
142
  return super.emit(event, ...args);
143
143
  }
144
144
  get input() {
@@ -170,7 +170,7 @@ class AgentSession extends EventEmitter {
170
170
  return { modelUsage: this._usageCollector.flatten().map(filterZeroValues) };
171
171
  }
172
172
  get useTtsAlignedTranscript() {
173
- return this.options.useTtsAlignedTranscript;
173
+ return this.sessionOptions.useTtsAlignedTranscript;
174
174
  }
175
175
  set userData(value) {
176
176
  this._userData = value;
@@ -209,9 +209,11 @@ class AgentSession extends EventEmitter {
209
209
  outputOptions
210
210
  });
211
211
  this._roomIO.start();
212
- this.clientEventsHandler = new ClientEventsHandler(this, this._roomIO);
212
+ const transport = new RoomSessionTransport(room, this._roomIO);
213
+ this.sessionHost = new SessionHost(transport);
214
+ this.sessionHost.registerSession(this);
213
215
  if ((inputOptions == null ? void 0 : inputOptions.textEnabled) !== false) {
214
- this.clientEventsHandler.registerTextInput(
216
+ this.sessionHost.registerTextInput(
215
217
  (inputOptions == null ? void 0 : inputOptions.textInputCallback) ?? DEFAULT_TEXT_INPUT_CALLBACK
216
218
  );
217
219
  }
@@ -245,8 +247,8 @@ class AgentSession extends EventEmitter {
245
247
  }
246
248
  tasks.push(this._updateActivity(this.agent, { waitOnEnter: false }));
247
249
  await Promise.allSettled(tasks);
248
- if (this.clientEventsHandler) {
249
- await this.clientEventsHandler.start();
250
+ if (this.sessionHost) {
251
+ await this.sessionHost.start();
250
252
  }
251
253
  this.logger.debug(
252
254
  `using audio io: ${this.input.audio ? "`" + this.input.audio.constructor.name + "`" : "(none)"} -> \`AgentSession\` -> ${this.output.audio ? "`" + this.output.audio.constructor.name + "`" : "(none)"}`
@@ -547,7 +549,9 @@ class AgentSession extends EventEmitter {
547
549
  if (this.closingTask) {
548
550
  return;
549
551
  }
550
- this.closeImpl(reason, error, drain);
552
+ this.closingTask = this.closeImpl(reason, error, drain).finally(() => {
553
+ this.closingTask = null;
554
+ });
551
555
  }
552
556
  /** @internal */
553
557
  _onError(error) {
@@ -565,12 +569,10 @@ class AgentSession extends EventEmitter {
565
569
  return;
566
570
  }
567
571
  } else if (error.type === "interruption_detection_error") {
568
- this.interruptionDetectionErrorCounts += 1;
569
- if (this.interruptionDetectionErrorCounts <= this._connOptions.maxUnrecoverableErrors) {
570
- return;
571
- }
572
+ this.logger.error(error.toString());
573
+ return;
572
574
  }
573
- this.logger.error(error, "AgentSession is closing due to unrecoverable error");
575
+ this.logger.error(error, "AgentSession is closing due to an unrecoverable error");
574
576
  this.closingTask = (async () => {
575
577
  await this.closeImpl(CloseReason.ERROR, error);
576
578
  })().then(() => {
@@ -595,7 +597,6 @@ class AgentSession extends EventEmitter {
595
597
  if (state === "speaking") {
596
598
  this.llmErrorCounts = 0;
597
599
  this.ttsErrorCounts = 0;
598
- this.interruptionDetectionErrorCounts = 0;
599
600
  if (this.agentSpeakingSpan === void 0) {
600
601
  this.agentSpeakingSpan = tracer.startSpan({
601
602
  name: "agent_speaking",
@@ -631,7 +632,7 @@ class AgentSession extends EventEmitter {
631
632
  );
632
633
  }
633
634
  /** @internal */
634
- _updateUserState(state, lastSpeakingTime) {
635
+ _updateUserState(state, options) {
635
636
  var _a;
636
637
  if (this._userState === state) {
637
638
  return;
@@ -639,15 +640,15 @@ class AgentSession extends EventEmitter {
639
640
  if (state === "speaking" && this._userSpeakingSpan === void 0) {
640
641
  this._userSpeakingSpan = tracer.startSpan({
641
642
  name: "user_speaking",
642
- context: this.rootSpanContext,
643
- startTime: lastSpeakingTime
643
+ context: (options == null ? void 0 : options.otelContext) ?? this.rootSpanContext,
644
+ startTime: options == null ? void 0 : options.lastSpeakingTime
644
645
  });
645
646
  const linked = (_a = this._roomIO) == null ? void 0 : _a.linkedParticipant;
646
647
  if (linked) {
647
648
  setParticipantSpanAttributes(this._userSpeakingSpan, linked);
648
649
  }
649
650
  } else if (this._userSpeakingSpan !== void 0) {
650
- this._userSpeakingSpan.end(lastSpeakingTime);
651
+ this._userSpeakingSpan.end(options == null ? void 0 : options.lastSpeakingTime);
651
652
  this._userSpeakingSpan = void 0;
652
653
  }
653
654
  const oldState = this._userState;
@@ -677,7 +678,7 @@ class AgentSession extends EventEmitter {
677
678
  }
678
679
  _setUserAwayTimer() {
679
680
  this._cancelUserAwayTimer();
680
- if (this.options.userAwayTimeout === null || this.options.userAwayTimeout === void 0) {
681
+ if (this.sessionOptions.userAwayTimeout === null || this.sessionOptions.userAwayTimeout === void 0) {
681
682
  return;
682
683
  }
683
684
  if (this._roomIO && !this._roomIO.isParticipantAvailable) {
@@ -686,7 +687,7 @@ class AgentSession extends EventEmitter {
686
687
  this.userAwayTimer = setTimeout(() => {
687
688
  this.logger.debug("User away timeout triggered");
688
689
  this._updateUserState("away");
689
- }, this.options.userAwayTimeout * 1e3);
690
+ }, this.sessionOptions.userAwayTimeout * 1e3);
690
691
  }
691
692
  _cancelUserAwayTimer() {
692
693
  if (this.userAwayTimer !== null) {
@@ -751,8 +752,8 @@ class AgentSession extends EventEmitter {
751
752
  this.input.audio = null;
752
753
  this.output.audio = null;
753
754
  this.output.transcription = null;
754
- await ((_b = this.clientEventsHandler) == null ? void 0 : _b.close());
755
- this.clientEventsHandler = void 0;
755
+ await ((_b = this.sessionHost) == null ? void 0 : _b.close());
756
+ this.sessionHost = void 0;
756
757
  await ((_c = this._roomIO) == null ? void 0 : _c.close());
757
758
  this._roomIO = void 0;
758
759
  await ((_d = this.activity) == null ? void 0 : _d.close());
@@ -776,12 +777,11 @@ class AgentSession extends EventEmitter {
776
777
  this.rootSpanContext = void 0;
777
778
  this.llmErrorCounts = 0;
778
779
  this.ttsErrorCounts = 0;
779
- this.interruptionDetectionErrorCounts = 0;
780
780
  this.logger.info({ reason, error }, "AgentSession closed");
781
781
  }
782
782
  }
783
783
  export {
784
784
  AgentSession,
785
- defaultSessionOptions
785
+ defaultAgentSessionOptions
786
786
  };
787
787
  //# sourceMappingURL=agent_session.js.map