feat: ops & UX batch — jobs survive restarts, logs/system in the console, media queue, gallery, chat, exact stream tokens
Fifteen changes aimed at the first day of real use: - Import and media jobs persist to <data>/jobs-*.json and reload on start (running ones settle as errors); the Register button no longer vanishes because the gateway restarted. - Docker ships the cortiq binary (built in the builder stage) — local .cmf chat models and image/video generation now work in containers, where auto-install never could (no cargo in the runtime image). libvulkan1 added for optional GPU offload. - Open admin console on 0.0.0.0 without a token now warns in the log and shows a dismissible banner — the VPS footgun is at least labeled. - "Restart gateway" button in Settings: stops managed model servers, spawns a fresh copy (bind retried while the port frees), Docker relies on the container restart policy instead. - Dashboard "System" panel: CPU sparkline + load, RAM (with the gateway's own RSS), free disk at the models dir — sampled by sysinfo every 2 s. - Featured model cards warn "not enough disk" / "may not fit in RAM" before the download, from the same live snapshot. - Log viewer in the sidebar: a 500-line in-memory ring fed by a second ANSI-free tracing layer; filter, level, pause, copy. - Update check: crates.io polled twice a day, the console shows an "update available" notice. - Media generations queue up (with position shown) instead of being rejected; progress gained an honest ETA from measured throughput. - Generation gallery under the image/video tabs: lazy PPM thumbnails, click to reopen with seed/steps, delete. - Playground chat is a real dialogue now: history is resent, bubbles, Clear, Cmd/Ctrl+Enter. - "Connect your app" snippets (curl / Python / JS) on the keys page, with the real key inlined right after creation. - One-click benchmark on the Models page via `cortiq bench --json`. - Config export now downloads the actual gateway.toml (comments intact); import accepts TOML (validated, hot-reloaded) and the legacy JSON. - Streaming token counts are exact when the model server provides usage (cortiq-server patch, shipped separately); the gateway fallback now counts content chunks (1/token on cortiq) instead of chars/4. Wizard's Finish lands on the Playground. 37 new strings in all 7 languages.
This commit is contained in:
Vendored
+39
@@ -499,4 +499,43 @@ export default {
|
||||
"pg.noMediaModels": "No local {kind} model yet. Download one (e.g. from the infosave collection) in Import:",
|
||||
"pg.tokSpeed": "Speed",
|
||||
"pg.ttft": "First token",
|
||||
|
||||
// ops: logs, system, notices, gallery, chat, snippets, bench
|
||||
"nav.logs": "Logs",
|
||||
"logs.subtitle": "Recent gateway log — what the terminal would show.",
|
||||
"logs.filterPlaceholder": "filter…",
|
||||
"logs.pause": "Pause",
|
||||
"logs.resume": "Resume",
|
||||
"logs.empty": "Nothing matches.",
|
||||
"notice.openAdmin": "The admin console is open without a token and reachable from other machines. Set a token if this box is not private.",
|
||||
"notice.update": "Update available: v{v}.",
|
||||
"dash.sys.title": "System",
|
||||
"dash.sys.cores": "cores",
|
||||
"dash.sys.disk": "Disk (models)",
|
||||
"dash.sys.free": "free",
|
||||
"dash.sys.gateway": "gateway",
|
||||
"fit.disk": "not enough disk",
|
||||
"fit.diskTitle": "The download is larger than the free space on the models disk.",
|
||||
"fit.ram": "may not fit in RAM",
|
||||
"fit.ramTitle": "The model is close to or larger than this machine's RAM — it may not run.",
|
||||
"pg.eta": "left",
|
||||
"pg.min": "min",
|
||||
"pg.queued": "In queue — position {n}. It starts as soon as the current generation finishes.",
|
||||
"pg.gallery": "Recent generations",
|
||||
"pg.galDeleteConfirm": "Delete this generation and its files?",
|
||||
"pg.clearChat": "Clear",
|
||||
"keys.snip.title": "Connect your app",
|
||||
"keys.snip.hint": "Paste one of these into your project — only the API key placeholder needs replacing.",
|
||||
"keys.snip.withKey": "Snippets below include the key you just created.",
|
||||
"keys.snip.openMode": "No API keys are configured — the gateway accepts any key value.",
|
||||
"keys.snip.keyPh": "your API key",
|
||||
"settings.restart": "Restart gateway",
|
||||
"settings.restartConfirm": "Restart the gateway? Requests in flight will be dropped; local model servers restart too.",
|
||||
"settings.restarting": "Restarting — the page reloads when the gateway is back…",
|
||||
"bench.title": "Local model speed",
|
||||
"bench.hint": "Runs `cortiq bench` on this machine — real tok/s, one model at a time.",
|
||||
"bench.run": "Measure",
|
||||
"bench.running": "measuring…",
|
||||
"bench.failed": "failed",
|
||||
"bench.none": "No local .cmf chat models yet.",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user