"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; interface Message { role: "user" | "assistant"; content: string; } interface StepMetadata { message?: string; conversation?: Message[]; } export interface Step { type: string; article: string; links?: unknown[]; metadata?: StepMetadata; } export interface Run { steps: Step[]; start_article: string; destination_article: string; } interface ReasoningTraceProps { run: Run | null | undefined; } const MAX_MESSAGE_LENGTH = 200; function ExpandableMessage({ message }: { message: Message }) { const [isExpanded, setIsExpanded] = useState(false); const isLongMessage = message.content.length > MAX_MESSAGE_LENGTH; const toggleExpand = () => setIsExpanded(!isExpanded); return (

{message.role}

{isLongMessage && !isExpanded ? `${message.content.substring(0, MAX_MESSAGE_LENGTH)}...` : message.content}

{isLongMessage && ( )}
); } export default function ReasoningTrace({ run }: ReasoningTraceProps) { if (!run?.steps) { return (
{run === undefined ? "Loading..." : "Select a run to view the reasoning trace"}
); } return (

LLM Reasoning Trace

{run.steps.map((step, index) => (

Step {index + 1} - {step.article}

{step.metadata?.message && (

"{step.metadata.message}"

)}
{step.metadata?.conversation && step.metadata.conversation.length > 0 && (
{step.metadata.conversation.map((message, msgIndex) => ( ))}
)} {index < run.steps.length - 1 && (
)}
))}
); }