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
- Copy the exact id from the model list (`omp models`) instead of typing from memory
- Check enabledModels / default model settings are not filtering the model out
- Verify the provider is configured and authenticated so its models load into the registry
- 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
- Check enabledModels settings are not filtering the model out
- Watch case sensitivity and exact spelling of provider and model ids
- Ensure the provider is configured/authenticated so its models load into the registry
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
- resolved.error (model resolution failure)
- No models available. Use --model to select a model or config
- Model "${options.model}" not found
- Could not resolve ${errors.length === 1 ? "model" : "models"
- --${name} must be a positive integer
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/587c85f097a36f51.
Report an issue: GitHub.