import { Badge } from "@/components/ui/badge"; import { CodeEditor } from "@/components/ui/codeEditor"; import { BifrostTranscribe, TranscriptionInput } from "@/lib/types/logs"; import { Clock, FileAudio, Mic } from "lucide-react"; import AudioPlayer from "./audioPlayer"; interface TranscriptionViewProps { transcriptionInput?: TranscriptionInput; transcriptionOutput?: BifrostTranscribe; isStreaming?: boolean; } export default function TranscriptionView({ transcriptionInput, transcriptionOutput, isStreaming }: TranscriptionViewProps) { const formatTime = (seconds: number) => { const mins = Math.floor(seconds / 60); const secs = (seconds % 60).toFixed(1); return `${mins}:${secs.padStart(4, "0")}`; }; return (
{/* Transcription Input */} {transcriptionInput && (
Transcription Input
AUDIO FILE
{/* Audio Controls */}
)} {/* Transcription Output */} {(transcriptionOutput || isStreaming) && (
Transcription Output
{!transcriptionOutput && isStreaming ? (
Output was streamed and is not available.
) : ( <> {/* Main Transcription Text */}
{transcriptionOutput?.text}
{/* Basic Information */} {(transcriptionOutput?.task || transcriptionOutput?.language || transcriptionOutput?.duration) && (
{transcriptionOutput?.task && (
TASK
{transcriptionOutput.task}
)} {transcriptionOutput?.language && (
DETECTED LANGUAGE
{transcriptionOutput.language}
)} {transcriptionOutput?.duration && (
DURATION
{transcriptionOutput.duration.toFixed(1)}s
)}
)} {/* Words with Timing */} {transcriptionOutput?.words && transcriptionOutput.words.length > 0 && (
WORD-LEVEL TIMING
{transcriptionOutput.words.map((word, index) => (
{word.word} {formatTime(word.start)}
))}
)} {/* Segments */} {transcriptionOutput?.segments && transcriptionOutput.segments.length > 0 && (
SEGMENTS
{transcriptionOutput.segments.map((segment) => (
Segment {segment.id}
{formatTime(segment.start)} - {formatTime(segment.end)}
{segment.text}
Avg LogProb: {segment.avg_logprob.toFixed(3)} No Speech: {(segment.no_speech_prob * 100).toFixed(1)}% Temp: {segment.temperature.toFixed(1)}
))}
)} {/* Log Probabilities */} {transcriptionOutput?.logprobs && transcriptionOutput.logprobs.length > 0 && (
LOG PROBABILITIES
)} )}
)}
); }