from providers.asr.buffered import BufferedASRService from providers.asr.dashscope import DashScopeRealtimeASRService from providers.asr.openai_compatible import OpenAICompatibleASRService from providers.asr.volcengine import VolcengineRealtimeASRService from providers.factory.default import DefaultRealtimeServiceFactory from runtime.ports import ASRServiceSpec def test_create_asr_service_dashscope_returns_streaming_provider(): factory = DefaultRealtimeServiceFactory() service = factory.create_asr_service( ASRServiceSpec( provider="dashscope", mode="streaming", sample_rate=16000, api_key="test-key", model="qwen3-asr-flash-realtime", ) ) assert isinstance(service, DashScopeRealtimeASRService) assert service.mode == "streaming" def test_create_asr_service_openai_compatible_returns_offline_provider(): factory = DefaultRealtimeServiceFactory() service = factory.create_asr_service( ASRServiceSpec( provider="openai_compatible", sample_rate=16000, api_key="test-key", model="FunAudioLLM/SenseVoiceSmall", ) ) assert isinstance(service, OpenAICompatibleASRService) assert service.mode == "offline" assert service.enable_interim is False def test_create_asr_service_volcengine_returns_streaming_provider(): factory = DefaultRealtimeServiceFactory() service = factory.create_asr_service( ASRServiceSpec( provider="volcengine", mode="streaming", sample_rate=16000, api_key="test-key", api_url="wss://openspeech.bytedance.com/api/v3/sauc/bigmodel", model="bigmodel", app_id="app-1", uid="caller-1", request_params={"end_window_size": 800}, ) ) assert isinstance(service, VolcengineRealtimeASRService) assert service.mode == "streaming" assert service.protocol == "seed" assert service.app_id == "app-1" assert service.uid == "caller-1" assert service.request_params["end_window_size"] == 800 def test_create_asr_service_fallback_buffered_for_unsupported_provider(): factory = DefaultRealtimeServiceFactory() service = factory.create_asr_service( ASRServiceSpec( provider="unknown_provider", sample_rate=16000, ) ) assert isinstance(service, BufferedASRService) assert service.mode == "offline"