UNPKG

react-native-executorch

Version:

An easy way to run AI models in React Native with ExecuTorch

50 lines (49 loc) 2.05 kB
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), }; };