mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-23 18:56:12 +01:00
51 lines
2 KiB
TypeScript
51 lines
2 KiB
TypeScript
|
|
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]);
|
||
|
|
}
|