Files
clawdbot/src/commands/models/list.table.ts
2026-01-14 05:39:47 +00:00

99 lines
2.4 KiB
TypeScript

import type { RuntimeEnv } from "../../runtime.js";
import { colorize, theme } from "../../terminal/theme.js";
import { formatTag, isRich, pad, truncate } from "./list.format.js";
import type { ModelRow } from "./list.types.js";
import { formatTokenK } from "./shared.js";
const MODEL_PAD = 42;
const INPUT_PAD = 10;
const CTX_PAD = 8;
const LOCAL_PAD = 5;
const AUTH_PAD = 5;
export function printModelTable(
rows: ModelRow[],
runtime: RuntimeEnv,
opts: { json?: boolean; plain?: boolean } = {},
) {
if (opts.json) {
runtime.log(
JSON.stringify(
{
count: rows.length,
models: rows,
},
null,
2,
),
);
return;
}
if (opts.plain) {
for (const row of rows) runtime.log(row.key);
return;
}
const rich = isRich(opts);
const header = [
pad("Model", MODEL_PAD),
pad("Input", INPUT_PAD),
pad("Ctx", CTX_PAD),
pad("Local", LOCAL_PAD),
pad("Auth", AUTH_PAD),
"Tags",
].join(" ");
runtime.log(rich ? theme.heading(header) : header);
for (const row of rows) {
const keyLabel = pad(truncate(row.key, MODEL_PAD), MODEL_PAD);
const inputLabel = pad(row.input || "-", INPUT_PAD);
const ctxLabel = pad(formatTokenK(row.contextWindow), CTX_PAD);
const localText = row.local === null ? "-" : row.local ? "yes" : "no";
const localLabel = pad(localText, LOCAL_PAD);
const authText =
row.available === null ? "-" : row.available ? "yes" : "no";
const authLabel = pad(authText, AUTH_PAD);
const tagsLabel =
row.tags.length > 0
? rich
? row.tags.map((tag) => formatTag(tag, rich)).join(",")
: row.tags.join(",")
: "";
const coloredInput = colorize(
rich,
row.input.includes("image") ? theme.accentBright : theme.info,
inputLabel,
);
const coloredLocal = colorize(
rich,
row.local === null
? theme.muted
: row.local
? theme.success
: theme.muted,
localLabel,
);
const coloredAuth = colorize(
rich,
row.available === null
? theme.muted
: row.available
? theme.success
: theme.error,
authLabel,
);
const line = [
rich ? theme.accent(keyLabel) : keyLabel,
coloredInput,
ctxLabel,
coloredLocal,
coloredAuth,
tagsLabel,
].join(" ");
runtime.log(line);
}
}