{"record":{"id":"4df9ed79643478f2","repo":"can1357/oh-my-pi","slug":"no-available-model-to-generate-agent-specification","errorCode":null,"errorMessage":"No available model to generate agent specification.","messagePattern":"No available model to generate agent specification\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/modes/components/agents-hub.ts","lineNumber":762,"sourceCode":"\t\t}\n\t}\n\n\tasync #runAgentCreationArchitect(description: string): Promise<GeneratedAgentSpec> {\n\t\tconst modelRegistry = this.#modelContext.modelRegistry;\n\t\tif (!modelRegistry) {\n\t\t\tthrow new Error(\"Model registry unavailable in current session.\");\n\t\t}\n\t\tawait modelRegistry.refresh();\n\t\tconst modelPatterns = resolveConfiguredModelPatterns(\n\t\t\tthis.#modelContext.activeModelPattern ??\n\t\t\t\tthis.#modelContext.defaultModelPattern ??\n\t\t\t\tthis.#settings.getModelRole(\"default\"),\n\t\t\tthis.#settings,\n\t\t);\n\t\tconst { model } = resolveModelOverride(modelPatterns, modelRegistry, this.#settings);\n\t\tconst selectedModel = model ?? modelRegistry.getAvailable()[0];\n\t\tif (!selectedModel) {\n\t\t\tthrow new Error(\"No available model to generate agent specification.\");\n\t\t}\n\t\tconst systemPrompt = prompt.render(agentCreationArchitectPrompt, {});\n\t\tconst userPrompt = prompt.render(agentCreationUserPrompt, { request: description });\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd: this.#cwd,\n\t\t\tauthStorage: modelRegistry.authStorage,\n\t\t\tmodelRegistry,\n\t\t\tsettings: this.#settings,\n\t\t\tmodel: selectedModel,\n\t\t\tsystemPrompt: [systemPrompt],\n\t\t\thasUI: false,\n\t\t\tenableLsp: false,\n\t\t\tenableMCP: false,\n\t\t\tdisableExtensionDiscovery: true,\n\t\t\ttoolNames: [\"__none__\"],\n\t\t\tcustomTools: [],\n\t\t\tskills: [],\n\t\t\tcontextFiles: [],","sourceCodeStart":744,"sourceCodeEnd":780,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/modes/components/agents-hub.ts#L744-L780","documentation":"After resolving model patterns against the registry, the architect picks the resolved model or falls back to the first available model. If the registry has no available models at all, there is no LLM to run the architect prompt, so this error is thrown.","triggerScenarios":"modelRegistry.getAvailable() returns an empty array and resolveModelOverride returned no concrete model — e.g. no auth credentials, all providers unreachable, or pattern filters exclude every model.","commonSituations":"Fresh install without API keys logged in; provider outage or revoked API key; configured model patterns (default role / active pattern) matching zero models in the registry.","solutions":["Log in / configure API keys (e.g. run auth setup) so at least one model is available","Clear or widen the configured model patterns (settings default role / activeModelPattern) so they match an existing model","Run modelRegistry.refresh() or restart the session to re-detect providers","Check network/provider status and retry"],"exampleFix":"// before\nsettings default role: \"gpt-9-nonexistent\" // matches nothing\n// after\nsettings default role: \"claude-sonnet-4\" // available model","handlingStrategy":"validation","validationCode":"const available = modelRegistry.getAvailable();\nif (available.length === 0) {\n  throw new Error(\"No models available — check auth and provider config before creating agents\");\n}","typeGuard":"function hasAvailableModels(reg: { getAvailable(): unknown[] }): boolean {\n  return reg.getAvailable().length > 0;\n}","tryCatchPattern":"try {\n  await hub.runAgentCreationArchitect(desc);\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith(\"No available model\")) {\n    // prompt user to configure API keys / fix model patterns\n  } else throw err;\n}","preventionTips":["Configure auth/API keys before using LLM-dependent features","Keep the default model role pointing at a model that exists in the registry","Avoid over-restrictive model patterns that filter out everything","Call registry.refresh() after changing provider configuration"],"tags":["model-availability","auth","configuration"],"backgroundTag":"no-models-available","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}