File size: 2,079 Bytes
f0743f4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import { useEffect, useRef } from 'react';
import { useSetRecoilState } from 'recoil';
import { useGetCustomConfigSpeechQuery } from 'librechat-data-provider/react-query';
import { logger } from '~/utils';
import store from '~/store';
/**
* Initializes speech-related Recoil values from the server-side custom
* configuration on first load (only when the user is authenticated)
*/
export default function useSpeechSettingsInit(isAuthenticated: boolean) {
const { data } = useGetCustomConfigSpeechQuery({ enabled: isAuthenticated });
const setters = useRef({
conversationMode: useSetRecoilState(store.conversationMode),
advancedMode: useSetRecoilState(store.advancedMode),
speechToText: useSetRecoilState(store.speechToText),
textToSpeech: useSetRecoilState(store.textToSpeech),
cacheTTS: useSetRecoilState(store.cacheTTS),
engineSTT: useSetRecoilState(store.engineSTT),
languageSTT: useSetRecoilState(store.languageSTT),
autoTranscribeAudio: useSetRecoilState(store.autoTranscribeAudio),
decibelValue: useSetRecoilState(store.decibelValue),
autoSendText: useSetRecoilState(store.autoSendText),
engineTTS: useSetRecoilState(store.engineTTS),
voice: useSetRecoilState(store.voice),
cloudBrowserVoices: useSetRecoilState(store.cloudBrowserVoices),
languageTTS: useSetRecoilState(store.languageTTS),
automaticPlayback: useSetRecoilState(store.automaticPlayback),
playbackRate: useSetRecoilState(store.playbackRate),
}).current;
useEffect(() => {
if (!isAuthenticated || !data || data.message === 'not_found') return;
logger.log('Initializing speech settings from config:', data);
Object.entries(data).forEach(([key, value]) => {
if (key === 'sttExternal' || key === 'ttsExternal') return;
if (localStorage.getItem(key) !== null) return;
const setter = setters[key as keyof typeof setters];
if (setter) {
logger.log(`Setting default speech setting: ${key} = ${value}`);
setter(value as any);
}
});
}, [isAuthenticated, data, setters]);
}
|