free-coding-models 0.1.41 β 0.1.43
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/bin/free-coding-models.js +16 -29
- package/package.json +1 -1
|
@@ -411,11 +411,11 @@ function renderTable(results, pendingPings, frame, cursor = null, sortColumn = '
|
|
|
411
411
|
// π Add mode toggle hint
|
|
412
412
|
const modeHint = chalk.dim.yellow(' (Z to toggle)')
|
|
413
413
|
|
|
414
|
-
// π Tier filter badge shown when filtering is active
|
|
414
|
+
// π Tier filter badge shown when filtering is active (shows exact tier name)
|
|
415
|
+
const TIER_CYCLE_NAMES = [null, 'S+', 'S', 'A+', 'A', 'A-', 'B+', 'B', 'C']
|
|
415
416
|
let tierBadge = ''
|
|
416
417
|
if (tierFilterMode > 0) {
|
|
417
|
-
|
|
418
|
-
tierBadge = chalk.bold.rgb(255, 200, 0)(` [${tierNames[tierFilterMode]}]`)
|
|
418
|
+
tierBadge = chalk.bold.rgb(255, 200, 0)(` [${TIER_CYCLE_NAMES[tierFilterMode]}]`)
|
|
419
419
|
}
|
|
420
420
|
|
|
421
421
|
// π Column widths (generous spacing with margins)
|
|
@@ -663,9 +663,9 @@ function renderTable(results, pendingPings, frame, cursor = null, sortColumn = '
|
|
|
663
663
|
: mode === 'opencode-desktop'
|
|
664
664
|
? chalk.rgb(0, 200, 255)('EnterβOpenDesktop')
|
|
665
665
|
: chalk.rgb(0, 200, 255)('EnterβOpenCode')
|
|
666
|
-
lines.push(chalk.dim(` ββ Navigate β’ `) + actionHint + chalk.dim(` β’ R/
|
|
666
|
+
lines.push(chalk.dim(` ββ Navigate β’ `) + actionHint + chalk.dim(` β’ R/Y/O/M/L/A/S/C/H/V/U Sort β’ Wβ/Xβ Interval (${intervalSec}s) β’ T Filter tier β’ Z Mode β’ Ctrl+C Exit`))
|
|
667
667
|
lines.push('')
|
|
668
|
-
lines.push(chalk.dim(' Made with ') + 'π & β' + chalk.dim(' by ') + '\x1b]8;;https://github.com/vava-nessa\x1b\\vava-nessa\x1b]8;;\x1b\\' + chalk.dim(' β’ ') + '
|
|
668
|
+
lines.push(chalk.dim(' Made with ') + 'π & β' + chalk.dim(' by ') + '\x1b]8;;https://github.com/vava-nessa\x1b\\vava-nessa\x1b]8;;\x1b\\' + chalk.dim(' β’ ') + 'π« ' + chalk.cyanBright('\x1b]8;;https://discord.gg/WKA3TwYVuZ\x1b\\Join our Discord!\x1b]8;;\x1b\\') + chalk.dim(' β’ ') + 'β ' + '\x1b]8;;https://github.com/vava-nessa/free-coding-models\x1b\\Read the docs on GitHub\x1b]8;;\x1b\\')
|
|
669
669
|
lines.push('')
|
|
670
670
|
// π Append \x1b[K (erase to EOL) to each line so leftover chars from previous
|
|
671
671
|
// π frames are cleared. Then pad with blank cleared lines to fill the terminal,
|
|
@@ -1296,29 +1296,15 @@ async function main() {
|
|
|
1296
1296
|
process.on('SIGINT', () => exit(0))
|
|
1297
1297
|
process.on('SIGTERM', () => exit(0))
|
|
1298
1298
|
|
|
1299
|
-
// π Tier filtering system - cycles through
|
|
1300
|
-
|
|
1299
|
+
// π Tier filtering system - cycles through each individual tier one by one
|
|
1300
|
+
// π 0=All, 1=S+, 2=S, 3=A+, 4=A, 5=A-, 6=B+, 7=B, 8=C
|
|
1301
|
+
const TIER_CYCLE = [null, 'S+', 'S', 'A+', 'A', 'A-', 'B+', 'B', 'C']
|
|
1302
|
+
let tierFilterMode = 0
|
|
1301
1303
|
function applyTierFilter() {
|
|
1304
|
+
const activeTier = TIER_CYCLE[tierFilterMode]
|
|
1302
1305
|
state.results.forEach(r => {
|
|
1303
|
-
|
|
1304
|
-
case 0: // All tiers visible
|
|
1305
|
-
r.hidden = false
|
|
1306
|
-
break
|
|
1307
|
-
case 1: // S+ and S only
|
|
1308
|
-
r.hidden = !(r.tier === 'S+' || r.tier === 'S')
|
|
1309
|
-
break
|
|
1310
|
-
case 2: // A+, A, A- only
|
|
1311
|
-
r.hidden = !(r.tier === 'A+' || r.tier === 'A' || r.tier === 'A-')
|
|
1312
|
-
break
|
|
1313
|
-
case 3: // B+ and B only
|
|
1314
|
-
r.hidden = !(r.tier === 'B+' || r.tier === 'B')
|
|
1315
|
-
break
|
|
1316
|
-
case 4: // C only
|
|
1317
|
-
r.hidden = r.tier !== 'C'
|
|
1318
|
-
break
|
|
1319
|
-
}
|
|
1306
|
+
r.hidden = activeTier !== null && r.tier !== activeTier
|
|
1320
1307
|
})
|
|
1321
|
-
|
|
1322
1308
|
return state.results
|
|
1323
1309
|
}
|
|
1324
1310
|
|
|
@@ -1332,9 +1318,10 @@ async function main() {
|
|
|
1332
1318
|
const onKeyPress = async (str, key) => {
|
|
1333
1319
|
if (!key) return
|
|
1334
1320
|
|
|
1335
|
-
// π Sorting keys: R=rank,
|
|
1321
|
+
// π Sorting keys: R=rank, Y=tier, O=origin, M=model, L=latest ping, A=avg ping, S=SWE-bench, N=context, H=health, V=verdict, U=uptime
|
|
1322
|
+
// π T is reserved for tier filter cycling β tier sort moved to Y
|
|
1336
1323
|
const sortKeys = {
|
|
1337
|
-
'r': 'rank', '
|
|
1324
|
+
'r': 'rank', 'y': 'tier', 'o': 'origin', 'm': 'model',
|
|
1338
1325
|
'l': 'ping', 'a': 'avg', 's': 'swe', 'n': 'ctx', 'h': 'condition', 'v': 'verdict', 'u': 'uptime'
|
|
1339
1326
|
}
|
|
1340
1327
|
|
|
@@ -1359,9 +1346,9 @@ async function main() {
|
|
|
1359
1346
|
state.pingInterval = Math.min(60000, state.pingInterval + 1000)
|
|
1360
1347
|
}
|
|
1361
1348
|
|
|
1362
|
-
// π Tier toggle key: T = cycle through tier
|
|
1349
|
+
// π Tier toggle key: T = cycle through each individual tier (All β S+ β S β A+ β A β A- β B+ β B β C β All)
|
|
1363
1350
|
if (key.name === 't') {
|
|
1364
|
-
tierFilterMode = (tierFilterMode + 1) %
|
|
1351
|
+
tierFilterMode = (tierFilterMode + 1) % TIER_CYCLE.length
|
|
1365
1352
|
applyTierFilter()
|
|
1366
1353
|
adjustScrollOffset(state)
|
|
1367
1354
|
return
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "free-coding-models",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.43",
|
|
4
4
|
"description": "Find the fastest coding LLM models in seconds β ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nvidia",
|