diff --git a/poc-memory/src/transcript.rs b/poc-memory/src/transcript.rs index 01a1fc6..beaf08a 100644 --- a/poc-memory/src/transcript.rs +++ b/poc-memory/src/transcript.rs @@ -203,13 +203,19 @@ impl Iterator for TailMessages { let obj_bytes = &self.mmap[open..=close]; + // Quick byte check: skip objects that aren't user/assistant + // messages. Avoids serde-parsing megabyte tool_result objects. + let is_user = memchr::memmem::find(obj_bytes, b"\"type\":\"user\"").is_some(); + let is_assistant = !is_user + && memchr::memmem::find(obj_bytes, b"\"type\":\"assistant\"").is_some(); + if !is_user && !is_assistant { continue; } + let obj: Value = match serde_json::from_slice(obj_bytes) { Ok(v) => v, Err(_) => continue, }; - let msg_type = obj.get("type").and_then(|v| v.as_str()).unwrap_or(""); - if msg_type != "user" && msg_type != "assistant" { continue; } + let msg_type = if is_user { "user" } else { "assistant" }; let msg = obj.get("message").unwrap_or(&obj); let text = match msg.get("content") {