{"record":{"id":"70565b263ca3eab8","repo":"aaif-goose/goose","slug":"failed-to-create-model-configuration-e","errorCode":null,"errorMessage":"Failed to create model configuration: {e}","messagePattern":"Failed to create model configuration: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/goose-cli/src/session/mod.rs","lineNumber":2756,"sourceCode":"        let minutes = total_secs / 60;\n        let seconds = total_secs % 60;\n        format!(\"{}m {:02}s\", minutes, seconds)\n    }\n}\n\nfn build_switched_model_config(\n    provider_name: &str,\n    model_name: &str,\n    current_model_config: &goose_providers::model::ModelConfig,\n) -> Result<goose_providers::model::ModelConfig> {\n    goose::model_config::model_config_from_user_config(provider_name, model_name)\n        .map(|config| {\n            config\n                .with_temperature(current_model_config.temperature)\n                .with_toolshim(current_model_config.toolshim)\n                .with_toolshim_model(current_model_config.toolshim_model.clone())\n        })\n        .map_err(|e| anyhow::anyhow!(\"Failed to create model configuration: {e}\"))\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use goose::agents::extension::Envs;\n    use goose::config::ExtensionConfig;\n    use std::collections::HashMap;\n    use std::time::Duration;\n    use test_case::test_case;\n\n    #[test]\n    fn planner_classification_excludes_user_only_content() {\n        use rmcp::model::{Annotations, Role, TextContent};\n\n        let user_only = TextContent::new(\"user-only plan\")\n            .with_annotations(Annotations::default().with_audience(vec![Role::User]));\n        let assistant_only = TextContent::new(\"agent classification text\")","sourceCodeStart":2738,"sourceCodeEnd":2774,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose-cli/src/session/mod.rs#L2738-L2774","documentation":"build_switched_model_config rebuilds a ModelConfig from user configuration for a provider/model pair when the user switches models (e.g. the /model command), carrying over temperature and toolshim settings. Any failure from model_config_from_user_config — unknown provider, unresolvable model, inconsistent config — is wrapped as 'Failed to create model configuration: {e}'.","triggerScenarios":"Switching to a provider/model goose cannot resolve from configuration: /model someprovider/nonexistent-model, or a provider whose entries are missing after manual config edits.","commonSituations":"Typos in model ids; provider never configured via goose configure; hand-edited config files left inconsistent; env overrides (GOOSE_PROVIDER/GOOSE_MODEL) conflicting.","solutions":["Run goose configure and re-select a valid provider and model","Verify the exact provider and model ids before switching (goose configure -> view)","Keep GOOSE_PROVIDER and GOOSE_MODEL consistent when set via environment"],"exampleFix":"# before\n/model openai/gpt-9-turbo      # unknown model id\n# after\n/model openai/gpt-4o","handlingStrategy":"validation","validationCode":"let known = goose::model_config::known_models(); // or list from configure\nassert!(\n    known.contains(&(provider_name, model_name)),\n    \"unknown provider/model pair: {}/{}\",\n    provider_name,\n    model_name\n);","typeGuard":null,"tryCatchPattern":"if let Err(e) = switch_model(&provider, &model).await {\n    if e.to_string().contains(\"Failed to create model configuration\") {\n        eprintln!(\"run 'goose configure' to pick a valid provider/model\");\n    }\n    return Err(e);\n}","preventionTips":["Run goose configure after adding providers instead of hand-editing config","Copy provider and model ids exactly from the configure view","Keep GOOSE_PROVIDER/GOOSE_MODEL env overrides in sync with config"],"tags":["model","provider","config","cli"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}