{"record":{"id":"33c9088ad0559d5a","repo":"tinyhumansai/openhuman","slug":"delegate-agent-name-has-empty-model","errorCode":null,"errorMessage":"delegate agent \"{name}\" has empty model","messagePattern":"delegate agent \"(.+?)\" has empty model","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/platform/doctor/core.rs","lineNumber":354,"sourceCode":"        || cc.lark.is_some()\n        || cc.webhook.is_some();\n\n    if has_channel {\n        items.push(DiagnosticItem::ok(cat, \"at least one channel configured\"));\n    } else {\n        items.push(DiagnosticItem::warn(\n            cat,\n            \"no channels configured - configure one in the UI\",\n        ));\n    }\n\n    // Delegate agents\n    let mut agent_names: Vec<_> = config.agents.keys().collect();\n    agent_names.sort();\n    for name in agent_names {\n        let agent = config.agents.get(name).unwrap();\n        if agent.model.trim().is_empty() {\n            items.push(DiagnosticItem::warn(\n                cat,\n                format!(\"delegate agent \\\"{name}\\\" has empty model\"),\n            ));\n        }\n    }\n}\n\nfn embedding_provider_validation_error(name: &str) -> Option<String> {\n    let normalized = name.trim();\n    if normalized.eq_ignore_ascii_case(\"none\") || normalized.eq_ignore_ascii_case(\"openai\") {\n        return None;\n    }\n\n    let Some(url) = normalized.strip_prefix(\"custom:\") else {\n        return Some(\"supported values: none, openai, custom:<url>\".into());\n    };\n\n    let url = url.trim();","sourceCodeStart":336,"sourceCodeEnd":372,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/platform/doctor/core.rs#L336-L372","documentation":"Doctor delegate-agent check: iterating config.agents alphabetically, the named [[agents]] entry has an empty `model` field. Delegate agents are spawned with their own model; an empty model leaves the agent without an inference target, so any turn dispatched to it fails at provider resolution or unexpectedly inherits a default.","triggerScenarios":"Thrown at src/openhuman/platform/doctor/core.rs:354 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set `model` to a concrete model id on the named [[agents.<name>]] entry","Confirm the model is served by the configured backend before saving","Remove the agent entry if it is a leftover from testing"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}