conductor-oss/conductor · error · RuntimeException

no configuration found for: {name}

Error message

no configuration found for: {name}

What it means

Thrown by AIModelProvider.getModel() when llmProvider is non-null but does not match any registered provider name or alias in the providerToLLM map. This map is populated during AIModelProvider construction from all ModelConfiguration beans; if a model fails to init (logged as 'cannot init'), it silently never registers.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/AIModelProvider.java:69

                        result);
                providerToLLM.put(llm.getModelProvider(), llm);
                for (String alias : llm.getProviderAliases()) {
                    providerToLLM.put(alias, llm);
                }
            } catch (Throwable t) {
                log.error("cannot init {} model, reason: {}", modelConfiguration, t.getMessage());
            }
        }
    }

    public AIModel getModel(LLMWorkerInput input) {
        String name = input.getLlmProvider();
        if (name == null) {
            throw new RuntimeException("llmProvider not specified: " + name);
        }
        AIModel model = providerToLLM.get(name);
        if (model == null) {
            throw new RuntimeException("no configuration found for: " + name);
        }
        return model;
    }

    public Consumer<TokenUsageLog> getTokenUsageLogger() {
        return usageLog -> log.info("{}", usageLog);
    }
}

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Check server logs for 'cannot init ... model, reason:' messages — a failed init silently skips registration
  2. Verify a ModelConfiguration bean for the requested provider is present and its getProviderAliases() includes the name you are passing
  3. Ensure required API keys and configuration properties (e.g. OPENAI_API_KEY) are set in the environment
  4. Correct typos or casing in the llmProvider value to match a registered provider name or alias

Example fix

// before
{"llmProvider": "antropic"}
// after
{"llmProvider": "anthropic"}
Defensive patterns

Strategy: validation

Validate before calling

// Check if provider is registered before calling getModel
String providerName = input.getLlmProvider();
if (providerName != null && !providerName.isBlank()) {
    // Check startup logs for 'cannot init ... model' messages
    // These indicate a model bean failed to register
}

Type guard

// Check available providers at startup
@Autowired AIModelProvider provider;
// After construction, inspect the providerToLLM map keys
// to confirm all expected providers registered successfully

Try / catch

try {
    AIModel model = aiModelProvider.getModel(input);
} catch (RuntimeException e) {
    if (e.getMessage().startsWith("no configuration found for:")) {
        taskResult.setStatus(TaskResult.Status.FAILED_WITH_TERMINAL_ERROR);
        taskResult.setReasonForIncompletion(
            "LLM provider '" + input.getLlmProvider() + "' is not configured. " +
            "Check server logs for model initialization failures.");
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Calling getModel(input) with a provider name that has no corresponding ModelConfiguration bean, or whose bean threw during initialization. Also triggered when the name has a typo or uses a case that doesn't match the registered provider or its aliases.

Common situations: The requested provider (e.g. 'anthropic') has no ModelConfiguration bean in the Spring context. The model bean exists but failed to initialize — API key missing, misconfigured base URL — and was swallowed by the catch block at line 56. The provider name has a casing mismatch or is not among the configured aliases.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/4a1fdf3ea55a1fcf. Report an issue: GitHub.