Skip to content

g1t/apps/web/app/lib/gateway.test.ts

52 lines2,599 bytesCodeBlame

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Merge the AI Gateway: Anthropic's Messages API on a workspace's tokens1import assert from "node:assert/strict";
2import { test } from "node:test";
3
AI Gateway: OpenAI's format, open models, and your own providers4import { cacheKinds, duration, formatLabel, parseGatewayModels, servedBy, shortCount, statusTone, tokenKinds, totalTokens } from "./gateway.ts";
Merge the AI Gateway: Anthropic's Messages API on a workspace's tokens5
6test("token counts read short", () => {
7 assert.equal(shortCount(812), "812");
8 assert.equal(shortCount(12_400), "12.4K");
9 assert.equal(shortCount(150_000), "150K");
10 assert.equal(shortCount(3_000_000), "3M");
11});
12
13test("a request's tokens add up and are named by kind", () => {
14 const request = { input: 1_840, output: 512, cacheRead: 12_000, cacheWrite: 0 };
15 assert.equal(totalTokens(request), 14_352);
16 assert.equal(tokenKinds(request), "1,840 input, 512 output, 12,000 cache read, 0 cache write");
17});
18
19test("refusals for money or rate are warnings, other failures are errors", () => {
20 assert.deepEqual(statusTone(200), { label: "200", tone: "success" });
21 assert.equal(statusTone(402).tone, "warn");
22 assert.equal(statusTone(429).tone, "warn");
23 assert.equal(statusTone(400).tone, "danger");
24 assert.equal(statusTone(529).tone, "danger");
25});
26
27test("durations read plainly", () => {
28 assert.equal(duration(840), "840 ms");
29 assert.equal(duration(4_210), "4.2 s");
30 assert.equal(duration(125_000), "2 min 5 s");
31});
AI Gateway: OpenAI's format, open models, and your own providers32
33test("a request says which format it came in and who served it", () => {
34 assert.equal(formatLabel("openai"), "OpenAI");
35 assert.equal(formatLabel("anthropic"), "Anthropic");
36 assert.deepEqual(servedBy({ ownKey: false, provider: "workers-ai", connection: null }).label, "g1t · Workers AI");
37 assert.deepEqual(servedBy({ ownKey: false, provider: "anthropic", connection: null }).label, "g1t · Anthropic");
38 const own = servedBy({ ownKey: true, provider: "openai_endpoint", connection: "Office GPU" });
39 assert.equal(own.label, "Office GPU");
40 assert.match(own.hint, /OpenAI-compatible endpoint: counted, not charged/);
41 assert.equal(servedBy({ ownKey: false, provider: "", connection: null }).label, "None");
42});
43
44test("a connection's AI Gateway models are typed as a list", () => {
45 assert.deepEqual(parseGatewayModels(" gpt-*, ollama/* claude-haiku-5-5 "), ["gpt-*", "ollama/*", "claude-haiku-5-5"]);
46 assert.deepEqual(parseGatewayModels(""), []);
47});
48
49test("cache tokens read in words, hour-long writes named", () => {
50 assert.equal(cacheKinds({ cacheRead: 12_000, cacheWrite: 2_400, cacheWriteHour: 0 }), "12,000 read from the cache, 2,400 written");
51 assert.equal(cacheKinds({ cacheRead: 0, cacheWrite: 2_400, cacheWriteHour: 2_400 }), "0 read from the cache, 2,400 written, 2,400 of them to the hour-long cache");
52});

This file's history is long; its oldest lines are credited to the oldest commit read.