@livekit/agents 0.3.4 → 0.4.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 (188) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +40 -0
  3. package/dist/audio.js +17 -30
  4. package/dist/audio.js.map +1 -1
  5. package/dist/cli.js +3 -14
  6. package/dist/cli.js.map +1 -1
  7. package/dist/http_server.d.ts +1 -1
  8. package/dist/http_server.js +5 -9
  9. package/dist/http_server.js.map +1 -1
  10. package/dist/index.d.ts +3 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +14 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/ipc/job_executor.js +3 -5
  15. package/dist/ipc/job_executor.js.map +1 -1
  16. package/dist/ipc/job_main.d.ts +1 -1
  17. package/dist/ipc/proc_job_executor.js +66 -80
  18. package/dist/ipc/proc_job_executor.js.map +1 -1
  19. package/dist/ipc/proc_pool.d.ts +3 -3
  20. package/dist/ipc/proc_pool.d.ts.map +1 -1
  21. package/dist/ipc/proc_pool.js +16 -11
  22. package/dist/ipc/proc_pool.js.map +1 -1
  23. package/dist/job.js +56 -73
  24. package/dist/job.js.map +1 -1
  25. package/dist/llm/chat_context.d.ts +66 -0
  26. package/dist/llm/chat_context.d.ts.map +1 -0
  27. package/dist/llm/chat_context.js +93 -0
  28. package/dist/llm/chat_context.js.map +1 -0
  29. package/dist/llm/function_context.d.ts +19 -1
  30. package/dist/llm/function_context.d.ts.map +1 -1
  31. package/dist/llm/function_context.js +54 -18
  32. package/dist/llm/function_context.js.map +1 -1
  33. package/dist/llm/function_context.test.d.ts +2 -0
  34. package/dist/llm/function_context.test.d.ts.map +1 -0
  35. package/dist/llm/function_context.test.js +218 -0
  36. package/dist/llm/function_context.test.js.map +1 -0
  37. package/dist/llm/index.d.ts +3 -2
  38. package/dist/llm/index.d.ts.map +1 -1
  39. package/dist/llm/index.js +3 -2
  40. package/dist/llm/index.js.map +1 -1
  41. package/dist/llm/llm.d.ts +53 -0
  42. package/dist/llm/llm.d.ts.map +1 -0
  43. package/dist/llm/llm.js +45 -0
  44. package/dist/llm/llm.js.map +1 -0
  45. package/dist/multimodal/agent_playout.d.ts +1 -1
  46. package/dist/multimodal/agent_playout.js +116 -153
  47. package/dist/multimodal/agent_playout.js.map +1 -1
  48. package/dist/multimodal/multimodal_agent.d.ts +4 -3
  49. package/dist/multimodal/multimodal_agent.d.ts.map +1 -1
  50. package/dist/multimodal/multimodal_agent.js +214 -237
  51. package/dist/multimodal/multimodal_agent.js.map +1 -1
  52. package/dist/pipeline/agent_output.d.ts +30 -0
  53. package/dist/pipeline/agent_output.d.ts.map +1 -0
  54. package/dist/pipeline/agent_output.js +155 -0
  55. package/dist/pipeline/agent_output.js.map +1 -0
  56. package/dist/pipeline/agent_playout.d.ts +38 -0
  57. package/dist/pipeline/agent_playout.d.ts.map +1 -0
  58. package/dist/pipeline/agent_playout.js +142 -0
  59. package/dist/pipeline/agent_playout.js.map +1 -0
  60. package/dist/pipeline/human_input.d.ts +28 -0
  61. package/dist/pipeline/human_input.d.ts.map +1 -0
  62. package/dist/pipeline/human_input.js +134 -0
  63. package/dist/pipeline/human_input.js.map +1 -0
  64. package/dist/pipeline/index.d.ts +2 -0
  65. package/dist/pipeline/index.d.ts.map +1 -0
  66. package/dist/pipeline/index.js +5 -0
  67. package/dist/pipeline/index.js.map +1 -0
  68. package/dist/pipeline/pipeline_agent.d.ts +134 -0
  69. package/dist/pipeline/pipeline_agent.d.ts.map +1 -0
  70. package/dist/pipeline/pipeline_agent.js +661 -0
  71. package/dist/pipeline/pipeline_agent.js.map +1 -0
  72. package/dist/pipeline/speech_handle.d.ts +27 -0
  73. package/dist/pipeline/speech_handle.d.ts.map +1 -0
  74. package/dist/pipeline/speech_handle.js +102 -0
  75. package/dist/pipeline/speech_handle.js.map +1 -0
  76. package/dist/plugin.js +7 -20
  77. package/dist/plugin.js.map +1 -1
  78. package/dist/stt/index.d.ts +1 -2
  79. package/dist/stt/index.d.ts.map +1 -1
  80. package/dist/stt/index.js +1 -2
  81. package/dist/stt/index.js.map +1 -1
  82. package/dist/stt/stt.d.ts +62 -24
  83. package/dist/stt/stt.d.ts.map +1 -1
  84. package/dist/stt/stt.js +77 -27
  85. package/dist/stt/stt.js.map +1 -1
  86. package/dist/tokenize/basic/basic.d.ts +16 -0
  87. package/dist/tokenize/basic/basic.d.ts.map +1 -0
  88. package/dist/tokenize/basic/basic.js +50 -0
  89. package/dist/tokenize/basic/basic.js.map +1 -0
  90. package/dist/tokenize/basic/hyphenator.d.ts +17 -0
  91. package/dist/tokenize/basic/hyphenator.d.ts.map +1 -0
  92. package/dist/tokenize/basic/hyphenator.js +420 -0
  93. package/dist/tokenize/basic/hyphenator.js.map +1 -0
  94. package/dist/tokenize/basic/index.d.ts +2 -0
  95. package/dist/tokenize/basic/index.d.ts.map +1 -0
  96. package/dist/tokenize/basic/index.js +5 -0
  97. package/dist/tokenize/basic/index.js.map +1 -0
  98. package/dist/tokenize/basic/paragraph.d.ts +5 -0
  99. package/dist/tokenize/basic/paragraph.d.ts.map +1 -0
  100. package/dist/tokenize/basic/paragraph.js +38 -0
  101. package/dist/tokenize/basic/paragraph.js.map +1 -0
  102. package/dist/tokenize/basic/sentence.d.ts +5 -0
  103. package/dist/tokenize/basic/sentence.d.ts.map +1 -0
  104. package/dist/tokenize/basic/sentence.js +60 -0
  105. package/dist/tokenize/basic/sentence.js.map +1 -0
  106. package/dist/tokenize/basic/word.d.ts +5 -0
  107. package/dist/tokenize/basic/word.d.ts.map +1 -0
  108. package/dist/tokenize/basic/word.js +23 -0
  109. package/dist/tokenize/basic/word.js.map +1 -0
  110. package/dist/tokenize/index.d.ts +5 -0
  111. package/dist/tokenize/index.d.ts.map +1 -0
  112. package/dist/tokenize/index.js +8 -0
  113. package/dist/tokenize/index.js.map +1 -0
  114. package/dist/tokenize/token_stream.d.ts +36 -0
  115. package/dist/tokenize/token_stream.d.ts.map +1 -0
  116. package/dist/tokenize/token_stream.js +136 -0
  117. package/dist/tokenize/token_stream.js.map +1 -0
  118. package/dist/tokenize/tokenizer.d.ts +55 -0
  119. package/dist/tokenize/tokenizer.d.ts.map +1 -0
  120. package/dist/tokenize/tokenizer.js +117 -0
  121. package/dist/tokenize/tokenizer.js.map +1 -0
  122. package/dist/transcription.js +78 -89
  123. package/dist/transcription.js.map +1 -1
  124. package/dist/tts/index.d.ts +1 -3
  125. package/dist/tts/index.d.ts.map +1 -1
  126. package/dist/tts/index.js +1 -3
  127. package/dist/tts/index.js.map +1 -1
  128. package/dist/tts/tts.d.ts +66 -37
  129. package/dist/tts/tts.d.ts.map +1 -1
  130. package/dist/tts/tts.js +79 -74
  131. package/dist/tts/tts.js.map +1 -1
  132. package/dist/utils.d.ts +21 -6
  133. package/dist/utils.d.ts.map +1 -1
  134. package/dist/utils.js +120 -76
  135. package/dist/utils.js.map +1 -1
  136. package/dist/vad.d.ts +43 -39
  137. package/dist/vad.d.ts.map +1 -1
  138. package/dist/vad.js +51 -4
  139. package/dist/vad.js.map +1 -1
  140. package/dist/worker.d.ts +1 -1
  141. package/dist/worker.js +257 -247
  142. package/dist/worker.js.map +1 -1
  143. package/package.json +4 -3
  144. package/src/index.ts +16 -2
  145. package/src/ipc/proc_pool.ts +4 -4
  146. package/src/llm/chat_context.ts +147 -0
  147. package/src/llm/function_context.test.ts +248 -0
  148. package/src/llm/function_context.ts +77 -18
  149. package/src/llm/index.ts +21 -2
  150. package/src/llm/llm.ts +102 -0
  151. package/src/multimodal/multimodal_agent.ts +19 -6
  152. package/src/pipeline/agent_output.ts +185 -0
  153. package/src/pipeline/agent_playout.ts +187 -0
  154. package/src/pipeline/human_input.ts +166 -0
  155. package/src/pipeline/index.ts +15 -0
  156. package/src/pipeline/pipeline_agent.ts +917 -0
  157. package/src/pipeline/speech_handle.ts +136 -0
  158. package/src/stt/index.ts +8 -2
  159. package/src/stt/stt.ts +98 -31
  160. package/src/tokenize/basic/basic.ts +73 -0
  161. package/src/tokenize/basic/hyphenator.ts +436 -0
  162. package/src/tokenize/basic/index.ts +5 -0
  163. package/src/tokenize/basic/paragraph.ts +43 -0
  164. package/src/tokenize/basic/sentence.ts +69 -0
  165. package/src/tokenize/basic/word.ts +27 -0
  166. package/src/tokenize/index.ts +16 -0
  167. package/src/tokenize/token_stream.ts +163 -0
  168. package/src/tokenize/tokenizer.ts +152 -0
  169. package/src/tts/index.ts +1 -20
  170. package/src/tts/tts.ts +110 -57
  171. package/src/utils.ts +95 -25
  172. package/src/vad.ts +86 -45
  173. package/tsconfig.tsbuildinfo +1 -1
  174. package/dist/stt/stream_adapter.d.ts +0 -19
  175. package/dist/stt/stream_adapter.d.ts.map +0 -1
  176. package/dist/stt/stream_adapter.js +0 -96
  177. package/dist/stt/stream_adapter.js.map +0 -1
  178. package/dist/tokenize.d.ts +0 -15
  179. package/dist/tokenize.d.ts.map +0 -1
  180. package/dist/tokenize.js +0 -12
  181. package/dist/tokenize.js.map +0 -1
  182. package/dist/tts/stream_adapter.d.ts +0 -19
  183. package/dist/tts/stream_adapter.d.ts.map +0 -1
  184. package/dist/tts/stream_adapter.js +0 -111
  185. package/dist/tts/stream_adapter.js.map +0 -1
  186. package/src/stt/stream_adapter.ts +0 -104
  187. package/src/tokenize.ts +0 -22
  188. package/src/tts/stream_adapter.ts +0 -93
package/dist/utils.js CHANGED
@@ -1,15 +1,4 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _Queue_limit, _Queue_events, _Future_await, _Future_resolvePromise, _Future_rejectPromise, _Future_done, _CancellablePromise_promise, _CancellablePromise_cancelFn, _CancellablePromise_isCancelled, _CancellablePromise_error;
1
+ var _a;
13
2
  import { AudioFrame, TrackSource } from '@livekit/rtc-node';
14
3
  import { EventEmitter, once } from 'node:events';
15
4
  /**
@@ -45,9 +34,8 @@ export const mergeFrames = (buffer) => {
45
34
  return buffer;
46
35
  };
47
36
  export const findMicroTrackId = (room, identity) => {
48
- var _a;
49
37
  let p = room.remoteParticipants.get(identity);
50
- if (identity === ((_a = room.localParticipant) === null || _a === void 0 ? void 0 : _a.identity)) {
38
+ if (identity === room.localParticipant?.identity) {
51
39
  p = room.localParticipant;
52
40
  }
53
41
  if (!p) {
@@ -68,96 +56,94 @@ export const findMicroTrackId = (room, identity) => {
68
56
  };
69
57
  /** @internal */
70
58
  export class Queue {
59
+ /** @internal */
60
+ items = [];
61
+ #limit;
62
+ #events = new EventEmitter();
71
63
  constructor(limit) {
72
- /** @internal */
73
- this.items = [];
74
- _Queue_limit.set(this, void 0);
75
- _Queue_events.set(this, new EventEmitter());
76
- __classPrivateFieldSet(this, _Queue_limit, limit, "f");
64
+ this.#limit = limit;
77
65
  }
78
66
  async get() {
79
67
  if (this.items.length === 0) {
80
- await once(__classPrivateFieldGet(this, _Queue_events, "f"), 'put');
68
+ await once(this.#events, 'put');
81
69
  }
82
70
  const item = this.items.shift();
83
- __classPrivateFieldGet(this, _Queue_events, "f").emit('get');
71
+ this.#events.emit('get');
84
72
  return item;
85
73
  }
86
74
  async put(item) {
87
- if (__classPrivateFieldGet(this, _Queue_limit, "f") && this.items.length >= __classPrivateFieldGet(this, _Queue_limit, "f")) {
88
- await once(__classPrivateFieldGet(this, _Queue_events, "f"), 'get');
75
+ if (this.#limit && this.items.length >= this.#limit) {
76
+ await once(this.#events, 'get');
89
77
  }
90
78
  this.items.push(item);
91
- __classPrivateFieldGet(this, _Queue_events, "f").emit('put');
79
+ this.#events.emit('put');
92
80
  }
93
81
  }
94
- _Queue_limit = new WeakMap(), _Queue_events = new WeakMap();
95
82
  /** @internal */
96
83
  export class Future {
84
+ #await;
85
+ #resolvePromise;
86
+ #rejectPromise;
87
+ #done = false;
97
88
  constructor() {
98
- _Future_await.set(this, void 0);
99
- _Future_resolvePromise.set(this, void 0);
100
- _Future_rejectPromise.set(this, void 0);
101
- _Future_done.set(this, false);
102
- __classPrivateFieldSet(this, _Future_await, new Promise((resolve, reject) => {
103
- __classPrivateFieldSet(this, _Future_resolvePromise, resolve, "f");
104
- __classPrivateFieldSet(this, _Future_rejectPromise, reject, "f");
105
- }), "f");
89
+ this.#await = new Promise((resolve, reject) => {
90
+ this.#resolvePromise = resolve;
91
+ this.#rejectPromise = reject;
92
+ });
106
93
  }
107
94
  get await() {
108
- return __classPrivateFieldGet(this, _Future_await, "f");
95
+ return this.#await;
109
96
  }
110
97
  get done() {
111
- return __classPrivateFieldGet(this, _Future_done, "f");
98
+ return this.#done;
112
99
  }
113
100
  resolve() {
114
- __classPrivateFieldSet(this, _Future_done, true, "f");
115
- __classPrivateFieldGet(this, _Future_resolvePromise, "f").call(this);
101
+ this.#done = true;
102
+ this.#resolvePromise();
116
103
  }
117
104
  reject(error) {
118
- __classPrivateFieldSet(this, _Future_done, true, "f");
119
- __classPrivateFieldGet(this, _Future_rejectPromise, "f").call(this, error);
105
+ this.#done = true;
106
+ this.#rejectPromise(error);
120
107
  }
121
108
  }
122
- _Future_await = new WeakMap(), _Future_resolvePromise = new WeakMap(), _Future_rejectPromise = new WeakMap(), _Future_done = new WeakMap();
123
109
  /** @internal */
124
110
  export class CancellablePromise {
111
+ #promise;
112
+ #cancelFn;
113
+ #isCancelled = false;
114
+ #error = null;
125
115
  constructor(executor) {
126
- _CancellablePromise_promise.set(this, void 0);
127
- _CancellablePromise_cancelFn.set(this, void 0);
128
- _CancellablePromise_isCancelled.set(this, false);
129
- _CancellablePromise_error.set(this, null);
130
116
  let cancel;
131
- __classPrivateFieldSet(this, _CancellablePromise_promise, new Promise((resolve, reject) => {
117
+ this.#promise = new Promise((resolve, reject) => {
132
118
  executor(resolve, (reason) => {
133
- __classPrivateFieldSet(this, _CancellablePromise_error, reason instanceof Error ? reason : new Error(String(reason)), "f");
119
+ this.#error = reason instanceof Error ? reason : new Error(String(reason));
134
120
  reject(reason);
135
121
  }, (cancelFn) => {
136
122
  cancel = () => {
137
- __classPrivateFieldSet(this, _CancellablePromise_isCancelled, true, "f");
123
+ this.#isCancelled = true;
138
124
  cancelFn();
139
125
  };
140
126
  });
141
- }), "f");
142
- __classPrivateFieldSet(this, _CancellablePromise_cancelFn, cancel, "f");
127
+ });
128
+ this.#cancelFn = cancel;
143
129
  }
144
130
  get isCancelled() {
145
- return __classPrivateFieldGet(this, _CancellablePromise_isCancelled, "f");
131
+ return this.#isCancelled;
146
132
  }
147
133
  get error() {
148
- return __classPrivateFieldGet(this, _CancellablePromise_error, "f");
134
+ return this.#error;
149
135
  }
150
136
  then(onfulfilled, onrejected) {
151
- return __classPrivateFieldGet(this, _CancellablePromise_promise, "f").then(onfulfilled, onrejected);
137
+ return this.#promise.then(onfulfilled, onrejected);
152
138
  }
153
139
  catch(onrejected) {
154
- return __classPrivateFieldGet(this, _CancellablePromise_promise, "f").catch(onrejected);
140
+ return this.#promise.catch(onrejected);
155
141
  }
156
142
  finally(onfinally) {
157
- return __classPrivateFieldGet(this, _CancellablePromise_promise, "f").finally(onfinally);
143
+ return this.#promise.finally(onfinally);
158
144
  }
159
145
  cancel() {
160
- __classPrivateFieldGet(this, _CancellablePromise_cancelFn, "f").call(this);
146
+ this.#cancelFn();
161
147
  }
162
148
  static from(promise) {
163
149
  return new CancellablePromise((resolve, reject) => {
@@ -165,7 +151,6 @@ export class CancellablePromise {
165
151
  });
166
152
  }
167
153
  }
168
- _CancellablePromise_promise = new WeakMap(), _CancellablePromise_cancelFn = new WeakMap(), _CancellablePromise_isCancelled = new WeakMap(), _CancellablePromise_error = new WeakMap();
169
154
  /** @internal */
170
155
  export async function gracefullyCancel(promise) {
171
156
  if (!promise.isCancelled) {
@@ -180,34 +165,93 @@ export async function gracefullyCancel(promise) {
180
165
  }
181
166
  /** @internal */
182
167
  export class AsyncIterableQueue {
183
- constructor() {
184
- this.closed = false;
185
- this.queue = new Queue();
168
+ static CLOSE_SENTINEL = Symbol('CLOSE_SENTINEL');
169
+ #queue = new Queue();
170
+ #closed = false;
171
+ get closed() {
172
+ return this.#closed;
186
173
  }
187
174
  put(item) {
188
- if (this.closed) {
175
+ if (this.#closed) {
189
176
  throw new Error('Queue is closed');
190
177
  }
191
- this.queue.put(item);
178
+ this.#queue.put(item);
192
179
  }
193
180
  close() {
194
- this.closed = true;
195
- this.queue.put(AsyncIterableQueue.QUEUE_END_MARKER);
181
+ this.#closed = true;
182
+ this.#queue.put(_a.CLOSE_SENTINEL);
183
+ }
184
+ async next() {
185
+ if (this.#closed && this.#queue.items.length === 0) {
186
+ return { value: undefined, done: true };
187
+ }
188
+ const item = await this.#queue.get();
189
+ if (item === _a.CLOSE_SENTINEL && this.#closed) {
190
+ return { value: undefined, done: true };
191
+ }
192
+ return { value: item, done: false };
196
193
  }
197
194
  [Symbol.asyncIterator]() {
198
- return {
199
- next: async () => {
200
- if (this.closed && this.queue.items.length === 0) {
201
- return { value: undefined, done: true };
202
- }
203
- const item = await this.queue.get();
204
- if (item === AsyncIterableQueue.QUEUE_END_MARKER && this.closed) {
205
- return { value: undefined, done: true };
206
- }
207
- return { value: item, done: false };
208
- },
209
- };
195
+ return this;
196
+ }
197
+ }
198
+ _a = AsyncIterableQueue;
199
+ /** @internal */
200
+ export class ExpFilter {
201
+ #alpha;
202
+ #max;
203
+ #filtered = undefined;
204
+ constructor(alpha, max) {
205
+ this.#alpha = alpha;
206
+ this.#max = max;
207
+ }
208
+ reset(alpha) {
209
+ if (alpha) {
210
+ this.#alpha = alpha;
211
+ }
212
+ this.#filtered = undefined;
213
+ }
214
+ apply(exp, sample) {
215
+ if (this.#filtered) {
216
+ const a = this.#alpha ** exp;
217
+ this.#filtered = a * this.#filtered + (1 - a) * sample;
218
+ }
219
+ else {
220
+ this.#filtered = sample;
221
+ }
222
+ if (this.#max && this.#filtered > this.#max) {
223
+ this.#filtered = this.#max;
224
+ }
225
+ return this.#filtered;
226
+ }
227
+ get filtered() {
228
+ return this.#filtered;
229
+ }
230
+ set alpha(alpha) {
231
+ this.#alpha = alpha;
232
+ }
233
+ }
234
+ /** @internal */
235
+ export class AudioEnergyFilter {
236
+ #cooldownSeconds;
237
+ #cooldown;
238
+ constructor(cooldownSeconds = 1) {
239
+ this.#cooldownSeconds = cooldownSeconds;
240
+ this.#cooldown = cooldownSeconds;
241
+ }
242
+ pushFrame(frame) {
243
+ const arr = Float32Array.from(frame.data, (x) => x / 32768);
244
+ const rms = (arr.map((x) => x ** 2).reduce((acc, x) => acc + x) / arr.length) ** 0.5;
245
+ if (rms > 0.004) {
246
+ this.#cooldown = this.#cooldownSeconds;
247
+ return true;
248
+ }
249
+ const durationSeconds = frame.samplesPerChannel / frame.sampleRate;
250
+ this.#cooldown -= durationSeconds;
251
+ if (this.#cooldown > 0) {
252
+ return true;
253
+ }
254
+ return false;
210
255
  }
211
256
  }
212
- AsyncIterableQueue.QUEUE_END_MARKER = Symbol('QUEUE_END_MARKER');
213
257
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/vad.d.ts CHANGED
@@ -1,57 +1,61 @@
1
1
  import type { AudioFrame } from '@livekit/rtc-node';
2
+ import { AsyncIterableQueue } from './utils.js';
2
3
  export declare enum VADEventType {
3
- START_OF_SPEECH = 1,
4
- SPEAKING = 2,
5
- END_OF_SPEECH = 3
4
+ START_OF_SPEECH = 0,
5
+ INFERENCE_DONE = 1,
6
+ END_OF_SPEECH = 2
6
7
  }
7
8
  export interface VADEvent {
9
+ /** Type of the VAD event (e.g., start of speech, end of speech, inference done). */
8
10
  type: VADEventType;
9
11
  /**
10
- * Index of the samples of the event (when the event was fired)
12
+ * Index of the audio sample where the event occurred, relative to the inference sample rate.
11
13
  */
12
14
  samplesIndex: number;
15
+ /** Timestamp when the event was fired. */
16
+ timestamp: number;
17
+ /** Duration of the detected speech segment in seconds. */
18
+ speechDuration: number;
19
+ /** Duration of the silence segment preceding or following the speech, in seconds. */
20
+ silenceDuration: number;
13
21
  /**
14
- * Duration of speech, in seconds
22
+ * List of audio frames associated with the speech.
23
+ *
24
+ * @remarks
25
+ * - For `start_of_speech` events, this contains the audio chunks that triggered the detection.
26
+ * - For `inference_done` events, this contains the audio chunks that were processed.
27
+ * - For `end_of_speech` events, this contains the complete user speech.
15
28
  */
16
- duration: number;
17
- speech: AudioFrame[];
29
+ frames: AudioFrame[];
30
+ /** Probability that speech is present (only for `INFERENCE_DONE` events). */
31
+ probability: number;
32
+ /** Time taken to perform the inference, in seconds (only for `INFERENCE_DONE` events). */
33
+ inferenceDuration: number;
34
+ /** Indicates whether speech was detected in the frames. */
35
+ speaking: boolean;
36
+ }
37
+ export interface VADCapabilities {
38
+ updateInterval: number;
18
39
  }
19
40
  export declare abstract class VAD {
41
+ #private;
42
+ constructor(capabilities: VADCapabilities);
43
+ get capabilities(): VADCapabilities;
20
44
  /**
21
45
  * Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.
22
- *
23
- * @param options
24
46
  */
25
- abstract stream({ minSpeakingDuration, minSilenceDuration, paddingDuration, sampleRate, maxBufferedSpeech, }: {
26
- /**
27
- * Minimum duration of speech required to trigger a {@link VADEventType.START_OF_SPEECH} event
28
- */
29
- minSpeakingDuration: number;
30
- /**
31
- * Milliseconds to wait before separating speech chunk.
32
- * Not always precise, generally rounded to the nearest 40ms depending on VAD implementation
33
- */
34
- minSilenceDuration: number;
35
- /**
36
- * Number of frames to pad the start and end of speech with
37
- */
38
- paddingDuration: number;
39
- /**
40
- * Sample rate of inference/processing
41
- */
42
- sampleRate: number;
43
- /**
44
- * Number of seconds the buffer may keep until {@link VADEventType.END_OF_SPEECH} is triggered.
45
- * It is recommended to set this to a positive value, as zero may OOM if the user doesn't stop
46
- * speaking.
47
- */
48
- maxBufferedSpeech: number;
49
- }): VADStream;
47
+ abstract stream(): VADStream;
50
48
  }
51
- export declare abstract class VADStream implements IterableIterator<VADEvent> {
52
- abstract pushFrame(frame: AudioFrame): void;
53
- abstract close(wait: boolean): Promise<void>;
54
- abstract next(): IteratorResult<VADEvent>;
55
- [Symbol.iterator](): VADStream;
49
+ export declare abstract class VADStream implements AsyncIterableIterator<VADEvent> {
50
+ protected static readonly FLUSH_SENTINEL: unique symbol;
51
+ protected input: AsyncIterableQueue<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
52
+ protected queue: AsyncIterableQueue<VADEvent>;
53
+ protected closed: boolean;
54
+ pushFrame(frame: AudioFrame): void;
55
+ flush(): void;
56
+ endInput(): void;
57
+ next(): Promise<IteratorResult<VADEvent>>;
58
+ close(): void;
59
+ [Symbol.asyncIterator](): VADStream;
56
60
  }
57
61
  //# sourceMappingURL=vad.d.ts.map
package/dist/vad.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,oBAAY,YAAY;IACtB,eAAe,IAAI;IACnB,QAAQ,IAAI;IACZ,aAAa,IAAI;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,8BAAsB,GAAG;IACvB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EACd,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,iBAAiB,GAClB,EAAE;QACD;;WAEG;QACH,mBAAmB,EAAE,MAAM,CAAC;QAC5B;;;WAGG;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;WAEG;QACH,eAAe,EAAE,MAAM,CAAC;QACxB;;WAEG;QACH,UAAU,EAAE,MAAM,CAAC;QACnB;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,SAAS;CACd;AAED,8BAAsB,SAAU,YAAW,gBAAgB,CAAC,QAAQ,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAC3C,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC;IACzC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS;CAG/B"}
1
+ {"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,oBAAY,YAAY;IACtB,eAAe,IAAA;IACf,cAAc,IAAA;IACd,aAAa,IAAA;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,IAAI,EAAE,YAAY,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,8BAAsB,GAAG;;gBAEX,YAAY,EAAE,eAAe;IAIzC,IAAI,YAAY,IAAI,eAAe,CAElC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,SAAS;CAC7B;AAED,8BAAsB,SAAU,YAAW,qBAAqB,CAAC,QAAQ,CAAC;IACxE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAA4B;IACpE,SAAS,CAAC,KAAK,mEAA0E;IACzF,SAAS,CAAC,KAAK,+BAAsC;IACrD,SAAS,CAAC,MAAM,UAAS;IAEzB,SAAS,CAAC,KAAK,EAAE,UAAU;IAU3B,KAAK;IAUL,QAAQ;IAUR,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAIzC,KAAK;IAML,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,SAAS;CAGpC"}
package/dist/vad.js CHANGED
@@ -1,13 +1,60 @@
1
+ import { AsyncIterableQueue } from './utils.js';
1
2
  export var VADEventType;
2
3
  (function (VADEventType) {
3
- VADEventType[VADEventType["START_OF_SPEECH"] = 1] = "START_OF_SPEECH";
4
- VADEventType[VADEventType["SPEAKING"] = 2] = "SPEAKING";
5
- VADEventType[VADEventType["END_OF_SPEECH"] = 3] = "END_OF_SPEECH";
4
+ VADEventType[VADEventType["START_OF_SPEECH"] = 0] = "START_OF_SPEECH";
5
+ VADEventType[VADEventType["INFERENCE_DONE"] = 1] = "INFERENCE_DONE";
6
+ VADEventType[VADEventType["END_OF_SPEECH"] = 2] = "END_OF_SPEECH";
6
7
  })(VADEventType || (VADEventType = {}));
7
8
  export class VAD {
9
+ #capabilities;
10
+ constructor(capabilities) {
11
+ this.#capabilities = capabilities;
12
+ }
13
+ get capabilities() {
14
+ return this.#capabilities;
15
+ }
8
16
  }
9
17
  export class VADStream {
10
- [Symbol.iterator]() {
18
+ static FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');
19
+ input = new AsyncIterableQueue();
20
+ queue = new AsyncIterableQueue();
21
+ closed = false;
22
+ pushFrame(frame) {
23
+ if (this.input.closed) {
24
+ throw new Error('Input is closed');
25
+ }
26
+ if (this.closed) {
27
+ throw new Error('Stream is closed');
28
+ }
29
+ this.input.put(frame);
30
+ }
31
+ flush() {
32
+ if (this.input.closed) {
33
+ throw new Error('Input is closed');
34
+ }
35
+ if (this.closed) {
36
+ throw new Error('Stream is closed');
37
+ }
38
+ this.input.put(VADStream.FLUSH_SENTINEL);
39
+ }
40
+ endInput() {
41
+ if (this.input.closed) {
42
+ throw new Error('Input is closed');
43
+ }
44
+ if (this.closed) {
45
+ throw new Error('Stream is closed');
46
+ }
47
+ this.input.close();
48
+ }
49
+ next() {
50
+ return this.queue.next();
51
+ }
52
+ close() {
53
+ this.input.close();
54
+ this.queue.close();
55
+ this.closed = true;
56
+ }
57
+ [Symbol.asyncIterator]() {
11
58
  return this;
12
59
  }
13
60
  }
package/dist/vad.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vad.js","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,qEAAmB,CAAA;IACnB,uDAAY,CAAA;IACZ,iEAAiB,CAAA;AACnB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAeD,MAAM,OAAgB,GAAG;CAqCxB;AAED,MAAM,OAAgB,SAAS;IAI7B,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"vad.js","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,qEAAe,CAAA;IACf,mEAAc,CAAA;IACd,iEAAa,CAAA;AACf,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAoCD,MAAM,OAAgB,GAAG;IACvB,aAAa,CAAkB;IAC/B,YAAY,YAA6B;QACvC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CAMF;AAED,MAAM,OAAgB,SAAS;IACnB,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1D,KAAK,GAAG,IAAI,kBAAkB,EAAgD,CAAC;IAC/E,KAAK,GAAG,IAAI,kBAAkB,EAAY,CAAC;IAC3C,MAAM,GAAG,KAAK,CAAC;IAEzB,SAAS,CAAC,KAAiB;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC"}
package/dist/worker.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- /// <reference types="node" resolution-mode="require"/>
1
+ /// <reference types="node" />
2
2
  import type { TrackSource } from '@livekit/protocol';
3
3
  import { JobType } from '@livekit/protocol';
4
4
  import { EventEmitter } from 'node:events';