"use client" import type { UIMessage } from "@ai-sdk/react" import { Streamdown } from "streamdown" import { RelatedMemories } from "./related-memories" import { MessageActions } from "./message-actions" import { FollowUpQuestions } from "./follow-up-questions" interface AgentMessageProps { message: UIMessage index: number messagesLength: number hoveredMessageId: string | null copiedMessageId: string | null messageFeedback: Record expandedMemories: string | null followUpQuestions?: string[] isLoadingFollowUps?: boolean onCopy: (messageId: string, text: string) => void onLike: (messageId: string) => void onDislike: (messageId: string) => void onToggleMemories: (messageId: string) => void onQuestionClick?: (question: string) => void } export function AgentMessage({ message, index, messagesLength, hoveredMessageId, copiedMessageId, messageFeedback, expandedMemories, followUpQuestions = [], isLoadingFollowUps = false, onCopy, onLike, onDislike, onToggleMemories, onQuestionClick, }: AgentMessageProps) { const isLastAgentMessage = index === messagesLength - 1 && message.role === "assistant" const isHovered = hoveredMessageId === message.id const messageText = message.parts .filter((part) => part.type === "text") .map((part) => part.text) .join(" ") return (
{message.parts.map((part, partIndex) => { if (part.type === "text") { return (
{part.text}
) } if (part.type === "tool-searchMemories") { if ( part.state === "input-available" || part.state === "input-streaming" ) { return (
Searching memories...
) } } return null })} {})} />
) }