Files
VRCT/src-ui/logics/configs/transcription/useTranscription.js
Sakamoto Shiina 9fd61677f9 [Update/Chore] Config Page: Add 'Whisper Compute Type' Selection.
UI: Rename 'Whisper compute device' to 'Transcription compute device'.
2025-09-19 15:58:19 +09:00

504 lines
19 KiB
JavaScript

import {
useStore_MicRecordTimeout,
useStore_MicPhraseTimeout,
useStore_MicMaxWords,
useStore_MicWordFilterList,
useStore_SpeakerMaxWords,
useStore_SpeakerPhraseTimeout,
useStore_SpeakerRecordTimeout,
useStore_SelectableTranscriptionComputeDeviceList,
useStore_SelectedTranscriptionEngine,
useStore_SelectedTranscriptionComputeDevice,
useStore_WhisperWeightTypeStatus,
useStore_SelectedWhisperWeightType,
useStore_SelectedWhisperComputeType,
useStore_SelectableWhisperComputeTypeList,
useStore_MicAvgLogprob,
useStore_MicNoSpeechProb,
useStore_SpeakerAvgLogprob,
useStore_SpeakerNoSpeechProb,
} from "@store";
import { useStdoutToPython } from "@useStdoutToPython";
import { transformToIndexedArray, arrayToObject } from "@utils";
import { useNotificationStatus } from "@logics_common";
export const useTranscription = () => {
const { asyncStdoutToPython } = useStdoutToPython();
const { showNotification_SaveSuccess } = useNotificationStatus();
// Mic
const { currentMicRecordTimeout, updateMicRecordTimeout, pendingMicRecordTimeout } = useStore_MicRecordTimeout();
const { currentMicPhraseTimeout, updateMicPhraseTimeout, pendingMicPhraseTimeout } = useStore_MicPhraseTimeout();
const { currentMicMaxWords, updateMicMaxWords, pendingMicMaxWords } = useStore_MicMaxWords();
const { currentMicWordFilterList, updateMicWordFilterList, pendingMicWordFilterList } = useStore_MicWordFilterList();
// Speaker
const { currentSpeakerRecordTimeout, updateSpeakerRecordTimeout, pendingSpeakerRecordTimeout } = useStore_SpeakerRecordTimeout();
const { currentSpeakerPhraseTimeout, updateSpeakerPhraseTimeout, pendingSpeakerPhraseTimeout } = useStore_SpeakerPhraseTimeout();
const { currentSpeakerMaxWords, updateSpeakerMaxWords, pendingSpeakerMaxWords } = useStore_SpeakerMaxWords();
// Transcription Engines
const { currentSelectedTranscriptionEngine, updateSelectedTranscriptionEngine, pendingSelectedTranscriptionEngine } = useStore_SelectedTranscriptionEngine();
const { currentWhisperWeightTypeStatus, updateWhisperWeightTypeStatus, pendingWhisperWeightTypeStatus } = useStore_WhisperWeightTypeStatus();
const { currentSelectedWhisperWeightType, updateSelectedWhisperWeightType, pendingSelectedWhisperWeightType } = useStore_SelectedWhisperWeightType();
const { currentSelectableWhisperComputeTypeList, updateSelectableWhisperComputeTypeList, pendingSelectableWhisperComputeTypeList } = useStore_SelectableWhisperComputeTypeList();
const { currentSelectedWhisperComputeType, updateSelectedWhisperComputeType, pendingSelectedWhisperComputeType } = useStore_SelectedWhisperComputeType();
const { currentSelectableTranscriptionComputeDeviceList, updateSelectableTranscriptionComputeDeviceList, pendingSelectableTranscriptionComputeDeviceList } = useStore_SelectableTranscriptionComputeDeviceList();
const { currentSelectedTranscriptionComputeDevice, updateSelectedTranscriptionComputeDevice, pendingSelectedTranscriptionComputeDevice } = useStore_SelectedTranscriptionComputeDevice();
// Advanced Settings
const { currentMicAvgLogprob, updateMicAvgLogprob, pendingMicAvgLogprob } = useStore_MicAvgLogprob();
const { currentMicNoSpeechProb, updateMicNoSpeechProb, pendingMicNoSpeechProb } = useStore_MicNoSpeechProb();
const { currentSpeakerAvgLogprob, updateSpeakerAvgLogprob, pendingSpeakerAvgLogprob } = useStore_SpeakerAvgLogprob();
const { currentSpeakerNoSpeechProb, updateSpeakerNoSpeechProb, pendingSpeakerNoSpeechProb } = useStore_SpeakerNoSpeechProb();
// Mic
const getMicRecordTimeout = () => {
pendingMicRecordTimeout();
asyncStdoutToPython("/get/data/mic_record_timeout");
};
const setMicRecordTimeout = (selected_mic_record_timeout) => {
pendingMicRecordTimeout();
asyncStdoutToPython("/set/data/mic_record_timeout", selected_mic_record_timeout);
};
const setSuccessMicRecordTimeout = (value) => {
updateMicRecordTimeout(value);
showNotification_SaveSuccess();
};
const getMicPhraseTimeout = () => {
pendingMicPhraseTimeout();
asyncStdoutToPython("/get/data/mic_phrase_timeout");
};
const setMicPhraseTimeout = (selected_mic_phrase_timeout) => {
pendingMicPhraseTimeout();
asyncStdoutToPython("/set/data/mic_phrase_timeout", selected_mic_phrase_timeout);
};
const setSuccessMicPhraseTimeout = (value) => {
updateMicPhraseTimeout(value);
showNotification_SaveSuccess();
};
const getMicMaxWords = () => {
pendingMicMaxWords();
asyncStdoutToPython("/get/data/mic_max_phrases");
};
const setMicMaxWords = (selected_mic_max_phrases) => {
pendingMicMaxWords();
asyncStdoutToPython("/set/data/mic_max_phrases", selected_mic_max_phrases);
};
const setSuccessMicMaxWords = (value) => {
updateMicMaxWords(value);
showNotification_SaveSuccess();
};
const getMicWordFilterList = () => {
pendingMicWordFilterList();
asyncStdoutToPython("/get/data/mic_word_filter");
};
const setMicWordFilterList = (selected_mic_word_filter) => {
pendingMicWordFilterList();
asyncStdoutToPython("/set/data/mic_word_filter", selected_mic_word_filter);
};
const getSuccessMicWordFilterList = (payload) => {
updateMicWordFilterList((prev_list) => {
const updated_list = [...prev_list.data];
for (const value of payload) {
const existing_item = updated_list.find(item => item.value === value);
if (existing_item) {
existing_item.is_redoable = false;
} else {
updated_list.push({ value, is_redoable: false });
}
}
return updated_list;
});
};
const setSuccessMicWordFilterList = (payload) => {
updateMicWordFilterList((prev_list) => {
const updated_list = [...prev_list.data];
for (const value of payload) {
const existing_item = updated_list.find(item => item.value === value);
if (existing_item) {
existing_item.is_redoable = false;
} else {
updated_list.push({ value, is_redoable: false });
}
}
return updated_list;
});
showNotification_SaveSuccess();
};
// Speaker
const getSpeakerRecordTimeout = () => {
pendingSpeakerRecordTimeout();
asyncStdoutToPython("/get/data/speaker_record_timeout");
};
const setSpeakerRecordTimeout = (selected_speaker_record_timeout) => {
pendingSpeakerRecordTimeout();
asyncStdoutToPython("/set/data/speaker_record_timeout", selected_speaker_record_timeout);
};
const setSuccessSpeakerRecordTimeout = (value) => {
updateSpeakerRecordTimeout(value);
showNotification_SaveSuccess();
};
const getSpeakerPhraseTimeout = () => {
pendingSpeakerPhraseTimeout();
asyncStdoutToPython("/get/data/speaker_phrase_timeout");
};
const setSpeakerPhraseTimeout = (selected_speaker_phrase_timeout) => {
pendingSpeakerPhraseTimeout();
asyncStdoutToPython("/set/data/speaker_phrase_timeout", selected_speaker_phrase_timeout);
};
const setSuccessSpeakerPhraseTimeout = (value) => {
updateSpeakerPhraseTimeout(value);
showNotification_SaveSuccess();
};
const getSpeakerMaxWords = () => {
pendingSpeakerMaxWords();
asyncStdoutToPython("/get/data/speaker_max_phrases");
};
const setSpeakerMaxWords = (selected_speaker_max_phrases) => {
pendingSpeakerMaxWords();
asyncStdoutToPython("/set/data/speaker_max_phrases", selected_speaker_max_phrases);
};
const setSuccessSpeakerMaxWords = (value) => {
updateSpeakerMaxWords(value);
showNotification_SaveSuccess();
};
// Transcription Engines
// Transcription Engines (Google / Whisper)
const getSelectedTranscriptionEngine = () => {
pendingSelectedTranscriptionEngine();
asyncStdoutToPython("/get/data/selected_transcription_engine");
};
const setSelectedTranscriptionEngine = (selected_transcription_engine) => {
pendingSelectedTranscriptionEngine();
asyncStdoutToPython("/set/data/selected_transcription_engine", selected_transcription_engine);
};
const setSuccessSelectedTranscriptionEngine = (engine) => {
updateSelectedTranscriptionEngine(engine);
showNotification_SaveSuccess();
};
// Transcription Engines (Weight Type List)
const updateDownloadedWhisperWeightTypeStatus = (downloaded_weight_type_status) => {
updateWhisperWeightTypeStatus((old_status) =>
old_status.data.map((item) => ({
...item,
is_downloaded: downloaded_weight_type_status[item.id] ?? item.is_downloaded,
}))
);
};
const updateDownloadProgressWhisperWeightTypeStatus = (payload) => {
if (payload === true) return console.error("fix me.");
updateWhisperWeightTypeStatus((old_status) =>
old_status.data.map((item) =>
payload.weight_type === item.id
? { ...item, progress: payload.progress * 100 }
: item
)
);
};
const pendingWhisperWeightType = (id) => {
updateWhisperWeightTypeStatus((old_status) =>
old_status.data.map((item) =>
id === item.id
? { ...item, is_pending: true }
: item
)
);
};
const downloadedWhisperWeightType = (id) => {
updateWhisperWeightTypeStatus((old_status) =>
old_status.data.map((item) =>
id === item.id
? { ...item, is_downloaded: true, is_pending: false, progress: null }
: item
)
);
};
const downloadWhisperWeight = (weight_type) => {
asyncStdoutToPython("/run/download_whisper_weight", weight_type);
};
const getSelectableWhisperComputeTypeList = () => {
pendingSelectableWhisperComputeTypeList();
asyncStdoutToPython("/get/data/whisper_compute_type_list");
};
const updateSelectableWhisperComputeTypeList_FromBackend = (payload) => {
updateSelectableWhisperComputeTypeList(arrayToObject(payload));
};
const getSelectedWhisperComputeType = () => {
pendingSelectedWhisperComputeType();
asyncStdoutToPython("/get/data/whisper_compute_type");
};
const setSelectedWhisperComputeType = (selected_whisper_compute_type) => {
pendingSelectedWhisperComputeType();
asyncStdoutToPython("/set/data/whisper_compute_type", selected_whisper_compute_type);
};
const setSuccessSelectedWhisperComputeType = (selected_whisper_compute_type) => {
updateSelectedWhisperComputeType(selected_whisper_compute_type);
showNotification_SaveSuccess();
};
// Transcription Engines (Selected Weight Type)
const getSelectedWhisperWeightType = () => {
pendingSelectedWhisperWeightType();
asyncStdoutToPython("/get/data/whisper_weight_type");
};
const setSelectedWhisperWeightType = (selected_whisper_weight_type) => {
pendingSelectedWhisperWeightType();
asyncStdoutToPython("/set/data/whisper_weight_type", selected_whisper_weight_type);
};
const setSuccessSelectedWhisperWeightType = (wt) => {
updateSelectedWhisperWeightType(wt);
showNotification_SaveSuccess();
};
// Transcription Engines (Compute Device List)
const getSelectableTranscriptionComputeDeviceList = () => {
pendingSelectableTranscriptionComputeDeviceList();
asyncStdoutToPython("/get/data/transcription_compute_device_list");
};
const updateSelectableTranscriptionComputeDeviceList_FromBackend = (payload) => {
updateSelectableTranscriptionComputeDeviceList(transformToIndexedArray(payload));
};
// Transcription Engines (Selected Compute Device)
const getSelectedTranscriptionComputeDevice = () => {
pendingSelectedTranscriptionComputeDevice();
asyncStdoutToPython("/get/data/selected_transcription_compute_device");
};
const setSelectedTranscriptionComputeDevice = (selected_transcription_compute_device) => {
pendingSelectedTranscriptionComputeDevice();
asyncStdoutToPython("/set/data/selected_transcription_compute_device", selected_transcription_compute_device);
};
const setSuccessSelectedTranscriptionComputeDevice = (dev) => {
updateSelectedTranscriptionComputeDevice(dev);
showNotification_SaveSuccess();
};
// Advanced (Mic Avg Logprob)
const getMicAvgLogprob = () => {
pendingMicAvgLogprob();
asyncStdoutToPython("/get/data/mic_avg_logprob");
};
const setMicAvgLogprob = (selected_mic_avg_logprob) => {
pendingMicAvgLogprob();
asyncStdoutToPython("/set/data/mic_avg_logprob", selected_mic_avg_logprob);
};
const setSuccessMicAvgLogprob = (selected_mic_avg_logprob) => {
updateMicAvgLogprob(selected_mic_avg_logprob);
showNotification_SaveSuccess();
};
// Advanced (Mic No Speech Prob)
const getMicNoSpeechProb = () => {
pendingMicNoSpeechProb();
asyncStdoutToPython("/get/data/mic_no_speech_prob");
};
const setMicNoSpeechProb = (selected_mic_no_speech_prob) => {
pendingMicNoSpeechProb();
asyncStdoutToPython("/set/data/mic_no_speech_prob", selected_mic_no_speech_prob);
};
const setSuccessMicNoSpeechProb = (selected_mic_no_speech_prob) => {
updateMicNoSpeechProb(selected_mic_no_speech_prob);
showNotification_SaveSuccess();
};
// Advanced (Speaker Avg Logprob)
const getSpeakerAvgLogprob = () => {
pendingSpeakerAvgLogprob();
asyncStdoutToPython("/get/data/speaker_avg_logprob");
};
const setSpeakerAvgLogprob = (selected_speaker_avg_logprob) => {
pendingSpeakerAvgLogprob();
asyncStdoutToPython("/set/data/speaker_avg_logprob", selected_speaker_avg_logprob);
};
const setSuccessSpeakerAvgLogprob = (selected_speaker_avg_logprob) => {
updateSpeakerAvgLogprob(selected_speaker_avg_logprob);
showNotification_SaveSuccess();
};
// Advanced (Speaker No Speech Prob)
const getSpeakerNoSpeechProb = () => {
pendingSpeakerNoSpeechProb();
asyncStdoutToPython("/get/data/speaker_no_speech_prob");
};
const setSpeakerNoSpeechProb = (selected_speaker_no_speech_prob) => {
pendingSpeakerNoSpeechProb();
asyncStdoutToPython("/set/data/speaker_no_speech_prob", selected_speaker_no_speech_prob);
};
const setSuccessSpeakerNoSpeechProb = (selected_speaker_no_speech_prob) => {
updateSpeakerNoSpeechProb(selected_speaker_no_speech_prob);
showNotification_SaveSuccess();
};
return {
// Mic
currentMicRecordTimeout,
getMicRecordTimeout,
updateMicRecordTimeout,
setMicRecordTimeout,
setSuccessMicRecordTimeout,
currentMicPhraseTimeout,
getMicPhraseTimeout,
updateMicPhraseTimeout,
setMicPhraseTimeout,
setSuccessMicPhraseTimeout,
currentMicMaxWords,
getMicMaxWords,
updateMicMaxWords,
setMicMaxWords,
setSuccessMicMaxWords,
currentMicWordFilterList,
getMicWordFilterList,
getSuccessMicWordFilterList,
updateMicWordFilterList,
setMicWordFilterList,
setSuccessMicWordFilterList,
// Speaker
currentSpeakerRecordTimeout,
getSpeakerRecordTimeout,
updateSpeakerRecordTimeout,
setSpeakerRecordTimeout,
setSuccessSpeakerRecordTimeout,
currentSpeakerPhraseTimeout,
getSpeakerPhraseTimeout,
updateSpeakerPhraseTimeout,
setSpeakerPhraseTimeout,
setSuccessSpeakerPhraseTimeout,
currentSpeakerMaxWords,
getSpeakerMaxWords,
updateSpeakerMaxWords,
setSpeakerMaxWords,
setSuccessSpeakerMaxWords,
// Transcription Engines
currentSelectedTranscriptionEngine,
getSelectedTranscriptionEngine,
updateSelectedTranscriptionEngine,
setSelectedTranscriptionEngine,
setSuccessSelectedTranscriptionEngine,
currentWhisperWeightTypeStatus,
updateWhisperWeightTypeStatus,
updateDownloadedWhisperWeightTypeStatus,
updateDownloadProgressWhisperWeightTypeStatus,
pendingWhisperWeightType,
downloadedWhisperWeightType,
downloadWhisperWeight,
currentSelectedWhisperWeightType,
getSelectedWhisperWeightType,
updateSelectedWhisperWeightType,
setSelectedWhisperWeightType,
setSuccessSelectedWhisperWeightType,
currentSelectableWhisperComputeTypeList,
getSelectableWhisperComputeTypeList,
updateSelectableWhisperComputeTypeList,
updateSelectableWhisperComputeTypeList_FromBackend,
currentSelectedWhisperComputeType,
getSelectedWhisperComputeType,
updateSelectedWhisperComputeType,
setSelectedWhisperComputeType,
setSuccessSelectedWhisperComputeType,
currentSelectableTranscriptionComputeDeviceList,
getSelectableTranscriptionComputeDeviceList,
updateSelectableTranscriptionComputeDeviceList,
updateSelectableTranscriptionComputeDeviceList_FromBackend,
currentSelectedTranscriptionComputeDevice,
getSelectedTranscriptionComputeDevice,
updateSelectedTranscriptionComputeDevice,
setSelectedTranscriptionComputeDevice,
setSuccessSelectedTranscriptionComputeDevice,
// Advanced
// Mic Avg Logprob
currentMicAvgLogprob,
getMicAvgLogprob,
updateMicAvgLogprob,
setMicAvgLogprob,
setSuccessMicAvgLogprob,
// Mic No Speech Prob
currentMicNoSpeechProb,
getMicNoSpeechProb,
updateMicNoSpeechProb,
setMicNoSpeechProb,
setSuccessMicNoSpeechProb,
// Speaker Avg Logprob
currentSpeakerAvgLogprob,
getSpeakerAvgLogprob,
updateSpeakerAvgLogprob,
setSpeakerAvgLogprob,
setSuccessSpeakerAvgLogprob,
// Speaker No Speech Prob
currentSpeakerNoSpeechProb,
getSpeakerNoSpeechProb,
updateSpeakerNoSpeechProb,
setSpeakerNoSpeechProb,
setSuccessSpeakerNoSpeechProb,
};
};