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

  1. Configure a valid model for the 'commit' role in settings (e.g. a small instruct model)
  2. Check that at least one provider is configured and enabled with models available
  3. Fix or clear the model override if it references a nonexistent model id
  4. 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

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


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/4fe987430cf9ede8. Report an issue: GitHub.