test(stream): cover cached input fallbacks
This commit is contained in:
@@ -141,6 +141,70 @@ describe("streamCommandCode — successful streams", () => {
|
|||||||
assert.equal(calculatedUsages.length, 1)
|
assert.equal(calculatedUsages.length, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("derives uncached input when noCacheTokens is missing", async () => {
|
||||||
|
server.mockResponse({
|
||||||
|
type: "success",
|
||||||
|
events: [
|
||||||
|
JSON.stringify({
|
||||||
|
type: "finish",
|
||||||
|
finishReason: "stop",
|
||||||
|
totalUsage: {
|
||||||
|
inputTokens: 100,
|
||||||
|
outputTokens: 10,
|
||||||
|
inputTokenDetails: { cacheReadTokens: 75 },
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
})
|
||||||
|
const { streamCommandCode } = createTestDeps({ apiBase: server.baseUrl() })
|
||||||
|
|
||||||
|
const events = await collectEvents(
|
||||||
|
streamCommandCode(makeModel(), makeContext(), { apiKey: "mock-key" }),
|
||||||
|
)
|
||||||
|
|
||||||
|
const done = events.at(-1)
|
||||||
|
assert.equal(done?.type, "done")
|
||||||
|
if (done?.type !== "done") throw new Error("expected done")
|
||||||
|
assert.equal(done.message.usage.input, 25)
|
||||||
|
assert.equal(done.message.usage.cacheRead, 75)
|
||||||
|
assert.equal(done.message.usage.cacheWrite, 0)
|
||||||
|
assert.equal(done.message.usage.totalTokens, 110)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("accounts for cache writes separately from uncached input", async () => {
|
||||||
|
server.mockResponse({
|
||||||
|
type: "success",
|
||||||
|
events: [
|
||||||
|
JSON.stringify({
|
||||||
|
type: "finish",
|
||||||
|
finishReason: "stop",
|
||||||
|
totalUsage: {
|
||||||
|
inputTokens: 100,
|
||||||
|
outputTokens: 10,
|
||||||
|
inputTokenDetails: {
|
||||||
|
noCacheTokens: 20,
|
||||||
|
cacheReadTokens: 70,
|
||||||
|
cacheWriteTokens: 10,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
})
|
||||||
|
const { streamCommandCode } = createTestDeps({ apiBase: server.baseUrl() })
|
||||||
|
|
||||||
|
const events = await collectEvents(
|
||||||
|
streamCommandCode(makeModel(), makeContext(), { apiKey: "mock-key" }),
|
||||||
|
)
|
||||||
|
|
||||||
|
const done = events.at(-1)
|
||||||
|
assert.equal(done?.type, "done")
|
||||||
|
if (done?.type !== "done") throw new Error("expected done")
|
||||||
|
assert.equal(done.message.usage.input, 20)
|
||||||
|
assert.equal(done.message.usage.cacheRead, 70)
|
||||||
|
assert.equal(done.message.usage.cacheWrite, 10)
|
||||||
|
assert.equal(done.message.usage.totalTokens, 110)
|
||||||
|
})
|
||||||
|
|
||||||
it("ends on finish without waiting for an open upstream connection", async () => {
|
it("ends on finish without waiting for an open upstream connection", async () => {
|
||||||
server.mockResponse({
|
server.mockResponse({
|
||||||
type: "success",
|
type: "success",
|
||||||
|
|||||||
Reference in New Issue
Block a user