fix(cli): report cumulative total_tokens in stream-json/json output - #8910
Merged
DOsinga merged 3 commits intoMay 13, 2026
Conversation
The CLI's --json and --stream-json output modes were reading session.total_tokens, which stores only the last turn's token usage. This caused total_tokens to reset to the current turn's count on every chunk, rather than reporting the running session total. Fix by reading session.accumulated_total_tokens, which is already correctly maintained by update_session_metrics across all turns. Also update get_total_token_usage() to return the accumulated value for consistency. Test: add test_accumulated_total_tokens_across_multiple_turns asserting that accumulated_total_tokens grows cumulatively across turns while total_tokens remains per-turn. Fixes aaif-goose#8871 Signed-off-by: Trinity <trinity@multica.ai> Signed-off-by: Bright Zheng <bzqzheng@gmail.com>
Bojun-Vvibe
added a commit
to Bojun-Vvibe/oss-contributions
that referenced
this pull request
Apr 29, 2026
- aaif-goose/goose#8910 (merge-after-nits): cumulative-tokens display fix - aaif-goose/goose#8906 (merge-as-is): case-insensitive provider lookup - INDEX: append drip-179 section, table, and verdict-mix paragraph
added 2 commits
May 13, 2026 12:03
…reporting Signed-off-by: Douwe Osinga <douwe@squareup.com> # Conflicts: # crates/goose-cli/src/session/mod.rs # crates/goose/tests/agent.rs
…e test to two turns - Remove comment that restates function name on get_total_token_usage - Remove unused ProviderDef impl and call_count from FixedUsageProvider - Extract run_turn helper to reduce test boilerplate - Reduce from 3 turns to 2 (sufficient to prove accumulation) - Remove redundant assert messages that restate the assertion Signed-off-by: Douwe Osinga <douwe@squareup.com>
DOsinga
marked this pull request as ready for review
May 13, 2026 16:04
DOsinga
approved these changes
May 13, 2026
DOsinga
left a comment
Collaborator
There was a problem hiding this comment.
Merged main, resolved conflicts, cleaned up and approved.
Changes made during cleanup:
- Removed unused
ProviderDefimpl andcall_countfield from the mock provider - Extracted
run_turnhelper to reduce test boilerplate - Reduced test from 3 turns to 2 (sufficient to prove accumulation)
- Removed assert messages that just restate the assertion
- Removed
#[cfg(test)]on inner module (already inside a test module) - Stripped comment on
get_total_token_usagethat restated the function name
Note: main already fixed the json/stream-json output paths (using .or() fallback). The remaining unique fix here is get_total_token_usage using accumulated_total_tokens. That function is currently unused but the fix is correct.
lifeizhou-ap
added a commit
that referenced
this pull request
May 14, 2026
* main: (66 commits) Switch GH pages deploy to actions/artifact workflow (#9025) fix(summon): re-apply canonical limits when delegate overrides model (#9183) Split code signing from build (#8587) refactor(logging): consolidate logging setup into shared helper in goose crate (#8817) fix(cli): report cumulative total_tokens in stream-json/json output (#8910) plugins: add open plugins (just skills for now) (#9063) fix(providers): refresh GCP metadata server token on expiration (#8929) chore(deps): bump the cargo-minor-and-patch group across 1 directory with 14 updates (#9178) chore(deps): bump bzip2 from 0.5.2 to 0.6.1 (#8964) chore(deps): bump tauri from 2.10.3 to 2.11.1 in /ui/goose2/src-tauri (#9066) chore(deps): bump hono from 4.12.14 to 4.12.18 in /evals/open-model-gym/mcp-harness (#9073) localize hardcoded strings in provider settings UI (#8931) chore(deps): bump @babel/plugin-transform-modules-systemjs from 7.28.5 to 7.29.4 in /documentation (#9122) move settings into app shell (#9047) Add Location column to CLI skills table (#8785) (feat): add routstr as a declarative provider (#9175) Add FuturMix provider (#8840) fix: convert quoted numeric config values to numbers if needed (#8844) fix(ui): keep SSE reconnect loop alive on long disconnects (#8717) (#8846) fix(openai): apply request_params to outgoing API payload (#9151) ...
1 task
shafqatevo
pushed a commit
to shafqatevo/goose
that referenced
this pull request
Aug 7, 2026
…aif-goose#8910) Signed-off-by: Trinity <trinity@multica.ai> Signed-off-by: Bright Zheng <bzqzheng@gmail.com> Signed-off-by: Douwe Osinga <douwe@squareup.com> Co-authored-by: Douwe Osinga <douwe@squareup.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The CLI's "--json" and "--stream-json" output modes were reading
session.total_tokens, which stores only the last turn's token usage. This causedcomplete.total_tokensto reset to the current turn's count on every chunk, rather than reporting the running session total (fixes #8871).Root Cause
update_session_metricsincrates/goose/src/agents/reply_parts.rscorrectly computesaccumulated_total_tokensby adding usage across turns.total_tokensis set to the current turn's usage.crates/goose-cli/src/session/mod.rsreadssession.total_tokensinstead ofsession.accumulated_total_tokens.Fix
Read
session.accumulated_total_tokensin:JsonMetadataconstruction (--jsonmode)StreamEvent::Completeemission (--stream-jsonmode)get_total_token_usage()for consistencyTest
Added
test_accumulated_total_tokens_across_multiple_turnswhich:accumulated_total_tokens == 45(cumulative)total_tokens == 15(last turn only)Verification