@tuned-tensor/local 0.1.6 → 0.1.8

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.
@@ -0,0 +1,132 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createWriteStream } from "node:fs";
3
+ import { mkdir } from "node:fs/promises";
4
+ import { dirname, resolve } from "node:path";
5
+ import { forwardStreamLines } from "./run-reporter.js";
6
+ export function buildUvPythonArgs(entrypoint, options = {}) {
7
+ const args = ["run"];
8
+ if (entrypoint.project)
9
+ args.push("--project", entrypoint.project);
10
+ for (const dependency of entrypoint.with ?? [])
11
+ args.push("--with", dependency);
12
+ args.push("python");
13
+ if (entrypoint.module) {
14
+ args.push("-m", entrypoint.module);
15
+ }
16
+ else if (entrypoint.script) {
17
+ args.push(entrypoint.script);
18
+ }
19
+ else if (options.defaultScript) {
20
+ args.push(options.defaultScript);
21
+ }
22
+ else {
23
+ throw new Error("uv python entrypoint requires module, script, or defaultScript");
24
+ }
25
+ args.push(...(entrypoint.args ?? []), ...(options.extraArgs ?? []));
26
+ return args;
27
+ }
28
+ export async function runLoggedProcess(args) {
29
+ if (args.logPath)
30
+ await mkdir(dirname(args.logPath), { recursive: true });
31
+ const logStream = args.logPath ? createWriteStream(args.logPath, { flags: "w" }) : null;
32
+ let stderr = "";
33
+ try {
34
+ const exitCode = await new Promise((resolvePromise, reject) => {
35
+ const child = spawn(args.command, args.commandArgs, {
36
+ cwd: args.cwd ? resolve(args.cwd) : process.cwd(),
37
+ stdio: ["ignore", "pipe", "pipe"],
38
+ env: args.env ?? process.env,
39
+ });
40
+ let timedOut = false;
41
+ const timer = args.timeoutMs
42
+ ? setTimeout(() => {
43
+ timedOut = true;
44
+ child.kill("SIGTERM");
45
+ reject(new Error(args.timeoutMessage ?? `${args.command} timed out after ${args.timeoutMs}ms`));
46
+ }, args.timeoutMs)
47
+ : null;
48
+ if (logStream) {
49
+ child.stdout.pipe(logStream, { end: false });
50
+ child.stderr.pipe(logStream, { end: false });
51
+ }
52
+ forwardStreamLines(child.stdout, (line) => {
53
+ args.onLine?.(line, "stdout");
54
+ if (args.reporter?.verbose) {
55
+ void args.reporter.onLog?.({ stage: args.stage, stream: "stdout", message: line });
56
+ }
57
+ });
58
+ forwardStreamLines(child.stderr, (line) => {
59
+ stderr += `${line}\n`;
60
+ args.onLine?.(line, "stderr");
61
+ if (args.reporter?.verbose) {
62
+ void args.reporter.onLog?.({ stage: args.stage, stream: "stderr", message: line });
63
+ }
64
+ });
65
+ child.on("error", (error) => {
66
+ if (timer)
67
+ clearTimeout(timer);
68
+ reject(error);
69
+ });
70
+ child.on("close", (code) => {
71
+ if (timer)
72
+ clearTimeout(timer);
73
+ if (timedOut)
74
+ return;
75
+ resolvePromise(code ?? 1);
76
+ });
77
+ });
78
+ return { exitCode, stderr };
79
+ }
80
+ finally {
81
+ if (logStream) {
82
+ await new Promise((resolveEnd) => {
83
+ logStream.end(resolveEnd);
84
+ });
85
+ }
86
+ }
87
+ }
88
+ export async function runJsonStdInCommand(args) {
89
+ const [cmd, ...cmdArgs] = args.command;
90
+ return await new Promise((resolvePromise, reject) => {
91
+ const child = spawn(cmd, cmdArgs, {
92
+ stdio: ["pipe", "pipe", "pipe"],
93
+ env: process.env,
94
+ });
95
+ let stdout = "";
96
+ let stderr = "";
97
+ let timedOut = false;
98
+ const timer = setTimeout(() => {
99
+ timedOut = true;
100
+ child.kill("SIGTERM");
101
+ reject(new Error(args.timeoutMessage));
102
+ }, args.timeoutMs);
103
+ child.stdout.setEncoding("utf8");
104
+ child.stderr.setEncoding("utf8");
105
+ child.stdout.on("data", (chunk) => { stdout += chunk; });
106
+ child.stderr.on("data", (chunk) => { stderr += chunk; });
107
+ child.on("error", (error) => {
108
+ clearTimeout(timer);
109
+ reject(error);
110
+ });
111
+ child.on("close", (code) => {
112
+ clearTimeout(timer);
113
+ if (timedOut)
114
+ return;
115
+ if (code !== 0) {
116
+ reject(new Error(`${args.errorPrefix} exited ${code}: ${stderr.slice(0, 1000)}`));
117
+ return;
118
+ }
119
+ const trimmed = stdout.trim();
120
+ try {
121
+ const parsed = JSON.parse(trimmed);
122
+ const content = parsed.content ?? parsed.output ?? parsed.actual;
123
+ resolvePromise(typeof content === "string" ? content : trimmed);
124
+ }
125
+ catch {
126
+ resolvePromise(trimmed);
127
+ }
128
+ });
129
+ child.stdin.end(JSON.stringify(args.payload));
130
+ });
131
+ }
132
+ //# sourceMappingURL=process-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-runner.js","sourceRoot":"","sources":["../src/process-runner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { FineTuneRunRequest, LocalRunnerConfig, TrainingReport } from "./contracts.js";
2
2
  import type { RunArtifacts } from "./artifacts.js";
3
- import { type LocalRunReporter } from "./run-reporter.js";
3
+ import type { LocalRunReporter } from "./run-reporter.js";
4
4
  export declare function buildTrainingHyperparameters(request: FineTuneRunRequest): Record<string, string>;
5
5
  export interface TrainingProgressSnapshot {
6
6
  percent?: number;
@@ -1,10 +1,8 @@
1
- import { spawn } from "node:child_process";
2
- import { createWriteStream } from "node:fs";
3
1
  import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
4
2
  import { join, resolve } from "node:path";
5
3
  import { copyDatasetToTrainingChannel, fileUri, writeJson } from "./artifacts.js";
6
4
  import { resolveTrainingModel } from "./model-registry.js";
7
- import { forwardStreamLines } from "./run-reporter.js";
5
+ import { buildUvPythonArgs, runLoggedProcess } from "./process-runner.js";
8
6
  export function buildTrainingHyperparameters(request) {
9
7
  const model = resolveTrainingModel(request.spec_snapshot.base_model);
10
8
  const hyper = request.hyperparameters;
@@ -24,6 +22,9 @@ export function buildTrainingHyperparameters(request) {
24
22
  save_adapter_only: String(hyper.save_adapter_only),
25
23
  requires_hf_token: String(model.requiresHfToken),
26
24
  trust_remote_code: String(model.trustRemoteCode),
25
+ ...(hyper.chat_template_kwargs
26
+ ? { chat_template_kwargs: JSON.stringify(hyper.chat_template_kwargs) }
27
+ : {}),
27
28
  };
28
29
  }
29
30
  async function pathExists(path) {
@@ -36,25 +37,7 @@ async function pathExists(path) {
36
37
  }
37
38
  }
38
39
  function buildUvArgs(training) {
39
- const args = ["run"];
40
- if (training.project)
41
- args.push("--project", training.project);
42
- if (training.with?.length) {
43
- for (const dependency of training.with)
44
- args.push("--with", dependency);
45
- }
46
- args.push("python");
47
- if (training.module) {
48
- args.push("-m", training.module);
49
- }
50
- else if (training.script) {
51
- args.push(training.script);
52
- }
53
- else {
54
- args.push("training/sft-local/src/train.py");
55
- }
56
- args.push(...training.args);
57
- return args;
40
+ return buildUvPythonArgs(training, { defaultScript: "training/sft-local/src/train.py" });
58
41
  }
59
42
  function numberFromMetric(value) {
60
43
  if (!value)
@@ -149,7 +132,6 @@ export async function launchProcessTraining(args) {
149
132
  }
150
133
  const uvArgs = buildUvArgs(config.training);
151
134
  const command = ["uv", ...uvArgs];
152
- const logStream = createWriteStream(artifacts.trainingLog, { flags: "w" });
153
135
  const childEnv = {
154
136
  ...process.env,
155
137
  ...config.training.env,
@@ -178,36 +160,17 @@ export async function launchProcessTraining(args) {
178
160
  output_dir: artifacts.trainingOutputDir,
179
161
  },
180
162
  });
181
- let exitCode = 1;
182
- try {
183
- exitCode = await new Promise((resolvePromise, reject) => {
184
- const child = spawn("uv", uvArgs, {
185
- cwd: config.training.cwd ? resolve(config.training.cwd) : process.cwd(),
186
- stdio: ["ignore", "pipe", "pipe"],
187
- env: childEnv,
188
- });
189
- const forwardTrainingProgress = createTrainingProgressForwarder(args.reporter);
190
- child.stdout.pipe(logStream, { end: false });
191
- child.stderr.pipe(logStream, { end: false });
192
- forwardStreamLines(child.stdout, (line) => {
193
- forwardTrainingProgress(line);
194
- if (args.reporter?.verbose)
195
- void args.reporter.onLog?.({ stage: "training", stream: "stdout", message: line });
196
- });
197
- forwardStreamLines(child.stderr, (line) => {
198
- forwardTrainingProgress(line);
199
- if (args.reporter?.verbose)
200
- void args.reporter.onLog?.({ stage: "training", stream: "stderr", message: line });
201
- });
202
- child.on("error", reject);
203
- child.on("close", (code) => resolvePromise(code ?? 1));
204
- });
205
- }
206
- finally {
207
- await new Promise((resolveEnd) => {
208
- logStream.end(resolveEnd);
209
- });
210
- }
163
+ const forwardTrainingProgress = createTrainingProgressForwarder(args.reporter);
164
+ const { exitCode } = await runLoggedProcess({
165
+ command: "uv",
166
+ commandArgs: uvArgs,
167
+ cwd: config.training.cwd,
168
+ env: childEnv,
169
+ logPath: artifacts.trainingLog,
170
+ reporter: args.reporter,
171
+ stage: "training",
172
+ onLine: (line) => forwardTrainingProgress(line),
173
+ });
211
174
  const metricsPath = join(artifacts.trainingModelDir, "training-metrics.json");
212
175
  const metrics = await pathExists(metricsPath)
213
176
  ? JSON.parse(await readFile(metricsPath, "utf8"))
@@ -1 +1 @@
1
- {"version":3,"file":"process-training.js","sourceRoot":"","sources":["../src/process-training.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-training.js","sourceRoot":"","sources":["../src/process-training.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -29,7 +29,7 @@ const DASHBOARD_HTML = `<!doctype html>
29
29
  <head>
30
30
  <meta charset="utf-8" />
31
31
  <meta name="viewport" content="width=device-width, initial-scale=1" />
32
- <title>Tuned Tensor Local</title>
32
+ <title>TT Local</title>
33
33
  <style>
34
34
  body { margin: 0; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #f7f7f4; color: #1e2320; }
35
35
  header { display: flex; justify-content: space-between; align-items: center; padding: 16px 24px; border-bottom: 1px solid #d9ddd6; background: #ffffff; position: sticky; top: 0; }
@@ -48,7 +48,7 @@ const DASHBOARD_HTML = `<!doctype html>
48
48
  </head>
49
49
  <body>
50
50
  <header>
51
- <strong>Tuned Tensor Local</strong>
51
+ <strong>TT Local</strong>
52
52
  <button id="refresh">Refresh</button>
53
53
  </header>
54
54
  <main>
@@ -1,6 +1,6 @@
1
1
  # Architecture
2
2
 
3
- Tuned Tensor Local is organized around a small set of replaceable local
3
+ TT Local is organized around a small set of replaceable local
4
4
  adapters. The first implementation targets a single Linux GPU host and is
5
5
  packaged as a standalone CLI.
6
6
 
package/docs/spark.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Running On DGX Spark
2
2
 
3
- Tuned Tensor Local expects the Spark to behave like a single Linux GPU host:
3
+ TT Local expects the Spark to behave like a single Linux GPU host:
4
4
  uv must be installed, Python dependencies must resolve, and CUDA/PyTorch must be
5
5
  able to see the GPU.
6
6
 
@@ -8,7 +8,12 @@
8
8
  "script": "training/sft-local/src/train.py"
9
9
  },
10
10
  "evaluation": {
11
- "mode": "heuristic",
11
+ "inference": {
12
+ "provider": "none"
13
+ },
14
+ "scoring": {
15
+ "mode": "exact_match"
16
+ },
12
17
  "maxExamples": 2
13
18
  }
14
19
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tuned-tensor/local",
3
- "version": "0.1.6",
4
- "description": "Local, cloud-independent fine-tuning runner for Tuned Tensor behavior specs.",
3
+ "version": "0.1.8",
4
+ "description": "TT Local: tuning tensors locally on hardware you control.",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,
7
7
  "repository": {
@@ -56,7 +56,12 @@ def fallback_prompt(system: str, prompt: str) -> str:
56
56
  return f"system: {system}\nuser: {prompt}\nassistant:"
57
57
 
58
58
 
59
- def format_prompt(tokenizer: Any, system: str, prompt: str) -> str:
59
+ def format_prompt(
60
+ tokenizer: Any,
61
+ system: str,
62
+ prompt: str,
63
+ chat_template_kwargs: dict[str, Any] | None = None,
64
+ ) -> str:
60
65
  messages = [
61
66
  {"role": "system", "content": system},
62
67
  {"role": "user", "content": prompt},
@@ -66,6 +71,7 @@ def format_prompt(tokenizer: Any, system: str, prompt: str) -> str:
66
71
  messages,
67
72
  tokenize=False,
68
73
  add_generation_prompt=True,
74
+ **(chat_template_kwargs or {}),
69
75
  )
70
76
  except Exception:
71
77
  return fallback_prompt(system, prompt)
@@ -208,10 +214,11 @@ def generate_text_one(
208
214
  system: str,
209
215
  example: dict[str, Any],
210
216
  generation: dict[str, Any],
217
+ chat_template_kwargs: dict[str, Any] | None = None,
211
218
  ) -> dict[str, Any]:
212
219
  prompt = str(example["input"])
213
220
  expected = str(example["output"])
214
- formatted = format_prompt(tokenizer, system, prompt)
221
+ formatted = format_prompt(tokenizer, system, prompt, chat_template_kwargs)
215
222
  inputs = tokenizer(formatted, return_tensors="pt")
216
223
  target_device = next(model.parameters()).device
217
224
  inputs = {key: value.to(target_device) for key, value in inputs.items()}
@@ -242,6 +249,7 @@ def generate_multimodal_one(
242
249
  example: dict[str, Any],
243
250
  generation: dict[str, Any],
244
251
  base_dir: Path,
252
+ chat_template_kwargs: dict[str, Any] | None = None,
245
253
  ) -> dict[str, Any]:
246
254
  prompt = str(example["input"])
247
255
  expected = str(example["output"])
@@ -257,6 +265,7 @@ def generate_multimodal_one(
257
265
  messages,
258
266
  tokenize=False,
259
267
  add_generation_prompt=True,
268
+ **(chat_template_kwargs or {}),
260
269
  )
261
270
  inputs = processor(
262
271
  text=[text],
@@ -304,6 +313,7 @@ def main() -> None:
304
313
  with TemporaryDirectory() as tmp_dir:
305
314
  adapter_path = resolve_adapter_path(payload.get("adapter_path"), Path(tmp_dir))
306
315
  generation = payload.get("generation", {})
316
+ chat_template_kwargs = payload.get("chat_template_kwargs") or None
307
317
  base_dir = Path(args.input).parent
308
318
  if should_use_multimodal(payload):
309
319
  model, processor, _device = load_multimodal_model(payload, adapter_path)
@@ -315,13 +325,21 @@ def main() -> None:
315
325
  example,
316
326
  generation,
317
327
  base_dir,
328
+ chat_template_kwargs,
318
329
  )
319
330
  for example in payload.get("examples", [])
320
331
  ]
321
332
  else:
322
333
  model, tokenizer, _device = load_text_model(payload, adapter_path)
323
334
  results = [
324
- generate_text_one(model, tokenizer, str(payload.get("system", "")), example, generation)
335
+ generate_text_one(
336
+ model,
337
+ tokenizer,
338
+ str(payload.get("system", "")),
339
+ example,
340
+ generation,
341
+ chat_template_kwargs,
342
+ )
325
343
  for example in payload.get("examples", [])
326
344
  ]
327
345
 
@@ -98,6 +98,22 @@ def resolve_model_source() -> str:
98
98
  return hp("base_model") or "Qwen/Qwen3.5-2B"
99
99
 
100
100
 
101
+ def chat_template_kwargs() -> dict[str, Any]:
102
+ """Optional kwargs forwarded to apply_chat_template (for example
103
+ {"enable_thinking": false} for thinking-mode models), passed by the
104
+ runner as a JSON hyperparameter so training text matches inference."""
105
+ raw = hp("chat_template_kwargs")
106
+ if not raw:
107
+ return {}
108
+ if isinstance(raw, dict):
109
+ return raw
110
+ try:
111
+ parsed = json.loads(str(raw))
112
+ return parsed if isinstance(parsed, dict) else {}
113
+ except json.JSONDecodeError:
114
+ return {}
115
+
116
+
101
117
  def row_to_text(tokenizer: Any, row: dict[str, Any]) -> str:
102
118
  messages = row["messages"]
103
119
  try:
@@ -105,6 +121,7 @@ def row_to_text(tokenizer: Any, row: dict[str, Any]) -> str:
105
121
  messages,
106
122
  tokenize=False,
107
123
  add_generation_prompt=False,
124
+ **chat_template_kwargs(),
108
125
  )
109
126
  except Exception:
110
127
  parts: list[str] = []