@memori.ai/memori-react 7.34.0 → 7.34.2

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 (42) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/MemoriWidget/MemoriWidget.js +1 -1
  3. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  4. package/dist/components/UploadButton/UploadButton.js +14 -9
  5. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  6. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +16 -6
  7. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  8. package/dist/helpers/utils.d.ts +1 -0
  9. package/dist/helpers/utils.js +10 -1
  10. package/dist/helpers/utils.js.map +1 -1
  11. package/esm/components/MemoriWidget/MemoriWidget.js +2 -2
  12. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  13. package/esm/components/UploadButton/UploadButton.js +14 -9
  14. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  15. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +16 -6
  16. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  17. package/esm/helpers/utils.d.ts +1 -0
  18. package/esm/helpers/utils.js +8 -0
  19. package/esm/helpers/utils.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/components/MemoriWidget/MemoriWidget.tsx +4 -1
  22. package/src/components/UploadButton/UploadButton.tsx +51 -23
  23. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +88 -36
  24. package/src/helpers/utils.ts +13 -0
  25. package/dist/helpers/sanitizer.d.ts +0 -6
  26. package/dist/helpers/sanitizer.js +0 -41
  27. package/dist/helpers/sanitizer.js.map +0 -1
  28. package/dist/helpers/tts/ttsVoiceUtility.d.ts +0 -158
  29. package/dist/helpers/tts/ttsVoiceUtility.js +0 -192
  30. package/dist/helpers/tts/ttsVoiceUtility.js.map +0 -1
  31. package/dist/helpers/tts/useTTS.d.ts +0 -26
  32. package/dist/helpers/tts/useTTS.js +0 -294
  33. package/dist/helpers/tts/useTTS.js.map +0 -1
  34. package/esm/helpers/sanitizer.d.ts +0 -6
  35. package/esm/helpers/sanitizer.js +0 -32
  36. package/esm/helpers/sanitizer.js.map +0 -1
  37. package/esm/helpers/tts/ttsVoiceUtility.d.ts +0 -158
  38. package/esm/helpers/tts/ttsVoiceUtility.js +0 -182
  39. package/esm/helpers/tts/ttsVoiceUtility.js.map +0 -1
  40. package/esm/helpers/tts/useTTS.d.ts +0 -26
  41. package/esm/helpers/tts/useTTS.js +0 -290
  42. package/esm/helpers/tts/useTTS.js.map +0 -1
@@ -1,182 +0,0 @@
1
- export const AZURE_VOICES = {
2
- IT: {
3
- MALE: 'it-IT-DiegoNeural',
4
- FEMALE: 'it-IT-ElsaNeural'
5
- },
6
- DE: {
7
- MALE: 'de-DE-ConradNeural',
8
- FEMALE: 'de-DE-KatjaNeural'
9
- },
10
- EN: {
11
- MALE: 'en-GB-RyanNeural',
12
- FEMALE: 'en-GB-SoniaNeural'
13
- },
14
- ES: {
15
- MALE: 'es-ES-AlvaroNeural',
16
- FEMALE: 'es-ES-ElviraNeural'
17
- },
18
- FR: {
19
- MALE: 'fr-FR-HenriNeural',
20
- FEMALE: 'fr-FR-DeniseNeural'
21
- },
22
- PT: {
23
- MALE: 'pt-PT-DuarteNeural',
24
- FEMALE: 'pt-PT-RaquelNeural'
25
- },
26
- UK: {
27
- MALE: 'uk-UA-OstapNeural',
28
- FEMALE: 'uk-UA-PolinaNeural'
29
- },
30
- RU: {
31
- MALE: 'ru-RU-DmitryNeural',
32
- FEMALE: 'ru-RU-SvetlanaNeural'
33
- },
34
- PL: {
35
- MALE: 'pl-PL-MarekNeural',
36
- FEMALE: 'pl-PL-AgnieszkaNeural'
37
- },
38
- FI: {
39
- MALE: 'fi-FI-HarriNeural',
40
- FEMALE: 'fi-FI-SelmaNeural'
41
- },
42
- EL: {
43
- MALE: 'el-GR-NestorasNeural',
44
- FEMALE: 'el-GR-AthinaNeural'
45
- },
46
- AR: {
47
- MALE: 'ar-SA-HamedNeural',
48
- FEMALE: 'ar-SA-ZariyahNeural'
49
- },
50
- ZH: {
51
- MALE: 'zh-CN-YunxiNeural',
52
- FEMALE: 'zh-CN-XiaoxiaoNeural'
53
- },
54
- JA: {
55
- MALE: 'ja-JP-KeitaNeural',
56
- FEMALE: 'ja-JP-NanamiNeural'
57
- },
58
- };
59
- export const DEFAULT_AZURE_VOICE = {
60
- MALE: 'en-US-GuyNeural',
61
- FEMALE: 'en-US-JennyNeural'
62
- };
63
- export const OPENAI_VOICES = {
64
- ALL: ['alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'],
65
- CHARACTERISTICS: {
66
- 'alloy': { gender: 'NEUTRAL', tone: 'BALANCED' },
67
- 'echo': { gender: 'MALE', tone: 'DEEP' },
68
- 'fable': { gender: 'FEMALE', tone: 'EXPRESSIVE' },
69
- 'onyx': { gender: 'MALE', tone: 'AUTHORITATIVE' },
70
- 'nova': { gender: 'FEMALE', tone: 'FRIENDLY' },
71
- 'shimmer': { gender: 'FEMALE', tone: 'BRIGHT' }
72
- },
73
- RECOMMENDED: {
74
- DEFAULT: {
75
- MALE: 'onyx',
76
- FEMALE: 'nova',
77
- NEUTRAL: 'alloy'
78
- },
79
- IT: {
80
- MALE: 'echo',
81
- FEMALE: 'nova'
82
- },
83
- ES: {
84
- MALE: 'echo',
85
- FEMALE: 'shimmer'
86
- },
87
- FR: {
88
- MALE: 'echo',
89
- FEMALE: 'fable'
90
- },
91
- PT: {
92
- MALE: 'onyx',
93
- FEMALE: 'shimmer'
94
- },
95
- DE: {
96
- MALE: 'onyx',
97
- FEMALE: 'fable'
98
- },
99
- EN: {
100
- MALE: 'echo',
101
- FEMALE: 'nova'
102
- },
103
- ZH: {
104
- MALE: 'echo',
105
- FEMALE: 'shimmer'
106
- },
107
- JA: {
108
- MALE: 'echo',
109
- FEMALE: 'nova'
110
- },
111
- RU: {
112
- MALE: 'onyx',
113
- FEMALE: 'fable'
114
- }
115
- }
116
- };
117
- export const DEFAULT_OPENAI_VOICE = 'alloy';
118
- export const PROVIDER_CONFIG = {
119
- azure: {
120
- defaultVoice: DEFAULT_AZURE_VOICE.FEMALE,
121
- defaultRegion: 'westeurope',
122
- defaultModel: null,
123
- endpoint: (region) => `https://${region}.tts.speech.microsoft.com/cognitiveservices/v1`,
124
- outputFormat: 'audio-24khz-48kbitrate-mono-mp3'
125
- },
126
- openai: {
127
- defaultVoice: DEFAULT_OPENAI_VOICE,
128
- defaultModel: 'tts-1',
129
- voices: OPENAI_VOICES.ALL,
130
- endpoint: 'https://api.openai.com/v1/audio/speech'
131
- }
132
- };
133
- export function getTTSVoice(lang, provider = 'azure', voiceType = 'FEMALE') {
134
- const voiceLang = (lang || 'EN').toUpperCase();
135
- if (provider.toLowerCase() === 'openai') {
136
- const langMap = OPENAI_VOICES.RECOMMENDED[voiceLang] || OPENAI_VOICES.RECOMMENDED.DEFAULT;
137
- return langMap[voiceType] || OPENAI_VOICES.RECOMMENDED.DEFAULT[voiceType] || DEFAULT_OPENAI_VOICE;
138
- }
139
- else {
140
- const langVoices = AZURE_VOICES[voiceLang] || DEFAULT_AZURE_VOICE;
141
- return langVoices[voiceType] || langVoices.FEMALE || DEFAULT_AZURE_VOICE.FEMALE;
142
- }
143
- }
144
- export function isValidVoice(voice, provider) {
145
- if (provider.toLowerCase() === 'openai') {
146
- return OPENAI_VOICES.ALL.includes(voice);
147
- }
148
- return /^[a-z]{2}-[A-Z]{2}-[A-Za-z]+Neural$/.test(voice);
149
- }
150
- export function getDefaultVoice(provider, voiceType = 'FEMALE') {
151
- if (provider.toLowerCase() === 'openai') {
152
- return OPENAI_VOICES.RECOMMENDED.DEFAULT[voiceType] || DEFAULT_OPENAI_VOICE;
153
- }
154
- else {
155
- return DEFAULT_AZURE_VOICE[voiceType] || DEFAULT_AZURE_VOICE.FEMALE;
156
- }
157
- }
158
- export function getDefaultRegion(provider) {
159
- return PROVIDER_CONFIG[provider].defaultRegion || null;
160
- }
161
- export function getDefaultModel(provider) {
162
- return PROVIDER_CONFIG[provider].defaultModel || null;
163
- }
164
- export function ensureValidVoice(voice, provider, voiceType = 'FEMALE') {
165
- if (!voice || !isValidVoice(voice, provider)) {
166
- return getDefaultVoice(provider, voiceType);
167
- }
168
- return voice;
169
- }
170
- export function createTTSConfiguration(config) {
171
- const provider = config.provider || 'azure';
172
- const voiceType = config.voiceType || 'FEMALE';
173
- return {
174
- provider,
175
- voice: config.voice || getDefaultVoice(provider, voiceType),
176
- model: config.model || getDefaultModel(provider),
177
- region: config.region || getDefaultRegion(provider),
178
- tenant: config.tenant || 'www.aisuru.com',
179
- voiceType
180
- };
181
- }
182
- //# sourceMappingURL=ttsVoiceUtility.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ttsVoiceUtility.js","sourceRoot":"","sources":["../../../src/helpers/tts/ttsVoiceUtility.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /// <reference types="react" />
2
- export interface TTSConfig {
3
- provider: 'azure' | 'openai';
4
- voice?: string;
5
- model?: string;
6
- region?: string;
7
- tenant?: string;
8
- }
9
- export interface UseTTSOptions {
10
- apiUrl?: string;
11
- continuousSpeech?: boolean;
12
- onEndSpeakStartListen?: () => void;
13
- preview?: boolean;
14
- disableSpeaker?: boolean;
15
- }
16
- export declare function useTTS(config: TTSConfig, options?: UseTTSOptions, autoStart?: boolean, defaultEnableAudio?: boolean, defaultSpeakerActive?: boolean): {
17
- speak: (text: string) => Promise<void>;
18
- stop: () => void;
19
- isPlaying: boolean;
20
- speakerMuted: boolean;
21
- toggleMute: (mute?: boolean) => void;
22
- hasUserActivatedSpeak: boolean;
23
- setHasUserActivatedSpeak: import("react").Dispatch<import("react").SetStateAction<boolean>>;
24
- error: Error | null;
25
- setError: import("react").Dispatch<import("react").SetStateAction<Error | null>>;
26
- };
@@ -1,290 +0,0 @@
1
- import { useState, useCallback, useEffect, useRef } from 'react';
2
- import { sanitizeText } from '../sanitizer';
3
- import { getLocalConfig } from '../configuration';
4
- import { useViseme } from '../../context/visemeContext';
5
- export function useTTS(config, options = {}, autoStart = false, defaultEnableAudio = true, defaultSpeakerActive = true) {
6
- const [isPlaying, setIsPlaying] = useState(false);
7
- const [speakerMuted, setSpeakerMuted] = useState(getLocalConfig('muteSpeaker', !defaultEnableAudio || !defaultSpeakerActive || autoStart));
8
- const { addViseme, resetVisemeQueue, startProcessing, stopProcessing, } = useViseme();
9
- const [hasUserActivatedSpeak, setHasUserActivatedSpeak] = useState(false);
10
- const [error, setError] = useState(null);
11
- const audioRef = useRef(null);
12
- const audioWrapperRef = useRef(null);
13
- const globalSpeakRef = useRef(null);
14
- const visemeLoadedRef = useRef(false);
15
- const apiUrl = options.apiUrl || '/api/tts';
16
- const loadVisemeData = useCallback((visemeData) => {
17
- resetVisemeQueue();
18
- visemeLoadedRef.current = false;
19
- if (visemeData && visemeData.length > 0) {
20
- console.log(`[useTTS] Loading ${visemeData.length} viseme events`);
21
- visemeData.forEach(viseme => {
22
- addViseme(viseme.visemeId, viseme.audioOffset);
23
- });
24
- visemeLoadedRef.current = true;
25
- return true;
26
- }
27
- else {
28
- console.warn('[useTTS] No viseme data available');
29
- return false;
30
- }
31
- }, [addViseme, resetVisemeQueue]);
32
- const createAudioWrapper = useCallback(() => {
33
- if (!audioRef.current) {
34
- console.warn('[useTTS] Cannot create audio wrapper: audio element is null');
35
- return null;
36
- }
37
- const wrapper = {
38
- state: 'running',
39
- onstatechange: null,
40
- get currentTime() {
41
- return audioRef.current ? audioRef.current.currentTime : 0;
42
- }
43
- };
44
- const handlePause = () => {
45
- wrapper.state = 'suspended';
46
- if (wrapper.onstatechange) {
47
- wrapper.onstatechange.call(null, new Event('statechange'));
48
- }
49
- };
50
- const handlePlay = () => {
51
- wrapper.state = 'running';
52
- if (wrapper.onstatechange) {
53
- wrapper.onstatechange.call(null, new Event('statechange'));
54
- }
55
- };
56
- const handleEnded = () => {
57
- wrapper.state = 'closed';
58
- if (wrapper.onstatechange) {
59
- wrapper.onstatechange.call(null, new Event('statechange'));
60
- }
61
- };
62
- audioRef.current.addEventListener('pause', handlePause);
63
- audioRef.current.addEventListener('play', handlePlay);
64
- audioRef.current.addEventListener('ended', handleEnded);
65
- const cleanupEventListeners = () => {
66
- if (audioRef.current) {
67
- audioRef.current.removeEventListener('pause', handlePause);
68
- audioRef.current.removeEventListener('play', handlePlay);
69
- audioRef.current.removeEventListener('ended', handleEnded);
70
- }
71
- };
72
- wrapper.cleanup = cleanupEventListeners;
73
- console.log('[useTTS] Created audio wrapper for viseme processing');
74
- return wrapper;
75
- }, []);
76
- const cleanup = useCallback(() => {
77
- var _a;
78
- console.log('[useTTS] Cleaning up audio and viseme resources');
79
- if (audioWrapperRef.current && audioWrapperRef.current.cleanup) {
80
- audioWrapperRef.current.cleanup();
81
- console.log('[useTTS] Cleaned up audio wrapper event listeners');
82
- }
83
- audioWrapperRef.current = null;
84
- stopProcessing();
85
- console.log('[useTTS] Stopped viseme processing');
86
- if ((_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.src) {
87
- URL.revokeObjectURL(audioRef.current.src);
88
- console.log('[useTTS] Revoked audio object URL');
89
- audioRef.current = null;
90
- }
91
- visemeLoadedRef.current = false;
92
- }, [stopProcessing]);
93
- const stop = useCallback(() => {
94
- console.log('[useTTS] Stopping audio playback');
95
- if (audioRef.current) {
96
- audioRef.current.pause();
97
- audioRef.current.currentTime = 0;
98
- }
99
- setIsPlaying(false);
100
- cleanup();
101
- }, [cleanup]);
102
- const emitEndSpeakEvent = useCallback(() => {
103
- console.log('[useTTS] Emitting end speak event');
104
- const e = new CustomEvent('MemoriEndSpeak');
105
- document.dispatchEvent(e);
106
- if (options.continuousSpeech && options.onEndSpeakStartListen) {
107
- console.log('[useTTS] Starting continuous speech listening');
108
- options.onEndSpeakStartListen();
109
- }
110
- }, [options.continuousSpeech, options.onEndSpeakStartListen]);
111
- const speak = useCallback(async (text) => {
112
- console.log('[useTTS] Starting speech synthesis for text:', text);
113
- if (!text || options.preview || speakerMuted) {
114
- console.log('[useTTS] Speech cancelled - empty text, preview mode, or muted');
115
- emitEndSpeakEvent();
116
- return;
117
- }
118
- if (!hasUserActivatedSpeak) {
119
- console.log('[useTTS] First user activation of speak');
120
- setHasUserActivatedSpeak(true);
121
- }
122
- try {
123
- stop();
124
- setIsPlaying(true);
125
- setError(null);
126
- const processedText = sanitizeText(text);
127
- console.log('[useTTS] Processed text:', processedText);
128
- console.log('[useTTS] Making API request to:', 'http://localhost:3000/api/tts', config.voice);
129
- const response = await fetch('http://localhost:3000/api/tts', {
130
- method: 'POST',
131
- headers: {
132
- 'Content-Type': 'application/json',
133
- },
134
- body: JSON.stringify({
135
- text: processedText,
136
- tenant: config.tenant || 'www.aisuru.com',
137
- voice: config.voice,
138
- model: config.model || 'tts-1',
139
- region: config.region,
140
- provider: config.provider,
141
- includeVisemes: true,
142
- }),
143
- });
144
- if (!response.ok) {
145
- const errorData = await response.json().catch(() => ({}));
146
- throw new Error(errorData.error || `API error: ${response.status}`);
147
- }
148
- console.log('[useTTS] Checking for viseme data in response headers');
149
- const visemeDataHeader = response.headers.get('X-Viseme-Data');
150
- console.log('[useTTS] Viseme data header present:', visemeDataHeader ? 'Yes' : 'No');
151
- let hasVisemeData = false;
152
- if (visemeDataHeader) {
153
- console.log('[useTTS] Found viseme data header, attempting to parse');
154
- try {
155
- const visemeData = JSON.parse(visemeDataHeader);
156
- console.log('[useTTS] Successfully parsed viseme data, entries:', visemeData.length);
157
- hasVisemeData = loadVisemeData(visemeData);
158
- console.log('[useTTS] Loaded viseme data into queue:', hasVisemeData);
159
- }
160
- catch (err) {
161
- console.error('[useTTS] Failed to parse viseme data:', err);
162
- }
163
- }
164
- else {
165
- console.log('[useTTS] No viseme data found in response headers');
166
- }
167
- console.log('[useTTS] Getting audio blob from response');
168
- const audioBlob = await response.blob();
169
- console.log('[useTTS] Received audio blob of size:', audioBlob.size);
170
- const audioUrl = URL.createObjectURL(audioBlob);
171
- console.log('[useTTS] Created audio URL:', audioUrl);
172
- console.log('[useTTS] Creating new Audio element');
173
- audioRef.current = new Audio(audioUrl);
174
- console.log('[useTTS] Configuring audio event handlers');
175
- if (hasVisemeData) {
176
- audioWrapperRef.current = createAudioWrapper();
177
- }
178
- audioRef.current.oncanplaythrough = async () => {
179
- var _a;
180
- console.log('[useTTS] Audio can play through, ready to start playback');
181
- try {
182
- if (hasVisemeData && audioWrapperRef.current) {
183
- console.log('[useTTS] Starting viseme processing before audio playback');
184
- startProcessing(audioWrapperRef.current);
185
- console.log('[useTTS] Viseme processing started successfully');
186
- }
187
- console.log('[useTTS] Starting audio playback');
188
- await ((_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.play());
189
- console.log('[useTTS] Audio playback started successfully');
190
- if (audioRef.current) {
191
- audioRef.current.oncanplaythrough = null;
192
- }
193
- }
194
- catch (e) {
195
- console.error('[useTTS] Error in canplaythrough handler:', e);
196
- cleanup();
197
- emitEndSpeakEvent();
198
- }
199
- };
200
- audioRef.current.onended = () => {
201
- console.log('[useTTS] Audio playback ended normally');
202
- setIsPlaying(false);
203
- cleanup();
204
- emitEndSpeakEvent();
205
- };
206
- audioRef.current.onerror = e => {
207
- console.error('[useTTS] Audio playback error:', e);
208
- setIsPlaying(false);
209
- cleanup();
210
- const errorMsg = new Error(`Audio error: ${e}`);
211
- setError(errorMsg);
212
- emitEndSpeakEvent();
213
- };
214
- console.log('[useTTS] Beginning audio load');
215
- audioRef.current.load();
216
- }
217
- catch (err) {
218
- console.error('[useTTS] Error during speech synthesis:', err);
219
- setIsPlaying(false);
220
- cleanup();
221
- const errorMsg = err instanceof Error ? err : new Error(String(err));
222
- setError(errorMsg);
223
- try {
224
- if ('speechSynthesis' in window) {
225
- console.log('[useTTS] Attempting browser fallback synthesis');
226
- const utterance = new SpeechSynthesisUtterance(sanitizeText(text));
227
- window.speechSynthesis.speak(utterance);
228
- }
229
- }
230
- catch (fallbackErr) {
231
- console.error('[useTTS] Browser fallback synthesis error:', fallbackErr);
232
- }
233
- emitEndSpeakEvent();
234
- }
235
- }, [
236
- config,
237
- speakerMuted,
238
- options.preview,
239
- hasUserActivatedSpeak,
240
- stop,
241
- cleanup,
242
- loadVisemeData,
243
- createAudioWrapper,
244
- startProcessing,
245
- emitEndSpeakEvent,
246
- ]);
247
- const toggleMute = useCallback((mute) => {
248
- const newMuteState = mute !== undefined ? mute : !speakerMuted;
249
- console.log('[useTTS] Toggling mute state to:', newMuteState);
250
- setSpeakerMuted(newMuteState);
251
- if (newMuteState && isPlaying) {
252
- stop();
253
- }
254
- }, [speakerMuted, isPlaying, stop]);
255
- useEffect(() => {
256
- console.log('[useTTS] Updating global memoriSpeaking state:', isPlaying);
257
- if (typeof window !== 'undefined') {
258
- window.memoriSpeaking = isPlaying;
259
- }
260
- }, [isPlaying]);
261
- useEffect(() => {
262
- if (typeof window !== 'undefined') {
263
- console.log('[useTTS] Setting up global speak function');
264
- globalSpeakRef.current = window.speak;
265
- window.speak = speak;
266
- return () => {
267
- console.log('[useTTS] Cleaning up global speak function');
268
- window.speak = globalSpeakRef.current;
269
- };
270
- }
271
- }, [speak]);
272
- useEffect(() => {
273
- return () => {
274
- console.log('[useTTS] Component unmounting, cleaning up');
275
- stop();
276
- };
277
- }, [stop]);
278
- return {
279
- speak,
280
- stop,
281
- isPlaying,
282
- speakerMuted,
283
- toggleMute,
284
- hasUserActivatedSpeak,
285
- setHasUserActivatedSpeak,
286
- error,
287
- setError,
288
- };
289
- }
290
- //# sourceMappingURL=useTTS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTTS.js","sourceRoot":"","sources":["../../../src/helpers/tts/useTTS.ts"],"names":[],"mappings":"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"}