Skip to content

Commit f1a747c

Browse files
authored
chore: add e2e test for cache_control (#67)
1 parent 99df9c2 commit f1a747c

File tree

6 files changed

+592
-474
lines changed

6 files changed

+592
-474
lines changed

e2e/cache-control.test.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import { createOpenRouter } from '@/src';
2+
import { streamText } from 'ai';
3+
import { it, vi } from 'vitest';
4+
5+
vi.setConfig({
6+
testTimeout: 42_000,
7+
});
8+
9+
it('should trigger cache read', async () => {
10+
// First call to warm the cache
11+
await callLLM();
12+
// Second call to test cache read
13+
const response = await callLLM();
14+
const providerMetadata = await response.providerMetadata;
15+
expect(providerMetadata?.openrouter).toMatchObject({
16+
usage: expect.objectContaining({
17+
promptTokens: expect.any(Number),
18+
completionTokens: expect.any(Number),
19+
promptTokensDetails: expect.objectContaining({
20+
cachedTokens: expect.any(Number),
21+
}),
22+
completionTokensDetails: expect.any(Object),
23+
totalTokens: expect.any(Number),
24+
cost: expect.any(Number),
25+
}),
26+
});
27+
28+
const cachedTokens = Number(
29+
// @ts-ignore
30+
providerMetadata?.openrouter?.usage?.promptTokensDetails?.cachedTokens,
31+
);
32+
33+
expect(cachedTokens).toBeGreaterThan(0);
34+
});
35+
36+
async function callLLM() {
37+
const openrouter = createOpenRouter({
38+
apiKey: process.env.OPENROUTER_API_KEY,
39+
baseUrl: `${process.env.OPENROUTER_API_BASE}/api/v1`,
40+
});
41+
const model = openrouter('anthropic/claude-3.7-sonnet', {
42+
usage: {
43+
include: true,
44+
},
45+
});
46+
const response = streamText({
47+
model,
48+
messages: [
49+
{
50+
role: 'user',
51+
content: [
52+
{
53+
type: 'text',
54+
text: 'a'.repeat(4200),
55+
providerOptions: {
56+
openrouter: {
57+
cache_control: {
58+
type: 'ephemeral',
59+
},
60+
},
61+
},
62+
},
63+
{
64+
type: 'text',
65+
text: 'How many "a" did I use in the previous message?',
66+
},
67+
],
68+
},
69+
],
70+
});
71+
72+
await response.consumeStream();
73+
return response;
74+
}

package.json

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@openrouter/ai-sdk-provider",
3-
"version": "0.5.0",
3+
"version": "0.6.0",
44
"license": "Apache-2.0",
55
"sideEffects": false,
66
"main": "./dist/index.js",
@@ -38,26 +38,27 @@
3838
}
3939
},
4040
"dependencies": {
41-
"@ai-sdk/provider": "1.0.9",
42-
"@ai-sdk/provider-utils": "2.1.10"
41+
"@ai-sdk/provider": "1.1.3",
42+
"@ai-sdk/provider-utils": "2.2.8"
4343
},
4444
"devDependencies": {
4545
"@biomejs/biome": "1.9.4",
46-
"@ianvs/prettier-plugin-sort-imports": "4.4.1",
4746
"@edge-runtime/vm": "5.0.0",
47+
"@ianvs/prettier-plugin-sort-imports": "4.4.2",
4848
"@types/jest": "29.5.14",
49-
"@types/node": "22.13.5",
50-
"ai": "4.1.46",
51-
"tsup": "8.4.0",
52-
"prettier": "3.5.2",
53-
"typescript": "5.7.3",
54-
"vitest": "3.0.7",
55-
"vite-tsconfig-paths": "5.1.4",
49+
"@types/node": "22.15.24",
50+
"ai": "4.3.16",
5651
"dotenv": "16.5.0",
57-
"zod": "3.24.2"
52+
"prettier": "3.5.3",
53+
"tsup": "8.5.0",
54+
"typescript": "5.8.3",
55+
"vite-tsconfig-paths": "5.1.4",
56+
"vitest": "3.1.4",
57+
"zod": "3.25.34"
5858
},
5959
"peerDependencies": {
60-
"zod": "^3.0.0"
60+
"zod": "^3.25.34",
61+
"ai": "^4.3.16"
6162
},
6263
"engines": {
6364
"node": ">=18"

0 commit comments

Comments
 (0)