ruvnet/ruflo · error
No available providers
Error message
No available providers
What it means
Thrown by ProviderManager.complete() when no LLM provider can service the request. initialize() swallows per-provider failures (provider-manager.ts:96-98) and only registers providers that started successfully, so the internal map can be empty or missing the one you named. Reaching this throw means either preferredProvider was never registered, or selectProvider() found zero available providers.
Source
Thrown at v3/@claude-flow/providers/src/provider-manager.ts:154
* Complete a request with automatic provider selection
*/
async complete(request: LLMRequest, preferredProvider?: LLMProvider): Promise<LLMResponse> {
// Check cache first
if (this.config.cache?.enabled) {
const cached = this.getCached(request);
if (cached) {
this.logger.debug('Cache hit', { requestId: request.requestId });
return cached;
}
}
// Select provider
const provider = preferredProvider
? this.providers.get(preferredProvider)
: await this.selectProvider(request);
if (!provider) {
throw new Error('No available providers');
}
const startTime = Date.now();
try {
const response = await provider.complete(request);
this.updateMetrics(provider.name, Date.now() - startTime, false, response.cost?.totalCost || 0);
// Cache response
if (this.config.cache?.enabled) {
this.setCached(request, response);
}
this.emit('complete', { provider: provider.name, response });
return response;
} catch (error) {
this.updateMetrics(provider.name, Date.now() - startTime, true, 0);
View on GitHub (pinned to fa13ee4ad6)
Solutions
- await manager.initialize() then assert manager.listProviders().length > 0 before sending requests
- Check startup logs for 'Failed to initialize <provider>' — that line names exactly which configs were skipped and why
- Fix at least one provider config: required API-key env vars, reachable ollamaUrl / ruvector baseUrl
- If passing preferredProvider, confirm manager.getProvider(name) is defined, or omit it to let selection choose any registered provider
- Run await manager.healthCheck() to see per-provider status before dispatching
Example fix
// before
const manager = new ProviderManager(config);
const res = await manager.complete(request, 'ollama'); // throws: No available providers
// after
const manager = new ProviderManager(config);
await manager.initialize();
if (manager.listProviders().length === 0) {
throw new Error('No provider initialized — check API keys and server URLs');
}
const res = await manager.complete(request, 'ollama'); Defensive patterns
Strategy: validation
Validate before calling
await manager.initialize();
const registered = manager.listProviders();
if (registered.length === 0) {
throw new Error('No providers initialized — check API keys and server URLs');
}
let provider = preferred;
if (provider && !registered.includes(provider)) provider = undefined; Type guard
function isNoProvidersError(e: unknown): boolean {
return e instanceof Error && e.message === 'No available providers';
} Try / catch
try {
return await manager.complete(request);
} catch (e) {
if (isNoProvidersError(e)) {
throw new Error(`No available providers (registered: ${manager.listProviders().join(', ') || 'none'})`);
}
throw e;
} Prevention
- Always await initialize() and assert listProviders() is non-empty at startup
- Treat empty listProviders() as a startup blocker with a clear message, not a runtime surprise
- Don't pass preferredProvider values you haven't verified against listProviders()
When it happens
Trigger: complete(req) when every entry in config.providers failed initialize() (missing API key, unreachable local server); complete(req, 'ollama') when the Ollama provider failed to start and is absent from the map; calling complete() before await manager.initialize() resolves.
Common situations: Missing ANTHROPIC_API_KEY/OPENAI_API_KEY so all cloud providers are skipped at init; local Ollama/RuVector server down at init time; forgetting to await initialize(); passing a preferredProvider string that doesn't match the registered set.
Related errors
- Root guidance file not found: ${this.config.rootGuidancePath
- Pool ${this.id} at maximum capacity (${this.config.maxWorker
- Invalid completion type
- MCP server "${server.name}" returned HTTP ${httpStatus}: ${h
- No endpoints configured. This build requires OpenAI-compatib
AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18).
Data as JSON: /api/errors/a414b340f8d39bfe.
Report an issue: GitHub.