{"record":{"id":"f884357d2901bd6f","repo":"zeroclaw-labs/zeroclaw","slug":"label-no-model-configured","errorCode":null,"errorMessage":"{label}: no model configured","messagePattern":"(.+?): no model configured","errorType":"console","errorClass":"DiagItem","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":1164,"sourceCode":"            }\n\n            // API key presence\n            if family != \"ollama\" {\n                if entry.api_key.as_deref().is_some() {\n                    items.push(DiagItem::ok(cat, format!(\"{label}: API key configured\")));\n                } else {\n                    items.push(DiagItem::warn(\n                        cat,\n                        format!(\"{label}: no api_key set (may rely on env vars or model_provider defaults)\"),\n                    ));\n                }\n            }\n\n            // Model configured\n            if let Some(model) = entry.model.as_deref() {\n                items.push(DiagItem::ok(cat, format!(\"{label}: model: {model}\")));\n            } else {\n                items.push(DiagItem::warn(cat, format!(\"{label}: no model configured\")));\n            }\n\n            // A missing value remains unknown until this profile is selected;\n            // zero is explicitly invalid because it leaves recovery with no\n            // usable model-context budget.\n            match entry.context_window {\n                Some(0) => items.push(DiagItem::error(\n                    cat,\n                    crate::i18n::get_required_cli_string_with_args(\n                        \"cli-doctor-context-window-zero\",\n                        &[(\"provider_ref\", &label)],\n                    ),\n                )),\n                Some(context_window) => items.push(DiagItem::ok(\n                    cat,\n                    crate::i18n::get_required_cli_string_with_args(\n                        \"cli-doctor-context-window-ok\",\n                        &[","sourceCodeStart":1146,"sourceCodeEnd":1182,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L1146-L1182","documentation":"check_config_semantics warns when a provider profile has no `model` configured. Without a model name on the profile, requests routed through it cannot resolve a concrete model and will fail or behave unexpectedly downstream.","triggerScenarios":"A providers entry with an api_key but no `model` field; doctor prints `{label}: no model configured` during any diagnostic run.","commonSituations":"Profiles created with only auth in mind, expecting routes to supply the model; config migration dropping a renamed field; multi-model setups missing the default.","solutions":["Set `model` on the provider profile to a concrete model name (e.g. `gpt-4o-mini` or the local model id)","If model routes are meant to override the model, still set a safe default on the profile","Re-run `zeroclaw doctor` to confirm the profile reports `model: ...` as ok"],"exampleFix":"# before\n[providers.openai]\nfamily = \"openai\"\napi_key = \"sk-...\"\n\n# after\n[providers.openai]\nfamily = \"openai\"\napi_key = \"sk-...\"\nmodel = \"gpt-4o-mini\"","handlingStrategy":"validation","validationCode":"import tomllib\n\ncfg = tomllib.load(open('zeroclaw.toml', 'rb'))\nfor name, p in cfg.get('providers', {}).items():\n    assert p.get('model'), f'{name}: no model configured'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set a default model when creating a provider profile","Lint provider entries (model present) in config review before deploy"],"tags":["zeroclaw","doctor","config","model"],"backgroundTag":"model-not-configured","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}