"use client"; import { useState } from "react"; import { Wrench, ChevronDown, ChevronRight, User, Bot } from "lucide-react"; import type { Message, ToolCall } from "@/lib/types"; interface Props { message: Message; toolResults: Map; } function ToolCallBlock({ tc, result }: { tc: ToolCall; result?: { name: string; content: string } }) { const [open, setOpen] = useState(false); let args: Record = {}; try { args = JSON.parse(tc.function.arguments); } catch {} return (
{open && (
            {JSON.stringify(args, null, 2)}
          
{result && (
              {result.content.slice(0, 500)}
              {result.content.length > 500 ? "..." : ""}
            
)}
)}
); } export function MessageBubble({ message, toolResults }: Props) { const isUser = message.role === "user"; const content = message.content || ""; let toolCalls: ToolCall[] = []; if (message.tool_calls) { try { toolCalls = JSON.parse(message.tool_calls); } catch {} } if (!content && toolCalls.length === 0) return null; return (
{isUser ? ( ) : ( )} {isUser ? "You" : "Hermes"}
{content && (

{content}

)} {toolCalls.length > 0 && (
{toolCalls.length <= 3 ? ( toolCalls.map((tc) => ( )) ) : ( )}
)}
); } function CollapsedToolCalls({ toolCalls, toolResults, }: { toolCalls: ToolCall[]; toolResults: Map; }) { const [open, setOpen] = useState(false); return (
{open && toolCalls.map((tc) => ( ))}
); }