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
- Check the drained server stderr / core logs for the crash cause
- Re-provision the venv if dependencies are broken
- 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.