Spaces:
Sleeping
Sleeping
| import { appModel } from './model.js'; | |
| import { utils } from './utils.js'; | |
| import { view } from './view.js'; | |
| const controller = { | |
| async handleRecording(event) { | |
| let startTime = Date.now(); | |
| let audioblob = await view.recorder.startRecording(view.elem.voiceButton); | |
| if (Date.now() - startTime < appModel.minimalRecordTime) { | |
| utils.showToast("time too short, this will not transcribe"); | |
| return; | |
| } | |
| let transcribe = await utils.stt(audioblob); | |
| if (!transcribe.text) { | |
| console.log("transcribe failed, try alternative way"); | |
| transcribe = await whisperjaxws(audioblob); // Replace with your alternative transcription | |
| } | |
| utils.writeText(document.activeElement, transcribe.text); | |
| }, | |
| async startRecordingWithSilenceDetection(event) { | |
| let startTime = Date.now(); | |
| let finalAudioblob = await view.recorder.startRecordingWithSilenceDetection( | |
| view.elem.voiceButton, | |
| (audioBlob) => { | |
| utils.stt(audioBlob).then((transcribe) => { | |
| if (!transcribe?.text ) { | |
| console.log("transcribe failed, try alternative way"); | |
| whisperjaxws(audioBlob).then((transcribe) => { // Replace with your alternative transcription | |
| utils.writeText(document.activeElement, transcribe); | |
| }); | |
| } else { | |
| utils.writeText(document.activeElement, transcribe.text); | |
| } | |
| }); | |
| } | |
| ); | |
| if (Date.now() - startTime < appModel.minimalRecordTime) { | |
| utils.showToast("time too short, this will not transcribe"); | |
| return; | |
| } | |
| let transcribe = await utils.sendAudioToLeptonWhisperApi(finalAudioblob); | |
| if (!transcribe) { | |
| console.log("transcribe failed, try alternative way"); | |
| transcribe = await whisperjaxws(finalAudioblob); // Replace with your alternative transcription | |
| } | |
| utils.writeText(document.activeElement, transcribe.text); | |
| }, | |
| stopRecording(safeStop = true) { | |
| appModel.isRecording = false; | |
| if (safeStop) { | |
| setTimeout(() => { | |
| console.log("safeStop"); | |
| view.recorder.stopRecording(); | |
| }, 500); | |
| } else { | |
| view.recorder.stopRecording(); | |
| } | |
| }, | |
| async chat(message) { | |
| let selectText = window.getSelection().toString(); | |
| let currentLineString = utils.getCurrentLineString(document.activeElement); | |
| prompt=`${message} ${selectText.length >= 1 ? selectText : currentLineString} ` | |
| let userText = prompt; | |
| if (!utils.checkValidString(userText)) { | |
| console.log("chat(): invalid userText:", userText); | |
| return; | |
| } | |
| utils.displayMarkdown(userText + " \n please wait"); | |
| utils.AIComplete(userText,appModel.llm_model_info); // Replace with your LLM API call | |
| }, | |
| async ask() { | |
| if (appModel.isRecording) { | |
| utils.AIComplete(utils.getSelectionText(),appModel.llm_model_info); | |
| return; | |
| } | |
| let startTime = Date.now(); | |
| let audioblob = await view.recorder.startRecording(view.elem.voiceButton); | |
| if (Date.now() - startTime < appModel.minimalRecordTime) { | |
| utils.showToast("time too short, this will not transcribe"); | |
| console.log("ask():", utils.getSelectionText()); | |
| utils.AIComplete(utils.getSelectionText(),appModel.llm_model_info); | |
| return; | |
| } | |
| let transcribe = await utils.stt(audioblob); | |
| if (!transcribe) { | |
| console.log("transcribe failed, try alternative way"); | |
| transcribe = await whisperjaxws(audioblob); // Replace with your alternative transcription | |
| } | |
| let selectionString = window.getSelection().toString(); | |
| let userText = utils.checkValidString(selectionString) | |
| ? `"${selectionString}" ${transcribe.text}` | |
| : transcribe.text; | |
| if (!utils.checkValidString(userText)) { | |
| console.log("ask(): invalid userText:", userText); | |
| return; | |
| } | |
| utils.displayMarkdown(userText + " please wait"); | |
| utils.AIComplete(userText); // Replace with your LLM API call | |
| }, | |
| }; | |
| // ... (whisperjaxws function or other external APIs) ... | |
| export { controller }; |