react-native-executorch
Version:
An easy way to run AI models in React Native with ExecuTorch
50 lines (49 loc) • 2.05 kB
JavaScript
import { useEffect, useMemo, useState } from 'react';
import { SpeechToTextController } from '../../controllers/SpeechToTextController';
export const useSpeechToText = ({ model, overlapSeconds, windowSize, streamingConfig, preventLoad = false, }) => {
const [sequence, setSequence] = useState('');
const [isReady, setIsReady] = useState(false);
const [downloadProgress, setDownloadProgress] = useState(0);
const [isGenerating, setIsGenerating] = useState(false);
const [error, setError] = useState();
const controllerInstance = useMemo(() => new SpeechToTextController({
transcribeCallback: setSequence,
isReadyCallback: setIsReady,
isGeneratingCallback: setIsGenerating,
onErrorCallback: setError,
}), []);
useEffect(() => {
controllerInstance.configureStreaming(overlapSeconds, windowSize, streamingConfig);
}, [controllerInstance, overlapSeconds, windowSize, streamingConfig]);
useEffect(() => {
const loadModel = async () => {
await controllerInstance.load({
modelName: model.modelName,
encoderSource: model.encoderSource,
decoderSource: model.decoderSource,
tokenizerSource: model.tokenizerSource,
onDownloadProgressCallback: setDownloadProgress,
});
};
if (!preventLoad) {
loadModel();
}
}, [
controllerInstance,
model.modelName,
model.encoderSource,
model.decoderSource,
model.tokenizerSource,
preventLoad,
]);
return {
isReady,
isGenerating,
downloadProgress,
configureStreaming: controllerInstance.configureStreaming,
sequence,
error,
transcribe: (waveform, audioLanguage) => controllerInstance.transcribe(waveform, audioLanguage),
streamingTranscribe: (streamAction, waveform, audioLanguage) => controllerInstance.streamingTranscribe(streamAction, waveform, audioLanguage),
};
};