{"record":{"id":"ed7bff7630559e30","repo":"tinyhumansai/openhuman","slug":"seltz-search-unavailable-no-api-key-configured-s","errorCode":null,"errorMessage":"Seltz search unavailable: no API key configured. Set SELTZ_API_KEY or OPENHUMAN_SELTZ_API_KEY, or add seltz.api_key to config.toml.","messagePattern":"Seltz search unavailable: no API key configured\\. Set SELTZ_API_KEY or OPENHUMAN_SELTZ_API_KEY, or add seltz\\.api_key to config\\.toml\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/search/tools/seltz.rs","lineNumber":226,"sourceCode":"            .await\n    }\n\n    async fn execute_with_options(\n        &self,\n        args: serde_json::Value,\n        options: ToolCallOptions,\n    ) -> anyhow::Result<ToolResult> {\n        let query = args\n            .get(\"query\")\n            .and_then(|q| q.as_str())\n            .ok_or_else(|| anyhow::anyhow!(\"Missing required parameter: query\"))?;\n\n        if query.trim().is_empty() {\n            anyhow::bail!(\"Search query cannot be empty\");\n        }\n\n        let api_key = self.api_key.as_deref().ok_or_else(|| {\n            anyhow::anyhow!(\n                \"Seltz search unavailable: no API key configured. \\\n                 Set SELTZ_API_KEY or OPENHUMAN_SELTZ_API_KEY, \\\n                 or add seltz.api_key to config.toml.\"\n            )\n        })?;\n\n        let max_results = args\n            .get(\"max_results\")\n            .and_then(|v| v.as_u64())\n            .map(|n| n.clamp(1, 20) as usize)\n            .unwrap_or(self.max_results);\n\n        // Build request body — only include optional fields when set.\n        let mut body = json!({\n            \"query\": query,\n            \"max_results\": max_results,\n        });\n        let body_map = body.as_object_mut().unwrap();","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/search/tools/seltz.rs#L208-L244","documentation":"Configuration guard in SeltzTool::execute_with_options: after query validation, the tool checks its Seltz API credential (env SELTZ_API_KEY / OPENHUMAN_SELTZ_API_KEY or seltz.api_key in config.toml) and finds none. Seltz authenticates via the x-api-key header, so the search is aborted before any network request.","triggerScenarios":"Thrown at src/openhuman/search/tools/seltz.rs:226 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Export SELTZ_API_KEY (or OPENHUMAN_SELTZ_API_KEY) in the environment.","Add seltz.api_key = \"...\" to the workspace config.toml.","Alternatively sign in so the backend-proxied web_search path can be used instead of direct Seltz access."],"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"}