ug-js-sdk 3.0.50 → 3.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.d.ts +7 -0
- package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.js +16 -0
- package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.js.map +1 -0
- package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.d.ts +10 -0
- package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.js +16 -0
- package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.js.map +1 -0
- package/dist/ug-core/__tests__/__mocks__/uuid.d.ts +2 -0
- package/dist/ug-core/__tests__/__mocks__/uuid.js +11 -0
- package/dist/ug-core/__tests__/__mocks__/uuid.js.map +1 -0
- package/dist/ug-core/__tests__/__mocks__/vad-web.d.ts +11 -0
- package/dist/ug-core/__tests__/__mocks__/vad-web.js +19 -0
- package/dist/ug-core/__tests__/__mocks__/vad-web.js.map +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.d.ts +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.js +67 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.js.map +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.d.ts +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.js +185 -0
- package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.js.map +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.d.ts +1 -0
- package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.js +168 -0
- package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.js.map +1 -0
- package/dist/ug-core/__tests__/core/EventEmitter.test.d.ts +1 -0
- package/dist/ug-core/__tests__/core/EventEmitter.test.js +211 -0
- package/dist/ug-core/__tests__/core/EventEmitter.test.js.map +1 -0
- package/dist/ug-core/__tests__/core/Logger.test.d.ts +1 -0
- package/dist/ug-core/__tests__/core/Logger.test.js +162 -0
- package/dist/ug-core/__tests__/core/Logger.test.js.map +1 -0
- package/dist/ug-core/__tests__/core/localStorage.test.d.ts +1 -0
- package/dist/ug-core/__tests__/core/localStorage.test.js +172 -0
- package/dist/ug-core/__tests__/core/localStorage.test.js.map +1 -0
- package/dist/ug-core/__tests__/network/WebSocketConnection.test.d.ts +1 -0
- package/dist/ug-core/__tests__/network/WebSocketConnection.test.js +193 -0
- package/dist/ug-core/__tests__/network/WebSocketConnection.test.js.map +1 -0
- package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.d.ts +1 -0
- package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.js +228 -0
- package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.js.map +1 -0
- package/dist/ug-core/__tests__/setup.d.ts +4 -0
- package/dist/ug-core/__tests__/setup.js +8 -0
- package/dist/ug-core/__tests__/setup.js.map +1 -0
- package/dist/ug-core/conversation-manager/ConversationManager.js +14 -0
- package/dist/ug-core/conversation-manager/ConversationManager.js.map +1 -1
- package/dist/ug-core/conversation-manager/ErrorRetryHandler.d.ts +1 -0
- package/dist/ug-core/conversation-manager/ErrorRetryHandler.js +3 -0
- package/dist/ug-core/conversation-manager/ErrorRetryHandler.js.map +1 -1
- package/dist/ug-core/conversation-manager/types.d.ts +51 -6
- package/dist/ug-core/network/ConversationNetwork.js +12 -6
- package/dist/ug-core/network/ConversationNetwork.js.map +1 -1
- package/dist/ug-core/playback-manager/PlaybackManager.d.ts +104 -0
- package/dist/ug-core/playback-manager/PlaybackManager.js +121 -4
- package/dist/ug-core/playback-manager/PlaybackManager.js.map +1 -1
- package/dist/ug-core/playback-manager/audio-player/AudioPlayer.d.ts +156 -0
- package/dist/ug-core/playback-manager/audio-player/AudioPlayer.js +156 -0
- package/dist/ug-core/playback-manager/audio-player/AudioPlayer.js.map +1 -1
- package/dist/ug-core/playback-manager/subtitle-manager/SubtitleManager.js +3 -1
- package/dist/ug-core/playback-manager/subtitle-manager/SubtitleManager.js.map +1 -1
- package/dist/ug-core/types/index.d.ts +34 -3
- package/dist/ug-core/user-input-manager/AudioRecorder.d.ts +49 -0
- package/dist/ug-core/user-input-manager/AudioRecorder.js +39 -1
- package/dist/ug-core/user-input-manager/AudioRecorder.js.map +1 -1
- package/dist/ug-core/user-input-manager/UserInputManager.d.ts +82 -6
- package/dist/ug-core/user-input-manager/UserInputManager.js +82 -6
- package/dist/ug-core/user-input-manager/UserInputManager.js.map +1 -1
- package/dist/ug-core/user-input-manager/VADManager.d.ts +62 -0
- package/dist/ug-core/user-input-manager/VADManager.js +121 -15
- package/dist/ug-core/user-input-manager/VADManager.js.map +1 -1
- package/dist/ug-js-sdk.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,53 @@
|
|
|
1
1
|
import { EventEmitter } from '../core/EventEmitter';
|
|
2
2
|
import { DefaultLogger, StylePurple } from '../core/Logger';
|
|
3
3
|
import { MicVAD } from '@ricky0123/vad-web';
|
|
4
|
+
/**
|
|
5
|
+
* Events emitted by the VADManager.
|
|
6
|
+
*/
|
|
4
7
|
export const VadManagerEvents = {
|
|
8
|
+
/** Emitted when voice activity state changes (speech start/end) */
|
|
5
9
|
VoiceActivity: 'voiceActivity',
|
|
10
|
+
/** Emitted after silence timeout - indicates user has stopped speaking */
|
|
6
11
|
Silence: 'silence',
|
|
7
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Voice Activity Detection (VAD) manager using Silero VAD model.
|
|
15
|
+
*
|
|
16
|
+
* Uses the Silero VAD neural network model via ONNX Runtime Web to detect
|
|
17
|
+
* when the user starts and stops speaking. This enables automatic turn-taking
|
|
18
|
+
* in voice conversations without requiring push-to-talk.
|
|
19
|
+
*
|
|
20
|
+
* The VAD runs entirely in the browser using WebAssembly for performance.
|
|
21
|
+
* No audio is sent to any server for speech detection.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const vad = new VADManager(
|
|
26
|
+
* 300, // silenceTimeoutMs - time after speech ends before emitting Silence
|
|
27
|
+
* 0.5, // positiveSpeechThreshold - probability threshold to detect speech
|
|
28
|
+
* 0.35, // negativeSpeechThreshold - probability threshold to end speech
|
|
29
|
+
* 100 // minSpeechMs - minimum speech duration to avoid misfires
|
|
30
|
+
* )
|
|
31
|
+
*
|
|
32
|
+
* vad.on(VadManagerEvents.VoiceActivity, (event) => {
|
|
33
|
+
* if (event.isSpeaking) {
|
|
34
|
+
* console.log('User started speaking')
|
|
35
|
+
* } else {
|
|
36
|
+
* console.log('User stopped speaking')
|
|
37
|
+
* }
|
|
38
|
+
* })
|
|
39
|
+
*
|
|
40
|
+
* vad.on(VadManagerEvents.Silence, () => {
|
|
41
|
+
* console.log('Silence timeout - user turn complete')
|
|
42
|
+
* })
|
|
43
|
+
*
|
|
44
|
+
* await vad.initialize(mediaStream)
|
|
45
|
+
* vad.startAnalysis()
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @fires VadManagerEvents.VoiceActivity - When speech starts or ends
|
|
49
|
+
* @fires VadManagerEvents.Silence - After silence timeout (user turn complete)
|
|
50
|
+
*/
|
|
8
51
|
export class VADManager extends EventEmitter {
|
|
9
52
|
vadModel = null;
|
|
10
53
|
silenceTimer = null;
|
|
@@ -14,8 +57,15 @@ export class VADManager extends EventEmitter {
|
|
|
14
57
|
minSpeechMs;
|
|
15
58
|
isDisposed = false;
|
|
16
59
|
currentStream = null;
|
|
17
|
-
|
|
18
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new VADManager instance.
|
|
62
|
+
*
|
|
63
|
+
* @param silenceTimeoutMs - Time in ms after speech ends before emitting Silence event (default: 300)
|
|
64
|
+
* @param positiveSpeechThreshold - Probability threshold to start speech detection, 0-1 (default: 0.5)
|
|
65
|
+
* @param negativeSpeechThreshold - Probability threshold to end speech detection, 0-1 (default: 0.35)
|
|
66
|
+
* @param minSpeechMs - Minimum speech duration in ms to avoid misfires (default: 100)
|
|
67
|
+
*/
|
|
68
|
+
constructor(silenceTimeoutMs = 300, positiveSpeechThreshold = 0.5, negativeSpeechThreshold = 0.35, minSpeechMs = 100) {
|
|
19
69
|
const logger = new DefaultLogger({ category: '🎤 VADManager', style: StylePurple });
|
|
20
70
|
super(logger);
|
|
21
71
|
this.silenceTimeoutMs = silenceTimeoutMs;
|
|
@@ -33,7 +83,12 @@ export class VADManager extends EventEmitter {
|
|
|
33
83
|
this.logger.debug('You may need to close the browser console for this to initialize');
|
|
34
84
|
const vadModel = await MicVAD.new({
|
|
35
85
|
// New API uses callbacks for stream management
|
|
36
|
-
getStream: async () =>
|
|
86
|
+
getStream: async () => {
|
|
87
|
+
if (!this.currentStream) {
|
|
88
|
+
throw new Error('Stream is no longer available - VADManager may have been disposed');
|
|
89
|
+
}
|
|
90
|
+
return this.currentStream;
|
|
91
|
+
},
|
|
37
92
|
pauseStream: async () => {
|
|
38
93
|
// We don't stop the stream since it's managed externally
|
|
39
94
|
},
|
|
@@ -75,28 +130,69 @@ export class VADManager extends EventEmitter {
|
|
|
75
130
|
// Check if disposed while waiting for initialization
|
|
76
131
|
if (this.isDisposed) {
|
|
77
132
|
this.logger.debug('VADManager disposed during initialization, cleaning up model');
|
|
78
|
-
|
|
79
|
-
vadModel.destroy
|
|
133
|
+
try {
|
|
134
|
+
if (typeof vadModel.destroy === 'function') {
|
|
135
|
+
vadModel.destroy();
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
vadModel.pause();
|
|
139
|
+
}
|
|
80
140
|
}
|
|
81
|
-
|
|
82
|
-
|
|
141
|
+
catch (error) {
|
|
142
|
+
// Silently ignore - VAD may have partially initialized state (null stream/context)
|
|
143
|
+
this.logger.debug('Error cleaning up VAD model after disposal during init', error);
|
|
83
144
|
}
|
|
84
145
|
return;
|
|
85
146
|
}
|
|
86
147
|
this.vadModel = vadModel;
|
|
87
148
|
this.logger.debug(`VAD Manager initialized (MicVAD) with silenceTimeoutMs=${this.silenceTimeoutMs}, positiveSpeechThreshold=${this.positiveSpeechThreshold}, negativeSpeechThreshold=${this.negativeSpeechThreshold}, minSpeechMs=${this.minSpeechMs}`);
|
|
88
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Starts voice activity detection analysis.
|
|
152
|
+
*
|
|
153
|
+
* Must be called after `initialize()`. The VAD will begin analyzing
|
|
154
|
+
* the audio stream and emitting VoiceActivity events.
|
|
155
|
+
*/
|
|
89
156
|
startAnalysis() {
|
|
90
|
-
|
|
157
|
+
// Guard against calling start when VAD is not fully initialized or already disposed
|
|
158
|
+
if (this.isDisposed) {
|
|
159
|
+
this.logger.debug('Cannot start VAD analysis - VADManager is disposed');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (!this.vadModel) {
|
|
163
|
+
this.logger.debug('Cannot start VAD analysis - VAD model not initialized');
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (!this.currentStream) {
|
|
167
|
+
this.logger.debug('Cannot start VAD analysis - no active stream');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
91
171
|
this.vadModel.start();
|
|
92
172
|
this.logger.debug('VAD analysis started (MicVAD)');
|
|
93
173
|
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
// Gracefully handle errors when VAD is in an inconsistent state
|
|
176
|
+
// This can happen during conversation restart/recovery when the stream
|
|
177
|
+
// was cleaned up but the VAD model still exists
|
|
178
|
+
this.logger.warn('Error starting VAD analysis, VAD may be in inconsistent state:', error);
|
|
179
|
+
}
|
|
94
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Stops voice activity detection analysis.
|
|
183
|
+
*
|
|
184
|
+
* Pauses the VAD model and clears any pending silence timers.
|
|
185
|
+
*/
|
|
95
186
|
stopAnalysis() {
|
|
96
187
|
this.clearSilenceTimer();
|
|
97
188
|
if (this.vadModel) {
|
|
98
|
-
|
|
99
|
-
|
|
189
|
+
try {
|
|
190
|
+
this.vadModel.pause();
|
|
191
|
+
this.logger.debug('VAD analysis stopped (MicVAD)');
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
// Silently ignore errors during pause - vad-web may already be partially cleaned up
|
|
195
|
+
}
|
|
100
196
|
}
|
|
101
197
|
}
|
|
102
198
|
startSilenceTimer() {
|
|
@@ -117,17 +213,27 @@ export class VADManager extends EventEmitter {
|
|
|
117
213
|
try {
|
|
118
214
|
this.logger.debug('Disposing VADManager...');
|
|
119
215
|
this.isDisposed = true;
|
|
120
|
-
|
|
216
|
+
// Clear timer and listeners first
|
|
217
|
+
this.clearSilenceTimer();
|
|
218
|
+
this.removeAllListeners();
|
|
219
|
+
// Clear stream reference before disposing model to prevent race conditions
|
|
220
|
+
this.currentStream = null;
|
|
121
221
|
// Clean up VAD model
|
|
122
222
|
if (this.vadModel) {
|
|
223
|
+
// Try to pause first (stopAnalysis now handles errors gracefully)
|
|
224
|
+
this.stopAnalysis();
|
|
225
|
+
// Then try to destroy
|
|
123
226
|
if (typeof this.vadModel.destroy === 'function') {
|
|
124
|
-
|
|
227
|
+
try {
|
|
228
|
+
this.vadModel.destroy();
|
|
229
|
+
this.logger.debug('VAD model destroyed');
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
// Silently ignore errors during destroy - vad-web may already be partially cleaned up
|
|
233
|
+
}
|
|
125
234
|
}
|
|
126
235
|
this.vadModel = null;
|
|
127
236
|
}
|
|
128
|
-
this.currentStream = null;
|
|
129
|
-
this.clearSilenceTimer();
|
|
130
|
-
this.removeAllListeners();
|
|
131
237
|
this.logger.debug('VADManager disposed');
|
|
132
238
|
}
|
|
133
239
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VADManager.js","sourceRoot":"","sources":["../../../src/ug-core/user-input-manager/VADManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI3D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;CACV,CAAA;AAEV,MAAM,OAAO,UAAW,SAAQ,YAAY;IAClC,QAAQ,GAAQ,IAAI,CAAA;IACpB,YAAY,GAAkB,IAAI,CAAA;IAClC,gBAAgB,CAAQ;IACxB,uBAAuB,CAAQ;IAC/B,uBAAuB,CAAQ;IAC/B,WAAW,CAAQ;IACnB,UAAU,GAAG,KAAK,CAAA;IAClB,aAAa,GAAuB,IAAI,CAAA;IAEhD,YACE,mBAA2B,GAAG,EAC9B,0BAAkC,GAAG,EACrC,0BAAkC,IAAI,EACtC,cAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"VADManager.js","sourceRoot":"","sources":["../../../src/ug-core/user-input-manager/VADManager.ts"],"names":[],"mappings":"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"}
|