"use client"; import { useState } from "react"; interface TranscriptViewerProps { transcriptContent: string; transcriptUrl?: string | null; } /** * Format the transcript content into a more readable format with styling */ function formatTranscript(content: string): React.ReactNode[] { if (!content.trim()) { return [

No transcript content available.

]; } // Split the transcript by lines const lines = content.split("\n"); const elements: React.ReactNode[] = []; let currentSpeaker: string | null = null; let currentMessages: string[] = []; // Process each line lines.forEach((line) => { line = line.trim(); if (!line) { // Empty line, ignore return; } // Check if this is a new speaker line if (line.startsWith("User:") || line.startsWith("Assistant:")) { // If we have accumulated messages for a previous speaker, add them if (currentSpeaker && currentMessages.length > 0) { elements.push(
{currentMessages.map((msg, i) => (

{msg}

))}
); currentMessages = []; } // Set the new current speaker currentSpeaker = line.startsWith("User:") ? "User" : "Assistant"; // Add the content after "User:" or "Assistant:" const messageContent = line.substring(line.indexOf(":") + 1).trim(); if (messageContent) { currentMessages.push(messageContent); } } else if (currentSpeaker) { // This is a continuation of the current speaker's message currentMessages.push(line); } }); // Add any remaining messages if (currentSpeaker && currentMessages.length > 0) { elements.push(
{currentMessages.map((msg, i) => (

{msg}

))}
); } return elements; } /** * Component to display a chat transcript */ export default function TranscriptViewer({ transcriptContent, transcriptUrl, }: TranscriptViewerProps) { const [showTranscript, setShowTranscript] = useState(false); return (
Transcript:
{transcriptUrl && ( View Source )}
{/* Display transcript content if expanded */} {showTranscript && (
{formatTranscript(transcriptContent)}
)}
); }