FlowiseAI/Flowise · error · Error
Speech to text is not selected, but found a recorded audio f
Error message
Speech to text is not selected, but found a recorded audio file. Please fix the chain.
What it means
Thrown by the speech-to-text handler when an incoming request carries a recorded audio file but no speech-to-text node/provider was selected in the chatflow chain. The code reaches the `else` branch only because the upstream component captured audio yet the chain has no STT consumer wired to process it.
Source
Thrown at packages/components/src/speechToText.ts:130
const groqClient = new Groq({
apiKey: credentialData.groqApiKey
})
const file = await toFile(audio_file, upload.name)
const groqTranscription = await groqClient.audio.transcriptions.create({
file,
model: speechToTextConfig?.model || 'whisper-large-v3',
language: speechToTextConfig?.language,
temperature: speechToTextConfig?.temperature ? parseFloat(speechToTextConfig.temperature) : undefined,
response_format: 'verbose_json'
})
if (groqTranscription?.text) {
return groqTranscription.text
}
break
}
}
} else {
throw new Error('Speech to text is not selected, but found a recorded audio file. Please fix the chain.')
}
return undefined
}
View on GitHub (pinned to abe4a8601a)
Solutions
- Add and connect a Speech-to-Text node to the chain and select a provider type.
- Provide the required credentials for the chosen STT provider in the node configuration.
- If audio input is unintended, remove the audio capture node so no audio_file reaches this handler.
Example fix
// before: chain has audio input node but no STT node // after: connect a SpeechToText node and set e.g. type = GROQ_WHISPER with a valid groqApiKey
Defensive patterns
Strategy: validation
Validate before calling
function assertSttConfigured(audioFile: unknown, sttType: unknown): void {
if (audioFile && !sttType) {
throw new Error('Audio input present but no Speech-to-Text node is configured in the chain')
}
}
// call before dispatching audio to the STT handler Type guard
function isSpeechToTextType(v: unknown): v is 'OPENAI_WHISPER' | 'AZURE_SPEECH_TO_TEXT' | 'GROQ_WHISPER' {
return typeof v === 'string' && ['OPENAI_WHISPER','AZURE_SPEECH_TO_TEXT','GROQ_WHISPER'].includes(v)
} Try / catch
try {
const text = await transcribeAudio(audioFile, sttType, config)
} catch (e) {
if (/Speech to text is not selected/.test(e.message)) {
// prompt user to wire an STT node into the chain
}
throw e
} Prevention
- When adding audio input to a chatflow, always connect a Speech-to-Text node.
- Validate chain topology at save time: audio capture requires an STT consumer.
- Document the required node pairing for voice flows.
When it happens
Trigger: A chatflow or agent chain that includes audio recording (e.g. a microphone/upload input producing audio_file) but does not select a SpeechToTextType (OPENAI_WHISPER, AZURE_SPEECH_TO_TEXT, or GROQ_WHISPER). The throw is at speechToText.ts:130.
Common situations: Enabling voice input on a chatflow without adding/configuring the speech-to-text node; removing or disabling the STT node while the audio input node remains connected.
Related errors
- HuggingFace API key is required. Please configure it in the
- Perplexity API Key missing from credential
- Invalid path: path must be within allowed directories (${all
- Invalid SQLite path: database path is required
- Invalid SQLite path: path must be within allowed directories
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/e20f03b380f15212.
Report an issue: GitHub.