| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { describe, expect, test } from "bun:test"
- import { anthropicHelper } from "../src/routes/zen/util/provider/anthropic"
- import { googleHelper } from "../src/routes/zen/util/provider/google"
- import { openaiHelper } from "../src/routes/zen/util/provider/openai"
- import { oaCompatHelper } from "../src/routes/zen/util/provider/openai-compatible"
- describe("provider usage extraction", () => {
- test("reads OpenAI Responses usage from response.usage", () => {
- const helper = openaiHelper({ reqModel: "gpt-5.4", providerModel: "gpt-5.4" })
- expect(
- helper.extractBodyUsage({
- response: {
- usage: {
- input_tokens: 13,
- input_tokens_details: { cached_tokens: 3 },
- output_tokens: 5,
- output_tokens_details: { reasoning_tokens: 1 },
- },
- },
- }),
- ).toEqual({
- input_tokens: 13,
- input_tokens_details: { cached_tokens: 3 },
- output_tokens: 5,
- output_tokens_details: { reasoning_tokens: 1 },
- })
- })
- test("reads Anthropic usage from message.usage", () => {
- const helper = anthropicHelper({ reqModel: "claude-sonnet", providerModel: "claude-sonnet-4-5" })
- expect(
- helper.extractBodyUsage({
- message: {
- usage: {
- input_tokens: 10,
- output_tokens: 4,
- },
- },
- }),
- ).toEqual({
- input_tokens: 10,
- output_tokens: 4,
- })
- })
- test("reads OA-compatible usage from usage", () => {
- const helper = oaCompatHelper({ reqModel: "gpt-4o-mini", providerModel: "gpt-4o-mini" })
- expect(
- helper.extractBodyUsage({
- usage: {
- prompt_tokens: 8,
- completion_tokens: 2,
- },
- }),
- ).toEqual({
- prompt_tokens: 8,
- completion_tokens: 2,
- })
- })
- test("reads Google usage from usageMetadata", () => {
- const helper = googleHelper({ reqModel: "gemini-2.5-flash", providerModel: "gemini-2.5-flash" })
- expect(
- helper.extractBodyUsage({
- usageMetadata: {
- promptTokenCount: 11,
- candidatesTokenCount: 3,
- },
- }),
- ).toEqual({
- promptTokenCount: 11,
- candidatesTokenCount: 3,
- })
- })
- })
|