@kortyx/agent 0.31.1 → 0.33.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/evals.js CHANGED
@@ -23,6 +23,7 @@ __export(evals_exports, {
23
23
  EvalConfigurationError: () => EvalConfigurationError,
24
24
  EvalCostAmountSchema: () => EvalCostAmountSchema,
25
25
  EvalCostsSchema: () => EvalCostsSchema,
26
+ EvalEvidencePolicySchema: () => EvalEvidencePolicySchema,
26
27
  EvalJudgeIdentitySchema: () => EvalJudgeIdentitySchema,
27
28
  EvalJudgeUsageSchema: () => EvalJudgeUsageSchema,
28
29
  EvalManifestSchema: () => EvalManifestSchema,
@@ -50,32 +51,73 @@ __export(evals_exports, {
50
51
  StudioEvaluationSummarySchema: () => StudioEvaluationSummarySchema,
51
52
  createStudioEvalJudge: () => createStudioEvalJudge,
52
53
  defineSuite: () => defineSuite,
54
+ getEvalGradeEvidence: () => getEvalGradeEvidence,
53
55
  parseEvalSuite: () => parseEvalSuite
54
56
  });
55
57
  module.exports = __toCommonJS(evals_exports);
56
58
 
57
59
  // src/evals/contracts.ts
60
+ var import_zod2 = require("zod");
61
+
62
+ // src/evals/evidence-policy.ts
58
63
  var import_zod = require("zod");
64
+ var EVAL_EVIDENCE_EVENT_TYPES = [
65
+ "tool-call-start",
66
+ "tool-call-result",
67
+ "tool-call-error",
68
+ "tool-result",
69
+ "structured-data",
70
+ "structured-data-invalidated",
71
+ "interrupt",
72
+ "error",
73
+ "cancelled",
74
+ "limit-reached"
75
+ ];
59
76
  var id = import_zod.z.string().trim().min(1).max(256);
60
- var handler = import_zod.z.object({ using: id, params: import_zod.z.json().optional() }).strict();
61
- var EvalResumeResponseSchema = import_zod.z.discriminatedUnion("type", [
62
- import_zod.z.object({ type: import_zod.z.literal("text"), text: import_zod.z.string() }).strict(),
63
- import_zod.z.object({ type: import_zod.z.literal("select"), ids: import_zod.z.array(import_zod.z.string()) }).strict(),
64
- import_zod.z.object({ type: import_zod.z.literal("value"), value: import_zod.z.json() }).strict(),
65
- import_zod.z.object({ type: import_zod.z.literal("cancel") }).strict()
77
+ var filter = import_zod.z.object({ using: id, params: import_zod.z.json().optional() }).strict();
78
+ var EvalEvidencePolicySchema = import_zod.z.object({
79
+ history: import_zod.z.boolean().optional(),
80
+ events: import_zod.z.union([
81
+ import_zod.z.literal(false),
82
+ import_zod.z.array(import_zod.z.enum(EVAL_EVIDENCE_EVENT_TYPES)),
83
+ filter
84
+ ]).optional(),
85
+ outputs: import_zod.z.union([
86
+ import_zod.z.literal(false),
87
+ import_zod.z.array(
88
+ import_zod.z.object({
89
+ dataType: id.optional(),
90
+ schemaId: id.optional(),
91
+ schemaVersion: id.optional()
92
+ }).strict().refine((value) => Boolean(value.dataType || value.schemaId), {
93
+ message: "Select an output by dataType or schemaId."
94
+ })
95
+ ),
96
+ filter
97
+ ]).optional()
98
+ }).strict();
99
+
100
+ // src/evals/contracts.ts
101
+ var id2 = import_zod2.z.string().trim().min(1).max(256);
102
+ var handler = import_zod2.z.object({ using: id2, params: import_zod2.z.json().optional() }).strict();
103
+ var EvalResumeResponseSchema = import_zod2.z.discriminatedUnion("type", [
104
+ import_zod2.z.object({ type: import_zod2.z.literal("text"), text: import_zod2.z.string() }).strict(),
105
+ import_zod2.z.object({ type: import_zod2.z.literal("select"), ids: import_zod2.z.array(import_zod2.z.string()) }).strict(),
106
+ import_zod2.z.object({ type: import_zod2.z.literal("value"), value: import_zod2.z.json() }).strict(),
107
+ import_zod2.z.object({ type: import_zod2.z.literal("cancel") }).strict()
66
108
  ]);
67
- var expectation = import_zod.z.object({
68
- type: import_zod.z.enum(["answer", "interrupt"]),
69
- schemaId: id.optional(),
70
- schemaVersion: id.optional(),
71
- outputs: import_zod.z.array(import_zod.z.object({ schemaId: id, schemaVersion: id.optional() }).strict()).optional(),
72
- criteria: import_zod.z.array(
73
- import_zod.z.union([
74
- import_zod.z.string().trim().min(1),
75
- import_zod.z.object({ id, text: import_zod.z.string().trim().min(1) }).strict()
109
+ var expectation = import_zod2.z.object({
110
+ type: import_zod2.z.enum(["answer", "interrupt"]),
111
+ schemaId: id2.optional(),
112
+ schemaVersion: id2.optional(),
113
+ outputs: import_zod2.z.array(import_zod2.z.object({ schemaId: id2, schemaVersion: id2.optional() }).strict()).optional(),
114
+ criteria: import_zod2.z.array(
115
+ import_zod2.z.union([
116
+ import_zod2.z.string().trim().min(1),
117
+ import_zod2.z.object({ id: id2, text: import_zod2.z.string().trim().min(1) }).strict()
76
118
  ])
77
119
  ).optional(),
78
- reference: import_zod.z.json().optional()
120
+ reference: import_zod2.z.json().optional()
79
121
  }).strict().superRefine((value, ctx) => {
80
122
  if (value.type === "answer" && (value.schemaId || value.schemaVersion))
81
123
  ctx.addIssue({
@@ -91,20 +133,21 @@ var expectation = import_zod.z.object({
91
133
  message: "Criterion IDs must be unique within a step."
92
134
  });
93
135
  });
94
- var EvalSuiteSchema = import_zod.z.object({
95
- id,
96
- name: import_zod.z.string().optional(),
97
- cases: import_zod.z.array(
98
- import_zod.z.object({
99
- id,
100
- name: import_zod.z.string().optional(),
101
- params: import_zod.z.json().optional(),
102
- workflowId: id.optional(),
103
- steps: import_zod.z.array(
104
- import_zod.z.union([
105
- import_zod.z.object({ message: import_zod.z.string().min(1), expect: expectation }).strict(),
106
- import_zod.z.object({
107
- resume: import_zod.z.union([EvalResumeResponseSchema, handler]),
136
+ var EvalSuiteSchema = import_zod2.z.object({
137
+ evidence: EvalEvidencePolicySchema.optional(),
138
+ id: id2,
139
+ name: import_zod2.z.string().optional(),
140
+ cases: import_zod2.z.array(
141
+ import_zod2.z.object({
142
+ id: id2,
143
+ name: import_zod2.z.string().optional(),
144
+ params: import_zod2.z.json().optional(),
145
+ workflowId: id2.optional(),
146
+ steps: import_zod2.z.array(
147
+ import_zod2.z.union([
148
+ import_zod2.z.object({ message: import_zod2.z.string().min(1), expect: expectation }).strict(),
149
+ import_zod2.z.object({
150
+ resume: import_zod2.z.union([EvalResumeResponseSchema, handler]),
108
151
  expect: expectation
109
152
  }).strict()
110
153
  ])
@@ -112,32 +155,32 @@ var EvalSuiteSchema = import_zod.z.object({
112
155
  }).strict()
113
156
  ).min(1)
114
157
  }).strict();
115
- var EvalVerdictSchema = import_zod.z.object({
116
- passed: import_zod.z.boolean(),
117
- reason: import_zod.z.string().trim().min(1),
118
- evidence: import_zod.z.array(import_zod.z.string().min(1))
158
+ var EvalVerdictSchema = import_zod2.z.object({
159
+ passed: import_zod2.z.boolean(),
160
+ reason: import_zod2.z.string().trim().min(1),
161
+ evidence: import_zod2.z.array(import_zod2.z.string().min(1))
119
162
  }).strict();
120
- var EvalObservationSchema = import_zod.z.object({
121
- type: import_zod.z.enum(["answer", "interrupt", "error", "cancelled"]),
122
- text: import_zod.z.string(),
123
- structured: import_zod.z.array(import_zod.z.json()),
124
- events: import_zod.z.array(import_zod.z.json()).optional(),
125
- runId: import_zod.z.string().optional(),
126
- checkpointId: import_zod.z.string().optional(),
127
- interrupt: import_zod.z.object({
128
- requestId: import_zod.z.string(),
129
- kind: import_zod.z.enum(["text", "choice", "multi-choice", "custom"]),
130
- question: import_zod.z.string().optional(),
131
- schemaId: import_zod.z.string().optional(),
132
- schemaVersion: import_zod.z.string().optional(),
133
- options: import_zod.z.array(
134
- import_zod.z.object({
135
- id: import_zod.z.string(),
136
- label: import_zod.z.string(),
137
- description: import_zod.z.string().optional()
163
+ var EvalObservationSchema = import_zod2.z.object({
164
+ type: import_zod2.z.enum(["answer", "interrupt", "error", "cancelled"]),
165
+ text: import_zod2.z.string(),
166
+ structured: import_zod2.z.array(import_zod2.z.json()),
167
+ events: import_zod2.z.array(import_zod2.z.json()).optional(),
168
+ runId: import_zod2.z.string().optional(),
169
+ checkpointId: import_zod2.z.string().optional(),
170
+ interrupt: import_zod2.z.object({
171
+ requestId: import_zod2.z.string(),
172
+ kind: import_zod2.z.enum(["text", "choice", "multi-choice", "custom"]),
173
+ question: import_zod2.z.string().optional(),
174
+ schemaId: import_zod2.z.string().optional(),
175
+ schemaVersion: import_zod2.z.string().optional(),
176
+ options: import_zod2.z.array(
177
+ import_zod2.z.object({
178
+ id: import_zod2.z.string(),
179
+ label: import_zod2.z.string(),
180
+ description: import_zod2.z.string().optional()
138
181
  }).strict()
139
182
  ),
140
- request: import_zod.z.json().optional()
183
+ request: import_zod2.z.json().optional()
141
184
  }).strict().optional()
142
185
  }).strict().superRefine((value, ctx) => {
143
186
  if (value.type === "interrupt" !== Boolean(value.interrupt))
@@ -146,9 +189,9 @@ var EvalObservationSchema = import_zod.z.object({
146
189
  message: "Interrupt observations require exactly one interrupt."
147
190
  });
148
191
  });
149
- var status = import_zod.z.enum(["passed", "failed", "error", "cancelled", "ungraded"]);
150
- var issue = import_zod.z.object({
151
- phase: import_zod.z.enum([
192
+ var status = import_zod2.z.enum(["passed", "failed", "error", "cancelled", "ungraded"]);
193
+ var issue = import_zod2.z.object({
194
+ phase: import_zod2.z.enum([
152
195
  "params",
153
196
  "setup",
154
197
  "execute",
@@ -158,164 +201,169 @@ var issue = import_zod.z.object({
158
201
  "cleanup",
159
202
  "reporting"
160
203
  ]),
161
- code: import_zod.z.string(),
162
- message: import_zod.z.string()
204
+ code: import_zod2.z.string(),
205
+ message: import_zod2.z.string()
163
206
  }).strict();
164
- var EvalJudgeUsageSchema = import_zod.z.object({
165
- provider: import_zod.z.string().min(1),
166
- model: import_zod.z.string().min(1),
167
- occurredAt: import_zod.z.iso.datetime(),
168
- usage: import_zod.z.object({
169
- input: import_zod.z.number().finite().nonnegative().optional(),
170
- output: import_zod.z.number().finite().nonnegative().optional(),
171
- total: import_zod.z.number().finite().nonnegative().optional(),
172
- reasoning: import_zod.z.number().finite().nonnegative().optional(),
173
- cacheRead: import_zod.z.number().finite().nonnegative().optional(),
174
- cacheWrite: import_zod.z.number().finite().nonnegative().optional(),
175
- cacheWrite1h: import_zod.z.number().finite().nonnegative().optional(),
176
- outputIncludesReasoning: import_zod.z.boolean().optional(),
177
- inputIncludesCacheRead: import_zod.z.boolean().optional(),
178
- inputIncludesCacheWrite: import_zod.z.boolean().optional()
207
+ var EvalJudgeUsageSchema = import_zod2.z.object({
208
+ provider: import_zod2.z.string().min(1),
209
+ model: import_zod2.z.string().min(1),
210
+ occurredAt: import_zod2.z.iso.datetime(),
211
+ usage: import_zod2.z.object({
212
+ input: import_zod2.z.number().finite().nonnegative().optional(),
213
+ output: import_zod2.z.number().finite().nonnegative().optional(),
214
+ total: import_zod2.z.number().finite().nonnegative().optional(),
215
+ reasoning: import_zod2.z.number().finite().nonnegative().optional(),
216
+ cacheRead: import_zod2.z.number().finite().nonnegative().optional(),
217
+ cacheWrite: import_zod2.z.number().finite().nonnegative().optional(),
218
+ cacheWrite1h: import_zod2.z.number().finite().nonnegative().optional(),
219
+ outputIncludesReasoning: import_zod2.z.boolean().optional(),
220
+ inputIncludesCacheRead: import_zod2.z.boolean().optional(),
221
+ inputIncludesCacheWrite: import_zod2.z.boolean().optional()
179
222
  }).strict().optional(),
180
- pricingContext: import_zod.z.object({
181
- serviceTier: import_zod.z.string().min(1).max(100).optional(),
182
- inferenceGeo: import_zod.z.string().min(1).max(100).optional(),
183
- speed: import_zod.z.string().min(1).max(100).optional()
223
+ pricingContext: import_zod2.z.object({
224
+ serviceTier: import_zod2.z.string().min(1).max(100).optional(),
225
+ inferenceGeo: import_zod2.z.string().min(1).max(100).optional(),
226
+ speed: import_zod2.z.string().min(1).max(100).optional()
184
227
  }).strict().optional(),
185
- pricing: import_zod.z.object({
186
- source: import_zod.z.literal("provider"),
187
- currency: import_zod.z.literal("USD"),
188
- actualCostMicros: import_zod.z.number().int().nonnegative().safe()
228
+ pricing: import_zod2.z.object({
229
+ source: import_zod2.z.literal("provider"),
230
+ currency: import_zod2.z.literal("USD"),
231
+ actualCostMicros: import_zod2.z.number().int().nonnegative().safe()
189
232
  }).strict().optional()
190
233
  }).strict();
191
- var EvalStepResultSchema = import_zod.z.object({
192
- index: import_zod.z.number().int().nonnegative(),
193
- input: import_zod.z.union([
194
- import_zod.z.object({ message: import_zod.z.string() }).strict(),
195
- import_zod.z.object({ resume: EvalResumeResponseSchema }).strict()
234
+ var EvalStepResultSchema = import_zod2.z.object({
235
+ evidence: import_zod2.z.object({
236
+ version: import_zod2.z.literal("compact-v1"),
237
+ history: import_zod2.z.boolean(),
238
+ observation: EvalObservationSchema
239
+ }).strict().optional(),
240
+ index: import_zod2.z.number().int().nonnegative(),
241
+ input: import_zod2.z.union([
242
+ import_zod2.z.object({ message: import_zod2.z.string() }).strict(),
243
+ import_zod2.z.object({ resume: EvalResumeResponseSchema }).strict()
196
244
  ]),
197
245
  expectation,
198
246
  observation: EvalObservationSchema,
199
- reference: import_zod.z.json().optional(),
247
+ reference: import_zod2.z.json().optional(),
200
248
  status,
201
- reason: import_zod.z.string().optional(),
202
- judgeCalls: import_zod.z.number().int().nonnegative().optional(),
203
- judgeUsage: import_zod.z.array(EvalJudgeUsageSchema).optional(),
204
- criteria: import_zod.z.array(
205
- EvalVerdictSchema.extend({ id: import_zod.z.string(), text: import_zod.z.string() })
249
+ reason: import_zod2.z.string().optional(),
250
+ judgeCalls: import_zod2.z.number().int().nonnegative().optional(),
251
+ judgeUsage: import_zod2.z.array(EvalJudgeUsageSchema).optional(),
252
+ criteria: import_zod2.z.array(
253
+ EvalVerdictSchema.extend({ id: import_zod2.z.string(), text: import_zod2.z.string() })
206
254
  )
207
255
  }).strict();
208
- var EvalCaseResultSchema = import_zod.z.object({
209
- caseId: id,
210
- repetition: import_zod.z.number().int().positive(),
211
- sessionId: import_zod.z.string(),
256
+ var EvalCaseResultSchema = import_zod2.z.object({
257
+ caseId: id2,
258
+ repetition: import_zod2.z.number().int().positive(),
259
+ sessionId: import_zod2.z.string(),
212
260
  status,
213
- durationMs: import_zod.z.number().nonnegative(),
214
- steps: import_zod.z.array(EvalStepResultSchema),
215
- errors: import_zod.z.array(issue)
261
+ durationMs: import_zod2.z.number().nonnegative(),
262
+ steps: import_zod2.z.array(EvalStepResultSchema),
263
+ errors: import_zod2.z.array(issue)
216
264
  }).strict();
217
- var EvalJudgeIdentitySchema = import_zod.z.object({
218
- id,
219
- version: id,
220
- location: import_zod.z.enum(["app", "studio"]).optional()
265
+ var EvalJudgeIdentitySchema = import_zod2.z.object({
266
+ id: id2,
267
+ version: id2,
268
+ location: import_zod2.z.enum(["app", "studio"]).optional()
221
269
  }).strict();
222
270
  var judge = EvalJudgeIdentitySchema;
223
- var StudioEvalJudgeRequestSchema = import_zod.z.object({
224
- environment: id,
271
+ var StudioEvalJudgeRequestSchema = import_zod2.z.object({
272
+ environment: id2,
225
273
  judge: EvalJudgeIdentitySchema,
226
- criterion: import_zod.z.object({ id, text: import_zod.z.string().trim().min(1).max(16384) }).strict(),
274
+ criterion: import_zod2.z.object({ id: id2, text: import_zod2.z.string().trim().min(1).max(16384) }).strict(),
227
275
  input: EvalStepResultSchema.shape.input,
228
276
  observation: EvalObservationSchema,
229
- reference: import_zod.z.json().optional(),
230
- conversation: import_zod.z.array(EvalStepResultSchema).max(100)
277
+ reference: import_zod2.z.json().optional(),
278
+ conversation: import_zod2.z.array(EvalStepResultSchema).max(100)
231
279
  }).strict();
232
- var StudioEvalJudgeResponseSchema = import_zod.z.object({
280
+ var StudioEvalJudgeResponseSchema = import_zod2.z.object({
233
281
  judge: EvalJudgeIdentitySchema,
234
282
  verdict: EvalVerdictSchema,
235
- usage: import_zod.z.array(EvalJudgeUsageSchema).optional()
283
+ usage: import_zod2.z.array(EvalJudgeUsageSchema).optional()
236
284
  }).strict();
237
- var EvalRunResultSchema = import_zod.z.object({
238
- id: import_zod.z.uuid(),
239
- suiteId: id,
240
- suiteRevision: import_zod.z.string().regex(/^[a-f0-9]{64}$/),
285
+ var EvalRunResultSchema = import_zod2.z.object({
286
+ id: import_zod2.z.uuid(),
287
+ suiteId: id2,
288
+ suiteRevision: import_zod2.z.string().regex(/^[a-f0-9]{64}$/),
241
289
  suite: EvalSuiteSchema,
242
290
  judge: judge.optional(),
243
- startedAt: import_zod.z.iso.datetime(),
244
- durationMs: import_zod.z.number().nonnegative(),
291
+ startedAt: import_zod2.z.iso.datetime(),
292
+ durationMs: import_zod2.z.number().nonnegative(),
245
293
  status,
246
- counts: import_zod.z.object({
247
- passed: import_zod.z.number().int().nonnegative(),
248
- failed: import_zod.z.number().int().nonnegative(),
249
- error: import_zod.z.number().int().nonnegative(),
250
- cancelled: import_zod.z.number().int().nonnegative(),
251
- ungraded: import_zod.z.number().int().nonnegative().optional()
294
+ counts: import_zod2.z.object({
295
+ passed: import_zod2.z.number().int().nonnegative(),
296
+ failed: import_zod2.z.number().int().nonnegative(),
297
+ error: import_zod2.z.number().int().nonnegative(),
298
+ cancelled: import_zod2.z.number().int().nonnegative(),
299
+ ungraded: import_zod2.z.number().int().nonnegative().optional()
252
300
  }).strict(),
253
- cases: import_zod.z.array(EvalCaseResultSchema),
254
- errors: import_zod.z.array(issue)
301
+ cases: import_zod2.z.array(EvalCaseResultSchema),
302
+ errors: import_zod2.z.array(issue)
255
303
  }).strict();
256
- var EvalManifestSchema = import_zod.z.object({
257
- schemaVersion: import_zod.z.literal(1),
258
- studioJudging: import_zod.z.literal(true).optional(),
259
- suites: import_zod.z.array(EvalSuiteSchema),
260
- responders: import_zod.z.array(
261
- import_zod.z.object({
262
- name: id,
263
- schemaId: id.optional(),
264
- schemaVersion: id.optional()
304
+ var EvalManifestSchema = import_zod2.z.object({
305
+ schemaVersion: import_zod2.z.literal(1),
306
+ studioJudging: import_zod2.z.literal(true).optional(),
307
+ suites: import_zod2.z.array(EvalSuiteSchema),
308
+ responders: import_zod2.z.array(
309
+ import_zod2.z.object({
310
+ name: id2,
311
+ schemaId: id2.optional(),
312
+ schemaVersion: id2.optional()
265
313
  }).strict()
266
314
  ),
267
- references: import_zod.z.array(id),
268
- paramsSchema: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional(),
315
+ references: import_zod2.z.array(id2),
316
+ paramsSchema: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional(),
269
317
  judge: judge.optional()
270
318
  }).strict();
271
- var EvalProgressSchema = import_zod.z.discriminatedUnion("type", [
272
- import_zod.z.object({
273
- type: import_zod.z.literal("run-started"),
274
- caseIds: import_zod.z.array(id).min(1),
275
- repetitions: import_zod.z.number().int().positive(),
276
- concurrency: import_zod.z.number().int().positive()
319
+ var EvalProgressSchema = import_zod2.z.discriminatedUnion("type", [
320
+ import_zod2.z.object({
321
+ type: import_zod2.z.literal("run-started"),
322
+ caseIds: import_zod2.z.array(id2).min(1),
323
+ repetitions: import_zod2.z.number().int().positive(),
324
+ concurrency: import_zod2.z.number().int().positive()
277
325
  }).strict(),
278
- import_zod.z.object({
279
- type: import_zod.z.literal("case-progress"),
280
- caseId: id,
281
- repetition: import_zod.z.number().int().positive(),
326
+ import_zod2.z.object({
327
+ type: import_zod2.z.literal("case-progress"),
328
+ caseId: id2,
329
+ repetition: import_zod2.z.number().int().positive(),
282
330
  phase: issue.shape.phase,
283
- stepIndex: import_zod.z.number().int().nonnegative().optional()
331
+ stepIndex: import_zod2.z.number().int().nonnegative().optional()
284
332
  }).strict(),
285
- import_zod.z.object({
286
- type: import_zod.z.literal("case-started"),
287
- caseId: id,
288
- repetition: import_zod.z.number().int().positive(),
289
- sessionId: import_zod.z.string()
333
+ import_zod2.z.object({
334
+ type: import_zod2.z.literal("case-started"),
335
+ caseId: id2,
336
+ repetition: import_zod2.z.number().int().positive(),
337
+ sessionId: import_zod2.z.string()
290
338
  }).strict(),
291
- import_zod.z.object({
292
- type: import_zod.z.literal("step-completed"),
293
- caseId: id,
294
- repetition: import_zod.z.number().int().positive(),
339
+ import_zod2.z.object({
340
+ type: import_zod2.z.literal("step-completed"),
341
+ caseId: id2,
342
+ repetition: import_zod2.z.number().int().positive(),
295
343
  step: EvalStepResultSchema
296
344
  }).strict(),
297
- import_zod.z.object({ type: import_zod.z.literal("case-completed"), result: EvalCaseResultSchema }).strict()
345
+ import_zod2.z.object({ type: import_zod2.z.literal("case-completed"), result: EvalCaseResultSchema }).strict()
298
346
  ]);
299
- var EvalRemoteRunRequestSchema = import_zod.z.object({
300
- suiteId: id,
301
- suiteRevision: import_zod.z.string().regex(/^[a-f0-9]{64}$/),
302
- grading: import_zod.z.enum(["app", "studio"]).optional(),
347
+ var EvalRemoteRunRequestSchema = import_zod2.z.object({
348
+ suiteId: id2,
349
+ suiteRevision: import_zod2.z.string().regex(/^[a-f0-9]{64}$/),
350
+ grading: import_zod2.z.enum(["app", "studio"]).optional(),
303
351
  judge: EvalJudgeIdentitySchema.optional(),
304
- caseIds: import_zod.z.array(id).min(1).max(100).optional(),
305
- repetitions: import_zod.z.number().int().min(1).max(20).default(1),
306
- concurrency: import_zod.z.number().int().min(1).max(4).default(1)
352
+ caseIds: import_zod2.z.array(id2).min(1).max(100).optional(),
353
+ repetitions: import_zod2.z.number().int().min(1).max(20).default(1),
354
+ concurrency: import_zod2.z.number().int().min(1).max(4).default(1)
307
355
  }).strict();
308
356
  var StudioEvalStartRequestSchema = EvalRemoteRunRequestSchema.omit({
309
357
  grading: true,
310
358
  judge: true
311
359
  }).extend({
312
- targetId: import_zod.z.string().min(1).max(128),
313
- judge: import_zod.z.enum(["studio", "app"]).default("studio")
360
+ targetId: import_zod2.z.string().min(1).max(128),
361
+ judge: import_zod2.z.enum(["studio", "app"]).default("studio")
314
362
  });
315
- var EvalWireEventSchema = import_zod.z.discriminatedUnion("type", [
316
- import_zod.z.object({ type: import_zod.z.literal("progress"), event: EvalProgressSchema }).strict(),
317
- import_zod.z.object({ type: import_zod.z.literal("result"), result: EvalRunResultSchema }).strict(),
318
- import_zod.z.object({ type: import_zod.z.literal("error"), message: import_zod.z.string() }).strict()
363
+ var EvalWireEventSchema = import_zod2.z.discriminatedUnion("type", [
364
+ import_zod2.z.object({ type: import_zod2.z.literal("progress"), event: EvalProgressSchema }).strict(),
365
+ import_zod2.z.object({ type: import_zod2.z.literal("result"), result: EvalRunResultSchema }).strict(),
366
+ import_zod2.z.object({ type: import_zod2.z.literal("error"), message: import_zod2.z.string() }).strict()
319
367
  ]);
320
368
  var EvalConfigurationError = class extends Error {
321
369
  name = "EvalConfigurationError";
@@ -348,22 +396,22 @@ function defineSuite(suite) {
348
396
  }
349
397
 
350
398
  // src/evals/evaluation-contracts.ts
351
- var import_zod3 = require("zod");
399
+ var import_zod4 = require("zod");
352
400
 
353
401
  // src/evals/studio-contracts.ts
354
- var import_zod2 = require("zod");
355
- var StudioEvalTargetsResponseSchema = import_zod2.z.object({
356
- canRun: import_zod2.z.boolean(),
402
+ var import_zod3 = require("zod");
403
+ var StudioEvalTargetsResponseSchema = import_zod3.z.object({
404
+ canRun: import_zod3.z.boolean(),
357
405
  studioJudge: EvalJudgeIdentitySchema.nullable().optional(),
358
- targets: import_zod2.z.array(
359
- import_zod2.z.object({
360
- id: import_zod2.z.string(),
361
- name: import_zod2.z.string(),
362
- environment: import_zod2.z.string(),
363
- error: import_zod2.z.string().nullable(),
406
+ targets: import_zod3.z.array(
407
+ import_zod3.z.object({
408
+ id: import_zod3.z.string(),
409
+ name: import_zod3.z.string(),
410
+ environment: import_zod3.z.string(),
411
+ error: import_zod3.z.string().nullable(),
364
412
  // Safe discovery diagnostics; optional for compatibility with older APIs.
365
- diagnostic: import_zod2.z.object({
366
- code: import_zod2.z.enum([
413
+ diagnostic: import_zod3.z.object({
414
+ code: import_zod3.z.enum([
367
415
  "environment_forbidden",
368
416
  "environment_unavailable",
369
417
  "endpoint_not_found",
@@ -372,35 +420,35 @@ var StudioEvalTargetsResponseSchema = import_zod2.z.object({
372
420
  "endpoint_unreachable",
373
421
  "manifest_invalid"
374
422
  ]),
375
- httpStatus: import_zod2.z.number().int().min(100).max(599).optional()
423
+ httpStatus: import_zod3.z.number().int().min(100).max(599).optional()
376
424
  }).nullable().optional(),
377
425
  manifest: EvalManifestSchema.nullable(),
378
- revisions: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string())
426
+ revisions: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.string())
379
427
  })
380
428
  )
381
429
  });
382
- var EvalCostAmountSchema = import_zod2.z.object({
383
- amount: import_zod2.z.number().finite().nonnegative().nullable(),
384
- currency: import_zod2.z.string().nullable(),
385
- status: import_zod2.z.enum(["complete", "partial", "unavailable"]),
386
- calls: import_zod2.z.number().int().nonnegative(),
387
- unpricedCalls: import_zod2.z.number().int().nonnegative(),
388
- estimated: import_zod2.z.boolean()
430
+ var EvalCostAmountSchema = import_zod3.z.object({
431
+ amount: import_zod3.z.number().finite().nonnegative().nullable(),
432
+ currency: import_zod3.z.string().nullable(),
433
+ status: import_zod3.z.enum(["complete", "partial", "unavailable"]),
434
+ calls: import_zod3.z.number().int().nonnegative(),
435
+ unpricedCalls: import_zod3.z.number().int().nonnegative(),
436
+ estimated: import_zod3.z.boolean()
389
437
  });
390
- var EvalCostsSchema = import_zod2.z.object({
438
+ var EvalCostsSchema = import_zod3.z.object({
391
439
  workflow: EvalCostAmountSchema,
392
440
  judge: EvalCostAmountSchema,
393
441
  total: EvalCostAmountSchema
394
442
  });
395
- var StudioEvalRunSummarySchema = import_zod2.z.object({
396
- id: import_zod2.z.uuid(),
397
- evaluationId: import_zod2.z.uuid().nullable().optional(),
398
- targetId: import_zod2.z.string(),
399
- targetName: import_zod2.z.string(),
400
- environment: import_zod2.z.string(),
401
- suiteId: import_zod2.z.string(),
402
- suiteRevision: import_zod2.z.string(),
403
- status: import_zod2.z.enum([
443
+ var StudioEvalRunSummarySchema = import_zod3.z.object({
444
+ id: import_zod3.z.uuid(),
445
+ evaluationId: import_zod3.z.uuid().nullable().optional(),
446
+ targetId: import_zod3.z.string(),
447
+ targetName: import_zod3.z.string(),
448
+ environment: import_zod3.z.string(),
449
+ suiteId: import_zod3.z.string(),
450
+ suiteRevision: import_zod3.z.string(),
451
+ status: import_zod3.z.enum([
404
452
  "queued",
405
453
  "running",
406
454
  "passed",
@@ -408,47 +456,47 @@ var StudioEvalRunSummarySchema = import_zod2.z.object({
408
456
  "error",
409
457
  "cancelled"
410
458
  ]),
411
- createdAt: import_zod2.z.string(),
412
- startedAt: import_zod2.z.string().nullable(),
413
- endedAt: import_zod2.z.string().nullable(),
414
- error: import_zod2.z.string().nullable(),
415
- cancelRequestedAt: import_zod2.z.string().nullable(),
459
+ createdAt: import_zod3.z.string(),
460
+ startedAt: import_zod3.z.string().nullable(),
461
+ endedAt: import_zod3.z.string().nullable(),
462
+ error: import_zod3.z.string().nullable(),
463
+ cancelRequestedAt: import_zod3.z.string().nullable(),
416
464
  costs: EvalCostsSchema.optional(),
417
- counts: import_zod2.z.object({
418
- passed: import_zod2.z.number(),
419
- failed: import_zod2.z.number(),
420
- error: import_zod2.z.number(),
421
- cancelled: import_zod2.z.number()
465
+ counts: import_zod3.z.object({
466
+ passed: import_zod3.z.number(),
467
+ failed: import_zod3.z.number(),
468
+ error: import_zod3.z.number(),
469
+ cancelled: import_zod3.z.number()
422
470
  }).nullable().optional(),
423
- suiteName: import_zod2.z.string().nullable().optional(),
424
- totalAttempts: import_zod2.z.number().int().nonnegative().optional(),
425
- completedAttempts: import_zod2.z.number().int().nonnegative().optional(),
426
- phase: import_zod2.z.string().optional()
471
+ suiteName: import_zod3.z.string().nullable().optional(),
472
+ totalAttempts: import_zod3.z.number().int().nonnegative().optional(),
473
+ completedAttempts: import_zod3.z.number().int().nonnegative().optional(),
474
+ phase: import_zod3.z.string().optional()
427
475
  });
428
- var StudioEvalHistorySchema = import_zod2.z.object({
429
- runs: import_zod2.z.array(StudioEvalRunSummarySchema)
476
+ var StudioEvalHistorySchema = import_zod3.z.object({
477
+ runs: import_zod3.z.array(StudioEvalRunSummarySchema)
430
478
  });
431
- var StudioEvalDetailSchema = import_zod2.z.object({
479
+ var StudioEvalDetailSchema = import_zod3.z.object({
432
480
  run: StudioEvalRunSummarySchema.extend({
433
- caseCosts: import_zod2.z.record(import_zod2.z.string(), EvalCostsSchema).optional(),
434
- request: import_zod2.z.object({
435
- caseIds: import_zod2.z.array(import_zod2.z.string()).optional(),
436
- grading: import_zod2.z.enum(["app", "studio"]).optional(),
481
+ caseCosts: import_zod3.z.record(import_zod3.z.string(), EvalCostsSchema).optional(),
482
+ request: import_zod3.z.object({
483
+ caseIds: import_zod3.z.array(import_zod3.z.string()).optional(),
484
+ grading: import_zod3.z.enum(["app", "studio"]).optional(),
437
485
  judge: EvalJudgeIdentitySchema.optional(),
438
- repetitions: import_zod2.z.number().int().positive(),
439
- concurrency: import_zod2.z.number().optional()
486
+ repetitions: import_zod3.z.number().int().positive(),
487
+ concurrency: import_zod3.z.number().optional()
440
488
  }).optional(),
441
489
  suite: EvalSuiteSchema,
442
490
  result: EvalRunResultSchema.nullable(),
443
- events: import_zod2.z.array(import_zod2.z.object({ id: import_zod2.z.number(), event: EvalProgressSchema }))
491
+ events: import_zod3.z.array(import_zod3.z.object({ id: import_zod3.z.number(), event: EvalProgressSchema }))
444
492
  })
445
493
  });
446
494
 
447
495
  // src/evals/evaluation-contracts.ts
448
- var EvaluationMetadataSchema = import_zod3.z.object({
449
- source: import_zod3.z.enum(["manual", "deployment", "schedule", "ci"]).default("manual"),
450
- commit: import_zod3.z.string().trim().min(1).max(100).optional(),
451
- deploymentUrl: import_zod3.z.url().refine((value) => {
496
+ var EvaluationMetadataSchema = import_zod4.z.object({
497
+ source: import_zod4.z.enum(["manual", "deployment", "schedule", "ci"]).default("manual"),
498
+ commit: import_zod4.z.string().trim().min(1).max(100).optional(),
499
+ deploymentUrl: import_zod4.z.url().refine((value) => {
452
500
  try {
453
501
  const url = new URL(value);
454
502
  return ["https:", "http:"].includes(url.protocol) && !url.username && !url.password;
@@ -457,64 +505,156 @@ var EvaluationMetadataSchema = import_zod3.z.object({
457
505
  }
458
506
  }, "Expected an HTTP(S) URL without credentials").optional()
459
507
  }).strict();
460
- var StudioEvaluationStartRequestSchema = import_zod3.z.object({
461
- targetId: import_zod3.z.string().trim().min(1),
462
- name: import_zod3.z.string().trim().min(1).max(200).optional(),
463
- selection: import_zod3.z.enum(["all", "selected"]),
464
- suites: import_zod3.z.array(
465
- import_zod3.z.object({
466
- suiteId: import_zod3.z.string().min(1),
467
- suiteRevision: import_zod3.z.string().regex(/^[a-f0-9]{64}$/),
468
- caseIds: import_zod3.z.array(import_zod3.z.string().min(1)).min(1).max(100).optional()
508
+ var StudioEvaluationStartRequestSchema = import_zod4.z.object({
509
+ targetId: import_zod4.z.string().trim().min(1),
510
+ name: import_zod4.z.string().trim().min(1).max(200).optional(),
511
+ selection: import_zod4.z.enum(["all", "selected"]),
512
+ suites: import_zod4.z.array(
513
+ import_zod4.z.object({
514
+ suiteId: import_zod4.z.string().min(1),
515
+ suiteRevision: import_zod4.z.string().regex(/^[a-f0-9]{64}$/),
516
+ caseIds: import_zod4.z.array(import_zod4.z.string().min(1)).min(1).max(100).optional()
469
517
  }).strict()
470
518
  ).min(1).max(100),
471
- judge: import_zod3.z.enum(["studio", "app"]).default("studio"),
472
- repetitions: import_zod3.z.number().int().min(1).max(20).default(1),
473
- concurrency: import_zod3.z.number().int().min(1).max(4).default(1),
519
+ judge: import_zod4.z.enum(["studio", "app"]).default("studio"),
520
+ repetitions: import_zod4.z.number().int().min(1).max(20).default(1),
521
+ concurrency: import_zod4.z.number().int().min(1).max(4).default(1),
474
522
  metadata: EvaluationMetadataSchema.default({ source: "manual" }),
475
- idempotencyKey: import_zod3.z.string().trim().min(1).max(200).optional()
523
+ idempotencyKey: import_zod4.z.string().trim().min(1).max(200).optional()
476
524
  }).strict();
477
- var StudioEvaluationSummarySchema = import_zod3.z.object({
478
- id: import_zod3.z.uuid(),
479
- name: import_zod3.z.string(),
480
- targetId: import_zod3.z.string(),
481
- targetName: import_zod3.z.string(),
482
- environment: import_zod3.z.string(),
483
- selection: import_zod3.z.enum(["all", "selected"]),
525
+ var StudioEvaluationSummarySchema = import_zod4.z.object({
526
+ id: import_zod4.z.uuid(),
527
+ name: import_zod4.z.string(),
528
+ targetId: import_zod4.z.string(),
529
+ targetName: import_zod4.z.string(),
530
+ environment: import_zod4.z.string(),
531
+ selection: import_zod4.z.enum(["all", "selected"]),
484
532
  metadata: EvaluationMetadataSchema,
485
533
  judge: EvalJudgeIdentitySchema.optional(),
486
534
  status: StudioEvalRunSummarySchema.shape.status,
487
- createdAt: import_zod3.z.string(),
488
- startedAt: import_zod3.z.string().nullable(),
489
- endedAt: import_zod3.z.string().nullable(),
490
- cancelRequestedAt: import_zod3.z.string().nullable(),
491
- suiteCount: import_zod3.z.number().int().nonnegative(),
492
- completedSuites: import_zod3.z.number().int().nonnegative(),
493
- totalAttempts: import_zod3.z.number().int().nonnegative(),
494
- completedAttempts: import_zod3.z.number().int().nonnegative(),
495
- counts: import_zod3.z.object({
496
- passed: import_zod3.z.number(),
497
- failed: import_zod3.z.number(),
498
- error: import_zod3.z.number(),
499
- cancelled: import_zod3.z.number()
535
+ createdAt: import_zod4.z.string(),
536
+ startedAt: import_zod4.z.string().nullable(),
537
+ endedAt: import_zod4.z.string().nullable(),
538
+ cancelRequestedAt: import_zod4.z.string().nullable(),
539
+ suiteCount: import_zod4.z.number().int().nonnegative(),
540
+ completedSuites: import_zod4.z.number().int().nonnegative(),
541
+ totalAttempts: import_zod4.z.number().int().nonnegative(),
542
+ completedAttempts: import_zod4.z.number().int().nonnegative(),
543
+ counts: import_zod4.z.object({
544
+ passed: import_zod4.z.number(),
545
+ failed: import_zod4.z.number(),
546
+ error: import_zod4.z.number(),
547
+ cancelled: import_zod4.z.number()
500
548
  }),
501
549
  costs: EvalCostsSchema.optional(),
502
- legacy: import_zod3.z.boolean().optional()
550
+ legacy: import_zod4.z.boolean().optional()
503
551
  });
504
- var StudioEvaluationHistorySchema = import_zod3.z.object({
505
- runs: import_zod3.z.array(StudioEvaluationSummarySchema)
552
+ var StudioEvaluationHistorySchema = import_zod4.z.object({
553
+ runs: import_zod4.z.array(StudioEvaluationSummarySchema)
506
554
  });
507
- var StudioEvaluationDetailSchema = import_zod3.z.object({
555
+ var StudioEvaluationDetailSchema = import_zod4.z.object({
508
556
  run: StudioEvaluationSummarySchema.extend({
509
- suites: import_zod3.z.array(StudioEvalRunSummarySchema)
557
+ suites: import_zod4.z.array(StudioEvalRunSummarySchema)
510
558
  })
511
559
  });
512
- var StudioEvaluationResultsSchema = import_zod3.z.object({
560
+ var StudioEvaluationResultsSchema = import_zod4.z.object({
513
561
  run: StudioEvaluationSummarySchema.extend({
514
- suites: import_zod3.z.array(StudioEvalDetailSchema.shape.run)
562
+ suites: import_zod4.z.array(StudioEvalDetailSchema.shape.run)
515
563
  })
516
564
  });
517
565
 
566
+ // src/evals/evidence.ts
567
+ var object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
568
+ var handler2 = (value) => value !== null && typeof value === "object" && "using" in value;
569
+ function predicate(filter2, value, params) {
570
+ if (!filter2)
571
+ throw new EvalConfigurationError("Evidence filter is not registered.");
572
+ const selected = filter2(
573
+ structuredClone(value),
574
+ params === void 0 ? void 0 : structuredClone(params)
575
+ );
576
+ if (typeof selected !== "boolean")
577
+ throw new Error("Evidence filters must return a boolean synchronously.");
578
+ return selected;
579
+ }
580
+ function compactEvalObservation(observation, policy = {}, filters = {}) {
581
+ const outputs = policy.outputs;
582
+ const includeOutput = (output) => {
583
+ if (outputs === false) return false;
584
+ if (handler2(outputs))
585
+ return predicate(
586
+ filters.outputs?.[outputs.using],
587
+ output,
588
+ outputs.params
589
+ );
590
+ if (!outputs) return true;
591
+ return object(output) && outputs.some(
592
+ (selector) => Object.entries(selector).every(([key, value]) => output[key] === value)
593
+ );
594
+ };
595
+ const selectedOutputs = observation.structured.map((output) => ({
596
+ output,
597
+ included: includeOutput(output)
598
+ }));
599
+ const structured = selectedOutputs.filter((item) => item.included).map((item) => item.output);
600
+ const events = observation.events?.filter((value) => {
601
+ if (!object(value) || !EVAL_EVIDENCE_EVENT_TYPES.some((type) => type === value.type))
602
+ return false;
603
+ if (value.type === "structured-data") {
604
+ if (value.kind !== "final") return false;
605
+ const current = selectedOutputs.find(
606
+ ({ output: item }) => object(item) && typeof value.streamId === "string" && item.streamId === value.streamId && item.status === "done" && item.dataType === value.dataType && item.schemaId === value.schemaId && item.schemaVersion === value.schemaVersion && JSON.stringify(item.data) === JSON.stringify(value.data)
607
+ );
608
+ if (current) {
609
+ if (!current.included) return false;
610
+ if (!observation.events?.some(
611
+ (event) => object(event) && event.type === "structured-data-invalidated" && event.streamId === value.streamId
612
+ ))
613
+ return false;
614
+ } else {
615
+ const { type: _type, kind: _kind, ...fields } = value;
616
+ if (!includeOutput({ ...fields, status: "done" })) return false;
617
+ }
618
+ }
619
+ return true;
620
+ }).filter((event) => {
621
+ const selection = policy.events;
622
+ if (selection === false) return false;
623
+ if (handler2(selection))
624
+ return predicate(
625
+ filters.events?.[selection.using],
626
+ event,
627
+ selection.params
628
+ );
629
+ return !selection || selection.includes(event.type);
630
+ });
631
+ return structuredClone({
632
+ ...observation,
633
+ structured,
634
+ ...events ? { events } : {}
635
+ });
636
+ }
637
+ function createEvalJudgeEvidence(observation, policy = {}, filters = {}) {
638
+ return {
639
+ version: "compact-v1",
640
+ history: policy.history ?? true,
641
+ observation: compactEvalObservation(observation, policy, filters)
642
+ };
643
+ }
644
+ function getEvalGradeEvidence(step, previous) {
645
+ const evidence = step.evidence ?? createEvalJudgeEvidence(step.observation);
646
+ return {
647
+ observation: structuredClone(evidence.observation),
648
+ conversation: evidence.history ? previous.map((prior) => {
649
+ const { evidence: selected, ...result } = prior;
650
+ return structuredClone({
651
+ ...result,
652
+ observation: selected?.observation ?? compactEvalObservation(prior.observation)
653
+ });
654
+ }) : []
655
+ };
656
+ }
657
+
518
658
  // src/evals/studio-judge.ts
519
659
  async function readJson(response, signal) {
520
660
  if (!response.ok || !response.body) {
@@ -583,9 +723,14 @@ async function createStudioEvalJudge(options) {
583
723
  judge: identity,
584
724
  criterion: input.criterion,
585
725
  input: input.input,
586
- observation: input.observation,
726
+ observation: compactEvalObservation(input.observation),
587
727
  reference: input.reference,
588
- conversation: input.conversation
728
+ conversation: input.conversation.map(
729
+ ({ evidence: _evidence, ...step }) => ({
730
+ ...step,
731
+ observation: compactEvalObservation(step.observation)
732
+ })
733
+ )
589
734
  });
590
735
  const signal2 = AbortSignal.any([
591
736
  input.signal,
@@ -622,6 +767,7 @@ async function createStudioEvalJudge(options) {
622
767
  EvalConfigurationError,
623
768
  EvalCostAmountSchema,
624
769
  EvalCostsSchema,
770
+ EvalEvidencePolicySchema,
625
771
  EvalJudgeIdentitySchema,
626
772
  EvalJudgeUsageSchema,
627
773
  EvalManifestSchema,
@@ -649,6 +795,7 @@ async function createStudioEvalJudge(options) {
649
795
  StudioEvaluationSummarySchema,
650
796
  createStudioEvalJudge,
651
797
  defineSuite,
798
+ getEvalGradeEvidence,
652
799
  parseEvalSuite
653
800
  });
654
801
  //# sourceMappingURL=evals.js.map