react-native-executorch
Version:
An easy way to run AI models in react native with ExecuTorch
49 lines (48 loc) • 1.71 kB
JavaScript
;
import { useEffect, useMemo, useState } from 'react';
import { SpeechToTextController } from '../../controllers/SpeechToTextController';
export const useSpeechToText = ({
modelName,
encoderSource,
decoderSource,
tokenizerSource,
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 model = useMemo(() => new SpeechToTextController({
transcribeCallback: setSequence,
isReadyCallback: setIsReady,
isGeneratingCallback: setIsGenerating,
onErrorCallback: setError,
modelDownloadProgressCallback: setDownloadProgress
}), []);
useEffect(() => {
model.configureStreaming(overlapSeconds, windowSize, streamingConfig);
}, [model, overlapSeconds, windowSize, streamingConfig]);
useEffect(() => {
const loadModel = async () => {
await model.loadModel(modelName, encoderSource, decoderSource, tokenizerSource);
};
if (!preventLoad) {
loadModel();
}
}, [model, modelName, encoderSource, decoderSource, tokenizerSource, preventLoad]);
return {
isReady,
isGenerating,
downloadProgress,
configureStreaming: model.configureStreaming,
sequence,
error,
transcribe: (waveform, audioLanguage) => model.transcribe(waveform, audioLanguage),
streamingTranscribe: (streamAction, waveform, audioLanguage) => model.streamingTranscribe(streamAction, waveform, audioLanguage)
};
};
//# sourceMappingURL=useSpeechToText.js.map