using Microsoft.Extensions.Options; namespace MeetingAssistant.Transcription; public sealed class ConfiguredSpeechRecognitionPipelineFactory : ISpeechRecognitionPipelineFactory { private readonly IServiceProvider services; private readonly MeetingAssistantOptions options; public ConfiguredSpeechRecognitionPipelineFactory( IServiceProvider services, IOptions options) { this.services = services; this.options = options.Value; } public ISpeechRecognitionPipeline Create() { return options.Recording.TranscriptionProvider switch { "funasr" => ActivatorUtilities.CreateInstance(services), "whisper-local" => ActivatorUtilities.CreateInstance(services), "azure-speech" => ActivatorUtilities.CreateInstance(services), _ => throw new InvalidOperationException( $"Unsupported speech recognition pipeline '{options.Recording.TranscriptionProvider}'.") }; } }