@kortyx/agent 0.38.1 → 0.40.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/CHANGELOG.md +49 -0
- package/README.md +28 -0
- package/dist/evals.d.ts +414 -7
- package/dist/evals.js +495 -330
- package/dist/evals.js.map +1 -1
- package/dist/index.d.ts +21 -3
- package/dist/index.js +1320 -3004
- package/dist/index.js.map +1 -1
- package/dist/{studio-judge-DCAw3v60.d.ts → studio-judge-caDvI8By.d.ts} +973 -43
- package/package.json +11 -10
package/dist/evals.js
CHANGED
|
@@ -24,6 +24,7 @@ __export(evals_exports, {
|
|
|
24
24
|
EvalCostAmountSchema: () => EvalCostAmountSchema,
|
|
25
25
|
EvalCostsSchema: () => EvalCostsSchema,
|
|
26
26
|
EvalEvidencePolicySchema: () => EvalEvidencePolicySchema,
|
|
27
|
+
EvalExecutionSettingsSchema: () => EvalExecutionSettingsSchema,
|
|
27
28
|
EvalIssueSchema: () => EvalIssueSchema,
|
|
28
29
|
EvalJudgeIdentitySchema: () => EvalJudgeIdentitySchema,
|
|
29
30
|
EvalJudgeUsageSchema: () => EvalJudgeUsageSchema,
|
|
@@ -33,11 +34,15 @@ __export(evals_exports, {
|
|
|
33
34
|
EvalRemoteRunRequestSchema: () => EvalRemoteRunRequestSchema,
|
|
34
35
|
EvalResumeResponseSchema: () => EvalResumeResponseSchema,
|
|
35
36
|
EvalRunResultSchema: () => EvalRunResultSchema,
|
|
37
|
+
EvalSettingsResponseSchema: () => EvalSettingsResponseSchema,
|
|
38
|
+
EvalSettingsSchema: () => EvalSettingsSchema,
|
|
36
39
|
EvalStepResultSchema: () => EvalStepResultSchema,
|
|
37
40
|
EvalSuiteSchema: () => EvalSuiteSchema,
|
|
41
|
+
EvalTerminationSchema: () => EvalTerminationSchema,
|
|
38
42
|
EvalVerdictSchema: () => EvalVerdictSchema,
|
|
39
43
|
EvalWireEventSchema: () => EvalWireEventSchema,
|
|
40
44
|
EvaluationMetadataSchema: () => EvaluationMetadataSchema,
|
|
45
|
+
ResolvedEvalSettingsSchema: () => ResolvedEvalSettingsSchema,
|
|
41
46
|
StudioEvalDetailSchema: () => StudioEvalDetailSchema,
|
|
42
47
|
StudioEvalHistorySchema: () => StudioEvalHistorySchema,
|
|
43
48
|
StudioEvalJudgeRequestSchema: () => StudioEvalJudgeRequestSchema,
|
|
@@ -54,14 +59,16 @@ __export(evals_exports, {
|
|
|
54
59
|
createStudioEvalJudge: () => createStudioEvalJudge,
|
|
55
60
|
defineSuite: () => defineSuite,
|
|
56
61
|
getEvalGradeEvidence: () => getEvalGradeEvidence,
|
|
57
|
-
parseEvalSuite: () => parseEvalSuite
|
|
62
|
+
parseEvalSuite: () => parseEvalSuite,
|
|
63
|
+
resolveEvalSettings: () => resolveEvalSettings
|
|
58
64
|
});
|
|
59
65
|
module.exports = __toCommonJS(evals_exports);
|
|
60
66
|
|
|
61
67
|
// src/evals/contracts.ts
|
|
62
68
|
var import_errors = require("@kortyx/core/errors");
|
|
63
69
|
var import_browser = require("@kortyx/prompts/browser");
|
|
64
|
-
var
|
|
70
|
+
var import_telemetry_contracts = require("@kortyx/telemetry-contracts");
|
|
71
|
+
var import_zod3 = require("zod");
|
|
65
72
|
|
|
66
73
|
// src/evals/evidence-policy.ts
|
|
67
74
|
var import_zod = require("zod");
|
|
@@ -101,30 +108,126 @@ var EvalEvidencePolicySchema = import_zod.z.object({
|
|
|
101
108
|
]).optional()
|
|
102
109
|
}).strict();
|
|
103
110
|
|
|
111
|
+
// src/evals/settings.ts
|
|
112
|
+
var import_zod2 = require("zod");
|
|
113
|
+
var timeout = import_zod2.z.number().int().min(1).max(2147483647);
|
|
114
|
+
var EvalSettingsSchema = import_zod2.z.object({
|
|
115
|
+
repetitions: import_zod2.z.number().int().min(1).max(20).optional(),
|
|
116
|
+
concurrency: import_zod2.z.number().int().min(1).max(20).optional(),
|
|
117
|
+
caseTimeoutMs: timeout.optional(),
|
|
118
|
+
runTimeoutMs: timeout.optional(),
|
|
119
|
+
judge: import_zod2.z.enum(["studio", "app"]).optional()
|
|
120
|
+
}).strict();
|
|
121
|
+
var EvalExecutionSettingsSchema = import_zod2.z.object({
|
|
122
|
+
defaults: EvalSettingsSchema.omit({ runTimeoutMs: true, judge: true }),
|
|
123
|
+
limits: import_zod2.z.object({
|
|
124
|
+
concurrency: import_zod2.z.number().int().positive().max(20).optional(),
|
|
125
|
+
caseTimeoutMs: timeout.optional()
|
|
126
|
+
}).strict(),
|
|
127
|
+
overrides: import_zod2.z.array(import_zod2.z.enum(["repetitions", "concurrency", "caseTimeoutMs"]))
|
|
128
|
+
}).strict();
|
|
129
|
+
var ResolvedEvalSettingsSchema = import_zod2.z.object({
|
|
130
|
+
values: EvalSettingsSchema.required(),
|
|
131
|
+
sources: import_zod2.z.record(
|
|
132
|
+
import_zod2.z.enum([
|
|
133
|
+
"repetitions",
|
|
134
|
+
"concurrency",
|
|
135
|
+
"caseTimeoutMs",
|
|
136
|
+
"runTimeoutMs",
|
|
137
|
+
"judge"
|
|
138
|
+
]),
|
|
139
|
+
import_zod2.z.enum(["run", "studio", "sdk", "sdk-default", "studio-default"])
|
|
140
|
+
)
|
|
141
|
+
}).strict();
|
|
142
|
+
var EvalSettingsResponseSchema = import_zod2.z.object({
|
|
143
|
+
defaults: EvalSettingsSchema,
|
|
144
|
+
installation: EvalSettingsSchema,
|
|
145
|
+
maxRunTimeoutMs: timeout,
|
|
146
|
+
canEdit: import_zod2.z.boolean()
|
|
147
|
+
});
|
|
148
|
+
var EvalTerminationSchema = import_zod2.z.object({
|
|
149
|
+
code: import_zod2.z.enum([
|
|
150
|
+
"EVAL_RUN_TIMEOUT",
|
|
151
|
+
"EVAL_CANCELLED",
|
|
152
|
+
"EVAL_LEASE_LOST",
|
|
153
|
+
"EVAL_EXECUTION_UNKNOWN",
|
|
154
|
+
"EVAL_EXECUTOR_FAILED"
|
|
155
|
+
]),
|
|
156
|
+
message: import_zod2.z.string(),
|
|
157
|
+
timeoutMs: timeout.optional(),
|
|
158
|
+
phase: import_zod2.z.string().optional(),
|
|
159
|
+
cleanup: import_zod2.z.enum(["signalled", "unknown"]).optional(),
|
|
160
|
+
diagnosticId: import_zod2.z.string().uuid().optional()
|
|
161
|
+
}).strict();
|
|
162
|
+
function resolveEvalSettings(overrides = {}, studio = {}, execution, installation = {}, maxRunTimeoutMs = 2147483647) {
|
|
163
|
+
const values = {
|
|
164
|
+
repetitions: 1,
|
|
165
|
+
concurrency: 1,
|
|
166
|
+
caseTimeoutMs: 6e4,
|
|
167
|
+
runTimeoutMs: 30 * 6e4,
|
|
168
|
+
judge: "studio"
|
|
169
|
+
};
|
|
170
|
+
const sources = {
|
|
171
|
+
repetitions: "sdk-default",
|
|
172
|
+
concurrency: "sdk-default",
|
|
173
|
+
caseTimeoutMs: "sdk-default",
|
|
174
|
+
runTimeoutMs: "studio-default",
|
|
175
|
+
judge: "studio-default"
|
|
176
|
+
};
|
|
177
|
+
for (const [input, source] of [
|
|
178
|
+
[execution?.defaults ?? {}, "sdk"],
|
|
179
|
+
[installation, "studio"],
|
|
180
|
+
[studio, "studio"],
|
|
181
|
+
[overrides, "run"]
|
|
182
|
+
]) {
|
|
183
|
+
const parsed = EvalSettingsSchema.parse(input);
|
|
184
|
+
for (const key of Object.keys(parsed)) {
|
|
185
|
+
if (parsed[key] !== void 0) {
|
|
186
|
+
Object.assign(values, { [key]: parsed[key] });
|
|
187
|
+
sources[key] = source;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (values.runTimeoutMs > maxRunTimeoutMs)
|
|
192
|
+
throw new Error(
|
|
193
|
+
`Evaluation timeout exceeds the administrator maximum of ${maxRunTimeoutMs} ms.`
|
|
194
|
+
);
|
|
195
|
+
for (const key of ["concurrency", "caseTimeoutMs"]) {
|
|
196
|
+
const max = execution?.limits[key];
|
|
197
|
+
if (max !== void 0 && values[key] > max)
|
|
198
|
+
throw new Error(`${key} exceeds the application maximum of ${max}.`);
|
|
199
|
+
}
|
|
200
|
+
if (!execution?.overrides.includes("caseTimeoutMs") && (overrides.caseTimeoutMs !== void 0 || studio.caseTimeoutMs !== void 0 || installation.caseTimeoutMs !== void 0))
|
|
201
|
+
throw new Error(
|
|
202
|
+
"Update the consumer SDK to support case timeout overrides."
|
|
203
|
+
);
|
|
204
|
+
return { values, sources };
|
|
205
|
+
}
|
|
206
|
+
|
|
104
207
|
// src/evals/contracts.ts
|
|
105
|
-
var id2 =
|
|
106
|
-
var failureDescriptor =
|
|
208
|
+
var id2 = import_zod3.z.string().trim().min(1).max(256);
|
|
209
|
+
var failureDescriptor = import_zod3.z.custom(import_errors.isFailureDescriptor).transform(
|
|
107
210
|
(value) => JSON.parse(JSON.stringify((0, import_errors.serializeFailure)(value)))
|
|
108
211
|
);
|
|
109
|
-
var handler =
|
|
110
|
-
var EvalResumeResponseSchema =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
212
|
+
var handler = import_zod3.z.object({ using: id2, params: import_zod3.z.json().optional() }).strict();
|
|
213
|
+
var EvalResumeResponseSchema = import_zod3.z.discriminatedUnion("type", [
|
|
214
|
+
import_zod3.z.object({ type: import_zod3.z.literal("text"), text: import_zod3.z.string() }).strict(),
|
|
215
|
+
import_zod3.z.object({ type: import_zod3.z.literal("select"), ids: import_zod3.z.array(import_zod3.z.string()) }).strict(),
|
|
216
|
+
import_zod3.z.object({ type: import_zod3.z.literal("value"), value: import_zod3.z.json() }).strict(),
|
|
217
|
+
import_zod3.z.object({ type: import_zod3.z.literal("cancel") }).strict()
|
|
115
218
|
]);
|
|
116
|
-
var expectation =
|
|
117
|
-
type:
|
|
219
|
+
var expectation = import_zod3.z.object({
|
|
220
|
+
type: import_zod3.z.enum(["answer", "interrupt"]),
|
|
118
221
|
schemaId: id2.optional(),
|
|
119
222
|
schemaVersion: id2.optional(),
|
|
120
|
-
outputs:
|
|
121
|
-
criteria:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
223
|
+
outputs: import_zod3.z.array(import_zod3.z.object({ schemaId: id2, schemaVersion: id2.optional() }).strict()).optional(),
|
|
224
|
+
criteria: import_zod3.z.array(
|
|
225
|
+
import_zod3.z.union([
|
|
226
|
+
import_zod3.z.string().trim().min(1),
|
|
227
|
+
import_zod3.z.object({ id: id2, text: import_zod3.z.string().trim().min(1) }).strict()
|
|
125
228
|
])
|
|
126
229
|
).optional(),
|
|
127
|
-
reference:
|
|
230
|
+
reference: import_zod3.z.json().optional()
|
|
128
231
|
}).strict().superRefine((value, ctx) => {
|
|
129
232
|
if (value.type === "answer" && (value.schemaId || value.schemaVersion))
|
|
130
233
|
ctx.addIssue({
|
|
@@ -140,21 +243,21 @@ var expectation = import_zod2.z.object({
|
|
|
140
243
|
message: "Criterion IDs must be unique within a step."
|
|
141
244
|
});
|
|
142
245
|
});
|
|
143
|
-
var EvalSuiteSchema =
|
|
246
|
+
var EvalSuiteSchema = import_zod3.z.object({
|
|
144
247
|
evidence: EvalEvidencePolicySchema.optional(),
|
|
145
248
|
id: id2,
|
|
146
|
-
name:
|
|
147
|
-
cases:
|
|
148
|
-
|
|
249
|
+
name: import_zod3.z.string().optional(),
|
|
250
|
+
cases: import_zod3.z.array(
|
|
251
|
+
import_zod3.z.object({
|
|
149
252
|
id: id2,
|
|
150
|
-
name:
|
|
151
|
-
params:
|
|
253
|
+
name: import_zod3.z.string().optional(),
|
|
254
|
+
params: import_zod3.z.json().optional(),
|
|
152
255
|
workflowId: id2.optional(),
|
|
153
|
-
steps:
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
resume:
|
|
256
|
+
steps: import_zod3.z.array(
|
|
257
|
+
import_zod3.z.union([
|
|
258
|
+
import_zod3.z.object({ message: import_zod3.z.string().min(1), expect: expectation }).strict(),
|
|
259
|
+
import_zod3.z.object({
|
|
260
|
+
resume: import_zod3.z.union([EvalResumeResponseSchema, handler]),
|
|
158
261
|
expect: expectation
|
|
159
262
|
}).strict()
|
|
160
263
|
])
|
|
@@ -162,44 +265,44 @@ var EvalSuiteSchema = import_zod2.z.object({
|
|
|
162
265
|
}).strict()
|
|
163
266
|
).min(1)
|
|
164
267
|
}).strict();
|
|
165
|
-
var EvalVerdictSchema =
|
|
166
|
-
passed:
|
|
167
|
-
reason:
|
|
168
|
-
evidence:
|
|
268
|
+
var EvalVerdictSchema = import_zod3.z.object({
|
|
269
|
+
passed: import_zod3.z.boolean(),
|
|
270
|
+
reason: import_zod3.z.string().trim().min(1),
|
|
271
|
+
evidence: import_zod3.z.array(import_zod3.z.string().min(1))
|
|
169
272
|
}).strict();
|
|
170
|
-
var EvalObservationSchema =
|
|
273
|
+
var EvalObservationSchema = import_zod3.z.object({
|
|
171
274
|
failure: failureDescriptor.optional(),
|
|
172
|
-
diagnosticId:
|
|
173
|
-
promptUsage:
|
|
174
|
-
|
|
175
|
-
id:
|
|
176
|
-
version:
|
|
177
|
-
hash:
|
|
178
|
-
environment:
|
|
179
|
-
snapshotRevision:
|
|
180
|
-
model:
|
|
275
|
+
diagnosticId: import_zod3.z.uuid().optional(),
|
|
276
|
+
promptUsage: import_zod3.z.array(
|
|
277
|
+
import_zod3.z.object({
|
|
278
|
+
id: import_zod3.z.string(),
|
|
279
|
+
version: import_zod3.z.number().int().positive(),
|
|
280
|
+
hash: import_zod3.z.string().regex(/^[a-f0-9]{64}$/),
|
|
281
|
+
environment: import_zod3.z.string(),
|
|
282
|
+
snapshotRevision: import_zod3.z.string(),
|
|
283
|
+
model: import_zod3.z.string().optional()
|
|
181
284
|
}).strict()
|
|
182
285
|
).optional(),
|
|
183
|
-
type:
|
|
184
|
-
text:
|
|
185
|
-
structured:
|
|
186
|
-
events:
|
|
187
|
-
runId:
|
|
188
|
-
checkpointId:
|
|
189
|
-
interrupt:
|
|
190
|
-
requestId:
|
|
191
|
-
kind:
|
|
192
|
-
question:
|
|
193
|
-
schemaId:
|
|
194
|
-
schemaVersion:
|
|
195
|
-
options:
|
|
196
|
-
|
|
197
|
-
id:
|
|
198
|
-
label:
|
|
199
|
-
description:
|
|
286
|
+
type: import_zod3.z.enum(["answer", "interrupt", "error", "cancelled"]),
|
|
287
|
+
text: import_zod3.z.string(),
|
|
288
|
+
structured: import_zod3.z.array(import_zod3.z.json()),
|
|
289
|
+
events: import_zod3.z.array(import_zod3.z.json()).optional(),
|
|
290
|
+
runId: import_zod3.z.string().optional(),
|
|
291
|
+
checkpointId: import_zod3.z.string().optional(),
|
|
292
|
+
interrupt: import_zod3.z.object({
|
|
293
|
+
requestId: import_zod3.z.string(),
|
|
294
|
+
kind: import_zod3.z.enum(["text", "choice", "multi-choice", "custom"]),
|
|
295
|
+
question: import_zod3.z.string().optional(),
|
|
296
|
+
schemaId: import_zod3.z.string().optional(),
|
|
297
|
+
schemaVersion: import_zod3.z.string().optional(),
|
|
298
|
+
options: import_zod3.z.array(
|
|
299
|
+
import_zod3.z.object({
|
|
300
|
+
id: import_zod3.z.string(),
|
|
301
|
+
label: import_zod3.z.string(),
|
|
302
|
+
description: import_zod3.z.string().optional()
|
|
200
303
|
}).strict()
|
|
201
304
|
),
|
|
202
|
-
request:
|
|
305
|
+
request: import_zod3.z.json().optional()
|
|
203
306
|
}).strict().optional()
|
|
204
307
|
}).strict().superRefine((value, ctx) => {
|
|
205
308
|
if (value.type === "interrupt" !== Boolean(value.interrupt))
|
|
@@ -208,11 +311,16 @@ var EvalObservationSchema = import_zod2.z.object({
|
|
|
208
311
|
message: "Interrupt observations require exactly one interrupt."
|
|
209
312
|
});
|
|
210
313
|
});
|
|
211
|
-
var status =
|
|
212
|
-
var EvalIssueSchema =
|
|
314
|
+
var status = import_zod3.z.enum(["passed", "failed", "error", "cancelled", "ungraded"]);
|
|
315
|
+
var EvalIssueSchema = import_zod3.z.object({
|
|
316
|
+
exception: import_telemetry_contracts.DiagnosticContentSchema.optional(),
|
|
317
|
+
details: import_zod3.z.object({
|
|
318
|
+
timeoutMs: import_zod3.z.number().positive().optional(),
|
|
319
|
+
httpStatus: import_zod3.z.number().int().min(100).max(599).optional()
|
|
320
|
+
}).strict().optional(),
|
|
213
321
|
failure: failureDescriptor.optional(),
|
|
214
|
-
diagnosticId:
|
|
215
|
-
phase:
|
|
322
|
+
diagnosticId: import_zod3.z.uuid().optional(),
|
|
323
|
+
phase: import_zod3.z.enum([
|
|
216
324
|
"params",
|
|
217
325
|
"setup",
|
|
218
326
|
"execute",
|
|
@@ -223,196 +331,200 @@ var EvalIssueSchema = import_zod2.z.object({
|
|
|
223
331
|
"cleanup",
|
|
224
332
|
"reporting"
|
|
225
333
|
]),
|
|
226
|
-
code:
|
|
227
|
-
message:
|
|
334
|
+
code: import_zod3.z.string(),
|
|
335
|
+
message: import_zod3.z.string()
|
|
228
336
|
}).strict();
|
|
229
337
|
var issue = EvalIssueSchema;
|
|
230
|
-
var EvalJudgeUsageSchema =
|
|
231
|
-
provider:
|
|
232
|
-
model:
|
|
233
|
-
occurredAt:
|
|
234
|
-
usage:
|
|
235
|
-
input:
|
|
236
|
-
output:
|
|
237
|
-
total:
|
|
238
|
-
reasoning:
|
|
239
|
-
cacheRead:
|
|
240
|
-
cacheWrite:
|
|
241
|
-
cacheWrite1h:
|
|
242
|
-
outputIncludesReasoning:
|
|
243
|
-
inputIncludesCacheRead:
|
|
244
|
-
inputIncludesCacheWrite:
|
|
338
|
+
var EvalJudgeUsageSchema = import_zod3.z.object({
|
|
339
|
+
provider: import_zod3.z.string().min(1),
|
|
340
|
+
model: import_zod3.z.string().min(1),
|
|
341
|
+
occurredAt: import_zod3.z.iso.datetime(),
|
|
342
|
+
usage: import_zod3.z.object({
|
|
343
|
+
input: import_zod3.z.number().finite().nonnegative().optional(),
|
|
344
|
+
output: import_zod3.z.number().finite().nonnegative().optional(),
|
|
345
|
+
total: import_zod3.z.number().finite().nonnegative().optional(),
|
|
346
|
+
reasoning: import_zod3.z.number().finite().nonnegative().optional(),
|
|
347
|
+
cacheRead: import_zod3.z.number().finite().nonnegative().optional(),
|
|
348
|
+
cacheWrite: import_zod3.z.number().finite().nonnegative().optional(),
|
|
349
|
+
cacheWrite1h: import_zod3.z.number().finite().nonnegative().optional(),
|
|
350
|
+
outputIncludesReasoning: import_zod3.z.boolean().optional(),
|
|
351
|
+
inputIncludesCacheRead: import_zod3.z.boolean().optional(),
|
|
352
|
+
inputIncludesCacheWrite: import_zod3.z.boolean().optional()
|
|
245
353
|
}).strict().optional(),
|
|
246
|
-
pricingContext:
|
|
247
|
-
serviceTier:
|
|
248
|
-
inferenceGeo:
|
|
249
|
-
speed:
|
|
354
|
+
pricingContext: import_zod3.z.object({
|
|
355
|
+
serviceTier: import_zod3.z.string().min(1).max(100).optional(),
|
|
356
|
+
inferenceGeo: import_zod3.z.string().min(1).max(100).optional(),
|
|
357
|
+
speed: import_zod3.z.string().min(1).max(100).optional()
|
|
250
358
|
}).strict().optional(),
|
|
251
|
-
pricing:
|
|
252
|
-
source:
|
|
253
|
-
currency:
|
|
254
|
-
actualCostMicros:
|
|
359
|
+
pricing: import_zod3.z.object({
|
|
360
|
+
source: import_zod3.z.literal("provider"),
|
|
361
|
+
currency: import_zod3.z.literal("USD"),
|
|
362
|
+
actualCostMicros: import_zod3.z.number().int().nonnegative().safe()
|
|
255
363
|
}).strict().optional()
|
|
256
364
|
}).strict();
|
|
257
|
-
var EvalStepResultSchema =
|
|
258
|
-
evidence:
|
|
259
|
-
version:
|
|
260
|
-
history:
|
|
365
|
+
var EvalStepResultSchema = import_zod3.z.object({
|
|
366
|
+
evidence: import_zod3.z.object({
|
|
367
|
+
version: import_zod3.z.literal("compact-v1"),
|
|
368
|
+
history: import_zod3.z.boolean(),
|
|
261
369
|
observation: EvalObservationSchema
|
|
262
370
|
}).strict().optional(),
|
|
263
|
-
index:
|
|
264
|
-
input:
|
|
265
|
-
|
|
266
|
-
|
|
371
|
+
index: import_zod3.z.number().int().nonnegative(),
|
|
372
|
+
input: import_zod3.z.union([
|
|
373
|
+
import_zod3.z.object({ message: import_zod3.z.string() }).strict(),
|
|
374
|
+
import_zod3.z.object({ resume: EvalResumeResponseSchema }).strict()
|
|
267
375
|
]),
|
|
268
376
|
expectation,
|
|
269
377
|
observation: EvalObservationSchema,
|
|
270
|
-
reference:
|
|
378
|
+
reference: import_zod3.z.json().optional(),
|
|
271
379
|
status,
|
|
272
|
-
reason:
|
|
273
|
-
judgeCalls:
|
|
274
|
-
judgeUsage:
|
|
275
|
-
criteria:
|
|
276
|
-
EvalVerdictSchema.extend({ id:
|
|
380
|
+
reason: import_zod3.z.string().optional(),
|
|
381
|
+
judgeCalls: import_zod3.z.number().int().nonnegative().optional(),
|
|
382
|
+
judgeUsage: import_zod3.z.array(EvalJudgeUsageSchema).optional(),
|
|
383
|
+
criteria: import_zod3.z.array(
|
|
384
|
+
EvalVerdictSchema.extend({ id: import_zod3.z.string(), text: import_zod3.z.string() })
|
|
277
385
|
)
|
|
278
386
|
}).strict();
|
|
279
|
-
var runtimeExecution =
|
|
280
|
-
var EvalCaseResultSchema =
|
|
387
|
+
var runtimeExecution = import_zod3.z.object({ sessionId: import_zod3.z.string().min(1), runId: import_zod3.z.string().min(1) }).strict();
|
|
388
|
+
var EvalCaseResultSchema = import_zod3.z.object({
|
|
281
389
|
verification: EvalVerdictSchema.optional(),
|
|
282
|
-
phaseDurationsMs:
|
|
390
|
+
phaseDurationsMs: import_zod3.z.partialRecord(issue.shape.phase, import_zod3.z.number().finite().nonnegative()).optional(),
|
|
283
391
|
caseId: id2,
|
|
284
|
-
repetition:
|
|
285
|
-
attemptId:
|
|
286
|
-
runtimeExecutions:
|
|
287
|
-
sessionId:
|
|
392
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
393
|
+
attemptId: import_zod3.z.uuid().optional(),
|
|
394
|
+
runtimeExecutions: import_zod3.z.array(runtimeExecution).optional(),
|
|
395
|
+
sessionId: import_zod3.z.string(),
|
|
288
396
|
status,
|
|
289
|
-
durationMs:
|
|
290
|
-
steps:
|
|
291
|
-
errors:
|
|
397
|
+
durationMs: import_zod3.z.number().nonnegative(),
|
|
398
|
+
steps: import_zod3.z.array(EvalStepResultSchema),
|
|
399
|
+
errors: import_zod3.z.array(issue)
|
|
292
400
|
}).strict();
|
|
293
|
-
var EvalJudgeIdentitySchema =
|
|
401
|
+
var EvalJudgeIdentitySchema = import_zod3.z.object({
|
|
294
402
|
id: id2,
|
|
295
403
|
version: id2,
|
|
296
|
-
location:
|
|
404
|
+
location: import_zod3.z.enum(["app", "studio"]).optional()
|
|
297
405
|
}).strict();
|
|
298
406
|
var judge = EvalJudgeIdentitySchema;
|
|
299
|
-
var StudioEvalJudgeRequestSchema =
|
|
407
|
+
var StudioEvalJudgeRequestSchema = import_zod3.z.object({
|
|
300
408
|
environment: id2,
|
|
301
409
|
judge: EvalJudgeIdentitySchema,
|
|
302
|
-
criterion:
|
|
410
|
+
criterion: import_zod3.z.object({ id: id2, text: import_zod3.z.string().trim().min(1).max(16384) }).strict(),
|
|
303
411
|
input: EvalStepResultSchema.shape.input,
|
|
304
412
|
observation: EvalObservationSchema,
|
|
305
|
-
reference:
|
|
306
|
-
conversation:
|
|
413
|
+
reference: import_zod3.z.json().optional(),
|
|
414
|
+
conversation: import_zod3.z.array(EvalStepResultSchema).max(100)
|
|
307
415
|
}).strict();
|
|
308
|
-
var StudioEvalJudgeResponseSchema =
|
|
416
|
+
var StudioEvalJudgeResponseSchema = import_zod3.z.object({
|
|
309
417
|
judge: EvalJudgeIdentitySchema,
|
|
310
418
|
verdict: EvalVerdictSchema,
|
|
311
|
-
usage:
|
|
419
|
+
usage: import_zod3.z.array(EvalJudgeUsageSchema).optional()
|
|
312
420
|
}).strict();
|
|
313
|
-
var EvalRunResultSchema =
|
|
314
|
-
id:
|
|
421
|
+
var EvalRunResultSchema = import_zod3.z.object({
|
|
422
|
+
id: import_zod3.z.uuid(),
|
|
315
423
|
suiteId: id2,
|
|
316
|
-
suiteRevision:
|
|
424
|
+
suiteRevision: import_zod3.z.string().regex(/^[a-f0-9]{64}$/),
|
|
317
425
|
suite: EvalSuiteSchema,
|
|
318
426
|
judge: judge.optional(),
|
|
319
|
-
startedAt:
|
|
320
|
-
durationMs:
|
|
427
|
+
startedAt: import_zod3.z.iso.datetime(),
|
|
428
|
+
durationMs: import_zod3.z.number().nonnegative(),
|
|
321
429
|
status,
|
|
322
|
-
counts:
|
|
323
|
-
passed:
|
|
324
|
-
failed:
|
|
325
|
-
error:
|
|
326
|
-
cancelled:
|
|
327
|
-
ungraded:
|
|
430
|
+
counts: import_zod3.z.object({
|
|
431
|
+
passed: import_zod3.z.number().int().nonnegative(),
|
|
432
|
+
failed: import_zod3.z.number().int().nonnegative(),
|
|
433
|
+
error: import_zod3.z.number().int().nonnegative(),
|
|
434
|
+
cancelled: import_zod3.z.number().int().nonnegative(),
|
|
435
|
+
ungraded: import_zod3.z.number().int().nonnegative().optional()
|
|
328
436
|
}).strict(),
|
|
329
|
-
cases:
|
|
330
|
-
errors:
|
|
437
|
+
cases: import_zod3.z.array(EvalCaseResultSchema),
|
|
438
|
+
errors: import_zod3.z.array(issue)
|
|
331
439
|
}).strict();
|
|
332
|
-
var EvalManifestSchema =
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
440
|
+
var EvalManifestSchema = import_zod3.z.object({
|
|
441
|
+
execution: EvalExecutionSettingsSchema.optional(),
|
|
442
|
+
schemaVersion: import_zod3.z.literal(1),
|
|
443
|
+
studioJudging: import_zod3.z.literal(true).optional(),
|
|
444
|
+
promptContracts: import_zod3.z.array(
|
|
445
|
+
import_zod3.z.object({
|
|
446
|
+
id: import_zod3.z.string(),
|
|
447
|
+
format: import_zod3.z.enum(["system-user", "chat"]),
|
|
448
|
+
variablesSchema: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()),
|
|
449
|
+
configSchema: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown())
|
|
341
450
|
}).strict()
|
|
342
451
|
).optional(),
|
|
343
|
-
attemptScheduling:
|
|
344
|
-
suites:
|
|
345
|
-
responders:
|
|
346
|
-
|
|
452
|
+
attemptScheduling: import_zod3.z.literal(true).optional(),
|
|
453
|
+
suites: import_zod3.z.array(EvalSuiteSchema),
|
|
454
|
+
responders: import_zod3.z.array(
|
|
455
|
+
import_zod3.z.object({
|
|
347
456
|
name: id2,
|
|
348
457
|
schemaId: id2.optional(),
|
|
349
458
|
schemaVersion: id2.optional()
|
|
350
459
|
}).strict()
|
|
351
460
|
),
|
|
352
|
-
references:
|
|
353
|
-
paramsSchema:
|
|
461
|
+
references: import_zod3.z.array(id2),
|
|
462
|
+
paramsSchema: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional(),
|
|
354
463
|
judge: judge.optional()
|
|
355
464
|
}).strict();
|
|
356
|
-
var EvalProgressSchema =
|
|
357
|
-
|
|
358
|
-
type:
|
|
465
|
+
var EvalProgressSchema = import_zod3.z.discriminatedUnion("type", [
|
|
466
|
+
import_zod3.z.object({
|
|
467
|
+
type: import_zod3.z.literal("case-dispatch"),
|
|
359
468
|
caseId: id2,
|
|
360
|
-
repetition:
|
|
361
|
-
status:
|
|
362
|
-
retryAt:
|
|
363
|
-
httpStatus:
|
|
364
|
-
executionId:
|
|
365
|
-
generation:
|
|
469
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
470
|
+
status: import_zod3.z.enum(["queued", "retrying", "reconnecting"]),
|
|
471
|
+
retryAt: import_zod3.z.iso.datetime().optional(),
|
|
472
|
+
httpStatus: import_zod3.z.number().int().min(100).max(599).optional(),
|
|
473
|
+
executionId: import_zod3.z.uuid().optional(),
|
|
474
|
+
generation: import_zod3.z.uuid().optional()
|
|
366
475
|
}).strict(),
|
|
367
|
-
|
|
368
|
-
type:
|
|
476
|
+
import_zod3.z.object({
|
|
477
|
+
type: import_zod3.z.literal("case-runtime-associated"),
|
|
369
478
|
caseId: id2,
|
|
370
|
-
repetition:
|
|
371
|
-
attemptId:
|
|
479
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
480
|
+
attemptId: import_zod3.z.uuid(),
|
|
372
481
|
execution: runtimeExecution
|
|
373
482
|
}).strict(),
|
|
374
|
-
|
|
375
|
-
type:
|
|
376
|
-
caseIds:
|
|
377
|
-
repetitions:
|
|
378
|
-
concurrency:
|
|
483
|
+
import_zod3.z.object({
|
|
484
|
+
type: import_zod3.z.literal("run-started"),
|
|
485
|
+
caseIds: import_zod3.z.array(id2).min(1),
|
|
486
|
+
repetitions: import_zod3.z.number().int().positive(),
|
|
487
|
+
concurrency: import_zod3.z.number().int().positive()
|
|
379
488
|
}).strict(),
|
|
380
|
-
|
|
381
|
-
type:
|
|
489
|
+
import_zod3.z.object({
|
|
490
|
+
type: import_zod3.z.literal("case-progress"),
|
|
382
491
|
caseId: id2,
|
|
383
|
-
repetition:
|
|
492
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
384
493
|
phase: issue.shape.phase,
|
|
385
|
-
stepIndex:
|
|
494
|
+
stepIndex: import_zod3.z.number().int().nonnegative().optional()
|
|
386
495
|
}).strict(),
|
|
387
|
-
|
|
388
|
-
type:
|
|
389
|
-
attemptId:
|
|
496
|
+
import_zod3.z.object({
|
|
497
|
+
type: import_zod3.z.literal("case-started"),
|
|
498
|
+
attemptId: import_zod3.z.uuid().optional(),
|
|
390
499
|
caseId: id2,
|
|
391
|
-
repetition:
|
|
392
|
-
sessionId:
|
|
500
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
501
|
+
sessionId: import_zod3.z.string()
|
|
393
502
|
}).strict(),
|
|
394
|
-
|
|
395
|
-
type:
|
|
503
|
+
import_zod3.z.object({
|
|
504
|
+
type: import_zod3.z.literal("step-completed"),
|
|
396
505
|
caseId: id2,
|
|
397
|
-
repetition:
|
|
506
|
+
repetition: import_zod3.z.number().int().positive(),
|
|
398
507
|
step: EvalStepResultSchema
|
|
399
508
|
}).strict(),
|
|
400
|
-
|
|
509
|
+
import_zod3.z.object({ type: import_zod3.z.literal("case-completed"), result: EvalCaseResultSchema }).strict()
|
|
401
510
|
]);
|
|
402
|
-
var EvalRemoteRunRequestSchema =
|
|
511
|
+
var EvalRemoteRunRequestSchema = import_zod3.z.object({
|
|
403
512
|
promptSnapshot: import_browser.PromptSnapshotSchema.optional(),
|
|
404
|
-
promptGroupName:
|
|
513
|
+
promptGroupName: import_zod3.z.string().optional(),
|
|
514
|
+
caseTimeoutMs: EvalSettingsSchema.shape.caseTimeoutMs,
|
|
515
|
+
runTimeoutMs: EvalSettingsSchema.shape.runTimeoutMs,
|
|
516
|
+
resolvedSettings: ResolvedEvalSettingsSchema.optional(),
|
|
405
517
|
suiteId: id2,
|
|
406
|
-
suiteRevision:
|
|
407
|
-
grading:
|
|
518
|
+
suiteRevision: import_zod3.z.string().regex(/^[a-f0-9]{64}$/),
|
|
519
|
+
grading: import_zod3.z.enum(["app", "studio"]).optional(),
|
|
408
520
|
judge: EvalJudgeIdentitySchema.optional(),
|
|
409
|
-
caseIds:
|
|
410
|
-
repetitions:
|
|
411
|
-
concurrency:
|
|
412
|
-
attempt:
|
|
521
|
+
caseIds: import_zod3.z.array(id2).min(1).max(100).optional(),
|
|
522
|
+
repetitions: import_zod3.z.number().int().min(1).max(20).default(1),
|
|
523
|
+
concurrency: import_zod3.z.number().int().min(1).max(20).default(1),
|
|
524
|
+
attempt: import_zod3.z.object({
|
|
413
525
|
caseId: id2,
|
|
414
|
-
repetition:
|
|
415
|
-
evaluationId:
|
|
526
|
+
repetition: import_zod3.z.number().int().min(1).max(20),
|
|
527
|
+
evaluationId: import_zod3.z.uuid()
|
|
416
528
|
}).strict().optional()
|
|
417
529
|
}).strict();
|
|
418
530
|
var StudioEvalStartRequestSchema = EvalRemoteRunRequestSchema.omit({
|
|
@@ -422,39 +534,42 @@ var StudioEvalStartRequestSchema = EvalRemoteRunRequestSchema.omit({
|
|
|
422
534
|
promptGroupName: true,
|
|
423
535
|
attempt: true
|
|
424
536
|
}).extend({
|
|
425
|
-
promptSelection:
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
type:
|
|
429
|
-
id:
|
|
430
|
-
version:
|
|
537
|
+
promptSelection: import_zod3.z.discriminatedUnion("type", [
|
|
538
|
+
import_zod3.z.object({ type: import_zod3.z.literal("live") }).strict(),
|
|
539
|
+
import_zod3.z.object({
|
|
540
|
+
type: import_zod3.z.literal("single"),
|
|
541
|
+
id: import_zod3.z.string(),
|
|
542
|
+
version: import_zod3.z.number().int().positive()
|
|
431
543
|
}).strict(),
|
|
432
|
-
|
|
544
|
+
import_zod3.z.object({ type: import_zod3.z.literal("group"), groupId: import_zod3.z.uuid() }).strict()
|
|
433
545
|
]).optional(),
|
|
434
|
-
targetId:
|
|
435
|
-
judge:
|
|
546
|
+
targetId: import_zod3.z.string().min(1).max(128),
|
|
547
|
+
judge: import_zod3.z.enum(["studio", "app"]).optional(),
|
|
548
|
+
repetitions: EvalSettingsSchema.shape.repetitions,
|
|
549
|
+
concurrency: EvalSettingsSchema.shape.concurrency
|
|
436
550
|
});
|
|
437
|
-
var EvalWireEventSchema =
|
|
438
|
-
|
|
439
|
-
type:
|
|
440
|
-
state:
|
|
551
|
+
var EvalWireEventSchema = import_zod3.z.discriminatedUnion("type", [
|
|
552
|
+
import_zod3.z.object({
|
|
553
|
+
type: import_zod3.z.literal("execution-status"),
|
|
554
|
+
state: import_zod3.z.enum(["queued", "running", "completed", "cancelled", "unknown"])
|
|
441
555
|
}).strict(),
|
|
442
|
-
|
|
443
|
-
type:
|
|
556
|
+
import_zod3.z.object({
|
|
557
|
+
type: import_zod3.z.literal("progress"),
|
|
444
558
|
event: EvalProgressSchema,
|
|
445
|
-
sequence:
|
|
559
|
+
sequence: import_zod3.z.number().int().positive().optional()
|
|
446
560
|
}).strict(),
|
|
447
|
-
|
|
448
|
-
type:
|
|
561
|
+
import_zod3.z.object({
|
|
562
|
+
type: import_zod3.z.literal("result"),
|
|
449
563
|
result: EvalRunResultSchema,
|
|
450
|
-
sequence:
|
|
564
|
+
sequence: import_zod3.z.number().int().positive().optional()
|
|
451
565
|
}).strict(),
|
|
452
|
-
|
|
453
|
-
type:
|
|
454
|
-
|
|
566
|
+
import_zod3.z.object({
|
|
567
|
+
type: import_zod3.z.literal("error"),
|
|
568
|
+
exception: import_telemetry_contracts.DiagnosticContentSchema.optional(),
|
|
569
|
+
message: import_zod3.z.string(),
|
|
455
570
|
failure: failureDescriptor.optional(),
|
|
456
|
-
diagnosticId:
|
|
457
|
-
sequence:
|
|
571
|
+
diagnosticId: import_zod3.z.uuid().optional(),
|
|
572
|
+
sequence: import_zod3.z.number().int().positive().optional()
|
|
458
573
|
}).strict()
|
|
459
574
|
]);
|
|
460
575
|
var EvalConfigurationError = class extends Error {
|
|
@@ -489,7 +604,8 @@ function defineSuite(suite) {
|
|
|
489
604
|
|
|
490
605
|
// src/evals/errors.ts
|
|
491
606
|
var import_errors2 = require("@kortyx/core/errors");
|
|
492
|
-
var
|
|
607
|
+
var import_telemetry_contracts2 = require("@kortyx/telemetry-contracts");
|
|
608
|
+
var import_zod4 = require("zod");
|
|
493
609
|
var messages = {
|
|
494
610
|
params: "Case parameters failed validation.",
|
|
495
611
|
setup: "Case setup failed.",
|
|
@@ -505,6 +621,9 @@ function createEvalIssue(phase, error, options = {}) {
|
|
|
505
621
|
const control = (0, import_errors2.isControlFlowError)(error);
|
|
506
622
|
const declared = !control && ((0, import_errors2.isFailureDescriptor)(error) || (0, import_errors2.isFailureDescriptor)((0, import_errors2.errorProperty)(error, "failure")));
|
|
507
623
|
const failure = (0, import_errors2.serializeFailure)(control ? void 0 : error);
|
|
624
|
+
const exception = !control && error !== void 0 ? (0, import_telemetry_contracts2.captureDiagnosticContent)(error) : null;
|
|
625
|
+
const rawMessage = typeof error === "string" ? error : (0, import_errors2.errorProperty)(error, "message");
|
|
626
|
+
const originalMessage = typeof rawMessage === "string" ? (0, import_telemetry_contracts2.redactDiagnosticText)(rawMessage) : void 0;
|
|
508
627
|
let diagnosticId = options.diagnosticId ?? (0, import_errors2.errorProperty)(error, "diagnosticId");
|
|
509
628
|
if (!control && !diagnosticId && options.reportError) {
|
|
510
629
|
try {
|
|
@@ -512,33 +631,38 @@ function createEvalIssue(phase, error, options = {}) {
|
|
|
512
631
|
} catch {
|
|
513
632
|
}
|
|
514
633
|
}
|
|
634
|
+
const candidate = (0, import_errors2.errorProperty)(error, "statusCode") ?? (0, import_errors2.errorProperty)(error, "status");
|
|
635
|
+
const httpStatus = typeof candidate === "number" && Number.isInteger(candidate) && candidate >= 100 && candidate <= 599 ? candidate : void 0;
|
|
515
636
|
return {
|
|
637
|
+
...exception ? { exception } : {},
|
|
638
|
+
...httpStatus ? { details: { httpStatus } } : {},
|
|
516
639
|
phase,
|
|
517
640
|
code: declared ? failure.code : options.code ?? "EVAL_HOOK_FAILED",
|
|
518
|
-
message: declared ? failure.message : messages[phase],
|
|
641
|
+
message: originalMessage ?? (declared ? failure.message : `${messages[phase]}${httpStatus ? ` HTTP ${httpStatus}.` : ""}`),
|
|
519
642
|
failure,
|
|
520
|
-
...typeof diagnosticId === "string" &&
|
|
643
|
+
...typeof diagnosticId === "string" && import_zod4.z.uuid().safeParse(diagnosticId).success ? { diagnosticId } : {}
|
|
521
644
|
};
|
|
522
645
|
}
|
|
523
646
|
|
|
524
647
|
// src/evals/evaluation-contracts.ts
|
|
525
|
-
var
|
|
648
|
+
var import_zod6 = require("zod");
|
|
526
649
|
|
|
527
650
|
// src/evals/studio-contracts.ts
|
|
528
651
|
var import_browser2 = require("@kortyx/prompts/browser");
|
|
529
|
-
var
|
|
530
|
-
var StudioEvalTargetsResponseSchema =
|
|
531
|
-
canRun:
|
|
652
|
+
var import_zod5 = require("zod");
|
|
653
|
+
var StudioEvalTargetsResponseSchema = import_zod5.z.object({
|
|
654
|
+
canRun: import_zod5.z.boolean(),
|
|
655
|
+
settings: EvalSettingsResponseSchema.optional(),
|
|
532
656
|
studioJudge: EvalJudgeIdentitySchema.nullable().optional(),
|
|
533
|
-
targets:
|
|
534
|
-
|
|
535
|
-
id:
|
|
536
|
-
name:
|
|
537
|
-
environment:
|
|
538
|
-
error:
|
|
657
|
+
targets: import_zod5.z.array(
|
|
658
|
+
import_zod5.z.object({
|
|
659
|
+
id: import_zod5.z.string(),
|
|
660
|
+
name: import_zod5.z.string(),
|
|
661
|
+
environment: import_zod5.z.string(),
|
|
662
|
+
error: import_zod5.z.string().nullable(),
|
|
539
663
|
// Safe discovery diagnostics; optional for compatibility with older APIs.
|
|
540
|
-
diagnostic:
|
|
541
|
-
code:
|
|
664
|
+
diagnostic: import_zod5.z.object({
|
|
665
|
+
code: import_zod5.z.enum([
|
|
542
666
|
"environment_forbidden",
|
|
543
667
|
"environment_unavailable",
|
|
544
668
|
"endpoint_not_found",
|
|
@@ -547,44 +671,47 @@ var StudioEvalTargetsResponseSchema = import_zod4.z.object({
|
|
|
547
671
|
"endpoint_unreachable",
|
|
548
672
|
"manifest_invalid"
|
|
549
673
|
]),
|
|
550
|
-
httpStatus:
|
|
674
|
+
httpStatus: import_zod5.z.number().int().min(100).max(599).optional()
|
|
551
675
|
}).nullable().optional(),
|
|
552
676
|
manifest: EvalManifestSchema.nullable(),
|
|
553
|
-
revisions:
|
|
677
|
+
revisions: import_zod5.z.record(import_zod5.z.string(), import_zod5.z.string())
|
|
554
678
|
})
|
|
555
679
|
)
|
|
556
680
|
});
|
|
557
|
-
var EvalCostAmountSchema =
|
|
558
|
-
costSummary:
|
|
559
|
-
amounts:
|
|
560
|
-
|
|
561
|
-
amount:
|
|
562
|
-
currency:
|
|
681
|
+
var EvalCostAmountSchema = import_zod5.z.object({
|
|
682
|
+
costSummary: import_zod5.z.object({
|
|
683
|
+
amounts: import_zod5.z.array(
|
|
684
|
+
import_zod5.z.object({
|
|
685
|
+
amount: import_zod5.z.number().finite().nonnegative(),
|
|
686
|
+
currency: import_zod5.z.string().nullable()
|
|
563
687
|
})
|
|
564
688
|
),
|
|
565
|
-
complete:
|
|
689
|
+
complete: import_zod5.z.boolean()
|
|
566
690
|
}).optional(),
|
|
567
|
-
amount:
|
|
568
|
-
currency:
|
|
569
|
-
status:
|
|
570
|
-
calls:
|
|
571
|
-
unpricedCalls:
|
|
572
|
-
estimated:
|
|
691
|
+
amount: import_zod5.z.number().finite().nonnegative().nullable(),
|
|
692
|
+
currency: import_zod5.z.string().nullable(),
|
|
693
|
+
status: import_zod5.z.enum(["complete", "partial", "unavailable"]),
|
|
694
|
+
calls: import_zod5.z.number().int().nonnegative(),
|
|
695
|
+
unpricedCalls: import_zod5.z.number().int().nonnegative(),
|
|
696
|
+
estimated: import_zod5.z.boolean()
|
|
573
697
|
});
|
|
574
|
-
var EvalCostsSchema =
|
|
698
|
+
var EvalCostsSchema = import_zod5.z.object({
|
|
575
699
|
workflow: EvalCostAmountSchema,
|
|
576
700
|
judge: EvalCostAmountSchema,
|
|
577
701
|
total: EvalCostAmountSchema
|
|
578
702
|
});
|
|
579
|
-
var StudioEvalRunSummarySchema =
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
703
|
+
var StudioEvalRunSummarySchema = import_zod5.z.object({
|
|
704
|
+
issue: EvalIssueSchema.nullable().optional(),
|
|
705
|
+
termination: EvalTerminationSchema.nullable().optional(),
|
|
706
|
+
resolvedSettings: ResolvedEvalSettingsSchema.optional(),
|
|
707
|
+
id: import_zod5.z.uuid(),
|
|
708
|
+
evaluationId: import_zod5.z.uuid().nullable().optional(),
|
|
709
|
+
targetId: import_zod5.z.string(),
|
|
710
|
+
targetName: import_zod5.z.string(),
|
|
711
|
+
environment: import_zod5.z.string(),
|
|
712
|
+
suiteId: import_zod5.z.string(),
|
|
713
|
+
suiteRevision: import_zod5.z.string(),
|
|
714
|
+
status: import_zod5.z.enum([
|
|
588
715
|
"queued",
|
|
589
716
|
"running",
|
|
590
717
|
"passed",
|
|
@@ -592,49 +719,52 @@ var StudioEvalRunSummarySchema = import_zod4.z.object({
|
|
|
592
719
|
"error",
|
|
593
720
|
"cancelled"
|
|
594
721
|
]),
|
|
595
|
-
createdAt:
|
|
596
|
-
startedAt:
|
|
597
|
-
endedAt:
|
|
598
|
-
error:
|
|
599
|
-
cancelRequestedAt:
|
|
722
|
+
createdAt: import_zod5.z.string(),
|
|
723
|
+
startedAt: import_zod5.z.string().nullable(),
|
|
724
|
+
endedAt: import_zod5.z.string().nullable(),
|
|
725
|
+
error: import_zod5.z.string().nullable(),
|
|
726
|
+
cancelRequestedAt: import_zod5.z.string().nullable(),
|
|
600
727
|
costs: EvalCostsSchema.optional(),
|
|
601
|
-
counts:
|
|
602
|
-
passed:
|
|
603
|
-
failed:
|
|
604
|
-
error:
|
|
605
|
-
cancelled:
|
|
728
|
+
counts: import_zod5.z.object({
|
|
729
|
+
passed: import_zod5.z.number(),
|
|
730
|
+
failed: import_zod5.z.number(),
|
|
731
|
+
error: import_zod5.z.number(),
|
|
732
|
+
cancelled: import_zod5.z.number()
|
|
606
733
|
}).nullable().optional(),
|
|
607
|
-
suiteName:
|
|
608
|
-
totalAttempts:
|
|
609
|
-
completedAttempts:
|
|
610
|
-
phase:
|
|
734
|
+
suiteName: import_zod5.z.string().nullable().optional(),
|
|
735
|
+
totalAttempts: import_zod5.z.number().int().nonnegative().optional(),
|
|
736
|
+
completedAttempts: import_zod5.z.number().int().nonnegative().optional(),
|
|
737
|
+
phase: import_zod5.z.string().optional()
|
|
611
738
|
});
|
|
612
|
-
var StudioEvalHistorySchema =
|
|
613
|
-
runs:
|
|
739
|
+
var StudioEvalHistorySchema = import_zod5.z.object({
|
|
740
|
+
runs: import_zod5.z.array(StudioEvalRunSummarySchema)
|
|
614
741
|
});
|
|
615
|
-
var StudioEvalDetailSchema =
|
|
742
|
+
var StudioEvalDetailSchema = import_zod5.z.object({
|
|
616
743
|
run: StudioEvalRunSummarySchema.extend({
|
|
617
|
-
caseCosts:
|
|
618
|
-
request:
|
|
619
|
-
caseIds:
|
|
620
|
-
grading:
|
|
744
|
+
caseCosts: import_zod5.z.record(import_zod5.z.string(), EvalCostsSchema).optional(),
|
|
745
|
+
request: import_zod5.z.object({
|
|
746
|
+
caseIds: import_zod5.z.array(import_zod5.z.string()).optional(),
|
|
747
|
+
grading: import_zod5.z.enum(["app", "studio"]).optional(),
|
|
621
748
|
judge: EvalJudgeIdentitySchema.optional(),
|
|
622
|
-
repetitions:
|
|
623
|
-
concurrency:
|
|
749
|
+
repetitions: import_zod5.z.number().int().positive(),
|
|
750
|
+
concurrency: import_zod5.z.number().optional(),
|
|
751
|
+
caseTimeoutMs: import_zod5.z.number().optional(),
|
|
752
|
+
runTimeoutMs: import_zod5.z.number().optional(),
|
|
753
|
+
resolvedSettings: ResolvedEvalSettingsSchema.optional(),
|
|
624
754
|
promptSnapshot: import_browser2.PromptSnapshotSchema.optional(),
|
|
625
|
-
promptGroupName:
|
|
755
|
+
promptGroupName: import_zod5.z.string().optional()
|
|
626
756
|
}).optional(),
|
|
627
757
|
suite: EvalSuiteSchema,
|
|
628
758
|
result: EvalRunResultSchema.nullable(),
|
|
629
|
-
events:
|
|
759
|
+
events: import_zod5.z.array(import_zod5.z.object({ id: import_zod5.z.number(), event: EvalProgressSchema }))
|
|
630
760
|
})
|
|
631
761
|
});
|
|
632
762
|
|
|
633
763
|
// src/evals/evaluation-contracts.ts
|
|
634
|
-
var EvaluationMetadataSchema =
|
|
635
|
-
source:
|
|
636
|
-
commit:
|
|
637
|
-
deploymentUrl:
|
|
764
|
+
var EvaluationMetadataSchema = import_zod6.z.object({
|
|
765
|
+
source: import_zod6.z.enum(["manual", "deployment", "schedule", "ci"]).default("manual"),
|
|
766
|
+
commit: import_zod6.z.string().trim().min(1).max(100).optional(),
|
|
767
|
+
deploymentUrl: import_zod6.z.url().refine((value) => {
|
|
638
768
|
try {
|
|
639
769
|
const url = new URL(value);
|
|
640
770
|
return ["https:", "http:"].includes(url.protocol) && !url.username && !url.password;
|
|
@@ -643,62 +773,79 @@ var EvaluationMetadataSchema = import_zod5.z.object({
|
|
|
643
773
|
}
|
|
644
774
|
}, "Expected an HTTP(S) URL without credentials").optional()
|
|
645
775
|
}).strict();
|
|
646
|
-
var StudioEvaluationStartRequestSchema =
|
|
647
|
-
targetId:
|
|
648
|
-
name:
|
|
776
|
+
var StudioEvaluationStartRequestSchema = import_zod6.z.object({
|
|
777
|
+
targetId: import_zod6.z.string().trim().min(1),
|
|
778
|
+
name: import_zod6.z.string().trim().min(1).max(200).optional(),
|
|
649
779
|
promptSelection: StudioEvalStartRequestSchema.shape.promptSelection,
|
|
650
|
-
selection:
|
|
651
|
-
suites:
|
|
652
|
-
|
|
653
|
-
suiteId:
|
|
654
|
-
suiteRevision:
|
|
655
|
-
caseIds:
|
|
780
|
+
selection: import_zod6.z.enum(["all", "selected"]),
|
|
781
|
+
suites: import_zod6.z.array(
|
|
782
|
+
import_zod6.z.object({
|
|
783
|
+
suiteId: import_zod6.z.string().min(1),
|
|
784
|
+
suiteRevision: import_zod6.z.string().regex(/^[a-f0-9]{64}$/),
|
|
785
|
+
caseIds: import_zod6.z.array(import_zod6.z.string().min(1)).min(1).max(100).optional()
|
|
656
786
|
}).strict()
|
|
657
787
|
).min(1).max(100),
|
|
658
|
-
|
|
659
|
-
repetitions: import_zod5.z.number().int().min(1).max(20).default(1),
|
|
660
|
-
concurrency: import_zod5.z.number().int().min(1).max(20).default(1),
|
|
788
|
+
...EvalSettingsSchema.shape,
|
|
661
789
|
metadata: EvaluationMetadataSchema.default({ source: "manual" }),
|
|
662
|
-
idempotencyKey:
|
|
790
|
+
idempotencyKey: import_zod6.z.string().trim().min(1).max(200).optional()
|
|
663
791
|
}).strict();
|
|
664
|
-
var StudioEvaluationSummarySchema =
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
792
|
+
var StudioEvaluationSummarySchema = import_zod6.z.object({
|
|
793
|
+
termination: EvalTerminationSchema.nullable().optional(),
|
|
794
|
+
resolvedSettings: ResolvedEvalSettingsSchema.optional(),
|
|
795
|
+
interruptedSuites: import_zod6.z.number().int().nonnegative().optional(),
|
|
796
|
+
failures: import_zod6.z.array(
|
|
797
|
+
import_zod6.z.object({
|
|
798
|
+
suiteRunId: import_zod6.z.uuid(),
|
|
799
|
+
caseId: import_zod6.z.string().optional(),
|
|
800
|
+
repetition: import_zod6.z.number().int().positive().optional(),
|
|
801
|
+
phase: import_zod6.z.string(),
|
|
802
|
+
code: import_zod6.z.string(),
|
|
803
|
+
message: import_zod6.z.string(),
|
|
804
|
+
diagnosticId: import_zod6.z.string().uuid().optional()
|
|
805
|
+
})
|
|
806
|
+
).optional(),
|
|
807
|
+
pendingAttempts: import_zod6.z.object({
|
|
808
|
+
notStarted: import_zod6.z.number().int().nonnegative(),
|
|
809
|
+
executing: import_zod6.z.number().int().nonnegative(),
|
|
810
|
+
awaitingGrading: import_zod6.z.number().int().nonnegative()
|
|
811
|
+
}).optional(),
|
|
812
|
+
id: import_zod6.z.uuid(),
|
|
813
|
+
name: import_zod6.z.string(),
|
|
814
|
+
targetId: import_zod6.z.string(),
|
|
815
|
+
targetName: import_zod6.z.string(),
|
|
816
|
+
environment: import_zod6.z.string(),
|
|
817
|
+
selection: import_zod6.z.enum(["all", "selected"]),
|
|
671
818
|
metadata: EvaluationMetadataSchema,
|
|
672
819
|
judge: EvalJudgeIdentitySchema.optional(),
|
|
673
820
|
status: StudioEvalRunSummarySchema.shape.status,
|
|
674
|
-
createdAt:
|
|
675
|
-
startedAt:
|
|
676
|
-
endedAt:
|
|
677
|
-
cancelRequestedAt:
|
|
678
|
-
suiteCount:
|
|
679
|
-
completedSuites:
|
|
680
|
-
totalAttempts:
|
|
681
|
-
completedAttempts:
|
|
682
|
-
counts:
|
|
683
|
-
passed:
|
|
684
|
-
failed:
|
|
685
|
-
error:
|
|
686
|
-
cancelled:
|
|
821
|
+
createdAt: import_zod6.z.string(),
|
|
822
|
+
startedAt: import_zod6.z.string().nullable(),
|
|
823
|
+
endedAt: import_zod6.z.string().nullable(),
|
|
824
|
+
cancelRequestedAt: import_zod6.z.string().nullable(),
|
|
825
|
+
suiteCount: import_zod6.z.number().int().nonnegative(),
|
|
826
|
+
completedSuites: import_zod6.z.number().int().nonnegative(),
|
|
827
|
+
totalAttempts: import_zod6.z.number().int().nonnegative(),
|
|
828
|
+
completedAttempts: import_zod6.z.number().int().nonnegative(),
|
|
829
|
+
counts: import_zod6.z.object({
|
|
830
|
+
passed: import_zod6.z.number(),
|
|
831
|
+
failed: import_zod6.z.number(),
|
|
832
|
+
error: import_zod6.z.number(),
|
|
833
|
+
cancelled: import_zod6.z.number()
|
|
687
834
|
}),
|
|
688
835
|
costs: EvalCostsSchema.optional(),
|
|
689
|
-
legacy:
|
|
836
|
+
legacy: import_zod6.z.boolean().optional()
|
|
690
837
|
});
|
|
691
|
-
var StudioEvaluationHistorySchema =
|
|
692
|
-
runs:
|
|
838
|
+
var StudioEvaluationHistorySchema = import_zod6.z.object({
|
|
839
|
+
runs: import_zod6.z.array(StudioEvaluationSummarySchema)
|
|
693
840
|
});
|
|
694
|
-
var StudioEvaluationDetailSchema =
|
|
841
|
+
var StudioEvaluationDetailSchema = import_zod6.z.object({
|
|
695
842
|
run: StudioEvaluationSummarySchema.extend({
|
|
696
|
-
suites:
|
|
843
|
+
suites: import_zod6.z.array(StudioEvalRunSummarySchema)
|
|
697
844
|
})
|
|
698
845
|
});
|
|
699
|
-
var StudioEvaluationResultsSchema =
|
|
846
|
+
var StudioEvaluationResultsSchema = import_zod6.z.object({
|
|
700
847
|
run: StudioEvaluationSummarySchema.extend({
|
|
701
|
-
suites:
|
|
848
|
+
suites: import_zod6.z.array(StudioEvalDetailSchema.shape.run)
|
|
702
849
|
})
|
|
703
850
|
});
|
|
704
851
|
|
|
@@ -795,11 +942,12 @@ function getEvalGradeEvidence(step, previous) {
|
|
|
795
942
|
}
|
|
796
943
|
|
|
797
944
|
// src/evals/studio-judge.ts
|
|
945
|
+
var import_telemetry_contracts3 = require("@kortyx/telemetry-contracts");
|
|
798
946
|
async function readJson(response, signal) {
|
|
799
|
-
if (!response.
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
947
|
+
if (!response.body) {
|
|
948
|
+
throw new Error(
|
|
949
|
+
`Studio judge returned HTTP ${response.status} with no response body.`
|
|
950
|
+
);
|
|
803
951
|
}
|
|
804
952
|
const reader = response.body.getReader();
|
|
805
953
|
const abort = () => {
|
|
@@ -821,7 +969,18 @@ async function readJson(response, signal) {
|
|
|
821
969
|
text += decoder.decode(part.value, { stream: true });
|
|
822
970
|
}
|
|
823
971
|
signal.throwIfAborted();
|
|
824
|
-
|
|
972
|
+
text += decoder.decode();
|
|
973
|
+
if (!response.ok)
|
|
974
|
+
throw Object.assign(
|
|
975
|
+
new Error(
|
|
976
|
+
`Studio judge returned HTTP ${response.status}: ${(0, import_telemetry_contracts3.redactDiagnosticText)(text)}`
|
|
977
|
+
),
|
|
978
|
+
{
|
|
979
|
+
statusCode: response.status,
|
|
980
|
+
responseBody: (0, import_telemetry_contracts3.redactDiagnosticText)(text)
|
|
981
|
+
}
|
|
982
|
+
);
|
|
983
|
+
return JSON.parse(text);
|
|
825
984
|
} finally {
|
|
826
985
|
signal.removeEventListener("abort", abort);
|
|
827
986
|
await reader.cancel().catch(() => {
|
|
@@ -907,6 +1066,7 @@ async function createStudioEvalJudge(options) {
|
|
|
907
1066
|
EvalCostAmountSchema,
|
|
908
1067
|
EvalCostsSchema,
|
|
909
1068
|
EvalEvidencePolicySchema,
|
|
1069
|
+
EvalExecutionSettingsSchema,
|
|
910
1070
|
EvalIssueSchema,
|
|
911
1071
|
EvalJudgeIdentitySchema,
|
|
912
1072
|
EvalJudgeUsageSchema,
|
|
@@ -916,11 +1076,15 @@ async function createStudioEvalJudge(options) {
|
|
|
916
1076
|
EvalRemoteRunRequestSchema,
|
|
917
1077
|
EvalResumeResponseSchema,
|
|
918
1078
|
EvalRunResultSchema,
|
|
1079
|
+
EvalSettingsResponseSchema,
|
|
1080
|
+
EvalSettingsSchema,
|
|
919
1081
|
EvalStepResultSchema,
|
|
920
1082
|
EvalSuiteSchema,
|
|
1083
|
+
EvalTerminationSchema,
|
|
921
1084
|
EvalVerdictSchema,
|
|
922
1085
|
EvalWireEventSchema,
|
|
923
1086
|
EvaluationMetadataSchema,
|
|
1087
|
+
ResolvedEvalSettingsSchema,
|
|
924
1088
|
StudioEvalDetailSchema,
|
|
925
1089
|
StudioEvalHistorySchema,
|
|
926
1090
|
StudioEvalJudgeRequestSchema,
|
|
@@ -937,6 +1101,7 @@ async function createStudioEvalJudge(options) {
|
|
|
937
1101
|
createStudioEvalJudge,
|
|
938
1102
|
defineSuite,
|
|
939
1103
|
getEvalGradeEvidence,
|
|
940
|
-
parseEvalSuite
|
|
1104
|
+
parseEvalSuite,
|
|
1105
|
+
resolveEvalSettings
|
|
941
1106
|
});
|
|
942
1107
|
//# sourceMappingURL=evals.js.map
|