{"record":{"id":"8552e561896c73bb","repo":"aaif-goose/goose","slug":"duplicate-tool-name-8552e5","errorCode":null,"errorMessage":"Duplicate tool name: {}","messagePattern":"Duplicate tool name: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/goose-provider-types/src/formats/openai.rs","lineNumber":666,"sourceCode":"    msg.get(\"role\") == Some(&json!(\"user\"))\n        && msg\n            .get(\"content\")\n            .and_then(|c| c.as_array())\n            .is_some_and(|arr| {\n                !arr.is_empty()\n                    && arr\n                        .iter()\n                        .all(|item| item.get(\"type\") == Some(&json!(\"image_url\")))\n            })\n}\n\npub fn format_tools(tools: &[Tool]) -> anyhow::Result<Vec<Value>> {\n    let mut tool_names = std::collections::HashSet::new();\n    let mut result = Vec::new();\n\n    for tool in tools {\n        if !tool_names.insert(&tool.name) {\n            return Err(anyhow!(\"Duplicate tool name: {}\", tool.name));\n        }\n\n        result.push(json!({\n            \"type\": \"function\",\n            \"function\": {\n                \"name\": tool.name,\n                \"description\": tool.description,\n                \"parameters\": tool.input_schema,\n            }\n        }));\n    }\n\n    Ok(result)\n}\n\n/// Convert OpenAI's API response to internal Message format\npub fn response_to_message(response: &Value) -> anyhow::Result<Message> {\n    let output_token_limit_reached = response","sourceCodeStart":648,"sourceCodeEnd":684,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose-provider-types/src/formats/openai.rs#L648-L684","documentation":"Error \"Duplicate tool name: {}\" thrown in aaif-goose/goose.","triggerScenarios":"Thrown at crates/goose-provider-types/src/formats/openai.rs:666 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}