@geotechcli/core 0.4.33 → 0.4.34
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/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/geotech-document.d.ts +17 -0
- package/dist/ingest/geotech-document.d.ts.map +1 -1
- package/dist/ingest/geotech-document.js +241 -22
- package/dist/ingest/geotech-document.js.map +1 -1
- package/dist/ingest/geotech-extract.d.ts.map +1 -1
- package/dist/ingest/geotech-extract.js +6 -2
- package/dist/ingest/geotech-extract.js.map +1 -1
- package/dist/ingest/job-store.d.ts +1 -1
- package/dist/ingest/job-store.d.ts.map +1 -1
- package/dist/ingest/job-worker.d.ts.map +1 -1
- package/dist/ingest/job-worker.js +49 -16
- package/dist/ingest/job-worker.js.map +1 -1
- package/dist/llm/providers/hosted-beta.d.ts.map +1 -1
- package/dist/llm/providers/hosted-beta.js +1 -0
- package/dist/llm/providers/hosted-beta.js.map +1 -1
- package/dist/llm/providers/zhipu.d.ts.map +1 -1
- package/dist/llm/providers/zhipu.js +3 -0
- package/dist/llm/providers/zhipu.js.map +1 -1
- package/dist/llm/router.d.ts +2 -0
- package/dist/llm/router.d.ts.map +1 -1
- package/dist/llm/router.js +2 -0
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/types.d.ts +1 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js.map +1 -1
- package/dist/meta/metadata.json +2 -2
- package/dist/report/html.d.ts.map +1 -1
- package/dist/report/html.js +226 -48
- package/dist/report/html.js.map +1 -1
- package/dist/report/ingest-dossier.d.ts +1 -0
- package/dist/report/ingest-dossier.d.ts.map +1 -1
- package/dist/report/ingest-dossier.js +211 -34
- package/dist/report/ingest-dossier.js.map +1 -1
- package/dist/vision/geotech-document.d.ts +1 -0
- package/dist/vision/geotech-document.d.ts.map +1 -1
- package/dist/vision/geotech-document.js +156 -5
- package/dist/vision/geotech-document.js.map +1 -1
- package/dist/vision/layout-ocr.d.ts +44 -0
- package/dist/vision/layout-ocr.d.ts.map +1 -0
- package/dist/vision/layout-ocr.js +216 -0
- package/dist/vision/layout-ocr.js.map +1 -0
- package/dist/vision/ocr.d.ts +5 -1
- package/dist/vision/ocr.d.ts.map +1 -1
- package/dist/vision/ocr.js +33 -2
- package/dist/vision/ocr.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { loadEvidenceRecord, listEvidenceRecords, persistEvidenceRecord, persist
|
|
|
20
20
|
export { toolRegistry, type ToolDefinition, type ToolResult, } from './agents/tools.js';
|
|
21
21
|
export { analyzeCoreBox, classifyRMRFromImage, classifySoilFromDescription, interpretBoreholeLog, interpretBoreholeLogWithContext, mergeBoreholeLogPages, queryGBRDocument, interpretSensorImage, type ParseSafety, type ParseStatus, type CoreBoxAnalysisResult, type HybridRMRResult, type SoilClassificationFromTextResult, type BoreholeInterpretation, type BoreholeLayer, type BoreholeLocation, type BoreholeLogContext, type BoreholeLogPageResult, type SensorInterpretation, } from './vision/index.js';
|
|
22
22
|
export { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, type GeotechDocumentContext, type GeotechDocumentInsight, type GeotechDocumentClassification, type GeotechMaterialObservation, type GeotechParameterObservation, } from './vision/geotech-document.js';
|
|
23
|
+
export { parseDocumentLayoutWithGlmOcr, supportsGlmOcrLayoutParsing, type GlmOcrLayoutElement, type GlmOcrLayoutPage, type GlmOcrLayoutResult, } from './vision/layout-ocr.js';
|
|
23
24
|
export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, type GeneratedReport, type ReportSection, type BuildIngestDossierOptions, type CaseFileGeneratedReport, type CaseFileReportInput, type GenerateStoredCaseFileReportOptions, type IngestDossier, type IngestDossierApproval, type IngestDossierBadge, type IngestDossierFindingGroup, type IngestDossierMetric, type IngestDossierNarrativeSection, type IngestDossierPageCard, type IngestDossierSourceResult, type IngestDossierStoredReview, type IngestDossierTable, type IngestDossierTone, } from './report/index.js';
|
|
24
25
|
export { exportGeoJSON, exportBoreholeGeoJSON, exportDXF, exportBoreholeProfileDXF, exportCSV, exportJSON, type GeoJSONFeatureInput, type DXFEntity, } from './export/index.js';
|
|
25
26
|
export { InMemoryUsageStore, checkUsageAndAbuse, generateFingerprint, detectSuspiciousActivity, type UsageRecord, type UsageStore, type AbuseCheckResult, } from './llm/middleware/metering.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,cAAc,gBAAgB,CAAC;AAG/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGzI,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EACpE,cAAc,EAAE,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EAClE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAClE,eAAe,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,sBAAsB,EACvF,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAC3E,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EACxF,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,GACrD,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,EACnC,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export { loadEvidenceRecord, listEvidenceRecords, persistEvidenceRecord, persist
|
|
|
29
29
|
export { toolRegistry, } from './agents/tools.js';
|
|
30
30
|
export { analyzeCoreBox, classifyRMRFromImage, classifySoilFromDescription, interpretBoreholeLog, interpretBoreholeLogWithContext, mergeBoreholeLogPages, queryGBRDocument, interpretSensorImage, } from './vision/index.js';
|
|
31
31
|
export { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, } from './vision/geotech-document.js';
|
|
32
|
+
export { parseDocumentLayoutWithGlmOcr, supportsGlmOcrLayoutParsing, } from './vision/layout-ocr.js';
|
|
32
33
|
// Report generation
|
|
33
34
|
export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, } from './report/index.js';
|
|
34
35
|
// Export formats
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,cAAc,gBAAgB,CAAC;AAE/B,sBAAsB;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,mCAAmC;AACnC,cAAc,gBAAgB,CAAC;AAE/B,gBAAgB;AAChB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,4BAA4B;AAC5B,cAAc,mBAAmB,CAAC;AAElC,yBAAyB;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAqD,MAAM,sBAAsB,CAAC;AAEzI,6BAA6B;AAC7B,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EACpE,cAAc,EAAE,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EAClE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAClE,eAAe,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,sBAAsB,GAIxF,MAAM,oBAAoB,CAAC;AAE5B,uCAAuC;AACvC,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,QAAQ,EACR,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,GAIT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,uBAAuB,GASxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GAYrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,EACnC,4BAA4B,GAM7B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,6 +70,7 @@ export interface GeotechDocumentIngestResult {
|
|
|
70
70
|
parameters: GeotechParameterObservation[];
|
|
71
71
|
risks: string[];
|
|
72
72
|
recommendations: string[];
|
|
73
|
+
synthesis?: GeotechDocumentSynthesis | null;
|
|
73
74
|
contentChunks?: GeotechDocumentContentChunk[];
|
|
74
75
|
pageAudits: GeotechDocumentPageAudit[];
|
|
75
76
|
pageFailures: string[];
|
|
@@ -81,6 +82,16 @@ export interface GeotechDocumentIngestResult {
|
|
|
81
82
|
reviewRequired: boolean;
|
|
82
83
|
canAutoProceed: boolean;
|
|
83
84
|
}
|
|
85
|
+
export interface GeotechDocumentSynthesis {
|
|
86
|
+
takeaways: string[];
|
|
87
|
+
groundModel: string[];
|
|
88
|
+
keyParameters: string[];
|
|
89
|
+
interpretation: string[];
|
|
90
|
+
limitations: string[];
|
|
91
|
+
sourcePages: number[];
|
|
92
|
+
rawLLMText?: string;
|
|
93
|
+
latencyMs?: number;
|
|
94
|
+
}
|
|
84
95
|
export interface GeotechDocumentContentChunk {
|
|
85
96
|
chunkId: string;
|
|
86
97
|
pageRange: [number, number];
|
|
@@ -101,6 +112,12 @@ export interface IngestGeotechDocumentOptions {
|
|
|
101
112
|
interpretPage?: typeof interpretGeotechDocumentPage;
|
|
102
113
|
extractTextFacts?: typeof extractGeotechDocumentFactsFromText;
|
|
103
114
|
transcribePageImageText?: typeof transcribeDocumentImageText;
|
|
115
|
+
synthesizeDocument?: (input: {
|
|
116
|
+
config: LLMConfig;
|
|
117
|
+
result: Omit<GeotechDocumentIngestResult, 'synthesis' | 'contentChunks'> & {
|
|
118
|
+
contentChunks?: GeotechDocumentContentChunk[];
|
|
119
|
+
};
|
|
120
|
+
}) => Promise<GeotechDocumentSynthesis | null>;
|
|
104
121
|
pageConcurrency?: number;
|
|
105
122
|
now?: () => Date;
|
|
106
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geotech-document.d.ts","sourceRoot":"","sources":["../../src/ingest/geotech-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"geotech-document.d.ts","sourceRoot":"","sources":["../../src/ingest/geotech-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
import { generateText } from '../llm/router.js';
|
|
1
2
|
import { resolveProviderCapabilities } from '../llm/index.js';
|
|
3
|
+
import { parseJsonObject } from '../vision/parse.js';
|
|
2
4
|
import { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, } from '../vision/geotech-document.js';
|
|
3
5
|
import { transcribeDocumentImageText } from '../vision/index.js';
|
|
4
6
|
import { recoverDocumentTextHint } from '../vision/ocr.js';
|
|
5
7
|
function uniqueStrings(values) {
|
|
6
8
|
return [...new Set(values.filter((value) => typeof value === 'string' && value.trim().length > 0))];
|
|
7
9
|
}
|
|
10
|
+
function normalizeTextItems(value, limit = 8) {
|
|
11
|
+
if (!Array.isArray(value)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return uniqueStrings(value.map((item) => (typeof item === 'string' ? item.replace(/\s+/g, ' ').trim() : ''))).slice(0, limit);
|
|
15
|
+
}
|
|
16
|
+
function normalizeSourcePages(value) {
|
|
17
|
+
if (!Array.isArray(value)) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
return [...new Set(value
|
|
21
|
+
.map((item) => Number(item))
|
|
22
|
+
.filter((item) => Number.isInteger(item) && item > 0))].sort((left, right) => left - right);
|
|
23
|
+
}
|
|
8
24
|
function createFindingKey(finding) {
|
|
9
25
|
return [
|
|
10
26
|
finding.severity,
|
|
@@ -239,6 +255,21 @@ function resolveTextExtractionTimeoutMs(baseTimeoutMs, textHint) {
|
|
|
239
255
|
}
|
|
240
256
|
return baseTimeoutMs;
|
|
241
257
|
}
|
|
258
|
+
function shouldPreferDirectVisualExtraction(input) {
|
|
259
|
+
if (input.config.provider !== 'hosted-beta') {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
const hasAcceptedText = typeof input.textHint === 'string'
|
|
263
|
+
&& input.textHint.trim().length >= 24
|
|
264
|
+
&& (input.inspectionPage?.normalizedArtifact?.textQuality.accepted ?? false);
|
|
265
|
+
if (hasAcceptedText) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
return input.page.sourceKind === 'raster-image'
|
|
269
|
+
&& (input.inspectionPage?.classification === 'image-only'
|
|
270
|
+
|| input.inspectionPage?.classification === 'graphics-only'
|
|
271
|
+
|| input.inspectionPage?.classification === 'text-unreadable');
|
|
272
|
+
}
|
|
242
273
|
function normalizeHeadingText(value) {
|
|
243
274
|
return value
|
|
244
275
|
.toLowerCase()
|
|
@@ -567,6 +598,125 @@ function chooseDocumentSummary(chunks) {
|
|
|
567
598
|
.filter((value) => typeof value === 'string' && value.trim().length > 0)).slice(0, 3);
|
|
568
599
|
return summaries.length > 0 ? summaries.join(' ') : null;
|
|
569
600
|
}
|
|
601
|
+
function compactForPrompt(value, maxLength) {
|
|
602
|
+
if (!value) {
|
|
603
|
+
return '';
|
|
604
|
+
}
|
|
605
|
+
const normalized = value.replace(/\s+/g, ' ').trim();
|
|
606
|
+
return normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1).trim()}...` : normalized;
|
|
607
|
+
}
|
|
608
|
+
function buildSynthesisEvidence(input) {
|
|
609
|
+
const parameterLines = input.parameters.slice(0, 40).map((parameter) => [
|
|
610
|
+
parameter.name,
|
|
611
|
+
parameter.valueText,
|
|
612
|
+
parameter.unit,
|
|
613
|
+
parameter.material ? `material=${parameter.material}` : null,
|
|
614
|
+
parameter.context ? `context=${parameter.context}` : null,
|
|
615
|
+
].filter(Boolean).join(' | '));
|
|
616
|
+
const materialLines = input.materials.slice(0, 30).map((material) => [
|
|
617
|
+
material.kind,
|
|
618
|
+
material.description,
|
|
619
|
+
material.uscsSymbol ? `USCS=${material.uscsSymbol}` : null,
|
|
620
|
+
material.lithology ? `lithology=${material.lithology}` : null,
|
|
621
|
+
].filter(Boolean).join(' | '));
|
|
622
|
+
const classificationLines = input.classifications.slice(0, 25).map((classification) => [
|
|
623
|
+
classification.system,
|
|
624
|
+
classification.value,
|
|
625
|
+
classification.context,
|
|
626
|
+
].filter(Boolean).join(' | '));
|
|
627
|
+
const chunkLines = [...input.contentChunks]
|
|
628
|
+
.filter((chunk) => chunk.sectionType !== 'administrative')
|
|
629
|
+
.sort((left, right) => right.significance - left.significance)
|
|
630
|
+
.slice(0, 18)
|
|
631
|
+
.map((chunk) => `Pages ${chunk.pageRange[0]}-${chunk.pageRange[1]} | ${chunk.sectionType ?? 'general'} | ${compactForPrompt(chunk.headingAncestry[0], 80)} | ${compactForPrompt(chunk.text, 320)}`);
|
|
632
|
+
return [
|
|
633
|
+
`Title: ${input.title ?? 'unknown'}`,
|
|
634
|
+
`Document class: ${input.documentClass ?? 'unknown'}`,
|
|
635
|
+
`Current summary: ${input.summary ?? 'none'}`,
|
|
636
|
+
'',
|
|
637
|
+
'Materials:',
|
|
638
|
+
materialLines.join('\n') || 'None extracted.',
|
|
639
|
+
'',
|
|
640
|
+
'Classifications:',
|
|
641
|
+
classificationLines.join('\n') || 'None extracted.',
|
|
642
|
+
'',
|
|
643
|
+
'Engineering parameters:',
|
|
644
|
+
parameterLines.join('\n') || 'None extracted.',
|
|
645
|
+
'',
|
|
646
|
+
'Risks:',
|
|
647
|
+
input.risks.slice(0, 12).join('\n') || 'None extracted.',
|
|
648
|
+
'',
|
|
649
|
+
'Recommendations:',
|
|
650
|
+
input.recommendations.slice(0, 12).join('\n') || 'None extracted.',
|
|
651
|
+
'',
|
|
652
|
+
'Source page evidence:',
|
|
653
|
+
chunkLines.join('\n') || 'No source chunks retained.',
|
|
654
|
+
].join('\n');
|
|
655
|
+
}
|
|
656
|
+
async function synthesizeGeotechDocumentResult(input) {
|
|
657
|
+
const contentChunks = (input.result.contentChunks ?? []);
|
|
658
|
+
const hasEngineeringSignal = input.result.materials.length > 0
|
|
659
|
+
|| input.result.classifications.length > 0
|
|
660
|
+
|| input.result.parameters.length > 0
|
|
661
|
+
|| contentChunks.some((chunk) => chunk.sectionType !== 'administrative' && chunk.sectionType !== 'visual-appendix');
|
|
662
|
+
if (!hasEngineeringSignal) {
|
|
663
|
+
return null;
|
|
664
|
+
}
|
|
665
|
+
const prompt = `Create a concise engineering synthesis from the extracted geotechnical report evidence. Respond with ONLY a JSON object:
|
|
666
|
+
{
|
|
667
|
+
"takeaways": ["<report-level takeaway with source-page wording where possible>"],
|
|
668
|
+
"groundModel": ["<soil/rock/groundwater model statement>"],
|
|
669
|
+
"keyParameters": ["<parameter, value, unit, material/context, source page if known>"],
|
|
670
|
+
"interpretation": ["<engineering interpretation supported by extracted evidence>"],
|
|
671
|
+
"limitations": ["<uncertainty, missing evidence, OCR/layout/visual limitations>"],
|
|
672
|
+
"sourcePages": [<page numbers that support the synthesis>]
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
Do not invent values. Do not increase confidence. Prefer explicit soil and rock mechanics parameters, groundwater observations, classification systems, and foundation/geohazard implications.
|
|
676
|
+
|
|
677
|
+
Evidence:
|
|
678
|
+
${buildSynthesisEvidence({
|
|
679
|
+
documentClass: input.result.documentClass,
|
|
680
|
+
title: input.result.title,
|
|
681
|
+
summary: input.result.summary,
|
|
682
|
+
materials: input.result.materials,
|
|
683
|
+
classifications: input.result.classifications,
|
|
684
|
+
parameters: input.result.parameters,
|
|
685
|
+
risks: input.result.risks,
|
|
686
|
+
recommendations: input.result.recommendations,
|
|
687
|
+
contentChunks,
|
|
688
|
+
}).slice(0, 9000)}`;
|
|
689
|
+
const response = await generateText(prompt, input.config, {
|
|
690
|
+
systemPrompt: 'You are a senior geotechnical engineer synthesizing extracted report evidence into a review brief. Use cautious, evidence-bound language. Respond with JSON only.',
|
|
691
|
+
temperature: 0.1,
|
|
692
|
+
jsonMode: true,
|
|
693
|
+
maxTokens: 1200,
|
|
694
|
+
thinkingMode: 'enabled',
|
|
695
|
+
});
|
|
696
|
+
const parsed = parseJsonObject(response.text);
|
|
697
|
+
if (!parsed.value) {
|
|
698
|
+
return {
|
|
699
|
+
takeaways: [],
|
|
700
|
+
groundModel: [],
|
|
701
|
+
keyParameters: [],
|
|
702
|
+
interpretation: [],
|
|
703
|
+
limitations: ['GLM-5.1 synthesis did not return valid JSON; use extracted tables and page audits for review.'],
|
|
704
|
+
sourcePages: [],
|
|
705
|
+
rawLLMText: response.text,
|
|
706
|
+
latencyMs: response.latencyMs,
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
return {
|
|
710
|
+
takeaways: normalizeTextItems(parsed.value.takeaways, 8),
|
|
711
|
+
groundModel: normalizeTextItems(parsed.value.groundModel, 10),
|
|
712
|
+
keyParameters: normalizeTextItems(parsed.value.keyParameters, 16),
|
|
713
|
+
interpretation: normalizeTextItems(parsed.value.interpretation, 10),
|
|
714
|
+
limitations: normalizeTextItems(parsed.value.limitations, 10),
|
|
715
|
+
sourcePages: normalizeSourcePages(parsed.value.sourcePages),
|
|
716
|
+
rawLLMText: response.text,
|
|
717
|
+
latencyMs: response.latencyMs,
|
|
718
|
+
};
|
|
719
|
+
}
|
|
570
720
|
function buildPageLeadText(inspectionPage, options) {
|
|
571
721
|
if (!inspectionPage) {
|
|
572
722
|
return '';
|
|
@@ -917,6 +1067,29 @@ export async function ingestGeotechDocument(options) {
|
|
|
917
1067
|
...options.config,
|
|
918
1068
|
timeout: pageTimeoutMs,
|
|
919
1069
|
};
|
|
1070
|
+
if (shouldPreferDirectVisualExtraction({
|
|
1071
|
+
config: options.config,
|
|
1072
|
+
page,
|
|
1073
|
+
inspectionPage,
|
|
1074
|
+
textHint: pageTextHint,
|
|
1075
|
+
})) {
|
|
1076
|
+
const context = {
|
|
1077
|
+
pageNumber: page.pageNumber,
|
|
1078
|
+
totalPages: page.totalPages,
|
|
1079
|
+
pageClassification: inspectionPage?.classification,
|
|
1080
|
+
directVisualPreferred: true,
|
|
1081
|
+
};
|
|
1082
|
+
const result = await withPageTimeout(interpretPage(page.base64, page.mimeType, pagePhaseConfig, context), pageTimeoutMs, `Page ${page.pageNumber}: direct visual page interpretation timed out after ${Math.round(pageTimeoutMs / 1000)}s`);
|
|
1083
|
+
return {
|
|
1084
|
+
ok: true,
|
|
1085
|
+
pageNumber: page.pageNumber,
|
|
1086
|
+
inspectionPage,
|
|
1087
|
+
textHintSource: 'vision-visual',
|
|
1088
|
+
recoveryWarnings: ['Skipped OCR-only transcription and used direct visual extraction for an image-heavy hosted-beta page.'],
|
|
1089
|
+
ocrRecovered: false,
|
|
1090
|
+
result,
|
|
1091
|
+
};
|
|
1092
|
+
}
|
|
920
1093
|
const recovery = await withPageTimeout(recoverDocumentTextHint({
|
|
921
1094
|
existingTextHint: pageTextHint,
|
|
922
1095
|
existingTextAccepted: inspectionPage?.normalizedArtifact?.textQuality.accepted ?? true,
|
|
@@ -952,7 +1125,7 @@ export async function ingestGeotechDocument(options) {
|
|
|
952
1125
|
inspectionPage,
|
|
953
1126
|
textHintSource,
|
|
954
1127
|
recoveryWarnings: recovery.warnings,
|
|
955
|
-
ocrRecovered: recovery.source === 'local-ocr' || recovery.source === 'vision-ocr',
|
|
1128
|
+
ocrRecovered: recovery.source === 'local-ocr' || recovery.source === 'vision-ocr' || recovery.source === 'glm-ocr',
|
|
956
1129
|
result,
|
|
957
1130
|
};
|
|
958
1131
|
}
|
|
@@ -971,7 +1144,11 @@ export async function ingestGeotechDocument(options) {
|
|
|
971
1144
|
if (settled.ok) {
|
|
972
1145
|
if (settled.ocrRecovered) {
|
|
973
1146
|
recoveredOcrPages.add(settled.pageNumber);
|
|
974
|
-
documentWarnings.push(`Recovered ${settled.textHintSource === 'local-ocr'
|
|
1147
|
+
documentWarnings.push(`Recovered ${settled.textHintSource === 'local-ocr'
|
|
1148
|
+
? 'local OCR'
|
|
1149
|
+
: settled.textHintSource === 'glm-ocr'
|
|
1150
|
+
? 'GLM-OCR layout'
|
|
1151
|
+
: 'OCR-style'} text hint for page ${settled.pageNumber}.`);
|
|
975
1152
|
}
|
|
976
1153
|
else if (settled.textHintSource === 'pdfjs-text') {
|
|
977
1154
|
documentWarnings.push(`Recovered high-fidelity PDF text for page ${settled.pageNumber} without a multimodal OCR call.`);
|
|
@@ -1038,8 +1215,11 @@ export async function ingestGeotechDocument(options) {
|
|
|
1038
1215
|
const contentChunks = buildContentChunks(pageResults, options.inspection);
|
|
1039
1216
|
const title = chooseDocumentTitle(contentChunks);
|
|
1040
1217
|
const documentClass = chooseDocumentClass(contentChunks);
|
|
1041
|
-
const
|
|
1042
|
-
|
|
1218
|
+
const lowYieldPages = new Set(contentChunks
|
|
1219
|
+
.filter((chunk) => chunk.sectionType === 'administrative' || chunk.sectionType === 'visual-appendix')
|
|
1220
|
+
.flatMap((chunk) => chunk.sourcePages));
|
|
1221
|
+
const partialAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'partial' && !lowYieldPages.has(audit.pageNumber)).length;
|
|
1222
|
+
const failedAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'failed' && !lowYieldPages.has(audit.pageNumber)).length;
|
|
1043
1223
|
const parseStatus = pageFailures.length > 0
|
|
1044
1224
|
? 'partial'
|
|
1045
1225
|
: mergeParseStatus(pageResults.map((result) => result.parseStatus));
|
|
@@ -1053,18 +1233,36 @@ export async function ingestGeotechDocument(options) {
|
|
|
1053
1233
|
: 100;
|
|
1054
1234
|
const confidence = Math.max(0, Math.min(confidenceCap, Math.round(baseConfidence - failurePenalty - partialPenalty)));
|
|
1055
1235
|
const reviewFindings = deriveDocumentFindings(pageResults, pageFailures, materials, classifications, parameters, options.inspection);
|
|
1236
|
+
for (const audit of pageAudits) {
|
|
1237
|
+
if (audit.textHintSource !== 'vision-visual') {
|
|
1238
|
+
continue;
|
|
1239
|
+
}
|
|
1240
|
+
reviewFindings.push({
|
|
1241
|
+
code: 'direct_visual_review_required',
|
|
1242
|
+
severity: 'review',
|
|
1243
|
+
scope: 'page',
|
|
1244
|
+
message: `Page ${audit.pageNumber} was interpreted directly from the rendered page image without accepted text or OCR transcription. Verify extracted values against the source page before approval.`,
|
|
1245
|
+
pageNumber: audit.pageNumber,
|
|
1246
|
+
});
|
|
1247
|
+
}
|
|
1056
1248
|
const reviewRequired = reviewFindings.some(findingRequiresReview);
|
|
1057
1249
|
const allPagesParsed = pageAudits.length > 0 && pageAudits.every((audit) => audit.parseStatus === 'parsed');
|
|
1058
|
-
const
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1250
|
+
const contentChunksForResult = contentChunks.map((chunk) => ({
|
|
1251
|
+
chunkId: chunk.chunkId,
|
|
1252
|
+
pageRange: chunk.pageRange,
|
|
1253
|
+
headingAncestry: chunk.headingAncestry,
|
|
1254
|
+
scope: chunk.scope,
|
|
1255
|
+
sectionType: chunk.sectionType,
|
|
1256
|
+
significance: chunk.significance,
|
|
1257
|
+
text: chunk.text,
|
|
1258
|
+
sourcePages: chunk.sourcePages,
|
|
1259
|
+
}));
|
|
1260
|
+
const generatedAt = now().toISOString();
|
|
1261
|
+
const baseResult = {
|
|
1064
1262
|
kind: 'geotech-ingest-result',
|
|
1065
1263
|
schemaVersion: 1,
|
|
1066
1264
|
documentType: 'geotech-document',
|
|
1067
|
-
generatedAt
|
|
1265
|
+
generatedAt,
|
|
1068
1266
|
source: {
|
|
1069
1267
|
...options.source,
|
|
1070
1268
|
totalPages: options.pages?.length ?? 1,
|
|
@@ -1081,19 +1279,10 @@ export async function ingestGeotechDocument(options) {
|
|
|
1081
1279
|
parameters,
|
|
1082
1280
|
risks,
|
|
1083
1281
|
recommendations,
|
|
1084
|
-
contentChunks:
|
|
1085
|
-
chunkId: chunk.chunkId,
|
|
1086
|
-
pageRange: chunk.pageRange,
|
|
1087
|
-
headingAncestry: chunk.headingAncestry,
|
|
1088
|
-
scope: chunk.scope,
|
|
1089
|
-
sectionType: chunk.sectionType,
|
|
1090
|
-
significance: chunk.significance,
|
|
1091
|
-
text: chunk.text,
|
|
1092
|
-
sourcePages: chunk.sourcePages,
|
|
1093
|
-
})),
|
|
1282
|
+
contentChunks: contentChunksForResult,
|
|
1094
1283
|
pageAudits,
|
|
1095
1284
|
pageFailures,
|
|
1096
|
-
warnings,
|
|
1285
|
+
warnings: [],
|
|
1097
1286
|
reviewFindings,
|
|
1098
1287
|
reviewReasons: summarizeReviewReasons(reviewFindings),
|
|
1099
1288
|
parseStatus,
|
|
@@ -1106,5 +1295,35 @@ export async function ingestGeotechDocument(options) {
|
|
|
1106
1295
|
&& pageFailures.length === 0
|
|
1107
1296
|
&& parameterSanitization.warnings.length === 0,
|
|
1108
1297
|
};
|
|
1298
|
+
let synthesis = null;
|
|
1299
|
+
const synthesisWarnings = [];
|
|
1300
|
+
const synthesisRunner = options.synthesizeDocument
|
|
1301
|
+
?? (process.env.NODE_ENV === 'test' ? null : synthesizeGeotechDocumentResult);
|
|
1302
|
+
if (synthesisRunner) {
|
|
1303
|
+
try {
|
|
1304
|
+
synthesis = await synthesisRunner({
|
|
1305
|
+
config: options.config,
|
|
1306
|
+
result: baseResult,
|
|
1307
|
+
});
|
|
1308
|
+
if (synthesis && synthesis.takeaways.length > 0) {
|
|
1309
|
+
synthesisWarnings.push('GLM-5.1 synthesis generated report-level takeaways from extracted page evidence.');
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
catch (error) {
|
|
1313
|
+
synthesisWarnings.push(`GLM-5.1 synthesis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
const warnings = uniqueStrings([
|
|
1317
|
+
...documentWarnings,
|
|
1318
|
+
...parameterSanitization.warnings,
|
|
1319
|
+
...synthesisWarnings,
|
|
1320
|
+
...pageResults.flatMap((result) => result.warnings),
|
|
1321
|
+
]);
|
|
1322
|
+
return {
|
|
1323
|
+
...baseResult,
|
|
1324
|
+
summary: synthesis?.takeaways[0] ?? baseResult.summary,
|
|
1325
|
+
synthesis,
|
|
1326
|
+
warnings,
|
|
1327
|
+
};
|
|
1109
1328
|
}
|
|
1110
1329
|
//# sourceMappingURL=geotech-document.js.map
|