Implement DashScope ASR provider and enhance ASR service architecture

- Added DashScope ASR service implementation for real-time streaming.
- Updated ASR provider logic to support DashScope alongside existing providers.
- Enhanced runtime metadata resolution to include DashScope as a valid ASR provider.
- Modified configuration files and documentation to reflect the addition of DashScope.
- Introduced tests to validate DashScope integration and ASR service behavior.
- Refactored ASR service factory to accommodate new provider options and modes.
This commit is contained in:
Xin Wang
2026-03-06 11:44:39 +08:00
parent 7e0b777923
commit e11c3abb9e
19 changed files with 940 additions and 44 deletions

View File

@@ -0,0 +1,46 @@
from providers.asr.buffered import BufferedASRService
from providers.asr.dashscope import DashScopeRealtimeASRService
from providers.asr.openai_compatible import OpenAICompatibleASRService
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"
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"