"use client"; import React, { useState, useEffect } from "react"; import { Brain, ChevronDown, ChevronRight, Sparkles, Clock, CheckCircle2 } from "lucide-react"; interface ThinkingBoxProps { thinking: string; isStreaming?: boolean; thinkingTimeSeconds?: number; defaultExpanded?: boolean; } export const ThinkingBox: React.FC = ({ thinking, isStreaming = false, thinkingTimeSeconds, defaultExpanded = true, }) => { const [isExpanded, setIsExpanded] = useState(defaultExpanded); const [elapsedSeconds, setElapsedSeconds] = useState(thinkingTimeSeconds || 0); useEffect(() => { let timer: NodeJS.Timeout; if (isStreaming) { const startTime = Date.now() - (elapsedSeconds * 1000); timer = setInterval(() => { setElapsedSeconds(Number(((Date.now() - startTime) / 1000).toFixed(1))); }, 100); } else if (thinkingTimeSeconds) { setElapsedSeconds(thinkingTimeSeconds); } return () => clearInterval(timer); }, [isStreaming, thinkingTimeSeconds]); if (!thinking && !isStreaming) return null; return (
{/* Header Button */} {/* Collapsible Content */} {isExpanded && (
{thinking.split("\n").map((line, idx) => { if (!line.trim()) return
; const isStepHeader = line.match(/^(\d+\.|\[.*?\])/); return (
{line}
); })} {isStreaming && (
Evaluating transformer self-attention states...
)}
)}
); };