tokentracker-cli 0.96.2 → 0.96.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +34 -25
- package/README.ja.md +38 -27
- package/README.ko.md +39 -28
- package/README.md +36 -28
- package/README.zh-CN.md +36 -25
- package/dashboard/dist/assets/{AchievementBadge-CgEitoX1.js → AchievementBadge-CCcvmz6R.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-dnnea0JH.js → AchievementsPage-C5jdktOK.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-CJqG0UP7.js → AchievementsSection-BFMtUzn1.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-BLV6SJoI.js → BadgeDetailModal-Be8gM7tM.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-Cm78yEbz.js → BotAnimated-CXTGR71z.js} +1 -1
- package/dashboard/dist/assets/{Card-IPGSYT6O.js → Card-CsUsp3CV.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-04w1U1sm.js → ClawdAnimated-BEjpZjEE.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-gSSa1V_s.js → CommandPalette-CHc_Z1r8.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-CICwUz14.js → CommunityStatsModal-Gs6kZ_Mp.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-DaWC0cY7.js → ConfirmModal-niHkpv2O.js} +1 -1
- package/dashboard/dist/assets/{Controls-BDihA03F.js → Controls-X2Z1UNUx.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-B66s3Exi.js +1 -0
- package/dashboard/dist/assets/{DevicePage-BPpo_eiY.js → DevicePage-DQdLdEI8.js} +1 -1
- package/dashboard/dist/assets/DialogClose-CCUjTxl8.js +1 -0
- package/dashboard/dist/assets/DialogDescription-CjMjYG3N.js +1 -0
- package/dashboard/dist/assets/DialogTitle-CgkUGAag.js +1 -0
- package/dashboard/dist/assets/{FadeIn-DmI9PRLa.js → FadeIn-D4QD1bPo.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-CBO4cY7i.js → HeaderGithubStar-D0my-Z3a.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-CPFGhi9K.js → HoverTooltip-nSWgrKlK.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Do7w_6z6.js → IpCheckPage-4hfqHAgi.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-at_Ti1ZE.js → LandingPage-wIc4tVRI.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-BH1cnKPp.js → LeaderboardAvatar-DGlN8Vy8.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-Cd30aXwL.js → LeaderboardPage-CybuzE87.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-CVsti_HN.js → LeaderboardProfileModal-D9la3tNd.js} +4 -4
- package/dashboard/dist/assets/{LeaderboardProfilePage-BfSpDM9e.js → LeaderboardProfilePage-gxXSeJYb.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-CZH3G54Y.js +8 -0
- package/dashboard/dist/assets/{LocalOnlyNotice-9-vRgsdn.js → LocalOnlyNotice-Ckc7zohC.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-DM_ZdFNl.js → LoginCard-BqeRHqWK.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-BaNMznwh.js → LoginModal-BjH6aIBG.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-BMMthUf4.js → LoginPage-BOyPLNU3.js} +1 -1
- package/dashboard/dist/assets/PetPage-BXRXG40D.js +1 -0
- package/dashboard/dist/assets/PopoverPopup-Dad1ZYVd.js +1 -0
- package/dashboard/dist/assets/ProviderIcon-BDmrNJSl.js +1 -0
- package/dashboard/dist/assets/{ResetPasswordPage-Ca4SULSV.js → ResetPasswordPage-CZpE6qfa.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-Bbsn-qvZ.js → SegmentedControl-CE1hrQFi.js} +1 -1
- package/dashboard/dist/assets/Select-YVj7u6Nv.js +1 -0
- package/dashboard/dist/assets/SelectItemText-BMYGgQ3o.js +1 -0
- package/dashboard/dist/assets/{ServiceStatusPage-BPS8KJ3a.js → ServiceStatusPage-HehjDbZg.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-C1yt3TMZ.js → SessionsPage-Chvu4YqZ.js} +2 -2
- package/dashboard/dist/assets/SettingsPage-BXjS7u9_.js +2 -0
- package/dashboard/dist/assets/SkillsPage-q3Rjlj9h.js +1 -0
- package/dashboard/dist/assets/{TokenGalaxy-DKvbJbnv.js → TokenGalaxy-BqZyj82r.js} +1 -1
- package/dashboard/dist/assets/ToolbarRootContext-Ch8ueI_C.js +1 -0
- package/dashboard/dist/assets/{TrendMonitor-YF5C_-L1.js → TrendMonitor-C2aTL9p1.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-BKV3DgXg.js → WidgetsPage-DYaIai8j.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-s4IRoLf7.js → WrappedPage-51B0v-Sr.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-CvMMIjhi.css → __vite-browser-external-5P7me0Qq.css} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-Cp7dNuCm.js +45 -0
- package/dashboard/dist/assets/{agent-logos-Hbt-wyl2.js → agent-logos-DXrPSAdX.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-KeIpKlw3.js → arrow-up-right-BFkf7l0U.js} +1 -1
- package/dashboard/dist/assets/{check-_QKyY1v_.js → check--N8wmgIJ.js} +1 -1
- package/dashboard/dist/assets/composite-zF5Pj94e.js +1 -0
- package/dashboard/dist/assets/{copy-DpLM3QMD.js → copy-BG0JMr6A.js} +1 -1
- package/dashboard/dist/assets/{download-C4NX-JnW.js → download-CPFJf-Sf.js} +1 -1
- package/dashboard/dist/assets/{external-link-CG-7FcOF.js → external-link-D2yF0kgP.js} +1 -1
- package/dashboard/dist/assets/{flame-CkWid7Ji.js → flame-l460AFx9.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CbwWhioZ.js → format-tokens-DKO4ljuH.js} +1 -1
- package/dashboard/dist/assets/{icons-BZq17rU3.js → icons-RoxRGkz4.js} +1 -1
- package/dashboard/dist/assets/{index-CR9tDiiC.js → index--ouT5L4N.js} +1 -1
- package/dashboard/dist/assets/{index-DDGLE0dz.js → index-DhyLCvvv.js} +1 -1
- package/dashboard/dist/assets/{index-CSwEiUn4.js → index-PTJ4368-.js} +1 -1
- package/dashboard/dist/assets/{info-mkeRjzqc.js → info-DNWMO4Ca.js} +1 -1
- package/dashboard/dist/assets/{link-2-BjMw8csC.js → link-2-DzWXAz1h.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-cGWOJnWn.js → loader-circle-BzGMqXNu.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-Cg_S73tD.js → maximize-2-Dkpyk4x3.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-DNxTWxId.js → modifiers.esm-lggHUQpW.js} +1 -1
- package/dashboard/dist/assets/module-DUSXqJtA.js +3 -0
- package/dashboard/dist/assets/{monitor-smartphone-BvE9Tt2U.js → monitor-smartphone-Ck0-gz9l.js} +1 -1
- package/dashboard/dist/assets/{plus-BC2wdPRr.js → plus-qTJpnn43.js} +1 -1
- package/dashboard/dist/assets/provider-display-psY26qmp.js +42 -0
- package/dashboard/dist/assets/{react-D0kcslTz.js → react-CYS24KmX.js} +1 -1
- package/dashboard/dist/assets/{search-BuBNF3E3.js → search-CUzE6zxr.js} +1 -1
- package/dashboard/dist/assets/{skills-api-DxAN5pNx.js → skills-api-D9SzxPFG.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-DoqMcEX-.js → sortable.esm-Bl2hAUyR.js} +1 -1
- package/dashboard/dist/assets/store-mHSJAJtE.js +1 -0
- package/dashboard/dist/assets/{terminal-COWFUJdU.js → terminal-BlQNEvn1.js} +1 -1
- package/dashboard/dist/assets/{trash-2-Cqjki3RI.js → trash-CHdgmOyk.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DsrlOPDM.js → use-community-stats-DUiCs91N.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-ryRFL2gx.js → use-latest-request-guard-ehXfkvuU.js} +1 -1
- package/dashboard/dist/assets/use-limits-display-prefs-CcwwQ0Fq.js +1 -0
- package/dashboard/dist/assets/{use-ordered-list-D-Q86R1b.js → use-ordered-list-CCOtI3Wa.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-CDlahPqe.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-CrNz45y7.js → use-session-efficiency-pref-CYRDpcc_.js} +1 -1
- package/dashboard/dist/assets/{use-transform-CoGM21px.js → use-transform-btLlTJpj.js} +1 -1
- package/dashboard/dist/assets/use-usage-limits-BGr5sR-c.js +1 -0
- package/dashboard/dist/assets/{useCurrency-CgCfDktb.js → useCurrency-CNutuEKd.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-QKtzCKTL.js → useTokenFormat-C0bAJFMC.js} +1 -1
- package/dashboard/dist/assets/{zap-CTIobzgU.js → zap-B2fbyjbc.js} +1 -1
- package/dashboard/dist/brand-logos/acode-dark.png +0 -0
- package/dashboard/dist/brand-logos/acode.png +0 -0
- package/dashboard/dist/brand-logos/devin.svg +6 -0
- package/dashboard/dist/index.html +20 -16
- package/dashboard/dist/ip-check.html +2 -2
- package/dashboard/dist/leaderboard.html +2 -2
- package/dashboard/dist/llms.txt +4 -2
- package/dashboard/dist/share.html +2 -2
- package/package.json +2 -2
- package/src/commands/init.js +114 -4
- package/src/commands/status.js +37 -0
- package/src/commands/sync.js +92 -10
- package/src/commands/uninstall.js +23 -0
- package/src/lib/codex-config.js +42 -0
- package/src/lib/devin-limits.js +249 -0
- package/src/lib/devin-usage.js +212 -0
- package/src/lib/local-api.js +19 -0
- package/src/lib/passive-mode.js +13 -1
- package/src/lib/pricing/curated-overrides.json +67 -1
- package/src/lib/pricing/index.js +5 -2
- package/src/lib/pricing/matcher.js +28 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +1310 -144
- package/src/lib/skills-manager.js +231 -30
- package/src/lib/subscriptions.js +70 -16
- package/src/lib/usage-limits.js +199 -49
- package/dashboard/dist/assets/DashboardPage-hV7wncKF.js +0 -1
- package/dashboard/dist/assets/DialogClose-C_dF-r3s.js +0 -1
- package/dashboard/dist/assets/DialogDescription-GClOSCaE.js +0 -1
- package/dashboard/dist/assets/DialogTitle-Buh_5688.js +0 -1
- package/dashboard/dist/assets/LimitsPage-_-BadDAj.js +0 -8
- package/dashboard/dist/assets/PetPage-Iq8Hswai.js +0 -1
- package/dashboard/dist/assets/PopoverPopup-DXr3JxVV.js +0 -1
- package/dashboard/dist/assets/ProviderIcon-sb2keSY2.js +0 -1
- package/dashboard/dist/assets/Select-vD-yj-qa.js +0 -1
- package/dashboard/dist/assets/SelectItemText-CRtFEuvg.js +0 -1
- package/dashboard/dist/assets/SettingsPage-CWVHrMer.js +0 -2
- package/dashboard/dist/assets/SkillsPage-DGWEH1xm.js +0 -1
- package/dashboard/dist/assets/ToolbarRootContext-D8yov1dW.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-_LUatzwU.js +0 -45
- package/dashboard/dist/assets/composite-BidfcMeb.js +0 -1
- package/dashboard/dist/assets/limits-providers-DRkcWQup.js +0 -1
- package/dashboard/dist/assets/module-xpSFyNBK.js +0 -3
- package/dashboard/dist/assets/provider-display-B7GggHQy.js +0 -42
- package/dashboard/dist/assets/store-Cg1HeUFM.js +0 -1
- package/dashboard/dist/assets/use-limits-display-prefs-DkSuu12m.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-D7NNqavo.js +0 -1
- package/dashboard/dist/assets/use-usage-limits-C_6L1sO5.js +0 -1
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"_meta": {
|
|
3
3
|
"note": "Curated price overrides. Always wins over LiteLLM. Two reasons to live here: (1) self-defined alias names that LiteLLM will never carry (kiro-*, hy3-*, composer-*, kimi-for-coding, free-tier OpenRouter routes); (2) prices we want to pin even if LiteLLM has the model (e.g. cache_write fields LiteLLM often omits). Units: USD per million tokens. Edit this file to override pricing without redeploying.",
|
|
4
4
|
"units": "usd_per_million_tokens",
|
|
5
|
-
"deepseek_v4_pricing_note": "Official DeepSeek V4 pricing verified on 2026-08-21. Peak hours are 01:00-04:00 and 06:00-10:00 UTC; all other hours are off-peak at half price. Exact entries store peak rates. computeRowCost applies the time-of-use discount from each row's UTC hour_start."
|
|
5
|
+
"deepseek_v4_pricing_note": "Official DeepSeek V4 pricing verified on 2026-08-21. Peak hours are 01:00-04:00 and 06:00-10:00 UTC; all other hours are off-peak at half price. Exact entries store peak rates. computeRowCost applies the time-of-use discount from each row's UTC hour_start.",
|
|
6
|
+
"iflytek_maas_pricing_note": "iFlytek MaaS inference prices supplied for AStudio on 2026-08-31. AStudio homepage: https://agent.xfyun.cn/. Official pricing source: https://maas.xfyun.cn/modelSquare. Source values are RMB per million tokens, converted at 7.2 RMB/USD, then rounded to two decimal places for billing. Models without a dedicated cache-hit price use the normal input rate; cache writes also use the normal input rate. iFlytek MaaS prices are source-scoped and do not inherit DeepSeek time-of-use discounts."
|
|
6
7
|
},
|
|
7
8
|
"exact": {
|
|
8
9
|
"claude-fable-5": {
|
|
@@ -420,6 +421,71 @@
|
|
|
420
421
|
"alias": {
|
|
421
422
|
"auto": "composer-1"
|
|
422
423
|
},
|
|
424
|
+
"source_exact": {
|
|
425
|
+
"acode": {
|
|
426
|
+
"xopglm53": { "input": 1.11, "output": 3.89, "cache_read": 0.28, "cache_write": 1.11 },
|
|
427
|
+
"xopdeepseekv4pro0813": { "input": 1.25, "output": 3.75, "cache_read": 0.04, "cache_write": 1.25 },
|
|
428
|
+
"xopdeepseekv4flash0731": { "input": 0.14, "output": 0.28, "cache_read": 0.03, "cache_write": 0.14 },
|
|
429
|
+
"xopkimik27code": { "input": 0.90, "output": 3.75, "cache_read": 0.90, "cache_write": 0.90 },
|
|
430
|
+
"xopglm52": { "input": 1.11, "output": 3.89, "cache_read": 0.28, "cache_write": 1.11 },
|
|
431
|
+
"xopdeepseekv4flash": { "input": 0.14, "output": 0.28, "cache_read": 0.03, "cache_write": 0.14 },
|
|
432
|
+
"xopkimik26": { "input": 0.90, "output": 3.75, "cache_read": 0.18, "cache_write": 0.90 },
|
|
433
|
+
"xopdeepseekv4pro": { "input": 1.67, "output": 3.33, "cache_read": 0.14, "cache_write": 1.67 },
|
|
434
|
+
"xopqwen36v35b": { "input": 0.15, "output": 0.90, "cache_read": 0.15, "cache_write": 0.15 },
|
|
435
|
+
"xophunyuan7bmt": { "input": 0.07, "output": 0.28, "cache_read": 0.07, "cache_write": 0.07 },
|
|
436
|
+
"xoppaddleocrv16": { "input": 0.00, "output": 0.00, "cache_read": 0.00, "cache_write": 0.00 },
|
|
437
|
+
"xsparkx2flash": { "input": 0.14, "output": 0.28, "cache_read": 0.14, "cache_write": 0.14 },
|
|
438
|
+
"xopglm51": { "input": 1.11, "output": 3.89, "cache_read": 0.22, "cache_write": 1.11 },
|
|
439
|
+
"xsparkx2": { "input": 0.42, "output": 0.42, "cache_read": 0.42, "cache_write": 0.42 },
|
|
440
|
+
"xop35qwen2b": { "input": 0.03, "output": 0.06, "cache_read": 0.03, "cache_write": 0.03 },
|
|
441
|
+
"xopqwen35397b": { "input": 0.17, "output": 1.00, "cache_read": 0.17, "cache_write": 0.17 },
|
|
442
|
+
"xminimaxm25": { "input": 0.29, "output": 1.17, "cache_read": 0.29, "cache_write": 0.29 },
|
|
443
|
+
"xopglm5": { "input": 0.83, "output": 3.06, "cache_read": 0.17, "cache_write": 0.83 },
|
|
444
|
+
"xopkimik25": { "input": 0.56, "output": 2.92, "cache_read": 0.56, "cache_write": 0.56 },
|
|
445
|
+
"xopdeepseekv32": { "input": 0.14, "output": 0.21, "cache_read": 0.14, "cache_write": 0.14 },
|
|
446
|
+
"xop3qwencodernext": { "input": 0.35, "output": 1.39, "cache_read": 0.35, "cache_write": 0.35 },
|
|
447
|
+
"xopglmv47flash": { "input": 0.14, "output": 0.21, "cache_read": 0.14, "cache_write": 0.14 },
|
|
448
|
+
"xopglm47blth2": { "input": 0.56, "output": 2.22, "cache_read": 0.56, "cache_write": 0.56 },
|
|
449
|
+
"xop3qwen32bvl": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
450
|
+
"xopdeepseekocr": { "input": 0.00, "output": 0.00, "cache_read": 0.00, "cache_write": 0.00 },
|
|
451
|
+
"xophunyuanocr": { "input": 0.00, "output": 0.00, "cache_read": 0.00, "cache_write": 0.00 },
|
|
452
|
+
"xop3qwen80bnext": { "input": 0.08, "output": 0.33, "cache_read": 0.08, "cache_write": 0.08 },
|
|
453
|
+
"xop3qwen235b2507": { "input": 0.17, "output": 1.67, "cache_read": 0.17, "cache_write": 0.17 },
|
|
454
|
+
"xop3qwen30b2507": { "input": 0.06, "output": 0.63, "cache_read": 0.06, "cache_write": 0.06 },
|
|
455
|
+
"xop3qwen235b": { "input": 0.17, "output": 1.67, "cache_read": 0.17, "cache_write": 0.17 },
|
|
456
|
+
"xop3qwen30b": { "input": 0.06, "output": 0.63, "cache_read": 0.06, "cache_write": 0.06 },
|
|
457
|
+
"xop3qwen32b": { "input": 0.17, "output": 1.67, "cache_read": 0.17, "cache_write": 0.17 },
|
|
458
|
+
"xdeepseekv3": { "input": 0.22, "output": 0.89, "cache_read": 0.22, "cache_write": 0.22 },
|
|
459
|
+
"xdeepseekr1": { "input": 0.44, "output": 1.78, "cache_read": 0.44, "cache_write": 0.44 },
|
|
460
|
+
"xdeepseekr1qwen32b": { "input": 0.22, "output": 0.67, "cache_read": 0.22, "cache_write": 0.22 },
|
|
461
|
+
"xopkimik2blth": { "input": 0.56, "output": 2.22, "cache_read": 0.56, "cache_write": 0.56 },
|
|
462
|
+
"xopkimik2blins": { "input": 0.56, "output": 2.22, "cache_read": 0.56, "cache_write": 0.56 },
|
|
463
|
+
"xop3qwen8breranker": { "input": 0.00, "output": 0.00, "cache_read": 0.00, "cache_write": 0.00 },
|
|
464
|
+
"xop3qwen8bembedding": { "input": 0.00, "output": 0.00, "cache_read": 0.00, "cache_write": 0.00 },
|
|
465
|
+
"xop3qwen0b6": { "input": 0.04, "output": 0.42, "cache_read": 0.04, "cache_write": 0.04 },
|
|
466
|
+
"xop3qwen4b": { "input": 0.04, "output": 0.42, "cache_read": 0.04, "cache_write": 0.04 },
|
|
467
|
+
"xqwen257bchat": { "input": 0.07, "output": 0.14, "cache_read": 0.07, "cache_write": 0.07 },
|
|
468
|
+
"xop3qwen14b": { "input": 0.14, "output": 1.39, "cache_read": 0.14, "cache_write": 0.14 },
|
|
469
|
+
"xop3qwen8b": { "input": 0.07, "output": 0.69, "cache_read": 0.07, "cache_write": 0.07 },
|
|
470
|
+
"xsparkprox": { "input": 1.11, "output": 5.56, "cache_read": 1.11, "cache_write": 1.11 },
|
|
471
|
+
"xspark13b6k": { "input": 0.28, "output": 0.83, "cache_read": 0.28, "cache_write": 0.28 },
|
|
472
|
+
"spark mini": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
473
|
+
"spark mini instruct": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
474
|
+
"spark tiny": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
475
|
+
"internlm2.5_7b_chat": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
476
|
+
"internlm2.5_1.8b_chat": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
477
|
+
"qwen_v2.5_7b_base": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
478
|
+
"xsqwen2d53b": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
479
|
+
"qwen_v2.5_3b_base": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
480
|
+
"qwen_v2.5_1.5b_instruct": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
481
|
+
"qwen_v2.5_1.5b_base": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
482
|
+
"qwen_v2.5_0.5b_instruct": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
483
|
+
"qwen_v2.5_0.5b_base": { "input": 0.28, "output": 1.11, "cache_read": 0.28, "cache_write": 0.28 },
|
|
484
|
+
"xsqwenv2s1b5c": { "input": 0.14, "output": 0.28, "cache_read": 0.14, "cache_write": 0.14 },
|
|
485
|
+
"xsqwenv2s0b5c": { "input": 0.28, "output": 0.56, "cache_read": 0.28, "cache_write": 0.28 },
|
|
486
|
+
"xqwen14bchat": { "input": 0.28, "output": 0.83, "cache_read": 0.28, "cache_write": 0.28 }
|
|
487
|
+
}
|
|
488
|
+
},
|
|
423
489
|
"fuzzy": [
|
|
424
490
|
{
|
|
425
491
|
"match": "gpt-6-astra",
|
package/src/lib/pricing/index.js
CHANGED
|
@@ -35,7 +35,6 @@ const DEEPSEEK_TIME_PRICED_MODELS = [
|
|
|
35
35
|
"deepseek-v4-flash",
|
|
36
36
|
"deepseek-v4-pro",
|
|
37
37
|
];
|
|
38
|
-
|
|
39
38
|
// Sync seed load. Done at require-time so callers that haven't awaited
|
|
40
39
|
// ensurePricingLoaded() (e.g. tests, vite mock startup, edge functions) still
|
|
41
40
|
// get LiteLLM-backed pricing instead of all-zero. ensurePricingLoaded() will
|
|
@@ -163,6 +162,9 @@ function isDeepSeekOffPeak(row) {
|
|
|
163
162
|
|
|
164
163
|
function getRowPricing(row) {
|
|
165
164
|
const pricing = getModelPricing(row?.model, { source: row?.source });
|
|
165
|
+
// AStudio uses iFlytek MaaS fixed prices and does not inherit DeepSeek public API
|
|
166
|
+
// time-based discounts.
|
|
167
|
+
if (String(row?.source || "").toLowerCase() === "acode") return pricing;
|
|
166
168
|
if (!isDeepSeekTimePricedModel(row?.model) || !isDeepSeekOffPeak(row)) return pricing;
|
|
167
169
|
return {
|
|
168
170
|
...pricing,
|
|
@@ -192,7 +194,8 @@ function computeRowCost(row) {
|
|
|
192
194
|
reportedCost > 0
|
|
193
195
|
) return reportedCost;
|
|
194
196
|
const pricing = getRowPricing(row);
|
|
195
|
-
const reasoningIncludedInOutput =
|
|
197
|
+
const reasoningIncludedInOutput =
|
|
198
|
+
row.source === "codex" || row.source === "acode" || row.source === "every-code";
|
|
196
199
|
const reasoningCost = reasoningIncludedInOutput
|
|
197
200
|
? 0
|
|
198
201
|
: (row.reasoning_output_tokens || 0) * (pricing.output || 0);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Pure pricing-lookup logic. No I/O, no async. Tested in isolation.
|
|
2
2
|
//
|
|
3
3
|
// Resolve order:
|
|
4
|
+
// 0. CURATED source exact match (source-specific pricing)
|
|
4
5
|
// 1. CURATED exact match (self-defined aliases like kiro-*, hy3-*)
|
|
5
6
|
// 2. LiteLLM exact match (mainstream claude/gpt-5/gemini)
|
|
6
7
|
// 3. CURATED alias (e.g. "auto" -> "composer-1")
|
|
@@ -164,6 +165,15 @@ function normalizeWorkbuddyModel(model) {
|
|
|
164
165
|
return model;
|
|
165
166
|
}
|
|
166
167
|
|
|
168
|
+
function normalizeIFlytekMaasModel(model) {
|
|
169
|
+
if (!model || typeof model !== "string") return model;
|
|
170
|
+
const trimmed = model.trim();
|
|
171
|
+
const lower = trimmed.toLowerCase();
|
|
172
|
+
// The default Agent slug maps to the Spark X2 service in the supplied price list.
|
|
173
|
+
if (lower === "xsparkx2agent") return "xsparkx2";
|
|
174
|
+
return trimmed;
|
|
175
|
+
}
|
|
176
|
+
|
|
167
177
|
// Unsloth Studio can mix local engines and paid API providers in one database.
|
|
168
178
|
// The parser qualifies metered models with their provider and marks local,
|
|
169
179
|
// subscription-backed, or ambiguous custom routes as unpriced. Returning a
|
|
@@ -182,6 +192,7 @@ function normalizeUnslothModel(model) {
|
|
|
182
192
|
// raw model name is preserved for storage/display). Add a source here when its
|
|
183
193
|
// model strings don't match the LiteLLM/curated keys verbatim.
|
|
184
194
|
const SOURCE_MODEL_NORMALIZERS = {
|
|
195
|
+
acode: normalizeIFlytekMaasModel,
|
|
185
196
|
antigravity: normalizeAntigravityModel,
|
|
186
197
|
claude: normalizeClaudeModel,
|
|
187
198
|
cursor: normalizeCursorModel,
|
|
@@ -242,6 +253,22 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
242
253
|
const lower = lookupModel.toLowerCase();
|
|
243
254
|
const dotForm = buildDotRestoredModel(lookupModel);
|
|
244
255
|
|
|
256
|
+
// 0. CURATED source exact. Source-specific prices apply only to their source,
|
|
257
|
+
// preventing collisions with public prices for same-named models from other CLIs.
|
|
258
|
+
const sourceKey = typeof source === "string" ? source.toLowerCase() : "";
|
|
259
|
+
// AStudio does not disclose its routed model. Stop before generic aliases
|
|
260
|
+
// and fuzzy matching can turn an unresolved router into a priced model.
|
|
261
|
+
if (sourceKey === "acode" && (lower === "auto" || lower.endsWith("-auto"))) {
|
|
262
|
+
return { hit: false, source: "miss", value: null };
|
|
263
|
+
}
|
|
264
|
+
const sourceExact = curated.source_exact?.[sourceKey];
|
|
265
|
+
if (sourceExact) {
|
|
266
|
+
const sourceValue = lookupExactCaseInsensitive(sourceExact, lookupModel);
|
|
267
|
+
if (sourceValue) {
|
|
268
|
+
return { hit: true, source: "curated:source-exact", value: sourceValue };
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
245
272
|
// 1. CURATED exact
|
|
246
273
|
if (curated.exact && curated.exact[lookupModel]) {
|
|
247
274
|
return { hit: true, source: "curated:exact", value: curated.exact[lookupModel] };
|
|
@@ -382,6 +409,7 @@ module.exports = {
|
|
|
382
409
|
lookupPricing,
|
|
383
410
|
stripReasoningSuffix,
|
|
384
411
|
normalizeAntigravityModel,
|
|
412
|
+
normalizeIFlytekMaasModel,
|
|
385
413
|
normalizeClaudeModel,
|
|
386
414
|
normalizeCursorModel,
|
|
387
415
|
normalizeZedModel,
|