moeru-ai/airi · error · Error
No compatible input provided for streaming transcription.
Error message
No compatible input provided for streaming transcription.
What it means
In the hearing (STT) module, when the selected provider advertises streaming output, one of three stream branches must match the input: (supportsStreamInput + inputAudioStream), (!supportsStreamInput + file), or (supportsStreamInput + file with no audio stream). If none matched and the provider cannot fall back to generate (or there is still no file), this error is thrown — the input shape and provider feature flags are incompatible.
Source
Thrown at packages/stage-ui/src/stores/modules/hearing.ts:494
mode: 'stream',
...streamResult,
}
}
if (features.supportsStreamInput && !normalizedInput.inputAudioStream && normalizedInput.file) {
const streamResult = streamExecutor({
...request,
file: normalizedInput.file,
} as Parameters<typeof streamExecutor>[0])
emitSucceeded(0, true)
return {
mode: 'stream',
...streamResult,
}
}
if (!features.supportsGenerate || !normalizedInput.file) {
throw new Error('No compatible input provided for streaming transcription.')
}
}
if (!normalizedInput.file) {
throw new Error('File input is required for transcription.')
}
const useVerboseJson = !format && confidenceThreshold.value > CONFIDENCE_THRESHOLD_DISABLED
const response = await generateTranscription({
...provider.transcription(model, options?.providerOptions),
file: normalizedInput.file,
fileName: resolveTranscriptionFileName(normalizedInput.file, normalizedInput.fileName),
responseFormat: useVerboseJson ? 'verbose_json' : format,
})
if (useVerboseJson) {
if (response.segments) {
verboseJsonNotSupported.value = falseView on GitHub (pinned to f679616c34)
Solutions
- Pass a file (Blob/File) or a live inputAudioStream matching the provider's declared capabilities.
- Check the provider's features (supportsStreamInput, supportsGenerate, supportsStreamOutput) before choosing the input shape.
- Fix upstream audio capture so normalization always yields a file or stream.
- Switch to a provider with generate support for file-based transcription.
Example fix
// before
const result = await hearing.transcribe(model, {})
// after - match input shape to provider features
const features = sttProvider.features
const input = features.supportsStreamInput && audioStream
? { inputAudioStream: audioStream }
: { file: recordedBlob }
if (!input.inputAudioStream && !input.file)
throw new Error('Nothing to transcribe: provide a file or an audio stream')
const result = await hearing.transcribe(model, input) Defensive patterns
Strategy: validation
Validate before calling
const features = provider.features
const hasStreamInput = features.supportsStreamInput && Boolean(input.inputAudioStream)
const hasFile = Boolean(input.file)
if (features.supportsStreamOutput && !hasStreamInput && !hasFile)
throw new Error('Provide a file or an audio stream for streaming transcription')
if (!features.supportsStreamOutput && !features.supportsGenerate)
throw new Error('Provider supports neither streaming nor generate transcription')
await hearing.transcribe(model, input) Type guard
function isCompatibleTranscriptionInput(features: SttFeatures, input: NormalizedInput): boolean {
if (features.supportsStreamOutput) {
if (features.supportsStreamInput && input.inputAudioStream) return true
if (input.file) return true
return features.supportsGenerate && Boolean(input.file)
}
return Boolean(input.file)
} Try / catch
try {
const result = await hearing.transcribe(model, input)
}
catch (error) {
if (errorMessageFrom(error) === 'No compatible input provided for streaming transcription.') {
toast.info('Start the microphone or select an audio file before transcribing')
return
}
throw error
} Prevention
- Declare provider feature flags accurately (supportsStreamInput/Output/Generate).
- Fail loudly in the capture layer so empty inputs are caught before transcription.
- Wire the input source (file or stream) in the same code path that selects the provider.
- Disable the transcribe action until an input source is attached.
When it happens
Trigger: Calling transcription with a provider whose features include stream output+input but passing neither inputAudioStream nor file; using a stream-output-only provider (no generate support) with an empty/failed normalization step so no file was produced; passing only a fileName or options while the audio capture layer produced nothing.
Common situations: Microphone capture failing silently so normalizedInput ends up empty; feature flags of a custom STT provider misdeclared (supportsStreamOutput without generate); calling the hearing store programmatically without wiring an input source.
Related errors
- File input is required for transcription.
- No audio file provided for transcription.
- Web Speech API is not available in this environment. It requ
- MiMo voice clone requires a base64 audio sample in data URI
- MiMo voice design requires a style prompt in the user messag
AI-assisted analysis of moeru-ai/airi@f679616c34 (2026-08-18).
Data as JSON: /api/errors/8a899054ec356cb4.
Report an issue: GitHub.