diff --git a/lib/features/chat/services/voice_input_service.dart b/lib/features/chat/services/voice_input_service.dart index 892f4e5..40f1452 100644 --- a/lib/features/chat/services/voice_input_service.dart +++ b/lib/features/chat/services/voice_input_service.dart @@ -523,9 +523,18 @@ class VoiceInputService { /// Ensures initialization and microphone permission before starting. Future> beginListening() async { await initialize(); - final hasMic = await checkPermissions(); - if (!hasMic) { - throw Exception('Microphone permission not granted'); + // For on-device STT we preflight the microphone permission so we can + // fail fast with a clear error before starting any recognition. + // + // For server-only STT we skip the preflight check and let the VAD / + // recording pipeline request or validate permissions as needed. This + // avoids false negatives from the lightweight probe and prevents + // blocking server STT when the platform would otherwise allow it. + if (!prefersServerOnly) { + final hasMic = await checkPermissions(); + if (!hasMic) { + throw Exception('Microphone permission not granted'); + } } return await startListening(); }