@qwen-code/arena-agent 0.0.8-dev.5 → 0.0.9-dev.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/.env.example +41 -15
- package/README.md +128 -29
- package/dist/agent.d.ts +8 -17
- package/dist/agent.js +60 -75
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +12 -4
- package/dist/cli.js.map +1 -1
- package/dist/compaction.js +2 -1
- package/dist/compaction.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +73 -9
- package/dist/config.js.map +1 -1
- package/dist/conversation-metrics.d.ts +61 -0
- package/dist/conversation-metrics.js +433 -0
- package/dist/conversation-metrics.js.map +1 -0
- package/dist/document-reader.js +9 -0
- package/dist/document-reader.js.map +1 -1
- package/dist/history.d.ts +31 -2
- package/dist/history.js +53 -3
- package/dist/history.js.map +1 -1
- package/dist/metrics.d.ts +61 -0
- package/dist/metrics.js +578 -0
- package/dist/metrics.js.map +1 -0
- package/dist/mock.js +153 -0
- package/dist/mock.js.map +1 -1
- package/dist/protocol.d.ts +2 -3
- package/dist/protocol.js +9 -5
- package/dist/protocol.js.map +1 -1
- package/dist/provider.js +22 -8
- package/dist/provider.js.map +1 -1
- package/dist/runtime-assets.d.ts +3 -0
- package/dist/runtime-assets.js +16 -0
- package/dist/runtime-assets.js.map +1 -0
- package/dist/sdk.d.ts +28 -1
- package/dist/sdk.js +38 -0
- package/dist/sdk.js.map +1 -1
- package/dist/server.js +486 -36
- package/dist/server.js.map +1 -1
- package/dist/side-query.d.ts +31 -0
- package/dist/side-query.js +138 -0
- package/dist/side-query.js.map +1 -0
- package/dist/spec.d.ts +1 -1
- package/dist/spec.js +6 -4
- package/dist/spec.js.map +1 -1
- package/dist/tools.d.ts +3 -8
- package/dist/tools.js +149 -200
- package/dist/tools.js.map +1 -1
- package/dist/tui.js +4 -3
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +155 -5
- package/dist/web/app.d.ts +1 -0
- package/dist/web/app.js +333 -10
- package/dist/web/app.js.map +1 -1
- package/docs/SDK.md +42 -0
- package/package.json +10 -20
- package/web/index.html +25 -0
- package/web/styles.css +109 -3
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -9
- package/dist/index.js.map +0 -1
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { ConversationMetricsAnalyzer, praiseComplaintPolicyVersion, summarizePraiseComplaint, summarizeSteerability, steerabilityPolicyVersion, } from "./conversation-metrics.js";
|
|
3
|
+
export const sessionMetricsAnalyzerVersion = "session-signals-v4";
|
|
4
|
+
export const bashRecoveryPolicyVersion = "arena-public-next-bash-v2";
|
|
5
|
+
export const toolHallucinationPolicyVersion = "exact-offered-name-v1";
|
|
6
|
+
const bashOriginPromptVersion = "bash-origin-v1";
|
|
7
|
+
const bashTerminalPromptVersion = "bash-terminal-v1";
|
|
8
|
+
const excerptLimit = 2_000;
|
|
9
|
+
const minimumJudgeConfidence = 0.7;
|
|
10
|
+
function record(value) {
|
|
11
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
12
|
+
? value
|
|
13
|
+
: {};
|
|
14
|
+
}
|
|
15
|
+
function boundedConfidence(value) {
|
|
16
|
+
const parsed = Number(value);
|
|
17
|
+
if (!Number.isFinite(parsed))
|
|
18
|
+
throw new Error("confidence must be a number");
|
|
19
|
+
return Math.min(1, Math.max(0, parsed));
|
|
20
|
+
}
|
|
21
|
+
function parseOriginResponse(value) {
|
|
22
|
+
const source = record(value);
|
|
23
|
+
const origin = String(source.origin || "");
|
|
24
|
+
if (!["model", "environment", "expected_nonzero", "ambiguous"].includes(origin)) {
|
|
25
|
+
throw new Error("invalid Bash failure origin");
|
|
26
|
+
}
|
|
27
|
+
const reason = String(source.reason || "").trim();
|
|
28
|
+
if (!reason)
|
|
29
|
+
throw new Error("Bash failure reason is required");
|
|
30
|
+
return {
|
|
31
|
+
origin,
|
|
32
|
+
confidence: boundedConfidence(source.confidence),
|
|
33
|
+
reason: reason.slice(0, 500),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function parseTerminalResponse(value) {
|
|
37
|
+
const source = record(value);
|
|
38
|
+
const outcome = String(source.outcome || "");
|
|
39
|
+
if (![
|
|
40
|
+
"gave_up",
|
|
41
|
+
"resolved_by_alternative",
|
|
42
|
+
"still_open",
|
|
43
|
+
"censored",
|
|
44
|
+
"ambiguous",
|
|
45
|
+
].includes(outcome)) {
|
|
46
|
+
throw new Error("invalid Bash terminal outcome");
|
|
47
|
+
}
|
|
48
|
+
const reason = String(source.reason || "").trim();
|
|
49
|
+
if (!reason)
|
|
50
|
+
throw new Error("Bash terminal reason is required");
|
|
51
|
+
return {
|
|
52
|
+
outcome,
|
|
53
|
+
confidence: boundedConfidence(source.confidence),
|
|
54
|
+
reason: reason.slice(0, 500),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const bashOriginDefinition = {
|
|
58
|
+
kind: "bash_failure_origin",
|
|
59
|
+
promptVersion: bashOriginPromptVersion,
|
|
60
|
+
systemPrompt: [
|
|
61
|
+
"You adjudicate Bash failures in agent traces.",
|
|
62
|
+
"Classify the failure as model, environment, expected_nonzero, or ambiguous.",
|
|
63
|
+
"model means a correct agent action in the same environment should have succeeded, including malformed shell, wrong flags/paths, or code the agent just broke.",
|
|
64
|
+
"environment means the same correct action could not succeed because of infrastructure, platform policy, unavailable credentials, resource failure, or a pre-existing baseline defect.",
|
|
65
|
+
"expected_nonzero means the command intentionally used a nonzero exit for probing or diagnosis.",
|
|
66
|
+
"Do not infer blame from one stderr keyword alone. When evidence is insufficient choose ambiguous.",
|
|
67
|
+
'Schema: {"origin":"model|environment|expected_nonzero|ambiguous","confidence":0.0,"reason":"short evidence-based reason"}',
|
|
68
|
+
].join("\n"),
|
|
69
|
+
parse: parseOriginResponse,
|
|
70
|
+
};
|
|
71
|
+
const bashTerminalDefinition = {
|
|
72
|
+
kind: "bash_episode_terminal",
|
|
73
|
+
promptVersion: bashTerminalPromptVersion,
|
|
74
|
+
systemPrompt: [
|
|
75
|
+
"You adjudicate whether an agent gave up after its own unresolved Bash error.",
|
|
76
|
+
"gave_up requires an unresolved necessary step plus evidence the agent actively stopped, refused to continue, or falsely finalized without an alternative resolution.",
|
|
77
|
+
"resolved_by_alternative means the task no longer needs a successful Bash retry because another evidenced method solved it.",
|
|
78
|
+
"still_open means the episode remains unresolved but there is no evidence of giving up.",
|
|
79
|
+
"censored means user/platform cancellation, trace truncation, or a genuine wait for required external input.",
|
|
80
|
+
"When evidence is insufficient choose ambiguous. User silence alone is not giving up.",
|
|
81
|
+
'Schema: {"outcome":"gave_up|resolved_by_alternative|still_open|censored|ambiguous","confidence":0.0,"reason":"short evidence-based reason"}',
|
|
82
|
+
].join("\n"),
|
|
83
|
+
parse: parseTerminalResponse,
|
|
84
|
+
};
|
|
85
|
+
/** Metric-specific adapter over the generic structured side-query subsystem. */
|
|
86
|
+
export class ModelBashMetricJudge {
|
|
87
|
+
runner;
|
|
88
|
+
constructor(runner) {
|
|
89
|
+
this.runner = runner;
|
|
90
|
+
}
|
|
91
|
+
async classifyFailure(input) {
|
|
92
|
+
const result = await this.runner.run(bashOriginDefinition, input);
|
|
93
|
+
if (!result.value) {
|
|
94
|
+
return {
|
|
95
|
+
origin: "ambiguous",
|
|
96
|
+
reason: result.audit.error || "side query returned no decision",
|
|
97
|
+
confidence: 0,
|
|
98
|
+
audit: result.audit,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const audit = { ...result.audit, confidence: result.value.confidence };
|
|
102
|
+
if (result.value.origin !== "ambiguous" &&
|
|
103
|
+
result.value.confidence < minimumJudgeConfidence) {
|
|
104
|
+
return {
|
|
105
|
+
origin: "ambiguous",
|
|
106
|
+
reason: `low-confidence ${result.value.origin} decision: ${result.value.reason}`,
|
|
107
|
+
confidence: result.value.confidence,
|
|
108
|
+
audit,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { ...result.value, audit };
|
|
112
|
+
}
|
|
113
|
+
async classifyTerminal(input) {
|
|
114
|
+
const result = await this.runner.run(bashTerminalDefinition, input);
|
|
115
|
+
if (!result.value) {
|
|
116
|
+
return {
|
|
117
|
+
outcome: "ambiguous",
|
|
118
|
+
reason: result.audit.error || "side query returned no decision",
|
|
119
|
+
confidence: 0,
|
|
120
|
+
audit: result.audit,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const audit = { ...result.audit, confidence: result.value.confidence };
|
|
124
|
+
if (result.value.outcome !== "ambiguous" &&
|
|
125
|
+
result.value.confidence < minimumJudgeConfidence) {
|
|
126
|
+
return {
|
|
127
|
+
outcome: "ambiguous",
|
|
128
|
+
reason: `low-confidence ${result.value.outcome} decision: ${result.value.reason}`,
|
|
129
|
+
confidence: result.value.confidence,
|
|
130
|
+
audit,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return { ...result.value, audit };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function excerpt(value) {
|
|
137
|
+
const text = typeof value === "string" ? value : "";
|
|
138
|
+
return text.length > excerptLimit
|
|
139
|
+
? `${text.slice(0, excerptLimit)}\n…[metric excerpt truncated]`
|
|
140
|
+
: text;
|
|
141
|
+
}
|
|
142
|
+
function parseJson(value) {
|
|
143
|
+
try {
|
|
144
|
+
return record(JSON.parse(value));
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function observationId(messageIndex, callIndex, call) {
|
|
151
|
+
if (call.id)
|
|
152
|
+
return `call:${call.id}`;
|
|
153
|
+
const digest = crypto
|
|
154
|
+
.createHash("sha256")
|
|
155
|
+
.update(JSON.stringify({
|
|
156
|
+
messageIndex,
|
|
157
|
+
callIndex,
|
|
158
|
+
name: call.function?.name || "",
|
|
159
|
+
arguments: call.function?.arguments || "",
|
|
160
|
+
}))
|
|
161
|
+
.digest("hex")
|
|
162
|
+
.slice(0, 20);
|
|
163
|
+
return `anonymous:${digest}`;
|
|
164
|
+
}
|
|
165
|
+
function extractToolCalls(messages) {
|
|
166
|
+
const results = new Map();
|
|
167
|
+
for (const message of messages) {
|
|
168
|
+
if (message.role === "tool" && !results.has(message.tool_call_id)) {
|
|
169
|
+
results.set(message.tool_call_id, message);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const extracted = [];
|
|
173
|
+
for (const [messageIndex, message] of messages.entries()) {
|
|
174
|
+
if (message.role !== "assistant")
|
|
175
|
+
continue;
|
|
176
|
+
for (const [callIndex, call] of (message.tool_calls || []).entries()) {
|
|
177
|
+
extracted.push({
|
|
178
|
+
observationId: observationId(messageIndex, callIndex, call),
|
|
179
|
+
toolCallId: call.id || "",
|
|
180
|
+
call,
|
|
181
|
+
result: call.id ? results.get(call.id) : undefined,
|
|
182
|
+
assistant: message,
|
|
183
|
+
messageIndex,
|
|
184
|
+
callIndex,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return extracted;
|
|
189
|
+
}
|
|
190
|
+
function userText(message) {
|
|
191
|
+
if (!message || message.role !== "user")
|
|
192
|
+
return "";
|
|
193
|
+
return typeof message.content === "string"
|
|
194
|
+
? message.content
|
|
195
|
+
: message.content
|
|
196
|
+
.filter((part) => "text" in part)
|
|
197
|
+
.map((part) => ("text" in part ? part.text : ""))
|
|
198
|
+
.join("\n");
|
|
199
|
+
}
|
|
200
|
+
function nearestUserText(messages, before) {
|
|
201
|
+
for (let index = before - 1; index >= 0; index -= 1) {
|
|
202
|
+
const text = userText(messages[index]);
|
|
203
|
+
if (text)
|
|
204
|
+
return excerpt(text);
|
|
205
|
+
}
|
|
206
|
+
return "";
|
|
207
|
+
}
|
|
208
|
+
function bashArguments(call) {
|
|
209
|
+
return parseJson(call.function?.arguments || "{}");
|
|
210
|
+
}
|
|
211
|
+
function bashResult(call) {
|
|
212
|
+
return call.result ? parseJson(call.result.content) : {};
|
|
213
|
+
}
|
|
214
|
+
function buildBashCallMetric(extracted, sequence) {
|
|
215
|
+
if (!extracted.result)
|
|
216
|
+
return undefined;
|
|
217
|
+
const result = bashResult(extracted);
|
|
218
|
+
const exitValue = result.exit_code;
|
|
219
|
+
const exitCode = typeof exitValue === "number" ? exitValue : null;
|
|
220
|
+
const status = typeof result.status === "string" ? result.status : null;
|
|
221
|
+
const stderr = excerpt(result.stderr ?? result.error ?? result.message);
|
|
222
|
+
const stdout = excerpt(result.stdout);
|
|
223
|
+
const interrupted = result.interrupted === true;
|
|
224
|
+
const timedOut = status === "timeout" ||
|
|
225
|
+
(exitCode === null && /command exceeded|timed?\s*out/i.test(stderr));
|
|
226
|
+
const failed = interrupted ||
|
|
227
|
+
timedOut ||
|
|
228
|
+
status === "error" ||
|
|
229
|
+
(exitCode !== null && exitCode !== 0);
|
|
230
|
+
return {
|
|
231
|
+
observationId: extracted.observationId,
|
|
232
|
+
toolCallId: extracted.toolCallId,
|
|
233
|
+
sequence,
|
|
234
|
+
command: excerpt(bashArguments(extracted.call).command),
|
|
235
|
+
status,
|
|
236
|
+
exitCode,
|
|
237
|
+
failed,
|
|
238
|
+
timedOut,
|
|
239
|
+
interrupted,
|
|
240
|
+
stdoutExcerpt: stdout,
|
|
241
|
+
stderrExcerpt: stderr,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function failureJudgeInput(messages, extracted, call) {
|
|
245
|
+
return {
|
|
246
|
+
taskContext: nearestUserText(messages, extracted.messageIndex),
|
|
247
|
+
assistantBeforeCall: excerpt(extracted.assistant.content),
|
|
248
|
+
command: call.command,
|
|
249
|
+
status: call.status,
|
|
250
|
+
exitCode: call.exitCode,
|
|
251
|
+
timedOut: call.timedOut,
|
|
252
|
+
stdout: call.stdoutExcerpt,
|
|
253
|
+
stderr: call.stderrExcerpt,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function finalAssistant(messages) {
|
|
257
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
258
|
+
const message = messages[index];
|
|
259
|
+
if (message?.role === "assistant")
|
|
260
|
+
return message;
|
|
261
|
+
}
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
function terminalJudgeInput(messages, episode, calls) {
|
|
265
|
+
const started = calls.find((call) => call.observationId === episode.startedByObservationId);
|
|
266
|
+
const final = finalAssistant(messages);
|
|
267
|
+
return {
|
|
268
|
+
failedCommand: started?.command || "",
|
|
269
|
+
failureReason: started?.originReason || "",
|
|
270
|
+
followupBashCalls: episode.followupObservationIds.length,
|
|
271
|
+
finalAssistantResponse: excerpt(final?.content),
|
|
272
|
+
taskContext: nearestUserText(messages, messages.length),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function emptyBashSummary() {
|
|
276
|
+
return {
|
|
277
|
+
modelErrors: 0,
|
|
278
|
+
recovered: 0,
|
|
279
|
+
gaveUp: 0,
|
|
280
|
+
averageCallsToRecover: null,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
export function summarizeBashRecovery(calls, episodes) {
|
|
284
|
+
const summary = emptyBashSummary();
|
|
285
|
+
summary.modelErrors = calls.filter((call) => call.origin === "model").length;
|
|
286
|
+
summary.recovered = episodes.filter((episode) => episode.state === "recovered").length;
|
|
287
|
+
summary.gaveUp = episodes.filter((episode) => episode.state === "gave_up").length;
|
|
288
|
+
const recoveryCalls = episodes
|
|
289
|
+
.map((episode) => episode.callsToRecover)
|
|
290
|
+
.filter((value) => value !== undefined);
|
|
291
|
+
summary.averageCallsToRecover = recoveryCalls.length
|
|
292
|
+
? recoveryCalls.reduce((total, value) => total + value, 0) /
|
|
293
|
+
recoveryCalls.length
|
|
294
|
+
: null;
|
|
295
|
+
return summary;
|
|
296
|
+
}
|
|
297
|
+
export function summarizeToolHallucination(calls) {
|
|
298
|
+
return {
|
|
299
|
+
total: calls.length,
|
|
300
|
+
hallucinated: calls.filter((call) => call.hallucinated).length,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Normalizes persisted metric snapshots to the current compact schema.
|
|
305
|
+
* Detailed observations are canonical; every rollup is recomputed from them
|
|
306
|
+
* so legacy materialized counters cannot drift into a resumed session.
|
|
307
|
+
*/
|
|
308
|
+
export function normalizeSessionMetrics(value) {
|
|
309
|
+
const source = record(value);
|
|
310
|
+
const bashSource = record(source.bashRecovery);
|
|
311
|
+
const toolSource = record(source.toolHallucination);
|
|
312
|
+
const praiseSource = record(source.praiseComplaint);
|
|
313
|
+
const steerSource = record(source.steerability);
|
|
314
|
+
if (!source.bashRecovery ||
|
|
315
|
+
!source.toolHallucination ||
|
|
316
|
+
!source.praiseComplaint ||
|
|
317
|
+
!source.steerability) {
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
const bashCalls = structuredClone(Array.isArray(bashSource.calls) ? bashSource.calls : []);
|
|
321
|
+
const episodes = structuredClone(Array.isArray(bashSource.episodes) ? bashSource.episodes : []);
|
|
322
|
+
const toolCalls = structuredClone(Array.isArray(toolSource.calls) ? toolSource.calls : []);
|
|
323
|
+
const observations = structuredClone(Array.isArray(praiseSource.observations) ? praiseSource.observations : []);
|
|
324
|
+
const corrections = structuredClone(Array.isArray(steerSource.corrections) ? steerSource.corrections : []);
|
|
325
|
+
// v2 represented an ambiguous repair attempt as awaiting_user and also
|
|
326
|
+
// counted it as ambiguous. v3 makes the canonical state exclusive.
|
|
327
|
+
for (const correction of corrections) {
|
|
328
|
+
if (correction.attemptStatus === "ambiguous" &&
|
|
329
|
+
correction.state === "awaiting_user") {
|
|
330
|
+
correction.state = "ambiguous";
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
const evaluationStatus = String(source.evaluationStatus || "partial");
|
|
334
|
+
return {
|
|
335
|
+
schemaVersion: 3,
|
|
336
|
+
analyzerVersion: sessionMetricsAnalyzerVersion,
|
|
337
|
+
revision: Math.max(0, Number(source.revision) || 0),
|
|
338
|
+
updatedAt: typeof source.updatedAt === "string"
|
|
339
|
+
? source.updatedAt
|
|
340
|
+
: new Date(0).toISOString(),
|
|
341
|
+
throughTurnId: typeof source.throughTurnId === "string" ? source.throughTurnId : "",
|
|
342
|
+
evaluationStatus: ["ready", "partial", "error"].includes(evaluationStatus)
|
|
343
|
+
? evaluationStatus
|
|
344
|
+
: "partial",
|
|
345
|
+
evaluationErrors: Array.isArray(source.evaluationErrors)
|
|
346
|
+
? source.evaluationErrors.map(String).slice(0, 20)
|
|
347
|
+
: [],
|
|
348
|
+
bashRecovery: {
|
|
349
|
+
policyVersion: typeof bashSource.policyVersion === "string"
|
|
350
|
+
? bashSource.policyVersion
|
|
351
|
+
: bashRecoveryPolicyVersion,
|
|
352
|
+
calls: bashCalls,
|
|
353
|
+
episodes,
|
|
354
|
+
summary: summarizeBashRecovery(bashCalls, episodes),
|
|
355
|
+
},
|
|
356
|
+
toolHallucination: {
|
|
357
|
+
policyVersion: typeof toolSource.policyVersion === "string"
|
|
358
|
+
? toolSource.policyVersion
|
|
359
|
+
: toolHallucinationPolicyVersion,
|
|
360
|
+
calls: toolCalls,
|
|
361
|
+
summary: summarizeToolHallucination(toolCalls),
|
|
362
|
+
},
|
|
363
|
+
praiseComplaint: {
|
|
364
|
+
policyVersion: typeof praiseSource.policyVersion === "string"
|
|
365
|
+
? praiseSource.policyVersion
|
|
366
|
+
: praiseComplaintPolicyVersion,
|
|
367
|
+
observations,
|
|
368
|
+
summary: summarizePraiseComplaint(observations),
|
|
369
|
+
},
|
|
370
|
+
steerability: {
|
|
371
|
+
policyVersion: typeof steerSource.policyVersion === "string"
|
|
372
|
+
? steerSource.policyVersion
|
|
373
|
+
: steerabilityPolicyVersion,
|
|
374
|
+
corrections,
|
|
375
|
+
summary: summarizeSteerability(corrections),
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
function advanceEpisodes(previous, newCalls) {
|
|
380
|
+
const episodes = structuredClone([...previous]);
|
|
381
|
+
let open = [...episodes]
|
|
382
|
+
.reverse()
|
|
383
|
+
.find((episode) => episode.state === "recovering");
|
|
384
|
+
for (const call of [...newCalls].sort((left, right) => left.sequence - right.sequence)) {
|
|
385
|
+
if (open) {
|
|
386
|
+
open.followupObservationIds.push(call.observationId);
|
|
387
|
+
if (!call.failed) {
|
|
388
|
+
open.state = "recovered";
|
|
389
|
+
open.callsToRecover = open.followupObservationIds.length;
|
|
390
|
+
open.recoveredByObservationId = call.observationId;
|
|
391
|
+
open = undefined;
|
|
392
|
+
}
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
if (call.failed && call.origin === "model") {
|
|
396
|
+
open = {
|
|
397
|
+
id: `bash-episode:${call.observationId}`,
|
|
398
|
+
startedByObservationId: call.observationId,
|
|
399
|
+
startedByToolCallId: call.toolCallId,
|
|
400
|
+
state: "recovering",
|
|
401
|
+
followupObservationIds: [],
|
|
402
|
+
};
|
|
403
|
+
episodes.push(open);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return episodes;
|
|
407
|
+
}
|
|
408
|
+
function terminalState(decision) {
|
|
409
|
+
if (decision.outcome === "gave_up")
|
|
410
|
+
return "gave_up";
|
|
411
|
+
if (decision.outcome === "resolved_by_alternative") {
|
|
412
|
+
return "resolved_by_alternative";
|
|
413
|
+
}
|
|
414
|
+
if (decision.outcome === "censored")
|
|
415
|
+
return "censored";
|
|
416
|
+
return "recovering";
|
|
417
|
+
}
|
|
418
|
+
export class SessionMetricsAnalyzer {
|
|
419
|
+
options;
|
|
420
|
+
fallbackOfferedToolNames;
|
|
421
|
+
now;
|
|
422
|
+
constructor(options = {}) {
|
|
423
|
+
this.options = options;
|
|
424
|
+
this.fallbackOfferedToolNames = [
|
|
425
|
+
...new Set(options.fallbackOfferedToolNames || []),
|
|
426
|
+
];
|
|
427
|
+
this.now = options.now || (() => new Date());
|
|
428
|
+
}
|
|
429
|
+
async update(input) {
|
|
430
|
+
const errors = [];
|
|
431
|
+
const extracted = extractToolCalls(input.messages);
|
|
432
|
+
const previousBash = new Map((input.previous?.bashRecovery.calls || []).map((call) => [
|
|
433
|
+
call.observationId,
|
|
434
|
+
structuredClone(call),
|
|
435
|
+
]));
|
|
436
|
+
const previousMaxBashSequence = Math.max(-1, ...[...previousBash.values()].map((call) => call.sequence));
|
|
437
|
+
const previousTools = new Map((input.previous?.toolHallucination.calls || []).map((call) => [
|
|
438
|
+
call.observationId,
|
|
439
|
+
structuredClone(call),
|
|
440
|
+
]));
|
|
441
|
+
let nextBashSequence = Math.max(-1, ...[...previousBash.values()].map((call) => call.sequence)) + 1;
|
|
442
|
+
let nextToolSequence = Math.max(-1, ...[...previousTools.values()].map((call) => call.sequence)) + 1;
|
|
443
|
+
for (const item of extracted) {
|
|
444
|
+
let toolObservation = previousTools.get(item.observationId);
|
|
445
|
+
if (!toolObservation) {
|
|
446
|
+
const snapshot = item.toolCallId
|
|
447
|
+
? input.offeredToolNamesByCallId?.get(item.toolCallId)
|
|
448
|
+
: undefined;
|
|
449
|
+
const offeredToolNames = snapshot
|
|
450
|
+
? [...snapshot]
|
|
451
|
+
: [...this.fallbackOfferedToolNames];
|
|
452
|
+
toolObservation = {
|
|
453
|
+
observationId: item.observationId,
|
|
454
|
+
toolCallId: item.toolCallId,
|
|
455
|
+
sequence: nextToolSequence++,
|
|
456
|
+
name: item.call.function?.name || "",
|
|
457
|
+
offeredToolNames,
|
|
458
|
+
catalogSource: snapshot
|
|
459
|
+
? "request_snapshot"
|
|
460
|
+
: offeredToolNames.length
|
|
461
|
+
? "current_fallback"
|
|
462
|
+
: "unknown",
|
|
463
|
+
hallucinated: offeredToolNames.length > 0 &&
|
|
464
|
+
!offeredToolNames.includes(item.call.function?.name || ""),
|
|
465
|
+
};
|
|
466
|
+
previousTools.set(item.observationId, toolObservation);
|
|
467
|
+
}
|
|
468
|
+
if (item.call.function?.name !== "bash" ||
|
|
469
|
+
toolObservation.hallucinated ||
|
|
470
|
+
previousBash.has(item.observationId)) {
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
const call = buildBashCallMetric(item, nextBashSequence);
|
|
474
|
+
if (!call)
|
|
475
|
+
continue;
|
|
476
|
+
nextBashSequence += 1;
|
|
477
|
+
if (call.failed) {
|
|
478
|
+
if (this.options.judge) {
|
|
479
|
+
try {
|
|
480
|
+
const decision = await this.options.judge.classifyFailure(failureJudgeInput(input.messages, item, call));
|
|
481
|
+
call.origin = decision.origin;
|
|
482
|
+
call.originReason = decision.reason;
|
|
483
|
+
call.originSource = "side_query";
|
|
484
|
+
if (decision.audit)
|
|
485
|
+
call.originAudit = decision.audit;
|
|
486
|
+
if (decision.audit?.error)
|
|
487
|
+
errors.push(decision.audit.error);
|
|
488
|
+
}
|
|
489
|
+
catch (error) {
|
|
490
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
491
|
+
call.origin = "ambiguous";
|
|
492
|
+
call.originReason = "the Bash failure judge could not return a decision";
|
|
493
|
+
call.originSource = "unclassified";
|
|
494
|
+
errors.push(`Bash failure judge: ${message.slice(0, 500)}`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
call.origin = "ambiguous";
|
|
499
|
+
call.originReason = "no Bash failure side-query judge was available";
|
|
500
|
+
call.originSource = "unclassified";
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
previousBash.set(item.observationId, call);
|
|
504
|
+
}
|
|
505
|
+
const bashCalls = [...previousBash.values()].sort((left, right) => left.sequence - right.sequence);
|
|
506
|
+
const toolCalls = [...previousTools.values()].sort((left, right) => left.sequence - right.sequence);
|
|
507
|
+
const episodes = advanceEpisodes(input.previous?.bashRecovery.episodes || [], bashCalls.filter((call) => call.sequence > previousMaxBashSequence));
|
|
508
|
+
const open = episodes.at(-1);
|
|
509
|
+
if (open?.state === "recovering") {
|
|
510
|
+
if (input.turnStatus === "error") {
|
|
511
|
+
open.state = "censored";
|
|
512
|
+
open.terminalReason = "the agent turn ended with a runtime/model error";
|
|
513
|
+
}
|
|
514
|
+
else if (this.options.judge) {
|
|
515
|
+
try {
|
|
516
|
+
const decision = await this.options.judge.classifyTerminal(terminalJudgeInput(input.messages, open, bashCalls));
|
|
517
|
+
open.state = terminalState(decision);
|
|
518
|
+
open.terminalReason = decision.reason;
|
|
519
|
+
if (decision.audit)
|
|
520
|
+
open.terminalAudit = decision.audit;
|
|
521
|
+
if (decision.audit?.error)
|
|
522
|
+
errors.push(decision.audit.error);
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
526
|
+
open.terminalReason = "the Bash terminal judge could not return a decision";
|
|
527
|
+
errors.push(`Bash terminal judge: ${message.slice(0, 500)}`);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const bashSummary = summarizeBashRecovery(bashCalls, episodes);
|
|
532
|
+
const toolSummary = summarizeToolHallucination(toolCalls);
|
|
533
|
+
const conversation = await new ConversationMetricsAnalyzer(this.options.conversationJudge).update({
|
|
534
|
+
previousPraiseComplaint: input.previous?.praiseComplaint,
|
|
535
|
+
previousSteerability: input.previous?.steerability,
|
|
536
|
+
throughTurnId: input.throughTurnId,
|
|
537
|
+
turnStatus: input.turnStatus,
|
|
538
|
+
...(input.currentUserText !== undefined
|
|
539
|
+
? { currentUserText: input.currentUserText }
|
|
540
|
+
: {}),
|
|
541
|
+
...(input.previousAssistantText !== undefined
|
|
542
|
+
? { previousAssistantText: input.previousAssistantText }
|
|
543
|
+
: {}),
|
|
544
|
+
...(input.currentTurnMessages
|
|
545
|
+
? { currentTurnMessages: input.currentTurnMessages }
|
|
546
|
+
: {}),
|
|
547
|
+
});
|
|
548
|
+
errors.push(...conversation.errors);
|
|
549
|
+
const partial = errors.length > 0 ||
|
|
550
|
+
bashCalls.some((call) => call.origin === "ambiguous") ||
|
|
551
|
+
episodes.some((episode) => episode.state === "recovering") ||
|
|
552
|
+
toolCalls.some((call) => call.catalogSource === "unknown") ||
|
|
553
|
+
conversation.partial;
|
|
554
|
+
return {
|
|
555
|
+
schemaVersion: 3,
|
|
556
|
+
analyzerVersion: sessionMetricsAnalyzerVersion,
|
|
557
|
+
revision: (input.previous?.revision || 0) + 1,
|
|
558
|
+
updatedAt: this.now().toISOString(),
|
|
559
|
+
throughTurnId: input.throughTurnId,
|
|
560
|
+
evaluationStatus: errors.length ? "error" : partial ? "partial" : "ready",
|
|
561
|
+
evaluationErrors: [...new Set(errors)].slice(0, 20),
|
|
562
|
+
bashRecovery: {
|
|
563
|
+
policyVersion: bashRecoveryPolicyVersion,
|
|
564
|
+
calls: bashCalls,
|
|
565
|
+
episodes,
|
|
566
|
+
summary: bashSummary,
|
|
567
|
+
},
|
|
568
|
+
toolHallucination: {
|
|
569
|
+
policyVersion: toolHallucinationPolicyVersion,
|
|
570
|
+
calls: toolCalls,
|
|
571
|
+
summary: toolSummary,
|
|
572
|
+
},
|
|
573
|
+
praiseComplaint: conversation.praiseComplaint,
|
|
574
|
+
steerability: conversation.steerability,
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|