mirror of
https://github.com/murashit/codex-panel.git
synced 2026-07-22 06:57:10 +00:00
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
accountRateLimitsSummaryFromResponse,
|
|
rateLimitSnapshotFromAccountRateLimitsResponse,
|
|
} from "../../src/app-server/protocol/runtime-metrics";
|
|
|
|
type AccountRateLimitsResponse = Parameters<typeof rateLimitSnapshotFromAccountRateLimitsResponse>[0];
|
|
type AppServerRateLimitSnapshot = AccountRateLimitsResponse["rateLimits"];
|
|
|
|
describe("app-server runtime metrics", () => {
|
|
it("projects the codex rate limit bucket when multi-bucket limits are available", () => {
|
|
expect(
|
|
rateLimitSnapshotFromAccountRateLimitsResponse({
|
|
rateLimits: appServerRateLimitFixture("single-bucket", 12),
|
|
rateLimitsByLimitId: {
|
|
other: appServerRateLimitFixture("other", 34),
|
|
codex: appServerRateLimitFixture("codex", 56),
|
|
},
|
|
}),
|
|
).toMatchObject({ limitId: "codex", primary: { usedPercent: 56 } });
|
|
});
|
|
|
|
it("falls back to the single-bucket rate limit snapshot when no codex bucket is available", () => {
|
|
expect(
|
|
rateLimitSnapshotFromAccountRateLimitsResponse({
|
|
rateLimits: appServerRateLimitFixture("single-bucket", 12),
|
|
rateLimitsByLimitId: {
|
|
other: appServerRateLimitFixture("other", 34),
|
|
},
|
|
}),
|
|
).toMatchObject({ limitId: "single-bucket", primary: { usedPercent: 12 } });
|
|
});
|
|
|
|
it("summarizes account rate limit response availability", () => {
|
|
expect(
|
|
accountRateLimitsSummaryFromResponse({
|
|
rateLimits: appServerRateLimitFixture("single-bucket", 12),
|
|
rateLimitsByLimitId: {
|
|
codex: appServerRateLimitFixture("codex", 56),
|
|
other: appServerRateLimitFixture("other", 34),
|
|
},
|
|
}),
|
|
).toBe("2 limits");
|
|
|
|
expect(
|
|
accountRateLimitsSummaryFromResponse({
|
|
rateLimits: appServerRateLimitFixture("single-bucket", 12),
|
|
rateLimitsByLimitId: null,
|
|
}),
|
|
).toBe("available");
|
|
});
|
|
});
|
|
|
|
function appServerRateLimitFixture(limitId: string, usedPercent: number): AppServerRateLimitSnapshot {
|
|
return {
|
|
limitId,
|
|
limitName: limitId,
|
|
primary: { usedPercent, windowDurationMins: 300, resetsAt: null },
|
|
secondary: null,
|
|
credits: null,
|
|
individualLimit: null,
|
|
planType: null,
|
|
rateLimitReachedType: null,
|
|
};
|
|
}
|