ruvnet/ruflo · error

No providers match the requirements

Error message

No providers match the requirements

What it means

Thrown by ProviderAdapter's provider-selection step: every registered provider/model pair is scored via calculateProviderScore(provider, model, requirements), and if the resulting candidate list is empty the adapter refuses to pick anything. It means either no providers are registered/eligible at all, or your requirements object excluded every combination that exists.

Source

Thrown at v3/@claude-flow/integration/src/provider-adapter.ts:540

        const avgCost =
          (provider.costPerToken.inputPer1K + provider.costPerToken.outputPer1K) / 2;
        if (requirements.maxCostPer1K && avgCost > requirements.maxCostPer1K) {
          continue;
        }

        // Calculate score
        const { score, reasons } = this.calculateProviderScore(
          provider,
          model,
          requirements
        );

        candidates.push({ provider, model, score, reasons });
      }
    }

    if (candidates.length === 0) {
      throw new Error('No providers match the requirements');
    }

    // Sort by score
    candidates.sort((a, b) => b.score - a.score);

    const best = candidates[0];
    const alternatives = candidates.slice(1, 4).map(({ provider, model, score }) => ({
      provider,
      model,
      score,
    }));

    this.emit('provider-selected', {
      providerId: best.provider.id,
      modelId: best.model.id,
      score: best.score,
    });

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Log the registered providers and their models, then diff each field of your requirements against them to find the excluding criterion
  2. Relax the requirements one field at a time (drop optional capabilities, widen model constraints) until at least one candidate survives
  3. Register or enable a provider/model that satisfies the requirements before invoking selection
  4. Check provider status — providers that are disabled, rate-limited, or otherwise filtered never become candidates

Example fix

// before
const requirements = { capabilities: ['tools', 'vision'], maxCostPerCall: 0.0001, maxLatencyMs: 100 };
const picked = adapter.selectProvider(model, requirements); // throws: no provider offers 'vision'

// after
const requirements = { capabilities: ['tools'] }; // keep only constraints at least one provider meets
const picked = adapter.selectProvider(model, requirements);
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check that at least one registered provider/model survives your requirements
const eligible = getRegisteredProviders() // however you enumerate the registry
  .filter(p => p.status === 'available')
  .some(p => p.models.some(m => meetsRequirements(m, requirements)));
if (!eligible) {
  throw new Error('Requirements exclude all registered providers — fix config before calling selection');
}

Type guard

function isSatisfiableRequirements(req: TaskRequirements, providers: ProviderInfo[]): boolean {
  return providers.some(p =>
    p.models.some(m => (req.requiredCapabilities ?? []).every(c => m.capabilities.includes(c)))
  );
}

Try / catch

try {
  const picked = adapter.selectProvider(model, requirements);
} catch (e) {
  if (e instanceof Error && e.message === 'No providers match the requirements') {
    // log registered providers vs requirements, then relax or register — never retry unchanged
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling the provider-selection/routing entry point with a requirements object whose constraints (model restrictions, required capabilities, other scoring filters) no registered provider+model pair satisfies; or calling it when zero providers are registered or all were filtered out before the scoring loop.

Common situations: A required capability or model name that no configured provider offers (typo, or requirements copied from another environment with a different provider set); all providers disabled, rate-limited, or otherwise ineligible before scoring; overly strict combined constraints (capability + cost + latency) that no single provider meets.

Related errors


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/6a31c1b5d61e4748. Report an issue: GitHub.