danny-avila/LibreChat · warning
Multiple providers are set. Please set only one provider.
Error message
Multiple providers are set. Please set only one provider.
What it means
getProviderSchema filters sttSchema entries (excluding `allowedAddresses`) for objects with at least one key and requires exactly one. If two or more providers (e.g. openai AND azureOpenAI) are populated, it throws because the dispatcher cannot choose between them.
Source
Thrown at api/server/services/Files/Audio/STTService.js:165
req.config ??
(await getAppConfig({
role: req?.user?.role,
userId: req?.user?.id,
tenantId: req?.user?.tenantId,
}));
const sttSchema = appConfig?.speech?.stt;
if (!sttSchema) {
throw new Error(
'No STT schema is set. Did you configure STT in the custom config (librechat.yaml)?',
);
}
const providers = Object.entries(sttSchema).filter(
([key, value]) => key !== 'allowedAddresses' && Object.keys(value).length > 0,
);
if (providers.length !== 1) {
throw new Error(
providers.length > 1
? 'Multiple providers are set. Please set only one provider.'
: 'No provider is set. Please set a provider.',
);
}
const [provider, schema] = providers[0];
return [provider, schema, sttSchema.allowedAddresses];
}
/**
* Recursively removes undefined properties from an object.
* @param {Object} obj - The object to clean.
* @returns {void}
*/
removeUndefined(obj) {
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === 'object') {View on GitHub (pinned to 5ff282f900)
Solutions
- Keep only one populated provider under speech.stt and remove or empty the others.
- Reload the config / restart the API server.
Example fix
# before
speech:
stt:
openai: { apiKey: '...' }
azureOpenAI: { instanceName: '...', deploymentName: '...' }
# after
speech:
stt:
azureOpenAI: { instanceName: '...', deploymentName: '...', apiKey: '...' } Defensive patterns
Strategy: validation
Validate before calling
const providers = Object.entries(appConfig.speech.stt || {})
.filter(([k, v]) => k !== 'allowedAddresses' && v && Object.keys(v).length > 0);
if (providers.length > 1) {
throw new Error(`Multiple STT providers configured: ${providers.map(p => p[0]).join(', ')}`);
} Prevention
- Keep exactly one provider block populated; comment out or delete the others.
- Add a CI lint step that fails when more than one STT provider is non-empty.
- Document the single-provider constraint next to the speech.stt example.
When it happens
Trigger: librechat.yaml `speech.stt` has more than one provider block populated with at least one field each.
Common situations: Copy-pasted example config leaving two providers filled in; migrated from openai to azureOpenAI without removing the old block; both a default and an override active.
Related errors
- No provider is set. Please set a provider.
- Invalid provider
- Multiple providers are set. Please set only one provider.
- No STT schema is set. Did you configure STT in the custom co
- No provider is set. Please set a provider.
AI-assisted analysis of danny-avila/LibreChat@5ff282f900 (2026-08-12).
Data as JSON: /api/errors/5b9a5436a83d6a71.
Report an issue: GitHub.