can1357/oh-my-pi · critical
No model available for commit generation
Error message
No model available for commit generation
What it means
resolvePrimaryModel resolves which LLM to use for commit generation: an explicit override, else a role-based selection trying 'commit', 'smol', then the standard model roles. If no configured role matches any available model, it throws because commit generation cannot run without a model. (A sibling error follows if a model resolves but has no API key.)
Source
Thrown at packages/coding-agent/src/commit/model-selection.ts:49
type CommitModelRegistry = ModelLookupRegistry &
ApiKeyResolverRegistry & {
getApiKey: (model: Model<Api>) => Promise<string | undefined>;
};
export async function resolvePrimaryModel(
override: string | undefined,
settings: Settings,
modelRegistry: CommitModelRegistry,
): Promise<ResolvedCommitModel> {
const available = modelRegistry.getAvailable();
const matchPreferences = getModelMatchPreferences(settings);
const resolved = override
? resolveModelRoleValue(override, available, { settings, matchPreferences })
: resolveRoleSelection(["commit", "smol", ...MODEL_ROLE_IDS], settings, available);
const model = resolved?.model;
if (!model) {
throw new Error("No model available for commit generation");
}
const apiKey = await modelRegistry.getApiKey(model);
if (!apiKey) {
throw new Error(`No API key available for model ${model.provider}/${model.id}`);
}
return {
model,
apiKey: modelRegistry.resolver(model),
thinkingLevel: concreteThinkingLevel(resolved?.thinkingLevel),
};
}
export async function resolveSmolModel(
settings: Settings,
modelRegistry: CommitModelRegistry,
fallbackModel: Model<Api>,
fallbackApiKey: ApiKey,
): Promise<ResolvedCommitModel> {View on GitHub (pinned to 9690622007)
Solutions
- Configure a valid model for the 'commit' role in settings (e.g. a small instruct model)
- Check that at least one provider is configured and enabled with models available
- Fix or clear the model override if it references a nonexistent model id
- Update provider credentials/registry so models become available
Example fix
// before: throws with no commit model configured
const model = await resolvePrimaryModel();
// after: resolve with an explicit override
const model = await resolvePrimaryModel({ override: "anthropic/claude-haiku-4-5" });
// or in settings: { commit: { model: "anthropic/claude-haiku-4-5" } } Defensive patterns
Strategy: validation
Validate before calling
const roles = ["commit", "smol", ...MODEL_ROLE_IDS];
if (!roles.some((r) => getRoleModel(r))) {
throw new Error("Configure a commit model before generating");
} Try / catch
try {
const model = await resolvePrimaryModel(override);
} catch (err) {
if (err instanceof Error && err.message === "No model available for commit generation") {
// prompt the user to configure a model / provider
}
throw err;
} Prevention
- Configure the 'commit' role in settings during setup
- Verify providers are enabled and report available models before generation
- Validate any model override id against the registry (typos fail silently until here)
When it happens
Trigger: Calling resolvePrimaryModel (via primaryModelPromise/primary) when: no model override is set and none of the 'commit'/'smol'/default roles match an available/provider-registered model; available models list is empty (no providers configured); or the override string doesn't resolve to any known model.
Common situations: Fresh install with no models configured, all providers disabled by config, typo in the commit model override id, model renamed/removed after a provider update, or settings that filter out every candidate (e.g. role pinned to an unavailable model).
Related errors
- No tiny/smol model available for AI staging
- Security scan preflight requires an active model
- GPT-5 Harmony leak persisted after ${harmonyRetryAttempt} re
- Soft tool requirement '${softRequiredTool}' was not satisfie
- No model configured
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/4fe987430cf9ede8.
Report an issue: GitHub.