Files
oh-my-pi/packages/coding-agent/test/session-manager/usage-statistics.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

124 lines
3.2 KiB
TypeScript

import { describe, expect, it } from "bun:test";
import { SessionManager } from "@oh-my-pi/pi-coding-agent/session/session-manager";
describe("SessionManager usage statistics", () => {
it("accumulates premium requests from assistant messages and task tool results", () => {
const session = SessionManager.inMemory();
session.appendMessage({ role: "user", content: "hello", timestamp: 1 });
session.appendMessage({
role: "assistant",
content: [{ type: "text", text: "hi" }],
api: "openai-completions",
provider: "github-copilot",
model: "gpt-4o",
usage: {
input: 10,
output: 5,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 15,
premiumRequests: 1,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
stopReason: "stop",
timestamp: 2,
});
session.appendMessage({
role: "toolResult",
toolCallId: "task_1",
toolName: "task",
content: [{ type: "text", text: "task output" }],
details: {
usage: {
input: 2,
output: 3,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 5,
premiumRequests: 2,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
isError: false,
timestamp: 3,
});
const usage = session.getUsageStatistics();
expect(usage.input).toBe(12);
expect(usage.output).toBe(8);
expect(usage.premiumRequests).toBe(3);
});
it("preserves fractional premium request multipliers", () => {
const session = SessionManager.inMemory();
session.appendMessage({ role: "user", content: "hello", timestamp: 1 });
session.appendMessage({
role: "assistant",
content: [{ type: "text", text: "haiku" }],
api: "anthropic-messages",
provider: "github-copilot",
model: "claude-haiku-4.5",
usage: {
input: 10,
output: 5,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 15,
premiumRequests: 0.33,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
stopReason: "stop",
timestamp: 2,
});
session.appendMessage({
role: "toolResult",
toolCallId: "task_1",
toolName: "task",
content: [{ type: "text", text: "task output" }],
details: {
usage: {
input: 2,
output: 3,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 5,
premiumRequests: 3,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
isError: false,
timestamp: 3,
});
const usage = session.getUsageStatistics();
expect(usage.premiumRequests).toBeCloseTo(3.33, 8);
});
it("defaults premium requests to zero when usage payload omits the field", () => {
const session = SessionManager.inMemory();
session.appendMessage({ role: "user", content: "hello", timestamp: 1 });
session.appendMessage({
role: "assistant",
content: [{ type: "text", text: "hi" }],
api: "openai-completions",
provider: "openai",
model: "gpt-4o",
usage: {
input: 10,
output: 5,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 15,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
stopReason: "stop",
timestamp: 2,
});
const usage = session.getUsageStatistics();
expect(usage.premiumRequests).toBe(0);
});
});