@gaunt-sloth/batch 2.0.0-beta.8 → 2.0.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/dist/bin.d.ts +2 -2
- package/dist/bin.js +2 -2
- package/dist/classificationReport.d.ts +2 -2
- package/dist/classificationReport.js +2 -2
- package/dist/classificationTypes.d.ts +7 -7
- package/dist/classificationTypes.js +1 -1
- package/dist/evalCompare.d.ts +128 -1
- package/dist/evalCompare.js +253 -2
- package/dist/evalCompare.js.map +1 -1
- package/dist/evalOutput.d.ts +1 -1
- package/dist/evalOutput.js +1 -1
- package/dist/evalRunner.d.ts +15 -3
- package/dist/evalRunner.js +82 -5
- package/dist/evalRunner.js.map +1 -1
- package/dist/evalSuite.d.ts +5 -1
- package/dist/evalSuite.js +218 -7
- package/dist/evalSuite.js.map +1 -1
- package/dist/evalTypes.d.ts +79 -18
- package/dist/evalTypes.js +2 -2
- package/dist/evalTypes.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/judge.d.ts +2 -2
- package/dist/judge.js +10 -14
- package/dist/judge.js.map +1 -1
- package/dist/output.d.ts +1 -1
- package/dist/output.js +1 -1
- package/dist/parseOver.d.ts +1 -1
- package/dist/parseOver.js +1 -1
- package/dist/pipelineCli.d.ts +3 -3
- package/dist/pipelineCli.js +3 -3
- package/dist/raterPromptArm.d.ts +140 -0
- package/dist/raterPromptArm.js +306 -0
- package/dist/raterPromptArm.js.map +1 -0
- package/dist/raterTarget.d.ts +34 -12
- package/dist/raterTarget.js +124 -33
- package/dist/raterTarget.js.map +1 -1
- package/dist/reporters/registry.d.ts +1 -1
- package/dist/reporters/registry.js +1 -1
- package/dist/reporters/registry.js.map +1 -1
- package/dist/reporters/reporterTypes.d.ts +3 -3
- package/dist/reporters/textReporter.js +16 -0
- package/dist/reporters/textReporter.js.map +1 -1
- package/dist/toolCoverage.d.ts +244 -0
- package/dist/toolCoverage.js +414 -0
- package/dist/toolCoverage.js.map +1 -0
- package/dist/toolCoverageRender.d.ts +31 -0
- package/dist/toolCoverageRender.js +71 -0
- package/dist/toolCoverageRender.js.map +1 -0
- package/dist/toolResultChecks.d.ts +8 -2
- package/dist/toolResultChecks.js +45 -3
- package/dist/toolResultChecks.js.map +1 -1
- package/dist/types.d.ts +38 -3
- package/dist/types.js +0 -9
- package/dist/types.js.map +1 -1
- package/dist/workflow/runWorkflow.d.ts +4 -4
- package/dist/workflow/runWorkflow.js +3 -3
- package/package.json +9 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolCoverage.js","sourceRoot":"","sources":["../src/toolCoverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* BATCH-32 — render a {@link ToolCoverageReport} as plain lines.
|
|
4
|
+
*
|
|
5
|
+
* A pure string builder, separate from the reporter that prints it (the `classificationRender.ts`
|
|
6
|
+
* precedent): the console rendering is unit-testable without mocking `consoleUtils`, and another
|
|
7
|
+
* reporter can emit the same block without reimplementing the layout.
|
|
8
|
+
*
|
|
9
|
+
* Total over the report — no "…and 12 more" anywhere. The uncovered list IS the output; a renderer
|
|
10
|
+
* that truncates it turns the one actionable part of the block into a teaser, and a truncated list
|
|
11
|
+
* reads as a complete one.
|
|
12
|
+
*/
|
|
13
|
+
import type { ToolCoverageReport } from '#src/toolCoverage.js';
|
|
14
|
+
/** Options for {@link renderToolCoverage}. */
|
|
15
|
+
export interface RenderToolCoverageOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Prefix the headline with this word — `'TOTAL'` for the run-level aggregate that follows
|
|
18
|
+
* `EVAL TOTAL:`, so the two numbers on screen are never mistaken for each other.
|
|
19
|
+
*/
|
|
20
|
+
scope?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Render the whole block: the fraction, what qualifies it, the uncovered names, the per-server
|
|
24
|
+
* breakdown, any warnings, and any gate failures.
|
|
25
|
+
*
|
|
26
|
+
* The waived count sits on the headline rather than below it. A suite waiving 38 of 41 reports
|
|
27
|
+
* 100%, and a reader who sees only the fraction has been told the opposite of the truth — so the
|
|
28
|
+
* qualifier has to arrive in the same glance as the number it qualifies, not in a detail line that
|
|
29
|
+
* scrolls or gets skimmed.
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderToolCoverage(report: ToolCoverageReport, options?: RenderToolCoverageOptions): string[];
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** The headline label, shared by the per-suite line and the run-level aggregate. */
|
|
2
|
+
const HEADLINE = 'TOOL COVERAGE';
|
|
3
|
+
/** How many tools the report's fraction is over (covered + uncovered). */
|
|
4
|
+
function denominatorOf(report) {
|
|
5
|
+
return report.covered.length + report.uncovered.length;
|
|
6
|
+
}
|
|
7
|
+
/** A bucket's human label: the server key, or what the bucket holds instead of one. */
|
|
8
|
+
function serverLabel(bucket) {
|
|
9
|
+
if (bucket.kind === 'mcp')
|
|
10
|
+
return bucket.server ?? '';
|
|
11
|
+
if (bucket.kind === 'builtin')
|
|
12
|
+
return 'built-in / config tools';
|
|
13
|
+
return 'unattributed MCP tools';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Render the whole block: the fraction, what qualifies it, the uncovered names, the per-server
|
|
17
|
+
* breakdown, any warnings, and any gate failures.
|
|
18
|
+
*
|
|
19
|
+
* The waived count sits on the headline rather than below it. A suite waiving 38 of 41 reports
|
|
20
|
+
* 100%, and a reader who sees only the fraction has been told the opposite of the truth — so the
|
|
21
|
+
* qualifier has to arrive in the same glance as the number it qualifies, not in a detail line that
|
|
22
|
+
* scrolls or gets skimmed.
|
|
23
|
+
*/
|
|
24
|
+
export function renderToolCoverage(report, options = {}) {
|
|
25
|
+
const lines = [];
|
|
26
|
+
const total = denominatorOf(report);
|
|
27
|
+
const headline = options.scope ? `${HEADLINE} ${options.scope}` : HEADLINE;
|
|
28
|
+
const qualifiers = [];
|
|
29
|
+
if (report.waived.length > 0)
|
|
30
|
+
qualifiers.push(`${report.waived.length} waived`);
|
|
31
|
+
if (report.filteredOut.length > 0) {
|
|
32
|
+
qualifiers.push(`${report.filteredOut.length} filtered out by allowedTools`);
|
|
33
|
+
}
|
|
34
|
+
if (report.unnamed > 0)
|
|
35
|
+
qualifiers.push(`${report.unnamed} unnamed (not counted)`);
|
|
36
|
+
lines.push(`${headline}: ${report.covered.length}/${total} tools exercised` +
|
|
37
|
+
(qualifiers.length > 0 ? ` — ${qualifiers.join(', ')}` : ''));
|
|
38
|
+
// Coverage counts a CALL. Said in the output rather than left for the reader to assume, because
|
|
39
|
+
// the alternative reading (the tool was called AND returned something usable) is the one a person
|
|
40
|
+
// reaching for a coverage number is likely to want.
|
|
41
|
+
lines.push(' a tool counts as covered once a case CALLED it, error result or not');
|
|
42
|
+
if (report.uncovered.length > 0) {
|
|
43
|
+
lines.push(` uncovered: ${[...report.uncovered].sort().join(', ')}`);
|
|
44
|
+
}
|
|
45
|
+
if (report.waived.length > 0) {
|
|
46
|
+
lines.push(` waived: ${[...report.waived].sort().join(', ')}`);
|
|
47
|
+
}
|
|
48
|
+
if (report.filteredOut.length > 0) {
|
|
49
|
+
lines.push(` filtered out by allowedTools: ${[...report.filteredOut].sort().join(', ')}`);
|
|
50
|
+
}
|
|
51
|
+
// Per-server only once more than one MCP server is configured — with a single server the
|
|
52
|
+
// breakdown restates the headline, and printing it twice is noise rather than information. The
|
|
53
|
+
// report still carries every bucket in `results.json`, where a reader is not paying for lines.
|
|
54
|
+
const mcpBuckets = report.byServer.filter((bucket) => bucket.kind === 'mcp');
|
|
55
|
+
if (mcpBuckets.length > 1) {
|
|
56
|
+
lines.push(' by server:');
|
|
57
|
+
for (const bucket of report.byServer) {
|
|
58
|
+
const bucketTotal = bucket.covered.length + bucket.uncovered.length;
|
|
59
|
+
lines.push(` ${serverLabel(bucket)}: ${bucket.covered.length}/${bucketTotal}` +
|
|
60
|
+
(bucket.uncovered.length > 0
|
|
61
|
+
? ` — uncovered: ${[...bucket.uncovered].sort().join(', ')}`
|
|
62
|
+
: ''));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const warning of report.warnings)
|
|
66
|
+
lines.push(` ! ${warning}`);
|
|
67
|
+
for (const failure of report.gateFailures)
|
|
68
|
+
lines.push(`TOOL COVERAGE GATE FAILED — ${failure}`);
|
|
69
|
+
return lines;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=toolCoverageRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolCoverageRender.js","sourceRoot":"","sources":["../src/toolCoverageRender.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,14 @@ import type { ToolResultRecord } from '#src/types.js';
|
|
|
19
19
|
* - `toolResultJsonPath` — each entry passes iff **at least one** result from a tool matching its
|
|
20
20
|
* `tool` pattern satisfies it: the payload parses as JSON, the `path` resolves, and (when set)
|
|
21
21
|
* `equals` deep-equals / `contains` substring-matches the resolved value. A non-JSON (or absent)
|
|
22
|
-
* payload is a deterministic per-result FAIL, never a throw
|
|
23
|
-
*
|
|
22
|
+
* payload is a deterministic per-result FAIL, never a throw. A payload capture cut at
|
|
23
|
+
* `toolResultCaptureMaxBytes` fails too, with its own reason naming that key, even when the
|
|
24
|
+
* cut prefix still parses — the cut is recorded on the result at capture (`contentTruncated`),
|
|
25
|
+
* and this check reads that record rather than inferring the cut from the stored length or from
|
|
26
|
+
* a parse of the prefix.
|
|
27
|
+
* (BATCH-43) The payload it reads is the result's `errorPayload` when capture recovered one — an
|
|
28
|
+
* errored MCP tool's own error body, freed from the adapter's prose prefix — and otherwise the
|
|
29
|
+
* observed `content`, which is left exactly as the model saw it in either case.
|
|
24
30
|
*
|
|
25
31
|
* The runner only ever calls this with expectation blocks a `gth-agent` suite produced — the suite
|
|
26
32
|
* parser rejects tool-result assertions against `ag-ui`/`adk-agent` targets, whose wire carries no
|
package/dist/toolResultChecks.js
CHANGED
|
@@ -20,8 +20,14 @@ import { resolveJsonPath } from '#src/deterministicChecks.js';
|
|
|
20
20
|
* - `toolResultJsonPath` — each entry passes iff **at least one** result from a tool matching its
|
|
21
21
|
* `tool` pattern satisfies it: the payload parses as JSON, the `path` resolves, and (when set)
|
|
22
22
|
* `equals` deep-equals / `contains` substring-matches the resolved value. A non-JSON (or absent)
|
|
23
|
-
* payload is a deterministic per-result FAIL, never a throw
|
|
24
|
-
*
|
|
23
|
+
* payload is a deterministic per-result FAIL, never a throw. A payload capture cut at
|
|
24
|
+
* `toolResultCaptureMaxBytes` fails too, with its own reason naming that key, even when the
|
|
25
|
+
* cut prefix still parses — the cut is recorded on the result at capture (`contentTruncated`),
|
|
26
|
+
* and this check reads that record rather than inferring the cut from the stored length or from
|
|
27
|
+
* a parse of the prefix.
|
|
28
|
+
* (BATCH-43) The payload it reads is the result's `errorPayload` when capture recovered one — an
|
|
29
|
+
* errored MCP tool's own error body, freed from the adapter's prose prefix — and otherwise the
|
|
30
|
+
* observed `content`, which is left exactly as the model saw it in either case.
|
|
25
31
|
*
|
|
26
32
|
* The runner only ever calls this with expectation blocks a `gth-agent` suite produced — the suite
|
|
27
33
|
* parser rejects tool-result assertions against `ag-ui`/`adk-agent` targets, whose wire carries no
|
|
@@ -64,12 +70,48 @@ function checkToolResultJsonPath(toolResults, check) {
|
|
|
64
70
|
}
|
|
65
71
|
return `${label}: ${[...reasons].join('; ')}`;
|
|
66
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* BATCH-49 — the reason a payload that capture cut gets, distinct from the one a prose payload
|
|
75
|
+
* gets.
|
|
76
|
+
*
|
|
77
|
+
* The two used to share `result payload is not JSON`, which sent the person reading it to the
|
|
78
|
+
* server when the cut had happened here. The wording names `toolResultCaptureMaxBytes` because
|
|
79
|
+
* that is the key to raise, and it quotes the original size when capture recorded one, because a
|
|
80
|
+
* reason that only names the key still leaves the new value to be guessed. The original size is
|
|
81
|
+
* optional in the wording only: a record written before the field existed still has to produce a
|
|
82
|
+
* reason that names the key.
|
|
83
|
+
*/
|
|
84
|
+
function truncatedPayloadReason(originalBytes) {
|
|
85
|
+
const measured = typeof originalBytes === 'number' ? ` (the tool returned ${originalBytes} bytes)` : '';
|
|
86
|
+
return ('result payload was truncated at toolResultCaptureMaxBytes' +
|
|
87
|
+
measured +
|
|
88
|
+
' and is no longer JSON; raise toolResultCaptureMaxBytes to capture it whole');
|
|
89
|
+
}
|
|
67
90
|
/** Evaluate ONE tool result against ONE check: `undefined` = satisfied, else the failure reason.
|
|
68
91
|
* Deterministic and throw-free: a non-JSON/absent payload is a reason, not an exception. */
|
|
69
92
|
function evaluateResultAgainstCheck(result, check) {
|
|
93
|
+
// BATCH-43 — grade the recovered MCP error body when capture produced one, else the observed
|
|
94
|
+
// payload exactly as before. An errored MCP tool's `content` is the adapter's prose-prefixed
|
|
95
|
+
// message and never parses; `errorPayload` is the server's own body with that prefix removed,
|
|
96
|
+
// and it is only ever recorded when it parses, so this branch cannot introduce a new failure —
|
|
97
|
+
// when it is absent (any non-MCP result, or an MCP error whose body is prose) the reason below
|
|
98
|
+
// is the same deterministic one the check has always given.
|
|
99
|
+
// The recovered body is graded when capture produced one; it is only recorded when it
|
|
100
|
+
// parsed, so this branch never sees a truncated `errorPayload` — an over-cap body is dropped
|
|
101
|
+
// whole rather than cut. The truncation flag is about `content`, and it is only consulted when
|
|
102
|
+
// `content` is what is being graded.
|
|
103
|
+
const gradingContent = result.errorPayload === undefined;
|
|
104
|
+
const payload = result.errorPayload ?? result.content ?? '';
|
|
105
|
+
// Consult the flag before the parse. A cut prefix can still parse — a JSON document padded with
|
|
106
|
+
// trailing whitespace past the cap, or a long top-level number cut short — and grading it would
|
|
107
|
+
// judge a payload the server did not send. A cut inside an object or array never parses. `errorPayload` is only recorded when it parsed whole, so a truncated observed payload
|
|
108
|
+
// must not turn that recovered body into a truncation failure.
|
|
109
|
+
if (gradingContent && result.contentTruncated) {
|
|
110
|
+
return truncatedPayloadReason(result.contentOriginalBytes);
|
|
111
|
+
}
|
|
70
112
|
let root;
|
|
71
113
|
try {
|
|
72
|
-
root = JSON.parse(
|
|
114
|
+
root = JSON.parse(payload.trim());
|
|
73
115
|
}
|
|
74
116
|
catch {
|
|
75
117
|
return 'result payload is not JSON';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResultChecks.js","sourceRoot":"","sources":["../src/toolResultChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D
|
|
1
|
+
{"version":3,"file":"toolResultChecks.js","sourceRoot":"","sources":["../src/toolResultChecks.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* `packages/app/src/commands/batchCommand.ts`, which is what keeps {@link RunCellFn} injectable —
|
|
8
8
|
* unit tests here fake it, the CLI wires the real one.
|
|
9
9
|
*/
|
|
10
|
+
import type { AdvertisedToolInventory } from '#src/toolCoverage.js';
|
|
10
11
|
/** One row/record parsed from `--over <path.csv|path.jsonl>`. Values are always strings for csv. */
|
|
11
12
|
export type MatrixRow = Record<string, string>;
|
|
12
13
|
/**
|
|
@@ -44,8 +45,35 @@ export interface ToolResultRecord {
|
|
|
44
45
|
name: string;
|
|
45
46
|
/** `true` iff the tool result carried the error status (LangChain `ToolMessage.status === 'error'`). */
|
|
46
47
|
isError: boolean;
|
|
47
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* The result payload as text (non-string payloads JSON-stringified), capped in UTF-8 bytes at
|
|
50
|
+
* capture. When the cap cut it, this is a character-boundary prefix and {@link contentTruncated}
|
|
51
|
+
* says so.
|
|
52
|
+
*/
|
|
48
53
|
content?: string;
|
|
54
|
+
/**
|
|
55
|
+
* BATCH-49 — `true` iff {@link content} was cut by the capture cap (`toolResultCaptureMaxBytes`).
|
|
56
|
+
* Recorded at capture in core and carried through unchanged — the check reads it rather than
|
|
57
|
+
* guessing from the stored length, which a character-boundary byte cut makes unreliable. Absent
|
|
58
|
+
* when nothing was cut.
|
|
59
|
+
*/
|
|
60
|
+
contentTruncated?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* BATCH-49 — {@link content}'s size in UTF-8 bytes before the cap cut it. Present only together
|
|
63
|
+
* with {@link contentTruncated}; the number a person needs to choose a larger cap.
|
|
64
|
+
*/
|
|
65
|
+
contentOriginalBytes?: number;
|
|
66
|
+
/**
|
|
67
|
+
* BATCH-43 — an errored MCP tool's own error body, recovered at capture and carried BESIDE
|
|
68
|
+
* {@link content}, which stays exactly what the model observed. `tool_result_json_path` grades
|
|
69
|
+
* this when it is present; when it is absent the check reads {@link content} and behaves as it
|
|
70
|
+
* always has. Present implies it parses as JSON, so a check that finds it never has to ask.
|
|
71
|
+
*
|
|
72
|
+
* Absent for everything that is not an errored MCP call, and absent too for an MCP error whose
|
|
73
|
+
* body is prose rather than JSON — a server that puts its detail only in MCP `structuredContent`
|
|
74
|
+
* is not gradable at all, because the adapter discards that before any of our code runs.
|
|
75
|
+
*/
|
|
76
|
+
errorPayload?: string;
|
|
49
77
|
}
|
|
50
78
|
/** What one attempt at running a cell through the shared single-shot runtime produced. */
|
|
51
79
|
export interface CellRunOutcome {
|
|
@@ -68,11 +96,18 @@ export interface CellRunOutcome {
|
|
|
68
96
|
* {@link tools} but un-deduped and carrying each result's error status + payload. Only the
|
|
69
97
|
* in-process `gth-agent` runner can populate this (external adk-agent/ag-ui targets never do). */
|
|
70
98
|
toolResults?: ToolResultRecord[];
|
|
99
|
+
/**
|
|
100
|
+
* BATCH-32 — what the agent ADVERTISED to the model for this cell: the tool-coverage denominator,
|
|
101
|
+
* to {@link tools}'s numerator. Only the in-process `gth-agent` runner can populate it (an
|
|
102
|
+
* external adk-agent/ag-ui target never advertises its inventory over the wire), and a test fake
|
|
103
|
+
* leaves it unset — which is why absence means "no denominator available", never "no tools".
|
|
104
|
+
*/
|
|
105
|
+
advertisedTools?: AdvertisedToolInventory;
|
|
71
106
|
/** A human-readable failure reason, set when `ok` is `false`. */
|
|
72
107
|
error?: string;
|
|
73
108
|
}
|
|
74
109
|
/**
|
|
75
|
-
* Injectable "run one prompt" function — the seam that lets {@link runBatchMatrix} be fully unit
|
|
110
|
+
* Injectable "run one prompt" function — the seam that lets {@link @gaunt-sloth/batch!"BatchRunner.js".runBatchMatrix | runBatchMatrix} be fully unit
|
|
76
111
|
* tested without any real LLM call. The production wiring (`batchCommand.ts`) adapts
|
|
77
112
|
* `runSingleShot` to this shape; tests inject a fake that resolves/rejects/throws as needed.
|
|
78
113
|
*/
|
|
@@ -89,7 +124,7 @@ export interface CellResult extends CellRunOutcome {
|
|
|
89
124
|
/** How many retries were consumed (0 = succeeded, or failed, on the first attempt). */
|
|
90
125
|
retries: number;
|
|
91
126
|
}
|
|
92
|
-
/** Options for {@link runBatchMatrix}. */
|
|
127
|
+
/** Options for {@link @gaunt-sloth/batch!"BatchRunner.js".runBatchMatrix | runBatchMatrix}. */
|
|
93
128
|
export interface BatchRunnerOptions {
|
|
94
129
|
/** Max in-flight cells. Must be >= 1; non-finite/invalid values fall back to the default. */
|
|
95
130
|
concurrency?: number;
|
package/dist/types.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @packageDocumentation
|
|
3
|
-
* BATCH-1 — the shapes shared across matrix construction, the concurrency/retry runner, and the
|
|
4
|
-
* structured output writer. Deliberately independent of any LLM/runner types (`GthConfig`,
|
|
5
|
-
* `runSingleShot`, …): this package only knows about *cells* and *outcomes*. The production
|
|
6
|
-
* adapter that turns a cell into an actual `runSingleShot` call lives in
|
|
7
|
-
* `packages/app/src/commands/batchCommand.ts`, which is what keeps {@link RunCellFn} injectable —
|
|
8
|
-
* unit tests here fake it, the CLI wires the real one.
|
|
9
|
-
*/
|
|
10
1
|
/**
|
|
11
2
|
* BATCH-24 — the default **cell** concurrency cap for `gth batch` / `gth eval` when
|
|
12
3
|
* `-j/--concurrency` is not supplied. Serial by default, for every provider (deliberately NOT
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA6JA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module workflow/runWorkflow
|
|
3
|
-
*
|
|
4
2
|
* BATCH-3 — the `gth workflow` host. Runs a local JS orchestration script (`.mjs`/`.js`) that drives
|
|
5
3
|
* one or more LLM calls through a small, generic {@link WorkflowContext}. This is the
|
|
6
4
|
* script-orchestrated sibling of `gth batch` (matrix over a single prompt): a workflow is arbitrary
|
|
7
5
|
* local code that decides *how* to fan calls out.
|
|
8
6
|
*
|
|
9
7
|
* The host provides two agent shapes, both reusing the proven production wiring:
|
|
10
|
-
* - a **structured** call via {@link askStructured} (`@gaunt-sloth/core`) — a bare, non-agentic
|
|
8
|
+
* - a **structured** call via {@link @gaunt-sloth/core!runtime/askStructured.askStructured | askStructured} (`@gaunt-sloth/core`) — a bare, non-agentic
|
|
11
9
|
* `withStructuredOutput` model call that returns a schema-validated object;
|
|
12
10
|
* - a **text** call that mirrors `buildProductionRunCell` (packages/app/src/commands/batchCommand.ts)
|
|
13
11
|
* exactly — its own `createResolvers()`, a lean agent factory, `runSingleShot`, and
|
|
@@ -18,13 +16,15 @@
|
|
|
18
16
|
* a deliberate widening of the batch package (whose matrix runtime was kept LLM/runner-agnostic) to
|
|
19
17
|
* host the workflow runtime the BATCH-3 brief scopes here; `batch → agent → core` stays a clean DAG
|
|
20
18
|
* (agent does not depend on batch).
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
21
|
*/
|
|
22
22
|
import * as z from 'zod';
|
|
23
23
|
import type { CommandLineConfigOverrides, GthConfig } from '@gaunt-sloth/core/config.js';
|
|
24
24
|
import type { GthCommand } from '@gaunt-sloth/core/core/types.js';
|
|
25
25
|
/** Options for a single {@link WorkflowContext.agent} call. */
|
|
26
26
|
export interface WorkflowAgentOptions {
|
|
27
|
-
/** Zod schema → structured output (via {@link askStructured}). Omit for a plain-text agent run.
|
|
27
|
+
/** Zod schema → structured output (via {@link @gaunt-sloth/core!runtime/askStructured.askStructured | askStructured}). Omit for a plain-text agent run.
|
|
28
28
|
* Build it with {@link WorkflowContext.z} so it is the exact zod instance the model introspects. */
|
|
29
29
|
schema?: z.ZodType<unknown>;
|
|
30
30
|
/** System-message text. Default `''`. */
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module workflow/runWorkflow
|
|
3
|
-
*
|
|
4
2
|
* BATCH-3 — the `gth workflow` host. Runs a local JS orchestration script (`.mjs`/`.js`) that drives
|
|
5
3
|
* one or more LLM calls through a small, generic {@link WorkflowContext}. This is the
|
|
6
4
|
* script-orchestrated sibling of `gth batch` (matrix over a single prompt): a workflow is arbitrary
|
|
7
5
|
* local code that decides *how* to fan calls out.
|
|
8
6
|
*
|
|
9
7
|
* The host provides two agent shapes, both reusing the proven production wiring:
|
|
10
|
-
* - a **structured** call via {@link askStructured} (`@gaunt-sloth/core`) — a bare, non-agentic
|
|
8
|
+
* - a **structured** call via {@link @gaunt-sloth/core!runtime/askStructured.askStructured | askStructured} (`@gaunt-sloth/core`) — a bare, non-agentic
|
|
11
9
|
* `withStructuredOutput` model call that returns a schema-validated object;
|
|
12
10
|
* - a **text** call that mirrors `buildProductionRunCell` (packages/app/src/commands/batchCommand.ts)
|
|
13
11
|
* exactly — its own `createResolvers()`, a lean agent factory, `runSingleShot`, and
|
|
@@ -18,6 +16,8 @@
|
|
|
18
16
|
* a deliberate widening of the batch package (whose matrix runtime was kept LLM/runner-agnostic) to
|
|
19
17
|
* host the workflow runtime the BATCH-3 brief scopes here; `batch → agent → core` stays a clean DAG
|
|
20
18
|
* (agent does not depend on batch).
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
21
|
*/
|
|
22
22
|
import * as z from 'zod';
|
|
23
23
|
import { resolve } from 'node:path';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaunt-sloth/batch",
|
|
3
|
-
"version": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Batch matrix runtime for Gaunt Sloth (BATCH-1): run a prompt-executable over a matrix of models and/or content-bound inputs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -34,19 +34,20 @@
|
|
|
34
34
|
"#src/*.js": "./dist/*.js"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@langchain/core": "^1.2.
|
|
38
|
-
"yaml": "^2.9.
|
|
39
|
-
"zod": "^4.5
|
|
40
|
-
"@gaunt-sloth/agent": "2.0.0
|
|
41
|
-
"@gaunt-sloth/core": "2.0.0
|
|
37
|
+
"@langchain/core": "^1.2.12",
|
|
38
|
+
"yaml": "^2.9.1",
|
|
39
|
+
"zod": "^4.6.5",
|
|
40
|
+
"@gaunt-sloth/agent": "2.0.0",
|
|
41
|
+
"@gaunt-sloth/core": "2.0.0"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"./dist/*"
|
|
45
45
|
],
|
|
46
46
|
"publishConfig": {
|
|
47
|
-
"tag": "
|
|
47
|
+
"tag": "latest"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
|
-
"build": "tsc"
|
|
50
|
+
"build": "tsc",
|
|
51
|
+
"value-surface:generate": "node scripts/generate-value-surface.mjs"
|
|
51
52
|
}
|
|
52
53
|
}
|