Mehmet Ali
983532311f
fix(agent/gemini): count thinking tokens in usage and cost
...
`_usage_from_metadata` (agent/gemini_native_adapter.py:476) read
`candidatesTokenCount` for `completion_tokens` and never read
`thoughtsTokenCount`; a repo-wide grep found that field nowhere. Gemini
reports hidden thinking in its own counter — `candidatesTokenCount` covers
visible output only, while `totalTokenCount` already includes thoughts. So on
any thinking turn the emitted usage contradicted itself: prompt + completion
did not add up to total.
Both the non-streaming assembly (translate_gemini_response) and the streaming
one (the finish chunk in translate_stream_event) share this helper, so both
under-billed identically. `normalize_usage` takes `completion_tokens` for
`output_tokens` and looks for reasoning under
`completion_tokens_details.reasoning_tokens`, which the adapter never set, so
the reasoning column read 0 for models whose spend is mostly reasoning.
Thoughts are now folded into `completion_tokens` (OpenAI's counter includes
reasoning) and surfaced under `completion_tokens_details.reasoning_tokens`,
matching the nesting the adapter already uses for
`prompt_tokens_details.cached_tokens`. The field is absent on non-thinking and
older responses; those count 0 and their numbers do not move.
Live: for usageMetadata {prompt 10, candidates 200, thoughts 5000, total 5210}
the adapter emitted completion_tokens=200 (10 + 200 != 5210) and
normalize_usage returned output_tokens=200, reasoning_tokens=0. It now emits
completion_tokens=5200 (10 + 5200 == 5210) with
completion_tokens_details.reasoning_tokens=5000, and normalize_usage returns
output_tokens=5200, reasoning_tokens=5000.
2026-09-23 22:31:59 -07:00
..
2026-09-20 18:54:24 -07:00
2026-09-13 05:07:50 -07:00
2026-09-18 10:22:14 -07:00
2026-09-13 05:07:11 -07:00
2026-09-19 16:20:29 +05:30
2026-09-23 19:26:00 -07:00
2026-09-15 04:56:01 -07:00
2026-09-06 20:50:02 +05:30
2026-09-23 18:29:35 -05:00
2026-09-13 09:18:02 -07:00
2026-09-23 13:40:45 -04:00
2026-09-23 21:28:38 +05:30
2026-09-22 01:19:12 -07:00
2026-09-23 13:40:44 -04:00
2026-09-21 09:55:40 -07:00
2026-09-06 05:37:03 -07:00
2026-09-19 09:56:12 -07:00
2026-09-14 20:01:19 +05:30
2026-09-17 08:53:15 -07:00
2026-09-23 06:46:02 -07:00
2026-09-17 08:45:46 -07:00
2026-09-17 09:07:51 -07:00
2026-09-22 01:19:12 -07:00
2026-09-23 15:13:16 -07:00
2026-09-17 09:11:38 -07:00
2026-09-23 18:29:35 -05:00
2026-09-19 09:28:45 -07:00
2026-09-20 12:09:47 -07:00
2026-09-07 07:06:58 -07:00
2026-09-23 15:00:46 -05:00
2026-09-20 12:09:47 -07:00
2026-09-23 18:29:35 -05:00
2026-09-20 14:29:39 -07:00
2026-09-21 15:09:02 -07:00
2026-09-19 09:53:48 -07:00
2026-09-19 09:53:48 -07:00
2026-09-19 09:53:48 -07:00
2026-09-23 16:27:37 -07:00
2026-09-19 09:28:13 -07:00
2026-09-23 21:28:38 +05:30
2026-09-19 20:44:24 -07:00
2026-09-19 20:44:24 -07:00
2026-09-23 17:06:48 -07:00
2026-09-23 18:52:49 -05:00
2026-09-23 01:11:58 -07:00
2026-09-13 05:09:43 -07:00
2026-09-20 15:50:49 -07:00
2026-09-23 10:44:29 -07:00
2026-09-21 23:38:16 -07:00
2026-09-16 17:17:47 -07:00
2026-09-19 10:28:34 -07:00
2026-09-20 19:45:30 -07:00
2026-09-23 01:11:58 -07:00
2026-09-23 23:06:15 +05:30
2026-09-23 23:06:15 +05:30
2026-09-23 17:06:48 -07:00
2026-09-19 10:44:26 -07:00
2026-09-21 09:55:40 -07:00
2026-09-19 09:37:23 -07:00
2026-09-19 21:24:05 -07:00
2026-09-21 09:55:40 -07:00
2026-09-18 20:55:24 -07:00
2026-09-20 14:02:17 +05:30
2026-09-19 09:20:54 -07:00
2026-09-22 12:52:49 +05:30
2026-09-07 08:19:32 -07:00
2026-09-16 17:48:48 -07:00
2026-09-22 13:57:51 +05:30
2026-09-23 10:40:08 -07:00
2026-09-19 10:54:43 -07:00
2026-09-20 17:00:43 -07:00
2026-09-23 13:40:45 -04:00
2026-09-18 10:08:58 -07:00
2026-09-23 22:31:59 -07:00
2026-09-14 06:44:54 -07:00
2026-09-24 00:30:45 +00:00
2026-09-11 15:26:46 -07:00
2026-09-17 13:52:36 +05:30
2026-09-19 20:56:31 -07:00
2026-09-12 01:35:05 -07:00
2026-09-23 08:04:33 +05:30
2026-09-23 18:29:35 -05:00
2026-09-18 13:01:12 -04:00
2026-09-16 17:48:17 -07:00
2026-09-07 08:28:43 -07:00
2026-09-18 09:21:42 -07:00
2026-09-11 11:54:49 -07:00
2026-09-23 18:29:35 -05:00
2026-09-15 19:03:33 -07:00
2026-09-23 18:26:45 -07:00
2026-09-23 01:06:32 -07:00
2026-09-23 01:06:32 -07:00
2026-09-23 21:28:38 +05:30
2026-09-23 10:44:29 -07:00
2026-09-18 20:56:35 -07:00
2026-09-23 21:28:38 +05:30
2026-09-23 13:40:44 -04:00
2026-09-23 21:53:47 +05:30
2026-09-21 13:14:22 -07:00
2026-09-19 00:53:26 -07:00
2026-09-18 01:43:35 +05:30
2026-09-17 12:28:25 +05:30
2026-09-06 09:11:04 -07:00
2026-09-13 05:09:06 -07:00
2026-09-19 09:21:18 -07:00
2026-09-19 10:56:19 -07:00
2026-09-11 15:26:46 -07:00
2026-09-16 11:06:06 -07:00
2026-09-22 16:15:34 +05:30
2026-09-18 09:56:28 -07:00
2026-09-23 03:10:15 -07:00
2026-09-14 06:55:54 -07:00
2026-09-23 21:28:38 +05:30
2026-09-18 10:22:14 -07:00
2026-09-15 06:16:38 -07:00
2026-09-20 14:02:17 +05:30
2026-09-23 00:44:33 -07:00
2026-09-20 16:03:38 -07:00
2026-09-13 21:27:35 -07:00
2026-09-19 09:57:53 -07:00
2026-09-23 21:28:38 +05:30
2026-09-11 09:31:13 -07:00
2026-09-23 06:31:43 -07:00
2026-09-24 01:06:16 -04:00
2026-09-16 17:10:13 -07:00
2026-09-13 19:23:09 +05:30
2026-09-19 09:49:39 -07:00
2026-09-08 04:38:47 -07:00
2026-09-23 07:43:29 -04:00
2026-09-15 19:23:53 -07:00
2026-09-23 08:09:47 -07:00
2026-09-19 10:38:30 -07:00
2026-09-06 05:35:12 -07:00
2026-09-20 10:16:51 -07:00
2026-09-21 23:47:51 -07:00
2026-09-22 17:08:30 +05:30
2026-09-20 15:50:26 -07:00
2026-09-22 17:08:30 +05:30
2026-09-18 01:43:35 +05:30
2026-09-24 00:30:45 +00:00
2026-09-19 12:21:39 -07:00
2026-09-20 10:51:03 -07:00
2026-09-23 17:06:48 -07:00
2026-09-23 17:06:48 -07:00
2026-09-16 06:27:23 -05:00
2026-09-13 05:20:26 -07:00
2026-09-15 04:12:13 -07:00
2026-09-20 14:09:57 -07:00
2026-09-23 08:04:33 +05:30
2026-09-22 13:57:51 +05:30
2026-09-18 10:03:04 -07:00
2026-09-18 10:03:04 -07:00
2026-09-06 22:56:51 +05:30
2026-09-12 08:25:14 -07:00
2026-09-20 18:24:07 -07:00
2026-09-20 12:36:34 +05:30
2026-09-20 17:00:43 -07:00
2026-09-21 21:43:51 +05:30
2026-09-10 10:45:57 -07:00
2026-09-20 12:52:07 -07:00
2026-09-23 15:00:46 -05:00
2026-09-18 01:43:35 +05:30
2026-09-20 20:13:33 -07:00
2026-09-16 17:48:17 -07:00
2026-09-23 07:46:43 -04:00
2026-09-23 16:58:39 -07:00
2026-09-21 23:56:25 -07:00
2026-09-23 15:00:46 -05:00
2026-09-23 05:36:34 -07:00
2026-09-09 12:17:57 +05:30
2026-09-18 01:43:35 +05:30
2026-09-23 04:38:27 -07:00
2026-09-18 01:43:35 +05:30
2026-09-23 05:36:34 -07:00
2026-09-19 12:38:55 -07:00
2026-09-23 13:40:45 -04:00
2026-09-19 00:04:42 -07:00
2026-09-19 10:47:48 -07:00
2026-09-19 00:04:42 -07:00
2026-09-19 12:38:55 -07:00
2026-09-18 09:21:42 -07:00
2026-09-23 05:36:34 -07:00
2026-09-18 01:43:35 +05:30
2026-09-19 10:51:40 -07:00
2026-09-17 18:36:10 -07:00
2026-09-06 13:21:17 -07:00
2026-09-23 11:33:09 -07:00
2026-09-10 11:48:01 -07:00
2026-09-20 10:21:52 -07:00
2026-09-20 10:23:04 -07:00
2026-09-23 07:49:35 -07:00
2026-09-15 04:48:20 -07:00
2026-09-23 07:49:35 -07:00