@gaunt-sloth/review 2.0.0-beta.1 → 2.0.0-beta.2
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/LICENSE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Copyright 2025-present Andrew Kondratev
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
-
|
|
5
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
-
|
|
1
|
+
Copyright 2025-present Andrew Kondratev
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
7
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -34,5 +34,15 @@ export type ReviewRateMiddlewareSettings = RatingConfig & {
|
|
|
34
34
|
name?: 'review-rate';
|
|
35
35
|
};
|
|
36
36
|
export declare function normalizeRatingConfig(config: RatingConfig | undefined): NormalizedRatingConfig;
|
|
37
|
+
/**
|
|
38
|
+
* GS2-105 — default wall-clock budget for the one rating call, in milliseconds.
|
|
39
|
+
*
|
|
40
|
+
* A healthy rating call against a local `gemma4:12b` was measured at ~50 s; a runaway at ~485 s.
|
|
41
|
+
* 120 s sits above the former with headroom and well below the latter, and below the integration
|
|
42
|
+
* suite's own 300 s per-test ceiling — which matters, because a budget above that ceiling would let
|
|
43
|
+
* the harness give up first and leave the generation running, which is the behaviour this replaces.
|
|
44
|
+
* Override per command with `commands.<review|pr>.rating.timeoutMs`.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_REVIEW_RATE_TIMEOUT_MS = 120000;
|
|
37
47
|
export declare function createReviewRateMiddleware(settings: ReviewRateMiddlewareSettings, gthConfig: GthConfig): Promise<AgentMiddleware>;
|
|
38
48
|
export {};
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { HumanMessage } from '@langchain/core/messages';
|
|
9
9
|
import { tool } from '@langchain/core/tools';
|
|
10
|
-
import {
|
|
10
|
+
import { createMiddleware } from 'langchain';
|
|
11
11
|
import * as z from 'zod';
|
|
12
12
|
import { setArtifact, deleteArtifact, getArtifact } from '@gaunt-sloth/core/state/artifactStore.js';
|
|
13
13
|
import { debugLog, debugLogError } from '@gaunt-sloth/core/utils/debugUtils.js';
|
|
14
|
-
import { displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
14
|
+
import { displayInfo, displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
15
15
|
import { getNewRunnableConfig } from '@gaunt-sloth/core/utils/llmUtils.js';
|
|
16
16
|
/**
|
|
17
17
|
* Schema describing the result of the review rating step.
|
|
@@ -36,6 +36,16 @@ export function normalizeRatingConfig(config) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
const REVIEW_RATE_TOOL_NAME = 'gth_review_rate';
|
|
39
|
+
/**
|
|
40
|
+
* GS2-105 — default wall-clock budget for the one rating call, in milliseconds.
|
|
41
|
+
*
|
|
42
|
+
* A healthy rating call against a local `gemma4:12b` was measured at ~50 s; a runaway at ~485 s.
|
|
43
|
+
* 120 s sits above the former with headroom and well below the latter, and below the integration
|
|
44
|
+
* suite's own 300 s per-test ceiling — which matters, because a budget above that ceiling would let
|
|
45
|
+
* the harness give up first and leave the generation running, which is the behaviour this replaces.
|
|
46
|
+
* Override per command with `commands.<review|pr>.rating.timeoutMs`.
|
|
47
|
+
*/
|
|
48
|
+
export const DEFAULT_REVIEW_RATE_TIMEOUT_MS = 120_000;
|
|
39
49
|
export function createReviewRateMiddleware(settings, gthConfig) {
|
|
40
50
|
const normalizedConfig = normalizeRatingConfig(settings);
|
|
41
51
|
const rateTool = tool((input) => {
|
|
@@ -50,10 +60,21 @@ export function createReviewRateMiddleware(settings, gthConfig) {
|
|
|
50
60
|
description: 'Stores the final review rating and summary comment.',
|
|
51
61
|
schema: RateSchema,
|
|
52
62
|
});
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
// GS2-105 — ONE bound model call, not an agent loop.
|
|
64
|
+
//
|
|
65
|
+
// Rating is a single round trip by nature: read the conversation, emit one tool call carrying the
|
|
66
|
+
// score. Running it through an agent loop adds turns it has no use for, and a small model exploits
|
|
67
|
+
// every one of them — measured on `gemma4:12b`, the model called the rating tool and the loop fed
|
|
68
|
+
// the result back and asked again, four times, never emitting a final answer. The loop, not the
|
|
69
|
+
// model, is what has no terminating condition here: the score is already stored after the first
|
|
70
|
+
// call, so every later turn is pure cost.
|
|
71
|
+
const boundModel = typeof gthConfig.llm?.bindTools === 'function'
|
|
72
|
+
? gthConfig.llm.bindTools([rateTool])
|
|
73
|
+
: undefined;
|
|
74
|
+
// The budget is read here, from the caller's own rating config, and NOT folded into
|
|
75
|
+
// `normalizedConfig` — that object is spread into the stored artifact, and adding a field to it
|
|
76
|
+
// would change the artifact's shape for every reader.
|
|
77
|
+
const timeoutMs = settings?.timeoutMs ?? DEFAULT_REVIEW_RATE_TIMEOUT_MS;
|
|
57
78
|
return Promise.resolve(createMiddleware({
|
|
58
79
|
name: 'review-rate',
|
|
59
80
|
afterAgent: async (state) => {
|
|
@@ -63,11 +84,60 @@ export function createReviewRateMiddleware(settings, gthConfig) {
|
|
|
63
84
|
deleteArtifact(REVIEW_RATE_ARTIFACT_KEY);
|
|
64
85
|
const ratingPrompt = buildRatingInstructions(normalizedConfig);
|
|
65
86
|
debugLog('ReviewRateMiddleware: requesting rating evaluation');
|
|
87
|
+
// GS2-105, DL-1 (no action is silent) — this is a SECOND model call, fired after the review
|
|
88
|
+
// prose is already on screen. Without this line the user sees a finished review followed by
|
|
89
|
+
// an unexplained pause, with nothing to say a call is still in flight.
|
|
90
|
+
displayInfo('\nScoring the review…');
|
|
91
|
+
if (!boundModel) {
|
|
92
|
+
displayWarning('ReviewRateMiddleware: the configured model cannot be given tools, so no rating ' +
|
|
93
|
+
'could be requested.');
|
|
94
|
+
return state;
|
|
95
|
+
}
|
|
66
96
|
try {
|
|
67
97
|
const ratingMessages = [...state.messages, new HumanMessage(ratingPrompt)];
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
// ONE call, bounded TWICE, and the second bound is not redundant.
|
|
99
|
+
//
|
|
100
|
+
// `timeout` on the runnable config is the good bound: it is honoured at this layer (though
|
|
101
|
+
// `ChatOllama` ignores a model-level timeout) and it ABORTS the request rather than
|
|
102
|
+
// abandoning it. But it is someone else's implementation, and a middleware that owns no
|
|
103
|
+
// bound of its own cannot be tested for one — a spec could only assert that the field was
|
|
104
|
+
// passed, which stays green even if the field stops being honoured.
|
|
105
|
+
//
|
|
106
|
+
// So the deadline below is this module's own guarantee: whatever the provider or the
|
|
107
|
+
// runnable layer does, `afterAgent` settles within the budget. It races rather than
|
|
108
|
+
// cancels, so on this path the generation may still be running when we stop waiting —
|
|
109
|
+
// that is why it is the backstop and `timeout` is the primary.
|
|
110
|
+
let deadlineTimer;
|
|
111
|
+
const deadline = new Promise((_resolve, reject) => {
|
|
112
|
+
deadlineTimer = setTimeout(() => reject(Object.assign(new Error('rating budget exhausted'), { name: 'TimeoutError' })), timeoutMs);
|
|
113
|
+
// Never hold the process open for a budget that is only a backstop.
|
|
114
|
+
deadlineTimer.unref?.();
|
|
115
|
+
});
|
|
116
|
+
let answer;
|
|
117
|
+
try {
|
|
118
|
+
answer = await Promise.race([
|
|
119
|
+
boundModel.invoke(ratingMessages, {
|
|
120
|
+
...getNewRunnableConfig(),
|
|
121
|
+
timeout: timeoutMs,
|
|
122
|
+
}),
|
|
123
|
+
deadline,
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
// Not tidiness — correctness. A losing `Promise.race` entrant still settles, so a
|
|
128
|
+
// deadline left armed after a fast rating would reject into nobody, and an unhandled
|
|
129
|
+
// rejection is fatal on modern Node: the guard against a hang would become a way to
|
|
130
|
+
// crash a healthy run. This runs on the continuation, ahead of any macrotask timer, so
|
|
131
|
+
// the deadline never fires and never rejects.
|
|
132
|
+
clearTimeout(deadlineTimer);
|
|
133
|
+
}
|
|
134
|
+
// Run whichever rating call the model made. Extra calls in one response are ignored
|
|
135
|
+
// rather than replayed — the score is settled by the first, and honouring the rest is
|
|
136
|
+
// how a scoring step turns into an argument with itself.
|
|
137
|
+
const calls = (answer?.tool_calls ?? []).filter((call) => call.name === REVIEW_RATE_TOOL_NAME);
|
|
138
|
+
if (calls[0]) {
|
|
139
|
+
await rateTool.invoke(calls[0].args);
|
|
140
|
+
}
|
|
71
141
|
const artifact = getArtifact(REVIEW_RATE_ARTIFACT_KEY);
|
|
72
142
|
if (!artifact) {
|
|
73
143
|
displayWarning('ReviewRateMiddleware: rating agent completed but did not call the rating tool. ' +
|
|
@@ -77,8 +147,14 @@ export function createReviewRateMiddleware(settings, gthConfig) {
|
|
|
77
147
|
}
|
|
78
148
|
}
|
|
79
149
|
catch (error) {
|
|
80
|
-
|
|
81
|
-
|
|
150
|
+
// A budget overrun and a provider error are different events and must read differently:
|
|
151
|
+
// one says the model never answered in time, the other carries the provider's own reason.
|
|
152
|
+
// Collapsing them would make a hung local model look like a broken configuration.
|
|
153
|
+
displayWarning(isAbortError(error)
|
|
154
|
+
? `ReviewRateMiddleware: the rating call did not finish within ${timeoutMs}ms and was ` +
|
|
155
|
+
'cancelled. No score was produced.'
|
|
156
|
+
: 'ReviewRateMiddleware: rating agent failed — ' +
|
|
157
|
+
(error instanceof Error ? error.message : String(error)));
|
|
82
158
|
debugLogError('ReviewRateMiddleware.invoke', error);
|
|
83
159
|
}
|
|
84
160
|
return state;
|
|
@@ -104,6 +180,20 @@ function buildRatingInstructions(config) {
|
|
|
104
180
|
'- Use the comment field of the tool call for a concise summary referencing the code state.',
|
|
105
181
|
].join('\n');
|
|
106
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Whether a thrown value is an abort — i.e. our own budget cancelled the call.
|
|
185
|
+
*
|
|
186
|
+
* Deliberately tolerant about the shape. An abort surfaces as a `DOMException` named `AbortError`
|
|
187
|
+
* in some runtimes, as a plain `Error` named `AbortError` or `TimeoutError` in others, and provider
|
|
188
|
+
* SDKs re-wrap it; matching only one of those would silently route a real timeout into the generic
|
|
189
|
+
* branch and report it as a provider failure.
|
|
190
|
+
*/
|
|
191
|
+
function isAbortError(error) {
|
|
192
|
+
if (typeof error !== 'object' || error === null)
|
|
193
|
+
return false;
|
|
194
|
+
const name = error.name;
|
|
195
|
+
return name === 'AbortError' || name === 'TimeoutError';
|
|
196
|
+
}
|
|
107
197
|
function clamp(value, min, max) {
|
|
108
198
|
return Math.min(Math.max(value, min), max);
|
|
109
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewRateMiddleware.js","sourceRoot":"","sources":["../../src/middleware/reviewRateMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reviewRateMiddleware.js","sourceRoot":"","sources":["../../src/middleware/reviewRateMiddleware.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaunt-sloth/review",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.2",
|
|
4
4
|
"description": "Review functionality for Gaunt Sloth",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"#src/*.js": "./dist/*.js"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@langchain/core": "^1.2.
|
|
38
|
-
"@langchain/langgraph": "^1.4.
|
|
39
|
-
"langchain": "^1.5.
|
|
37
|
+
"@langchain/core": "^1.2.9",
|
|
38
|
+
"@langchain/langgraph": "^1.4.12",
|
|
39
|
+
"langchain": "^1.5.10",
|
|
40
40
|
"zod": "^4.4.3",
|
|
41
|
-
"@gaunt-sloth/core": "2.0.0-beta.
|
|
41
|
+
"@gaunt-sloth/core": "2.0.0-beta.2"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"./dist/*",
|