Files
oh-my-pi/packages/ai/test/models-cost.test.ts
T
maximhar 7ea7b53783 feat(copilot): track premium requests with model multipliers (#255)
* Track Copilot premium requests with model multipliers

* refactor(copilot): source premium multipliers from models.json

* feat(copilot): add gpt-5.3-codex bundled model

* fix(stats): round premium request totals in summary

* fix(stats): round premium requests in sync summary
2026-03-03 03:26:00 +01:00

74 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "bun:test";
import { calculateCost, getBundledModel } from "../src/models";
import type { Usage } from "../src/types";
describe("calculateCost", () => {
it("keeps token-based calculation for GitHub Copilot models", () => {
const model = {
...getBundledModel("github-copilot", "gpt-4o"),
cost: {
input: 1000,
output: 2000,
cacheRead: 500,
cacheWrite: 800,
},
};
const usage: Usage = {
input: 1000,
output: 500,
cacheRead: 200,
cacheWrite: 100,
totalTokens: 1800,
cost: {
input: 123,
output: 456,
cacheRead: 789,
cacheWrite: 321,
total: 1689,
},
};
calculateCost(model, usage);
expect(usage.cost.input).toBeCloseTo(1, 8);
expect(usage.cost.output).toBeCloseTo(1, 8);
expect(usage.cost.cacheRead).toBeCloseTo(0.1, 8);
expect(usage.cost.cacheWrite).toBeCloseTo(0.08, 8);
expect(usage.cost.total).toBeCloseTo(2.18, 8);
});
it("keeps token-based calculation for non-Copilot providers", () => {
const model = {
...getBundledModel("openai", "gpt-4o-mini"),
cost: {
input: 1000,
output: 2000,
cacheRead: 500,
cacheWrite: 800,
},
};
const usage: Usage = {
input: 1000,
output: 500,
cacheRead: 200,
cacheWrite: 100,
totalTokens: 1800,
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
total: 0,
},
};
calculateCost(model, usage);
expect(usage.cost.input).toBeCloseTo(1, 8);
expect(usage.cost.output).toBeCloseTo(1, 8);
expect(usage.cost.cacheRead).toBeCloseTo(0.1, 8);
expect(usage.cost.cacheWrite).toBeCloseTo(0.08, 8);
expect(usage.cost.total).toBeCloseTo(2.18, 8);
});
});