@tuned-tensor/local 0.1.9 → 0.2.0
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/CHANGELOG.md +11 -0
- package/README.md +7 -407
- package/dist/store.d.ts +2 -9
- package/dist/store.js +243 -32
- package/dist/store.js.map +1 -1
- package/docs/architecture.md +11 -8
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to TT Local will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.2.0 - 2026-07-04
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added a hybrid local state store: `metadata.sqlite` now indexes specs, runs,
|
|
10
|
+
run events, and models for CLI/dashboard queries while preserving the
|
|
11
|
+
transparent JSON/JSONL artifact layout. `tt-local store rebuild-index`
|
|
12
|
+
rebuilds SQLite metadata from canonical per-object files. The SQLite index
|
|
13
|
+
uses `better-sqlite3` instead of Node's experimental built-in SQLite API,
|
|
14
|
+
avoiding runtime experimental warnings on Node 22.
|
|
15
|
+
|
|
5
16
|
## 0.1.9 - 2026-07-03
|
|
6
17
|
|
|
7
18
|
### Added
|
package/README.md
CHANGED
|
@@ -1,419 +1,30 @@
|
|
|
1
1
|
# TT Local
|
|
2
2
|
|
|
3
|
-
Tuning tensors locally.
|
|
4
|
-
|
|
5
3
|
[](https://github.com/tunedtensor/tuned-tensor-local/actions/workflows/ci.yml)
|
|
6
4
|
[](https://www.npmjs.com/package/@tuned-tensor/local)
|
|
7
5
|
|
|
8
|
-
TT Local
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
It does not require the hosted Tuned Tensor CLI, cloud orchestration, Docker,
|
|
13
|
-
or a managed database.
|
|
14
|
-
|
|
15
|
-
## What Happens In A Run
|
|
6
|
+
TT Local runs Tuned Tensor-style fine-tuning jobs on your own machine. It keeps
|
|
7
|
+
specs, datasets, model artifacts, events, reports, and dashboard state on local
|
|
8
|
+
disk.
|
|
16
9
|
|
|
17
|
-
|
|
10
|
+
Usage docs:
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
2. Compile examples into a local training dataset.
|
|
21
|
-
3. Evaluate the original Hugging Face base model.
|
|
22
|
-
4. Fine-tune locally with uv, Transformers, and PEFT.
|
|
23
|
-
5. Evaluate the fine-tuned Hugging Face/PEFT artifact.
|
|
24
|
-
6. Compare baseline vs tuned outputs and write a report.
|
|
25
|
-
|
|
26
|
-
OpenRouter can optionally score generated outputs as an LLM judge. It does not
|
|
27
|
-
generate the baseline or tuned responses.
|
|
12
|
+
https://tunedtensor.com/docs/local-training
|
|
28
13
|
|
|
29
14
|
## Install
|
|
30
15
|
|
|
31
|
-
Install the published CLI:
|
|
32
|
-
|
|
33
16
|
```bash
|
|
34
17
|
npm install -g @tuned-tensor/local
|
|
35
18
|
tt-local info
|
|
36
19
|
```
|
|
37
20
|
|
|
38
|
-
For local development or Spark:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
git clone https://github.com/tunedtensor/tuned-tensor-local.git
|
|
42
|
-
cd tuned-tensor-local
|
|
43
|
-
npm install
|
|
44
|
-
npm run build
|
|
45
|
-
npm link
|
|
46
|
-
tt-local info
|
|
47
|
-
```
|
|
48
|
-
|
|
49
21
|
Real training also needs `uv`:
|
|
50
22
|
|
|
51
23
|
```bash
|
|
52
24
|
uv --version
|
|
53
25
|
```
|
|
54
26
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## First Run: Safe Dry Run
|
|
62
|
-
|
|
63
|
-
The included example config is a dry run. It validates the end-to-end local
|
|
64
|
-
workflow and writes artifacts without downloading models or starting GPU
|
|
65
|
-
training.
|
|
66
|
-
|
|
67
|
-
Create a local behavior spec:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
tt-local init --name "Support Bot" --model Qwen/Qwen3.5-2B
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Edit `tunedtensor.json` and replace the placeholder example with your task:
|
|
74
|
-
|
|
75
|
-
```json
|
|
76
|
-
{
|
|
77
|
-
"input": "Classify sentiment: I love this product.",
|
|
78
|
-
"output": "positive"
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Validate the spec and config:
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
tt-local validate --config examples/local-runner.json
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Run the dry workflow:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
tt-local run --config examples/local-runner.json
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Inspect the result:
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
tt-local runs list --config examples/local-runner.json
|
|
98
|
-
tt-local runs report <run-id> --config examples/local-runner.json
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Start the local dashboard:
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
tt-local serve --config examples/local-runner.json
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Open the printed local URL in your browser.
|
|
108
|
-
|
|
109
|
-
## Run Real Training
|
|
110
|
-
|
|
111
|
-
Create a config such as `local-runner.json` or `spark-runner.json`:
|
|
112
|
-
|
|
113
|
-
```json
|
|
114
|
-
{
|
|
115
|
-
"artifactRoot": "/home/eve/tt-local-artifacts",
|
|
116
|
-
"storeRoot": "/home/eve/tt-local-store",
|
|
117
|
-
"dryRun": false,
|
|
118
|
-
"training": {
|
|
119
|
-
"backend": "uv",
|
|
120
|
-
"project": "training/sft-local",
|
|
121
|
-
"script": "training/sft-local/src/train.py"
|
|
122
|
-
},
|
|
123
|
-
"evaluation": {
|
|
124
|
-
"inference": {
|
|
125
|
-
"provider": "transformers",
|
|
126
|
-
"project": "training/sft-local",
|
|
127
|
-
"script": "training/sft-local/src/evaluate.py",
|
|
128
|
-
"maxNewTokens": 256,
|
|
129
|
-
"temperature": 0,
|
|
130
|
-
"topP": 1
|
|
131
|
-
},
|
|
132
|
-
"scoring": {
|
|
133
|
-
"mode": "llm_judge",
|
|
134
|
-
"fallback": "exact_match"
|
|
135
|
-
},
|
|
136
|
-
"maxExamples": 10
|
|
137
|
-
},
|
|
138
|
-
"paths": {
|
|
139
|
-
"modelCache": "/home/eve/.cache/huggingface"
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
If you use OpenRouter judging, set an API key:
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
export OPENROUTER_API_KEY="your_openrouter_key"
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
`tt-local` also loads a `.env` file from the working directory. Existing
|
|
151
|
-
environment variables win.
|
|
152
|
-
|
|
153
|
-
Run the job:
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
tt-local doctor --config spark-runner.json
|
|
157
|
-
tt-local validate --config spark-runner.json
|
|
158
|
-
tt-local run --config spark-runner.json
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
`tt-local run` prints live stage updates to stderr and writes the final JSON
|
|
162
|
-
summary to stdout. Use `--verbose` to stream Python subprocess output, or
|
|
163
|
-
`--quiet` for JSON-only automation.
|
|
164
|
-
|
|
165
|
-
Watch progress:
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
tt-local runs watch <run-id> --config spark-runner.json
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
View the final report:
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
tt-local runs report <run-id> --config spark-runner.json
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Compare two completed runs:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
tt-local runs compare <run-id-a> <run-id-b> --config spark-runner.json
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
The comparison aligns shared eval prompts, separates newly added eval examples,
|
|
184
|
-
and measures judge score noise for identical baseline outputs.
|
|
185
|
-
|
|
186
|
-
## Configuration Basics
|
|
187
|
-
|
|
188
|
-
The main config fields are:
|
|
189
|
-
|
|
190
|
-
- `artifactRoot`: datasets, logs, model outputs, eval JSON, and run reports.
|
|
191
|
-
- `storeRoot`: run/spec/model metadata used by CLI listing and the dashboard.
|
|
192
|
-
- `dryRun`: when `true`, skips model loading and training.
|
|
193
|
-
- `training`: uv/Python training entrypoint and environment.
|
|
194
|
-
- `evaluation.inference`: how baseline and candidate outputs are generated.
|
|
195
|
-
- `evaluation.scoring`: how generated outputs are scored.
|
|
196
|
-
- `paths.modelCache`: Hugging Face cache location.
|
|
197
|
-
|
|
198
|
-
Supported inference providers:
|
|
199
|
-
|
|
200
|
-
- `"transformers"`: run the included local evaluator with Hugging Face/PEFT.
|
|
201
|
-
- `"command"`: call `baselineCommand` or `candidateCommand` for custom inference.
|
|
202
|
-
- `"none"`: skip inference and record empty local responses.
|
|
203
|
-
|
|
204
|
-
Supported scoring modes:
|
|
205
|
-
|
|
206
|
-
- `"exact_match"`: normalized exact match.
|
|
207
|
-
- `"llm_judge"`: OpenRouter judge, with exact-match fallback by default.
|
|
208
|
-
- `"json_fields"`: field-level comparison for structured JSON outputs.
|
|
209
|
-
|
|
210
|
-
When `evaluation.scoring.mode` is `"llm_judge"`, `fallback` controls judge
|
|
211
|
-
failures. `"exact_match"` keeps the run going and records fallback reasoning.
|
|
212
|
-
`"fail"` fails the run.
|
|
213
|
-
|
|
214
|
-
## Evaluation Behavior
|
|
215
|
-
|
|
216
|
-
`evaluation.maxExamples` caps how many examples are scored. If it is unset,
|
|
217
|
-
the request hyperparameter `max_eval_examples` is used. An explicit
|
|
218
|
-
`maxExamples` in the config wins. When capped, the runner uses a deterministic
|
|
219
|
-
seeded sample rather than a prefix, so sorted or grouped eval files do not
|
|
220
|
-
bias results. The seed defaults to a hash of the run id and can be pinned with
|
|
221
|
-
`evaluation.sampleSeed`.
|
|
222
|
-
|
|
223
|
-
For spec-based runs without `dataset_prebuilt`, the runner holds out about 20%
|
|
224
|
-
of the spec examples for evaluation, with at least one training example and one
|
|
225
|
-
holdout when possible. With only one spec example, evaluation runs on that
|
|
226
|
-
example and reports `eval_split: "spec_examples"`.
|
|
227
|
-
|
|
228
|
-
For prebuilt datasets, `dataset_prebuilt.training` is always copied into the
|
|
229
|
-
run artifact as the training set. Evaluation uses `dataset_prebuilt.test` when
|
|
230
|
-
present, then `dataset_prebuilt.validation`. If neither is provided, a real
|
|
231
|
-
run fails because evaluation would otherwise measure the training split. Set
|
|
232
|
-
`evaluation.allowPrebuiltTrainingEval: true` to allow that explicitly.
|
|
233
|
-
|
|
234
|
-
Baseline evaluations are cached under `<storeRoot>/cache/baseline-evals/`.
|
|
235
|
-
Re-running an unchanged spec with the same model, eval examples, generation
|
|
236
|
-
settings, and scoring config reuses the previous baseline report. Set
|
|
237
|
-
`evaluation.baselineCache: false` to disable.
|
|
238
|
-
|
|
239
|
-
Training progress from Python metric lines and tqdm progress bars is recorded
|
|
240
|
-
as run events, so `tt-local runs watch` and per-run `progress.jsonl` show
|
|
241
|
-
epoch, loss, step, percentage, and ETA when the trainer emits them.
|
|
242
|
-
|
|
243
|
-
## Structured JSON Scoring
|
|
244
|
-
|
|
245
|
-
For structured tasks, use field-level scoring instead of whole-output exact
|
|
246
|
-
matching:
|
|
247
|
-
|
|
248
|
-
```json
|
|
249
|
-
{
|
|
250
|
-
"evaluation": {
|
|
251
|
-
"scoring": {
|
|
252
|
-
"mode": "json_fields",
|
|
253
|
-
"fields": ["triage", "priority", "should_process"]
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
If `fields` is omitted, the evaluator scores every key in the expected JSON
|
|
260
|
-
object. A configured field missing from the expected JSON is always scored as
|
|
261
|
-
incorrect, so a misconfigured field list cannot inflate scores.
|
|
262
|
-
|
|
263
|
-
Reports still include `exact_match_rate`, but `avg_score`, `pass_rate`, and
|
|
264
|
-
`json_field_metrics` are based on the selected JSON fields.
|
|
265
|
-
|
|
266
|
-
## Labeling Data With A Teacher Model
|
|
267
|
-
|
|
268
|
-
`tt-local label` turns unlabeled inputs into training examples by asking a
|
|
269
|
-
stronger teacher model on OpenRouter to answer each row under your spec's
|
|
270
|
-
system message — the same instructions the fine-tuned model will see at
|
|
271
|
-
inference:
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
export OPENROUTER_API_KEY=... # or put it in .env
|
|
275
|
-
tt-local label rows.jsonl --output labeled.jsonl
|
|
276
|
-
tt-local label rows.csv --input-column text --model anthropic/claude-fable-5
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
Sources are JSONL (`{"input": "..."}` per line; rows that already carry an
|
|
280
|
-
`"output"` skip the teacher) or CSV with a header row and `--input-column`.
|
|
281
|
-
The system message comes from `tunedtensor.json` (or `--spec <path>`);
|
|
282
|
-
pass `--system-prompt "..."` to override it. Use `--dry-run` to parse,
|
|
283
|
-
sanitize, and estimate without calling the teacher.
|
|
284
|
-
|
|
285
|
-
Because rows are sent to OpenRouter, each row is sanitized first:
|
|
286
|
-
secret-like content (API keys, private keys, connection strings) blocks the
|
|
287
|
-
row, and PII (emails, phone numbers, SSNs, card numbers) is redacted before
|
|
288
|
-
sending. The labeled `{"input", "output"}` JSONL, a full per-row
|
|
289
|
-
`rows.jsonl` (including failures for review), and a job report are written
|
|
290
|
-
under `<artifactRoot>/labeling/<job-id>/`.
|
|
291
|
-
|
|
292
|
-
Teacher behavior is configured in the runner config; the model falls back to
|
|
293
|
-
`llm.model`:
|
|
294
|
-
|
|
295
|
-
```json
|
|
296
|
-
{
|
|
297
|
-
"labeling": {
|
|
298
|
-
"model": "anthropic/claude-fable-5",
|
|
299
|
-
"maxTokens": 2048,
|
|
300
|
-
"temperature": 0.2,
|
|
301
|
-
"concurrency": 4,
|
|
302
|
-
"maxAttempts": 3
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
## Thinking-Mode Models
|
|
308
|
-
|
|
309
|
-
Some models, such as `Qwen/Qwen3.5-4B`, may open a hidden thinking block by
|
|
310
|
-
default and consume the token budget before producing a visible answer. Forward
|
|
311
|
-
template kwargs to both evaluation and training:
|
|
312
|
-
|
|
313
|
-
```json
|
|
314
|
-
{
|
|
315
|
-
"evaluation": {
|
|
316
|
-
"inference": {
|
|
317
|
-
"chatTemplateKwargs": { "enable_thinking": false }
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
In `tunedtensor.json`, also set:
|
|
324
|
-
|
|
325
|
-
```json
|
|
326
|
-
{
|
|
327
|
-
"hyperparameters": {
|
|
328
|
-
"chat_template_kwargs": { "enable_thinking": false }
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
## Multimodal Examples
|
|
334
|
-
|
|
335
|
-
Multimodal runs use chat JSONL with structured user content. For
|
|
336
|
-
`image_text_to_text` models such as `Qwen/Qwen3-VL-2B-Instruct`, image parts
|
|
337
|
-
are loaded by the local trainer and evaluator:
|
|
338
|
-
|
|
339
|
-
```json
|
|
340
|
-
{
|
|
341
|
-
"messages": [
|
|
342
|
-
{ "role": "system", "content": "Answer chart questions concisely." },
|
|
343
|
-
{
|
|
344
|
-
"role": "user",
|
|
345
|
-
"content": [
|
|
346
|
-
{ "type": "image", "image": "charts/example.png" },
|
|
347
|
-
{ "type": "text", "text": "What is the blue value?" }
|
|
348
|
-
]
|
|
349
|
-
},
|
|
350
|
-
{ "role": "assistant", "content": "42" }
|
|
351
|
-
]
|
|
352
|
-
}
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
Image values in prebuilt JSONL may be absolute paths, paths relative to the
|
|
356
|
-
JSONL file, `file://` URIs, HTTP(S) URLs, or `data:` URIs. Behavior spec
|
|
357
|
-
examples can also use `input_assets` with `image`, `path`, `uri`, or
|
|
358
|
-
`data_uri`.
|
|
359
|
-
|
|
360
|
-
## Where Files Go
|
|
361
|
-
|
|
362
|
-
If `storeRoot` is omitted, `tt-local` uses `TT_LOCAL_HOME` or
|
|
363
|
-
`~/.tuned-tensor-local`.
|
|
364
|
-
|
|
365
|
-
Per-run artifacts include:
|
|
366
|
-
|
|
367
|
-
- `progress.jsonl`: stage changes and parsed training progress.
|
|
368
|
-
- `baseline-eval.json` and `candidate-eval.json`: generated outputs and scores.
|
|
369
|
-
- `baseline-eval.json.inference.log` and `candidate-eval.json.inference.log`:
|
|
370
|
-
local inference subprocess output.
|
|
371
|
-
- `training/training.log`: uv fine-tuning output.
|
|
372
|
-
- `run-report.json`: baseline, candidate, comparison, and artifact references.
|
|
373
|
-
|
|
374
|
-
## Useful Commands
|
|
375
|
-
|
|
376
|
-
```bash
|
|
377
|
-
tt-local init --name "Support Bot" --model Qwen/Qwen3.5-2B
|
|
378
|
-
tt-local doctor --config spark-runner.json
|
|
379
|
-
tt-local validate --config spark-runner.json
|
|
380
|
-
tt-local run --config spark-runner.json
|
|
381
|
-
tt-local run --config spark-runner.json --verbose
|
|
382
|
-
tt-local label rows.jsonl --output labeled.jsonl
|
|
383
|
-
tt-local runs list --config spark-runner.json
|
|
384
|
-
tt-local runs get <run-id> --config spark-runner.json
|
|
385
|
-
tt-local runs events <run-id> --config spark-runner.json
|
|
386
|
-
tt-local runs watch <run-id> --config spark-runner.json
|
|
387
|
-
tt-local runs report <run-id> --config spark-runner.json
|
|
388
|
-
tt-local runs compare <run-id-a> <run-id-b> --config spark-runner.json
|
|
389
|
-
tt-local models list --config spark-runner.json
|
|
390
|
-
tt-local serve --config spark-runner.json
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
## DGX Spark Notes
|
|
394
|
-
|
|
395
|
-
On the Spark host, confirm the GPU and uv are available:
|
|
396
|
-
|
|
397
|
-
```bash
|
|
398
|
-
nvidia-smi
|
|
399
|
-
uv --version
|
|
400
|
-
uv run python --version
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
Then clone, install, build, and link the CLI on the Spark:
|
|
404
|
-
|
|
405
|
-
```bash
|
|
406
|
-
git clone https://github.com/tunedtensor/tuned-tensor-local.git
|
|
407
|
-
cd tuned-tensor-local
|
|
408
|
-
npm install
|
|
409
|
-
npm run build
|
|
410
|
-
npm link
|
|
411
|
-
tt-local doctor --config examples/local-runner.json
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
Spark-specific details live in [docs/spark.md](docs/spark.md).
|
|
415
|
-
|
|
416
|
-
## Development
|
|
27
|
+
## Local Development
|
|
417
28
|
|
|
418
29
|
```bash
|
|
419
30
|
npm install
|
|
@@ -422,18 +33,7 @@ npm test
|
|
|
422
33
|
npm run build
|
|
423
34
|
```
|
|
424
35
|
|
|
425
|
-
|
|
426
|
-
runs when a GitHub Release is published and requires an `NPM_TOKEN` repository
|
|
427
|
-
secret.
|
|
428
|
-
|
|
429
|
-
## Notes
|
|
430
|
-
|
|
431
|
-
- Real training uses `training/sft-local/src/train.py`.
|
|
432
|
-
- Real evaluation uses `training/sft-local/src/evaluate.py`.
|
|
433
|
-
- The default evaluation path uses Hugging Face/PEFT artifacts directly; it
|
|
434
|
-
does not convert models to GGUF.
|
|
435
|
-
- `validate` and `run` warn about unknown hyperparameter keys and ignore them.
|
|
436
|
-
- Release notes are in [CHANGELOG.md](CHANGELOG.md).
|
|
36
|
+
Release notes are in [CHANGELOG.md](CHANGELOG.md).
|
|
437
37
|
|
|
438
38
|
## License
|
|
439
39
|
|
package/dist/store.d.ts
CHANGED
|
@@ -28,9 +28,6 @@ export interface LocalRunEvent {
|
|
|
28
28
|
details?: Record<string, unknown>;
|
|
29
29
|
occurred_at: string;
|
|
30
30
|
}
|
|
31
|
-
export interface LocalRunIndexRecord extends LocalRunState {
|
|
32
|
-
catalog_updated_at: string;
|
|
33
|
-
}
|
|
34
31
|
export interface LocalModelRecord {
|
|
35
32
|
id: string;
|
|
36
33
|
run_id: string;
|
|
@@ -74,7 +71,7 @@ export interface LocalStore {
|
|
|
74
71
|
completeRun(report: RunReport, artifactDir: string, reportPath: string): Promise<LocalRunState>;
|
|
75
72
|
failRun(runId: string, error: string): Promise<LocalRunState>;
|
|
76
73
|
cancelRun(runId: string): Promise<void>;
|
|
77
|
-
listRuns(): Promise<
|
|
74
|
+
listRuns(): Promise<LocalRunState[]>;
|
|
78
75
|
getRun(id: string): Promise<LocalRunState>;
|
|
79
76
|
getRunEvents(id: string): Promise<LocalRunEvent[]>;
|
|
80
77
|
getRunReport(id: string): Promise<RunReport>;
|
|
@@ -89,10 +86,6 @@ export declare function localStorePaths(root: string): {
|
|
|
89
86
|
runsDir: string;
|
|
90
87
|
modelsDir: string;
|
|
91
88
|
datasetsDir: string;
|
|
92
|
-
|
|
93
|
-
runsCatalog: string;
|
|
94
|
-
specsCatalog: string;
|
|
95
|
-
modelsCatalog: string;
|
|
96
|
-
datasetsCatalog: string;
|
|
89
|
+
metadataDb: string;
|
|
97
90
|
};
|
|
98
91
|
export declare function createLocalStore(root?: string): LocalStore;
|
package/dist/store.js
CHANGED
|
@@ -2,6 +2,9 @@ import { appendFile, copyFile, mkdir, readdir, readFile, rename, stat, writeFile
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const BetterSqlite = require("better-sqlite3");
|
|
5
8
|
export function defaultLocalHome() {
|
|
6
9
|
return resolve(process.env.TT_LOCAL_HOME ?? join(homedir(), ".tuned-tensor-local"));
|
|
7
10
|
}
|
|
@@ -12,11 +15,7 @@ export function localStorePaths(root) {
|
|
|
12
15
|
runsDir: join(root, "runs"),
|
|
13
16
|
modelsDir: join(root, "models"),
|
|
14
17
|
datasetsDir: join(root, "datasets"),
|
|
15
|
-
|
|
16
|
-
runsCatalog: join(root, "catalog", "runs.jsonl"),
|
|
17
|
-
specsCatalog: join(root, "catalog", "specs.jsonl"),
|
|
18
|
-
modelsCatalog: join(root, "catalog", "models.jsonl"),
|
|
19
|
-
datasetsCatalog: join(root, "catalog", "datasets.jsonl"),
|
|
18
|
+
metadataDb: join(root, "metadata.sqlite"),
|
|
20
19
|
};
|
|
21
20
|
}
|
|
22
21
|
async function exists(path) {
|
|
@@ -41,15 +40,6 @@ async function appendJsonl(path, value) {
|
|
|
41
40
|
await mkdir(dirname(path), { recursive: true });
|
|
42
41
|
await appendFile(path, `${JSON.stringify(value)}\n`, "utf8");
|
|
43
42
|
}
|
|
44
|
-
async function readJsonlLatestById(path) {
|
|
45
|
-
if (!(await exists(path)))
|
|
46
|
-
return [];
|
|
47
|
-
const rows = (await readFile(path, "utf8"))
|
|
48
|
-
.split(/\r?\n/)
|
|
49
|
-
.filter(Boolean)
|
|
50
|
-
.map((line) => JSON.parse(line));
|
|
51
|
-
return [...new Map(rows.map((row) => [row.id, row])).values()];
|
|
52
|
-
}
|
|
53
43
|
async function readJsonl(path) {
|
|
54
44
|
if (!(await exists(path)))
|
|
55
45
|
return [];
|
|
@@ -64,6 +54,213 @@ async function copyIfExists(from, to) {
|
|
|
64
54
|
await mkdir(dirname(to), { recursive: true });
|
|
65
55
|
await copyFile(from, to);
|
|
66
56
|
}
|
|
57
|
+
function initMetadataDb(db) {
|
|
58
|
+
db.exec(`
|
|
59
|
+
PRAGMA journal_mode = WAL;
|
|
60
|
+
PRAGMA foreign_keys = ON;
|
|
61
|
+
PRAGMA busy_timeout = 5000;
|
|
62
|
+
|
|
63
|
+
CREATE TABLE IF NOT EXISTS specs (
|
|
64
|
+
id TEXT PRIMARY KEY,
|
|
65
|
+
name TEXT NOT NULL,
|
|
66
|
+
base_model TEXT NOT NULL,
|
|
67
|
+
path TEXT NOT NULL,
|
|
68
|
+
created_at TEXT NOT NULL,
|
|
69
|
+
updated_at TEXT NOT NULL
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
CREATE TABLE IF NOT EXISTS runs (
|
|
73
|
+
id TEXT PRIMARY KEY,
|
|
74
|
+
behavior_spec_id TEXT NOT NULL,
|
|
75
|
+
user_id TEXT NOT NULL,
|
|
76
|
+
run_number INTEGER NOT NULL,
|
|
77
|
+
status TEXT NOT NULL,
|
|
78
|
+
current_stage TEXT NOT NULL,
|
|
79
|
+
status_message TEXT NOT NULL,
|
|
80
|
+
artifact_dir TEXT NOT NULL,
|
|
81
|
+
report_path TEXT,
|
|
82
|
+
model_id TEXT,
|
|
83
|
+
error TEXT,
|
|
84
|
+
base_model TEXT NOT NULL,
|
|
85
|
+
spec_name TEXT NOT NULL,
|
|
86
|
+
created_at TEXT NOT NULL,
|
|
87
|
+
updated_at TEXT NOT NULL,
|
|
88
|
+
started_at TEXT,
|
|
89
|
+
completed_at TEXT
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS run_events (
|
|
93
|
+
id TEXT PRIMARY KEY,
|
|
94
|
+
run_id TEXT NOT NULL,
|
|
95
|
+
stage TEXT NOT NULL,
|
|
96
|
+
status TEXT NOT NULL,
|
|
97
|
+
message TEXT NOT NULL,
|
|
98
|
+
details_json TEXT,
|
|
99
|
+
occurred_at TEXT NOT NULL
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
CREATE TABLE IF NOT EXISTS models (
|
|
103
|
+
id TEXT PRIMARY KEY,
|
|
104
|
+
run_id TEXT NOT NULL,
|
|
105
|
+
behavior_spec_id TEXT NOT NULL,
|
|
106
|
+
name TEXT NOT NULL,
|
|
107
|
+
provider TEXT NOT NULL,
|
|
108
|
+
base_model TEXT NOT NULL,
|
|
109
|
+
artifact_uri TEXT NOT NULL,
|
|
110
|
+
artifact_dir TEXT NOT NULL,
|
|
111
|
+
metrics_json TEXT,
|
|
112
|
+
created_at TEXT NOT NULL
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_runs_updated_at ON runs(updated_at DESC);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_specs_updated_at ON specs(updated_at DESC);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_models_created_at ON models(created_at DESC);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_run_events_run_time ON run_events(run_id, occurred_at);
|
|
119
|
+
`);
|
|
120
|
+
}
|
|
121
|
+
function rowToRunState(row) {
|
|
122
|
+
return {
|
|
123
|
+
id: row.id,
|
|
124
|
+
behavior_spec_id: row.behavior_spec_id,
|
|
125
|
+
user_id: row.user_id,
|
|
126
|
+
run_number: row.run_number,
|
|
127
|
+
status: row.status,
|
|
128
|
+
current_stage: row.current_stage,
|
|
129
|
+
status_message: row.status_message,
|
|
130
|
+
artifact_dir: row.artifact_dir,
|
|
131
|
+
base_model: row.base_model,
|
|
132
|
+
spec_name: row.spec_name,
|
|
133
|
+
created_at: row.created_at,
|
|
134
|
+
updated_at: row.updated_at,
|
|
135
|
+
...(row.report_path ? { report_path: row.report_path } : {}),
|
|
136
|
+
...(row.model_id ? { model_id: row.model_id } : {}),
|
|
137
|
+
...(row.error ? { error: row.error } : {}),
|
|
138
|
+
...(row.started_at ? { started_at: row.started_at } : {}),
|
|
139
|
+
...(row.completed_at ? { completed_at: row.completed_at } : {}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function rowToSpec(row) {
|
|
143
|
+
return {
|
|
144
|
+
id: row.id,
|
|
145
|
+
name: row.name,
|
|
146
|
+
base_model: row.base_model,
|
|
147
|
+
path: row.path,
|
|
148
|
+
created_at: row.created_at,
|
|
149
|
+
updated_at: row.updated_at,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function rowToModel(row) {
|
|
153
|
+
return {
|
|
154
|
+
id: row.id,
|
|
155
|
+
run_id: row.run_id,
|
|
156
|
+
behavior_spec_id: row.behavior_spec_id,
|
|
157
|
+
name: row.name,
|
|
158
|
+
provider: row.provider,
|
|
159
|
+
base_model: row.base_model,
|
|
160
|
+
artifact_uri: row.artifact_uri,
|
|
161
|
+
artifact_dir: row.artifact_dir,
|
|
162
|
+
metrics: row.metrics_json ? JSON.parse(row.metrics_json) : null,
|
|
163
|
+
created_at: row.created_at,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function rowToEvent(row) {
|
|
167
|
+
return {
|
|
168
|
+
id: row.id,
|
|
169
|
+
run_id: row.run_id,
|
|
170
|
+
stage: row.stage,
|
|
171
|
+
status: row.status,
|
|
172
|
+
message: row.message,
|
|
173
|
+
occurred_at: row.occurred_at,
|
|
174
|
+
...(row.details_json ? { details: JSON.parse(row.details_json) } : {}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function withMetadataDb(paths, fn) {
|
|
178
|
+
const db = new BetterSqlite(paths.metadataDb);
|
|
179
|
+
try {
|
|
180
|
+
initMetadataDb(db);
|
|
181
|
+
return fn(db);
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
db.close();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function runTransaction(db, fn) {
|
|
188
|
+
db.exec("BEGIN IMMEDIATE");
|
|
189
|
+
try {
|
|
190
|
+
const result = fn();
|
|
191
|
+
db.exec("COMMIT");
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
db.exec("ROLLBACK");
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function bindRunState(stmt, state) {
|
|
200
|
+
stmt.run(state.id, state.behavior_spec_id, state.user_id, state.run_number, state.status, state.current_stage, state.status_message, state.artifact_dir, state.report_path ?? null, state.model_id ?? null, state.error ?? null, state.base_model, state.spec_name, state.created_at, state.updated_at, state.started_at ?? null, state.completed_at ?? null);
|
|
201
|
+
}
|
|
202
|
+
function upsertRun(db, state) {
|
|
203
|
+
bindRunState(db.prepare(`
|
|
204
|
+
INSERT INTO runs (
|
|
205
|
+
id, behavior_spec_id, user_id, run_number, status, current_stage,
|
|
206
|
+
status_message, artifact_dir, report_path, model_id, error, base_model,
|
|
207
|
+
spec_name, created_at, updated_at, started_at, completed_at
|
|
208
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
209
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
210
|
+
behavior_spec_id = excluded.behavior_spec_id,
|
|
211
|
+
user_id = excluded.user_id,
|
|
212
|
+
run_number = excluded.run_number,
|
|
213
|
+
status = excluded.status,
|
|
214
|
+
current_stage = excluded.current_stage,
|
|
215
|
+
status_message = excluded.status_message,
|
|
216
|
+
artifact_dir = excluded.artifact_dir,
|
|
217
|
+
report_path = excluded.report_path,
|
|
218
|
+
model_id = excluded.model_id,
|
|
219
|
+
error = excluded.error,
|
|
220
|
+
base_model = excluded.base_model,
|
|
221
|
+
spec_name = excluded.spec_name,
|
|
222
|
+
created_at = excluded.created_at,
|
|
223
|
+
updated_at = excluded.updated_at,
|
|
224
|
+
started_at = excluded.started_at,
|
|
225
|
+
completed_at = excluded.completed_at
|
|
226
|
+
`), state);
|
|
227
|
+
}
|
|
228
|
+
function upsertSpec(db, record) {
|
|
229
|
+
db.prepare(`
|
|
230
|
+
INSERT INTO specs (id, name, base_model, path, created_at, updated_at)
|
|
231
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
232
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
233
|
+
name = excluded.name,
|
|
234
|
+
base_model = excluded.base_model,
|
|
235
|
+
path = excluded.path,
|
|
236
|
+
created_at = excluded.created_at,
|
|
237
|
+
updated_at = excluded.updated_at
|
|
238
|
+
`).run(record.id, record.name, record.base_model, record.path, record.created_at, record.updated_at);
|
|
239
|
+
}
|
|
240
|
+
function upsertModel(db, model) {
|
|
241
|
+
db.prepare(`
|
|
242
|
+
INSERT INTO models (
|
|
243
|
+
id, run_id, behavior_spec_id, name, provider, base_model,
|
|
244
|
+
artifact_uri, artifact_dir, metrics_json, created_at
|
|
245
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
246
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
247
|
+
run_id = excluded.run_id,
|
|
248
|
+
behavior_spec_id = excluded.behavior_spec_id,
|
|
249
|
+
name = excluded.name,
|
|
250
|
+
provider = excluded.provider,
|
|
251
|
+
base_model = excluded.base_model,
|
|
252
|
+
artifact_uri = excluded.artifact_uri,
|
|
253
|
+
artifact_dir = excluded.artifact_dir,
|
|
254
|
+
metrics_json = excluded.metrics_json,
|
|
255
|
+
created_at = excluded.created_at
|
|
256
|
+
`).run(model.id, model.run_id, model.behavior_spec_id, model.name, model.provider, model.base_model, model.artifact_uri, model.artifact_dir, model.metrics ? JSON.stringify(model.metrics) : null, model.created_at);
|
|
257
|
+
}
|
|
258
|
+
function insertEvent(db, event) {
|
|
259
|
+
db.prepare(`
|
|
260
|
+
INSERT OR IGNORE INTO run_events (id, run_id, stage, status, message, details_json, occurred_at)
|
|
261
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
262
|
+
`).run(event.id, event.run_id, event.stage, event.status, event.message, event.details ? JSON.stringify(event.details) : null, event.occurred_at);
|
|
263
|
+
}
|
|
67
264
|
export function createLocalStore(root = defaultLocalHome()) {
|
|
68
265
|
const resolvedRoot = resolve(root);
|
|
69
266
|
const paths = localStorePaths(resolvedRoot);
|
|
@@ -81,12 +278,12 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
81
278
|
mkdir(paths.runsDir, { recursive: true }),
|
|
82
279
|
mkdir(paths.modelsDir, { recursive: true }),
|
|
83
280
|
mkdir(paths.datasetsDir, { recursive: true }),
|
|
84
|
-
mkdir(paths.catalogDir, { recursive: true }),
|
|
85
281
|
]);
|
|
282
|
+
withMetadataDb(paths, () => undefined);
|
|
86
283
|
}
|
|
87
284
|
async function writeRunState(state) {
|
|
88
285
|
await writeJsonAtomic(runStatePath(state.id), state);
|
|
89
|
-
|
|
286
|
+
withMetadataDb(paths, (db) => upsertRun(db, state));
|
|
90
287
|
return state;
|
|
91
288
|
}
|
|
92
289
|
async function appendRunEvent(state, event) {
|
|
@@ -104,11 +301,15 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
104
301
|
message: row.message,
|
|
105
302
|
...(row.details ? { details: row.details } : {}),
|
|
106
303
|
});
|
|
304
|
+
withMetadataDb(paths, (db) => insertEvent(db, row));
|
|
107
305
|
}
|
|
108
306
|
async function resolveRunId(id) {
|
|
307
|
+
await ensure();
|
|
109
308
|
if (await exists(runStatePath(id)))
|
|
110
309
|
return id;
|
|
111
|
-
const records =
|
|
310
|
+
const records = withMetadataDb(paths, (db) => db.prepare(`
|
|
311
|
+
SELECT * FROM runs WHERE id = ? OR id LIKE ? ORDER BY updated_at DESC
|
|
312
|
+
`).all(id, `${id}%`)).map(rowToRunState);
|
|
112
313
|
const record = records.find((row) => row.id === id || row.id.startsWith(id));
|
|
113
314
|
if (!record)
|
|
114
315
|
throw new Error(`Run not found: ${id}`);
|
|
@@ -124,8 +325,7 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
124
325
|
async importSpec(specId, spec) {
|
|
125
326
|
await ensure();
|
|
126
327
|
const now = new Date().toISOString();
|
|
127
|
-
const existingRecord = (
|
|
128
|
-
.find((row) => row.id === specId);
|
|
328
|
+
const existingRecord = withMetadataDb(paths, (db) => db.prepare("SELECT * FROM specs WHERE id = ?").get(specId));
|
|
129
329
|
const record = {
|
|
130
330
|
id: specId,
|
|
131
331
|
name: spec.name,
|
|
@@ -135,13 +335,12 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
135
335
|
updated_at: now,
|
|
136
336
|
};
|
|
137
337
|
await writeJsonAtomic(specPath(specId), spec);
|
|
138
|
-
|
|
338
|
+
withMetadataDb(paths, (db) => upsertSpec(db, record));
|
|
139
339
|
return record;
|
|
140
340
|
},
|
|
141
341
|
async listSpecs() {
|
|
142
342
|
await ensure();
|
|
143
|
-
return (
|
|
144
|
-
.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
|
|
343
|
+
return withMetadataDb(paths, (db) => db.prepare("SELECT * FROM specs ORDER BY updated_at DESC").all().map(rowToSpec));
|
|
145
344
|
},
|
|
146
345
|
async getSpec(id) {
|
|
147
346
|
const records = await this.listSpecs();
|
|
@@ -222,7 +421,7 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
222
421
|
created_at: completedAt,
|
|
223
422
|
};
|
|
224
423
|
await writeJsonAtomic(modelPath(model.id), model);
|
|
225
|
-
|
|
424
|
+
withMetadataDb(paths, (db) => upsertModel(db, model));
|
|
226
425
|
return state;
|
|
227
426
|
},
|
|
228
427
|
async failRun(runId, error) {
|
|
@@ -256,12 +455,16 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
256
455
|
},
|
|
257
456
|
async listRuns() {
|
|
258
457
|
await ensure();
|
|
259
|
-
return (
|
|
260
|
-
.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
|
|
458
|
+
return withMetadataDb(paths, (db) => db.prepare("SELECT * FROM runs ORDER BY updated_at DESC").all().map(rowToRunState));
|
|
261
459
|
},
|
|
262
460
|
getRun,
|
|
263
461
|
async getRunEvents(id) {
|
|
264
462
|
const state = await getRun(id);
|
|
463
|
+
const events = withMetadataDb(paths, (db) => db.prepare(`
|
|
464
|
+
SELECT * FROM run_events WHERE run_id = ? ORDER BY occurred_at ASC
|
|
465
|
+
`).all(state.id)).map(rowToEvent);
|
|
466
|
+
if (events.length > 0)
|
|
467
|
+
return events;
|
|
265
468
|
return readJsonl(runEventsPath(state.id));
|
|
266
469
|
},
|
|
267
470
|
async getRunReport(id) {
|
|
@@ -276,8 +479,7 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
276
479
|
},
|
|
277
480
|
async listModels() {
|
|
278
481
|
await ensure();
|
|
279
|
-
return (
|
|
280
|
-
.sort((a, b) => b.created_at.localeCompare(a.created_at));
|
|
482
|
+
return withMetadataDb(paths, (db) => db.prepare("SELECT * FROM models ORDER BY created_at DESC").all().map(rowToModel));
|
|
281
483
|
},
|
|
282
484
|
async getModel(id) {
|
|
283
485
|
const models = await this.listModels();
|
|
@@ -289,14 +491,16 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
289
491
|
async rebuildIndexes() {
|
|
290
492
|
await ensure();
|
|
291
493
|
const runRecords = [];
|
|
494
|
+
const eventRecords = [];
|
|
292
495
|
for (const entry of await readdir(paths.runsDir, { withFileTypes: true }).catch(() => [])) {
|
|
293
496
|
if (!entry.isDirectory())
|
|
294
497
|
continue;
|
|
295
498
|
const statePath = runStatePath(entry.name);
|
|
296
499
|
if (await exists(statePath)) {
|
|
297
500
|
const state = await readJson(statePath);
|
|
298
|
-
runRecords.push(
|
|
501
|
+
runRecords.push(state);
|
|
299
502
|
}
|
|
503
|
+
eventRecords.push(...await readJsonl(runEventsPath(entry.name)));
|
|
300
504
|
}
|
|
301
505
|
const specRecords = [];
|
|
302
506
|
for (const entry of await readdir(paths.specsDir, { withFileTypes: true }).catch(() => [])) {
|
|
@@ -317,10 +521,17 @@ export function createLocalStore(root = defaultLocalHome()) {
|
|
|
317
521
|
if (await exists(path))
|
|
318
522
|
modelRecords.push(await readJson(path));
|
|
319
523
|
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
524
|
+
withMetadataDb(paths, (db) => runTransaction(db, () => {
|
|
525
|
+
db.exec("DELETE FROM run_events; DELETE FROM runs; DELETE FROM specs; DELETE FROM models;");
|
|
526
|
+
for (const run of runRecords)
|
|
527
|
+
upsertRun(db, run);
|
|
528
|
+
for (const spec of specRecords)
|
|
529
|
+
upsertSpec(db, spec);
|
|
530
|
+
for (const model of modelRecords)
|
|
531
|
+
upsertModel(db, model);
|
|
532
|
+
for (const event of eventRecords)
|
|
533
|
+
insertEvent(db, event);
|
|
534
|
+
}));
|
|
324
535
|
},
|
|
325
536
|
};
|
|
326
537
|
}
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/docs/architecture.md
CHANGED
|
@@ -13,8 +13,9 @@ packaged as a standalone CLI.
|
|
|
13
13
|
compatible hosted exports.
|
|
14
14
|
- Artifact store: writes datasets, logs, model outputs, and reports beneath a
|
|
15
15
|
configured local artifact root.
|
|
16
|
-
- Local state store:
|
|
17
|
-
records
|
|
16
|
+
- Local state store: keeps a SQLite metadata index for specs, runs, progress
|
|
17
|
+
events, and model records while preserving JSON/JSONL files under a
|
|
18
|
+
configured `storeRoot` for portable artifacts, recovery, and inspection.
|
|
18
19
|
- Training adapter: launches a uv-managed Python process with local input,
|
|
19
20
|
model cache, and output directories passed through environment variables.
|
|
20
21
|
- Evaluation adapter: runs local Hugging Face/PEFT inference for baseline and
|
|
@@ -43,7 +44,7 @@ The first runnable milestone should support:
|
|
|
43
44
|
- one local run at a time;
|
|
44
45
|
- one GPU device;
|
|
45
46
|
- local filesystem artifacts;
|
|
46
|
-
-
|
|
47
|
+
- SQLite-backed run/model/spec tracking with recoverable JSON files;
|
|
47
48
|
- standalone `tt-local init`, `validate`, `run`, `serve`, and inspection
|
|
48
49
|
commands;
|
|
49
50
|
- uv-based training;
|
|
@@ -76,21 +77,23 @@ comparison less direct.
|
|
|
76
77
|
|
|
77
78
|
The local store is intentionally transparent and easy to back up:
|
|
78
79
|
|
|
80
|
+
- `metadata.sqlite`
|
|
79
81
|
- `specs/<spec-id>/spec.json`
|
|
80
82
|
- `runs/<run-id>/request.json`
|
|
81
83
|
- `runs/<run-id>/state.json`
|
|
82
84
|
- `runs/<run-id>/progress.jsonl`
|
|
83
85
|
- `runs/<run-id>/run-report.json`
|
|
84
86
|
- `models/<model-id>/model.json`
|
|
85
|
-
- `catalog/*.jsonl`
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
SQLite is the primary metadata index for CLI and dashboard listings. The
|
|
89
|
+
per-object JSON files remain the recoverable source for artifacts and
|
|
90
|
+
human-readable inspection. `tt-local store rebuild-index` can reconstruct the
|
|
91
|
+
SQLite index from the canonical per-object files.
|
|
89
92
|
|
|
90
93
|
## Dashboard API
|
|
91
94
|
|
|
92
|
-
The local server is a lightweight Node HTTP server
|
|
93
|
-
Current endpoints include:
|
|
95
|
+
The local server is a lightweight Node HTTP server backed by the local state
|
|
96
|
+
store. Current endpoints include:
|
|
94
97
|
|
|
95
98
|
- `GET /api/health`
|
|
96
99
|
- `GET /api/runs`, `GET /api/runs/:id`, `GET /api/runs/:id/events`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tuned-tensor/local",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "TT Local: tuning tensors locally on hardware you control.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"private": false,
|
|
@@ -34,11 +34,13 @@
|
|
|
34
34
|
"node": ">=22"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
37
38
|
"@types/node": "^25.0.0",
|
|
38
39
|
"tsx": "^4.22.4",
|
|
39
40
|
"typescript": "^6.0.0"
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|
|
43
|
+
"better-sqlite3": "^12.11.1",
|
|
42
44
|
"zod": "^4.4.3"
|
|
43
45
|
}
|
|
44
46
|
}
|