Align debug screen and budget with conversation-only messages

context.messages is conversation-only now — remove conv_start
scanning. Memory counted from loaded_nodes (same as debug screen).
No subtraction heuristics.

Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
Kent Overstreet 2026-04-02 02:56:28 -04:00
parent 5e781e9ae4
commit acdfbeeac3

View file

@ -195,9 +195,8 @@ impl Agent {
.map(|e| count(&e.content)).sum(); .map(|e| count(&e.content)).sum();
let mem_tokens: usize = self.context.loaded_nodes.iter() let mem_tokens: usize = self.context.loaded_nodes.iter()
.map(|node| count(&node.render())).sum(); .map(|node| count(&node.render())).sum();
let total_conv: usize = self.context.messages.iter() let conv_tokens: usize = self.context.messages.iter()
.map(|m| crate::agent::context::msg_token_count(&self.tokenizer, m)).sum(); .map(|m| crate::agent::context::msg_token_count(&self.tokenizer, m)).sum();
let conv_tokens = total_conv.saturating_sub(mem_tokens);
self.context_budget = ContextBudget { self.context_budget = ContextBudget {
identity_tokens: id_tokens, identity_tokens: id_tokens,
@ -695,10 +694,7 @@ impl Agent {
} }
// Conversation — each message as a child // Conversation — each message as a child
let conv_start = self.context.messages.iter() let conv_messages = &self.context.messages;
.position(|m| m.role == Role::Assistant || m.role == Role::Tool)
.unwrap_or(self.context.messages.len());
let conv_messages = &self.context.messages[conv_start..];
let conv_children: Vec<ContextSection> = conv_messages.iter().enumerate() let conv_children: Vec<ContextSection> = conv_messages.iter().enumerate()
.map(|(i, msg)| { .map(|(i, msg)| {
let text = msg.content.as_ref() let text = msg.content.as_ref()
@ -726,7 +722,7 @@ impl Agent {
Role::System => "system", Role::System => "system",
}; };
ContextSection { ContextSection {
name: format!("[{}] {}: {}", conv_start + i, role_name, label), name: format!("[{}] {}: {}", i, role_name, label),
tokens, tokens,
content: text, content: text,
children: Vec::new(), children: Vec::new(),