Manual compaction counting fix + cli cleanup (#5480)
This commit is contained in:
@@ -65,7 +65,7 @@ use crate::session::SessionManager;
|
||||
|
||||
const DEFAULT_MAX_TURNS: u32 = 1000;
|
||||
const COMPACTION_THINKING_TEXT: &str = "goose is compacting the conversation...";
|
||||
const MANUAL_COMPACT_TRIGGER: &str = "Please compact this conversation";
|
||||
pub const MANUAL_COMPACT_TRIGGER: &str = "Please compact this conversation";
|
||||
|
||||
/// Context needed for the reply function
|
||||
pub struct ReplyContext {
|
||||
@@ -803,9 +803,10 @@ impl Agent {
|
||||
);
|
||||
|
||||
match crate::context_mgmt::compact_messages(self, &conversation_to_compact, false).await {
|
||||
Ok((compacted_conversation, _token_counts, _summarization_usage)) => {
|
||||
Ok((compacted_conversation, summarization_usage)) => {
|
||||
if let Some(session_to_store) = &session {
|
||||
SessionManager::replace_conversation(&session_to_store.id, &compacted_conversation).await?;
|
||||
Self::update_session_metrics(session_to_store, &summarization_usage, true).await?;
|
||||
}
|
||||
|
||||
yield AgentEvent::HistoryReplaced(compacted_conversation.clone());
|
||||
@@ -991,7 +992,7 @@ impl Agent {
|
||||
// Record usage for the session
|
||||
if let Some(ref session_config) = &session {
|
||||
if let Some(ref usage) = usage {
|
||||
Self::update_session_metrics(session_config, usage).await?;
|
||||
Self::update_session_metrics(session_config, usage, false).await?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1166,9 +1167,10 @@ impl Agent {
|
||||
);
|
||||
|
||||
match crate::context_mgmt::compact_messages(self, &conversation, true).await {
|
||||
Ok((compacted_conversation, _token_counts, _usage)) => {
|
||||
Ok((compacted_conversation, usage)) => {
|
||||
if let Some(session_to_store) = &session {
|
||||
SessionManager::replace_conversation(&session_to_store.id, &compacted_conversation).await?
|
||||
SessionManager::replace_conversation(&session_to_store.id, &compacted_conversation).await?;
|
||||
Self::update_session_metrics(session_to_store, &usage, true).await?;
|
||||
}
|
||||
|
||||
conversation = compacted_conversation;
|
||||
|
||||
@@ -26,7 +26,7 @@ mod tool_route_manager;
|
||||
mod tool_router_index_manager;
|
||||
pub mod types;
|
||||
|
||||
pub use agent::{Agent, AgentEvent};
|
||||
pub use agent::{Agent, AgentEvent, MANUAL_COMPACT_TRIGGER};
|
||||
pub use extension::ExtensionConfig;
|
||||
pub use extension_manager::ExtensionManager;
|
||||
pub use prompt_manager::PromptManager;
|
||||
|
||||
@@ -255,6 +255,7 @@ impl Agent {
|
||||
pub(crate) async fn update_session_metrics(
|
||||
session_config: &crate::agents::types::SessionConfig,
|
||||
usage: &ProviderUsage,
|
||||
is_compaction_usage: bool,
|
||||
) -> Result<()> {
|
||||
let session_id = session_config.id.as_str();
|
||||
let session = SessionManager::get_session(session_id, false).await?;
|
||||
@@ -273,11 +274,23 @@ impl Agent {
|
||||
let accumulated_output =
|
||||
accumulate(session.accumulated_output_tokens, usage.usage.output_tokens);
|
||||
|
||||
let (current_total, current_input, current_output) = if is_compaction_usage {
|
||||
// After compaction: summary output becomes new input context
|
||||
let new_input = usage.usage.output_tokens;
|
||||
(new_input, new_input, None)
|
||||
} else {
|
||||
(
|
||||
usage.usage.total_tokens,
|
||||
usage.usage.input_tokens,
|
||||
usage.usage.output_tokens,
|
||||
)
|
||||
};
|
||||
|
||||
SessionManager::update_session(session_id)
|
||||
.schedule_id(session_config.schedule_id.clone())
|
||||
.total_tokens(usage.usage.total_tokens)
|
||||
.input_tokens(usage.usage.input_tokens)
|
||||
.output_tokens(usage.usage.output_tokens)
|
||||
.total_tokens(current_total)
|
||||
.input_tokens(current_input)
|
||||
.output_tokens(current_output)
|
||||
.accumulated_total_tokens(accumulated_total)
|
||||
.accumulated_input_tokens(accumulated_input)
|
||||
.accumulated_output_tokens(accumulated_output)
|
||||
|
||||
Reference in New Issue
Block a user