openzoo 0.48.98 → 0.48.99
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/lib/grokui.mjs +6 -5
- package/lib/podagent.mjs +24 -0
- package/package.json +1 -1
package/lib/grokui.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
11
11
|
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
12
12
|
import { cpus, homedir } from 'node:os';
|
|
13
13
|
import path from 'node:path';
|
|
14
|
-
import { adaptiveTopK, brain, brainRace, brainStream, tierModels, MODEL, PROXY, TIER_NAMES } from './podagent.mjs';
|
|
14
|
+
import { adaptiveTopK, brain, brainRace, brainStream, tierModels, MODEL, PROXY, TIER_NAMES, normalizeTier } from './podagent.mjs';
|
|
15
15
|
import { peekDirectiveStatus, formatRaceStatus, STALE_THINKING_MS, summarizeRaceFailures } from './livestatus.js';
|
|
16
16
|
import { creditBalance } from './info.js';
|
|
17
17
|
import {
|
|
@@ -951,7 +951,7 @@ const SLASH_COMMANDS = [
|
|
|
951
951
|
{ name: '/tokens', args: '', help: 'tokens and calls this session' },
|
|
952
952
|
{ name: '/model', args: '[id]', help: 'show or switch this thread’s model' },
|
|
953
953
|
{ name: '/models', args: '[filter]', help: 'search the ~435 served models' },
|
|
954
|
-
{ name: '/tier', args: 'cheap|medium|expensive', help: 'how much to spend per turn when no model is pinned' },
|
|
954
|
+
{ name: '/tier', args: 'cheap|medium|expensive|grok 4.6', help: 'how much to spend per turn when no model is pinned' },
|
|
955
955
|
{ name: '/race', args: '<n> | <k> <n>', help: 'launch n models; judge the first k back (k=1 = fastest wins)' },
|
|
956
956
|
{ name: '/compact', args: '', help: 'summarise history to shrink context' },
|
|
957
957
|
{ name: '/clear', args: '', help: 'wipe this thread’s history' },
|
|
@@ -1110,8 +1110,8 @@ async function handleSlash(task, t) {
|
|
|
1110
1110
|
+ (t.model ? `NOTE: /model ${t.model} is pinned on this thread, so the tier is ignored until you /model default.\n` : '')
|
|
1111
1111
|
+ 'Switch with /tier <name> · /race <n> to ask several at once.';
|
|
1112
1112
|
}
|
|
1113
|
-
const want = arg
|
|
1114
|
-
if (!
|
|
1113
|
+
const want = normalizeTier(arg);
|
|
1114
|
+
if (!want) return `Unknown tier "${arg}". One of: ${TIER_NAMES.join(', ')} (also: grok 4.6).`;
|
|
1115
1115
|
t.tier = want; saveThreads();
|
|
1116
1116
|
const picks = await tierModels(want, 3);
|
|
1117
1117
|
return `This thread now runs on the ${want} tier — ${picks.join(', ')}…`
|
|
@@ -3221,6 +3221,7 @@ const APP_HTML = `<!doctype html>
|
|
|
3221
3221
|
<option value="cheap">cheap</option>
|
|
3222
3222
|
<option value="medium" selected>medium</option>
|
|
3223
3223
|
<option value="expensive">expensive</option>
|
|
3224
|
+
<option value="grok4.6">grok 4.6</option>
|
|
3224
3225
|
</select>
|
|
3225
3226
|
<select class="dial" id="raceSel" data-component="model-race" aria-label="Race models"
|
|
3226
3227
|
title="Ask N models from the tier at once, drawn at random — fastest real answer wins. You pay for every entrant.">
|
|
@@ -3631,7 +3632,7 @@ const APP_HTML = `<!doctype html>
|
|
|
3631
3632
|
: 'Ask N models from the tier at once, drawn at random — fastest real answer wins. You pay for every entrant.';
|
|
3632
3633
|
}
|
|
3633
3634
|
if (!pinned && (t.tier === 'expensive' || (t.race || 0) >= 2)) {
|
|
3634
|
-
if (t.tier === 'expensive') tierSel.className = 'dial hot';
|
|
3635
|
+
if (t.tier === 'expensive' || t.tier === 'grok4.6') tierSel.className = 'dial hot';
|
|
3635
3636
|
if ((t.race || 0) >= 2) raceSel.className = 'dial hot';
|
|
3636
3637
|
}
|
|
3637
3638
|
}
|
package/lib/podagent.mjs
CHANGED
|
@@ -578,8 +578,32 @@ const TIERS = {
|
|
|
578
578
|
'qwen/qwen3.8-max', // 18
|
|
579
579
|
'x-ai/grok-4.5', // 18
|
|
580
580
|
],
|
|
581
|
+
// Dedicated grok 4.6 band (tweeted as its own dial next to cheap/medium/expensive).
|
|
582
|
+
// One slug cannot fill a 4-wide race without replacement, so the pool is grok
|
|
583
|
+
// chat models with 4.6 first. No imagine / stt / tts / video.
|
|
584
|
+
'grok4.6': [
|
|
585
|
+
'x-ai/grok-4.6',
|
|
586
|
+
'x-ai/grok-4.5',
|
|
587
|
+
'x-ai/grok-4.3',
|
|
588
|
+
'x-ai/grok-4.20',
|
|
589
|
+
],
|
|
581
590
|
};
|
|
582
591
|
export const TIER_NAMES = Object.keys(TIERS);
|
|
592
|
+
export const TIER_ALIASES = {
|
|
593
|
+
grok: 'grok4.6',
|
|
594
|
+
'grok 4.6': 'grok4.6',
|
|
595
|
+
'grok-4.6': 'grok4.6',
|
|
596
|
+
'grok4.6': 'grok4.6',
|
|
597
|
+
};
|
|
598
|
+
export function normalizeTier(s) {
|
|
599
|
+
const raw = String(s || '').trim().toLowerCase();
|
|
600
|
+
if (TIER_NAMES.includes(raw)) return raw;
|
|
601
|
+
if (TIER_ALIASES[raw]) return TIER_ALIASES[raw];
|
|
602
|
+
const compact = raw.replace(/[\s_]/g, '');
|
|
603
|
+
if (TIER_NAMES.includes(compact)) return compact;
|
|
604
|
+
if (TIER_ALIASES[compact]) return TIER_ALIASES[compact];
|
|
605
|
+
return null;
|
|
606
|
+
}
|
|
583
607
|
|
|
584
608
|
let catalogCache = { at: 0, ids: null };
|
|
585
609
|
async function servedIds() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openzoo",
|
|
3
|
-
"version": "0.48.
|
|
3
|
+
"version": "0.48.99",
|
|
4
4
|
"description": "Local x402-paying proxy + MCP server for openzoo.fun \u2014 point any OpenAI-compatible harness (Cursor, Claude Code, aider, SDKs) at localhost and it pays per call from a local burner wallet. Solana and Base rails live; Robinhood experimental.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|