Skip to content

Commit 5f9b25b

Browse files
committed
fix: fix failsafe repeats
1 parent 51754cd commit 5f9b25b

File tree

6 files changed

+2941
-2304
lines changed

6 files changed

+2941
-2304
lines changed

.devcontainer/devcontainer.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

app/components/Conversation.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
LiveTranscriptionEvents,
88
} from "@deepgram/sdk";
99
import { Message, useChat } from "ai/react";
10-
import { NextUIProvider, Spinner } from "@nextui-org/react";
10+
import { NextUIProvider } from "@nextui-org/react";
1111
import { useMicVAD } from "@ricky0123/vad-react";
1212
import { useNowPlaying } from "react-nowplaying";
1313
import { useQueue } from "@uidotdev/usehooks";
@@ -161,6 +161,7 @@ export default function Conversation(): JSX.Element {
161161

162162
const [currentUtterance, setCurrentUtterance] = useState<string>();
163163
const [failsafeTimeout, setFailsafeTimeout] = useState<NodeJS.Timeout>();
164+
const [failsafeTriggered, setFailsafeTriggered] = useState<boolean>(false);
164165

165166
const onSpeechEnd = useCallback(() => {
166167
/**
@@ -174,6 +175,7 @@ export default function Conversation(): JSX.Element {
174175
setTimeout(() => {
175176
if (currentUtterance) {
176177
console.log("failsafe fires! pew pew!!");
178+
setFailsafeTriggered(true);
177179
append({
178180
role: "user",
179181
content: currentUtterance,
@@ -203,6 +205,12 @@ export default function Conversation(): JSX.Element {
203205
*/
204206
if (!microphoneOpen) return;
205207

208+
209+
/**
210+
* We we're talking again, we want to wait for a transcript.
211+
*/
212+
setFailsafeTriggered(false);
213+
206214
if (!player?.ended) {
207215
stopAudio();
208216
console.log("barging in! SHH!");
@@ -325,6 +333,15 @@ export default function Conversation(): JSX.Element {
325333
*/
326334
if (!content) return;
327335

336+
/**
337+
* failsafe was triggered since we last sent a message to TTS
338+
*/
339+
if (failsafeTriggered) {
340+
clearTranscriptParts();
341+
setCurrentUtterance(undefined);
342+
return;
343+
}
344+
328345
/**
329346
* display the concatenated utterances
330347
*/
@@ -349,7 +366,13 @@ export default function Conversation(): JSX.Element {
349366
clearTranscriptParts();
350367
setCurrentUtterance(undefined);
351368
}
352-
}, [getCurrentUtterance, clearTranscriptParts, append, failsafeTimeout]);
369+
}, [
370+
getCurrentUtterance,
371+
clearTranscriptParts,
372+
append,
373+
failsafeTimeout,
374+
failsafeTriggered,
375+
]);
353376

354377
/**
355378
* magic microphone audio queue processing

app/context/Toast.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,13 @@ const ToastContextProvider = ({ children }: ToastContextInterface) => {
2020
<>
2121
{children}
2222
<ToastContainer
23-
position="top-center"
24-
autoClose={5000}
25-
hideProgressBar={false}
26-
newestOnTop={false}
27-
closeOnClick
28-
rtl={false}
29-
pauseOnFocusLoss
30-
draggable
31-
pauseOnHover
32-
theme="dark"
23+
position={"bottom-center"}
24+
autoClose={8000}
25+
theme={"dark"}
3326
limit={1}
3427
transition={Bounce}
35-
progressClassName="bg-gradient-to-r bg-gradient to-[#13EF93]/50 from-[#149AFB]/80"
28+
className={"md:w-96 mb-26"}
29+
progressClassName={"bg-gradient-to-r bg-gradient to-[#13EF93]/50 from-[#149AFB]/80"}
3630
/>
3731
</>
3832
</ToastContext.Provider>

app/globals.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,4 @@ body {
147147
/* Override pygments style background color. */
148148
.markdown .highlight pre {
149149
@apply bg-gray-100 !important;
150-
}
150+
}

app/layout.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { MicrophoneContextProvider } from "./context/Microphone";
1111
import { AudioStoreContextProvider } from "./context/AudioStore";
1212
import { ToastContextProvider } from "./context/Toast";
1313

14+
import 'react-toastify/dist/ReactToastify.css';
1415
import "./globals.css";
1516

1617
import type { Metadata, Viewport } from "next";

0 commit comments

Comments
 (0)