@tuned-tensor/local 0.2.9 → 0.3.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +84 -210
  3. package/dist/artifacts.d.ts +3 -4
  4. package/dist/artifacts.js +55 -33
  5. package/dist/artifacts.js.map +1 -1
  6. package/dist/compare.d.ts +1 -8
  7. package/dist/compare.js +1 -23
  8. package/dist/compare.js.map +1 -1
  9. package/dist/contracts.d.ts +59 -366
  10. package/dist/contracts.js +73 -224
  11. package/dist/contracts.js.map +1 -1
  12. package/dist/dataset.d.ts +2 -4
  13. package/dist/dataset.js +31 -125
  14. package/dist/dataset.js.map +1 -1
  15. package/dist/doctor.d.ts +2 -3
  16. package/dist/doctor.js +23 -161
  17. package/dist/doctor.js.map +1 -1
  18. package/dist/evaluation.d.ts +11 -71
  19. package/dist/evaluation.js +212 -572
  20. package/dist/evaluation.js.map +1 -1
  21. package/dist/huggingface-cache.d.ts +8 -7
  22. package/dist/huggingface-cache.js +16 -8
  23. package/dist/huggingface-cache.js.map +1 -1
  24. package/dist/index.d.ts +0 -10
  25. package/dist/index.js +203 -626
  26. package/dist/index.js.map +1 -1
  27. package/dist/local-project.d.ts +1 -11
  28. package/dist/local-project.js +33 -61
  29. package/dist/local-project.js.map +1 -1
  30. package/dist/model-registry.d.ts +3 -16
  31. package/dist/model-registry.js +76 -292
  32. package/dist/model-registry.js.map +1 -1
  33. package/dist/model-server.d.ts +1 -2
  34. package/dist/model-server.js +9 -18
  35. package/dist/model-server.js.map +1 -1
  36. package/dist/orchestrator.d.ts +11 -25
  37. package/dist/orchestrator.js +246 -566
  38. package/dist/orchestrator.js.map +1 -1
  39. package/dist/prefetch.d.ts +1 -5
  40. package/dist/prefetch.js +14 -19
  41. package/dist/prefetch.js.map +1 -1
  42. package/dist/process-runner.d.ts +10 -29
  43. package/dist/process-runner.js +63 -169
  44. package/dist/process-runner.js.map +1 -1
  45. package/dist/process-training.d.ts +0 -1
  46. package/dist/process-training.js +10 -87
  47. package/dist/process-training.js.map +1 -1
  48. package/dist/store.d.ts +1 -3
  49. package/dist/store.js +92 -290
  50. package/dist/store.js.map +1 -1
  51. package/docs/architecture.md +87 -152
  52. package/docs/spark.md +66 -97
  53. package/examples/dry-runner.json +14 -0
  54. package/examples/local-runner.json +8 -6
  55. package/examples/smoke-spec.json +41 -0
  56. package/package.json +6 -6
  57. package/training/local-runner/pyproject.toml +0 -5
  58. package/training/local-runner/src/evaluate.py +89 -234
  59. package/training/local-runner/src/model_contract.py +47 -0
  60. package/training/local-runner/src/prefetch.py +18 -4
  61. package/training/local-runner/src/serve.py +54 -115
  62. package/training/local-runner/src/sft_data.py +97 -0
  63. package/training/local-runner/src/train.py +146 -346
  64. package/training/local-runner/uv.lock +0 -1197
  65. package/dist/labeling-sanitize.d.ts +0 -31
  66. package/dist/labeling-sanitize.js +0 -158
  67. package/dist/labeling-sanitize.js.map +0 -1
  68. package/dist/labeling.d.ts +0 -155
  69. package/dist/labeling.js +0 -496
  70. package/dist/labeling.js.map +0 -1
  71. package/dist/openrouter.d.ts +0 -29
  72. package/dist/openrouter.js +0 -66
  73. package/dist/openrouter.js.map +0 -1
  74. package/dist/server.d.ts +0 -9
  75. package/dist/server.js +0 -211
  76. package/dist/server.js.map +0 -1
  77. package/docs/local-workflow-remediation-2026-07-13.md +0 -130
  78. package/docs/local-workflow-ux-review-2026-07-13.md +0 -458
  79. package/examples/dpo-preferences.jsonl +0 -2
  80. package/examples/dpo-run-request.json +0 -34
  81. package/examples/smoke-run-request.json +0 -34
  82. package/training/local-runner/src/train_dpo.py +0 -286
package/dist/labeling.js DELETED
@@ -1,496 +0,0 @@
1
- /**
2
- * Local teacher-labeling job, ported from the tuned-tensor-runs labeling
3
- * workflow. Reads an unlabeled JSONL or CSV source, sanitizes each row, sends
4
- * pending rows to an OpenRouter teacher model under the spec's system message
5
- * (the same message the fine-tuned model will see at inference), and writes a
6
- * labeled {"input","output"} JSONL plus a job report under the artifact root.
7
- *
8
- * Unlike the eval judge there is no JSON output schema (the teacher's output
9
- * IS the training label, free text) and no heuristic fallback — a failed call
10
- * must surface as a failed row, never a fabricated label.
11
- */
12
- import { randomUUID } from "node:crypto";
13
- import { mkdir, readFile, writeFile } from "node:fs/promises";
14
- import { dirname, join, resolve } from "node:path";
15
- import { isRetryableOpenRouterError, openRouterChat, } from "./openrouter.js";
16
- import { sanitizeLabelingRow, } from "./labeling-sanitize.js";
17
- /** Per-row input cap; larger documents should be chunked upstream. */
18
- export const MAX_INPUT_CHARS = 32_000;
19
- export const MAX_PARSE_ERRORS = 50;
20
- function pushError(errors, message) {
21
- if (errors.length >= MAX_PARSE_ERRORS) {
22
- if (errors[errors.length - 1]?.startsWith("...") === false) {
23
- errors.push(`... additional errors truncated (showing first ${MAX_PARSE_ERRORS})`);
24
- }
25
- return false;
26
- }
27
- errors.push(message);
28
- return true;
29
- }
30
- function overLimitError(input) {
31
- return input.length > MAX_INPUT_CHARS
32
- ? `input exceeds ${MAX_INPUT_CHARS.toLocaleString()} characters`
33
- : null;
34
- }
35
- /**
36
- * Parse a JSONL source of {"input": string, "output"?: string} rows. Rows
37
- * that already carry an "output" skip the teacher and land directly as
38
- * labeled. Collects errors instead of throwing; callers reject the job when
39
- * `errors` is non-empty.
40
- */
41
- export function parseUnlabeledJsonl(text, maxRows) {
42
- const lines = text.split("\n").filter((line) => line.trim().length > 0);
43
- const rows = [];
44
- const failedRows = [];
45
- const errors = [];
46
- if (lines.length === 0) {
47
- errors.push("File is empty");
48
- return { rows, failedRows, errors };
49
- }
50
- if (lines.length > maxRows) {
51
- errors.push(`File has ${lines.length.toLocaleString()} rows; the limit is ${maxRows.toLocaleString()} per labeling job`);
52
- return { rows, failedRows, errors };
53
- }
54
- for (let i = 0; i < lines.length; i++) {
55
- const lineLabel = `Line ${i + 1}`;
56
- let parsed;
57
- try {
58
- parsed = JSON.parse(lines[i]);
59
- }
60
- catch {
61
- if (!pushError(errors, `${lineLabel}: invalid JSON`))
62
- break;
63
- continue;
64
- }
65
- if (typeof parsed !== "object" ||
66
- parsed === null ||
67
- Array.isArray(parsed) ||
68
- typeof parsed.input !== "string") {
69
- if (!pushError(errors, `${lineLabel}: row must be {"input": string}`))
70
- break;
71
- continue;
72
- }
73
- const obj = parsed;
74
- const input = obj.input;
75
- if (input.trim().length === 0) {
76
- pushError(errors, `${lineLabel}: input is empty`);
77
- continue;
78
- }
79
- const limitError = overLimitError(input);
80
- if (limitError) {
81
- failedRows.push({ rowIndex: i, input, error: `${lineLabel}: ${limitError}` });
82
- continue;
83
- }
84
- if (obj.output !== undefined && typeof obj.output !== "string") {
85
- if (!pushError(errors, `${lineLabel}: "output" must be a string when present`))
86
- break;
87
- continue;
88
- }
89
- const output = typeof obj.output === "string" ? obj.output : undefined;
90
- if (output !== undefined && output.trim().length === 0) {
91
- if (!pushError(errors, `${lineLabel}: "output" is empty — omit it to have the teacher label this row`))
92
- break;
93
- continue;
94
- }
95
- rows.push(output !== undefined ? { rowIndex: i, input, output } : { rowIndex: i, input });
96
- }
97
- return { rows, failedRows, errors };
98
- }
99
- /**
100
- * Minimal RFC 4180 CSV reader (quoted fields, escaped quotes, CR/LF inside
101
- * quotes). tt-local deliberately avoids a CSV dependency; this covers the
102
- * upload formats the hosted labeling dialog accepts.
103
- */
104
- export function parseCsvRecords(text) {
105
- const records = [];
106
- const errors = [];
107
- let record = [];
108
- let field = "";
109
- let inQuotes = false;
110
- let sawAny = false;
111
- const endField = () => {
112
- record.push(field);
113
- field = "";
114
- };
115
- const endRecord = () => {
116
- endField();
117
- if (record.length > 1 || record[0].trim().length > 0) {
118
- records.push(record);
119
- sawAny = true;
120
- }
121
- record = [];
122
- };
123
- for (let i = 0; i < text.length; i++) {
124
- const char = text[i];
125
- if (inQuotes) {
126
- if (char === "\"") {
127
- if (text[i + 1] === "\"") {
128
- field += "\"";
129
- i += 1;
130
- }
131
- else {
132
- inQuotes = false;
133
- }
134
- }
135
- else {
136
- field += char;
137
- }
138
- continue;
139
- }
140
- if (char === "\"" && field.length === 0) {
141
- inQuotes = true;
142
- continue;
143
- }
144
- if (char === ",") {
145
- endField();
146
- continue;
147
- }
148
- if (char === "\n" || char === "\r") {
149
- if (char === "\r" && text[i + 1] === "\n")
150
- i += 1;
151
- endRecord();
152
- continue;
153
- }
154
- field += char;
155
- }
156
- if (inQuotes) {
157
- errors.push("Unterminated quoted field at end of file");
158
- }
159
- if (field.length > 0 || record.length > 0)
160
- endRecord();
161
- if (!sawAny) {
162
- return { fields: [], records: [], errors };
163
- }
164
- const fields = records.shift() ?? [];
165
- for (let i = 0; i < records.length; i++) {
166
- if (records[i].length !== fields.length) {
167
- if (!pushError(errors, `Row ${i + 1}: expected ${fields.length} fields, found ${records[i].length}`))
168
- break;
169
- }
170
- }
171
- return { fields, records, errors };
172
- }
173
- /**
174
- * Parse a CSV source, taking `inputColumn` as the input text of each row.
175
- * The header row is required.
176
- */
177
- export function parseUnlabeledCsv(text, inputColumn, maxRows) {
178
- const rows = [];
179
- const failedRows = [];
180
- const { fields, records, errors } = parseCsvRecords(text);
181
- if (fields.length === 0 || records.length === 0) {
182
- return { rows, failedRows, errors: ["File is empty or has no header row"] };
183
- }
184
- const columnIndex = fields.indexOf(inputColumn);
185
- if (columnIndex === -1) {
186
- return {
187
- rows,
188
- failedRows,
189
- errors: [`Column "${inputColumn}" not found. Available columns: ${fields.join(", ")}`],
190
- };
191
- }
192
- if (records.length > maxRows) {
193
- return {
194
- rows,
195
- failedRows,
196
- errors: [
197
- `File has ${records.length.toLocaleString()} rows; the limit is ${maxRows.toLocaleString()} per labeling job`,
198
- ],
199
- };
200
- }
201
- for (let i = 0; i < records.length; i++) {
202
- const lineLabel = `Row ${i + 1}`;
203
- const value = records[i][columnIndex];
204
- if (typeof value !== "string") {
205
- if (!pushError(errors, `${lineLabel}: missing value in column "${inputColumn}"`))
206
- break;
207
- continue;
208
- }
209
- if (value.trim().length === 0) {
210
- pushError(errors, `${lineLabel}: input is empty`);
211
- continue;
212
- }
213
- const limitError = overLimitError(value);
214
- if (limitError) {
215
- failedRows.push({ rowIndex: i, input: value, error: `${lineLabel}: ${limitError}` });
216
- continue;
217
- }
218
- rows.push({ rowIndex: i, input: value });
219
- }
220
- return { rows, failedRows, errors };
221
- }
222
- /**
223
- * Defensive removal of `<think>` reasoning blocks so the training label is
224
- * only the teacher's final answer. Truncated output can leave a dangling
225
- * close tag; keep only what follows the last close tag in that case.
226
- */
227
- export function stripModelThinking(raw) {
228
- if (!raw)
229
- return raw;
230
- let text = raw.replace(/<think(?:ing)?\b[^>]*>[\s\S]*?<\/think(?:ing)?>/gi, "");
231
- if (/<\/think(?:ing)?>/i.test(text)) {
232
- const lastClose = text.toLowerCase().lastIndexOf("</think");
233
- text = text.slice(text.indexOf(">", lastClose) + 1);
234
- }
235
- return text.trim();
236
- }
237
- function sleep(ms) {
238
- return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
239
- }
240
- function retryDelayMs(attempt) {
241
- if (process.env.NODE_ENV === "test")
242
- return 0;
243
- const base = 500;
244
- const exponential = base * (2 ** Math.max(0, attempt - 1));
245
- const jitter = Math.floor(Math.random() * base);
246
- return Math.min(15_000, exponential + jitter);
247
- }
248
- /**
249
- * Map over items with bounded concurrency and optional minimum spacing
250
- * between call starts (global across workers).
251
- */
252
- export async function mapWithPacing(items, pacing, mapper) {
253
- if (items.length === 0)
254
- return [];
255
- const limit = Math.max(1, Math.min(pacing.concurrency, items.length));
256
- const results = new Array(items.length);
257
- const nextStartAt = { value: 0 };
258
- let nextIndex = 0;
259
- async function worker() {
260
- while (true) {
261
- const index = nextIndex++;
262
- if (index >= items.length)
263
- return;
264
- if (pacing.minIntervalMs > 0) {
265
- const now = Date.now();
266
- const startAt = Math.max(now, nextStartAt.value);
267
- nextStartAt.value = startAt + pacing.minIntervalMs;
268
- if (startAt > now)
269
- await sleep(startAt - now);
270
- }
271
- results[index] = await mapper(items[index], index);
272
- }
273
- }
274
- await Promise.all(Array.from({ length: limit }, () => worker()));
275
- return results;
276
- }
277
- export function resolveTeacherOptions(config, overrides = {}) {
278
- // Same fallback default as the llm config block's judge model.
279
- const model = overrides.model ?? config.labeling.model ?? config.llm?.model ?? "openai/gpt-5.5";
280
- return {
281
- model,
282
- apiKeyEnv: config.llm?.apiKeyEnv ?? "OPENROUTER_API_KEY",
283
- appName: config.llm?.appName,
284
- siteUrl: config.llm?.siteUrl,
285
- maxTokens: config.labeling.maxTokens,
286
- temperature: config.labeling.temperature,
287
- maxAttempts: config.labeling.maxAttempts,
288
- timeoutMs: config.labeling.timeoutMs,
289
- };
290
- }
291
- export async function labelRow(args) {
292
- const started = Date.now();
293
- const request = {
294
- model: args.teacher.model,
295
- apiKeyEnv: args.teacher.apiKeyEnv,
296
- appName: args.teacher.appName,
297
- siteUrl: args.teacher.siteUrl,
298
- timeoutMs: args.teacher.timeoutMs,
299
- temperature: args.teacher.temperature,
300
- maxTokens: args.teacher.maxTokens,
301
- responseFormat: "text",
302
- };
303
- const messages = [
304
- { role: "system", content: args.systemMessage },
305
- { role: "user", content: args.input },
306
- ];
307
- let lastError;
308
- for (let attempt = 1; attempt <= args.teacher.maxAttempts; attempt++) {
309
- try {
310
- const response = await openRouterChat(messages, request);
311
- const output = stripModelThinking(response.content);
312
- if (!output) {
313
- throw new Error("Teacher returned an empty output");
314
- }
315
- return {
316
- output,
317
- promptTokens: response.promptTokens,
318
- completionTokens: response.completionTokens,
319
- latencyMs: Date.now() - started,
320
- };
321
- }
322
- catch (error) {
323
- lastError = error;
324
- if (attempt >= args.teacher.maxAttempts || !isRetryableOpenRouterError(error)) {
325
- throw error;
326
- }
327
- await sleep(retryDelayMs(attempt));
328
- }
329
- }
330
- throw lastError ?? new Error("Teacher retry loop exhausted");
331
- }
332
- function inferFormat(sourcePath, format) {
333
- if (format)
334
- return format;
335
- return sourcePath.toLowerCase().endsWith(".csv") ? "csv" : "jsonl";
336
- }
337
- /**
338
- * Sanitizes parsed rows and sorts them into their initial status: parse
339
- * failures and blocked rows are terminally failed, uploaded outputs are
340
- * already labeled, and the rest are pending teacher labeling.
341
- */
342
- function prepareRowResults(parsed) {
343
- const results = [];
344
- const pendingRows = [];
345
- for (const row of parsed.failedRows) {
346
- const sanitized = sanitizeLabelingRow({ input: row.input });
347
- results.push({
348
- row_index: row.rowIndex,
349
- input: sanitized.input,
350
- status: "failed",
351
- error: row.error,
352
- sanitization_status: sanitized.sanitizationStatus,
353
- sanitization_findings: sanitized.sanitizationFindings,
354
- prompt_tokens: 0,
355
- completion_tokens: 0,
356
- });
357
- }
358
- for (const row of parsed.rows) {
359
- const sanitized = sanitizeLabelingRow({ input: row.input, output: row.output });
360
- const result = {
361
- row_index: row.rowIndex,
362
- input: sanitized.input,
363
- status: "pending",
364
- sanitization_status: sanitized.sanitizationStatus,
365
- sanitization_findings: sanitized.sanitizationFindings,
366
- prompt_tokens: 0,
367
- completion_tokens: 0,
368
- };
369
- if (sanitized.sanitizationStatus === "blocked") {
370
- result.status = "failed";
371
- result.error = sanitized.sanitizationError ?? "Sensitive content detected; row was not sent to the teacher";
372
- }
373
- else if (sanitized.output !== undefined) {
374
- result.status = "labeled";
375
- result.output = sanitized.output;
376
- result.label_source = "upload";
377
- }
378
- else {
379
- pendingRows.push(result);
380
- }
381
- results.push(result);
382
- }
383
- return { results, pendingRows };
384
- }
385
- export async function runLocalLabelingJob(args) {
386
- const emit = (status, message, details) => {
387
- void args.reporter?.onEvent?.({ stage: "labeling", status, message, details });
388
- };
389
- const systemMessage = args.systemMessage.trim();
390
- if (!systemMessage) {
391
- throw new Error("Labeling requires a non-empty system message: the teacher labels under the same instructions the tuned model will see");
392
- }
393
- const format = inferFormat(args.sourcePath, args.format);
394
- if (format === "csv" && !args.inputColumn) {
395
- throw new Error("CSV sources require --input-column to pick the input text column");
396
- }
397
- const dryRun = args.dryRun ?? args.config.dryRun;
398
- const teacher = resolveTeacherOptions(args.config, { model: args.model });
399
- if (!dryRun && !process.env[teacher.apiKeyEnv]) {
400
- throw new Error(`${teacher.apiKeyEnv} is not set`);
401
- }
402
- const sourceText = await readFile(resolve(args.sourcePath), "utf8");
403
- const parsed = format === "csv"
404
- ? parseUnlabeledCsv(sourceText, args.inputColumn, args.config.labeling.maxRows)
405
- : parseUnlabeledJsonl(sourceText, args.config.labeling.maxRows);
406
- const rowCount = parsed.rows.length + parsed.failedRows.length;
407
- if (parsed.errors.length > 0 || rowCount === 0) {
408
- const detail = parsed.errors.length > 0 ? parsed.errors.join("; ") : "File contains no rows";
409
- throw new Error(`Labeling source failed validation: ${detail}`);
410
- }
411
- const { results, pendingRows } = prepareRowResults(parsed);
412
- const prelabeledCount = results.filter((row) => row.label_source === "upload").length;
413
- emit("running", `Parsed ${rowCount} rows: ${pendingRows.length} to label, ${prelabeledCount} pre-labeled, ${results.filter((r) => r.status === "failed").length} failed`, {
414
- source: args.sourcePath,
415
- format,
416
- teacher_model: teacher.model,
417
- ...(dryRun ? { dry_run: true } : {}),
418
- });
419
- if (!dryRun && pendingRows.length > 0) {
420
- let done = 0;
421
- await mapWithPacing(pendingRows, { concurrency: args.config.labeling.concurrency, minIntervalMs: args.config.labeling.minIntervalMs }, async (result) => {
422
- try {
423
- const label = await labelRow({ systemMessage, input: result.input, teacher });
424
- result.status = "labeled";
425
- result.output = label.output;
426
- result.label_source = "teacher";
427
- result.prompt_tokens = label.promptTokens;
428
- result.completion_tokens = label.completionTokens;
429
- }
430
- catch (error) {
431
- result.status = "failed";
432
- result.error = (error instanceof Error ? error.message : String(error)).slice(0, 2000);
433
- }
434
- done += 1;
435
- if (done === pendingRows.length || done % 10 === 0) {
436
- emit("running", `Labeled ${done}/${pendingRows.length} pending rows`);
437
- }
438
- });
439
- }
440
- results.sort((a, b) => a.row_index - b.row_index);
441
- const labeled = results.filter((row) => row.status === "labeled");
442
- const failedCount = results.filter((row) => row.status === "failed").length;
443
- const allFailed = !dryRun && rowCount > 0 && failedCount === rowCount;
444
- const jobId = randomUUID();
445
- const artifactDir = resolve(args.config.artifactRoot, "labeling", jobId);
446
- await mkdir(artifactDir, { recursive: true });
447
- const labeledPath = join(artifactDir, "labeled.jsonl");
448
- const rowsPath = join(artifactDir, "rows.jsonl");
449
- const reportPath = join(artifactDir, "labeling-report.json");
450
- if (!dryRun) {
451
- const labeledContent = labeled
452
- .map((row) => `${JSON.stringify({ input: row.input, output: row.output })}\n`)
453
- .join("");
454
- await writeFile(labeledPath, labeledContent, "utf8");
455
- if (args.outputPath) {
456
- const outputPath = resolve(args.outputPath);
457
- await mkdir(dirname(outputPath), { recursive: true });
458
- await writeFile(outputPath, labeledContent, "utf8");
459
- }
460
- }
461
- await writeFile(rowsPath, results.map((row) => `${JSON.stringify(row)}\n`).join(""), "utf8");
462
- const now = new Date().toISOString();
463
- const report = {
464
- job_id: jobId,
465
- status: dryRun ? "dry_run" : allFailed ? "failed" : "completed",
466
- source_path: resolve(args.sourcePath),
467
- source_format: format,
468
- ...(args.inputColumn ? { input_column: args.inputColumn } : {}),
469
- teacher_model_id: teacher.model,
470
- row_count: rowCount,
471
- labeled_count: labeled.length,
472
- prelabeled_count: prelabeledCount,
473
- failed_count: failedCount,
474
- redacted_count: results.filter((row) => row.sanitization_status === "redacted").length,
475
- blocked_count: results.filter((row) => row.sanitization_status === "blocked").length,
476
- pending_count: results.filter((row) => row.status === "pending").length,
477
- prompt_tokens_total: results.reduce((sum, row) => sum + row.prompt_tokens, 0),
478
- completion_tokens_total: results.reduce((sum, row) => sum + row.completion_tokens, 0),
479
- ...(allFailed ? { error: "All rows failed teacher labeling" } : {}),
480
- artifact_uris: {
481
- labeled: labeledPath,
482
- rows: rowsPath,
483
- report: reportPath,
484
- },
485
- created_at: now,
486
- completed_at: now,
487
- };
488
- await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
489
- emit(report.status, dryRun
490
- ? `Dry run: ${report.pending_count} rows would be sent to ${teacher.model}`
491
- : `Labeled ${report.labeled_count}/${report.row_count} rows (${report.failed_count} failed)`, {
492
- report_path: reportPath,
493
- });
494
- return { report, reportPath, artifactDir, labeledPath, rowsPath };
495
- }
496
- //# sourceMappingURL=labeling.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"labeling.js","sourceRoot":"","sources":["../src/labeling.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- export interface OpenRouterMessage {
2
- role: "system" | "user" | "assistant";
3
- content: string;
4
- }
5
- export interface OpenRouterOptions {
6
- model: string;
7
- apiKeyEnv: string;
8
- appName?: string;
9
- siteUrl?: string;
10
- timeoutMs?: number;
11
- /** Defaults to 0 (judge behavior). */
12
- temperature?: number;
13
- /** Omitted from the request when unset. */
14
- maxTokens?: number;
15
- /** Defaults to "json_object" (judge behavior); "text" for free-text output. */
16
- responseFormat?: "json_object" | "text";
17
- }
18
- export interface OpenRouterChatResult {
19
- content: string;
20
- model?: string;
21
- promptTokens: number;
22
- completionTokens: number;
23
- }
24
- export declare class OpenRouterHttpError extends Error {
25
- readonly statusCode: number;
26
- constructor(message: string, statusCode: number);
27
- }
28
- export declare function isRetryableOpenRouterError(error: unknown): boolean;
29
- export declare function openRouterChat(messages: OpenRouterMessage[], options: OpenRouterOptions): Promise<OpenRouterChatResult>;
@@ -1,66 +0,0 @@
1
- export class OpenRouterHttpError extends Error {
2
- statusCode;
3
- constructor(message, statusCode) {
4
- super(message);
5
- this.statusCode = statusCode;
6
- this.name = "OpenRouterHttpError";
7
- }
8
- }
9
- export function isRetryableOpenRouterError(error) {
10
- if (error instanceof OpenRouterHttpError) {
11
- return [408, 409, 425, 429, 500, 502, 503, 504].includes(error.statusCode);
12
- }
13
- if (!(error instanceof Error))
14
- return false;
15
- return error.name === "AbortError" || error.name === "TimeoutError" || error.name === "TypeError";
16
- }
17
- export async function openRouterChat(messages, options) {
18
- const apiKey = process.env[options.apiKeyEnv];
19
- if (!apiKey) {
20
- throw new Error(`${options.apiKeyEnv} is not set`);
21
- }
22
- const controller = new AbortController();
23
- const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? 120_000);
24
- try {
25
- const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
26
- method: "POST",
27
- signal: controller.signal,
28
- headers: {
29
- "Content-Type": "application/json",
30
- Authorization: `Bearer ${apiKey}`,
31
- ...(options.siteUrl ? { "HTTP-Referer": options.siteUrl } : {}),
32
- ...(options.appName ? { "X-Title": options.appName } : {}),
33
- },
34
- body: JSON.stringify({
35
- model: options.model,
36
- messages,
37
- temperature: options.temperature ?? 0,
38
- ...(options.maxTokens !== undefined ? { max_tokens: options.maxTokens } : {}),
39
- ...((options.responseFormat ?? "json_object") === "json_object"
40
- ? { response_format: { type: "json_object" } }
41
- : {}),
42
- }),
43
- });
44
- if (!response.ok) {
45
- const text = await response.text().catch(() => "");
46
- throw new OpenRouterHttpError(`OpenRouter request failed (${response.status}): ${text.slice(0, 500)}`, response.status);
47
- }
48
- const data = await response.json();
49
- const content = data.choices?.[0]?.message?.content;
50
- if (!content)
51
- throw new Error("OpenRouter response did not include message content");
52
- return {
53
- content,
54
- model: data.model,
55
- promptTokens: numericTokenCount(data.usage?.prompt_tokens),
56
- completionTokens: numericTokenCount(data.usage?.completion_tokens),
57
- };
58
- }
59
- finally {
60
- clearTimeout(timer);
61
- }
62
- }
63
- function numericTokenCount(value) {
64
- return typeof value === "number" && Number.isFinite(value) ? value : 0;
65
- }
66
- //# sourceMappingURL=openrouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../src/openrouter.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { type LocalRunnerConfig } from "./contracts.js";
2
- export declare function serveLocalDashboard(options?: {
3
- host?: string;
4
- port?: number;
5
- config?: LocalRunnerConfig;
6
- }): Promise<{
7
- url: string;
8
- close(): Promise<void>;
9
- }>;