veryfront 0.1.949 → 0.1.951
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/esm/cli/commands/eval/command-help.d.ts.map +1 -1
- package/esm/cli/commands/eval/command-help.js +9 -0
- package/esm/cli/commands/eval/command.d.ts +8 -1
- package/esm/cli/commands/eval/command.d.ts.map +1 -1
- package/esm/cli/commands/eval/command.js +160 -2
- package/esm/cli/commands/eval/handler.d.ts +4 -0
- package/esm/cli/commands/eval/handler.d.ts.map +1 -1
- package/esm/cli/commands/eval/handler.js +4 -0
- package/esm/cli/shared/args.js +1 -1
- package/esm/deno.js +1 -1
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +5 -8
- package/esm/src/agent/runtime/model-capabilities.d.ts +2 -0
- package/esm/src/agent/runtime/model-capabilities.d.ts.map +1 -1
- package/esm/src/agent/runtime/model-capabilities.js +53 -0
- package/esm/src/eval/index.d.ts +3 -1
- package/esm/src/eval/index.d.ts.map +1 -1
- package/esm/src/eval/index.js +2 -0
- package/esm/src/eval/model-comparison.d.ts +6 -0
- package/esm/src/eval/model-comparison.d.ts.map +1 -0
- package/esm/src/eval/model-comparison.js +211 -0
- package/esm/src/eval/provenance.d.ts +28 -0
- package/esm/src/eval/provenance.d.ts.map +1 -0
- package/esm/src/eval/provenance.js +199 -0
- package/esm/src/eval/report.d.ts +2 -1
- package/esm/src/eval/report.d.ts.map +1 -1
- package/esm/src/eval/report.js +1 -0
- package/esm/src/eval/runner.d.ts.map +1 -1
- package/esm/src/eval/runner.js +1 -0
- package/esm/src/eval/types.d.ts +84 -0
- package/esm/src/eval/types.d.ts.map +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,WAsEtB,CAAC"}
|
|
@@ -40,6 +40,14 @@ export const evalHelp = {
|
|
|
40
40
|
flag: "--model <provider/model>",
|
|
41
41
|
description: "Override the target agent model",
|
|
42
42
|
},
|
|
43
|
+
{
|
|
44
|
+
flag: "--baseline-model <provider/model>",
|
|
45
|
+
description: "Baseline model for model comparison runs",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
flag: "--candidate-model <provider/model>",
|
|
49
|
+
description: "Candidate model to compare against --baseline-model; repeat for multiple candidates",
|
|
50
|
+
},
|
|
43
51
|
{
|
|
44
52
|
flag: "--max-output-tokens <count>",
|
|
45
53
|
description: "Limit target agent output tokens",
|
|
@@ -55,6 +63,7 @@ export const evalHelp = {
|
|
|
55
63
|
"veryfront eval eval:deep-research --report-dir .veryfront/evals/deep-research",
|
|
56
64
|
"veryfront eval eval:deep-research --report .veryfront/evals/deep-research/report.json --junit .veryfront/evals/deep-research/junit.xml",
|
|
57
65
|
"veryfront eval deep-research --baseline .veryfront/evals/baseline.json --json",
|
|
66
|
+
"veryfront eval deep-research --baseline-model anthropic/claude-sonnet-4-6 --candidate-model moonshotai/kimi-k2.6",
|
|
58
67
|
"veryfront eval deep-research --export braintrust,langfuse --json",
|
|
59
68
|
"veryfront eval deep-research --json",
|
|
60
69
|
],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentResponse } from "../../../src/agent/index.js";
|
|
2
2
|
import type { VeryfrontConfig } from "../../../src/config/index.js";
|
|
3
|
-
import type { DiscoveredEval, EvalReport, EvalReportComparison, EvalToolCall } from "../../../src/eval/index.js";
|
|
3
|
+
import type { DiscoveredEval, EvalModelComparison, EvalReport, EvalReportComparison, EvalToolCall } from "../../../src/eval/index.js";
|
|
4
4
|
import type { EvalArgs } from "./handler.js";
|
|
5
5
|
export interface EvalOptions extends EvalArgs {
|
|
6
6
|
}
|
|
@@ -19,6 +19,9 @@ type EvalArtifactPaths = {
|
|
|
19
19
|
summary: string;
|
|
20
20
|
results: string;
|
|
21
21
|
};
|
|
22
|
+
type EvalModelArtifactPaths = EvalArtifactPaths & {
|
|
23
|
+
junit: string;
|
|
24
|
+
};
|
|
22
25
|
type EvalSummaryArtifact = {
|
|
23
26
|
kind: "eval-summary";
|
|
24
27
|
runId: string;
|
|
@@ -28,16 +31,20 @@ type EvalSummaryArtifact = {
|
|
|
28
31
|
startedAt: string;
|
|
29
32
|
endedAt: string;
|
|
30
33
|
summary: EvalReport["summary"];
|
|
34
|
+
metadata?: EvalReport["metadata"];
|
|
31
35
|
exports?: EvalReport["exports"];
|
|
32
36
|
baseline?: EvalReportComparison;
|
|
33
37
|
};
|
|
34
38
|
export declare function createDefaultEvalReportDir(runId: string): string;
|
|
35
39
|
export declare function createEvalArtifactPaths(reportDir: string): EvalArtifactPaths;
|
|
40
|
+
export declare function createEvalModelArtifactPaths(reportDir: string, model: string): EvalModelArtifactPaths;
|
|
36
41
|
export declare function normalizeEvalCliId(id: string): string;
|
|
37
42
|
export declare function findEvalForCliId(evals: DiscoveredEval[], id: string): DiscoveredEval | undefined;
|
|
38
43
|
export declare function normalizeEvalInputForAgent(input: unknown): string;
|
|
39
44
|
export declare function summarizeReportForCli(report: EvalReport): CliEvalSummary;
|
|
40
45
|
export declare function createSummaryArtifact(report: EvalReport, baseline?: EvalReportComparison): EvalSummaryArtifact;
|
|
46
|
+
export declare function createEvalModelComparisonArtifact(reports: EvalReport[], baselineModel: string): EvalModelComparison;
|
|
47
|
+
export declare function createEvalModelComparisonExitCode(reports: EvalReport[]): 0 | 1;
|
|
41
48
|
export declare function createResultsJsonl(report: EvalReport): string;
|
|
42
49
|
export declare function createJunitXml(report: EvalReport): string;
|
|
43
50
|
export declare function writeEvalArtifacts(report: EvalReport, paths: EvalArtifactPaths, baseline?: EvalReportComparison): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EACV,cAAc,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
5
5
|
import { dirname, join, relative } from "../../../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
6
6
|
import { createProjectDiscoveryConfig, discoverAll } from "../../../src/discovery/index.js";
|
|
7
|
-
import { compareEvalReports, discoverEvals, runEval } from "../../../src/eval/index.js";
|
|
7
|
+
import { compareEvalModelReports, compareEvalReports, createEvalModelComparisonMarkdown, discoverEvals, resolveEvalRunProvenance, runEval, } from "../../../src/eval/index.js";
|
|
8
8
|
import { applyRuntimeAuthContext } from "../../shared/runtime-auth.js";
|
|
9
|
-
import { cliLogger, exitProcess } from "../../utils/index.js";
|
|
9
|
+
import { cliLogger, exitProcess, VERSION } from "../../utils/index.js";
|
|
10
10
|
import { createErrorEnvelope, createSuccessEnvelope, isJsonMode, outputJson, } from "../../shared/json-output.js";
|
|
11
11
|
import { withProjectSourceContext } from "../../shared/project-source-context.js";
|
|
12
12
|
function xmlEscape(value) {
|
|
@@ -35,6 +35,26 @@ export function createEvalArtifactPaths(reportDir) {
|
|
|
35
35
|
results: join(reportDir, "results.jsonl"),
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
+
function sanitizeModelIdForPath(model) {
|
|
39
|
+
return model.trim().replace(/[^A-Za-z0-9._-]+/g, "__").replace(/^_+|_+$/g, "") || "model";
|
|
40
|
+
}
|
|
41
|
+
export function createEvalModelArtifactPaths(reportDir, model) {
|
|
42
|
+
const directory = join(reportDir, "models", sanitizeModelIdForPath(model));
|
|
43
|
+
return {
|
|
44
|
+
directory,
|
|
45
|
+
summary: join(directory, "summary.json"),
|
|
46
|
+
results: join(directory, "results.jsonl"),
|
|
47
|
+
junit: join(directory, "junit.xml"),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function createEvalModelComparisonArtifactPaths(reportDir, models) {
|
|
51
|
+
return {
|
|
52
|
+
directory: reportDir,
|
|
53
|
+
comparisonJson: join(reportDir, "comparison.json"),
|
|
54
|
+
comparisonMarkdown: join(reportDir, "comparison.md"),
|
|
55
|
+
models: Object.fromEntries(models.map((model) => [model, createEvalModelArtifactPaths(reportDir, model)])),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
38
58
|
function displaySourcePath(filePath, projectDir) {
|
|
39
59
|
const normalized = stripFileProtocol(filePath);
|
|
40
60
|
if (normalized.startsWith(projectDir)) {
|
|
@@ -110,10 +130,17 @@ export function createSummaryArtifact(report, baseline) {
|
|
|
110
130
|
startedAt: report.startedAt,
|
|
111
131
|
endedAt: report.endedAt,
|
|
112
132
|
summary: report.summary,
|
|
133
|
+
...(report.metadata ? { metadata: report.metadata } : {}),
|
|
113
134
|
...(report.exports ? { exports: report.exports } : {}),
|
|
114
135
|
...(baseline ? { baseline } : {}),
|
|
115
136
|
};
|
|
116
137
|
}
|
|
138
|
+
export function createEvalModelComparisonArtifact(reports, baselineModel) {
|
|
139
|
+
return compareEvalModelReports(reports, { baselineModel });
|
|
140
|
+
}
|
|
141
|
+
export function createEvalModelComparisonExitCode(reports) {
|
|
142
|
+
return reports.some((report) => report.summary.failed > 0) ? 1 : 0;
|
|
143
|
+
}
|
|
117
144
|
export function createResultsJsonl(report) {
|
|
118
145
|
if (report.records.length === 0)
|
|
119
146
|
return "";
|
|
@@ -266,6 +293,98 @@ function createEvalCliExportConfig(evalItem, options, projectDir, artifactPaths)
|
|
|
266
293
|
},
|
|
267
294
|
};
|
|
268
295
|
}
|
|
296
|
+
function uniqueValues(values) {
|
|
297
|
+
return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
|
|
298
|
+
}
|
|
299
|
+
function resolveEvalModelComparisonConfig(options) {
|
|
300
|
+
const candidateModels = uniqueValues(options.candidateModels);
|
|
301
|
+
const baselineModel = options.baselineModel?.trim();
|
|
302
|
+
if (!baselineModel && candidateModels.length === 0)
|
|
303
|
+
return undefined;
|
|
304
|
+
if (!baselineModel) {
|
|
305
|
+
throw new Error("--baseline-model is required when using --candidate-model.");
|
|
306
|
+
}
|
|
307
|
+
if (candidateModels.length === 0) {
|
|
308
|
+
throw new Error("--candidate-model is required when using --baseline-model.");
|
|
309
|
+
}
|
|
310
|
+
if (options.model) {
|
|
311
|
+
throw new Error("--model is for single eval runs. Use --baseline-model with --candidate-model for comparisons.");
|
|
312
|
+
}
|
|
313
|
+
if (options.baseline || options.writeBaseline) {
|
|
314
|
+
throw new Error("--baseline and --write-baseline are for saved single-run reports, not model comparisons.");
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
baselineModel,
|
|
318
|
+
candidateModels: candidateModels.filter((model) => model !== baselineModel),
|
|
319
|
+
models: uniqueValues([baselineModel, ...candidateModels]),
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
function createAgentAdapterForModel(agent, options, model) {
|
|
323
|
+
return createAgentAdapter(agent, { ...options, model });
|
|
324
|
+
}
|
|
325
|
+
async function writeEvalModelComparisonArtifacts(comparison, paths) {
|
|
326
|
+
await dntShim.Deno.mkdir(paths.directory, { recursive: true });
|
|
327
|
+
await dntShim.Deno.writeTextFile(paths.comparisonJson, JSON.stringify(comparison, null, 2));
|
|
328
|
+
await dntShim.Deno.writeTextFile(paths.comparisonMarkdown, createEvalModelComparisonMarkdown(comparison));
|
|
329
|
+
}
|
|
330
|
+
async function runEvalModelComparison(input) {
|
|
331
|
+
const runId = createCliRunId();
|
|
332
|
+
const reportDir = input.options.reportDir ?? createDefaultEvalReportDir(runId);
|
|
333
|
+
const paths = createEvalModelComparisonArtifactPaths(reportDir, input.config.models);
|
|
334
|
+
const provenance = await resolveEvalRunProvenance({
|
|
335
|
+
projectDir: input.projectDir,
|
|
336
|
+
frameworkVersion: VERSION,
|
|
337
|
+
});
|
|
338
|
+
const reports = [];
|
|
339
|
+
for (const model of input.config.models) {
|
|
340
|
+
const modelPaths = paths.models[model];
|
|
341
|
+
const modelOptions = { ...input.options, model, report: undefined };
|
|
342
|
+
const report = await runEval(input.evalItem.definition, {
|
|
343
|
+
baseDir: input.options.datasetBase ?? input.projectDir,
|
|
344
|
+
runId: `${runId}_${sanitizeModelIdForPath(model)}`,
|
|
345
|
+
adapters: {
|
|
346
|
+
agent: createAgentAdapterForModel(input.agent, input.options, model),
|
|
347
|
+
},
|
|
348
|
+
metadata: {
|
|
349
|
+
model,
|
|
350
|
+
provenance,
|
|
351
|
+
},
|
|
352
|
+
export: createEvalCliExportConfig(input.evalItem, modelOptions, input.projectDir, modelPaths),
|
|
353
|
+
});
|
|
354
|
+
reports.push(report);
|
|
355
|
+
await writeEvalArtifacts(report, modelPaths);
|
|
356
|
+
await writeTextFileEnsuringDir(modelPaths.junit, createJunitXml(report));
|
|
357
|
+
}
|
|
358
|
+
const comparison = createEvalModelComparisonArtifact(reports, input.config.baselineModel);
|
|
359
|
+
await writeEvalModelComparisonArtifacts(comparison, paths);
|
|
360
|
+
if (input.options.report) {
|
|
361
|
+
await writeTextFileEnsuringDir(input.options.report, JSON.stringify(comparison, null, 2));
|
|
362
|
+
}
|
|
363
|
+
if (isJsonMode()) {
|
|
364
|
+
await outputJson(createSuccessEnvelope("eval", {
|
|
365
|
+
reports,
|
|
366
|
+
comparison,
|
|
367
|
+
artifacts: paths,
|
|
368
|
+
}));
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
for (const report of reports) {
|
|
372
|
+
const model = report.metadata?.model ?? report.runId;
|
|
373
|
+
cliLogger.info(`Model: ${model}`);
|
|
374
|
+
printReport(report);
|
|
375
|
+
}
|
|
376
|
+
cliLogger.info(`Recommendation: ${comparison.recommendation.decision}${comparison.recommendation.model ? ` (${comparison.recommendation.model})` : ""}`);
|
|
377
|
+
for (const reason of comparison.recommendation.reasons) {
|
|
378
|
+
cliLogger.info(` - ${reason}`);
|
|
379
|
+
}
|
|
380
|
+
cliLogger.info(`Report directory: ${paths.directory}`);
|
|
381
|
+
cliLogger.info(`Comparison: ${paths.comparisonJson}`);
|
|
382
|
+
cliLogger.info(`Comparison markdown: ${paths.comparisonMarkdown}`);
|
|
383
|
+
if (input.options.report)
|
|
384
|
+
cliLogger.info(`Report: ${input.options.report}`);
|
|
385
|
+
}
|
|
386
|
+
exitProcess(createEvalModelComparisonExitCode(reports));
|
|
387
|
+
}
|
|
269
388
|
async function outputEvalNotFound(id, evals) {
|
|
270
389
|
if (isJsonMode()) {
|
|
271
390
|
await outputJson(createErrorEnvelope("eval", {
|
|
@@ -301,6 +420,19 @@ async function outputAgentNotFound(agentId) {
|
|
|
301
420
|
}
|
|
302
421
|
exitProcess(1);
|
|
303
422
|
}
|
|
423
|
+
async function outputEvalUsageError(message) {
|
|
424
|
+
if (isJsonMode()) {
|
|
425
|
+
await outputJson(createErrorEnvelope("eval", {
|
|
426
|
+
code: "USAGE_ERROR",
|
|
427
|
+
slug: "eval-usage-error",
|
|
428
|
+
message,
|
|
429
|
+
}));
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
cliLogger.error(message);
|
|
433
|
+
}
|
|
434
|
+
exitProcess(2);
|
|
435
|
+
}
|
|
304
436
|
export async function evalCommand(options) {
|
|
305
437
|
const projectDir = dntShim.Deno.cwd();
|
|
306
438
|
await withProjectSourceContext(projectDir, async ({ adapter, config }) => {
|
|
@@ -360,14 +492,40 @@ export async function evalCommand(options) {
|
|
|
360
492
|
await outputAgentNotFound(agentId);
|
|
361
493
|
return;
|
|
362
494
|
}
|
|
495
|
+
let modelComparisonConfig;
|
|
496
|
+
try {
|
|
497
|
+
modelComparisonConfig = resolveEvalModelComparisonConfig(options);
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
await outputEvalUsageError(error instanceof Error ? error.message : String(error));
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
if (modelComparisonConfig) {
|
|
504
|
+
await runEvalModelComparison({
|
|
505
|
+
evalItem,
|
|
506
|
+
agent,
|
|
507
|
+
options,
|
|
508
|
+
projectDir,
|
|
509
|
+
config: modelComparisonConfig,
|
|
510
|
+
});
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
363
513
|
const runId = createCliRunId();
|
|
364
514
|
const artifactPaths = createEvalArtifactPaths(options.reportDir ?? createDefaultEvalReportDir(runId));
|
|
515
|
+
const provenance = await resolveEvalRunProvenance({
|
|
516
|
+
projectDir,
|
|
517
|
+
frameworkVersion: VERSION,
|
|
518
|
+
});
|
|
365
519
|
const report = await runEval(evalItem.definition, {
|
|
366
520
|
baseDir: options.datasetBase ?? projectDir,
|
|
367
521
|
runId,
|
|
368
522
|
adapters: {
|
|
369
523
|
agent: createAgentAdapter(agent, options),
|
|
370
524
|
},
|
|
525
|
+
metadata: {
|
|
526
|
+
provenance,
|
|
527
|
+
...(options.model ? { model: options.model } : {}),
|
|
528
|
+
},
|
|
371
529
|
export: createEvalCliExportConfig(evalItem, options, projectDir, artifactPaths),
|
|
372
530
|
});
|
|
373
531
|
const baseline = options.baseline
|
|
@@ -12,6 +12,8 @@ declare const getEvalArgsSchema: () => import("../../../src/internal-agents/sche
|
|
|
12
12
|
exporters: import("../../../src/internal-agents/schema.js").Schema<string[]>;
|
|
13
13
|
debug: import("../../../src/internal-agents/schema.js").Schema<boolean>;
|
|
14
14
|
model: import("../../../src/internal-agents/schema.js").Schema<string | undefined>;
|
|
15
|
+
baselineModel: import("../../../src/internal-agents/schema.js").Schema<string | undefined>;
|
|
16
|
+
candidateModels: import("../../../src/internal-agents/schema.js").Schema<string[]>;
|
|
15
17
|
maxOutputTokens: import("../../../src/internal-agents/schema.js").Schema<number | undefined>;
|
|
16
18
|
}>>;
|
|
17
19
|
export type EvalArgs = InferSchema<ReturnType<typeof getEvalArgsSchema>>;
|
|
@@ -27,6 +29,8 @@ export declare const parseEvalArgs: (args: ParsedArgs) => import("../../shared/a
|
|
|
27
29
|
exporters: import("../../../src/internal-agents/schema.js").Schema<string[]>;
|
|
28
30
|
debug: import("../../../src/internal-agents/schema.js").Schema<boolean>;
|
|
29
31
|
model: import("../../../src/internal-agents/schema.js").Schema<string | undefined>;
|
|
32
|
+
baselineModel: import("../../../src/internal-agents/schema.js").Schema<string | undefined>;
|
|
33
|
+
candidateModels: import("../../../src/internal-agents/schema.js").Schema<string[]>;
|
|
30
34
|
maxOutputTokens: import("../../../src/internal-agents/schema.js").Schema<number | undefined>;
|
|
31
35
|
}>>;
|
|
32
36
|
export declare function handleEvalCommand(args: ParsedArgs): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAA,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/eval/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;GAiBtB,CAAC;AAIF,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAEzE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;GAexB,CAAC;AAEH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE"}
|
|
@@ -12,6 +12,8 @@ const getEvalArgsSchema = defineSchema((v) => v.object({
|
|
|
12
12
|
exporters: v.array(v.string()).default([]),
|
|
13
13
|
debug: v.boolean().default(false),
|
|
14
14
|
model: v.string().optional(),
|
|
15
|
+
baselineModel: v.string().optional(),
|
|
16
|
+
candidateModels: v.array(v.string()).default([]),
|
|
15
17
|
maxOutputTokens: v.number().int().positive().optional(),
|
|
16
18
|
}));
|
|
17
19
|
const EvalArgsSchema = lazySchema(getEvalArgsSchema);
|
|
@@ -27,6 +29,8 @@ export const parseEvalArgs = createArgParser(EvalArgsSchema, {
|
|
|
27
29
|
exporters: { keys: ["export"], type: "array" },
|
|
28
30
|
debug: { keys: ["debug"], type: "boolean" },
|
|
29
31
|
model: { keys: ["model"], type: "string" },
|
|
32
|
+
baselineModel: { keys: ["baseline-model"], type: "string" },
|
|
33
|
+
candidateModels: { keys: ["candidate-model", "candidate-models"], type: "array" },
|
|
30
34
|
maxOutputTokens: { keys: ["max-output-tokens"], type: "number" },
|
|
31
35
|
});
|
|
32
36
|
export async function handleEvalCommand(args) {
|
package/esm/cli/shared/args.js
CHANGED
|
@@ -119,7 +119,7 @@ export const CommonArgs = {
|
|
|
119
119
|
// ── Raw CLI argument parsing ────────────────────────────────────────────
|
|
120
120
|
// Low-level parser that converts process argv into a ParsedArgs object.
|
|
121
121
|
// Used once in cli/main.ts before routing to individual command handlers.
|
|
122
|
-
const ARRAY_FLAGS = new Set(["with"]);
|
|
122
|
+
const ARRAY_FLAGS = new Set(["with", "candidate-model"]);
|
|
123
123
|
function maybeNumber(val) {
|
|
124
124
|
if (typeof val === "string" && /^\d+$/.test(val))
|
|
125
125
|
return parseInt(val, 10);
|
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ import { executeConfiguredTool, getAvailableTools, isDynamicTool } from "./tool-
|
|
|
47
47
|
import { accumulateUsage, getMaxSteps, normalizeInput } from "./input-utils.js";
|
|
48
48
|
import { resolveRuntimeModel } from "./model-resolution.js";
|
|
49
49
|
import { stringifyToolError, throwIfAborted } from "./error-utils.js";
|
|
50
|
-
import {
|
|
50
|
+
import { resolveTemperatureParameter } from "./model-capabilities.js";
|
|
51
51
|
import { applySkillDelegationOverridesToToolInput, extractSkillDelegationOverrides, } from "./skill-delegation-overrides.js";
|
|
52
52
|
import { resolveAgentModelTransport } from "./model-transport.js";
|
|
53
53
|
const logger = serverLogger.component("agent");
|
|
@@ -360,7 +360,7 @@ export class AgentRuntime {
|
|
|
360
360
|
currentRuntimeContext = preparedStep.runtimeContext;
|
|
361
361
|
const toolContext = preparedStep.toolContext;
|
|
362
362
|
const tools = preparedStep.tools;
|
|
363
|
-
const temperature = this.resolveTemperature(temperatureModelString ?? effectiveModel);
|
|
363
|
+
const temperature = this.resolveTemperature(temperatureModelString ?? effectiveModel, providerOptions);
|
|
364
364
|
const response = await withSpan("agent.generate_text", async (span) => {
|
|
365
365
|
setSpanAttributes(span, {
|
|
366
366
|
"model.id": effectiveModel,
|
|
@@ -620,7 +620,7 @@ export class AgentRuntime {
|
|
|
620
620
|
providerTools: stepProviderTools,
|
|
621
621
|
});
|
|
622
622
|
const runtimeToolNames = Object.keys(runtimeTools ?? {});
|
|
623
|
-
const temperature = this.resolveTemperature(temperatureModelString ?? effectiveModel);
|
|
623
|
+
const temperature = this.resolveTemperature(temperatureModelString ?? effectiveModel, providerOptions);
|
|
624
624
|
const result = streamText({
|
|
625
625
|
model: languageModel,
|
|
626
626
|
system: currentSystemPrompt,
|
|
@@ -955,11 +955,8 @@ export class AgentRuntime {
|
|
|
955
955
|
const edgeMaxSteps = this.config.edge?.enabled ? this.config.edge.maxSteps : undefined;
|
|
956
956
|
return getMaxSteps(this.config.maxSteps, edgeMaxSteps, platformLimit);
|
|
957
957
|
}
|
|
958
|
-
resolveTemperature(modelString) {
|
|
959
|
-
|
|
960
|
-
return undefined;
|
|
961
|
-
}
|
|
962
|
-
return this.config.temperature ?? DEFAULT_TEMPERATURE;
|
|
958
|
+
resolveTemperature(modelString, providerOptions) {
|
|
959
|
+
return resolveTemperatureParameter(modelString, this.config.temperature, DEFAULT_TEMPERATURE, providerOptions);
|
|
963
960
|
}
|
|
964
961
|
resolveMaxOutputTokens(modelString, maxOutputTokensOverride) {
|
|
965
962
|
if (typeof maxOutputTokensOverride === "number" &&
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export declare function normalizeModelCapabilityId(modelString?: string): string | undefined;
|
|
2
2
|
export declare function supportsTemperatureParameter(modelString?: string): boolean;
|
|
3
|
+
export declare function getFixedTemperatureParameter(modelString?: string, providerOptions?: Record<string, unknown>): number | undefined;
|
|
4
|
+
export declare function resolveTemperatureParameter(modelString: string | undefined, requestedTemperature: number | undefined, defaultTemperature: number, providerOptions?: Record<string, unknown>): number | undefined;
|
|
3
5
|
//# sourceMappingURL=model-capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/model-capabilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/model-capabilities.ts"],"names":[],"mappings":"AA6CA,wBAAgB,0BAA0B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKnF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAI1E;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,GAAG,SAAS,CASpB;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,oBAAoB,EAAE,MAAM,GAAG,SAAS,EACxC,kBAAkB,EAAE,MAAM,EAC1B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,GAAG,SAAS,CAWpB"}
|
|
@@ -3,6 +3,38 @@ const MODELS_WITHOUT_TEMPERATURE_PARAMETER = new Set([
|
|
|
3
3
|
"anthropic/claude-opus-4-7",
|
|
4
4
|
"anthropic/claude-opus-4-8",
|
|
5
5
|
]);
|
|
6
|
+
const KIMI_K2_6_MODEL_ID = "moonshotai/kimi-k2.6";
|
|
7
|
+
const KIMI_K2_6_THINKING_TEMPERATURE = 1;
|
|
8
|
+
const KIMI_K2_6_NON_THINKING_TEMPERATURE = 0.6;
|
|
9
|
+
function isRecord(value) {
|
|
10
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
11
|
+
}
|
|
12
|
+
function getRecord(record, key) {
|
|
13
|
+
const value = record[key];
|
|
14
|
+
return isRecord(value) ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
function isThinkingDisabled(options) {
|
|
17
|
+
const thinking = options ? getRecord(options, "thinking") : undefined;
|
|
18
|
+
return thinking?.type === "disabled";
|
|
19
|
+
}
|
|
20
|
+
function hasDisabledThinking(providerOptions) {
|
|
21
|
+
if (!providerOptions)
|
|
22
|
+
return false;
|
|
23
|
+
if (isThinkingDisabled(providerOptions))
|
|
24
|
+
return true;
|
|
25
|
+
for (const providerKey of ["moonshotai", "openai"]) {
|
|
26
|
+
const provider = getRecord(providerOptions, providerKey);
|
|
27
|
+
if (!provider)
|
|
28
|
+
continue;
|
|
29
|
+
if (isThinkingDisabled(provider))
|
|
30
|
+
return true;
|
|
31
|
+
for (const bodyKey of ["extraBody", "extra_body"]) {
|
|
32
|
+
if (isThinkingDisabled(getRecord(provider, bodyKey)))
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
6
38
|
export function normalizeModelCapabilityId(modelString) {
|
|
7
39
|
if (!modelString)
|
|
8
40
|
return undefined;
|
|
@@ -16,3 +48,24 @@ export function supportsTemperatureParameter(modelString) {
|
|
|
16
48
|
return true;
|
|
17
49
|
return !MODELS_WITHOUT_TEMPERATURE_PARAMETER.has(normalizedModel);
|
|
18
50
|
}
|
|
51
|
+
export function getFixedTemperatureParameter(modelString, providerOptions) {
|
|
52
|
+
const normalizedModel = normalizeModelCapabilityId(modelString);
|
|
53
|
+
if (!normalizedModel)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (normalizedModel === KIMI_K2_6_MODEL_ID) {
|
|
56
|
+
return hasDisabledThinking(providerOptions)
|
|
57
|
+
? KIMI_K2_6_NON_THINKING_TEMPERATURE
|
|
58
|
+
: KIMI_K2_6_THINKING_TEMPERATURE;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
export function resolveTemperatureParameter(modelString, requestedTemperature, defaultTemperature, providerOptions) {
|
|
63
|
+
if (!supportsTemperatureParameter(modelString)) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const fixedTemperature = getFixedTemperatureParameter(modelString, providerOptions);
|
|
67
|
+
if (fixedTemperature !== undefined) {
|
|
68
|
+
return fixedTemperature;
|
|
69
|
+
}
|
|
70
|
+
return requestedTemperature ?? defaultTemperature;
|
|
71
|
+
}
|
package/esm/src/eval/index.d.ts
CHANGED
|
@@ -49,11 +49,13 @@ export { judges } from "./judges.js";
|
|
|
49
49
|
export { metrics } from "./metrics.js";
|
|
50
50
|
export { createEvalReport, summarizeEvalRecords } from "./report.js";
|
|
51
51
|
export { compareEvalReports } from "./baseline.js";
|
|
52
|
+
export { compareEvalModelReports, createEvalModelComparisonMarkdown } from "./model-comparison.js";
|
|
53
|
+
export { createEvalRunProvenance, resolveEvalRunProvenance } from "./provenance.js";
|
|
52
54
|
export { runEval } from "./runner.js";
|
|
53
55
|
export { deriveEvalId, discoverEvals, findEvalById } from "./discovery.js";
|
|
54
56
|
export { createEvalSourceDocument, getEvalEditableFieldSchema, getEvalRunSchema, getEvalSourceDocumentSchema, getEvalSourcePatchSchema, getEvalSourceReferenceSchema, getEvalStudioCapabilitySchema, } from "./studio.js";
|
|
55
57
|
export type { DiscoveredEval, EvalDiscoveryOptions, EvalDiscoveryResult } from "./discovery.js";
|
|
56
58
|
export type { EvalLlmGroundednessJudgeOptions } from "./judges.js";
|
|
57
|
-
export type { EvalAgentAdapter, EvalAgentAdapterContext, EvalAgentAdapterResult, EvalAgentInput, EvalAnswerGroundednessMetricOptions, EvalCheckContext, EvalDataset, EvalDatasetLoadContext, EvalDefinition, EvalDurationSummary, EvalExample, EvalExampleInput, EvalExpect, EvalExpectation, EvalFailedExampleSummary, EvalFlakeSummary, EvalGateFailureSummary, EvalKnowledgeExpectedSource, EvalKnowledgeMrrMetricOptions, EvalKnowledgeRetrievalMetricOptions, EvalMetric, EvalMetricContext, EvalMetricDeltaSummary, EvalMetricFamily, EvalMetricResult, EvalMetricSummary, EvalMetricThreshold, EvalRecord, EvalReport, EvalReportComparison, EvalReportExportConfig, EvalReportSummary, EvalSeverity, EvalSource, EvalTargetKind, EvalToolCall, EvalToolCallCountOptions, EvalToolCallMatchOptions, EvalToolCallStatus, EvalToolInputMatchMode, EvalTrace, EvalUsage, EvalUsageSummary, RunEvalOptions, } from "./types.js";
|
|
59
|
+
export type { EvalAgentAdapter, EvalAgentAdapterContext, EvalAgentAdapterResult, EvalAgentInput, EvalAnswerGroundednessMetricOptions, EvalCheckContext, EvalDataset, EvalDatasetLoadContext, EvalDefinition, EvalDurationSummary, EvalExample, EvalExampleInput, EvalExpect, EvalExpectation, EvalFailedExampleSummary, EvalFlakeSummary, EvalGateFailureSummary, EvalKnowledgeExpectedSource, EvalKnowledgeMrrMetricOptions, EvalKnowledgeRetrievalMetricOptions, EvalMetric, EvalMetricContext, EvalMetricDeltaSummary, EvalMetricFamily, EvalMetricResult, EvalMetricSummary, EvalMetricThreshold, EvalModelCandidateComparison, EvalModelComparison, EvalModelComparisonDecision, EvalModelComparisonOptions, EvalModelReportSummary, EvalRecord, EvalReport, EvalReportComparison, EvalReportExportConfig, EvalReportMetadata, EvalReportSummary, EvalRunProvenance, EvalSeverity, EvalSource, EvalTargetKind, EvalToolCall, EvalToolCallCountOptions, EvalToolCallMatchOptions, EvalToolCallStatus, EvalToolInputMatchMode, EvalTrace, EvalUsage, EvalUsageSummary, RunEvalOptions, } from "./types.js";
|
|
58
60
|
export type { CreateEvalSourceDocumentOptions, EvalEditableField, EvalRun, EvalSourceDocument, EvalSourcePatch, EvalSourceReference, EvalStudioCapability, } from "./studio.js";
|
|
59
61
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEnE,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,mCAAmC,EACnC,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,+BAA+B,EAC/B,iBAAiB,EACjB,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEnE,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,mCAAmC,EACnC,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,+BAA+B,EAC/B,iBAAiB,EACjB,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
package/esm/src/eval/index.js
CHANGED
|
@@ -49,6 +49,8 @@ export { judges } from "./judges.js";
|
|
|
49
49
|
export { metrics } from "./metrics.js";
|
|
50
50
|
export { createEvalReport, summarizeEvalRecords } from "./report.js";
|
|
51
51
|
export { compareEvalReports } from "./baseline.js";
|
|
52
|
+
export { compareEvalModelReports, createEvalModelComparisonMarkdown } from "./model-comparison.js";
|
|
53
|
+
export { createEvalRunProvenance, resolveEvalRunProvenance } from "./provenance.js";
|
|
52
54
|
export { runEval } from "./runner.js";
|
|
53
55
|
export { deriveEvalId, discoverEvals, findEvalById } from "./discovery.js";
|
|
54
56
|
export { createEvalSourceDocument, getEvalEditableFieldSchema, getEvalRunSchema, getEvalSourceDocumentSchema, getEvalSourcePatchSchema, getEvalSourceReferenceSchema, getEvalStudioCapabilitySchema, } from "./studio.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EvalModelComparison, EvalModelComparisonOptions, EvalReport } from "./types.js";
|
|
2
|
+
/** Compare eval reports from multiple models using conservative promotion rules. */
|
|
3
|
+
export declare function compareEvalModelReports(reports: EvalReport[], options: EvalModelComparisonOptions): EvalModelComparison;
|
|
4
|
+
/** Render a human-reviewable markdown summary for a model comparison report. */
|
|
5
|
+
export declare function createEvalModelComparisonMarkdown(comparison: EvalModelComparison): string;
|
|
6
|
+
//# sourceMappingURL=model-comparison.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-comparison.d.ts","sourceRoot":"","sources":["../../../src/src/eval/model-comparison.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,mBAAmB,EACnB,0BAA0B,EAE1B,UAAU,EACX,MAAM,YAAY,CAAC;AAuNpB,oFAAoF;AACpF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAqBrB;AAUD,gFAAgF;AAChF,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAgCzF"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { compareEvalReports } from "./baseline.js";
|
|
2
|
+
const DEFAULT_MIN_GROUNDEDNESS = 0.8;
|
|
3
|
+
const DEFAULT_MIN_EFFICIENCY_IMPROVEMENT = 0.1;
|
|
4
|
+
function reportModel(report) {
|
|
5
|
+
return report.metadata?.model ?? report.runId;
|
|
6
|
+
}
|
|
7
|
+
function failedExampleIds(report) {
|
|
8
|
+
return (report.summary.failedExamples ?? []).map((example) => example.exampleId).sort();
|
|
9
|
+
}
|
|
10
|
+
function allMetricResults(report) {
|
|
11
|
+
return report.records.flatMap((record) => [...(record.metrics ?? []), ...(record.checks ?? [])]);
|
|
12
|
+
}
|
|
13
|
+
function average(values) {
|
|
14
|
+
if (values.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
17
|
+
}
|
|
18
|
+
function metricPassRate(report, metricName) {
|
|
19
|
+
return report.summary.metrics.find((metric) => metric.name === metricName)?.passRate;
|
|
20
|
+
}
|
|
21
|
+
function groundednessScore(report) {
|
|
22
|
+
return average(allMetricResults(report)
|
|
23
|
+
.filter((result) => result.name === "answer.groundedness" && result.score !== undefined)
|
|
24
|
+
.map((result) => result.score)) ?? metricPassRate(report, "answer.groundedness");
|
|
25
|
+
}
|
|
26
|
+
function improvementPct(baseline, candidate) {
|
|
27
|
+
if (baseline === undefined || candidate === undefined || baseline <= 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
return (baseline - candidate) / baseline;
|
|
30
|
+
}
|
|
31
|
+
function meetsImprovement(value, threshold) {
|
|
32
|
+
return value !== undefined && value >= threshold;
|
|
33
|
+
}
|
|
34
|
+
function formatPct(value) {
|
|
35
|
+
return `${Math.round(value * 100)}%`;
|
|
36
|
+
}
|
|
37
|
+
function modelSummary(report, baselineModel) {
|
|
38
|
+
const model = reportModel(report);
|
|
39
|
+
const groundedness = groundednessScore(report);
|
|
40
|
+
return {
|
|
41
|
+
model,
|
|
42
|
+
role: model === baselineModel ? "baseline" : "candidate",
|
|
43
|
+
runId: report.runId,
|
|
44
|
+
passed: report.summary.passed,
|
|
45
|
+
failed: report.summary.failed,
|
|
46
|
+
passRate: report.summary.passRate,
|
|
47
|
+
failedExamples: failedExampleIds(report),
|
|
48
|
+
gateFailures: report.summary.gateFailures?.length ?? 0,
|
|
49
|
+
...(report.summary.usage?.totalTokens !== undefined
|
|
50
|
+
? { totalTokens: report.summary.usage.totalTokens }
|
|
51
|
+
: {}),
|
|
52
|
+
...(report.summary.usage?.costUsd !== undefined
|
|
53
|
+
? { costUsd: report.summary.usage.costUsd }
|
|
54
|
+
: {}),
|
|
55
|
+
...(report.summary.duration?.p95Ms !== undefined
|
|
56
|
+
? { p95Ms: report.summary.duration.p95Ms }
|
|
57
|
+
: {}),
|
|
58
|
+
...(groundedness !== undefined ? { groundednessScore: groundedness } : {}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function createCandidateDecision(input) {
|
|
62
|
+
const baselineModel = input.options.baselineModel;
|
|
63
|
+
const baselineSummary = modelSummary(input.baseline, baselineModel);
|
|
64
|
+
const candidateSummary = modelSummary(input.candidate, baselineModel);
|
|
65
|
+
const baselineComparison = compareEvalReports(input.candidate, input.baseline);
|
|
66
|
+
const reasons = [];
|
|
67
|
+
if (input.candidate.summary.failed > 0 || baselineComparison.regressed ||
|
|
68
|
+
baselineComparison.newFailedExamples.length > 0) {
|
|
69
|
+
reasons.push("candidate has quality regressions");
|
|
70
|
+
if (baselineComparison.newFailedExamples.length > 0) {
|
|
71
|
+
reasons.push(`new failed examples: ${baselineComparison.newFailedExamples.join(", ")}`);
|
|
72
|
+
}
|
|
73
|
+
return { decision: "keep-baseline", reasons };
|
|
74
|
+
}
|
|
75
|
+
reasons.push("candidate has no quality regressions");
|
|
76
|
+
if (candidateSummary.groundednessScore !== undefined &&
|
|
77
|
+
candidateSummary.groundednessScore < input.options.minGroundedness) {
|
|
78
|
+
reasons.push(`groundedness is below ${input.options.minGroundedness}`);
|
|
79
|
+
return { decision: "keep-baseline", reasons };
|
|
80
|
+
}
|
|
81
|
+
if (candidateSummary.groundednessScore === undefined) {
|
|
82
|
+
reasons.push("groundedness was not measured");
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
reasons.push(`groundedness is at or above ${input.options.minGroundedness}`);
|
|
86
|
+
}
|
|
87
|
+
const costImprovement = improvementPct(baselineSummary.costUsd, candidateSummary.costUsd);
|
|
88
|
+
const tokenImprovement = improvementPct(baselineSummary.totalTokens, candidateSummary.totalTokens);
|
|
89
|
+
const latencyImprovement = improvementPct(baselineSummary.p95Ms, candidateSummary.p95Ms);
|
|
90
|
+
if (meetsImprovement(costImprovement, input.options.minCostImprovementPct)) {
|
|
91
|
+
reasons.push(`cost improved by ${formatPct(costImprovement)}`);
|
|
92
|
+
return { decision: "promote-candidate", reasons };
|
|
93
|
+
}
|
|
94
|
+
if (meetsImprovement(tokenImprovement, input.options.minTokenImprovementPct)) {
|
|
95
|
+
reasons.push(`tokens improved by ${formatPct(tokenImprovement)}`);
|
|
96
|
+
return { decision: "promote-candidate", reasons };
|
|
97
|
+
}
|
|
98
|
+
if (meetsImprovement(latencyImprovement, input.options.minLatencyImprovementPct)) {
|
|
99
|
+
reasons.push(`p95 latency improved by ${formatPct(latencyImprovement)}`);
|
|
100
|
+
return { decision: "promote-candidate", reasons };
|
|
101
|
+
}
|
|
102
|
+
reasons.push("no cost, token, or latency improvement could be measured");
|
|
103
|
+
return { decision: "needs-review", reasons };
|
|
104
|
+
}
|
|
105
|
+
function compareCandidate(candidate, baseline, options) {
|
|
106
|
+
const baselineComparison = compareEvalReports(candidate, baseline);
|
|
107
|
+
const candidateSummary = modelSummary(candidate, options.baselineModel);
|
|
108
|
+
const baselineSummary = modelSummary(baseline, options.baselineModel);
|
|
109
|
+
const decision = createCandidateDecision({ candidate, baseline, options });
|
|
110
|
+
const costImprovement = improvementPct(baselineSummary.costUsd, candidateSummary.costUsd);
|
|
111
|
+
const tokenImprovement = improvementPct(baselineSummary.totalTokens, candidateSummary.totalTokens);
|
|
112
|
+
const latencyImprovement = improvementPct(baselineSummary.p95Ms, candidateSummary.p95Ms);
|
|
113
|
+
return {
|
|
114
|
+
model: reportModel(candidate),
|
|
115
|
+
baselineModel: options.baselineModel,
|
|
116
|
+
passRateDelta: baselineComparison.passRateDelta,
|
|
117
|
+
failedDelta: baselineComparison.failedDelta,
|
|
118
|
+
newFailedExamples: baselineComparison.newFailedExamples,
|
|
119
|
+
...(candidateSummary.groundednessScore !== undefined
|
|
120
|
+
? { groundednessScore: candidateSummary.groundednessScore }
|
|
121
|
+
: {}),
|
|
122
|
+
...(costImprovement !== undefined ? { costImprovementPct: costImprovement } : {}),
|
|
123
|
+
...(tokenImprovement !== undefined ? { tokenImprovementPct: tokenImprovement } : {}),
|
|
124
|
+
...(latencyImprovement !== undefined ? { latencyImprovementPct: latencyImprovement } : {}),
|
|
125
|
+
decision: decision.decision,
|
|
126
|
+
reasons: decision.reasons,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function pickRecommendation(candidates) {
|
|
130
|
+
const promotable = candidates.find((candidate) => candidate.decision === "promote-candidate");
|
|
131
|
+
if (promotable) {
|
|
132
|
+
return {
|
|
133
|
+
decision: "promote-candidate",
|
|
134
|
+
model: promotable.model,
|
|
135
|
+
reasons: promotable.reasons,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const needsReview = candidates.find((candidate) => candidate.decision === "needs-review");
|
|
139
|
+
if (needsReview) {
|
|
140
|
+
return {
|
|
141
|
+
decision: "needs-review",
|
|
142
|
+
model: needsReview.model,
|
|
143
|
+
reasons: needsReview.reasons,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const firstCandidate = candidates[0];
|
|
147
|
+
return {
|
|
148
|
+
decision: "keep-baseline",
|
|
149
|
+
...(firstCandidate ? { model: firstCandidate.model } : {}),
|
|
150
|
+
reasons: firstCandidate?.reasons ?? ["no candidate models were compared"],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function normalizeOptions(options) {
|
|
154
|
+
return {
|
|
155
|
+
baselineModel: options.baselineModel,
|
|
156
|
+
minGroundedness: options.minGroundedness ?? DEFAULT_MIN_GROUNDEDNESS,
|
|
157
|
+
minCostImprovementPct: options.minCostImprovementPct ?? DEFAULT_MIN_EFFICIENCY_IMPROVEMENT,
|
|
158
|
+
minTokenImprovementPct: options.minTokenImprovementPct ?? DEFAULT_MIN_EFFICIENCY_IMPROVEMENT,
|
|
159
|
+
minLatencyImprovementPct: options.minLatencyImprovementPct ??
|
|
160
|
+
DEFAULT_MIN_EFFICIENCY_IMPROVEMENT,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/** Compare eval reports from multiple models using conservative promotion rules. */
|
|
164
|
+
export function compareEvalModelReports(reports, options) {
|
|
165
|
+
const normalized = normalizeOptions(options);
|
|
166
|
+
const baseline = reports.find((report) => reportModel(report) === normalized.baselineModel);
|
|
167
|
+
if (!baseline) {
|
|
168
|
+
throw new Error(`Baseline model "${normalized.baselineModel}" was not present in eval reports.`);
|
|
169
|
+
}
|
|
170
|
+
const candidates = reports
|
|
171
|
+
.filter((report) => reportModel(report) !== normalized.baselineModel)
|
|
172
|
+
.map((report) => compareCandidate(report, baseline, normalized));
|
|
173
|
+
return {
|
|
174
|
+
kind: "eval-model-comparison",
|
|
175
|
+
baselineModel: normalized.baselineModel,
|
|
176
|
+
candidateModels: candidates.map((candidate) => candidate.model),
|
|
177
|
+
models: reports.map((report) => modelSummary(report, normalized.baselineModel)),
|
|
178
|
+
candidates,
|
|
179
|
+
recommendation: pickRecommendation(candidates),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function numberCell(value) {
|
|
183
|
+
return value === undefined ? "-" : String(Math.round(value));
|
|
184
|
+
}
|
|
185
|
+
function decimalCell(value) {
|
|
186
|
+
return value === undefined ? "-" : value.toFixed(2);
|
|
187
|
+
}
|
|
188
|
+
/** Render a human-reviewable markdown summary for a model comparison report. */
|
|
189
|
+
export function createEvalModelComparisonMarkdown(comparison) {
|
|
190
|
+
const lines = [
|
|
191
|
+
"# Eval Model Comparison",
|
|
192
|
+
"",
|
|
193
|
+
`Baseline: ${comparison.baselineModel}`,
|
|
194
|
+
`Candidates: ${comparison.candidateModels.join(", ") || "-"}`,
|
|
195
|
+
`Recommendation: ${comparison.recommendation.decision}${comparison.recommendation.model ? ` (${comparison.recommendation.model})` : ""}`,
|
|
196
|
+
"",
|
|
197
|
+
"## Models",
|
|
198
|
+
"",
|
|
199
|
+
"| Model | Role | Passed | Failed | Pass rate | Groundedness | Tokens | Cost USD | p95 ms |",
|
|
200
|
+
"| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |",
|
|
201
|
+
];
|
|
202
|
+
for (const model of comparison.models) {
|
|
203
|
+
lines.push(`| ${model.model} | ${model.role} | ${model.passed} | ${model.failed} | ${Math.round(model.passRate * 100)}% | ${decimalCell(model.groundednessScore)} | ${numberCell(model.totalTokens)} | ${decimalCell(model.costUsd)} | ${numberCell(model.p95Ms)} |`);
|
|
204
|
+
}
|
|
205
|
+
lines.push("", "## Decision", "");
|
|
206
|
+
for (const reason of comparison.recommendation.reasons) {
|
|
207
|
+
lines.push(`- ${reason}`);
|
|
208
|
+
}
|
|
209
|
+
lines.push("");
|
|
210
|
+
return `${lines.join("\n")}`;
|
|
211
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EvalRunProvenance } from "./types.js";
|
|
2
|
+
type Env = Record<string, string | undefined>;
|
|
3
|
+
export type EvalGitProvenance = NonNullable<EvalRunProvenance["git"]>;
|
|
4
|
+
export type EvalCommandResult = {
|
|
5
|
+
code: number;
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr?: string;
|
|
8
|
+
};
|
|
9
|
+
export type EvalCommandRunner = (command: string, args: string[], options: {
|
|
10
|
+
cwd: string;
|
|
11
|
+
}) => Promise<EvalCommandResult>;
|
|
12
|
+
export type EvalFileReader = (path: string) => Promise<Uint8Array>;
|
|
13
|
+
export interface CreateEvalRunProvenanceOptions {
|
|
14
|
+
env?: Env;
|
|
15
|
+
git?: EvalGitProvenance;
|
|
16
|
+
frameworkVersion?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ResolveEvalRunProvenanceOptions extends CreateEvalRunProvenanceOptions {
|
|
19
|
+
projectDir?: string;
|
|
20
|
+
commandRunner?: EvalCommandRunner;
|
|
21
|
+
fileReader?: EvalFileReader;
|
|
22
|
+
}
|
|
23
|
+
/** Build stable provenance metadata from explicit git/cloud inputs. */
|
|
24
|
+
export declare function createEvalRunProvenance(options?: CreateEvalRunProvenanceOptions): EvalRunProvenance;
|
|
25
|
+
/** Resolve local or Cloud provenance for an eval run without failing the eval if git metadata is unavailable. */
|
|
26
|
+
export declare function resolveEvalRunProvenance(options?: ResolveEvalRunProvenanceOptions): Promise<EvalRunProvenance>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/src/eval/provenance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KACrB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEnE,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,+BAAgC,SAAQ,8BAA8B;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAiGD,uEAAuE;AACvE,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,iBAAiB,CAmBnB;AA0GD,iHAAiH;AACjH,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAU5B"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import { join } from "../../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
3
|
+
import { VERSION } from "../utils/version-constant.js";
|
|
4
|
+
function firstValue(env, keys) {
|
|
5
|
+
for (const key of keys) {
|
|
6
|
+
const value = env[key];
|
|
7
|
+
if (typeof value === "string" && value.trim().length > 0)
|
|
8
|
+
return value.trim();
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
function collectEnv() {
|
|
13
|
+
return {
|
|
14
|
+
AG_UI_EVAL_BRANCH_ID: dntShim.Deno.env.get("AG_UI_EVAL_BRANCH_ID"),
|
|
15
|
+
AG_UI_EVAL_PROJECT_ID: dntShim.Deno.env.get("AG_UI_EVAL_PROJECT_ID"),
|
|
16
|
+
AG_UI_EVAL_PROJECT_SLUG: dntShim.Deno.env.get("AG_UI_EVAL_PROJECT_SLUG"),
|
|
17
|
+
AG_UI_EVAL_RELEASE_ID: dntShim.Deno.env.get("AG_UI_EVAL_RELEASE_ID"),
|
|
18
|
+
CI: dntShim.Deno.env.get("CI"),
|
|
19
|
+
GITHUB_ACTIONS: dntShim.Deno.env.get("GITHUB_ACTIONS"),
|
|
20
|
+
GITHUB_REF_NAME: dntShim.Deno.env.get("GITHUB_REF_NAME"),
|
|
21
|
+
GITHUB_SHA: dntShim.Deno.env.get("GITHUB_SHA"),
|
|
22
|
+
TENANT_BRANCH_ID: dntShim.Deno.env.get("TENANT_BRANCH_ID"),
|
|
23
|
+
TENANT_DEPLOYMENT_ID: dntShim.Deno.env.get("TENANT_DEPLOYMENT_ID"),
|
|
24
|
+
TENANT_ENVIRONMENT: dntShim.Deno.env.get("TENANT_ENVIRONMENT"),
|
|
25
|
+
TENANT_PROJECT_ID: dntShim.Deno.env.get("TENANT_PROJECT_ID"),
|
|
26
|
+
TENANT_PROJECT_SLUG: dntShim.Deno.env.get("TENANT_PROJECT_SLUG"),
|
|
27
|
+
TENANT_RELEASE_ID: dntShim.Deno.env.get("TENANT_RELEASE_ID"),
|
|
28
|
+
VERCEL_ENV: dntShim.Deno.env.get("VERCEL_ENV"),
|
|
29
|
+
VERYFRONT_BRANCH_REF: dntShim.Deno.env.get("VERYFRONT_BRANCH_REF"),
|
|
30
|
+
VERYFRONT_DEPLOYMENT_ID: dntShim.Deno.env.get("VERYFRONT_DEPLOYMENT_ID"),
|
|
31
|
+
VERYFRONT_ENVIRONMENT: dntShim.Deno.env.get("VERYFRONT_ENVIRONMENT"),
|
|
32
|
+
VERYFRONT_PROJECT_ID: dntShim.Deno.env.get("VERYFRONT_PROJECT_ID"),
|
|
33
|
+
VERYFRONT_PROJECT_SLUG: dntShim.Deno.env.get("VERYFRONT_PROJECT_SLUG"),
|
|
34
|
+
VERYFRONT_RELEASE_ID: dntShim.Deno.env.get("VERYFRONT_RELEASE_ID"),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function createCloudProvenance(env) {
|
|
38
|
+
const entries = Object.entries({
|
|
39
|
+
projectId: firstValue(env, [
|
|
40
|
+
"TENANT_PROJECT_ID",
|
|
41
|
+
"VERYFRONT_PROJECT_ID",
|
|
42
|
+
"AG_UI_EVAL_PROJECT_ID",
|
|
43
|
+
]),
|
|
44
|
+
projectSlug: firstValue(env, [
|
|
45
|
+
"TENANT_PROJECT_SLUG",
|
|
46
|
+
"VERYFRONT_PROJECT_SLUG",
|
|
47
|
+
"AG_UI_EVAL_PROJECT_SLUG",
|
|
48
|
+
]),
|
|
49
|
+
releaseId: firstValue(env, [
|
|
50
|
+
"TENANT_RELEASE_ID",
|
|
51
|
+
"VERYFRONT_RELEASE_ID",
|
|
52
|
+
"AG_UI_EVAL_RELEASE_ID",
|
|
53
|
+
]),
|
|
54
|
+
deploymentId: firstValue(env, ["TENANT_DEPLOYMENT_ID", "VERYFRONT_DEPLOYMENT_ID"]),
|
|
55
|
+
branchId: firstValue(env, ["TENANT_BRANCH_ID", "AG_UI_EVAL_BRANCH_ID"]),
|
|
56
|
+
branchRef: firstValue(env, ["VERYFRONT_BRANCH_REF", "GITHUB_REF_NAME"]),
|
|
57
|
+
environment: firstValue(env, ["VERYFRONT_ENVIRONMENT", "TENANT_ENVIRONMENT", "VERCEL_ENV"]),
|
|
58
|
+
}).filter((entry) => entry[1] !== undefined);
|
|
59
|
+
return entries.length > 0
|
|
60
|
+
? Object.fromEntries(entries)
|
|
61
|
+
: undefined;
|
|
62
|
+
}
|
|
63
|
+
function createSource(cloud, git) {
|
|
64
|
+
if (cloud?.releaseId)
|
|
65
|
+
return { kind: "release", id: cloud.releaseId };
|
|
66
|
+
if (cloud?.deploymentId)
|
|
67
|
+
return { kind: "deployment", id: cloud.deploymentId };
|
|
68
|
+
if (cloud?.branchId)
|
|
69
|
+
return { kind: "preview", id: cloud.branchId };
|
|
70
|
+
if (cloud?.branchRef)
|
|
71
|
+
return { kind: "preview", id: cloud.branchRef };
|
|
72
|
+
if (git?.sha)
|
|
73
|
+
return { kind: "git", id: git.sha };
|
|
74
|
+
if (cloud?.projectId || cloud?.projectSlug) {
|
|
75
|
+
return { kind: "workspace", id: cloud.projectSlug ?? cloud.projectId };
|
|
76
|
+
}
|
|
77
|
+
return { kind: "unknown" };
|
|
78
|
+
}
|
|
79
|
+
function createEnvironment(env, cloud, git) {
|
|
80
|
+
if (cloud?.releaseId || cloud?.deploymentId || cloud?.branchId || cloud?.projectId ||
|
|
81
|
+
cloud?.projectSlug) {
|
|
82
|
+
return "cloud";
|
|
83
|
+
}
|
|
84
|
+
if (env.GITHUB_ACTIONS === "true" || env.CI === "true")
|
|
85
|
+
return "ci";
|
|
86
|
+
if (git?.sha || git?.branch)
|
|
87
|
+
return "local";
|
|
88
|
+
return "unknown";
|
|
89
|
+
}
|
|
90
|
+
/** Build stable provenance metadata from explicit git/cloud inputs. */
|
|
91
|
+
export function createEvalRunProvenance(options = {}) {
|
|
92
|
+
const env = options.env ?? collectEnv();
|
|
93
|
+
const ciGit = firstValue(env, ["GITHUB_SHA"]);
|
|
94
|
+
const git = options.git ?? (ciGit
|
|
95
|
+
? {
|
|
96
|
+
sha: ciGit,
|
|
97
|
+
branch: firstValue(env, ["GITHUB_REF_NAME"]),
|
|
98
|
+
}
|
|
99
|
+
: undefined);
|
|
100
|
+
const cloud = createCloudProvenance(env);
|
|
101
|
+
return {
|
|
102
|
+
kind: "eval-run-provenance",
|
|
103
|
+
environment: createEnvironment(env, cloud, git),
|
|
104
|
+
source: createSource(cloud, git),
|
|
105
|
+
frameworkVersion: options.frameworkVersion ?? VERSION,
|
|
106
|
+
...(git ? { git } : {}),
|
|
107
|
+
...(cloud ? { cloud } : {}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
async function defaultCommandRunner(command, args, options) {
|
|
111
|
+
const result = await new dntShim.Deno.Command(command, {
|
|
112
|
+
args,
|
|
113
|
+
cwd: options.cwd,
|
|
114
|
+
stdout: "piped",
|
|
115
|
+
stderr: "piped",
|
|
116
|
+
}).output();
|
|
117
|
+
const decoder = new TextDecoder();
|
|
118
|
+
return {
|
|
119
|
+
code: result.code,
|
|
120
|
+
stdout: decoder.decode(result.stdout),
|
|
121
|
+
stderr: decoder.decode(result.stderr),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async function runGit(runner, projectDir, args, options = {}) {
|
|
125
|
+
try {
|
|
126
|
+
const result = await runner("git", args, { cwd: projectDir });
|
|
127
|
+
if (result.code !== 0)
|
|
128
|
+
return undefined;
|
|
129
|
+
return options.trim === false ? result.stdout : result.stdout.trim();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function sha256Hex(value) {
|
|
136
|
+
return sha256Bytes(new TextEncoder().encode(value));
|
|
137
|
+
}
|
|
138
|
+
async function sha256Bytes(value) {
|
|
139
|
+
const bytes = new Uint8Array(value.byteLength);
|
|
140
|
+
bytes.set(value);
|
|
141
|
+
const hash = await dntShim.crypto.subtle.digest("SHA-256", bytes.buffer);
|
|
142
|
+
return Array.from(new Uint8Array(hash))
|
|
143
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
144
|
+
.join("");
|
|
145
|
+
}
|
|
146
|
+
function parseNullSeparated(value) {
|
|
147
|
+
if (!value)
|
|
148
|
+
return [];
|
|
149
|
+
return value.split("\0").filter(Boolean).sort();
|
|
150
|
+
}
|
|
151
|
+
async function hashUntrackedFiles(projectDir, paths, readFile) {
|
|
152
|
+
const entries = [];
|
|
153
|
+
for (const relativePath of paths) {
|
|
154
|
+
try {
|
|
155
|
+
const content = await readFile(join(projectDir, relativePath));
|
|
156
|
+
entries.push(`${relativePath}\0${await sha256Bytes(content)}`);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
entries.push(`${relativePath}\0unreadable`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return entries.join("\0");
|
|
163
|
+
}
|
|
164
|
+
async function resolveGitProvenance(projectDir, runner, readFile) {
|
|
165
|
+
const sha = await runGit(runner, projectDir, ["rev-parse", "HEAD"]);
|
|
166
|
+
const branch = await runGit(runner, projectDir, ["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
167
|
+
const status = await runGit(runner, projectDir, ["status", "--porcelain=v1"]);
|
|
168
|
+
const diff = await runGit(runner, projectDir, ["diff", "--binary", "HEAD", "--"]);
|
|
169
|
+
const untracked = await runGit(runner, projectDir, [
|
|
170
|
+
"ls-files",
|
|
171
|
+
"--others",
|
|
172
|
+
"--exclude-standard",
|
|
173
|
+
"-z",
|
|
174
|
+
], { trim: false });
|
|
175
|
+
const dirty = status !== undefined ? status.length > 0 : undefined;
|
|
176
|
+
if (!sha && !branch && dirty === undefined)
|
|
177
|
+
return undefined;
|
|
178
|
+
const untrackedHashInput = await hashUntrackedFiles(projectDir, parseNullSeparated(untracked), readFile);
|
|
179
|
+
return {
|
|
180
|
+
...(sha ? { sha } : {}),
|
|
181
|
+
...(branch ? { branch } : {}),
|
|
182
|
+
...(dirty !== undefined ? { dirty } : {}),
|
|
183
|
+
...(dirty
|
|
184
|
+
? { dirtyHash: await sha256Hex(`${status ?? ""}\n${diff ?? ""}\n${untrackedHashInput}`) }
|
|
185
|
+
: {}),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** Resolve local or Cloud provenance for an eval run without failing the eval if git metadata is unavailable. */
|
|
189
|
+
export async function resolveEvalRunProvenance(options = {}) {
|
|
190
|
+
const projectDir = options.projectDir ?? dntShim.Deno.cwd();
|
|
191
|
+
const runner = options.commandRunner ?? defaultCommandRunner;
|
|
192
|
+
const readFile = options.fileReader ?? dntShim.Deno.readFile;
|
|
193
|
+
const git = options.git ?? await resolveGitProvenance(projectDir, runner, readFile);
|
|
194
|
+
return createEvalRunProvenance({
|
|
195
|
+
env: options.env,
|
|
196
|
+
git,
|
|
197
|
+
frameworkVersion: options.frameworkVersion,
|
|
198
|
+
});
|
|
199
|
+
}
|
package/esm/src/eval/report.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EvalDefinition, EvalRecord, EvalReport, EvalReportSummary } from "./types.js";
|
|
1
|
+
import type { EvalDefinition, EvalRecord, EvalReport, EvalReportMetadata, EvalReportSummary } from "./types.js";
|
|
2
2
|
/** Summarize eval records into pass/fail and metric aggregates. */
|
|
3
3
|
export declare function summarizeEvalRecords(records: EvalRecord[]): EvalReportSummary;
|
|
4
4
|
/** Create a JSON-serializable eval report from executed records. */
|
|
@@ -8,5 +8,6 @@ export declare function createEvalReport(input: {
|
|
|
8
8
|
runId: string;
|
|
9
9
|
startedAt: Date;
|
|
10
10
|
endedAt: Date;
|
|
11
|
+
metadata?: EvalReportMetadata;
|
|
11
12
|
}): EvalReport;
|
|
12
13
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/src/eval/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAOd,UAAU,EACV,UAAU,EACV,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAsLpB,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAoB7E;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/src/eval/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAOd,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAsLpB,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAoB7E;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GAAG,UAAU,CAab"}
|
package/esm/src/eval/report.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/eval/runner.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,cAAc,EAMd,cAAc,EACf,MAAM,YAAY,CAAC;AAmQpB,6DAA6D;AAC7D,wBAAsB,OAAO,CAC3B,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/src/eval/runner.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,cAAc,EAMd,cAAc,EACf,MAAM,YAAY,CAAC;AAmQpB,6DAA6D;AAC7D,wBAAsB,OAAO,CAC3B,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,cAAc,4CAyBxB"}
|
package/esm/src/eval/runner.js
CHANGED
|
@@ -238,6 +238,7 @@ export async function runEval(definition, options) {
|
|
|
238
238
|
runId: options.runId ?? createRunId(startedAt),
|
|
239
239
|
startedAt,
|
|
240
240
|
endedAt,
|
|
241
|
+
metadata: options.metadata,
|
|
241
242
|
});
|
|
242
243
|
emitEvalRuntimeMetrics(report);
|
|
243
244
|
const exports = await exportEvalReport(report, options.export);
|
package/esm/src/eval/types.d.ts
CHANGED
|
@@ -255,6 +255,7 @@ export interface RunEvalOptions {
|
|
|
255
255
|
runId?: string;
|
|
256
256
|
now?: () => Date;
|
|
257
257
|
export?: EvalReportExportConfig;
|
|
258
|
+
metadata?: EvalReportMetadata;
|
|
258
259
|
}
|
|
259
260
|
/** Export configuration for a completed eval report. */
|
|
260
261
|
export interface EvalReportExportConfig {
|
|
@@ -341,6 +342,88 @@ export interface EvalReportComparison {
|
|
|
341
342
|
fixedExamples: string[];
|
|
342
343
|
regressed: boolean;
|
|
343
344
|
}
|
|
345
|
+
/** Runtime and source identity attached to an eval report. */
|
|
346
|
+
export interface EvalRunProvenance {
|
|
347
|
+
kind: "eval-run-provenance";
|
|
348
|
+
environment: "local" | "cloud" | "ci" | "unknown";
|
|
349
|
+
source: {
|
|
350
|
+
kind: "git" | "release" | "deployment" | "preview" | "workspace" | "unknown";
|
|
351
|
+
id?: string;
|
|
352
|
+
};
|
|
353
|
+
frameworkVersion?: string;
|
|
354
|
+
git?: {
|
|
355
|
+
sha?: string;
|
|
356
|
+
branch?: string;
|
|
357
|
+
dirty?: boolean;
|
|
358
|
+
dirtyHash?: string;
|
|
359
|
+
};
|
|
360
|
+
cloud?: {
|
|
361
|
+
projectId?: string;
|
|
362
|
+
projectSlug?: string;
|
|
363
|
+
releaseId?: string;
|
|
364
|
+
deploymentId?: string;
|
|
365
|
+
branchId?: string;
|
|
366
|
+
branchRef?: string;
|
|
367
|
+
environment?: string;
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/** Additional report metadata that should not affect pass/fail semantics. */
|
|
371
|
+
export interface EvalReportMetadata {
|
|
372
|
+
model?: string;
|
|
373
|
+
provenance?: EvalRunProvenance;
|
|
374
|
+
}
|
|
375
|
+
/** Per-model row in an eval model comparison report. */
|
|
376
|
+
export interface EvalModelReportSummary {
|
|
377
|
+
model: string;
|
|
378
|
+
role: "baseline" | "candidate";
|
|
379
|
+
runId: string;
|
|
380
|
+
passed: number;
|
|
381
|
+
failed: number;
|
|
382
|
+
passRate: number;
|
|
383
|
+
failedExamples: string[];
|
|
384
|
+
gateFailures: number;
|
|
385
|
+
totalTokens?: number;
|
|
386
|
+
costUsd?: number;
|
|
387
|
+
p95Ms?: number;
|
|
388
|
+
groundednessScore?: number;
|
|
389
|
+
}
|
|
390
|
+
/** Candidate-vs-baseline comparison used to decide whether a model is promotable. */
|
|
391
|
+
export interface EvalModelCandidateComparison {
|
|
392
|
+
model: string;
|
|
393
|
+
baselineModel: string;
|
|
394
|
+
passRateDelta: number;
|
|
395
|
+
failedDelta: number;
|
|
396
|
+
newFailedExamples: string[];
|
|
397
|
+
groundednessScore?: number;
|
|
398
|
+
costImprovementPct?: number;
|
|
399
|
+
tokenImprovementPct?: number;
|
|
400
|
+
latencyImprovementPct?: number;
|
|
401
|
+
decision: EvalModelComparisonDecision;
|
|
402
|
+
reasons: string[];
|
|
403
|
+
}
|
|
404
|
+
/** Conservative model comparison recommendation. */
|
|
405
|
+
export type EvalModelComparisonDecision = "promote-candidate" | "keep-baseline" | "needs-review";
|
|
406
|
+
/** Aggregate report for comparing one baseline model against candidate models. */
|
|
407
|
+
export interface EvalModelComparison {
|
|
408
|
+
kind: "eval-model-comparison";
|
|
409
|
+
baselineModel: string;
|
|
410
|
+
candidateModels: string[];
|
|
411
|
+
models: EvalModelReportSummary[];
|
|
412
|
+
candidates: EvalModelCandidateComparison[];
|
|
413
|
+
recommendation: {
|
|
414
|
+
decision: EvalModelComparisonDecision;
|
|
415
|
+
model?: string;
|
|
416
|
+
reasons: string[];
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
/** Promotion thresholds for model comparison. */
|
|
420
|
+
export interface EvalModelComparisonOptions {
|
|
421
|
+
baselineModel: string;
|
|
422
|
+
minGroundedness?: number;
|
|
423
|
+
minCostImprovementPct?: number;
|
|
424
|
+
minTokenImprovementPct?: number;
|
|
425
|
+
minLatencyImprovementPct?: number;
|
|
426
|
+
}
|
|
344
427
|
/** Aggregate pass/fail summary for one eval report. */
|
|
345
428
|
export interface EvalReportSummary {
|
|
346
429
|
records: number;
|
|
@@ -373,5 +456,6 @@ export interface EvalReport {
|
|
|
373
456
|
summary: EvalReportSummary;
|
|
374
457
|
records: EvalRecord[];
|
|
375
458
|
exports?: EvalReportExportResult[];
|
|
459
|
+
metadata?: EvalReportMetadata;
|
|
376
460
|
}
|
|
377
461
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/eval/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AAErC,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;AAErC,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAE5F,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjD,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC/D;AAED,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvE,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,iDAAiD;AACjD,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,wDAAwD;AACxD,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,0EAA0E;AAC1E,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,mCAAmC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,KAAK,gBAAgB,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC9F,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;CACrD;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACxD,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACxD,MAAM,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;CAC3D;AAED,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,SAAS,IAAI,eAAe,CAAC;IAC7B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IAC9C,aAAa,IAAI,eAAe,CAAC;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,eAAe,CAAC;IAC9E,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IAC7C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,eAAe,CAAC;CACjF;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,uBAAuB,KAC7B,gBAAgB,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC;AAEvD,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QACR,KAAK,EAAE,gBAAgB,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,kEAAkE;AAClE,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,mCAAmC;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,uEAAuE;IACvE,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACxC,oEAAoE;IACpE,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC5C,6CAA6C;IAC7C,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACpC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/eval/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AAErC,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;AAErC,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAE5F,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjD,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC/D;AAED,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvE,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,iDAAiD;AACjD,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,wDAAwD;AACxD,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,0EAA0E;AAC1E,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,mCAAmC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,KAAK,gBAAgB,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC9F,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC;CACrD;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACxD,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACxD,MAAM,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;CAC3D;AAED,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,SAAS,IAAI,eAAe,CAAC;IAC7B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IAC9C,aAAa,IAAI,eAAe,CAAC;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,eAAe,CAAC;IAC9E,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IAC7C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,eAAe,CAAC;CACjF;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,uBAAuB,KAC7B,gBAAgB,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC;AAEvD,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QACR,KAAK,EAAE,gBAAgB,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,kEAAkE;AAClE,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,8DAA8D;AAC9D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;QAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE;QACJ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,wDAAwD;AACxD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,2BAA2B,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GACnC,mBAAmB,GACnB,eAAe,GACf,cAAc,CAAC;AAEnB,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC3C,cAAc,EAAE;QACd,QAAQ,EAAE,2BAA2B,CAAC;QACtC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,iDAAiD;AACjD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,mCAAmC;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,uEAAuE;IACvE,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACxC,oEAAoE;IACpE,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC5C,6CAA6C;IAC7C,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B"}
|