tinyhumansai/openhuman · error · anyhow::Error

Web search unavailable: no backend session token. Sign in fi

Error message

Web search unavailable: no backend session token. Sign in first so the server can proxy search.

What it means

Session-prerequisite guard in WebSearchTool::execute_with_options: neither a direct Seltz searcher is configured nor a backend session token is available, so the server-proxied search path cannot authenticate to the TinyHumans backend. The tool refuses to run rather than issuing an unauthenticated request; the faulting condition is being signed out with no direct provider fallback.

Source

Thrown at src/openhuman/search/tools/web_search.rs:202

        if let Some(direct_search) = &self.direct_search {
            tracing::debug!(
                query_len = query.chars().count(),
                max_results = self.max_results,
                timeout_secs = self.timeout_secs,
                "[web_search] direct Seltz search"
            );
            let mut normalized_args = args;
            if let Some(obj) = normalized_args.as_object_mut() {
                obj.insert("query".to_string(), Value::String(query.clone()));
            }
            return direct_search
                .execute_with_options(normalized_args, options)
                .await;
        }

        let client = self.client.as_ref().ok_or_else(|| {
            anyhow::anyhow!(
                "Web search unavailable: no backend session token. Sign in first so the server can proxy search."
            )
        })?;

        let query_fingerprint = hex::encode(Sha256::digest(query.as_bytes()));
        tracing::debug!(
            query_len = query.chars().count(),
            query_fingerprint = %query_fingerprint[..16],
            max_results = self.max_results,
            timeout_secs = self.timeout_secs,
            "[web_search] backend parallel search"
        );

        // Body matches `parallelSearchSchema` in backend-2. The legacy
        // `numResults` / `maxCharactersPerExcerpt` aliases still work, but
        // current fields are `maxResults` / `maxCharsPerResult`. Also dropping
        // `timeoutSecs` — the validator does not declare it and Parallel's
        // per-mode deadlines drive timing on the upstream side.

View on GitHub (pinned to 7491200858)

Solutions

  1. Sign in to the app so a backend session token is available for the proxied search.
  2. Alternatively configure SELTZ_API_KEY / OPENHUMAN_SELTZ_API_KEY so the direct Seltz path is used.
  3. Re-authenticate if the session token expired.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/openhuman/search/tools/web_search.rs:202 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/e87219f7155d279f. Report an issue: GitHub.