Merge pull request #635 from zouzhe1/fix/mimo-asr-credential-gate

fix(asr): validate MiMo credentials as ASR provider
This commit is contained in:
Chris233 authored and GitHub committed 2026-06-10 13:53:48 +08:00
commit 4dcd16debb
2 files changed
+45 -15

No files matched your search

@@ -8,6 +8,25 @@
use super::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum CloudAsrCredentialRequirement {
AsrApiKey,
Volcengine,
}
pub(crate) fn cloud_asr_credential_requirement(
active_asr: &str,
) -> CloudAsrCredentialRequirement {
if is_whisper_compatible_provider(active_asr)
|| is_bailian_provider(active_asr)
|| is_mimo_provider(active_asr)
{
CloudAsrCredentialRequirement::AsrApiKey
} else {
CloudAsrCredentialRequirement::Volcengine
}
}
pub(crate) fn ensure_microphone_permission(_inner: &Arc<Inner>) -> Result<(), String> {
use crate::permissions::{self, PermissionStatus};
@@ -78,22 +97,25 @@ pub(crate) fn ensure_asr_credentials() -> Result<(), String> {
}
}
if is_whisper_compatible_provider(&active_asr) || is_bailian_provider(&active_asr) {
let api_key = CredentialsVault::get(CredentialAccount::AsrApiKey)
.ok()
.flatten()
.unwrap_or_default();
if api_key.trim().is_empty() {
return Err("请先在设置中填写 ASR 服务商 API Key".to_string());
match cloud_asr_credential_requirement(&active_asr) {
CloudAsrCredentialRequirement::AsrApiKey => {
let api_key = CredentialsVault::get(CredentialAccount::AsrApiKey)
.ok()
.flatten()
.unwrap_or_default();
if api_key.trim().is_empty() {
return Err("请先在设置中填写 ASR 服务商 API Key".to_string());
}
Ok(())
}
CloudAsrCredentialRequirement::Volcengine => {
let creds = read_volc_credentials();
if creds.app_id.trim().is_empty() || creds.access_token.trim().is_empty() {
Err("请先在设置中填写火山引擎 ASR App Key 和 Access Key".to_string())
} else {
Ok(())
}
}
return Ok(());
}
let creds = read_volc_credentials();
if creds.app_id.trim().is_empty() || creds.access_token.trim().is_empty() {
Err("请先在设置中填写火山引擎 ASR App Key 和 Access Key".to_string())
} else {
Ok(())
}
}
@@ -211,6 +211,14 @@ fn windows_local_providers_are_keyless_and_not_whisper_compatible() {
));
}
#[test]
fn credential_gate_classifies_mimo_as_api_key_asr_provider() {
assert_eq!(
cloud_asr_credential_requirement(crate::asr::mimo::PROVIDER_ID),
CloudAsrCredentialRequirement::AsrApiKey
);
}
#[test]
fn verbose_json_enabled_only_for_whisper_family() {
// verbose_json + 幻听过滤只对返回完整 Whisper 指标的 provider 开启。