namespace MeetingAssistant.Transcription; public sealed class FunAsrSpeechRecognitionPipeline : StreamingSpeechRecognitionPipeline { private readonly IFunAsrBackendLifecycle backendLifecycle; private readonly FunAsrTranscriptFinalizer transcriptFinalizer; public FunAsrSpeechRecognitionPipeline( FunAsrStreamingTranscriptionProvider transcriptionProvider, IFunAsrBackendLifecycle backendLifecycle, FunAsrTranscriptFinalizer transcriptFinalizer) : base(transcriptionProvider) { this.backendLifecycle = backendLifecycle; this.transcriptFinalizer = transcriptFinalizer; } public override Task WaitUntilReadyAsync(CancellationToken cancellationToken) { return backendLifecycle.EnsureStartedAsync(cancellationToken); } protected override Task> BuildFinishedTranscriptAsync( string audioPath, IReadOnlyList liveSegments, SpeechRecognitionPipelineOptions options, CancellationToken cancellationToken) { return transcriptFinalizer.FinalizeAsync(audioPath, liveSegments, cancellationToken); } }