feat(usage): track cached tokens + correct input/output/cache cost (#2209)

Normalize every provider to one cache-inclusive convention via
canonicalizeUsage() before persist, and price cached + cache_creation as
subsets of prompt_tokens in calculateCostFromTokens() to stop
double-counting. usageRepo now delegates cost math to a single source.
Surface Cached tokens/cost across dashboard (overview, tokens, cost,
details). Merge Claude message_start cache with message_delta output so
cache counts survive. Compatible LLM nodes now allow multiple API-key
connections (key pool).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
hodtien
2026-07-03 15:18:27 +07:00
committed by decolua
co-authored by Cursor
parent 960f8a0379
commit 54e3245ace
17 changed files with 558 additions and 71 deletions
+2
View File
@@ -126,6 +126,8 @@ export async function POST(request) {
let providerSpecificData = normalizeProviderSpecificData(provider, body, body.providerSpecificData);
// Compatible LLM nodes support multiple API-key connections (key pool); runtime
// rotates/fails over via getProviderCredentials. Embedding nodes stay single-connection.
if (isOpenAICompatibleProvider(provider)) {
const node = await getProviderNodeById(provider);
if (!node) {