tinyhumansai/openhuman · error
thread_message_append: {e}
Error message
thread_message_append: {e} What it means
Generic wrapper from thread_message_append: appending a message record to a thread failed after the request deserialized. The underlying {e} is the memory-conversations write error — commonly a missing thread or an invalid message record.
Source
Thrown at src/openhuman/threads/tools.rs:449
"type": "object",
"properties": {
"thread_id": { "type": "string" },
"message": { "type": "object", "description": "ConversationMessageRecord." }
},
"required": ["thread_id", "message"]
})
}
fn permission_level(&self) -> PermissionLevel {
PermissionLevel::Write
}
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
log::debug!("[tool][threads] message_append invoked");
let req: AppendConversationMessageRequest = parse_req(args, "thread_message_append")?;
let outcome = ops::message_append(req)
.await
.map_err(|e| anyhow::anyhow!("thread_message_append: {e}"))?;
Ok(ToolResult::success(serde_json::to_string(&outcome.value)?))
}
}
/// Patch a message's metadata.
pub struct ThreadMessageUpdateTool;
#[async_trait]
impl Tool for ThreadMessageUpdateTool {
fn name(&self) -> &str {
"thread_message_update"
}
fn description(&self) -> &str {
"Patch a message's `extra_metadata` in a thread. Requires `thread_id` \
and `message_id`; `extra_metadata` is the new metadata object."
}
View on GitHub (pinned to 7491200858)
Solutions
- Confirm thread_id exists (thread_read)
- Ensure 'message' is a well-formed ConversationMessageRecord
- Read {e} for the concrete validation or persistence failure
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/openhuman/threads/tools.rs:449 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/b320a7e2c74b3da4.
Report an issue: GitHub.