tinyhumansai/openhuman · error

SearXNG arguments must be an object

Error message

SearXNG arguments must be an object

What it means

Generic shape guard in parse_search_args: the serde_json::Value passed as the SearXNG tool's arguments is not a JSON object (e.g. a bare string, array, or null), so named field lookup for query/categories/language/max_results is impossible. Sentinel-style validation helper; the faulting input is any non-object args value passed by the model or caller.

Source

Thrown at src/openhuman/search/tools/searxng.rs:386

            })
        })
        .take(max_results)
        .collect()
}

fn first_non_empty_trimmed(values: impl IntoIterator<Item = Option<String>>) -> String {
    values
        .into_iter()
        .flatten()
        .map(|value| value.trim().to_string())
        .find(|value| !value.is_empty())
        .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"))
            })

View on GitHub (pinned to 7491200858)

Solutions

  1. Pass arguments as a JSON object, e.g. {"query": "..."}.
  2. If arguments are generated by the model, tighten the tool schema/prompt so it emits an object.
  3. Check the calling code for accidental double-wrapping or stringified JSON.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/search/tools/searxng.rs:386 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/0481d9443c179204. Report an issue: GitHub.