@tuned-tensor/cli 0.4.22 → 0.4.24
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 +12 -3
- package/dist/index.js +23 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# tt - Tuned Tensor CLI
|
|
2
2
|
|
|
3
|
-
`tt` is the command-line
|
|
4
|
-
Use it to define behaviour
|
|
5
|
-
|
|
3
|
+
`tt` is the command-line client for the optional managed
|
|
4
|
+
[Tuned Tensor](https://www.tunedtensor.com) service. Use it to define behaviour
|
|
5
|
+
specs, launch managed fine-tuning runs, inspect paired baseline-vs-tuned
|
|
6
|
+
reports, and download or serve trained models. For local CUDA or DGX Spark
|
|
7
|
+
training without a Tuned Tensor account, use `tt-local` from
|
|
8
|
+
`@tuned-tensor/local`.
|
|
6
9
|
|
|
7
10
|
The main CLI documentation lives at
|
|
8
11
|
[tunedtensor.com/docs/cli](https://tunedtensor.com/docs/cli). This README is a
|
|
@@ -37,6 +40,7 @@ tt push
|
|
|
37
40
|
tt runs estimate <spec-id>
|
|
38
41
|
tt runs start <spec-id>
|
|
39
42
|
tt runs watch <run-id>
|
|
43
|
+
tt runs report <run-id>
|
|
40
44
|
```
|
|
41
45
|
|
|
42
46
|
To continue training from a completed fine-tuned model artifact:
|
|
@@ -51,11 +55,16 @@ Useful discovery commands:
|
|
|
51
55
|
tt specs list
|
|
52
56
|
tt datasets list
|
|
53
57
|
tt runs list
|
|
58
|
+
tt runs list --summary --json
|
|
54
59
|
tt models list
|
|
55
60
|
tt models base
|
|
56
61
|
tt balance
|
|
57
62
|
```
|
|
58
63
|
|
|
64
|
+
Use `tt runs list --summary` for agents and scripts that only need run status,
|
|
65
|
+
scores, and pagination. It asks the API to omit detailed evaluation and event
|
|
66
|
+
payloads; combine it with `--json` for compact structured output.
|
|
67
|
+
|
|
59
68
|
Label real, unlabeled data with a teacher model (JSONL with `{"input": ...}`
|
|
60
69
|
rows, or CSV with `--input-column`; up to 50,000 rows / 50 MB). Labeling runs
|
|
61
70
|
as a managed cloud workflow — upload and disconnect; the teacher drafts
|
package/dist/index.js
CHANGED
|
@@ -652,6 +652,7 @@ function formatEstimateRange(estimate) {
|
|
|
652
652
|
return `${formatMinutes(duration.estimated_minutes)} (${formatMinutes(duration.range_minutes.low)}-${formatMinutes(duration.range_minutes.high)})`;
|
|
653
653
|
}
|
|
654
654
|
function printRunEstimate(estimate) {
|
|
655
|
+
const billing = estimate.billing;
|
|
655
656
|
printDetail([
|
|
656
657
|
["Estimated Time", formatEstimateRange(estimate)],
|
|
657
658
|
["Confidence", estimate.duration.confidence],
|
|
@@ -659,7 +660,20 @@ function printRunEstimate(estimate) {
|
|
|
659
660
|
["Basis", estimate.duration.basis.replaceAll("_", " ")],
|
|
660
661
|
["Estimated Cost", formatCents(estimate.estimated_cost_cents)],
|
|
661
662
|
["Training Tokens", `${(estimate.estimated_training_tokens / 1e3).toFixed(1)}k`],
|
|
662
|
-
["Epochs", String(estimate.estimated_epochs)]
|
|
663
|
+
["Epochs", String(estimate.estimated_epochs)],
|
|
664
|
+
["Plan", billing?.plan],
|
|
665
|
+
[
|
|
666
|
+
"Billing Source",
|
|
667
|
+
billing?.billing_source === "free_quota" ? "Free monthly quota" : billing?.billing_source === "credits" ? "Credits" : void 0
|
|
668
|
+
],
|
|
669
|
+
[
|
|
670
|
+
"Free Runs",
|
|
671
|
+
billing ? `${billing.free_runs_remaining}/${billing.free_runs_monthly_limit} remaining` : void 0
|
|
672
|
+
],
|
|
673
|
+
[
|
|
674
|
+
"Free Eligible",
|
|
675
|
+
billing ? billing.free_run_eligible ? "yes" : `no (${billing.free_run_ineligibility.join(", ") || "not eligible"})` : void 0
|
|
676
|
+
]
|
|
663
677
|
]);
|
|
664
678
|
console.log(
|
|
665
679
|
"\nDuration is a rough historical range. Final cost uses provider-reported training tokens."
|
|
@@ -937,19 +951,23 @@ async function buildRunRequestBody(cmdOpts, opts) {
|
|
|
937
951
|
}
|
|
938
952
|
function registerRunsCommands(parent) {
|
|
939
953
|
const runs = parent.command("runs").description("Manage runs");
|
|
940
|
-
runs.command("list").description("List runs").option("-s, --spec <id>", "Filter by spec ID (full UUID or 8+ char prefix)").option("-p, --page <n>", "Page number", "1").option("--per-page <n>", "Results per page", "20").action(async (cmdOpts) => {
|
|
954
|
+
runs.command("list").description("List runs").option("-s, --spec <id>", "Filter by spec ID (full UUID or 8+ char prefix)").option("-p, --page <n>", "Page number", "1").option("--per-page <n>", "Results per page", "20").option("--summary", "Request compact run summaries without detailed eval payloads or events").action(async (cmdOpts) => {
|
|
941
955
|
const opts = parent.opts();
|
|
942
956
|
let path = "/runs";
|
|
943
957
|
const query = {
|
|
944
958
|
page: cmdOpts.page,
|
|
945
959
|
per_page: cmdOpts.perPage
|
|
946
960
|
};
|
|
961
|
+
if (cmdOpts.summary) query.view = "summary";
|
|
947
962
|
if (cmdOpts.spec) {
|
|
948
963
|
const fullSpecId = await resolveSpecId(cmdOpts.spec, opts);
|
|
949
964
|
path = `/behavior-specs/${fullSpecId}/runs`;
|
|
950
965
|
}
|
|
951
|
-
const
|
|
952
|
-
|
|
966
|
+
const response = await get(path, query, opts);
|
|
967
|
+
const { data, meta } = response;
|
|
968
|
+
if (isJsonMode()) {
|
|
969
|
+
return printJson(cmdOpts.summary ? response : { data, meta });
|
|
970
|
+
}
|
|
953
971
|
printTable(
|
|
954
972
|
["ID", "Spec", "#", "Status", "Score", "Started", "Completed"],
|
|
955
973
|
data.map((r) => [
|
|
@@ -4123,7 +4141,7 @@ function registerPushCommand(parent) {
|
|
|
4123
4141
|
|
|
4124
4142
|
// src/index.ts
|
|
4125
4143
|
var program = new Command();
|
|
4126
|
-
program.name("tt").description("Tuned Tensor CLI \u2014 fine-tune and evaluate LLMs").version("0.4.
|
|
4144
|
+
program.name("tt").description("Tuned Tensor CLI \u2014 fine-tune and evaluate LLMs").version("0.4.24").option("-k, --api-key <key>", "API key (overrides stored key)").option(
|
|
4127
4145
|
"-u, --base-url <url>",
|
|
4128
4146
|
"API base URL (default: https://tunedtensor.com)"
|
|
4129
4147
|
).option("--json", "Output raw JSON").option("--no-color", "Disable colors").hook("preAction", (_thisCommand, actionCommand) => {
|