can1357/oh-my-pi · error · Error

Model "${modelSelector}" not found

Error message

Model "${modelSelector}" not found

What it means

Thrown when resolveCliModel returns no error but also no model — i.e. the --model selector string was well-formed yet matched nothing in the model registry. dry-balance requires a concrete model to benchmark and reports the exact selector back so you can spot the typo.

Source

Thrown at packages/coding-agent/src/cli/dry-balance-cli.ts:562

	}
}

async function resolveDryBalanceModel(
	modelSelector: string | undefined,
	modelRegistry: DryBalanceModelRegistry,
	settings: Settings | undefined,
	randomSessionId: () => string,
): Promise<{ model: Model<Api>; warning?: string }> {
	const preferences = getModelMatchPreferences(settings);
	if (modelSelector) {
		const resolved = resolveCliModel({
			cliModel: modelSelector,
			modelRegistry,
			settings,
			preferences,
		});
		if (resolved.error) throw new Error(resolved.error);
		if (!resolved.model) throw new Error(`Model "${modelSelector}" not found`);
		return { model: resolved.model, warning: resolved.warning };
	}

	const allowedModels = await resolveAllowedModels(modelRegistry, settings, preferences);
	if (allowedModels.length === 0) {
		throw new Error(
			"No models available. Use --model to select a model or configure enabledModels/default model settings.",
		);
	}

	const defaultRoleSpec = resolveModelRoleValue(settings?.getModelRole("default"), allowedModels, {
		settings,
		matchPreferences: preferences,
	});
	if (defaultRoleSpec.model) {
		return { model: defaultRoleSpec.model, warning: defaultRoleSpec.warning };
	}

View on GitHub (pinned to 9690622007)

Solutions

  1. Copy the exact id from the model list (`omp models`) instead of typing from memory
  2. Check enabledModels / default model settings are not filtering the model out
  3. Verify the provider is configured and authenticated so its models load into the registry
  4. Use the full provider/model form: --model openai/gpt-4.1, not just gpt-4.1

Example fix

// before
omp dry-balance --model openai/gpt4-turbo
// after
omp dry-balance --model openai/gpt-4-turbo
Defensive patterns

Strategy: validation

Validate before calling

const ids = await listAvailableModelIds();
if (!ids.includes(selector)) {
  throw new Error(`Model "${selector}" not found. Available: ${ids.slice(0, 20).join(', ')}...`);
}

Type guard

function isResolvedModel(r: { error?: string | null; model?: unknown }): r is { error?: undefined; model: NonNullable<typeof r.model> } {
  return !r.error && r.model != null;
}

Try / catch

try {
  const { model } = await resolveDryBalanceModel(opts);
} catch (e) {
  if (/not found/.test((e as Error).message)) {
    console.error(`Selector matched nothing: ${(e as Error).message}. Run the model list command for exact ids.`);
  } else throw e;
}

Prevention

When it happens

Trigger: `omp dry-balance --model <selector>` where the selector parses but no registry entry matches: wrong provider id, wrong model name, model filtered out by enabledModels settings, or registry not yet populated.

Common situations: Case-sensitive id mismatches, using an alias that does not exist, the model being excluded by enabledModels/default-model settings, or a custom provider whose models were never fetched.

Related errors


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