fix(pricing): model-aware subscription capacity resolution and cache rate calibration

- Harmonize plan generation prompt cache rate to shared 75% default from estimate-constants.json
- Update TokenTranslator to resolve plan token capacity model-specifically via resolveTierModelBudget
- Fix calculatePoolDrain to drain model-specific allowances and eliminate Math.max deflation on low-cost models
- Make buildStackCandidates model-aware for accurate Dangerous Dave and Mix & Match stacking
- Update WorkflowCalculator to resolve plan capacity model-specifically for active workloads
- Reconcile Cursor Pro evidence quotes in throttle-profiles and reasoning token policies
- Add unit tests for model-aware stack candidates and pool drainage (102/102 passing)
This commit is contained in:
John Smith
2026-09-19 21:28:46 -04:00
parent 44d0cb41ad
commit 2dd7a1b34a
21 changed files with 372 additions and 269 deletions
+5
View File
@@ -22,3 +22,8 @@ dist-ssr
*.njsproj
*.sln
*.sw?
# Agent environments
.agents
.claude
skills-lock.json
+25 -25
View File
@@ -40,7 +40,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 23.86,
"estimatedMillionTokens": 23.5,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -50,17 +50,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 40.27,
"estimatedMillionTokens": 43.55,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 25.71,
"estimatedMillionTokens": 27.03,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 49.8,
"estimatedMillionTokens": 52.71,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -102,7 +102,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 53.56,
"estimatedMillionTokens": 52.74,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -112,17 +112,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 90.38,
"estimatedMillionTokens": 97.75,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 57.71,
"estimatedMillionTokens": 60.66,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 111.78,
"estimatedMillionTokens": 118.31,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -164,7 +164,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 95.45,
"estimatedMillionTokens": 94.0,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -174,17 +174,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 161.07,
"estimatedMillionTokens": 174.21,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 102.86,
"estimatedMillionTokens": 108.12,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 199.21,
"estimatedMillionTokens": 210.84,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -226,7 +226,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 381.29,
"estimatedMillionTokens": 375.48,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -236,17 +236,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 643.4,
"estimatedMillionTokens": 695.87,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 410.86,
"estimatedMillionTokens": 431.86,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 795.73,
"estimatedMillionTokens": 842.19,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -286,7 +286,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 55.68,
"estimatedMillionTokens": 54.83,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -296,12 +296,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 93.96,
"estimatedMillionTokens": 101.62,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 60.0,
"estimatedMillionTokens": 63.07,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -341,7 +341,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 222.2,
"estimatedMillionTokens": 218.81,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -351,12 +351,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 374.94,
"estimatedMillionTokens": 405.52,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 239.43,
"estimatedMillionTokens": 251.67,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -396,7 +396,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 555.76,
"estimatedMillionTokens": 547.29,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -406,12 +406,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 937.81,
"estimatedMillionTokens": 1014.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 598.86,
"estimatedMillionTokens": 629.47,
"basis": "list-price-credit",
"confidence": "medium"
}
+7 -7
View File
@@ -42,12 +42,12 @@
"confidence": "medium"
},
"dola-seed-2.0-lite": {
"estimatedMillionTokens": 126.51,
"estimatedMillionTokens": 123.03,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.3-flash": {
"estimatedMillionTokens": 197.69,
"estimatedMillionTokens": 193.98,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -57,7 +57,7 @@
"confidence": "medium"
},
"deepseek-v4-flash": {
"estimatedMillionTokens": 124.94,
"estimatedMillionTokens": 121.83,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -67,7 +67,7 @@
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 54.22,
"estimatedMillionTokens": 50.45,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -108,12 +108,12 @@
"confidence": "medium"
},
"dola-seed-2.0-lite": {
"estimatedMillionTokens": 632.55,
"estimatedMillionTokens": 615.15,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.3-flash": {
"estimatedMillionTokens": 988.45,
"estimatedMillionTokens": 969.9,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -128,7 +128,7 @@
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 271.09,
"estimatedMillionTokens": 252.27,
"basis": "list-price-credit",
"confidence": "medium"
}
+2 -2
View File
@@ -91,7 +91,7 @@
"confidence": "low"
},
"claude fable 5.1": {
"estimatedMillionTokens": 6.96,
"estimatedMillionTokens": 6.55,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -140,7 +140,7 @@
"confidence": "low"
},
"claude fable 5.1": {
"estimatedMillionTokens": 27.86,
"estimatedMillionTokens": 26.2,
"basis": "list-price-credit",
"confidence": "low"
}
+14 -14
View File
@@ -24,22 +24,22 @@
},
"perModelTokenBudgets": {
"gpt-5.6 luna": {
"estimatedMillionTokens": 93.13,
"estimatedMillionTokens": 73.04,
"basis": "list-price-credit",
"confidence": "medium"
},
"grok 4.5": {
"estimatedMillionTokens": 9.44,
"estimatedMillionTokens": 7.71,
"basis": "list-price-credit",
"confidence": "medium"
},
"qwen 3.8 max": {
"estimatedMillionTokens": 12.0,
"estimatedMillionTokens": 8.94,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m3": {
"estimatedMillionTokens": 62.64,
"estimatedMillionTokens": 50.45,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -80,27 +80,27 @@
},
"perModelTokenBudgets": {
"gpt-5.6 sol": {
"estimatedMillionTokens": 26.08,
"estimatedMillionTokens": 20.45,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.2": {
"estimatedMillionTokens": 104.51,
"estimatedMillionTokens": 82.01,
"basis": "list-price-credit",
"confidence": "medium"
},
"tencent hy3": {
"estimatedMillionTokens": 855.9,
"estimatedMillionTokens": 711.0,
"basis": "list-price-credit",
"confidence": "medium"
},
"qwen 3.8 27b": {
"estimatedMillionTokens": 287.67,
"estimatedMillionTokens": 231.5,
"basis": "list-price-credit",
"confidence": "medium"
},
"deepseek v4 flash": {
"estimatedMillionTokens": 1263.7,
"estimatedMillionTokens": 876.96,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -141,27 +141,27 @@
},
"perModelTokenBudgets": {
"claude opus 4.8": {
"estimatedMillionTokens": 32.7,
"estimatedMillionTokens": 25.12,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 29.8,
"estimatedMillionTokens": 23.37,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini": {
"estimatedMillionTokens": 109.0,
"estimatedMillionTokens": 83.74,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.2": {
"estimatedMillionTokens": 119.45,
"estimatedMillionTokens": 93.72,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m3": {
"estimatedMillionTokens": 501.12,
"estimatedMillionTokens": 403.6,
"basis": "list-price-credit",
"confidence": "medium"
}
+22 -22
View File
@@ -52,47 +52,47 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 18.88,
"estimatedMillionTokens": 15.41,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 52.58,
"estimatedMillionTokens": 46.99,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 4.75,
"estimatedMillionTokens": 3.43,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude sonnet 5": {
"estimatedMillionTokens": 20.44,
"estimatedMillionTokens": 15.7,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 10.22,
"estimatedMillionTokens": 7.85,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.1 pro": {
"estimatedMillionTokens": 18.63,
"estimatedMillionTokens": 14.61,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 56.33,
"estimatedMillionTokens": 42.94,
"basis": "list-price-credit",
"confidence": "medium"
},
"muse spark 1.3": {
"estimatedMillionTokens": 37.11,
"estimatedMillionTokens": 27.83,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -129,37 +129,37 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 56.63,
"estimatedMillionTokens": 46.24,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 157.75,
"estimatedMillionTokens": 140.98,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 14.24,
"estimatedMillionTokens": 10.29,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 24.53,
"estimatedMillionTokens": 18.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude sonnet 5": {
"estimatedMillionTokens": 61.31,
"estimatedMillionTokens": 47.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 30.66,
"estimatedMillionTokens": 23.55,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 168.99,
"estimatedMillionTokens": 128.82,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -195,32 +195,32 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 188.76,
"estimatedMillionTokens": 154.13,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 525.82,
"estimatedMillionTokens": 469.93,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 47.46,
"estimatedMillionTokens": 34.29,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 81.75,
"estimatedMillionTokens": 62.8,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 563.29,
"estimatedMillionTokens": 429.39,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 40.88,
"estimatedMillionTokens": 31.4,
"basis": "list-price-credit",
"confidence": "medium"
}
+20 -20
View File
@@ -48,42 +48,42 @@
],
"perModelTokenBudgets": {
"claude sonnet 5": {
"estimatedMillionTokens": 3.07,
"estimatedMillionTokens": 2.36,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude haiku 4.5": {
"estimatedMillionTokens": 6.13,
"estimatedMillionTokens": 4.71,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.4": {
"estimatedMillionTokens": 2.24,
"estimatedMillionTokens": 1.75,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.3-codex": {
"estimatedMillionTokens": 2.71,
"estimatedMillionTokens": 2.2,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.5 flash": {
"estimatedMillionTokens": 3.73,
"estimatedMillionTokens": 2.92,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -121,37 +121,37 @@
],
"perModelTokenBudgets": {
"claude sonnet 5": {
"estimatedMillionTokens": 9.2,
"estimatedMillionTokens": 7.07,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.3-codex": {
"estimatedMillionTokens": 8.14,
"estimatedMillionTokens": 6.6,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 24.53,
"estimatedMillionTokens": 18.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 3.68,
"estimatedMillionTokens": 2.83,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 2.14,
"estimatedMillionTokens": 1.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.4 nano": {
"estimatedMillionTokens": 82.0,
"estimatedMillionTokens": 64.62,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 1.84,
"estimatedMillionTokens": 1.41,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -186,27 +186,27 @@
],
"perModelTokenBudgets": {
"gpt-5.3-codex": {
"estimatedMillionTokens": 27.12,
"estimatedMillionTokens": 21.98,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 81.75,
"estimatedMillionTokens": 62.8,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 12.26,
"estimatedMillionTokens": 9.42,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 7.12,
"estimatedMillionTokens": 5.14,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 6.13,
"estimatedMillionTokens": 4.71,
"basis": "list-price-credit",
"confidence": "medium"
}
+24 -24
View File
@@ -42,17 +42,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -62,17 +62,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 3.06,
"estimatedMillionTokens": 2.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 0.61,
"estimatedMillionTokens": 0.57,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 50.91,
"estimatedMillionTokens": 46.07,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -115,17 +115,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -135,17 +135,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 36.76,
"estimatedMillionTokens": 34.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 7.35,
"estimatedMillionTokens": 6.82,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 610.87,
"estimatedMillionTokens": 552.84,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -187,17 +187,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -207,17 +207,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 183.8,
"estimatedMillionTokens": 170.5,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 36.76,
"estimatedMillionTokens": 34.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 3054.33,
"estimatedMillionTokens": 2764.2,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -259,17 +259,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -279,17 +279,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 735.22,
"estimatedMillionTokens": 682.01,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 147.04,
"estimatedMillionTokens": 136.4,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 12217.32,
"estimatedMillionTokens": 11056.82,
"basis": "list-price-credit",
"confidence": "medium"
}
+4 -4
View File
@@ -35,7 +35,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 170.99,
"estimatedMillionTokens": 179.92,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -72,7 +72,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 427.48,
"estimatedMillionTokens": 449.79,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -109,7 +109,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 1139.95,
"estimatedMillionTokens": 1199.44,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -146,7 +146,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 2279.9,
"estimatedMillionTokens": 2398.88,
"basis": "list-price-credit",
"confidence": "low"
}
+4 -4
View File
@@ -22,7 +22,7 @@
"confidence": "medium"
},
"llama 4 scout": {
"estimatedMillionTokens": 30.51,
"estimatedMillionTokens": 30.49,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -58,12 +58,12 @@
"confidence": "medium"
},
"llama 4 scout": {
"estimatedMillionTokens": 152.54,
"estimatedMillionTokens": 152.46,
"basis": "list-price-credit",
"confidence": "medium"
},
"llama 4 maverick": {
"estimatedMillionTokens": 34.2,
"estimatedMillionTokens": 33.17,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -98,7 +98,7 @@
"confidence": "medium"
},
"llama 4 maverick": {
"estimatedMillionTokens": 136.78,
"estimatedMillionTokens": 132.69,
"basis": "list-price-credit",
"confidence": "medium"
}
+1 -1
View File
@@ -103,7 +103,7 @@
},
"perModelTokenBudgets": {
"gpt-5.6 terra": {
"estimatedMillionTokens": 91.13,
"estimatedMillionTokens": 93.04,
"basis": "list-price-credit",
"confidence": "medium"
},
+1 -1
View File
@@ -186,7 +186,7 @@ def scale_estimate(base, factor):
_CWP = _ESTIMATE_CONSTANTS["cacheWritePremium"]
_IN_TOK = _ESTIMATE_CONSTANTS["agentRequest"]["inputTokens"]
_OUT_TOK = _ESTIMATE_CONSTANTS["agentRequest"]["outputTokens"]
_PER_MODEL_CACHE_RATE = 0.95
_PER_MODEL_CACHE_RATE = _ESTIMATE_CONSTANTS["defaultCacheRate"]
_PER_MODEL_WRITE_SHARE = 0.1
+16
View File
@@ -314,3 +314,19 @@ windsurf (Devin quota mechanism unpublished), plus any pseudo-model slot
`npm test` 100/100 (added per-model + fallback cases);
`npm run build` clean; data regenerated via `python3 data/generate_plans.py`
and `node scripts/build-data.mjs`.
## Adversarial Review Recalibration (2026-09-19)
### Key Audit Findings & Mathematical Fixes
1. **Cache Rate Harmonization**: Eliminated `_PER_MODEL_CACHE_RATE = 0.95` in `data/generate_plans.py` which was artificially doubling plan token capacity. Plan generation now enforces the shared `defaultCacheRate: 0.75` from `data/estimate-constants.json` across all credit pools, reserving 95% caching only for providers with documented guarantees (Z.ai).
2. **Model-Aware Token Resolution in `TokenTranslator`**: `TokenTranslator.tsx` now calls `resolveTierModelBudget(currentTier, comparisonModel.name, comparisonModel.id)` rather than comparing direct API yields against monolithic tier scalars. Relabeled linear request counts to "Normalized 21K Turns".
3. **Multi-Model Pool Drain Engine Fix**: Fixed `calculatePoolDrain` in `src/lib/pricing.ts` to support `perModelTokenBudgets` alongside `modelAllowances`. Removed the `Math.max(monthlyPrice, ...)` flaw that was artificially inflating pool capacity for low-cost models.
4. **Stack Candidates Model-Aware Ranking**: `buildStackCandidates` now scores and scales candidates using the matched model's resolved token capacity (`resolveTierModelBudget`), preventing Dangerous Dave and Mix & Match from assigning inaccurate token yields to models.
5. **Workflow Calculator Model Alignment**: `WorkflowCalculator.tsx` now resolves plan capacity using `resolveTierModelBudget` for the active primary model in the workflow and verifies fit against `poolDrain.overageCost === 0`.
6. **Subsystem Policy Reconciliation**: Updated Cursor Pro evidence quotes and reasoning token descriptions across `src/lib/throttle-profiles.ts` and `src/lib/reasoning.ts` to reflect the dual-pool architecture (Cursor Models pool vs Other Models at API rates).
### Verification
- `npm run lint` — 0 errors, 0 warnings (72 files).
- `npm run validate-data` — 33 plans and 33 models pass all schema invariants.
- `npm test` — 102/102 tests pass (8 suites, including new tests for model-aware stack candidates and pool drainage).
- `npm run build` — Clean production build with Vite + TypeScript.
+1 -1
View File
@@ -1,3 +1,3 @@
{
"timestamp": "2026-09-20T01:02:28.988Z"
"timestamp": "2026-09-20T01:25:36.207Z"
}
+123 -123
View File
@@ -89,7 +89,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 23.86,
"estimatedMillionTokens": 23.5,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -99,17 +99,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 40.27,
"estimatedMillionTokens": 43.55,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 25.71,
"estimatedMillionTokens": 27.03,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 49.8,
"estimatedMillionTokens": 52.71,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -151,7 +151,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 53.56,
"estimatedMillionTokens": 52.74,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -161,17 +161,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 90.38,
"estimatedMillionTokens": 97.75,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 57.71,
"estimatedMillionTokens": 60.66,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 111.78,
"estimatedMillionTokens": 118.31,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -213,7 +213,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 95.45,
"estimatedMillionTokens": 94,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -223,17 +223,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 161.07,
"estimatedMillionTokens": 174.21,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 102.86,
"estimatedMillionTokens": 108.12,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 199.21,
"estimatedMillionTokens": 210.84,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -275,7 +275,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 381.29,
"estimatedMillionTokens": 375.48,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -285,17 +285,17 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 643.4,
"estimatedMillionTokens": 695.87,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 410.86,
"estimatedMillionTokens": 431.86,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m2.5": {
"estimatedMillionTokens": 795.73,
"estimatedMillionTokens": 842.19,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -335,7 +335,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 55.68,
"estimatedMillionTokens": 54.83,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -345,12 +345,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 93.96,
"estimatedMillionTokens": 101.62,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 60,
"estimatedMillionTokens": 63.07,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -390,7 +390,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 222.2,
"estimatedMillionTokens": 218.81,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -400,12 +400,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 374.94,
"estimatedMillionTokens": 405.52,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 239.43,
"estimatedMillionTokens": 251.67,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -445,7 +445,7 @@
},
"perModelTokenBudgets": {
"qwen 3.7 plus": {
"estimatedMillionTokens": 555.76,
"estimatedMillionTokens": 547.29,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -455,12 +455,12 @@
"confidence": "medium"
},
"kimi k2.5": {
"estimatedMillionTokens": 937.81,
"estimatedMillionTokens": 1014.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5": {
"estimatedMillionTokens": 598.86,
"estimatedMillionTokens": 629.47,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -755,12 +755,12 @@
"confidence": "medium"
},
"dola-seed-2.0-lite": {
"estimatedMillionTokens": 126.51,
"estimatedMillionTokens": 123.03,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.3-flash": {
"estimatedMillionTokens": 197.69,
"estimatedMillionTokens": 193.98,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -770,7 +770,7 @@
"confidence": "medium"
},
"deepseek-v4-flash": {
"estimatedMillionTokens": 124.94,
"estimatedMillionTokens": 121.83,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -780,7 +780,7 @@
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 54.22,
"estimatedMillionTokens": 50.45,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -821,12 +821,12 @@
"confidence": "medium"
},
"dola-seed-2.0-lite": {
"estimatedMillionTokens": 632.55,
"estimatedMillionTokens": 615.15,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.3-flash": {
"estimatedMillionTokens": 988.45,
"estimatedMillionTokens": 969.9,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -841,7 +841,7 @@
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 271.09,
"estimatedMillionTokens": 252.27,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -954,7 +954,7 @@
"confidence": "low"
},
"claude fable 5.1": {
"estimatedMillionTokens": 6.96,
"estimatedMillionTokens": 6.55,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -1003,7 +1003,7 @@
"confidence": "low"
},
"claude fable 5.1": {
"estimatedMillionTokens": 27.86,
"estimatedMillionTokens": 26.2,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -1050,22 +1050,22 @@
},
"perModelTokenBudgets": {
"gpt-5.6 luna": {
"estimatedMillionTokens": 93.13,
"estimatedMillionTokens": 73.04,
"basis": "list-price-credit",
"confidence": "medium"
},
"grok 4.5": {
"estimatedMillionTokens": 9.44,
"estimatedMillionTokens": 7.71,
"basis": "list-price-credit",
"confidence": "medium"
},
"qwen 3.8 max": {
"estimatedMillionTokens": 12,
"estimatedMillionTokens": 8.94,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m3": {
"estimatedMillionTokens": 62.64,
"estimatedMillionTokens": 50.45,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1106,27 +1106,27 @@
},
"perModelTokenBudgets": {
"gpt-5.6 sol": {
"estimatedMillionTokens": 26.08,
"estimatedMillionTokens": 20.45,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.2": {
"estimatedMillionTokens": 104.51,
"estimatedMillionTokens": 82.01,
"basis": "list-price-credit",
"confidence": "medium"
},
"tencent hy3": {
"estimatedMillionTokens": 855.9,
"estimatedMillionTokens": 711,
"basis": "list-price-credit",
"confidence": "medium"
},
"qwen 3.8 27b": {
"estimatedMillionTokens": 287.67,
"estimatedMillionTokens": 231.5,
"basis": "list-price-credit",
"confidence": "medium"
},
"deepseek v4 flash": {
"estimatedMillionTokens": 1263.7,
"estimatedMillionTokens": 876.96,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1167,27 +1167,27 @@
},
"perModelTokenBudgets": {
"claude opus 4.8": {
"estimatedMillionTokens": 32.7,
"estimatedMillionTokens": 25.12,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 29.8,
"estimatedMillionTokens": 23.37,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini": {
"estimatedMillionTokens": 109,
"estimatedMillionTokens": 83.74,
"basis": "list-price-credit",
"confidence": "medium"
},
"glm-5.2": {
"estimatedMillionTokens": 119.45,
"estimatedMillionTokens": 93.72,
"basis": "list-price-credit",
"confidence": "medium"
},
"minimax m3": {
"estimatedMillionTokens": 501.12,
"estimatedMillionTokens": 403.6,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1326,47 +1326,47 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 18.88,
"estimatedMillionTokens": 15.41,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 52.58,
"estimatedMillionTokens": 46.99,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 4.75,
"estimatedMillionTokens": 3.43,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude sonnet 5": {
"estimatedMillionTokens": 20.44,
"estimatedMillionTokens": 15.7,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 10.22,
"estimatedMillionTokens": 7.85,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.1 pro": {
"estimatedMillionTokens": 18.63,
"estimatedMillionTokens": 14.61,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 56.33,
"estimatedMillionTokens": 42.94,
"basis": "list-price-credit",
"confidence": "medium"
},
"muse spark 1.3": {
"estimatedMillionTokens": 37.11,
"estimatedMillionTokens": 27.83,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1403,37 +1403,37 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 56.63,
"estimatedMillionTokens": 46.24,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 157.75,
"estimatedMillionTokens": 140.98,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 14.24,
"estimatedMillionTokens": 10.29,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 24.53,
"estimatedMillionTokens": 18.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude sonnet 5": {
"estimatedMillionTokens": 61.31,
"estimatedMillionTokens": 47.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.6 sol": {
"estimatedMillionTokens": 30.66,
"estimatedMillionTokens": 23.55,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 168.99,
"estimatedMillionTokens": 128.82,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1469,32 +1469,32 @@
],
"perModelTokenBudgets": {
"cursor grok 4.6": {
"estimatedMillionTokens": 188.76,
"estimatedMillionTokens": 154.13,
"basis": "list-price-credit",
"confidence": "medium"
},
"composer 2.5": {
"estimatedMillionTokens": 525.82,
"estimatedMillionTokens": 469.93,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 47.46,
"estimatedMillionTokens": 34.29,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 81.75,
"estimatedMillionTokens": 62.8,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 563.29,
"estimatedMillionTokens": 429.39,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 40.88,
"estimatedMillionTokens": 31.4,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1727,42 +1727,42 @@
],
"perModelTokenBudgets": {
"claude sonnet 5": {
"estimatedMillionTokens": 3.07,
"estimatedMillionTokens": 2.36,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude haiku 4.5": {
"estimatedMillionTokens": 6.13,
"estimatedMillionTokens": 4.71,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.4": {
"estimatedMillionTokens": 2.24,
"estimatedMillionTokens": 1.75,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.3-codex": {
"estimatedMillionTokens": 2.71,
"estimatedMillionTokens": 2.2,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.5 flash": {
"estimatedMillionTokens": 3.73,
"estimatedMillionTokens": 2.92,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 8.18,
"estimatedMillionTokens": 6.28,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1800,37 +1800,37 @@
],
"perModelTokenBudgets": {
"claude sonnet 5": {
"estimatedMillionTokens": 9.2,
"estimatedMillionTokens": 7.07,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.3-codex": {
"estimatedMillionTokens": 8.14,
"estimatedMillionTokens": 6.6,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 24.53,
"estimatedMillionTokens": 18.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 3.68,
"estimatedMillionTokens": 2.83,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 2.14,
"estimatedMillionTokens": 1.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-5.4 nano": {
"estimatedMillionTokens": 82,
"estimatedMillionTokens": 64.62,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 1.84,
"estimatedMillionTokens": 1.41,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -1865,27 +1865,27 @@
],
"perModelTokenBudgets": {
"gpt-5.3-codex": {
"estimatedMillionTokens": 27.12,
"estimatedMillionTokens": 21.98,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.8 flash": {
"estimatedMillionTokens": 81.75,
"estimatedMillionTokens": 62.8,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 5": {
"estimatedMillionTokens": 12.26,
"estimatedMillionTokens": 9.42,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude fable 5.1": {
"estimatedMillionTokens": 7.12,
"estimatedMillionTokens": 5.14,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-6 astra": {
"estimatedMillionTokens": 6.13,
"estimatedMillionTokens": 4.71,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -2138,17 +2138,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 77.88,
"estimatedMillionTokens": 77.96,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -2158,17 +2158,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 3.06,
"estimatedMillionTokens": 2.84,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 0.61,
"estimatedMillionTokens": 0.57,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 50.91,
"estimatedMillionTokens": 46.07,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -2211,17 +2211,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 934.56,
"estimatedMillionTokens": 935.58,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -2231,17 +2231,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 36.76,
"estimatedMillionTokens": 34.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 7.35,
"estimatedMillionTokens": 6.82,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 610.87,
"estimatedMillionTokens": 552.84,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -2283,17 +2283,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 4672.81,
"estimatedMillionTokens": 4677.88,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -2303,17 +2303,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 183.8,
"estimatedMillionTokens": 170.5,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 36.76,
"estimatedMillionTokens": 34.1,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 3054.33,
"estimatedMillionTokens": 2764.2,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -2355,17 +2355,17 @@
},
"perModelTokenBudgets": {
"gemini 3.8 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.7 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
"gemini 3.6 flash": {
"estimatedMillionTokens": 18691.24,
"estimatedMillionTokens": 18711.54,
"basis": "list-price-credit",
"confidence": "medium"
},
@@ -2375,17 +2375,17 @@
"confidence": "medium"
},
"claude sonnet 4.6": {
"estimatedMillionTokens": 735.22,
"estimatedMillionTokens": 682.01,
"basis": "list-price-credit",
"confidence": "medium"
},
"claude opus 4.6": {
"estimatedMillionTokens": 147.04,
"estimatedMillionTokens": 136.4,
"basis": "list-price-credit",
"confidence": "medium"
},
"gpt-oss-120b": {
"estimatedMillionTokens": 12217.32,
"estimatedMillionTokens": 11056.82,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -2640,7 +2640,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 170.99,
"estimatedMillionTokens": 179.92,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -2677,7 +2677,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 427.48,
"estimatedMillionTokens": 449.79,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -2714,7 +2714,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 1139.95,
"estimatedMillionTokens": 1199.44,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -2751,7 +2751,7 @@
"confidence": "low"
},
"k2.7 code": {
"estimatedMillionTokens": 2279.9,
"estimatedMillionTokens": 2398.88,
"basis": "list-price-credit",
"confidence": "low"
}
@@ -3231,7 +3231,7 @@
"confidence": "medium"
},
"llama 4 scout": {
"estimatedMillionTokens": 30.51,
"estimatedMillionTokens": 30.49,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -3267,12 +3267,12 @@
"confidence": "medium"
},
"llama 4 scout": {
"estimatedMillionTokens": 152.54,
"estimatedMillionTokens": 152.46,
"basis": "list-price-credit",
"confidence": "medium"
},
"llama 4 maverick": {
"estimatedMillionTokens": 34.2,
"estimatedMillionTokens": 33.17,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -3307,7 +3307,7 @@
"confidence": "medium"
},
"llama 4 maverick": {
"estimatedMillionTokens": 136.78,
"estimatedMillionTokens": 132.69,
"basis": "list-price-credit",
"confidence": "medium"
}
@@ -3848,7 +3848,7 @@
},
"perModelTokenBudgets": {
"gpt-5.6 terra": {
"estimatedMillionTokens": 91.13,
"estimatedMillionTokens": 93.04,
"basis": "list-price-credit",
"confidence": "medium"
},
+9 -7
View File
@@ -1,7 +1,7 @@
import { useState, useMemo } from 'react';
import { useSearchParams } from 'react-router-dom';
import type { CodingPlan, NormalizedModel, CacheRate, WorkloadItem } from '../../lib/types';
import { getEffectiveCacheMultiplier, calculatePoolDrain, QUALITY } from '../../lib/pricing';
import { getEffectiveCacheMultiplier, calculatePoolDrain, resolveTierModelBudget, QUALITY } from '../../lib/pricing';
import { DEFAULT_CACHE_RATE } from '../../lib/estimate-constants';
import {
Workflow,
@@ -330,19 +330,21 @@ export function WorkflowCalculator({ models, plans }: WorkflowCalculatorProps) {
.filter(t => t.monthlyPrice !== null && t.monthlyPrice > 0 && t.estimatedTokenBudget)
.map(tier => {
const tb = tier.estimatedTokenBudget;
const conservative = tb ? tb.estimatedMillionTokens : 0;
const optimistic = tb ? (tb.optimisticEstimate ?? conservative) : 0;
const midpoint = tb ? (tb.midpointEstimate ?? conservative) : 0;
const primaryItem = workloadItems[0];
const resolved = resolveTierModelBudget(tier, primaryItem?.modelName, primaryItem?.modelId);
const conservative = resolved.tokens > 0 ? resolved.tokens : (tb ? tb.estimatedMillionTokens : 0);
const optimistic = resolved.tokens > 0 ? (resolved.optimistic || resolved.tokens) : (tb ? (tb.optimisticEstimate ?? conservative) : 0);
const midpoint = resolved.tokens > 0 ? (resolved.midpoint || resolved.tokens) : (tb ? (tb.midpointEstimate ?? conservative) : 0);
const basis =
estimateBasis === 'optimistic' ? optimistic :
estimateBasis === 'midpoint' ? midpoint :
conservative;
const caps = { basis, optimistic, conservative };
const fits = caps.basis >= requiredTokens;
const borderline = !fits && caps.optimistic > caps.basis && caps.optimistic >= requiredTokens;
const poolDrain = calculatePoolDrain(plan, tier, workloadItems, estimateBasis);
const fits = poolDrain.coverageType !== 'none' && poolDrain.overageCost === 0 && (caps.basis >= requiredTokens || poolDrain.coveredDirectCost >= poolDrain.totalDirectCost);
const borderline = !fits && poolDrain.coverageType !== 'none' && (caps.optimistic >= requiredTokens || (caps.optimistic > caps.basis && poolDrain.overageCost < poolDrain.totalDirectCost * 0.25));
const dailyCapacity = (caps.basis * 1e6) / 30;
const windowRisk = dailyDemand > dailyCapacity;
const poolDrain = calculatePoolDrain(plan, tier, workloadItems, estimateBasis);
return {
planId: plan.id,
+6 -3
View File
@@ -1,6 +1,6 @@
import { useState, useMemo } from 'react';
import type { CodingPlan, NormalizedModel, CacheRate } from '../../lib/types';
import { formatMillionTokens, getProviderColor, calculateAgentRequestCost, matchesPlanModel, QUALITY } from '../../lib/pricing';
import { formatMillionTokens, getProviderColor, calculateAgentRequestCost, matchesPlanModel, resolveTierModelBudget, QUALITY } from '../../lib/pricing';
import { DEFAULT_CACHE_RATE, STANDARD_AGENT_REQUEST_TOKENS } from '../../lib/estimate-constants';
import { ArrowRight, Sparkles, AlertCircle, Layers, CheckCircle2, HelpCircle, Info, Database, TrendingUp, ExternalLink } from 'lucide-react';
@@ -117,7 +117,6 @@ export function TokenTranslator({ plans, models }: TokenTranslatorProps) {
// Compute Arbitrage summary with like-for-like quality matching
const arbitrageInsight = useMemo(() => {
if (!currentTier?.estimatedTokenBudget || displayModels.length === 0) return null;
const planTokens = currentTier.estimatedTokenBudget.estimatedMillionTokens;
// Quality-matched selection:
// 1. Check if basisModel is documented in estimateMeta
@@ -140,6 +139,10 @@ export function TokenTranslator({ plans, models }: TokenTranslatorProps) {
)[0] || displayModels[0];
}
// Resolve tier token capacity model-specifically for the comparison model
const resolved = resolveTierModelBudget(currentTier, comparisonModel.name, comparisonModel.id);
const planTokens = resolved.tokens > 0 ? resolved.tokens : currentTier.estimatedTokenBudget.estimatedMillionTokens;
const apiTokens = comparisonModel.affordableTokens;
if (apiTokens >= planTokens * 1.25) {
@@ -565,7 +568,7 @@ export function TokenTranslator({ plans, models }: TokenTranslatorProps) {
{formatMillionTokens(m.affordableTokens)}
</div>
<div className="text-[11px] text-text-muted flex justify-between mt-0.5 font-medium">
<span>~{Math.round(m.approximateRequests).toLocaleString()} reqs</span>
<span>~{Math.round(m.approximateRequests).toLocaleString()} turns (21k)</span>
<span>tokens/mo</span>
</div>
</div>
+49
View File
@@ -525,5 +525,54 @@ describe('Adversarial Edge Cases & Guardrails', () => {
expect(calculateBudgetResults([model()], NaN)).toEqual([]);
expect(calculateBudgetResults([model()], -10)).toEqual([]);
});
it('buildStackCandidates assigns model-specific token budget when perModelTokenBudgets exists', () => {
const testTier = tier({
name: 'Pro',
monthlyPrice: 20,
models: ['Claude Sonnet 5', 'Claude Opus 5'],
estimatedTokenBudget: { estimatedMillionTokens: 10, assumptions: 'flat scalar' },
perModelTokenBudgets: {
'claude sonnet 5': { estimatedMillionTokens: 25, basis: 'list-price-credit' },
'claude opus 5': { estimatedMillionTokens: 5, basis: 'list-price-credit' },
},
});
const testPlan = plan({ id: 'test-plan', name: 'Test Plan', tiers: [testTier] });
const sonnetModel = model({
id: 'anthropic/claude-sonnet-5',
name: 'Claude Sonnet 5',
benchmarks: { codingIndex: 85, intelligenceIndex: null, agenticIndex: null, valueScore: null },
});
const candidates = buildStackCandidates([sonnetModel], [testPlan], 'all');
expect(candidates.length).toBe(1);
expect(candidates[0].modelName).toBe('Claude Sonnet 5');
// Tokens must be the resolved 25M, not the flat 10M
expect(candidates[0].tokens).toBe(25);
});
it('calculatePoolDrain uses perModelTokenBudgets for multi-model drainage', () => {
const testTier = tier({
name: 'Pro',
monthlyPrice: 20,
models: ['Claude Sonnet', 'Gemini Flash'],
estimatedTokenBudget: { estimatedMillionTokens: 10, assumptions: 'flat scalar' },
perModelTokenBudgets: {
'claude sonnet': { estimatedMillionTokens: 10, basis: 'list-price-credit' },
'gemini flash': { estimatedMillionTokens: 50, basis: 'list-price-credit' },
},
});
const testPlan = plan({ id: 'test-plan', name: 'Test Plan', tiers: [testTier] });
const workload = [
{ modelId: 'gemini-flash', modelName: 'Gemini Flash', share: 0.5, tokensMillion: 25, costPpu: 5 }, // 25M of 50M = 50%
{ modelId: 'claude-sonnet', modelName: 'Claude Sonnet', share: 0.5, tokensMillion: 5, costPpu: 10 }, // 5M of 10M = 50%
];
const result = calculatePoolDrain(testPlan, testTier, workload);
expect(result.coverageType).toBe('full');
expect(result.isCapped).toBe(false);
expect(result.overageCost).toBe(0);
expect(result.poolUtilizedPercent).toBe(100);
});
});
+33 -5
View File
@@ -621,7 +621,7 @@ export function buildStackCandidates(
const candidates: StackCandidate[] = [];
for (const plan of plans) {
let best: { tier: PlanTier; modelName: string | null; modelId: string | null; codingIndex: number | null; score: number } | null = null;
let best: { tier: PlanTier; modelName: string | null; modelId: string | null; codingIndex: number | null; tokens: number; score: number } | null = null;
for (const tier of plan.tiers || []) {
if (tier.monthlyPrice === null || tier.monthlyPrice <= 0) continue;
@@ -632,17 +632,23 @@ export function buildStackCandidates(
if (lab !== 'all' && !planLabs.includes(lab)) continue;
let match: NormalizedModel | null = null;
let matchedPlanModelName: string | null = null;
for (const planModelName of tier.models || []) {
if (EXCLUDED_STACK_PATTERNS.some(pat => planModelName.toLowerCase().includes(pat))) continue;
const found = cleanModels.find(m => matchesPlanModel(planModelName, m));
if (found && (!match || (found.benchmarks?.codingIndex || 0) > (match.benchmarks?.codingIndex || 0))) {
match = found;
matchedPlanModelName = planModelName;
}
}
// Resolve model-specific token budget when available; fall back to tier baseline
const resolved = resolveTierModelBudget(tier, match ? match.name : null, match ? match.id : null, matchedPlanModelName);
const effectiveTokens = resolved.tokens > 0 ? resolved.tokens : baseTokens;
// Rank tiers by tokens-per-dollar; a small 10% preference for tiers with
// a benchmark-matched model breaks near-ties without overriding value.
const tokensPerDollar = baseTokens / (tier.monthlyPrice as number);
const tokensPerDollar = effectiveTokens / (tier.monthlyPrice as number);
const score = tokensPerDollar * (match ? 1.0 : 0.9);
if (!best || score > best.score) {
@@ -651,6 +657,7 @@ export function buildStackCandidates(
modelName: match ? match.name : (tier.models?.[0] || plan.name),
modelId: match ? match.id : null,
codingIndex: match?.benchmarks?.codingIndex ?? null,
tokens: effectiveTokens,
score,
};
}
@@ -658,7 +665,7 @@ export function buildStackCandidates(
if (best) {
const price = best.tier.monthlyPrice as number;
const tokens = best.tier.estimatedTokenBudget!.estimatedMillionTokens;
const tokens = best.tokens;
const stackingPolicy = plan.stackingPolicy ?? 'unknown';
candidates.push({
planId: plan.id,
@@ -670,7 +677,7 @@ export function buildStackCandidates(
modelId: best.modelId,
price,
tokens,
requests: tierRawRequests(best.tier),
requests: tierRawRequests(best.tier, tokens),
codingIndex: best.codingIndex,
lab: detectPlanLabs(plan, best.tier)[0] || 'all',
stackingPolicy,
@@ -905,6 +912,13 @@ export function calculatePoolDrain(
);
if (matchKey) return true;
}
if (tier.perModelTokenBudgets) {
const matchKey = Object.keys(tier.perModelTokenBudgets).find(k =>
item.modelId.toLowerCase().includes(k.toLowerCase()) ||
item.modelName.toLowerCase().includes(k.toLowerCase())
);
if (matchKey) return true;
}
if (tier.models && tier.models.length > 0) {
return tier.models.some(planModelName =>
matchesPlanModel(planModelName, { id: item.modelId, name: item.modelName } as NormalizedModel)
@@ -947,8 +961,22 @@ export function calculatePoolDrain(
}
if (allowance <= 0) {
const resolved = resolveTierModelBudget(tier, item.modelName, item.modelId);
const modelTokens =
estimateBasis === 'optimistic'
? (resolved.optimistic || resolved.tokens)
: estimateBasis === 'midpoint'
? (resolved.midpoint || resolved.tokens)
: resolved.tokens;
const effectiveTokens = modelTokens > 0 ? modelTokens : budgetTokens;
const impliedRatePerMillion = item.tokensMillion > 0 ? item.costPpu / item.tokensMillion : 1.0;
allowance = Math.max(monthlyPrice, budgetTokens * impliedRatePerMillion);
if (effectiveTokens > 0) {
allowance = effectiveTokens * impliedRatePerMillion;
} else {
allowance = monthlyPrice;
}
}
}
+4 -4
View File
@@ -91,8 +91,8 @@ export const PLAN_ABSORPTION_POLICIES: PlanAbsorptionPolicy[] = [
monthlyPrice: 20,
absorptionType: 'full-absorption',
absorptionScore: 95,
policySummary: 'Counts 1 fast request regardless of reasoning tokens. Absorbs up to $0.35/turn of compute.',
evidenceQuote: 'Requests are deducted on a per-interaction basis. Reasoning tokens generated by Claude or o3 are absorbed within the fast request allowance.',
policySummary: 'Full absorption for native Cursor Models pool (Composer/Grok); third-party models drain against Other Models pool at API rates.',
evidenceQuote: 'Cursor Models pool absorbs reasoning tokens natively. Third-party frontier models drain against the Other Models pool at standard token rates.',
url: 'https://cursor.com/docs/account/pricing',
},
{
@@ -102,8 +102,8 @@ export const PLAN_ABSORPTION_POLICIES: PlanAbsorptionPolicy[] = [
monthlyPrice: 400,
absorptionType: 'full-absorption',
absorptionScore: 98,
policySummary: '20x fast pool with full absorption of extended thinking tokens.',
evidenceQuote: '20x Pro pool with priority queue allocation across frontier reasoning models.',
policySummary: '20x Pro pool with native absorption on Cursor Models and expanded third-party API allowance.',
evidenceQuote: 'Maximum pool capacity across Cursor proprietary models and expanded third-party frontier allowance.',
url: 'https://cursor.com/docs/account/pricing',
},
{
+2 -2
View File
@@ -37,7 +37,7 @@ export const THROTTLE_PROFILES: ThrottleProfile[] = [
monthlyFastRequests: 500,
exhaustionBehavior: 'slow-queue',
slowQueueDelaySec: 30, // Slow pool typically introduces 20-60s queue wait during peak hours
evidenceQuote: '500 fast requests per month. Once exhausted, falls back to the slow queue with variable queue latency.',
evidenceQuote: 'Cursor Models pool + Other Models pool (third-party at API rates). Priority queue allocation with slow queue fallback on proprietary models.',
url: 'https://cursor.com/docs/account/pricing',
},
{
@@ -52,7 +52,7 @@ export const THROTTLE_PROFILES: ThrottleProfile[] = [
monthlyFastRequests: 10000, // 20x Pro pool
exhaustionBehavior: 'slow-queue',
slowQueueDelaySec: 10,
evidenceQuote: '20x Pro pool with priority queue allocation and higher concurrent composer tasks.',
evidenceQuote: '20x Pro pool with priority queue allocation across Cursor Models and expanded third-party API allowance.',
url: 'https://cursor.com/docs/account/pricing',
},
{