@kindgi/api 0.1.3 → 0.1.4-rc.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 (193) hide show
  1. package/dist/agent-binding.d.ts +18 -4
  2. package/dist/agent-binding.d.ts.map +1 -1
  3. package/dist/agent-pins.d.ts +48 -0
  4. package/dist/agent-pins.d.ts.map +1 -0
  5. package/dist/agent-pins.js +102 -0
  6. package/dist/agent-pins.js.map +1 -0
  7. package/dist/app.d.ts +22 -0
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +20 -2
  10. package/dist/app.js.map +1 -1
  11. package/dist/block-binding.d.ts +132 -0
  12. package/dist/block-binding.d.ts.map +1 -0
  13. package/dist/block-binding.js +4 -0
  14. package/dist/block-binding.js.map +1 -0
  15. package/dist/block-pins.d.ts +22 -0
  16. package/dist/block-pins.d.ts.map +1 -0
  17. package/dist/block-pins.js +112 -0
  18. package/dist/block-pins.js.map +1 -0
  19. package/dist/cost-binding.d.ts +20 -1
  20. package/dist/cost-binding.d.ts.map +1 -1
  21. package/dist/cost-binding.js +4 -0
  22. package/dist/cost-binding.js.map +1 -1
  23. package/dist/deploy-versions.d.ts +58 -0
  24. package/dist/deploy-versions.d.ts.map +1 -0
  25. package/dist/deploy-versions.js +91 -0
  26. package/dist/deploy-versions.js.map +1 -0
  27. package/dist/deployment-binding.d.ts +24 -3
  28. package/dist/deployment-binding.d.ts.map +1 -1
  29. package/dist/derive-agent-version.d.ts +69 -0
  30. package/dist/derive-agent-version.d.ts.map +1 -0
  31. package/dist/derive-agent-version.js +139 -0
  32. package/dist/derive-agent-version.js.map +1 -0
  33. package/dist/errors.d.ts.map +1 -1
  34. package/dist/errors.js +17 -0
  35. package/dist/errors.js.map +1 -1
  36. package/dist/eval-case-binding.d.ts +65 -0
  37. package/dist/eval-case-binding.d.ts.map +1 -0
  38. package/dist/eval-case-binding.js +4 -0
  39. package/dist/eval-case-binding.js.map +1 -0
  40. package/dist/eval-run-binding.d.ts +30 -0
  41. package/dist/eval-run-binding.d.ts.map +1 -1
  42. package/dist/eval-run-dispatcher.d.ts +38 -3
  43. package/dist/eval-run-dispatcher.d.ts.map +1 -1
  44. package/dist/eval-run-dispatcher.js +21 -15
  45. package/dist/eval-run-dispatcher.js.map +1 -1
  46. package/dist/eval-suite-binding.d.ts +1 -1
  47. package/dist/eval-suite-binding.d.ts.map +1 -1
  48. package/dist/eval-suite-binding.js +2 -0
  49. package/dist/eval-suite-binding.js.map +1 -1
  50. package/dist/flow-binding.d.ts +10 -4
  51. package/dist/flow-binding.d.ts.map +1 -1
  52. package/dist/flow-pins.d.ts +36 -0
  53. package/dist/flow-pins.d.ts.map +1 -0
  54. package/dist/flow-pins.js +81 -0
  55. package/dist/flow-pins.js.map +1 -0
  56. package/dist/index.d.ts +17 -6
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +8 -2
  59. package/dist/index.js.map +1 -1
  60. package/dist/judged-dispatcher.d.ts +134 -0
  61. package/dist/judged-dispatcher.d.ts.map +1 -0
  62. package/dist/judged-dispatcher.js +297 -0
  63. package/dist/judged-dispatcher.js.map +1 -0
  64. package/dist/judged-items.d.ts +86 -0
  65. package/dist/judged-items.d.ts.map +1 -0
  66. package/dist/judged-items.js +184 -0
  67. package/dist/judged-items.js.map +1 -0
  68. package/dist/judgment-binding.d.ts +316 -0
  69. package/dist/judgment-binding.d.ts.map +1 -0
  70. package/dist/judgment-binding.js +19 -0
  71. package/dist/judgment-binding.js.map +1 -0
  72. package/dist/openapi/generate.d.ts.map +1 -1
  73. package/dist/openapi/generate.js +4 -1
  74. package/dist/openapi/generate.js.map +1 -1
  75. package/dist/openapi/operations.d.ts.map +1 -1
  76. package/dist/openapi/operations.js +461 -7
  77. package/dist/openapi/operations.js.map +1 -1
  78. package/dist/openapi/schemas.d.ts +40 -0
  79. package/dist/openapi/schemas.d.ts.map +1 -1
  80. package/dist/openapi/schemas.js +843 -7
  81. package/dist/openapi/schemas.js.map +1 -1
  82. package/dist/provider-binding.d.ts +12 -7
  83. package/dist/provider-binding.d.ts.map +1 -1
  84. package/dist/routes/agents.d.ts +9 -1
  85. package/dist/routes/agents.d.ts.map +1 -1
  86. package/dist/routes/agents.js +175 -11
  87. package/dist/routes/agents.js.map +1 -1
  88. package/dist/routes/blocks.d.ts +19 -0
  89. package/dist/routes/blocks.d.ts.map +1 -0
  90. package/dist/routes/blocks.js +281 -0
  91. package/dist/routes/blocks.js.map +1 -0
  92. package/dist/routes/cost.d.ts.map +1 -1
  93. package/dist/routes/cost.js +47 -2
  94. package/dist/routes/cost.js.map +1 -1
  95. package/dist/routes/deployments.d.ts +3 -0
  96. package/dist/routes/deployments.d.ts.map +1 -1
  97. package/dist/routes/deployments.js +208 -55
  98. package/dist/routes/deployments.js.map +1 -1
  99. package/dist/routes/eval-comparison.d.ts +14 -0
  100. package/dist/routes/eval-comparison.d.ts.map +1 -0
  101. package/dist/routes/eval-comparison.js +87 -0
  102. package/dist/routes/eval-comparison.js.map +1 -0
  103. package/dist/routes/eval-runs.d.ts.map +1 -1
  104. package/dist/routes/eval-runs.js +8 -0
  105. package/dist/routes/eval-runs.js.map +1 -1
  106. package/dist/routes/flows.d.ts +13 -1
  107. package/dist/routes/flows.d.ts.map +1 -1
  108. package/dist/routes/flows.js +44 -3
  109. package/dist/routes/flows.js.map +1 -1
  110. package/dist/routes/hierarchy-errors.d.ts +35 -0
  111. package/dist/routes/hierarchy-errors.d.ts.map +1 -0
  112. package/dist/routes/hierarchy-errors.js +39 -0
  113. package/dist/routes/hierarchy-errors.js.map +1 -0
  114. package/dist/routes/judged-suites.d.ts +20 -0
  115. package/dist/routes/judged-suites.d.ts.map +1 -0
  116. package/dist/routes/judged-suites.js +272 -0
  117. package/dist/routes/judged-suites.js.map +1 -0
  118. package/dist/routes/judgment-context.d.ts +22 -0
  119. package/dist/routes/judgment-context.d.ts.map +1 -0
  120. package/dist/routes/judgment-context.js +88 -0
  121. package/dist/routes/judgment-context.js.map +1 -0
  122. package/dist/routes/judgment-flow-context.d.ts +32 -0
  123. package/dist/routes/judgment-flow-context.d.ts.map +1 -0
  124. package/dist/routes/judgment-flow-context.js +195 -0
  125. package/dist/routes/judgment-flow-context.js.map +1 -0
  126. package/dist/routes/judgments.d.ts +41 -0
  127. package/dist/routes/judgments.d.ts.map +1 -0
  128. package/dist/routes/judgments.js +566 -0
  129. package/dist/routes/judgments.js.map +1 -0
  130. package/dist/routes/orgs.d.ts +5 -2
  131. package/dist/routes/orgs.d.ts.map +1 -1
  132. package/dist/routes/orgs.js +38 -22
  133. package/dist/routes/orgs.js.map +1 -1
  134. package/dist/routes/policies.d.ts.map +1 -1
  135. package/dist/routes/policies.js +12 -1
  136. package/dist/routes/policies.js.map +1 -1
  137. package/dist/routes/projects.d.ts +10 -2
  138. package/dist/routes/projects.d.ts.map +1 -1
  139. package/dist/routes/projects.js +87 -79
  140. package/dist/routes/projects.js.map +1 -1
  141. package/dist/routes/providers.d.ts.map +1 -1
  142. package/dist/routes/providers.js +6 -1
  143. package/dist/routes/providers.js.map +1 -1
  144. package/dist/routes/runs.js +24 -3
  145. package/dist/routes/runs.js.map +1 -1
  146. package/dist/routes/teams.d.ts +6 -2
  147. package/dist/routes/teams.d.ts.map +1 -1
  148. package/dist/routes/teams.js +77 -73
  149. package/dist/routes/teams.js.map +1 -1
  150. package/openapi.json +13545 -10103
  151. package/package.json +21 -21
  152. package/src/agent-binding.ts +19 -4
  153. package/src/agent-pins.ts +147 -0
  154. package/src/app.ts +71 -2
  155. package/src/block-binding.ts +137 -0
  156. package/src/block-pins.ts +148 -0
  157. package/src/cost-binding.ts +21 -1
  158. package/src/deploy-versions.ts +157 -0
  159. package/src/deployment-binding.ts +27 -3
  160. package/src/derive-agent-version.ts +206 -0
  161. package/src/errors.ts +17 -0
  162. package/src/eval-case-binding.ts +71 -0
  163. package/src/eval-run-binding.ts +33 -0
  164. package/src/eval-run-dispatcher.ts +57 -16
  165. package/src/eval-suite-binding.ts +2 -0
  166. package/src/flow-binding.ts +11 -4
  167. package/src/flow-pins.ts +113 -0
  168. package/src/index.ts +85 -2
  169. package/src/judged-dispatcher.ts +507 -0
  170. package/src/judged-items.ts +263 -0
  171. package/src/judgment-binding.ts +349 -0
  172. package/src/openapi/generate.ts +7 -1
  173. package/src/openapi/operations.ts +523 -7
  174. package/src/openapi/schemas.ts +1009 -88
  175. package/src/provider-binding.ts +12 -7
  176. package/src/routes/agents.ts +243 -19
  177. package/src/routes/blocks.ts +362 -0
  178. package/src/routes/cost.ts +55 -1
  179. package/src/routes/deployments.ts +266 -56
  180. package/src/routes/eval-comparison.ts +101 -0
  181. package/src/routes/eval-runs.ts +11 -0
  182. package/src/routes/flows.ts +63 -5
  183. package/src/routes/hierarchy-errors.ts +51 -0
  184. package/src/routes/judged-suites.ts +363 -0
  185. package/src/routes/judgment-context.ts +128 -0
  186. package/src/routes/judgment-flow-context.ts +245 -0
  187. package/src/routes/judgments.ts +743 -0
  188. package/src/routes/orgs.ts +44 -27
  189. package/src/routes/policies.ts +19 -0
  190. package/src/routes/projects.ts +106 -95
  191. package/src/routes/providers.ts +5 -0
  192. package/src/routes/runs.ts +28 -3
  193. package/src/routes/teams.ts +96 -90
@@ -0,0 +1,297 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { itemChanges, matchJudged, outputItems, scoreItems, } from './judged-items.js';
4
+ export const DEFAULT_COMPARISON = {
5
+ baseline: 'recorded',
6
+ reads: 'recorded',
7
+ repetitions: 1,
8
+ k: 10,
9
+ };
10
+ /** Cases read per page. */
11
+ const CASE_PAGE = 100;
12
+ function validateComparison(suite, target, comparison) {
13
+ if (target.version === undefined) {
14
+ return {
15
+ kind: 'err',
16
+ message: 'agentId' in target
17
+ ? '`agentRef.version` is required: the candidate is one version of the agent.'
18
+ : '`flowRef.version` is required: the candidate is one version of the flow.',
19
+ };
20
+ }
21
+ if (suite.spec.caseCount === 0) {
22
+ return { kind: 'err', message: 'The test set has no cases.' };
23
+ }
24
+ const c = comparison ?? DEFAULT_COMPARISON;
25
+ if (c.baseline !== 'recorded') {
26
+ return { kind: 'err', message: "Only `baseline: 'recorded'` runs today." };
27
+ }
28
+ return { kind: 'ok' };
29
+ }
30
+ export function createJudgedDispatcher(options) {
31
+ return {
32
+ kind: 'judged',
33
+ validate: validateComparison,
34
+ async dispatch(ctx) {
35
+ const comparison = ctx.comparison ?? DEFAULT_COMPARISON;
36
+ const all = await allCases(options.cases, ctx);
37
+ if (ctx.dryRun) {
38
+ return { result: { dryRun: true, cases: all.length, comparison } };
39
+ }
40
+ const results = [];
41
+ const models = new Map();
42
+ for (const judgedCase of all) {
43
+ if (ctx.abortSignal.aborted)
44
+ break;
45
+ const result = await runCase(ctx, comparison, judgedCase, models);
46
+ results.push(result);
47
+ ctx.onProgress(result);
48
+ }
49
+ const summary = summarize(ctx, comparison, all, results, [...models.values()]);
50
+ return {
51
+ result: { summary, perCase: results },
52
+ ...(ctx.abortSignal.aborted && { error: 'cancelled' }),
53
+ };
54
+ },
55
+ };
56
+ }
57
+ async function allCases(store, ctx) {
58
+ const out = [];
59
+ let cursor;
60
+ for (;;) {
61
+ const page = await store.listCases({
62
+ tenantId: ctx.tenantId,
63
+ suiteId: ctx.suite.id,
64
+ version: ctx.suite.version,
65
+ limit: CASE_PAGE,
66
+ ...(cursor !== undefined && { cursor }),
67
+ });
68
+ out.push(...page.data);
69
+ if (!page.hasMore || page.nextCursor === undefined)
70
+ return out;
71
+ cursor = page.nextCursor;
72
+ }
73
+ }
74
+ /** One case's repetitions as they come back. */
75
+ class CaseTally {
76
+ judgedCase;
77
+ comparison;
78
+ agentTurn;
79
+ runIds = [];
80
+ candidate = [];
81
+ first;
82
+ error;
83
+ stopped;
84
+ diverged = false;
85
+ refusedWrites = 0;
86
+ approvalSkipped = false;
87
+ constructor(judgedCase, comparison, agentTurn) {
88
+ this.judgedCase = judgedCase;
89
+ this.comparison = comparison;
90
+ this.agentTurn = agentTurn;
91
+ }
92
+ add(outcome) {
93
+ if (outcome.runId !== undefined)
94
+ this.runIds.push(outcome.runId);
95
+ if (outcome.stopped !== undefined) {
96
+ this.stopped ??= outcome.stopped;
97
+ this.refusedWrites = Math.max(this.refusedWrites, refusedCount(outcome));
98
+ this.first ??= { changes: { kept: [], dropped: [], new: [] }, ...replayOf(outcome) };
99
+ return 'stopped';
100
+ }
101
+ if (outcome.error !== undefined) {
102
+ this.error ??= outcome.error;
103
+ return 'error';
104
+ }
105
+ this.ran(outcome);
106
+ return 'ran';
107
+ }
108
+ ran(outcome) {
109
+ const { judgedCase, comparison } = this;
110
+ const matched = matchJudged(outputItems(outcome.output, this.agentTurn), judgedCase.items, judgedCase.output);
111
+ this.candidate.push(scoreItems(matched, comparison.k));
112
+ const tools = outcome.replay?.tools ?? [];
113
+ this.refusedWrites = Math.max(this.refusedWrites, refusedCount(outcome));
114
+ if (comparison.reads === 'recorded' && tools.some((t) => t.source === 'live')) {
115
+ this.diverged = true;
116
+ }
117
+ if (outcome.replay?.approval === 'skipped')
118
+ this.approvalSkipped = true;
119
+ this.first ??= { changes: itemChanges(matched, judgedCase.items), ...replayOf(outcome) };
120
+ }
121
+ result(baseline) {
122
+ const none = this.candidate.length === 0;
123
+ return {
124
+ caseId: this.judgedCase.caseId,
125
+ runIds: this.runIds,
126
+ baseline,
127
+ candidate: this.candidate,
128
+ ...(this.first !== undefined && { changes: this.first.changes }),
129
+ ...(this.first?.replay !== undefined && { tools: this.first.replay.tools }),
130
+ diverged: this.diverged,
131
+ refusedWrites: this.refusedWrites,
132
+ noContext: this.judgedCase.context === undefined,
133
+ approvalSkipped: this.approvalSkipped,
134
+ // A case none of whose repetitions ran stopped (at a refused write) or errored.
135
+ ...(none && this.stopped !== undefined && { stopped: this.stopped }),
136
+ ...(none && this.stopped === undefined && this.error !== undefined && { error: this.error }),
137
+ };
138
+ }
139
+ }
140
+ async function runCase(ctx, comparison, judgedCase, models) {
141
+ // An agent turn's items are its answer and typed result; a flow run's, its whole output.
142
+ const agentTurn = judgedCase.subject.kind === 'agent';
143
+ const baseline = scoreItems(matchJudged(outputItems(judgedCase.output, agentTurn), judgedCase.items, judgedCase.output), comparison.k);
144
+ const tally = new CaseTally(judgedCase, comparison, agentTurn);
145
+ for (let rep = 0; rep < comparison.repetitions; rep++) {
146
+ const outcome = await invokeCase(ctx, judgedCase);
147
+ if (tally.add(outcome) === 'ran')
148
+ countModel(models, outcome);
149
+ }
150
+ return tally.result(baseline);
151
+ }
152
+ function refusedCount(outcome) {
153
+ return (outcome.replay?.tools ?? []).filter((t) => t.source === 'refused').length;
154
+ }
155
+ function replayOf(outcome) {
156
+ return outcome.replay !== undefined ? { replay: outcome.replay } : {};
157
+ }
158
+ async function invokeCase(ctx, judgedCase) {
159
+ try {
160
+ return await ctx.subject.invoke({
161
+ tenantId: ctx.tenantId,
162
+ target: ctx.target,
163
+ // An agent turn's input is its user message.
164
+ input: judgedCase.input,
165
+ dryRun: false,
166
+ abortSignal: ctx.abortSignal,
167
+ ...(ctx.projectId !== undefined && { projectId: ctx.projectId }),
168
+ replay: {
169
+ of: judgedCase.caseId,
170
+ evalRunId: ctx.runId,
171
+ },
172
+ ...(judgedCase.subject.kind === 'agent' && { history: judgedCase.context?.history ?? [] }),
173
+ });
174
+ }
175
+ catch (cause) {
176
+ return { error: cause instanceof Error ? cause.message : String(cause) };
177
+ }
178
+ }
179
+ function countModel(models, outcome) {
180
+ if (outcome.provider === undefined)
181
+ return;
182
+ const key = `${outcome.provider.id}\u0000${outcome.provider.model}`;
183
+ const kept = models.get(key) ?? {
184
+ providerId: outcome.provider.id,
185
+ model: outcome.provider.model,
186
+ runs: 0,
187
+ };
188
+ kept.runs += 1;
189
+ models.set(key, kept);
190
+ }
191
+ const yesShare = (s) => ({ yes: s.yesWeight, total: s.totalWeight });
192
+ const precisionAtK = (s) => ({ yes: s.topK.yesWeight, total: s.topK.totalWeight });
193
+ /** Coverage's ratio is judged items over items; its evidence weight is the judged weight. */
194
+ const coverage = (s) => ({ yes: s.judgedItems, total: s.items });
195
+ /** A metric over cases: Σ numerator / Σ denominator, with its evidence. */
196
+ function pooled(scores, side, weightOf) {
197
+ let yes = 0;
198
+ let total = 0;
199
+ let n = 0;
200
+ let weight = 0;
201
+ for (const s of scores) {
202
+ const { yes: y, total: t } = side(s);
203
+ if (t <= 0)
204
+ continue;
205
+ yes += y;
206
+ total += t;
207
+ n += 1;
208
+ weight += weightOf(s);
209
+ }
210
+ return { value: total > 0 ? yes / total : null, n, weight };
211
+ }
212
+ function metric(results, repetitions, side, weightOf, extra = {}) {
213
+ // Only cases the candidate ran: errored and stopped cases leave both sides.
214
+ const scored = results.filter((r) => r.candidate.length > 0);
215
+ const baseline = pooled(scored.map((r) => r.baseline), side, weightOf);
216
+ // Each repetition is a full pass over the cases: its value, then the spread across them.
217
+ const perRep = Array.from({ length: repetitions }, (_, rep) => pooled(scored.flatMap((r) => (r.candidate[rep] !== undefined ? [r.candidate[rep]] : [])), side, weightOf));
218
+ const values = perRep.map((p) => p.value).filter((v) => v !== null);
219
+ const candidate = values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : null;
220
+ const cases = new Set();
221
+ scored.forEach((r, i) => {
222
+ if (r.candidate.some((s) => side(s).total > 0))
223
+ cases.add(i);
224
+ });
225
+ const weight = perRep.reduce((a, p) => a + p.weight, 0) / Math.max(1, perRep.length);
226
+ return {
227
+ baseline: baseline.value,
228
+ candidate,
229
+ delta: baseline.value !== null && candidate !== null ? candidate - baseline.value : null,
230
+ n: cases.size,
231
+ weight,
232
+ baselineN: baseline.n,
233
+ baselineWeight: baseline.weight,
234
+ direction: 'higher',
235
+ ...(extra.k !== undefined && { k: extra.k }),
236
+ ...(repetitions > 1 &&
237
+ values.length > 1 && { spread: Math.max(...values) - Math.min(...values) }),
238
+ };
239
+ }
240
+ function summarize(ctx, comparison, cases, results, models) {
241
+ const errors = results.filter((r) => r.error !== undefined).length;
242
+ const stopped = results.filter((r) => r.stopped !== undefined).length;
243
+ const versions = new Map();
244
+ for (const c of cases) {
245
+ const key = `${c.subject.kind}:${c.subject.id}@${c.subject.version}`;
246
+ const kept = versions.get(key) ?? {
247
+ id: c.subject.id,
248
+ flow: c.subject.kind === 'flow',
249
+ version: c.subject.version,
250
+ cases: 0,
251
+ };
252
+ kept.cases += 1;
253
+ versions.set(key, kept);
254
+ }
255
+ const specProject = ctx.suite.spec.projectId;
256
+ const projectId = typeof specProject === 'string'
257
+ ? specProject
258
+ : ctx.projectId;
259
+ const judgedWeight = (s) => s.totalWeight;
260
+ return {
261
+ evalRunId: ctx.runId,
262
+ status: results.length > 0 && errors === 0
263
+ ? 'completed'
264
+ : errors < results.length
265
+ ? 'partial'
266
+ : 'failed',
267
+ completedAt: new Date().toISOString(),
268
+ suite: { id: ctx.suite.id, version: ctx.suite.version },
269
+ candidate: candidateOf(ctx.target),
270
+ baseline: {
271
+ kind: 'recorded',
272
+ versions: [...versions.values()].map((v) => v.flow
273
+ ? { flowId: v.id, version: v.version, cases: v.cases }
274
+ : { agentId: v.id, version: v.version, cases: v.cases }),
275
+ },
276
+ scope: { ...(projectId !== undefined && { projectId }) },
277
+ cases: results.length,
278
+ diverged: results.filter((r) => r.diverged).length,
279
+ refusedWrites: results.reduce((a, r) => a + r.refusedWrites, 0),
280
+ errors,
281
+ stopped,
282
+ reads: comparison.reads,
283
+ sampling: { models },
284
+ repetitions: comparison.repetitions,
285
+ metrics: {
286
+ weightedYesShare: metric(results, comparison.repetitions, yesShare, judgedWeight),
287
+ judgedCoverage: metric(results, comparison.repetitions, coverage, judgedWeight),
288
+ weightedPrecisionAtK: metric(results, comparison.repetitions, precisionAtK, (s) => s.topK.totalWeight, { k: comparison.k }),
289
+ },
290
+ };
291
+ }
292
+ function candidateOf(target) {
293
+ return 'agentId' in target
294
+ ? { kind: 'agent', agentId: target.agentId, version: target.version ?? '' }
295
+ : { kind: 'flow', flowId: target.flowId, version: target.version ?? '' };
296
+ }
297
+ //# sourceMappingURL=judged-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judged-dispatcher.js","sourceRoot":"","sources":["../src/judged-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * The items of a run's output that people judge, and how a new output is
3
+ * scored against the judgments of an old one. Pure, with no dependencies,
4
+ * so a console can derive items the same way.
5
+ *
6
+ * Items:
7
+ * - an agent turn's answer (its last agent message) is `answer`;
8
+ * - a flow run's whole output is `output`;
9
+ * - each element of a list in the output (an agent's typed result sits
10
+ * under `output`) is an item, keyed by its own `id` or `key` when it
11
+ * has one, else by where it sits (a JSON Pointer), with its rank.
12
+ *
13
+ * A judgment carries over to a new output's item when it's the same item:
14
+ * an item keyed by its own id is the same item when the key matches; any
15
+ * other (the answer, an element keyed by its place) only when its content
16
+ * is the same too. So a changed answer is a new item, with no judgments.
17
+ */
18
+ export interface OutputItem {
19
+ /** The key judgments use for this item. */
20
+ readonly key: string;
21
+ /** Where it sits in the output (JSON Pointer). */
22
+ readonly pointer: string;
23
+ /** Its place in its list (0 = first). */
24
+ readonly rank?: number;
25
+ /** `true` when the key is the item's own id, so it identifies the item by itself. */
26
+ readonly ownKey: boolean;
27
+ readonly value: unknown;
28
+ }
29
+ /** The items of a run's output (`agentTurn`: an agent turn's result). */
30
+ export declare function outputItems(output: unknown, agentTurn: boolean): readonly OutputItem[];
31
+ /** The value at a JSON Pointer in `doc`, or `undefined` when there's none. */
32
+ export declare function valueAt(doc: unknown, pointer: string): unknown;
33
+ /** What people said about one judged item (as a judged test-set case keeps it). */
34
+ export interface ItemJudgments {
35
+ readonly key: string;
36
+ readonly pointer?: string;
37
+ readonly rank?: number;
38
+ readonly yesWeight: number;
39
+ readonly totalWeight: number;
40
+ }
41
+ /** A new output's item and the judged item it is the same as, if any. */
42
+ export interface MatchedItem {
43
+ readonly item: OutputItem;
44
+ readonly judged?: ItemJudgments;
45
+ }
46
+ /**
47
+ * Match a new output's items to the items judged in a past output
48
+ * (`judgedOutput`, where the judged items' pointers point).
49
+ */
50
+ export declare function matchJudged(items: readonly OutputItem[], judged: readonly ItemJudgments[], judgedOutput: unknown): readonly MatchedItem[];
51
+ /** An output scored against judgments: the sums the metrics are made of. */
52
+ export interface OutputScore {
53
+ /** Σ yesWeight and Σ totalWeight over the output's judged items. */
54
+ readonly yesWeight: number;
55
+ readonly totalWeight: number;
56
+ readonly items: number;
57
+ readonly judgedItems: number;
58
+ /** The same sums over the judged items among the first `k` ranked items. */
59
+ readonly topK: {
60
+ readonly yesWeight: number;
61
+ readonly totalWeight: number;
62
+ };
63
+ }
64
+ export declare function scoreItems(matched: readonly MatchedItem[], k: number): OutputScore;
65
+ /** How a new output's items moved against the judged ones. */
66
+ export interface ItemChanges {
67
+ /** Judged items the new output still has, with their rank before and now. */
68
+ readonly kept: readonly {
69
+ readonly key: string;
70
+ readonly rankBefore?: number;
71
+ readonly rank?: number;
72
+ }[];
73
+ /** Judged items the new output no longer has. */
74
+ readonly dropped: readonly {
75
+ readonly key: string;
76
+ readonly rankBefore?: number;
77
+ }[];
78
+ /** The new output's items no one judged (for experts to judge). */
79
+ readonly new: readonly {
80
+ readonly key: string;
81
+ readonly pointer: string;
82
+ readonly rank?: number;
83
+ }[];
84
+ }
85
+ export declare function itemChanges(matched: readonly MatchedItem[], judged: readonly ItemJudgments[]): ItemChanges;
86
+ //# sourceMappingURL=judged-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judged-items.d.ts","sourceRoot":"","sources":["../src/judged-items.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAkED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,UAAU,EAAE,CAetF;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAe9D;AAgBD,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,YAAY,EAAE,OAAO,GACpB,SAAS,WAAW,EAAE,CAWxB;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAqBlF;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,SAAS;QACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;IACJ,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpF,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,SAAS;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,WAAW,CAwBb"}
@@ -0,0 +1,184 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ const MAX_DEPTH = 3;
4
+ const MAX_LIST = 100;
5
+ function obj(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
7
+ ? value
8
+ : undefined;
9
+ }
10
+ function escapeToken(token) {
11
+ return token.replace(/~/g, '~0').replace(/\//g, '~1');
12
+ }
13
+ function unescapeToken(token) {
14
+ return token.replace(/~1/g, '/').replace(/~0/g, '~');
15
+ }
16
+ /** An element's own id, if it has a usable one. */
17
+ function ownId(element) {
18
+ const o = obj(element);
19
+ for (const field of ['id', 'key']) {
20
+ const v = o?.[field];
21
+ if (typeof v === 'string' && v.length > 0)
22
+ return v;
23
+ if (typeof v === 'number')
24
+ return String(v);
25
+ }
26
+ return undefined;
27
+ }
28
+ function listItems(value, pointer, depth) {
29
+ if (depth > MAX_DEPTH)
30
+ return [];
31
+ if (Array.isArray(value)) {
32
+ if (value.length === 0 || value.length > MAX_LIST)
33
+ return [];
34
+ const seen = new Set();
35
+ return value.map((element, i) => {
36
+ const id = ownId(element);
37
+ // Duplicate ids within one list fall back to the element's place.
38
+ const own = id !== undefined && !seen.has(id);
39
+ const key = own ? id : `${pointer}/${i}`;
40
+ seen.add(key);
41
+ return { key, pointer: `${pointer}/${i}`, rank: i, ownKey: own, value: element };
42
+ });
43
+ }
44
+ const o = obj(value);
45
+ if (o === undefined)
46
+ return [];
47
+ return Object.entries(o).flatMap(([field, child]) => listItems(child, `${pointer}/${escapeToken(field)}`, depth + 1));
48
+ }
49
+ function turnAnswer(output) {
50
+ const appended = Array.isArray(output.appended) ? output.appended : [];
51
+ for (let i = appended.length - 1; i >= 0; i--) {
52
+ const m = obj(appended[i]);
53
+ if (m?.role === 'agent' && m.content !== undefined && !hasToolCalls(m.content)) {
54
+ return { key: 'answer', pointer: `/appended/${i}/content`, ownKey: false, value: m.content };
55
+ }
56
+ }
57
+ return undefined;
58
+ }
59
+ function hasToolCalls(content) {
60
+ return Array.isArray(obj(content)?.toolCalls);
61
+ }
62
+ /** The items of a run's output (`agentTurn`: an agent turn's result). */
63
+ export function outputItems(output, agentTurn) {
64
+ const o = obj(output);
65
+ if (agentTurn) {
66
+ if (o === undefined)
67
+ return [];
68
+ const answer = turnAnswer(o);
69
+ return [
70
+ ...(answer !== undefined ? [answer] : []),
71
+ ...(o.output !== undefined ? listItems(o.output, '/output', 0) : []),
72
+ ];
73
+ }
74
+ if (output === undefined || output === null)
75
+ return [];
76
+ return [
77
+ { key: 'output', pointer: '', ownKey: false, value: output },
78
+ ...listItems(output, '', 0),
79
+ ];
80
+ }
81
+ /** The value at a JSON Pointer in `doc`, or `undefined` when there's none. */
82
+ export function valueAt(doc, pointer) {
83
+ if (pointer === '')
84
+ return doc;
85
+ if (!pointer.startsWith('/'))
86
+ return undefined;
87
+ let current = doc;
88
+ for (const raw of pointer.slice(1).split('/')) {
89
+ const token = unescapeToken(raw);
90
+ if (Array.isArray(current)) {
91
+ const i = Number(token);
92
+ current = Number.isInteger(i) ? current[i] : undefined;
93
+ }
94
+ else {
95
+ current = obj(current)?.[token];
96
+ }
97
+ if (current === undefined)
98
+ return undefined;
99
+ }
100
+ return current;
101
+ }
102
+ /** JSON with sorted keys, so equal values compare equal. */
103
+ function canonical(value) {
104
+ if (Array.isArray(value))
105
+ return `[${value.map(canonical).join(',')}]`;
106
+ const o = obj(value);
107
+ if (o !== undefined) {
108
+ return `{${Object.keys(o)
109
+ .sort()
110
+ .filter((k) => o[k] !== undefined)
111
+ .map((k) => `${JSON.stringify(k)}:${canonical(o[k])}`)
112
+ .join(',')}}`;
113
+ }
114
+ return JSON.stringify(value) ?? 'null';
115
+ }
116
+ /**
117
+ * Match a new output's items to the items judged in a past output
118
+ * (`judgedOutput`, where the judged items' pointers point).
119
+ */
120
+ export function matchJudged(items, judged, judgedOutput) {
121
+ const byKey = new Map(judged.map((j) => [j.key, j]));
122
+ return items.map((item) => {
123
+ const j = byKey.get(item.key);
124
+ if (j === undefined)
125
+ return { item };
126
+ if (item.ownKey)
127
+ return { item, judged: j };
128
+ const before = j.pointer === undefined ? undefined : valueAt(judgedOutput, j.pointer);
129
+ return before !== undefined && canonical(before) === canonical(item.value)
130
+ ? { item, judged: j }
131
+ : { item };
132
+ });
133
+ }
134
+ export function scoreItems(matched, k) {
135
+ let yesWeight = 0;
136
+ let totalWeight = 0;
137
+ let judgedItems = 0;
138
+ for (const m of matched) {
139
+ if (m.judged === undefined)
140
+ continue;
141
+ judgedItems += 1;
142
+ yesWeight += m.judged.yesWeight;
143
+ totalWeight += m.judged.totalWeight;
144
+ }
145
+ const top = matched
146
+ .filter((m) => m.item.rank !== undefined)
147
+ .sort((a, b) => (a.item.rank ?? 0) - (b.item.rank ?? 0))
148
+ .slice(0, k);
149
+ const topK = { yesWeight: 0, totalWeight: 0 };
150
+ for (const m of top) {
151
+ if (m.judged === undefined)
152
+ continue;
153
+ topK.yesWeight += m.judged.yesWeight;
154
+ topK.totalWeight += m.judged.totalWeight;
155
+ }
156
+ return { yesWeight, totalWeight, items: matched.length, judgedItems, topK };
157
+ }
158
+ export function itemChanges(matched, judged) {
159
+ const keptKeys = new Set();
160
+ const kept = [];
161
+ const fresh = [];
162
+ for (const m of matched) {
163
+ if (m.judged !== undefined) {
164
+ keptKeys.add(m.judged.key);
165
+ kept.push({
166
+ key: m.judged.key,
167
+ ...(m.judged.rank !== undefined && { rankBefore: m.judged.rank }),
168
+ ...(m.item.rank !== undefined && { rank: m.item.rank }),
169
+ });
170
+ }
171
+ else {
172
+ fresh.push({
173
+ key: m.item.key,
174
+ pointer: m.item.pointer,
175
+ ...(m.item.rank !== undefined && { rank: m.item.rank }),
176
+ });
177
+ }
178
+ }
179
+ const dropped = judged
180
+ .filter((j) => !keptKeys.has(j.key))
181
+ .map((j) => ({ key: j.key, ...(j.rank !== undefined && { rankBefore: j.rank }) }));
182
+ return { kept, dropped, new: fresh };
183
+ }
184
+ //# sourceMappingURL=judged-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judged-items.js","sourceRoot":"","sources":["../src/judged-items.ts"],"names":[],"mappings":"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"}