@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
@@ -74,6 +74,7 @@ export declare class AgentActivity implements RecognitionHooks {
74
74
  get allowInterruptions(): boolean;
75
75
  get useTtsAlignedTranscript(): boolean;
76
76
  get turnDetection(): TurnDetectionMode | undefined;
77
+ get turnHandling(): Partial<import("./turn_config/turn_handling.js").TurnHandlingOptions>;
77
78
  get toolCtx(): ToolContext;
78
79
  /** @internal */
79
80
  get inputStartedAt(): number | undefined;
@@ -147,6 +148,7 @@ export declare class AgentActivity implements RecognitionHooks {
147
148
  close(): Promise<void>;
148
149
  private resolveInterruptionDetector;
149
150
  private restoreInterruptionByAudioActivity;
151
+ private fallbackToVadInterruption;
150
152
  private _closeSessionResources;
151
153
  }
152
154
  export {};
@@ -74,6 +74,7 @@ export declare class AgentActivity implements RecognitionHooks {
74
74
  get allowInterruptions(): boolean;
75
75
  get useTtsAlignedTranscript(): boolean;
76
76
  get turnDetection(): TurnDetectionMode | undefined;
77
+ get turnHandling(): Partial<import("./turn_config/turn_handling.js").TurnHandlingOptions>;
77
78
  get toolCtx(): ToolContext;
78
79
  /** @internal */
79
80
  get inputStartedAt(): number | undefined;
@@ -147,6 +148,7 @@ export declare class AgentActivity implements RecognitionHooks {
147
148
  close(): Promise<void>;
148
149
  private resolveInterruptionDetector;
149
150
  private restoreInterruptionByAudioActivity;
151
+ private fallbackToVadInterruption;
150
152
  private _closeSessionResources;
151
153
  }
152
154
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"agent_activity.d.ts","sourceRoot":"","sources":["../../src/voice/agent_activity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent_activity.d.ts","sourceRoot":"","sources":["../../src/voice/agent_activity.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ import { STT } from "../stt/stt.js";
17
17
  import { recordRealtimeMetrics, traceTypes, tracer } from "../telemetry/index.js";
18
18
  import { splitWords } from "../tokenize/basic/word.js";
19
19
  import { TTS } from "../tts/tts.js";
20
- import { Future, Task, cancelAndWait, waitFor } from "../utils.js";
20
+ import { Future, Task, cancelAndWait, isDevMode, isHosted, waitFor } from "../utils.js";
21
21
  import { VAD } from "../vad.js";
22
22
  import {
23
23
  StopResponse,
@@ -85,9 +85,10 @@ class AgentActivity {
85
85
  onRealtimeInputAudioTranscriptionCompleted = (ev) => this.onInputAudioTranscriptionCompleted(ev);
86
86
  onModelError = (ev) => this.onError(ev);
87
87
  onInterruptionOverlappingSpeech = (ev) => {
88
- this.agentSession.emit(AgentSessionEventTypes.UserOverlappingSpeech, ev);
88
+ this.agentSession.emit(AgentSessionEventTypes.OverlappingSpeech, ev);
89
89
  };
90
90
  onInterruptionMetricsCollected = (ev) => {
91
+ this.agentSession._usageCollector.collect(ev);
91
92
  this.agentSession.emit(
92
93
  AgentSessionEventTypes.MetricsCollected,
93
94
  createMetricsCollectedEvent({ metrics: ev })
@@ -96,6 +97,11 @@ class AgentActivity {
96
97
  onInterruptionError = (ev) => {
97
98
  const errorEvent = createErrorEvent(ev, this.interruptionDetector);
98
99
  this.agentSession.emit(AgentSessionEventTypes.Error, errorEvent);
100
+ if (!ev.recoverable) {
101
+ this.agentSession._onError(ev);
102
+ this.fallbackToVadInterruption();
103
+ return;
104
+ }
99
105
  this.agentSession._onError(ev);
100
106
  };
101
107
  /** @internal */
@@ -183,7 +189,7 @@ class AgentActivity {
183
189
  }
184
190
  }
185
191
  async _startSession(options) {
186
- var _a;
192
+ var _a, _b, _c, _d, _e;
187
193
  const { spanName, runOnEnter } = options;
188
194
  const startSpan = tracer.startSpan({
189
195
  name: spanName,
@@ -258,10 +264,10 @@ class AgentActivity {
258
264
  turnDetector: typeof this.turnDetection === "string" ? void 0 : this.turnDetection,
259
265
  turnDetectionMode: this.turnDetectionMode,
260
266
  interruptionDetection: this.interruptionDetector,
261
- minEndpointingDelay: this.agentSession.options.turnHandling.endpointing.minDelay,
262
- maxEndpointingDelay: this.agentSession.options.turnHandling.endpointing.maxDelay,
267
+ minEndpointingDelay: ((_b = (_a = this.agent.turnHandling) == null ? void 0 : _a.endpointing) == null ? void 0 : _b.minDelay) ?? this.agentSession.sessionOptions.turnHandling.endpointing.minDelay,
268
+ maxEndpointingDelay: ((_d = (_c = this.agent.turnHandling) == null ? void 0 : _c.endpointing) == null ? void 0 : _d.maxDelay) ?? this.agentSession.sessionOptions.turnHandling.endpointing.maxDelay,
263
269
  rootSpanContext: this.agentSession.rootSpanContext,
264
- sttModel: (_a = this.stt) == null ? void 0 : _a.label,
270
+ sttModel: (_e = this.stt) == null ? void 0 : _e.label,
265
271
  sttProvider: this.getSttProvider(),
266
272
  getLinkedParticipant: () => {
267
273
  var _a2;
@@ -321,15 +327,31 @@ class AgentActivity {
321
327
  return this.realtimeSession;
322
328
  }
323
329
  get allowInterruptions() {
324
- var _a;
325
- return ((_a = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _a.mode) !== false;
330
+ var _a, _b;
331
+ return ((_b = (_a = this.agent.turnHandling) == null ? void 0 : _a.interruption) == null ? void 0 : _b.enabled) ?? this.agentSession.sessionOptions.turnHandling.interruption.enabled;
326
332
  }
327
333
  get useTtsAlignedTranscript() {
328
334
  return this.agent.useTtsAlignedTranscript ?? this.agentSession.useTtsAlignedTranscript;
329
335
  }
330
336
  get turnDetection() {
331
- return this.agentSession.turnDetection;
332
- }
337
+ var _a;
338
+ return ((_a = this.agent.turnHandling) == null ? void 0 : _a.turnDetection) ?? this.agentSession.turnDetection;
339
+ }
340
+ get turnHandling() {
341
+ return this.agent.turnHandling ?? this.agentSession.sessionOptions.turnHandling;
342
+ }
343
+ // get minEndpointingDelay(): number {
344
+ // return (
345
+ // this.agent.turnHandling?.endpointing?.minDelay ??
346
+ // this.agentSession.sessionOptions.turnHandling.endpointing.minDelay
347
+ // );
348
+ // }
349
+ // get maxEndpointingDelay(): number {
350
+ // return (
351
+ // this.agent.turnHandling?.endpointing?.maxDelay ??
352
+ // this.agentSession.sessionOptions.turnHandling.endpointing.maxDelay
353
+ // );
354
+ // }
333
355
  get toolCtx() {
334
356
  return this.agent.toolCtx;
335
357
  }
@@ -395,12 +417,18 @@ class AgentActivity {
395
417
  }
396
418
  });
397
419
  this.audioStreamId = this.audioStream.addInputStream(audioStream);
398
- const [realtimeAudioStream, recognitionAudioStream] = this.audioStream.stream.pipeThrough(aecWarmupAudioFilter).tee();
399
- if (this.realtimeSession) {
420
+ if (this.realtimeSession && this.audioRecognition) {
421
+ const [realtimeAudioStream, recognitionAudioStream] = this.audioStream.stream.pipeThrough(aecWarmupAudioFilter).tee();
400
422
  this.realtimeSession.setInputAudioStream(realtimeAudioStream);
401
- }
402
- if (this.audioRecognition) {
403
423
  this.audioRecognition.setInputAudioStream(recognitionAudioStream);
424
+ } else if (this.realtimeSession) {
425
+ this.realtimeSession.setInputAudioStream(
426
+ this.audioStream.stream.pipeThrough(aecWarmupAudioFilter)
427
+ );
428
+ } else if (this.audioRecognition) {
429
+ this.audioRecognition.setInputAudioStream(
430
+ this.audioStream.stream.pipeThrough(aecWarmupAudioFilter)
431
+ );
404
432
  }
405
433
  }
406
434
  detachAudioInput() {
@@ -475,6 +503,7 @@ class AgentActivity {
475
503
  this.realtimeSpans.delete(ev.requestId);
476
504
  }
477
505
  }
506
+ this.agentSession._usageCollector.collect(ev);
478
507
  this.agentSession.emit(
479
508
  AgentSessionEventTypes.MetricsCollected,
480
509
  createMetricsCollectedEvent({ metrics: ev })
@@ -587,7 +616,10 @@ class AgentActivity {
587
616
  if (ev) {
588
617
  speechStartTime = speechStartTime - ev.speechDuration - ev.inferenceDuration;
589
618
  }
590
- this.agentSession._updateUserState("speaking", speechStartTime);
619
+ this.agentSession._updateUserState("speaking", {
620
+ lastSpeakingTime: speechStartTime,
621
+ otelContext: otelContext.active()
622
+ });
591
623
  if (this.isInterruptionDetectionEnabled && this.audioRecognition) {
592
624
  this.audioRecognition.onStartOfOverlapSpeech(
593
625
  ev.speechDuration,
@@ -607,14 +639,17 @@ class AgentActivity {
607
639
  this.agentSession._userSpeakingSpan
608
640
  );
609
641
  }
610
- this.agentSession._updateUserState("listening", speechEndTime);
642
+ this.agentSession._updateUserState("listening", {
643
+ lastSpeakingTime: speechEndTime,
644
+ otelContext: otelContext.active()
645
+ });
611
646
  }
612
647
  onVADInferenceDone(ev) {
613
648
  var _a;
614
649
  if (this.turnDetection === "manual" || this.turnDetection === "realtime_llm") {
615
650
  return;
616
651
  }
617
- if (ev.speechDuration >= ((_a = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _a.minDuration)) {
652
+ if (ev.speechDuration >= ((_a = this.agentSession.sessionOptions.turnHandling.interruption) == null ? void 0 : _a.minDuration)) {
618
653
  this.interruptByAudioActivity();
619
654
  }
620
655
  }
@@ -629,11 +664,11 @@ class AgentActivity {
629
664
  if (this.llm instanceof RealtimeModel && this.llm.capabilities.turnDetection) {
630
665
  return;
631
666
  }
632
- if (this.stt && ((_a = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _a.minWords) > 0 && this.audioRecognition) {
667
+ if (this.stt && ((_a = this.agentSession.sessionOptions.turnHandling.interruption) == null ? void 0 : _a.minWords) > 0 && this.audioRecognition) {
633
668
  const text = this.audioRecognition.currentTranscript;
634
669
  const normalizedText = text ?? "";
635
670
  const wordCount = splitWords(normalizedText, true).length;
636
- if (wordCount < ((_b = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _b.minWords)) {
671
+ if (wordCount < ((_b = this.agentSession.sessionOptions.turnHandling.interruption) == null ? void 0 : _b.minWords)) {
637
672
  return;
638
673
  }
639
674
  }
@@ -651,7 +686,7 @@ class AgentActivity {
651
686
  this.restoreInterruptionByAudioActivity();
652
687
  this.interruptByAudioActivity();
653
688
  if (this.audioRecognition) {
654
- this.audioRecognition.onEndOfAgentSpeech(ev.overlapStartedAt || ev.timestamp);
689
+ this.audioRecognition.onEndOfAgentSpeech(ev.overlapStartedAt || ev.detectedAt);
655
690
  }
656
691
  }
657
692
  onInterimTranscript(ev) {
@@ -689,7 +724,7 @@ class AgentActivity {
689
724
  }
690
725
  }
691
726
  onPreemptiveGeneration(info) {
692
- if (!this.agentSession.options.preemptiveGeneration || this.schedulingPaused || this._currentSpeech !== void 0 && !this._currentSpeech.interrupted || !(this.llm instanceof LLM)) {
727
+ if (!this.agentSession.sessionOptions.preemptiveGeneration || this.schedulingPaused || this._currentSpeech !== void 0 && !this._currentSpeech.interrupted || !(this.llm instanceof LLM)) {
693
728
  return;
694
729
  }
695
730
  this.cancelPreemptiveGeneration();
@@ -770,14 +805,14 @@ class AgentActivity {
770
805
  );
771
806
  return true;
772
807
  }
773
- if (this.stt && this.turnDetection !== "manual" && this._currentSpeech && this._currentSpeech.allowInterruptions && !this._currentSpeech.interrupted && ((_a = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _a.minWords) > 0) {
808
+ if (this.stt && this.turnDetection !== "manual" && this._currentSpeech && this._currentSpeech.allowInterruptions && !this._currentSpeech.interrupted && ((_a = this.agentSession.sessionOptions.turnHandling.interruption) == null ? void 0 : _a.minWords) > 0) {
774
809
  const wordCount = splitWords(info.newTranscript, true).length;
775
- if (wordCount < ((_b = this.agentSession.options.turnHandling.interruption) == null ? void 0 : _b.minWords)) {
810
+ if (wordCount < ((_b = this.agentSession.sessionOptions.turnHandling.interruption) == null ? void 0 : _b.minWords)) {
776
811
  this.cancelPreemptiveGeneration();
777
812
  this.logger.info(
778
813
  {
779
814
  wordCount,
780
- minInterruptionWords: this.agentSession.options.turnHandling.interruption.minWords
815
+ minInterruptionWords: this.agentSession.sessionOptions.turnHandling.interruption.minWords
781
816
  },
782
817
  "skipping user input, word count below minimum interruption threshold"
783
818
  );
@@ -811,9 +846,12 @@ class AgentActivity {
811
846
  throw new Error("Speech queue is empty");
812
847
  }
813
848
  const speechHandle = heapItem[2];
849
+ if (speechHandle.interrupted || speechHandle.done()) {
850
+ continue;
851
+ }
814
852
  this._currentSpeech = speechHandle;
815
853
  speechHandle._authorizeGeneration();
816
- await speechHandle._waitForGeneration();
854
+ await speechHandle.waitIfNotInterrupted([speechHandle._waitForGeneration()]);
817
855
  this._currentSpeech = void 0;
818
856
  }
819
857
  const toWait = this.getDrainPendingSpeechTasks();
@@ -953,7 +991,16 @@ ${instructions}`;
953
991
  speech.interrupt(force);
954
992
  }
955
993
  (_a = this.realtimeSession) == null ? void 0 : _a.interrupt();
956
- if (currentSpeech === void 0) {
994
+ if (force) {
995
+ for (const task of this.speechTasks) {
996
+ task.cancel();
997
+ }
998
+ if (currentSpeech && !currentSpeech.done()) {
999
+ currentSpeech._markDone();
1000
+ }
1001
+ this.speechQueue.clear();
1002
+ future.resolve();
1003
+ } else if (currentSpeech === void 0) {
957
1004
  future.resolve();
958
1005
  } else {
959
1006
  currentSpeech.addDoneCallback(() => {
@@ -1400,9 +1447,7 @@ ${instructions}`;
1400
1447
  audioOutput.clearBuffer();
1401
1448
  }
1402
1449
  replyAbortController.abort();
1403
- await Promise.allSettled(
1404
- tasks.map((task) => task.cancelAndWait(AgentActivity.REPLY_TASK_CANCEL_TIMEOUT))
1405
- );
1450
+ await cancelAndWait(tasks, AgentActivity.REPLY_TASK_CANCEL_TIMEOUT);
1406
1451
  let forwardedText = (textOut == null ? void 0 : textOut.text) || "";
1407
1452
  if (audioOutput) {
1408
1453
  const playbackEv = await audioOutput.waitForPlayout();
@@ -1483,7 +1528,7 @@ ${instructions}`;
1483
1528
  speechHandle._markGenerationDone();
1484
1529
  await executeToolsTask.result;
1485
1530
  if (toolOutput.output.length === 0) return;
1486
- const { maxToolSteps } = this.agentSession.options;
1531
+ const { maxToolSteps } = this.agentSession.sessionOptions;
1487
1532
  if (speechHandle.numSteps >= maxToolSteps) {
1488
1533
  this.logger.warn(
1489
1534
  { speech_id: speechHandle.id, max_tool_steps: maxToolSteps },
@@ -1834,7 +1879,7 @@ ${instructions}`;
1834
1879
  if (toolOutput.output.length === 0) {
1835
1880
  return;
1836
1881
  }
1837
- const { maxToolSteps } = this.agentSession.options;
1882
+ const { maxToolSteps } = this.agentSession.sessionOptions;
1838
1883
  if (speechHandle.numSteps >= maxToolSteps) {
1839
1884
  this.logger.warn(
1840
1885
  { speech_id: speechHandle.id, max_tool_steps: maxToolSteps },
@@ -2053,15 +2098,16 @@ ${instructions}`;
2053
2098
  const unlock = await this.lock.lock();
2054
2099
  try {
2055
2100
  this.cancelPreemptiveGeneration();
2101
+ await cancelAndWait(Array.from(this.speechTasks), AgentActivity.REPLY_TASK_CANCEL_TIMEOUT);
2102
+ if (this._currentSpeech && !this._currentSpeech.done()) {
2103
+ this._currentSpeech._markDone();
2104
+ }
2056
2105
  await this._closeSessionResources();
2057
2106
  if (this._mainTask) {
2058
2107
  await this._mainTask.cancelAndWait();
2059
2108
  }
2060
2109
  if (this.interruptionDetector) {
2061
- this.interruptionDetector.off(
2062
- "user_overlapping_speech",
2063
- this.onInterruptionOverlappingSpeech
2064
- );
2110
+ this.interruptionDetector.off("overlapping_speech", this.onInterruptionOverlappingSpeech);
2065
2111
  this.interruptionDetector.off("metrics_collected", this.onInterruptionMetricsCollected);
2066
2112
  this.interruptionDetector.off("error", this.onInterruptionError);
2067
2113
  }
@@ -2071,21 +2117,33 @@ ${instructions}`;
2071
2117
  }
2072
2118
  }
2073
2119
  resolveInterruptionDetector() {
2074
- const interruptionDetection = this.agent.interruptionDetection ?? this.agentSession.interruptionDetection;
2120
+ var _a, _b;
2121
+ const agentInterruptionDetection = (_b = (_a = this.agent.turnHandling) == null ? void 0 : _a.interruption) == null ? void 0 : _b.mode;
2122
+ const sessionInterruptionDetection = this.agentSession.interruptionDetection;
2075
2123
  if (!(this.stt && this.stt.capabilities.alignedTranscript && this.stt.capabilities.streaming && this.vad && this.turnDetection !== "manual" && this.turnDetection !== "realtime_llm" && !(this.llm instanceof RealtimeModel))) {
2076
- if (interruptionDetection === "adaptive") {
2124
+ if (agentInterruptionDetection === "adaptive" || sessionInterruptionDetection === "adaptive") {
2077
2125
  this.logger.warn(
2078
2126
  "interruptionDetection is provided, but it's not compatible with the current configuration and will be disabled"
2079
2127
  );
2080
- return void 0;
2081
2128
  }
2129
+ return void 0;
2130
+ }
2131
+ if (!this.allowInterruptions) {
2132
+ return void 0;
2133
+ }
2134
+ if (agentInterruptionDetection === "vad") {
2135
+ return void 0;
2082
2136
  }
2083
- if (interruptionDetection !== void 0 && interruptionDetection === false || interruptionDetection === "vad") {
2137
+ if (sessionInterruptionDetection === "vad") {
2138
+ return void 0;
2139
+ }
2140
+ if (agentInterruptionDetection === void 0 && sessionInterruptionDetection === void 0 && !isHosted() && !isDevMode()) {
2141
+ this.logger.info("adaptive interruption is disabled by default in production mode");
2084
2142
  return void 0;
2085
2143
  }
2086
2144
  try {
2087
2145
  const detector = new AdaptiveInterruptionDetector();
2088
- detector.on("user_overlapping_speech", this.onInterruptionOverlappingSpeech);
2146
+ detector.on("overlapping_speech", this.onInterruptionOverlappingSpeech);
2089
2147
  detector.on("metrics_collected", this.onInterruptionMetricsCollected);
2090
2148
  detector.on("error", this.onInterruptionError);
2091
2149
  return detector;
@@ -2097,6 +2155,25 @@ ${instructions}`;
2097
2155
  restoreInterruptionByAudioActivity() {
2098
2156
  this.isInterruptionByAudioActivityEnabled = this.isDefaultInterruptionByAudioActivityEnabled;
2099
2157
  }
2158
+ fallbackToVadInterruption() {
2159
+ if (!this.isInterruptionDetectionEnabled) return;
2160
+ this.isInterruptionDetectionEnabled = false;
2161
+ this.restoreInterruptionByAudioActivity();
2162
+ if (this.interruptionDetector) {
2163
+ this.interruptionDetector.off("overlapping_speech", this.onInterruptionOverlappingSpeech);
2164
+ this.interruptionDetector.off("metrics_collected", this.onInterruptionMetricsCollected);
2165
+ this.interruptionDetector.off("error", this.onInterruptionError);
2166
+ this.interruptionDetector = void 0;
2167
+ }
2168
+ if (this.audioRecognition) {
2169
+ this.audioRecognition.disableInterruptionDetection().catch((err) => {
2170
+ this.logger.warn({ err }, "error while disabling interruption detection");
2171
+ });
2172
+ }
2173
+ this.logger.warn(
2174
+ "adaptive interruption disabled due to unrecoverable error, falling back to VAD-based interruption"
2175
+ );
2176
+ }
2100
2177
  async _closeSessionResources() {
2101
2178
  var _a, _b, _c;
2102
2179
  if (this.llm instanceof LLM) {