Commit 21ae837
fix(translator): merge input/cache token usage reported on Anthropic message_delta (#2292)
**Description**
Anthropic Messages streaming usage extraction reads input and cache
token counts from `message_start`, and on `message_delta` it only
updates `output_tokens`. Some Anthropic-compatable backends report the
final `input_tokens`, `cache_creation_input_tokens` and
`cache_read_input_tokens` on the `message_delta` event instead. In that
case the input and cache counts get dropped and recorded as zero, which
corrupts usage metrics and any downstream cost or quota accounting that
depends on them.
This runs the `message_delta` usage through the same
`ExtractTokenUsageFromExplicitCaching` path already used for
`message_start` and merges it with `Override`. The fields are only
merged when non-zero, so a standard delta that carries `output_tokens`
alone doesnt overwrite the `message_start` baseline with zeros.
**Related Issues/PRs (if applicable)**
Fixes #2290
**Special notes for reviewers (if applicable)**
Added two streaming subtests (cache-creation and cache-read variants)
using the values from the issue: `input_tokens` 4522 + cache 4511 gives
9033 input total and 9038 total. They fail on main and pass with this
change. The existing streaming and non-streaming usage tests are
untouched.
---------
Signed-off-by: pjdurden <prajjwalchittori1@gmail.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>1 parent 6749acb commit 21ae837
2 files changed
Lines changed: 104 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
181 | | - | |
182 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
183 | 186 | | |
184 | 187 | | |
185 | 188 | | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
186 | 219 | | |
187 | 220 | | |
188 | 221 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
198 | 267 | | |
199 | 268 | | |
200 | 269 | | |
| |||
0 commit comments