diff --git a/ui/homepage/components/AskAIDialog.tsx b/ui/homepage/components/AskAIDialog.tsx index c0f4d58..d532aff 100644 --- a/ui/homepage/components/AskAIDialog.tsx +++ b/ui/homepage/components/AskAIDialog.tsx @@ -21,10 +21,20 @@ export function AskAIDialog({ const [messages, setMessages] = useState<{ sender: 'user' | 'ai'; text: string }[]>([]) const [sources, setSources] = useState([]) + function renderMarkdown(text: string) { + return text + .replace(/```([\s\S]*?)```/g, (_, code) => `
${code.replace(//g, '>')}
`) + .replace(/`([^`]+)`/g, (_, code) => `${code.replace(//g, '>')}`) + .replace(/\*\*([^*]+)\*\*/g, '$1') + .replace(/\*([^*]+)\*/g, '$1') + .replace(/\[(.+?)\]\((.+?)\)/g, '$1') + .replace(/\n/g, '
') + } + async function handleAsk() { if (!question) return - const userMessage = { sender: 'user' as const, text: question } + const userMessage = { sender: 'user' as const, text: renderMarkdown(question) } const history = [...messages.slice(-MAX_MESSAGES + 1), userMessage] setMessages(prev => [...prev, userMessage]) setQuestion('') @@ -65,10 +75,10 @@ export function AskAIDialog({ } } - const aiMessage = { sender: 'ai' as const, text: answer } + const aiMessage = { sender: 'ai' as const, text: renderMarkdown(answer) } setMessages(prev => [...prev, aiMessage].slice(-MAX_MESSAGES)) } catch (err) { - const aiMessage = { sender: 'ai' as const, text: 'Something went wrong. Please try again later.' } + const aiMessage = { sender: 'ai' as const, text: renderMarkdown('Something went wrong. Please try again later.') } setMessages(prev => [...prev, aiMessage].slice(-MAX_MESSAGES)) } } @@ -98,7 +108,7 @@ export function AskAIDialog({ -
+
{messages.map((m, idx) => ( ))} @@ -112,6 +122,12 @@ export function AskAIDialog({ placeholder="Type your question..." value={question} onChange={e => setQuestion(e.target.value)} + onKeyDown={e => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault() + handleAsk() + } + }} />