{"record":{"id":"42a1cec35c183ca3","repo":"zed-industries/zed","slug":"ollama-does-not-support-custom-tools","errorCode":null,"errorMessage":"Ollama does not support custom tools","messagePattern":"Ollama does not support custom tools","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/language_models/src/provider/ollama.rs","lineNumber":365,"sourceCode":"                \"Run local models on your machine with Ollama.\".into(),\n            )),\n        ))\n    }\n}\n\npub struct OllamaLanguageModel {\n    id: LanguageModelId,\n    model: ollama::Model,\n    http_client: Arc<dyn HttpClient>,\n    request_limiter: RateLimiter,\n    state: Entity<State>,\n    disabled: Option<DisabledReason>,\n}\n\nimpl OllamaLanguageModel {\n    fn to_ollama_request(&self, request: LanguageModelRequest) -> Result<ChatRequest> {\n        if request.contains_custom_tool_input() {\n            anyhow::bail!(\"Ollama does not support custom tools\");\n        }\n\n        let supports_vision = self.model.supports_vision.unwrap_or(false);\n\n        let mut messages = Vec::with_capacity(request.messages.len());\n\n        for mut msg in request.messages.into_iter() {\n            let images = if supports_vision {\n                msg.content\n                    .iter()\n                    .filter_map(|content| match content {\n                        MessageContent::Image(image) => Some(image.source.to_string()),\n                        _ => None,\n                    })\n                    .collect::<Vec<String>>()\n            } else {\n                vec![]\n            };","sourceCodeStart":347,"sourceCodeEnd":383,"githubUrl":"https://github.com/zed-industries/zed/blob/f4178619acd0d47ea1f76a2025c42962c6d6638c/crates/language_models/src/provider/ollama.rs#L347-L383","documentation":"Guard in to_ollama_request: the request contains custom tool input that Ollama's chat API cannot encode. The request is rejected locally before serialization, failing the completion instead of sending an unusable payload.","triggerScenarios":"Thrown at crates/language_models/src/provider/ollama.rs:365 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Replace custom tools with JSON-schema-defined tools when targeting Ollama","Use a provider with custom-tool support for this session","Clear the outstanding custom tool call from the message history and retry"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f4178619acd0d47ea1f76a2025c42962c6d6638c","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}