@geotechcli/core 0.4.77 → 0.4.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/data-tools.js +38 -1
- package/dist/agents/data-tools.js.map +1 -1
- package/dist/agents/fem-artifact-guards.d.ts +14 -0
- package/dist/agents/fem-artifact-guards.d.ts.map +1 -0
- package/dist/agents/fem-artifact-guards.js +53 -0
- package/dist/agents/fem-artifact-guards.js.map +1 -0
- package/dist/agents/fem-tools.js +86 -1
- package/dist/agents/fem-tools.js.map +1 -1
- package/dist/agents/filesystem-tools.js +13 -0
- package/dist/agents/filesystem-tools.js.map +1 -1
- package/dist/agents/provider-operating-contract.d.ts +3 -3
- package/dist/agents/provider-operating-contract.d.ts.map +1 -1
- package/dist/agents/provider-operating-contract.js +10 -46
- package/dist/agents/provider-operating-contract.js.map +1 -1
- package/dist/agents/runtime-bootstrap.d.ts +1 -0
- package/dist/agents/runtime-bootstrap.d.ts.map +1 -1
- package/dist/agents/runtime-bootstrap.js +1 -0
- package/dist/agents/runtime-bootstrap.js.map +1 -1
- package/dist/agents/safety.d.ts.map +1 -1
- package/dist/agents/safety.js +33 -0
- package/dist/agents/safety.js.map +1 -1
- package/dist/agents/signal-tools.d.ts +2 -0
- package/dist/agents/signal-tools.d.ts.map +1 -0
- package/dist/agents/signal-tools.js +96 -0
- package/dist/agents/signal-tools.js.map +1 -0
- package/dist/agents/swarm-planner.js +1 -1
- package/dist/agents/swarm-planner.js.map +1 -1
- package/dist/agents/swarm.d.ts +1 -0
- package/dist/agents/swarm.d.ts.map +1 -1
- package/dist/agents/swarm.js +202 -31
- package/dist/agents/swarm.js.map +1 -1
- package/dist/fem/ground-model-draft.d.ts +14 -0
- package/dist/fem/ground-model-draft.d.ts.map +1 -1
- package/dist/fem/ground-model-draft.js +86 -21
- package/dist/fem/ground-model-draft.js.map +1 -1
- package/dist/fem/index.d.ts +1 -1
- package/dist/fem/index.d.ts.map +1 -1
- package/dist/fem/index.js +1 -1
- package/dist/fem/index.js.map +1 -1
- package/dist/fem/routing.d.ts +15 -1
- package/dist/fem/routing.d.ts.map +1 -1
- package/dist/fem/routing.js +192 -14
- package/dist/fem/routing.js.map +1 -1
- package/dist/fem/validation.d.ts.map +1 -1
- package/dist/fem/validation.js +715 -30
- package/dist/fem/validation.js.map +1 -1
- package/dist/fem/webgl.d.ts.map +1 -1
- package/dist/fem/webgl.js +24 -8
- package/dist/fem/webgl.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/document-evidence-packet.d.ts +603 -45
- package/dist/ingest/document-evidence-packet.d.ts.map +1 -1
- package/dist/ingest/document-evidence-packet.js +145 -5
- package/dist/ingest/document-evidence-packet.js.map +1 -1
- package/dist/ingest/geotech-benchmark-corpus.d.ts +108 -0
- package/dist/ingest/geotech-benchmark-corpus.d.ts.map +1 -0
- package/dist/ingest/geotech-benchmark-corpus.js +437 -0
- package/dist/ingest/geotech-benchmark-corpus.js.map +1 -0
- package/dist/ingest/geotech-document-benchmark.d.ts +133 -0
- package/dist/ingest/geotech-document-benchmark.d.ts.map +1 -1
- package/dist/ingest/geotech-document-benchmark.js +370 -2
- package/dist/ingest/geotech-document-benchmark.js.map +1 -1
- package/dist/ingest/geotech-document.d.ts +3 -0
- package/dist/ingest/geotech-document.d.ts.map +1 -1
- package/dist/ingest/geotech-document.js +7 -0
- package/dist/ingest/geotech-document.js.map +1 -1
- package/dist/ingest/index.d.ts +2 -1
- package/dist/ingest/index.d.ts.map +1 -1
- package/dist/ingest/index.js +1 -0
- package/dist/ingest/index.js.map +1 -1
- package/dist/ingest/job-store.d.ts.map +1 -1
- package/dist/ingest/job-store.js +196 -0
- package/dist/ingest/job-store.js.map +1 -1
- package/dist/ingest/job-worker.d.ts.map +1 -1
- package/dist/ingest/job-worker.js +5 -0
- package/dist/ingest/job-worker.js.map +1 -1
- package/dist/ingest/page-evidence-cache.d.ts +6 -2
- package/dist/ingest/page-evidence-cache.d.ts.map +1 -1
- package/dist/ingest/page-evidence-cache.js +229 -4
- package/dist/ingest/page-evidence-cache.js.map +1 -1
- package/dist/ingest/pdf.d.ts.map +1 -1
- package/dist/ingest/pdf.js +2 -2
- package/dist/ingest/pdf.js.map +1 -1
- package/dist/ingest/review-store.d.ts +3 -0
- package/dist/ingest/review-store.d.ts.map +1 -1
- package/dist/ingest/review-store.js +28 -0
- package/dist/ingest/review-store.js.map +1 -1
- package/dist/llm/capabilities.d.ts +6 -1
- package/dist/llm/capabilities.d.ts.map +1 -1
- package/dist/llm/capabilities.js +66 -0
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/index.d.ts +2 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/types.d.ts +20 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js.map +1 -1
- package/dist/meta/metadata.json +1 -1
- package/dist/report/ingest-dossier.d.ts.map +1 -1
- package/dist/report/ingest-dossier.js +13 -1
- package/dist/report/ingest-dossier.js.map +1 -1
- package/dist/signal/index.d.ts +95 -0
- package/dist/signal/index.d.ts.map +1 -0
- package/dist/signal/index.js +375 -0
- package/dist/signal/index.js.map +1 -0
- package/dist/verifier/findings.d.ts +1 -1
- package/dist/verifier/findings.d.ts.map +1 -1
- package/dist/verifier/findings.js +329 -0
- package/dist/verifier/findings.js.map +1 -1
- package/dist/vision/ocr.d.ts +2 -0
- package/dist/vision/ocr.d.ts.map +1 -1
- package/dist/vision/ocr.js +148 -2
- package/dist/vision/ocr.js.map +1 -1
- package/dist/vision/preprocess.d.ts +66 -1
- package/dist/vision/preprocess.d.ts.map +1 -1
- package/dist/vision/preprocess.js +728 -9
- package/dist/vision/preprocess.js.map +1 -1
- package/dist/workspace/project-workflow-executor.d.ts +1 -1
- package/dist/workspace/project-workflow-executor.d.ts.map +1 -1
- package/dist/workspace/project-workflow-executor.js +216 -4
- package/dist/workspace/project-workflow-executor.js.map +1 -1
- package/dist/workspace/project-workflow-router.d.ts.map +1 -1
- package/dist/workspace/project-workflow-router.js +41 -1
- package/dist/workspace/project-workflow-router.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
export function buildGeotechBenchmarkCorpusReport(inputs, options = {}) {
|
|
2
|
+
const fixtures = normalizeFixtures(inputs.map((input) => input.fixture));
|
|
3
|
+
const runs = inputs.map((input) => buildCorpusRun(input));
|
|
4
|
+
const fixtureFailures = validateFixtureCoverage(fixtures, runs);
|
|
5
|
+
const failures = [
|
|
6
|
+
...runs.flatMap((run) => run.failures.map((failure) => `${run.fixtureId}/${run.providerProfile}/${run.preprocessingMode}: ${failure}`)),
|
|
7
|
+
...fixtureFailures,
|
|
8
|
+
];
|
|
9
|
+
const warnings = [
|
|
10
|
+
...fixtures.flatMap((fixture) => (fixture.expectations.knownLimitations ?? []).map((warning) => `${fixture.id}: ${warning}`)),
|
|
11
|
+
...runs.flatMap((run) => run.warnings.map((warning) => `${run.fixtureId}/${run.providerProfile}/${run.preprocessingMode}: ${warning}`)),
|
|
12
|
+
];
|
|
13
|
+
return {
|
|
14
|
+
kind: 'geotech-benchmark-corpus-report',
|
|
15
|
+
schemaVersion: 1,
|
|
16
|
+
generatedAt: normalizeGeneratedAt(options.generatedAt),
|
|
17
|
+
...(options.label ? { label: options.label } : {}),
|
|
18
|
+
summary: summarizeCorpus(fixtures, runs, failures),
|
|
19
|
+
fixtures,
|
|
20
|
+
runs,
|
|
21
|
+
preprocessingComparisons: buildPreprocessingComparisons(runs),
|
|
22
|
+
failures: [...new Set(failures)],
|
|
23
|
+
warnings: [...new Set(warnings)],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function renderGeotechBenchmarkCorpusSvg(report) {
|
|
27
|
+
const width = 980;
|
|
28
|
+
const rowHeight = 34;
|
|
29
|
+
const headerHeight = 128;
|
|
30
|
+
const height = headerHeight + Math.max(1, report.runs.length) * rowHeight + 86;
|
|
31
|
+
const rows = report.runs.slice(0, 18).map((run, index) => {
|
|
32
|
+
const y = headerHeight + index * rowHeight;
|
|
33
|
+
const trace = Math.round(run.directTraceabilityRate * 100);
|
|
34
|
+
const quality = Math.round(run.preprocessingQualityScore * 100);
|
|
35
|
+
const statusColor = run.passed ? '#0f766e' : '#b91c1c';
|
|
36
|
+
return [
|
|
37
|
+
`<rect x="24" y="${y}" width="932" height="${rowHeight - 6}" rx="6" fill="${index % 2 === 0 ? '#f8fafc' : '#eef6f8'}" stroke="#dbe5ea"/>`,
|
|
38
|
+
`<text x="42" y="${y + 20}" font-size="12" font-weight="700" fill="#0f172a">${escapeSvg(run.fixtureId)}</text>`,
|
|
39
|
+
`<text x="270" y="${y + 20}" font-size="12" fill="#475569">${escapeSvg(run.category)}</text>`,
|
|
40
|
+
`<text x="430" y="${y + 20}" font-size="12" fill="#475569">${escapeSvg(run.providerProfile)}</text>`,
|
|
41
|
+
`<text x="585" y="${y + 20}" font-size="12" fill="#475569">${escapeSvg(run.preprocessingMode)}</text>`,
|
|
42
|
+
`<text x="720" y="${y + 20}" font-size="12" fill="#0f172a">trace ${trace}% / quality ${quality}%</text>`,
|
|
43
|
+
`<text x="910" y="${y + 20}" text-anchor="end" font-size="12" font-weight="700" fill="${statusColor}">${run.passed ? 'pass' : 'fail'}</text>`,
|
|
44
|
+
].join('');
|
|
45
|
+
}).join('\n');
|
|
46
|
+
return [
|
|
47
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="GeotechCLI geotechnical benchmark corpus summary">`,
|
|
48
|
+
'<rect width="100%" height="100%" fill="#ffffff"/>',
|
|
49
|
+
'<rect x="0" y="0" width="980" height="112" fill="#0f172a"/>',
|
|
50
|
+
`<text x="32" y="42" font-size="24" font-weight="800" fill="#f8fafc">GeotechCLI Benchmark Corpus</text>`,
|
|
51
|
+
`<text x="32" y="72" font-size="13" fill="#cbd5e1">${escapeSvg(report.label ?? 'internal R&D evidence benchmark')}</text>`,
|
|
52
|
+
`<text x="948" y="42" text-anchor="end" font-size="24" font-weight="800" fill="${report.summary.passed ? '#5eead4' : '#fca5a5'}">${report.summary.passed ? 'PASS' : 'FAIL'}</text>`,
|
|
53
|
+
`<text x="948" y="72" text-anchor="end" font-size="13" fill="#cbd5e1">${report.summary.passedRuns}/${report.summary.runCount} runs passed</text>`,
|
|
54
|
+
`<text x="32" y="108" font-size="12" fill="#64748b">Fixtures ${report.summary.fixtureCount} | providers ${report.summary.providerProfiles.join(', ') || 'none'} | preprocessing ${report.summary.preprocessingModes.join(', ') || 'none'}</text>`,
|
|
55
|
+
rows,
|
|
56
|
+
`<text x="32" y="${height - 44}" font-size="12" fill="#475569">Average traceability ${Math.round(report.summary.averageTraceabilityRate * 100)}%, GroundModel readiness ${report.summary.averageGroundModelReadinessScore}/100, preprocessing quality ${Math.round(report.summary.averagePreprocessingQualityScore * 100)}%.</text>`,
|
|
57
|
+
`<text x="32" y="${height - 22}" font-size="11" fill="#64748b">Generated ${escapeSvg(report.generatedAt)}. Internal strong-beta benchmark; not a production certification.</text>`,
|
|
58
|
+
'</svg>',
|
|
59
|
+
].join('\n');
|
|
60
|
+
}
|
|
61
|
+
export function renderGeotechBenchmarkCorpusHtml(report) {
|
|
62
|
+
const rows = report.runs.map((run) => `
|
|
63
|
+
<tr>
|
|
64
|
+
<td>${escapeHtml(run.fixtureId)}</td>
|
|
65
|
+
<td>${escapeHtml(run.category)}</td>
|
|
66
|
+
<td>${escapeHtml(run.providerProfile)}</td>
|
|
67
|
+
<td>${escapeHtml(run.preprocessingMode)}</td>
|
|
68
|
+
<td>${Math.round(run.directTraceabilityRate * 100)}%</td>
|
|
69
|
+
<td>${run.groundModelReadinessScore}</td>
|
|
70
|
+
<td>${Math.round(run.preprocessingQualityScore * 100)}%</td>
|
|
71
|
+
<td>${escapeHtml(formatReviewGates(run.reviewGates))}</td>
|
|
72
|
+
<td>${Math.round(run.successfulPageRate * 100)}%</td>
|
|
73
|
+
<td>${run.estimatedHostedCalls}</td>
|
|
74
|
+
<td class="${run.passed ? 'pass' : 'fail'}">${run.passed ? 'pass' : 'fail'}</td>
|
|
75
|
+
</tr>`).join('');
|
|
76
|
+
const comparisons = report.preprocessingComparisons.map((comparison) => `
|
|
77
|
+
<tr>
|
|
78
|
+
<td>${escapeHtml(comparison.fixtureId)}</td>
|
|
79
|
+
<td>${escapeHtml(comparison.providerProfile)}</td>
|
|
80
|
+
<td>${escapeHtml(comparison.baselineMode)} to ${escapeHtml(comparison.currentMode)}</td>
|
|
81
|
+
<td>${signedPercent(comparison.qualityDelta)}</td>
|
|
82
|
+
<td>${signedPercent(comparison.traceabilityDelta)}</td>
|
|
83
|
+
<td>${comparison.pagesDeskewedDelta}</td>
|
|
84
|
+
<td>${comparison.persistedRegionAssetsDelta}</td>
|
|
85
|
+
</tr>`).join('');
|
|
86
|
+
return `<!doctype html>
|
|
87
|
+
<html lang="en">
|
|
88
|
+
<head>
|
|
89
|
+
<meta charset="utf-8">
|
|
90
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
91
|
+
<title>GeotechCLI Benchmark Corpus</title>
|
|
92
|
+
<style>
|
|
93
|
+
body{margin:0;font-family:Inter,Arial,sans-serif;background:#f8fafc;color:#0f172a}
|
|
94
|
+
main{max-width:1120px;margin:0 auto;padding:32px 20px 56px}
|
|
95
|
+
h1{margin:0 0 8px;font-size:30px}
|
|
96
|
+
.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:22px 0}
|
|
97
|
+
.metric{background:white;border:1px solid #dbe5ea;border-radius:8px;padding:14px}
|
|
98
|
+
.metric strong{display:block;font-size:24px}
|
|
99
|
+
table{width:100%;border-collapse:collapse;background:white;border:1px solid #dbe5ea;border-radius:8px;overflow:hidden;margin:16px 0 30px}
|
|
100
|
+
th,td{padding:10px 12px;border-bottom:1px solid #e2e8f0;text-align:left;font-size:13px}
|
|
101
|
+
th{background:#0f172a;color:#f8fafc}
|
|
102
|
+
.pass{color:#0f766e;font-weight:700}.fail{color:#b91c1c;font-weight:700}
|
|
103
|
+
.note{color:#475569;font-size:13px}
|
|
104
|
+
</style>
|
|
105
|
+
</head>
|
|
106
|
+
<body>
|
|
107
|
+
<main>
|
|
108
|
+
<h1>GeotechCLI Benchmark Corpus</h1>
|
|
109
|
+
<p class="note">${escapeHtml(report.label ?? 'Internal R&D evidence benchmark')} generated ${escapeHtml(report.generatedAt)}. Review-gated strong-beta evidence, not production certification.</p>
|
|
110
|
+
<section class="summary">
|
|
111
|
+
<div class="metric"><span>Status</span><strong class="${report.summary.passed ? 'pass' : 'fail'}">${report.summary.passed ? 'PASS' : 'FAIL'}</strong></div>
|
|
112
|
+
<div class="metric"><span>Runs</span><strong>${report.summary.passedRuns}/${report.summary.runCount}</strong></div>
|
|
113
|
+
<div class="metric"><span>Traceability</span><strong>${Math.round(report.summary.averageTraceabilityRate * 100)}%</strong></div>
|
|
114
|
+
<div class="metric"><span>Preprocessing Quality</span><strong>${Math.round(report.summary.averagePreprocessingQualityScore * 100)}%</strong></div>
|
|
115
|
+
</section>
|
|
116
|
+
<h2>Runs</h2>
|
|
117
|
+
<table><thead><tr><th>Fixture</th><th>Category</th><th>Provider</th><th>Preprocessing</th><th>Trace</th><th>GM score</th><th>Quality</th><th>Review gates</th><th>Pages</th><th>Calls</th><th>Status</th></tr></thead><tbody>${rows}</tbody></table>
|
|
118
|
+
<h2>Preprocessing Comparisons</h2>
|
|
119
|
+
<table><thead><tr><th>Fixture</th><th>Provider</th><th>Modes</th><th>Quality delta</th><th>Trace delta</th><th>Deskew delta</th><th>Crop Asset delta</th></tr></thead><tbody>${comparisons || '<tr><td colspan="7">No paired preprocessing-mode comparisons available.</td></tr>'}</tbody></table>
|
|
120
|
+
${report.failures.length ? `<h2>Failures</h2><ul>${report.failures.map((failure) => `<li>${escapeHtml(failure)}</li>`).join('')}</ul>` : ''}
|
|
121
|
+
${report.warnings.length ? `<h2>Warnings</h2><ul>${report.warnings.map((warning) => `<li>${escapeHtml(warning)}</li>`).join('')}</ul>` : ''}
|
|
122
|
+
</main>
|
|
123
|
+
</body>
|
|
124
|
+
</html>
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
function buildCorpusRun(input) {
|
|
128
|
+
const benchmark = input.benchmark;
|
|
129
|
+
const providerProfile = input.providerProfile
|
|
130
|
+
?? benchmark.provider?.profile
|
|
131
|
+
?? benchmark.provider?.provider
|
|
132
|
+
?? 'unknown';
|
|
133
|
+
const preprocessingMode = input.preprocessingMode
|
|
134
|
+
?? benchmark.preprocessing?.modes?.[0]
|
|
135
|
+
?? 'unknown';
|
|
136
|
+
const estimatedHostedCalls = totalHostedCalls(benchmark);
|
|
137
|
+
const latencyMs = benchmark.latency?.totalKnownLatencyMs ?? benchmark.job?.durationMs ?? null;
|
|
138
|
+
const run = {
|
|
139
|
+
fixtureId: input.fixture.id,
|
|
140
|
+
category: input.fixture.category,
|
|
141
|
+
sourceType: input.fixture.sourceType,
|
|
142
|
+
providerProfile,
|
|
143
|
+
preprocessingMode,
|
|
144
|
+
totalPages: finiteNumber(benchmark.source?.totalPages),
|
|
145
|
+
successfulPages: finiteNumber(benchmark.source?.successfulPages),
|
|
146
|
+
failedPages: finiteNumber(benchmark.source?.failedPages),
|
|
147
|
+
successfulPageRate: successfulPageRate(benchmark),
|
|
148
|
+
documentConfidence: finiteNumber(benchmark.document?.confidence),
|
|
149
|
+
parseStatus: benchmark.document?.parseStatus ?? 'unknown',
|
|
150
|
+
cacheHitRate: finiteNumber(benchmark.evidenceCache?.hitRate),
|
|
151
|
+
estimatedHostedCalls,
|
|
152
|
+
directTraceabilityRate: finiteNumber(benchmark.traceability?.directParameterTraceabilityRate),
|
|
153
|
+
parametersWithoutSourcePage: finiteNumber(benchmark.traceability?.parametersWithoutSourcePage),
|
|
154
|
+
groundModelReadinessScore: finiteNumber(benchmark.groundModelReadiness?.score),
|
|
155
|
+
groundModelReadinessStatus: benchmark.groundModelReadiness?.status ?? 'unknown',
|
|
156
|
+
preprocessingQualityScore: finiteNumber(benchmark.preprocessing?.averageQualityScore),
|
|
157
|
+
preprocessingRegionQualityScore: finiteNumber(benchmark.preprocessing?.averageRegionQualityScore),
|
|
158
|
+
pagesDeskewed: finiteNumber(benchmark.preprocessing?.pagesDeskewed),
|
|
159
|
+
preprocessingRegions: finiteNumber(benchmark.preprocessing?.preprocessingRegions),
|
|
160
|
+
persistedRegionAssets: finiteNumber(benchmark.preprocessing?.persistedRegionAssets),
|
|
161
|
+
latencyMs,
|
|
162
|
+
boreholeIds: Array.isArray(benchmark.groundModelReadiness?.boreholeIds)
|
|
163
|
+
? benchmark.groundModelReadiness.boreholeIds
|
|
164
|
+
: [],
|
|
165
|
+
reviewGates: collectReviewGates(benchmark),
|
|
166
|
+
};
|
|
167
|
+
const failures = [
|
|
168
|
+
...validateRunExpectations(input.fixture, run),
|
|
169
|
+
...(input.fixture.expectations.requireFemExecutionBoundarySafe
|
|
170
|
+
? validateFemExecutionBoundary(benchmark)
|
|
171
|
+
: []),
|
|
172
|
+
];
|
|
173
|
+
const warnings = buildRunWarnings(input.fixture, run);
|
|
174
|
+
return {
|
|
175
|
+
...run,
|
|
176
|
+
passed: failures.length === 0,
|
|
177
|
+
failures,
|
|
178
|
+
warnings,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function validateRunExpectations(fixture, run) {
|
|
182
|
+
const expected = fixture.expectations;
|
|
183
|
+
return [
|
|
184
|
+
expected.minSuccessfulPageRate != null && run.successfulPageRate < expected.minSuccessfulPageRate
|
|
185
|
+
? `successful page rate ${formatRatio(run.successfulPageRate)} below ${formatRatio(expected.minSuccessfulPageRate)}`
|
|
186
|
+
: null,
|
|
187
|
+
expected.maxFailedPages != null && run.failedPages > expected.maxFailedPages
|
|
188
|
+
? `failed pages ${run.failedPages} above ${expected.maxFailedPages}`
|
|
189
|
+
: null,
|
|
190
|
+
expected.minCacheHitRate != null && run.cacheHitRate < expected.minCacheHitRate
|
|
191
|
+
? `cache hit rate ${formatRatio(run.cacheHitRate)} below ${formatRatio(expected.minCacheHitRate)}`
|
|
192
|
+
: null,
|
|
193
|
+
expected.minTraceabilityRate != null && run.directTraceabilityRate < expected.minTraceabilityRate
|
|
194
|
+
? `traceability ${formatRatio(run.directTraceabilityRate)} below ${formatRatio(expected.minTraceabilityRate)}`
|
|
195
|
+
: null,
|
|
196
|
+
expected.minGroundModelReadinessScore != null && run.groundModelReadinessScore < expected.minGroundModelReadinessScore
|
|
197
|
+
? `GroundModel readiness ${run.groundModelReadinessScore} below ${expected.minGroundModelReadinessScore}`
|
|
198
|
+
: null,
|
|
199
|
+
expected.minAverageQualityScore != null && run.preprocessingQualityScore < expected.minAverageQualityScore
|
|
200
|
+
? `preprocessing quality ${formatRatio(run.preprocessingQualityScore)} below ${formatRatio(expected.minAverageQualityScore)}`
|
|
201
|
+
: null,
|
|
202
|
+
expected.maxEstimatedHostedCalls != null && run.estimatedHostedCalls > expected.maxEstimatedHostedCalls
|
|
203
|
+
? `estimated hosted calls ${run.estimatedHostedCalls} above ${expected.maxEstimatedHostedCalls}`
|
|
204
|
+
: null,
|
|
205
|
+
expected.maxParametersWithoutSourcePage != null && run.parametersWithoutSourcePage > expected.maxParametersWithoutSourcePage
|
|
206
|
+
? `parameters without source page ${run.parametersWithoutSourcePage} above ${expected.maxParametersWithoutSourcePage}`
|
|
207
|
+
: null,
|
|
208
|
+
...(expected.expectedBoreholeIds ?? []).flatMap((id) => run.boreholeIds.includes(id) ? [] : [`expected borehole ${id} missing`]),
|
|
209
|
+
].filter((value) => value != null);
|
|
210
|
+
}
|
|
211
|
+
function validateFixtureCoverage(fixtures, runs) {
|
|
212
|
+
const failures = [];
|
|
213
|
+
for (const fixture of fixtures) {
|
|
214
|
+
const fixtureRuns = runs.filter((run) => run.fixtureId === fixture.id);
|
|
215
|
+
for (const mode of fixture.expectations.requiredPreprocessingModes ?? []) {
|
|
216
|
+
if (!fixtureRuns.some((run) => run.preprocessingMode === mode)) {
|
|
217
|
+
failures.push(`${fixture.id}: missing preprocessing mode ${mode}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
for (const profile of fixture.expectations.requiredProviderProfiles ?? []) {
|
|
221
|
+
if (!fixtureRuns.some((run) => run.providerProfile === profile)) {
|
|
222
|
+
failures.push(`${fixture.id}: missing provider profile ${profile}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return failures;
|
|
227
|
+
}
|
|
228
|
+
function validateFemExecutionBoundary(benchmark) {
|
|
229
|
+
const fem = benchmark.femDraftReadiness;
|
|
230
|
+
if (!fem) {
|
|
231
|
+
return ['FEM draft readiness block missing from benchmark output'];
|
|
232
|
+
}
|
|
233
|
+
const agentRunAllowedRoutes = fem.agentRunAllowedRoutes ?? [];
|
|
234
|
+
const agentWebglAllowedRoutes = fem.agentWebglAllowedRoutes ?? [];
|
|
235
|
+
const agentResultManifestAllowedRoutes = fem.agentResultManifestAllowedRoutes ?? [];
|
|
236
|
+
const caseOutputAvailableRoutes = fem.caseOutputAvailableRoutes ?? [];
|
|
237
|
+
const humanRunCommandAvailableRoutes = fem.humanRunCommandAvailableRoutes ?? [];
|
|
238
|
+
const staleRunCommandRoutes = fem.staleRunCommandRoutes ?? [];
|
|
239
|
+
const failures = [
|
|
240
|
+
fem.canAutoProceed
|
|
241
|
+
? 'FEM draft readiness became auto-proceedable'
|
|
242
|
+
: null,
|
|
243
|
+
agentRunAllowedRoutes.length > 0
|
|
244
|
+
? `FEM benchmark exposed agent-run routes: ${routeList(agentRunAllowedRoutes)}`
|
|
245
|
+
: null,
|
|
246
|
+
agentWebglAllowedRoutes.length > 0
|
|
247
|
+
? `FEM benchmark exposed agent WebGL routes: ${routeList(agentWebglAllowedRoutes)}`
|
|
248
|
+
: null,
|
|
249
|
+
agentResultManifestAllowedRoutes.length > 0
|
|
250
|
+
? `FEM benchmark exposed agent result-manifest routes: ${routeList(agentResultManifestAllowedRoutes)}`
|
|
251
|
+
: null,
|
|
252
|
+
caseOutputAvailableRoutes.length > 0
|
|
253
|
+
? `FEM benchmark exposed unreviewed case-output routes: ${routeList(caseOutputAvailableRoutes)}`
|
|
254
|
+
: null,
|
|
255
|
+
humanRunCommandAvailableRoutes.length > 0
|
|
256
|
+
? `FEM benchmark exposed unreviewed human-run routes: ${routeList(humanRunCommandAvailableRoutes)}`
|
|
257
|
+
: null,
|
|
258
|
+
staleRunCommandRoutes.length > 0
|
|
259
|
+
? `FEM benchmark recommended stale run commands: ${routeList(staleRunCommandRoutes)}`
|
|
260
|
+
: null,
|
|
261
|
+
];
|
|
262
|
+
for (const route of fem.routes ?? []) {
|
|
263
|
+
const boundary = route.executionBoundary;
|
|
264
|
+
if (!boundary) {
|
|
265
|
+
failures.push(`FEM route ${route.objective} has no execution boundary`);
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
failures.push(route.agentRunAllowed || boundary.agentRunAllowed
|
|
269
|
+
? `FEM route ${route.objective} exposed agent solver execution`
|
|
270
|
+
: null, boundary.agentWebglRenderAllowed
|
|
271
|
+
? `FEM route ${route.objective} exposed agent WebGL rendering`
|
|
272
|
+
: null, boundary.agentResultManifestAllowed
|
|
273
|
+
? `FEM route ${route.objective} exposed agent result-manifest creation`
|
|
274
|
+
: null, boundary.caseOutputAvailable
|
|
275
|
+
? `FEM route ${route.objective} exposed unreviewed case output`
|
|
276
|
+
: null, boundary.humanRunCommandAvailable
|
|
277
|
+
? `FEM route ${route.objective} exposed an unreviewed human run command`
|
|
278
|
+
: null, !boundary.humanReviewRequired
|
|
279
|
+
? `FEM route ${route.objective} no longer requires human review`
|
|
280
|
+
: null, /\bfem run\b/i.test(route.recommendedCommand ?? '')
|
|
281
|
+
? `FEM route ${route.objective} recommended a run command instead of a draft command`
|
|
282
|
+
: null);
|
|
283
|
+
}
|
|
284
|
+
return [...new Set(failures.filter((value) => value != null))];
|
|
285
|
+
}
|
|
286
|
+
function buildRunWarnings(fixture, run) {
|
|
287
|
+
return [
|
|
288
|
+
run.preprocessingMode === 'unknown' ? 'preprocessing mode unavailable' : null,
|
|
289
|
+
run.providerProfile === 'unknown' ? 'provider profile unavailable' : null,
|
|
290
|
+
run.sourceType === 'synthetic' ? 'synthetic benchmark fixture; use for guardrail logic, not production accuracy claims' : null,
|
|
291
|
+
fixture.sourceType === 'local-private' ? 'local private fixture; do not commit source report bytes' : null,
|
|
292
|
+
].filter((value) => value != null);
|
|
293
|
+
}
|
|
294
|
+
function collectReviewGates(benchmark) {
|
|
295
|
+
return uniqueSorted([
|
|
296
|
+
...(Array.isArray(benchmark.document?.confidenceBreakdown?.reviewGates)
|
|
297
|
+
? benchmark.document.confidenceBreakdown.reviewGates
|
|
298
|
+
: []),
|
|
299
|
+
...(Array.isArray(benchmark.provider?.reviewGates)
|
|
300
|
+
? benchmark.provider.reviewGates
|
|
301
|
+
: []),
|
|
302
|
+
]);
|
|
303
|
+
}
|
|
304
|
+
function buildPreprocessingComparisons(runs) {
|
|
305
|
+
const grouped = new Map();
|
|
306
|
+
for (const run of runs) {
|
|
307
|
+
const key = `${run.fixtureId}::${run.providerProfile}`;
|
|
308
|
+
grouped.set(key, [...(grouped.get(key) ?? []), run]);
|
|
309
|
+
}
|
|
310
|
+
const comparisons = [];
|
|
311
|
+
for (const group of grouped.values()) {
|
|
312
|
+
const baseline = group.find((run) => run.preprocessingMode === 'none') ?? group[0];
|
|
313
|
+
if (!baseline) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const candidates = group
|
|
317
|
+
.filter((run) => run.preprocessingMode !== baseline.preprocessingMode)
|
|
318
|
+
.sort((left, right) => preprocessingModeRank(left.preprocessingMode) - preprocessingModeRank(right.preprocessingMode));
|
|
319
|
+
for (const current of candidates) {
|
|
320
|
+
comparisons.push({
|
|
321
|
+
fixtureId: current.fixtureId,
|
|
322
|
+
providerProfile: current.providerProfile,
|
|
323
|
+
baselineMode: baseline.preprocessingMode,
|
|
324
|
+
currentMode: current.preprocessingMode,
|
|
325
|
+
traceabilityDelta: roundRatio(current.directTraceabilityRate - baseline.directTraceabilityRate),
|
|
326
|
+
readinessDelta: current.groundModelReadinessScore - baseline.groundModelReadinessScore,
|
|
327
|
+
qualityDelta: roundRatio(current.preprocessingQualityScore - baseline.preprocessingQualityScore),
|
|
328
|
+
regionQualityDelta: roundRatio(current.preprocessingRegionQualityScore - baseline.preprocessingRegionQualityScore),
|
|
329
|
+
hostedCallDelta: current.estimatedHostedCalls - baseline.estimatedHostedCalls,
|
|
330
|
+
pagesDeskewedDelta: current.pagesDeskewed - baseline.pagesDeskewed,
|
|
331
|
+
persistedRegionAssetsDelta: current.persistedRegionAssets - baseline.persistedRegionAssets,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return comparisons.sort((left, right) => left.fixtureId.localeCompare(right.fixtureId)
|
|
336
|
+
|| left.providerProfile.localeCompare(right.providerProfile)
|
|
337
|
+
|| preprocessingModeRank(left.currentMode) - preprocessingModeRank(right.currentMode));
|
|
338
|
+
}
|
|
339
|
+
function preprocessingModeRank(mode) {
|
|
340
|
+
if (mode === 'none')
|
|
341
|
+
return 0;
|
|
342
|
+
if (mode === 'ocr-optimized')
|
|
343
|
+
return 1;
|
|
344
|
+
if (mode === 'region-v2')
|
|
345
|
+
return 2;
|
|
346
|
+
return 10;
|
|
347
|
+
}
|
|
348
|
+
function summarizeCorpus(fixtures, runs, failures) {
|
|
349
|
+
return {
|
|
350
|
+
fixtureCount: fixtures.length,
|
|
351
|
+
runCount: runs.length,
|
|
352
|
+
passedRuns: runs.filter((run) => run.passed).length,
|
|
353
|
+
failedRuns: runs.filter((run) => !run.passed).length,
|
|
354
|
+
passed: failures.length === 0,
|
|
355
|
+
categories: countBy(fixtures.map((fixture) => fixture.category)),
|
|
356
|
+
providerProfiles: uniqueSorted(runs.map((run) => run.providerProfile)),
|
|
357
|
+
preprocessingModes: uniqueSorted(runs.map((run) => run.preprocessingMode)),
|
|
358
|
+
averageConfidence: average(runs.map((run) => run.documentConfidence)),
|
|
359
|
+
averageTraceabilityRate: average(runs.map((run) => run.directTraceabilityRate)),
|
|
360
|
+
averageGroundModelReadinessScore: Math.round(average(runs.map((run) => run.groundModelReadinessScore))),
|
|
361
|
+
averagePreprocessingQualityScore: average(runs.map((run) => run.preprocessingQualityScore)),
|
|
362
|
+
totalEstimatedHostedCalls: runs.reduce((sum, run) => sum + run.estimatedHostedCalls, 0),
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
function normalizeFixtures(fixtures) {
|
|
366
|
+
const lookup = new Map();
|
|
367
|
+
for (const fixture of fixtures) {
|
|
368
|
+
lookup.set(fixture.id, {
|
|
369
|
+
...fixture,
|
|
370
|
+
expectations: {
|
|
371
|
+
...fixture.expectations,
|
|
372
|
+
knownLimitations: [...new Set(fixture.expectations.knownLimitations ?? [])],
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
return [...lookup.values()].sort((left, right) => left.id.localeCompare(right.id));
|
|
377
|
+
}
|
|
378
|
+
function totalHostedCalls(benchmark) {
|
|
379
|
+
return finiteNumber(benchmark.hostedCallEstimate?.pageExtraction)
|
|
380
|
+
+ finiteNumber(benchmark.hostedCallEstimate?.layoutOcr)
|
|
381
|
+
+ finiteNumber(benchmark.hostedCallEstimate?.vision);
|
|
382
|
+
}
|
|
383
|
+
function successfulPageRate(benchmark) {
|
|
384
|
+
const totalPages = finiteNumber(benchmark.source?.totalPages);
|
|
385
|
+
const successfulPages = finiteNumber(benchmark.source?.successfulPages);
|
|
386
|
+
return totalPages > 0 ? roundRatio(successfulPages / totalPages) : 0;
|
|
387
|
+
}
|
|
388
|
+
function routeList(values) {
|
|
389
|
+
return values && values.length > 0 ? values.join(', ') : 'none';
|
|
390
|
+
}
|
|
391
|
+
function formatReviewGates(values) {
|
|
392
|
+
return values.length > 0 ? values.join(', ') : 'none';
|
|
393
|
+
}
|
|
394
|
+
function countBy(values) {
|
|
395
|
+
const counts = {};
|
|
396
|
+
for (const value of values) {
|
|
397
|
+
counts[value] = (counts[value] ?? 0) + 1;
|
|
398
|
+
}
|
|
399
|
+
return Object.fromEntries(Object.entries(counts).sort(([left], [right]) => left.localeCompare(right)));
|
|
400
|
+
}
|
|
401
|
+
function uniqueSorted(values) {
|
|
402
|
+
return [...new Set(values.filter(Boolean))].sort((left, right) => left.localeCompare(right));
|
|
403
|
+
}
|
|
404
|
+
function average(values) {
|
|
405
|
+
const finite = values.filter((value) => Number.isFinite(value));
|
|
406
|
+
return finite.length > 0 ? roundRatio(finite.reduce((sum, value) => sum + value, 0) / finite.length) : 0;
|
|
407
|
+
}
|
|
408
|
+
function finiteNumber(value) {
|
|
409
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : 0;
|
|
410
|
+
}
|
|
411
|
+
function roundRatio(value) {
|
|
412
|
+
return Math.round(value * 1000) / 1000;
|
|
413
|
+
}
|
|
414
|
+
function normalizeGeneratedAt(value) {
|
|
415
|
+
if (value instanceof Date) {
|
|
416
|
+
return value.toISOString();
|
|
417
|
+
}
|
|
418
|
+
return typeof value === 'string' && value.trim() ? value.trim() : new Date().toISOString();
|
|
419
|
+
}
|
|
420
|
+
function formatRatio(value) {
|
|
421
|
+
return `${Math.round(value * 100)}%`;
|
|
422
|
+
}
|
|
423
|
+
function signedPercent(value) {
|
|
424
|
+
const sign = value > 0 ? '+' : '';
|
|
425
|
+
return `${sign}${Math.round(value * 100)}%`;
|
|
426
|
+
}
|
|
427
|
+
function escapeHtml(value) {
|
|
428
|
+
return value
|
|
429
|
+
.replaceAll('&', '&')
|
|
430
|
+
.replaceAll('<', '<')
|
|
431
|
+
.replaceAll('>', '>')
|
|
432
|
+
.replaceAll('"', '"');
|
|
433
|
+
}
|
|
434
|
+
function escapeSvg(value) {
|
|
435
|
+
return escapeHtml(value).replaceAll("'", ''');
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=geotech-benchmark-corpus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geotech-benchmark-corpus.js","sourceRoot":"","sources":["../../src/ingest/geotech-benchmark-corpus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { PdfPageClassification } from './pdf.js';
|
|
2
2
|
import type { GeotechDocumentIngestResult, GeotechDocumentPageAudit, GeotechDocumentPageEvidenceCacheStatus } from './geotech-document.js';
|
|
3
|
+
import type { LLMConfig, ProviderCapabilityProfile } from '../llm/types.js';
|
|
3
4
|
import type { DocumentTextHintSource } from '../vision/ocr.js';
|
|
4
5
|
import { type DocumentEvidenceMethod } from './document-evidence-packet.js';
|
|
6
|
+
import { type FemRouteObjective } from '../fem/index.js';
|
|
5
7
|
export interface GeotechDocumentBenchmarkJobContext {
|
|
6
8
|
jobId?: string;
|
|
7
9
|
createdAt?: string;
|
|
@@ -14,6 +16,13 @@ export interface GeotechDocumentBenchmarkOptions {
|
|
|
14
16
|
job?: GeotechDocumentBenchmarkJobContext;
|
|
15
17
|
label?: string;
|
|
16
18
|
generatedAt?: string | Date;
|
|
19
|
+
providerConfig?: Pick<LLMConfig, 'provider' | 'modelId' | 'visionModelId'>;
|
|
20
|
+
fixture?: {
|
|
21
|
+
id?: string;
|
|
22
|
+
category?: string;
|
|
23
|
+
source?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
};
|
|
17
26
|
}
|
|
18
27
|
export interface GeotechDocumentBenchmark {
|
|
19
28
|
kind: 'geotech-document-benchmark';
|
|
@@ -21,6 +30,23 @@ export interface GeotechDocumentBenchmark {
|
|
|
21
30
|
generatedAt: string;
|
|
22
31
|
label?: string;
|
|
23
32
|
job?: GeotechDocumentBenchmarkJobContext;
|
|
33
|
+
provider?: {
|
|
34
|
+
provider: LLMConfig['provider'];
|
|
35
|
+
profile: ProviderCapabilityProfile['id'];
|
|
36
|
+
modelId: string | null;
|
|
37
|
+
visionModelId: string | null;
|
|
38
|
+
capabilities: ProviderCapabilityProfile['capabilities'];
|
|
39
|
+
likelyFreeRoute: boolean;
|
|
40
|
+
contextStrategy: ProviderCapabilityProfile['contextStrategy'];
|
|
41
|
+
reviewGates: string[];
|
|
42
|
+
preprocessingPolicy: ProviderCapabilityProfile['preprocessingPolicy'];
|
|
43
|
+
};
|
|
44
|
+
fixture?: {
|
|
45
|
+
id?: string;
|
|
46
|
+
category?: string;
|
|
47
|
+
source?: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
};
|
|
24
50
|
source: {
|
|
25
51
|
fileName?: string;
|
|
26
52
|
filePath?: string;
|
|
@@ -69,6 +95,40 @@ export interface GeotechDocumentBenchmark {
|
|
|
69
95
|
preprocessingVersions: string[];
|
|
70
96
|
schemaVersions: number[];
|
|
71
97
|
};
|
|
98
|
+
preprocessing: {
|
|
99
|
+
versions: string[];
|
|
100
|
+
modes: string[];
|
|
101
|
+
pagesWithPreprocessing: number;
|
|
102
|
+
pagesWithoutPreprocessing: number;
|
|
103
|
+
pagesWithRegions: number;
|
|
104
|
+
totalRegions: number;
|
|
105
|
+
preprocessingRegions: number;
|
|
106
|
+
layoutRegions: number;
|
|
107
|
+
pageRegionCoverage: number;
|
|
108
|
+
pagesWithPreprocessingMetadata: number;
|
|
109
|
+
operationCounts: Record<string, number>;
|
|
110
|
+
regionLabelCounts: Record<string, number>;
|
|
111
|
+
persistedRegionAssets: number;
|
|
112
|
+
persistedRegionAssetBytes: number;
|
|
113
|
+
pagesDeskewed: number;
|
|
114
|
+
averageDeskewAngleDeg: number;
|
|
115
|
+
averageQualityScore: number;
|
|
116
|
+
averageRegionQualityScore: number;
|
|
117
|
+
lowQualityRegions: number;
|
|
118
|
+
qualityWarningCounts: Record<string, number>;
|
|
119
|
+
sourceCategories: Record<'native-text' | 'layout-ocr' | 'vision' | 'none', number>;
|
|
120
|
+
};
|
|
121
|
+
latency: {
|
|
122
|
+
pageLatencyMs: {
|
|
123
|
+
count: number;
|
|
124
|
+
total: number;
|
|
125
|
+
average: number;
|
|
126
|
+
max: number;
|
|
127
|
+
};
|
|
128
|
+
totalKnownLatencyMs: number;
|
|
129
|
+
jobDurationMs?: number;
|
|
130
|
+
synthesisLatencyMs?: number;
|
|
131
|
+
};
|
|
72
132
|
retainedSignals: {
|
|
73
133
|
materials: number;
|
|
74
134
|
classifications: number;
|
|
@@ -99,6 +159,55 @@ export interface GeotechDocumentBenchmark {
|
|
|
99
159
|
missingCriticalData: string[];
|
|
100
160
|
gates: string[];
|
|
101
161
|
};
|
|
162
|
+
femDraftReadiness?: {
|
|
163
|
+
schemaVersion: 1;
|
|
164
|
+
providerNeutral: true;
|
|
165
|
+
canAutoProceed: false;
|
|
166
|
+
candidateRoutes: number;
|
|
167
|
+
implementedPreviewRoutes: FemRouteObjective[];
|
|
168
|
+
contractOnlyRoutes: FemRouteObjective[];
|
|
169
|
+
agentRunAllowedRoutes: FemRouteObjective[];
|
|
170
|
+
agentWebglAllowedRoutes: FemRouteObjective[];
|
|
171
|
+
agentResultManifestAllowedRoutes: FemRouteObjective[];
|
|
172
|
+
caseOutputAvailableRoutes: FemRouteObjective[];
|
|
173
|
+
humanRunCommandAvailableRoutes: FemRouteObjective[];
|
|
174
|
+
draftCommandRoutes: FemRouteObjective[];
|
|
175
|
+
runCommandRoutes: FemRouteObjective[];
|
|
176
|
+
staleRunCommandRoutes: FemRouteObjective[];
|
|
177
|
+
gates: string[];
|
|
178
|
+
routes: Array<{
|
|
179
|
+
objective: FemRouteObjective;
|
|
180
|
+
status: string;
|
|
181
|
+
executionMode: string;
|
|
182
|
+
agentRunAllowed: false;
|
|
183
|
+
executionBoundary: {
|
|
184
|
+
schemaVersion: 'fem-benchmark-execution-boundary.v1';
|
|
185
|
+
agentRunAllowed: false;
|
|
186
|
+
agentWebglRenderAllowed: false;
|
|
187
|
+
agentResultManifestAllowed: false;
|
|
188
|
+
humanReviewRequired: true;
|
|
189
|
+
caseOutputAvailable: false;
|
|
190
|
+
humanRunCommandAvailable: false;
|
|
191
|
+
draftCommand?: string;
|
|
192
|
+
humanRunCommandTemplate?: string;
|
|
193
|
+
blockedReasons: string[];
|
|
194
|
+
};
|
|
195
|
+
recommendedCommand?: string;
|
|
196
|
+
runCommandTemplate?: string;
|
|
197
|
+
readinessStatus: GeotechDocumentBenchmark['groundModelReadiness']['status'];
|
|
198
|
+
readinessScore: number;
|
|
199
|
+
requiredEvidence: string[];
|
|
200
|
+
requiredUserInputs: string[];
|
|
201
|
+
reviewGates: string[];
|
|
202
|
+
limitations: string[];
|
|
203
|
+
contractReadiness?: {
|
|
204
|
+
nonRunnableReason: string;
|
|
205
|
+
blockedUntil: string[];
|
|
206
|
+
allowedAgentActions: string[];
|
|
207
|
+
disallowedAgentActions: string[];
|
|
208
|
+
};
|
|
209
|
+
}>;
|
|
210
|
+
};
|
|
102
211
|
evidenceContract: {
|
|
103
212
|
schemaVersion: number;
|
|
104
213
|
providerNeutral: true;
|
|
@@ -130,6 +239,23 @@ export interface GeotechDocumentBenchmarkPage {
|
|
|
130
239
|
cacheEntryId?: string;
|
|
131
240
|
modelVersion?: string;
|
|
132
241
|
preprocessingVersion?: string;
|
|
242
|
+
preprocessingPipelineVersion?: string;
|
|
243
|
+
preprocessingPolicy?: string;
|
|
244
|
+
preprocessingQualityScore?: number;
|
|
245
|
+
preprocessingDeskewAngleDeg?: number;
|
|
246
|
+
preprocessingDeskewApplied?: boolean;
|
|
247
|
+
preprocessingQualityWarnings: string[];
|
|
248
|
+
preprocessingOperations: string[];
|
|
249
|
+
preprocessingRegionLabels: string[];
|
|
250
|
+
preprocessingRegionQualityScores: number[];
|
|
251
|
+
preprocessingOperationCount: number;
|
|
252
|
+
preprocessingRegionCount: number;
|
|
253
|
+
preprocessingAssetCount: number;
|
|
254
|
+
preprocessingAssetBytes: number;
|
|
255
|
+
preprocessingLowQualityRegionCount: number;
|
|
256
|
+
layoutRegionCount: number;
|
|
257
|
+
latencyMs?: number;
|
|
258
|
+
regionCount: number;
|
|
133
259
|
}
|
|
134
260
|
export interface GeotechDocumentBenchmarkComparison {
|
|
135
261
|
kind: 'geotech-document-benchmark-comparison';
|
|
@@ -144,6 +270,13 @@ export interface GeotechDocumentBenchmarkComparison {
|
|
|
144
270
|
estimatedHostedCalls: number;
|
|
145
271
|
traceabilityRate: number;
|
|
146
272
|
groundModelReadinessScore: number;
|
|
273
|
+
preprocessing: {
|
|
274
|
+
modeChanged: boolean;
|
|
275
|
+
averageQualityScore: number;
|
|
276
|
+
averageRegionQualityScore: number;
|
|
277
|
+
pagesDeskewed: number;
|
|
278
|
+
persistedRegionAssets: number;
|
|
279
|
+
};
|
|
147
280
|
};
|
|
148
281
|
passed: boolean;
|
|
149
282
|
regressions: string[];
|