Repository navigation
Conversation
The eval result cards show one number per metric. Two of them are composites that the backend already breaks down and nothing surfaced: `token_usage_v1` carries the per-type counts, and `invocation_duration_v1` carries the split between time awaiting a model, time inside tools, and the framework's own. Without it, a reader sees "1651 tokens" or "7.37s" with no way to ask where it went -- the duration split in particular exists to answer "is the framework the cost", which a single number cannot. Render both in the hover card the metric block already has, under the existing actual/threshold grid. The rows and their depth are declared in the component rather than the template, so each breakdown is one data structure and the template is one loop. Indentation means what it means in `adk eval`'s own output, so the two surfaces read the same way: for tokens it is containment, `cached` being a portion of `prompt` rather than an addition to it; for the duration the parts partition the turn and sit under the total only to show they add back up to it. A figure the run never reported reads `n/a`, never `0`. A backend may not publish a given token count, and a turn timed before the duration split existed carries a total and no parts -- showing those as zero would claim the turn spent nothing there.
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
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.
What
The eval result cards show one number per metric. Two of them are composites the backend already breaks down, and nothing surfaced it:
token_usage_v1carries the per-type countsinvocation_duration_v1carries the split between time awaiting a model, time inside tools, and the framework's ownWithout it a reader sees
1651or7.37swith no way to ask where it went. The duration split in particular exists to answer "is the framework the cost", which a single number cannot.This renders both in the hover card the metric block already has, under the existing actual/threshold grid.
Rendered
From a live
adk webeval run (3-turn case,gemini-2.5-flash).cachedandtool usereadn/abecause that run's backend did not report them.invocation_duration_v1token_usage_v1Notes for review
Indentation means what it means in
adk eval's own output, so the two surfaces read the same way. For tokens it is containment —cachedis a portion ofprompt, not an addition to it. For the duration the parts partition the turn and sit under the total only to show they add back up to it.A figure the run never reported reads
n/a, never0. A backend may not publish a given token count, and a turn timed before the duration split existed carries a total and no parts; showing those as zero would claim the turn spent nothing there.The rows are declared in the component, not the template — each breakdown is one data structure and the template is a single loop, so adding a field later is a one-line change and the shape is unit-testable without the DOM.
No API change:
details.tokenUsageDetailsanddetails.durationDetailsare already on the wire.Testing
npm run test— 831 passing, including 7 new specs formetricBreakdown:n/an/arather than03.0→3s,2.123456→2.123s)ng build --configuration=productionpasses.Verified end to end against a running backend:
ng serveproxied toadk web, eval run from the Dev UI, both hover cards checked against the values in the saved.evalset_result.json(screenshots above).