')) {
+ const openThinkTag = processedMessage.match(//g)?.length || 0;
+ const closeThinkTag = processedMessage.match(/<\/think>/g)?.length || 0;
+
+ if (openThinkTag > closeThinkTag) {
+ processedMessage += ' '; // The extra is to prevent the the think component from looking bad
+ }
+ }
if (
message.role === 'assistant' &&
message?.sources &&
message.sources.length > 0
) {
- return setParsedMessage(
- message.content.replace(
+ setParsedMessage(
+ processedMessage.replace(
regex,
(_, number) =>
- `${number}`,
+ `${number}`,
),
);
+ return;
}
setSpeechMessage(message.content.replace(regex, ''));
- setParsedMessage(message.content);
+ setParsedMessage(processedMessage);
}, [message.content, message.sources, message.role]);
const { speechStatus, start, stop } = useSpeech({ text: speechMessage });
+ const markdownOverrides: MarkdownToJSX.Options = {
+ overrides: {
+ think: {
+ component: ThinkTagProcessor,
+ },
+ },
+ };
+
return (
{message.role === 'user' && (
@@ -111,11 +137,13 @@ const MessageBox = ({
Answer
+
{parsedMessage}
diff --git a/src/components/ThinkBox.tsx b/src/components/ThinkBox.tsx
new file mode 100644
index 0000000..9c6a576
--- /dev/null
+++ b/src/components/ThinkBox.tsx
@@ -0,0 +1,43 @@
+'use client';
+
+import { useState } from 'react';
+import { cn } from '@/lib/utils';
+import { ChevronDown, ChevronUp, BrainCircuit } from 'lucide-react';
+
+interface ThinkBoxProps {
+ content: string;
+}
+
+const ThinkBox = ({ content }: ThinkBoxProps) => {
+ const [isExpanded, setIsExpanded] = useState(false);
+
+ return (
+
+
+
+ {isExpanded && (
+
+ {content}
+
+ )}
+
+ );
+};
+
+export default ThinkBox;