feat(transcription): add Xiaomi MiMo ASR provider (mimo-v2.5-asr)
Add support for Xiaomi MiMo ASR as a third transcription backend alongside Groq and OpenAI Whisper. Xiaomi ASR uses the /v1/chat/completions endpoint with base64-encoded audio input, rather than the standard Whisper multipart upload format. Co-Authored-By:连 <lian@tangping.homes>
This commit is contained in:
committed by
Xubin Ren
co-authored by
连
parent
552ec18a3c
commit
c20ecc52d7
@@ -18,13 +18,18 @@ from loguru import logger
|
||||
from nanobot.config.paths import get_media_dir
|
||||
from nanobot.utils.media_decode import FileSizeExceeded, save_base64_data_url
|
||||
|
||||
TranscriptionProviderName = Literal["groq", "openai", "openrouter"]
|
||||
TranscriptionProviderName = Literal["groq", "openai", "openrouter", "xiaomi_mimo"]
|
||||
|
||||
_DEFAULT_PROVIDER: TranscriptionProviderName = "groq"
|
||||
_DEFAULT_MODELS: dict[TranscriptionProviderName, str] = {
|
||||
"groq": "whisper-large-v3",
|
||||
"openai": "whisper-1",
|
||||
"openrouter": "openai/whisper-1",
|
||||
"xiaomi_mimo": "mimo-v2.5-asr",
|
||||
}
|
||||
_PROVIDER_ALIASES: dict[str, TranscriptionProviderName] = {
|
||||
"mimo": "xiaomi_mimo",
|
||||
"xiaomi": "xiaomi_mimo",
|
||||
}
|
||||
_MAX_AUDIO_BYTES_FALLBACK = 25 * 1024 * 1024
|
||||
_AUDIO_MIME_ALLOWED: frozenset[str] = frozenset({
|
||||
@@ -69,6 +74,8 @@ class TranscriptionIngressError(Exception):
|
||||
def _as_provider(value: Any) -> TranscriptionProviderName | None:
|
||||
if isinstance(value, str):
|
||||
name = value.strip().lower()
|
||||
if name in _PROVIDER_ALIASES:
|
||||
return _PROVIDER_ALIASES[name]
|
||||
if name in _DEFAULT_MODELS:
|
||||
return name # type: ignore[return-value]
|
||||
return None
|
||||
@@ -181,6 +188,15 @@ async def transcribe_audio_file(
|
||||
language=config.language,
|
||||
model=config.model,
|
||||
)
|
||||
elif config.provider == "xiaomi_mimo":
|
||||
from nanobot.providers.transcription import XiaomiMiMoTranscriptionProvider
|
||||
|
||||
provider = XiaomiMiMoTranscriptionProvider(
|
||||
api_key=config.api_key,
|
||||
api_base=config.api_base or None,
|
||||
language=config.language,
|
||||
model=config.model,
|
||||
)
|
||||
else:
|
||||
from nanobot.providers.transcription import GroqTranscriptionProvider
|
||||
|
||||
|
||||
Reference in New Issue
Block a user