can1357/oh-my-pi · error · ToolError
Model registry is unavailable for inspect_image.
Error message
Model registry is unavailable for inspect_image.
What it means
inspect_image requires a model registry on the ToolSession to enumerate available models, resolve a vision-capable candidate, and obtain API keys. When session.modelRegistry is null/undefined the tool cannot proceed and throws this ToolError. This indicates the session was constructed without model-registry wiring rather than a user input problem.
Source
Thrown at packages/coding-agent/src/tools/inspect-image.ts:162
this.description = prompt.render(inspectImageDescription);
}
async execute(
_toolCallId: string,
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]) {View on GitHub (pinned to 9690622007)
Solutions
- Ensure the agent session is fully initialized so modelRegistry is populated (use the standard session bootstrap path).
- If embedding the SDK, explicitly construct/attach a model registry to the session before running tools.
- If writing tests, provide a session fixture with a model registry (real or mock).
- Report a bug if a normal `omp` run produces this — it means registry init failed silently.
Example fix
// before: session built without registry
const session = createToolSession({ /* no modelRegistry */ });
// after
const session = createToolSession({ modelRegistry: await createModelRegistry() }); Defensive patterns
Strategy: validation
Validate before calling
if (!session.modelRegistry) {
throw new Error("Session not fully initialized: model registry missing");
}
// safe to call inspect_image now Type guard
function hasModelRegistry(s: ToolSession): s is ToolSession & { modelRegistry: NonNullable<ToolSession["modelRegistry"]> } {
return Boolean(s.modelRegistry);
} Try / catch
try {
await inspectImageTool.execute(id, params, signal);
} catch (e) {
if (e instanceof ToolError && e.message.includes("registry is unavailable")) {
// reinitialize the session or report an init bug
} else throw e;
} Prevention
- Always construct sessions through the standard bootstrap that wires the model registry.
- In tests/embedding, use session fixtures that include a model registry.
- Fail fast at session creation if registry init fails instead of leaving it undefined.
When it happens
Trigger: Invoking inspect_image with a session whose modelRegistry property is unset — e.g. a ToolSession built in a test/embedding context, a headless/SDK path that skipped registry initialization, or a partial-init failure earlier in startup.
Common situations: Embedding the agent SDK without initializing the model registry; unit/integration harnesses that stub ToolSession; startup errors that silently skipped registry creation.
Related errors
- No model configured
- No session - local:// unavailable
- Mnemopi backend is not initialised for this session.
- Hindsight backend is not initialised for this session.
- Mnemopi backend is not initialised for this session.
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/8c9bc28509fa2e52.
Report an issue: GitHub.