tinyhumansai/openhuman · error

runtime python server closed stdout

Error message

runtime python server closed stdout

What it means

request_once got EOF on the runtime python server's stdout while waiting for a response — the server process crashed mid-request. Unparseable lines are skipped, so this genuinely means the pipe closed.

Source

Thrown at src/openhuman/runtime/python_server/server.rs:185

            id,
            method
        );
        inner
            .stdin
            .write_all(line.as_bytes())
            .await
            .context("writing runtime python server request")?;
        inner
            .stdin
            .flush()
            .await
            .context("flushing runtime python server request")?;

        loop {
            let next = tokio::time::timeout(REQUEST_TIMEOUT, inner.stdout.next_line()).await;
            let line = match next {
                Ok(Ok(Some(line))) => line,
                Ok(Ok(None)) => bail!("runtime python server closed stdout"),
                Ok(Err(error)) => {
                    return Err(error).context("reading runtime python server response")
                }
                Err(_) => bail!("runtime python server request timed out"),
            };
            let response: PythonServerResponse = match serde_json::from_str(&line) {
                Ok(response) => response,
                Err(error) => {
                    log::warn!(
                        "[runtime_python_server] unparseable response skipped: {error}; line_len={}",
                        line.len()
                    );
                    continue;
                }
            };
            if response.id.as_deref() != Some(id.as_str()) {
                log::debug!(
                    "[runtime_python_server] skipped response for different id={:?}",

View on GitHub (pinned to 7491200858)

Solutions

  1. Check the drained server stderr / core logs for the crash cause
  2. Re-provision the venv if dependencies are broken
  3. Retry the request — a fresh server is spawned on the next call after the cache is reset
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/openhuman/runtime/python_server/server.rs:185 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/a3f41a965d5d7a3c. Report an issue: GitHub.