7ea7b53783
* 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
74 lines
1.7 KiB
TypeScript
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);
|
|
});
|
|
});
|