mirror of
https://github.com/QuivrHQ/quivr.git
synced 2024-12-24 15:42:26 +03:00
4112699db5
* ♻️ refactor backend main routes * 🗃️ new user_id uuid column in users table * 🗃️ new chats table * ✨ new chat endpoints * ✨ change chat routes post to handle undef chat_id * ♻️ extract components from chat page * ✨ add chatId to useQuestion * ✨ new ChatsList * ✨ new optional dynamic route chat/{chat_id} * 🩹 add setQuestion to speach utils * feat: self supplied key (#286) * feat(brain): increased size if api key and more * fix(key): not displayed * feat(apikey): now password input * fix(twitter): handle wrong * feat(chat): basic source documents support (#289) * ♻️ refactor backend main routes * 🗃️ new user_id uuid column in users table * 🗃️ new chats table * ✨ new chat endpoints * ✨ change chat routes post to handle undef chat_id * ♻️ extract components from chat page * ✨ add chatId to useQuestion * ✨ new ChatsList * ✨ new optional dynamic route chat/{chat_id} * 🩹 add setQuestion to speach utils * 🎨 separate creation and update endpoints for chat * 🩹 add feat(chat): basic source documents support * ✨ add chatName upon creation and for chats list * 💄 improve chatsList style * User chat history and multiple chats (#290) * ♻️ refactor backend main routes * 🗃️ new user_id uuid column in users table * 🗃️ new chats table * ✨ new chat endpoints * ✨ change chat routes post to handle undef chat_id * ♻️ extract components from chat page * ✨ add chatId to useQuestion * ✨ new ChatsList * ✨ new optional dynamic route chat/{chat_id} * refactor(chat): use layout to avoid refetching all chats on every chat * refactor(chat): useChats hook instead of useQuestion * fix(chat): fix errors * refactor(chat): better folder structure * feat: self supplied key (#286) * feat(brain): increased size if api key and more * fix(key): not displayed * feat(apikey): now password input * fix(twitter): handle wrong * feat(chat): basic source documents support (#289) * style(chat): better looking sidebar * resume merge * fix(backend): add os and logger imports * small fixes * chore(chat): remove empty interface * chore(chat): use const * fix(chat): merge errors * fix(chat): remove useSpeech args * chore(chat): remove unused args * fix(chat): remove duplicate components --------- Co-authored-by: gozineb <zinebe@theodo.fr> Co-authored-by: Matt <77928207+mattzcarey@users.noreply.github.com> Co-authored-by: Stan Girard <girard.stanislas@gmail.com> Co-authored-by: xleven <xleven@outlook.com> * fix and refactor errors * fix(fresh): installation issues * chore(conflict): merged old code * fix(multi-chat): use update endpoint * feat(embeddings): now using users api key --------- Co-authored-by: Matt <77928207+mattzcarey@users.noreply.github.com> Co-authored-by: Stan Girard <girard.stanislas@gmail.com> Co-authored-by: xleven <xleven@outlook.com> Co-authored-by: Aditya Nandan <61308761+iMADi-ARCH@users.noreply.github.com> Co-authored-by: iMADi-ARCH <nandanaditya985@gmail.com> Co-authored-by: Mamadou DICKO <mamadoudicko100@gmail.com>
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { useEffect, useState } from "react";
|
|
import { isSpeechRecognitionSupported } from "../helpers/isSpeechRecognitionSupported";
|
|
import useChats from "./useChats";
|
|
|
|
export const useSpeech = () => {
|
|
const [isListening, setIsListening] = useState(false);
|
|
const [speechSupported, setSpeechSupported] = useState(false);
|
|
|
|
const { setMessage } = useChats();
|
|
|
|
useEffect(() => {
|
|
if (isSpeechRecognitionSupported()) {
|
|
setSpeechSupported(true);
|
|
const SpeechRecognition =
|
|
window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
|
|
const mic = new SpeechRecognition();
|
|
|
|
mic.continuous = true;
|
|
mic.interimResults = false;
|
|
mic.lang = "en-US";
|
|
|
|
mic.onstart = () => {
|
|
console.log("Mics on");
|
|
};
|
|
|
|
mic.onend = () => {
|
|
console.log("Mics off");
|
|
};
|
|
|
|
mic.onerror = (event: SpeechRecognitionErrorEvent) => {
|
|
console.log(event.error);
|
|
setIsListening(false);
|
|
};
|
|
|
|
mic.onresult = (event: SpeechRecognitionEvent) => {
|
|
const interimTranscript =
|
|
event.results[event.results.length - 1][0].transcript;
|
|
setMessage((prevMessage) => ["user", prevMessage + interimTranscript]);
|
|
};
|
|
|
|
if (isListening) {
|
|
mic.start();
|
|
}
|
|
|
|
return () => {
|
|
if (mic) {
|
|
mic.stop();
|
|
}
|
|
};
|
|
}
|
|
}, [isListening, setMessage]);
|
|
|
|
const startListening = () => {
|
|
setIsListening((prevIsListening) => !prevIsListening);
|
|
};
|
|
|
|
return { startListening, speechSupported, isListening };
|
|
};
|