MCPcopy Create free account
hub / github.com/coder/aibridge / TestRecordTokenUsage

Function TestRecordTokenUsage

intercept/responses/base_test.go:269–339  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

267}
268
269func TestRecordTokenUsage(t *testing.T) {
270 t.Parallel()
271
272 id := uuid.MustParse("22222222-2222-2222-2222-222222222222")
273
274 tests := []struct {
275 name string
276 response *oairesponses.Response
277 expected *recorder.TokenUsageRecord
278 }{
279 {
280 name: "nil_response",
281 response: nil,
282 expected: nil,
283 },
284 {
285 name: "with_all_token_details",
286 response: &oairesponses.Response{
287 ID: "resp_full",
288 Usage: oairesponses.ResponseUsage{
289 InputTokens: 10,
290 OutputTokens: 20,
291 TotalTokens: 30,
292 InputTokensDetails: oairesponses.ResponseUsageInputTokensDetails{
293 CachedTokens: 5,
294 },
295 OutputTokensDetails: oairesponses.ResponseUsageOutputTokensDetails{
296 ReasoningTokens: 5,
297 },
298 },
299 },
300 expected: &recorder.TokenUsageRecord{
301 InterceptionID: id.String(),
302 MsgID: "resp_full",
303 Input: 5, // 10 input - 5 cached
304 Output: 20,
305 CacheReadInputTokens: 5,
306 ExtraTokenTypes: map[string]int64{
307 "input_cached": 5,
308 "output_reasoning": 5,
309 "total_tokens": 30,
310 },
311 },
312 },
313 }
314
315 for _, tc := range tests {
316 t.Run(tc.name, func(t *testing.T) {
317 t.Parallel()
318
319 rec := &testutil.MockRecorder{}
320 base := &responsesInterceptionBase{
321 id: id,
322 recorder: rec,
323 logger: slog.Make(),
324 }
325
326 base.recordTokenUsage(t.Context(), tc.response)

Callers

nothing calls this directly

Calls 2

recordTokenUsageMethod · 0.95
RecordedTokenUsagesMethod · 0.95

Tested by

no test coverage detected