import * as React from "react"; import Link from "next/link"; import { ChatBubbleIcon, ReaderIcon } from "@radix-ui/react-icons"; interface ChatMessage { role: string; content: { context: { source: string }[]; answer: string } | string; } interface ResponseType { context: { source: string }[]; answer: string; } export function AgentMessage({ message }: { message: ChatMessage }) { const [parsedSources, setParsedSources] = React.useState([]); const [parsedAnswer, setParsedAnswer] = React.useState(""); const parseResponse = (response: ResponseType | string) => { const { content } = message; let sources: string[] = []; let answer: string = ""; if (typeof response === "object" && content.context && content.answer) { sources = content.context.map((item) => item.source); answer = content.answer; } else if (typeof content === "string") { const sourcesMatch = content.match(/(.*?)<\/sources>/s); if (sourcesMatch && sourcesMatch[1]) { sources = sourcesMatch[1].trim().split("\n"); } answer = content.split("").pop() || ""; } return { sources, answer }; }; React.useEffect(() => { const parsedResponse = parseResponse(message); setParsedSources(parsedResponse.sources); setParsedAnswer(parsedResponse.answer); }, [message]); return (

 Sources

    {parsedSources.map((source, idx) => source && (
  1. {JSON.parse(source).url}
  2. ))}

 Answer

{parsedAnswer}

); }