Skip to content

Commit 4d5d17d

Browse files
authored
Add claude-sonnet-5 to AI-credits pricing to prevent runtime unknown-model rejection (#5993)
* Initial plan * fix(api-proxy): add claude-sonnet-5 ai credits pricing --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent 6e05150 commit 4d5d17d

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

containers/api-proxy/ai-credits-pricing.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module.exports = Object.freeze({
1717
'claude-sonnet-4': { input: 3.00, cachedInput: 0.30, cacheWrite: 3.75, output: 15.00 },
1818
'claude-sonnet-4-5': { input: 3.00, cachedInput: 0.30, cacheWrite: 3.75, output: 15.00 },
1919
'claude-sonnet-4-6': { input: 3.00, cachedInput: 0.30, cacheWrite: 3.75, output: 15.00 },
20+
'claude-sonnet-5': { input: 3.00, cachedInput: 0.30, cacheWrite: 3.75, output: 15.00 },
2021
'claude-opus-4-5': { input: 5.00, cachedInput: 0.50, cacheWrite: 6.25, output: 25.00 },
2122
'claude-opus-4-6': { input: 5.00, cachedInput: 0.50, cacheWrite: 6.25, output: 25.00 },
2223
'claude-opus-4-7': { input: 5.00, cachedInput: 0.50, cacheWrite: 6.25, output: 25.00 },

containers/api-proxy/guards/ai-credits-guard.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ describe('ai-credits-guard', () => {
8484
expect(getAiCreditsReflectState().by_model['claude-sonnet-4-6-20260601'].total).toBeCloseTo(0.5175, 10);
8585
});
8686

87+
it('resolves claude-sonnet-5 from curated pricing without unknown-model rejection', () => {
88+
process.env.AWF_MAX_AI_CREDITS = '10';
89+
resetAiCreditsGuardForTests();
90+
91+
const usage = applyAiCreditsUsage({
92+
input_tokens: 2000,
93+
cache_read_tokens: 1000,
94+
cache_write_tokens: 500,
95+
output_tokens: 100,
96+
}, 'claude-sonnet-5');
97+
98+
expect(usage.aiCreditsThisResponse).toBeCloseTo(0.5175, 10);
99+
expect(checkUnknownModelRejection('claude-sonnet-5')).toBeNull();
100+
});
101+
87102
it('does not double-count cached tokens when input_tokens is total-inclusive (OpenAI-style)', () => {
88103
// OpenAI (Chat Completions and Responses API) reports prompt_tokens/input_tokens
89104
// as the TOTAL input, with cached tokens being a subset. When no provider is
@@ -432,6 +447,9 @@ describe('ai-credits-guard', () => {
432447

433448
const result = checkUnknownModelRejection('gpt-5-mini');
434449
expect(result).toBeNull();
450+
451+
const sonnet5 = checkUnknownModelRejection('claude-sonnet-5');
452+
expect(sonnet5).toBeNull();
435453
});
436454
});
437455
});

0 commit comments

Comments
 (0)