import React, { useState } from 'react'; import { LogEntry } from './columns'; import { DataTable } from './table'; import { columns } from './columns'; import { Card, Title, Text, Metric, AreaChart } from '@tremor/react'; import { RequestViewer } from './index'; interface SessionViewProps { sessionId: string; logs: LogEntry[]; onBack: () => void; } export const SessionView: React.FC = ({ sessionId, logs, onBack }) => { // Track which log row is expanded const [expandedRequestId, setExpandedRequestId] = useState(null); // Calculate session metrics const totalCost = logs.reduce((sum, log) => sum + (log.spend || 0), 0); const totalTokens = logs.reduce((sum, log) => sum + (log.total_tokens || 0), 0); const startTime = logs.length > 0 ? new Date(logs[0].startTime) : new Date(); const endTime = logs.length > 0 ? new Date(logs[logs.length - 1].endTime) : new Date(); const durationMs = endTime.getTime() - startTime.getTime(); const durationSec = (durationMs / 1000).toFixed(2); // Prepare data for the timeline chart const timelineData = logs.map(log => ({ time: new Date(log.startTime).toISOString(), tokens: log.total_tokens || 0, cost: log.spend || 0, })); return (
{/* Header with back button */}

Session Details

{/* Session Overview Cards */}
Total Requests {logs.length} Total Cost ${totalCost.toFixed(4)} Total Tokens {totalTokens}
{/* Request Timeline */} Session Logs
true} expandedRequestId={expandedRequestId} onRowExpand={setExpandedRequestId} />
); };