"""Demo ASR adapter for local voice co-creation smoke tests.""" from __future__ import annotations from fastapi import HTTPException from app.services.adapters.asr.models import TranscriptionOutput from app.services.adapters.base import BaseAdapter from app.services.adapters.registry import AdapterRegistry @AdapterRegistry.register("asr", "demo") class DemoASRAdapter(BaseAdapter[TranscriptionOutput]): """Return transcript hints or text uploads without external ASR services.""" adapter_type = "asr" adapter_name = "demo" async def execute( self, audio_bytes: bytes, file_name: str | None = None, mime_type: str | None = None, transcript_hint: str | None = None, **kwargs, ) -> TranscriptionOutput: hint = (transcript_hint or "").strip() if hint: return TranscriptionOutput( transcript_text=hint, confidence=1.0, provider=self.adapter_name, ) if mime_type and mime_type.startswith("text/"): text = audio_bytes.decode("utf-8", errors="ignore").strip() if text: return TranscriptionOutput( transcript_text=text, confidence=1.0, provider=self.adapter_name, ) raise HTTPException( status_code=503, detail=( "当前环境未配置真实语音转写,请先使用文本共创模式," "或在开发模式下提供 transcript_hint。" ), ) async def health_check(self) -> bool: return True @property def estimated_cost(self) -> float: return 0.0