tinyhumansai/openhuman · error
categories must be an array of strings
Error message
categories must be an array of strings
What it means
Optional-field type guard in parse_search_args: "categories" was provided but is not a JSON array (e.g. a comma-separated string like "general,news"). The parser only accepts an array or explicit null; any other shape fails here. The faulting input is a non-array categories value.
Source
Thrown at src/openhuman/search/tools/searxng.rs:398
.unwrap_or_default()
}
fn parse_search_args(args: serde_json::Value) -> anyhow::Result<SearxngSearchArgs> {
let object = args
.as_object()
.ok_or_else(|| anyhow::anyhow!("SearXNG arguments must be an object"))?;
let query = object
.get("query")
.and_then(|value| value.as_str())
.map(str::trim)
.filter(|value| !value.is_empty())
.ok_or_else(|| anyhow::anyhow!("Missing required parameter: query"))?
.to_string();
let categories = match object.get("categories") {
Some(value) if value.is_null() => Vec::new(),
Some(value) => value
.as_array()
.ok_or_else(|| anyhow::anyhow!("categories must be an array of strings"))?
.iter()
.map(|item| {
item.as_str()
.map(str::to_string)
.ok_or_else(|| anyhow::anyhow!("categories must contain only strings"))
})
.collect::<anyhow::Result<Vec<_>>>()?,
None => Vec::new(),
};
let language = match object.get("language") {
Some(value) => {
let language = value
.as_str()
.map(str::trim)
.filter(|value| !value.is_empty())
.ok_or_else(|| anyhow::anyhow!("language must be a non-empty string"))?;
Some(language.to_string())
}View on GitHub (pinned to 7491200858)
Solutions
- Pass categories as an array of strings, e.g. ["general","news"].
- Omit the field or pass null to search all categories.
- Convert comma-separated category strings to arrays before invoking.
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at src/openhuman/search/tools/searxng.rs:398 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/69738201338e1225.
Report an issue: GitHub.