Skip to content

Commit 9911a7a

Browse files
feat: format token usage with "compact" notation (#238)
* feat: format token usage with "compact" notation * chore: fix tests
1 parent 89a6dc4 commit 9911a7a

6 files changed

+21
-13
lines changed

src/features/alerts/components/__tests__/alerts-summary-workspace-token-usage.test.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { render, waitFor } from "@/lib/test-utils";
55

66
import { AlertsSummaryWorkspaceTokenUsage } from "../alerts-summary-workspace-token-usage";
77
import { TOKEN_USAGE_AGG } from "../../mocks/token-usage.mock";
8+
import { formatNumberCompact } from "@/lib/format-number";
89

910
test("shows correct count when there is token usage", async () => {
1011
server.use(
@@ -17,10 +18,10 @@ test("shows correct count when there is token usage", async () => {
1718

1819
await waitFor(() => {
1920
expect(getByTestId("usage-input-tokens")).toHaveTextContent(
20-
TOKEN_USAGE_AGG.token_usage.input_tokens.toString(),
21+
formatNumberCompact(TOKEN_USAGE_AGG.token_usage.input_tokens),
2122
);
2223
expect(getByTestId("usage-output-tokens")).toHaveTextContent(
23-
TOKEN_USAGE_AGG.token_usage.output_tokens.toString(),
24+
formatNumberCompact(TOKEN_USAGE_AGG.token_usage.output_tokens),
2425
);
2526
});
2627
});

src/features/alerts/components/__tests__/table-alerts.test.tsx

+6-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { server } from "@/mocks/msw/node";
55
import { http, HttpResponse } from "msw";
66
import { makeMockAlert } from "../../mocks/alert.mock";
77
import { TOKEN_USAGE_AGG } from "../../mocks/token-usage.mock";
8+
import { formatNumberCompact } from "@/lib/format-number";
89

910
vi.mock("@untitled-ui/icons-react", async () => {
1011
const original = await vi.importActual<
@@ -18,14 +19,12 @@ vi.mock("@untitled-ui/icons-react", async () => {
1819
});
1920

2021
const INPUT_TOKENS =
21-
TOKEN_USAGE_AGG.tokens_by_model[
22-
"claude-3-5-sonnet-latest"
23-
].token_usage.input_tokens.toString();
22+
TOKEN_USAGE_AGG.tokens_by_model["claude-3-5-sonnet-latest"].token_usage
23+
.input_tokens;
2424

2525
const OUTPUT_TOKENS =
26-
TOKEN_USAGE_AGG.tokens_by_model[
27-
"claude-3-5-sonnet-latest"
28-
].token_usage.output_tokens.toString();
26+
TOKEN_USAGE_AGG.tokens_by_model["claude-3-5-sonnet-latest"].token_usage
27+
.output_tokens;
2928

3029
test("renders token usage cell correctly", async () => {
3130
server.use(
@@ -53,7 +52,7 @@ test("renders token usage cell correctly", async () => {
5352

5453
expect(
5554
getByRole("gridcell", {
56-
name: `${INPUT_TOKENS} ${OUTPUT_TOKENS}`,
55+
name: `${formatNumberCompact(INPUT_TOKENS)} ${formatNumberCompact(OUTPUT_TOKENS)}`,
5756
}),
5857
).toBeVisible();
5958
});

src/features/alerts/components/alerts-summary.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { formatNumberCompact } from "@/lib/format-number";
12
import { Card, CardBody, Heading, Skeleton } from "@stacklok/ui-kit";
23
import { ComponentProps } from "react";
34

@@ -13,7 +14,7 @@ function AlertsSummaryStatistic({
1314
return (
1415
<div data-testid={id} className="text-5xl flex items-center gap-1">
1516
<Icon className="size-11" />
16-
{count}
17+
{formatNumberCompact(count)}
1718
</div>
1819
);
1920
}

src/features/alerts/components/table-alert-token-usage.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { TokenUsageAggregate } from "@/api/generated";
22
import { TextLinkButton, Tooltip, TooltipTrigger } from "@stacklok/ui-kit";
33
import { Download01, Upload01 } from "@untitled-ui/icons-react";
44
import { TokenUsageByProviders } from "./token-usage-by-providers";
5+
import { formatNumberCompact } from "@/lib/format-number";
56

67
function Icons({
78
input_tokens = 0,
@@ -14,11 +15,11 @@ function Icons({
1415
<div className="flex tabular-nums gap-4 items-center">
1516
<div className="flex items-center gap-1">
1617
<Download01 className="size-4" />
17-
{input_tokens}
18+
{formatNumberCompact(input_tokens ?? 0)}
1819
</div>
1920
<div className="flex items-center gap-1">
2021
<Upload01 className="size-4" />
21-
<span className="block">{output_tokens}</span>
22+
<span className="block">{formatNumberCompact(output_tokens ?? 0)}</span>
2223
</div>
2324
</div>
2425
);

src/features/alerts/components/token-usage-by-providers.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TokenUsage, TokenUsageAggregate } from "@/api/generated";
22
import { formatCurrency } from "@/lib/currency";
3+
import { formatNumberCompact } from "@/lib/format-number";
34

45
import { ArrowDown, ArrowUp } from "@untitled-ui/icons-react";
56

@@ -47,7 +48,7 @@ function UsageRow({
4748
<li className="min-w-40 flex items-center border-b border-b-gray-900 last:border-b-0 py-1 my-1 list-none">
4849
<UsageIcon iconType={type} className="size-4 text-gray-50" />
4950

50-
<div className="text-gray-50">{tokens}</div>
51+
<div className="text-gray-50">{formatNumberCompact(tokens)}</div>
5152

5253
<div className="ml-auto text-gray-25">
5354
{formatCurrency(cost, { currency: "USD" })}

src/lib/format-number.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export const formatNumberCompact = (value: number) => {
2+
return Intl.NumberFormat("en-US", {
3+
notation: "compact",
4+
}).format(value);
5+
};

0 commit comments

Comments
 (0)