can1357/oh-my-pi · error · ToolError

No models available for inspect_image.

Error message

No models available for inspect_image.

What it means

The model registry exists but `getAvailable()` returned an empty list, so inspect_image has no candidate models to resolve a vision model from. The tool throws ToolError because image inspection fundamentally requires at least one LLM model to be configured and reachable.

Solutions

  1. Configure at least one provider's API key (env var like OPENAI_API_KEY/ANTHROPIC_API_KEY or the auth config).
  2. Run `omp` models/auth setup to verify the registry lists models.
  3. Check network access if provider discovery is failing.
  4. Verify provider configuration files aren't empty or mispointed.

Example fix

// before: no credentials
// (env)
// after
export ANTHROPIC_API_KEY=sk-ant-...
# or add the key via the provider auth setup
Defensive patterns

Strategy: validation

Validate before calling

const models = session.modelRegistry?.getAvailable() ?? [];
if (models.length === 0) {
  // prompt the user to configure a provider/API key before attempting image inspection
}

Try / catch

try {
  await inspectImageTool.execute(id, params, signal);
} catch (e) {
  if (e instanceof ToolError && e.message.includes("No models available")) {
    // run provider setup / show onboarding message
  } else throw e;
}

Prevention

When it happens

Trigger: Calling inspect_image when no providers are authenticated/discovered: no API keys configured, all providers failed auth or discovery, or a filtered model list resolved to zero entries.

Common situations: Fresh install with no API keys in env/config; expired or revoked credentials causing discovery to yield nothing; running in an environment without provider configuration (CI, containers); models.json/provider discovery failing offline.

Related errors


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

Appendix: source

Thrown at packages/coding-agent/src/tools/inspect-image.ts:167

		params: InspectImageParams,
		signal?: AbortSignal,
		_onUpdate?: AgentToolUpdateCallback<InspectImageToolDetails>,
		_context?: AgentToolContext,
	): Promise<AgentToolResult<InspectImageToolDetails>> {
		if (this.session.settings.get("images.blockImages")) {
			throw new ToolError(
				"Image submission is disabled by settings (images.blockImages=true). Disable it to use inspect_image.",
			);
		}

		const modelRegistry = this.session.modelRegistry;
		if (!modelRegistry) {
			throw new ToolError("Model registry is unavailable for inspect_image.");
		}

		const availableModels = modelRegistry.getAvailable();
		if (availableModels.length === 0) {
			throw new ToolError("No models available for inspect_image.");
		}

		const matchPreferences = getModelMatchPreferences(this.session.settings);
		const resolvePattern = (pattern: string | undefined): Model<Api> | undefined => {
			if (!pattern) return undefined;
			const expanded = expandRoleAlias(pattern, this.session.settings);
			return resolveModelFromString(expanded, availableModels, matchPreferences);
		};

		const activeModelPattern = this.session.getActiveModelString?.() ?? this.session.getModelString?.();
		let model: Model<Api> | undefined;
		let selectedPattern: string | undefined;
		for (const pattern of ["@vision", "@default", activeModelPattern]) {
			const resolved = resolvePattern(pattern);
			if (resolved?.input.includes("image")) {
				model = resolved;
				selectedPattern = pattern;
				break;

View on GitHub (pinned to 9690622007)