free-coding-models 0.1.24 β 0.1.25
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.md +4 -0
- package/bin/free-coding-models.js +36 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -347,7 +347,7 @@ function calculateViewport(terminalRows, scrollOffset, totalModels) {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
// π renderTable: mode param controls footer hint text (opencode vs openclaw)
|
|
350
|
-
function renderTable(results, pendingPings, frame, cursor = null, sortColumn = 'avg', sortDirection = 'asc', pingInterval = PING_INTERVAL, lastPingTime = Date.now(), mode = 'opencode',
|
|
350
|
+
function renderTable(results, pendingPings, frame, cursor = null, sortColumn = 'avg', sortDirection = 'asc', pingInterval = PING_INTERVAL, lastPingTime = Date.now(), mode = 'opencode', tierFilterMode = 0, scrollOffset = 0, terminalRows = 0) {
|
|
351
351
|
// π Filter out hidden models for display
|
|
352
352
|
const visibleResults = results.filter(r => !r.hidden)
|
|
353
353
|
|
|
@@ -383,8 +383,9 @@ function renderTable(results, pendingPings, frame, cursor = null, sortColumn = '
|
|
|
383
383
|
|
|
384
384
|
// π Tier filter badge shown when filtering is active
|
|
385
385
|
let tierBadge = ''
|
|
386
|
-
if (
|
|
387
|
-
|
|
386
|
+
if (tierFilterMode > 0) {
|
|
387
|
+
const tierNames = ['All', 'S+/S', 'A+/A/A-', 'B+/B', 'C']
|
|
388
|
+
tierBadge = chalk.bold.rgb(255, 200, 0)(` [${tierNames[tierFilterMode]}]`)
|
|
388
389
|
}
|
|
389
390
|
|
|
390
391
|
// π Column widths (generous spacing with margins)
|
|
@@ -600,9 +601,11 @@ function renderTable(results, pendingPings, frame, cursor = null, sortColumn = '
|
|
|
600
601
|
: mode === 'opencode-desktop'
|
|
601
602
|
? chalk.rgb(0, 200, 255)('EnterβOpenDesktop')
|
|
602
603
|
: chalk.rgb(0, 200, 255)('EnterβOpenCode')
|
|
603
|
-
lines.push(chalk.dim(` ββ Navigate β’ `) + actionHint + chalk.dim(` β’ R/T/O/M/P/A/S/V/U Sort β’ Wβ/Xβ Interval (${intervalSec}s) β’
|
|
604
|
+
lines.push(chalk.dim(` ββ Navigate β’ `) + actionHint + chalk.dim(` β’ R/T/O/M/P/A/S/V/U Sort β’ Wβ/Xβ Interval (${intervalSec}s) β’ T Tier β’ Z Mode β’ Ctrl+C Exit`))
|
|
604
605
|
lines.push('')
|
|
605
|
-
lines.push(chalk.dim('
|
|
606
|
+
lines.push(chalk.dim(' Made with love by ') + '\x1b]8;;https://github.com/vava-nessa\x1b\\vava-nessa\x1b]8;;\x1b\\')
|
|
607
|
+
lines.push(chalk.dim(' π Repository GitHub: ') + chalk.dim.underline('https://github.com/vava-nessa/free-coding-models'))
|
|
608
|
+
lines.push(chalk.dim(' π¬ Contribuer et discuter sur notre Discord: ') + chalk.dim.underline('https://discord.gg/U4vz7mYQ'))
|
|
606
609
|
lines.push('')
|
|
607
610
|
// π Append \x1b[K (erase to EOL) to each line so leftover chars from previous
|
|
608
611
|
// π frames are cleared. Then pad with blank cleared lines to fill the terminal,
|
|
@@ -1137,11 +1140,27 @@ async function main() {
|
|
|
1137
1140
|
process.on('SIGINT', () => exit(0))
|
|
1138
1141
|
process.on('SIGTERM', () => exit(0))
|
|
1139
1142
|
|
|
1140
|
-
// π
|
|
1143
|
+
// π Tier filtering system - cycles through filter modes
|
|
1144
|
+
let tierFilterMode = 0 // 0=all, 1=S+/S, 2=A+/A/A-, 3=B+/B, 4=C
|
|
1141
1145
|
function applyTierFilter() {
|
|
1142
|
-
// π All models visible by default
|
|
1143
1146
|
state.results.forEach(r => {
|
|
1144
|
-
|
|
1147
|
+
switch (tierFilterMode) {
|
|
1148
|
+
case 0: // All tiers visible
|
|
1149
|
+
r.hidden = false
|
|
1150
|
+
break
|
|
1151
|
+
case 1: // S+ and S only
|
|
1152
|
+
r.hidden = !(r.tier === 'S+' || r.tier === 'S')
|
|
1153
|
+
break
|
|
1154
|
+
case 2: // A+, A, A- only
|
|
1155
|
+
r.hidden = !(r.tier === 'A+' || r.tier === 'A' || r.tier === 'A-')
|
|
1156
|
+
break
|
|
1157
|
+
case 3: // B+ and B only
|
|
1158
|
+
r.hidden = !(r.tier === 'B+' || r.tier === 'B')
|
|
1159
|
+
break
|
|
1160
|
+
case 4: // C only
|
|
1161
|
+
r.hidden = r.tier !== 'C'
|
|
1162
|
+
break
|
|
1163
|
+
}
|
|
1145
1164
|
})
|
|
1146
1165
|
|
|
1147
1166
|
return state.results
|
|
@@ -1184,7 +1203,13 @@ async function main() {
|
|
|
1184
1203
|
state.pingInterval = Math.min(60000, state.pingInterval + 1000)
|
|
1185
1204
|
}
|
|
1186
1205
|
|
|
1187
|
-
// π Tier
|
|
1206
|
+
// π Tier toggle key: T = cycle through tier filters (all β S+/S β A+/A/A- β B+/B β C β all)
|
|
1207
|
+
if (key.name === 't') {
|
|
1208
|
+
tierFilterMode = (tierFilterMode + 1) % 5
|
|
1209
|
+
applyTierFilter()
|
|
1210
|
+
adjustScrollOffset(state)
|
|
1211
|
+
return
|
|
1212
|
+
}
|
|
1188
1213
|
|
|
1189
1214
|
// π Mode toggle key: Z = cycle through modes (CLI β Desktop β OpenClaw)
|
|
1190
1215
|
if (key.name === 'z') {
|
|
@@ -1270,10 +1295,10 @@ async function main() {
|
|
|
1270
1295
|
// π Animation loop: clear alt screen + redraw table at FPS with cursor
|
|
1271
1296
|
const ticker = setInterval(() => {
|
|
1272
1297
|
state.frame++
|
|
1273
|
-
process.stdout.write(ALT_HOME + renderTable(state.results, state.pendingPings, state.frame, state.cursor, state.sortColumn, state.sortDirection, state.pingInterval, state.lastPingTime, state.mode,
|
|
1298
|
+
process.stdout.write(ALT_HOME + renderTable(state.results, state.pendingPings, state.frame, state.cursor, state.sortColumn, state.sortDirection, state.pingInterval, state.lastPingTime, state.mode, tierFilterMode, state.scrollOffset, state.terminalRows))
|
|
1274
1299
|
}, Math.round(1000 / FPS))
|
|
1275
1300
|
|
|
1276
|
-
process.stdout.write(ALT_HOME + renderTable(state.results, state.pendingPings, state.frame, state.cursor, state.sortColumn, state.sortDirection, state.pingInterval, state.lastPingTime, state.mode,
|
|
1301
|
+
process.stdout.write(ALT_HOME + renderTable(state.results, state.pendingPings, state.frame, state.cursor, state.sortColumn, state.sortDirection, state.pingInterval, state.lastPingTime, state.mode, tierFilterMode, state.scrollOffset, state.terminalRows))
|
|
1277
1302
|
|
|
1278
1303
|
// ββ Continuous ping loop β ping all models every N seconds forever ββββββββββ
|
|
1279
1304
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "free-coding-models",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.25",
|
|
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",
|