🗣️ fix: get speechTab config; feature: not overriding variables selected by user (#3282)

* fix(Speech): speechTab settings update

* fix: get speech config; refactor: moved everything to types and removed file types; feature: not overriding variables selected by user
This commit is contained in:
Marco Beretta 2024-07-10 22:38:36 +02:00 committed by GitHub
parent cd00df69bb
commit f959ee302c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 30 additions and 16 deletions

View file

@ -26,6 +26,7 @@ async function getCustomConfigSpeech(req, res) {
if (ttsSchema.advancedMode !== undefined) { if (ttsSchema.advancedMode !== undefined) {
settings.advancedMode = ttsSchema.advancedMode; settings.advancedMode = ttsSchema.advancedMode;
} }
if (ttsSchema.speechToText) { if (ttsSchema.speechToText) {
for (const key in ttsSchema.speechToText) { for (const key in ttsSchema.speechToText) {
if (ttsSchema.speechToText[key] !== undefined) { if (ttsSchema.speechToText[key] !== undefined) {
@ -33,6 +34,7 @@ async function getCustomConfigSpeech(req, res) {
} }
} }
} }
if (ttsSchema.textToSpeech) { if (ttsSchema.textToSpeech) {
for (const key in ttsSchema.textToSpeech) { for (const key in ttsSchema.textToSpeech) {
if (ttsSchema.textToSpeech[key] !== undefined) { if (ttsSchema.textToSpeech[key] !== undefined) {
@ -41,7 +43,7 @@ async function getCustomConfigSpeech(req, res) {
} }
} }
res.json(settings); return res.status(200).send(settings);
} catch (error) { } catch (error) {
res.status(200).send(); res.status(200).send();
} }

View file

@ -23,11 +23,11 @@ import {
AutoSendTextSwitch, AutoSendTextSwitch,
AutoTranscribeAudioSwitch, AutoTranscribeAudioSwitch,
} from './STT'; } from './STT';
import { useCustomConfigSpeechQuery } from '~/data-provider'; import { useGetCustomConfigSpeechQuery } from 'librechat-data-provider/react-query';
function Speech() { function Speech() {
const [confirmClear, setConfirmClear] = useState(false); const [confirmClear, setConfirmClear] = useState(false);
const { data } = useCustomConfigSpeechQuery(); const { data } = useGetCustomConfigSpeechQuery();
const isSmallScreen = useMediaQuery('(max-width: 767px)'); const isSmallScreen = useMediaQuery('(max-width: 767px)');
const [advancedMode, setAdvancedMode] = useRecoilState(store.advancedMode); const [advancedMode, setAdvancedMode] = useRecoilState(store.advancedMode);
@ -66,10 +66,12 @@ function Speech() {
playbackRate: { value: playbackRate, setFunc: setPlaybackRate }, playbackRate: { value: playbackRate, setFunc: setPlaybackRate },
}; };
if (settings[key]) { if (settings[key].value !== newValue || settings[key].value === newValue || !settings[key]) {
return;
}
const setting = settings[key]; const setting = settings[key];
setting.setFunc(newValue); setting.setFunc(newValue);
}
}, },
[ [
conversationMode, conversationMode,
@ -111,7 +113,8 @@ function Speech() {
updateSetting(key, value); updateSetting(key, value);
}); });
} }
}, []); // eslint-disable-next-line react-hooks/exhaustive-deps
}, [data]);
const contentRef = useRef(null); const contentRef = useRef(null);
useOnClickOutside(contentRef, () => confirmClear && setConfirmClear(false), []); useOnClickOutside(contentRef, () => confirmClear && setConfirmClear(false), []);

View file

@ -355,7 +355,7 @@ export const getVoices = (): Promise<f.VoiceResponse> => {
return request.get(endpoints.textToSpeechVoices()); return request.get(endpoints.textToSpeechVoices());
}; };
export const getCustomConfigSpeech = (): Promise<f.getCustomConfigSpeechResponse[]> => { export const getCustomConfigSpeech = (): Promise<t.TCustomConfigSpeechResponse> => {
return request.get(endpoints.getCustomConfigSpeech()); return request.get(endpoints.getCustomConfigSpeech());
}; };

View file

@ -422,3 +422,18 @@ export const useGetStartupConfig = (
}, },
); );
}; };
export const useGetCustomConfigSpeechQuery = (
config?: UseQueryOptions<t.TCustomConfigSpeechResponse>,
): QueryObserverResult<t.TCustomConfigSpeechResponse> => {
return useQuery<t.TCustomConfigSpeechResponse>(
[QueryKeys.customConfigSpeech],
() => dataService.getCustomConfigSpeech(),
{
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: false,
...config,
},
);
};

View file

@ -463,3 +463,5 @@ export type TGetRandomPromptsRequest = {
limit: number; limit: number;
skip: number; skip: number;
}; };
export type TCustomConfigSpeechResponse = { [key: string]: string };

View file

@ -83,8 +83,6 @@ export type SpeechToTextResponse = {
export type VoiceResponse = string[]; export type VoiceResponse = string[];
export type getCustomConfigSpeechResponse = { [key: string]: string };
export type UploadMutationOptions = { export type UploadMutationOptions = {
onSuccess?: (data: TFileUpload, variables: FormData, context?: unknown) => void; onSuccess?: (data: TFileUpload, variables: FormData, context?: unknown) => void;
onMutate?: (variables: FormData) => void | Promise<unknown>; onMutate?: (variables: FormData) => void | Promise<unknown>;
@ -115,12 +113,6 @@ export type VoiceOptions = {
onError?: (error: unknown, variables: unknown, context?: unknown) => void; onError?: (error: unknown, variables: unknown, context?: unknown) => void;
}; };
export type getCustomConfigSpeechOptions = {
onSuccess?: (data: getCustomConfigSpeechResponse, variables: unknown, context?: unknown) => void;
onMutate?: () => void | Promise<unknown>;
onError?: (error: unknown, variables: unknown, context?: unknown) => void;
};
export type DeleteFilesResponse = { export type DeleteFilesResponse = {
message: string; message: string;
result: Record<string, unknown>; result: Record<string, unknown>;