@geotechcli/core 0.4.33 → 0.4.35

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.
Files changed (50) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/ingest/geotech-document.d.ts +17 -0
  6. package/dist/ingest/geotech-document.d.ts.map +1 -1
  7. package/dist/ingest/geotech-document.js +258 -22
  8. package/dist/ingest/geotech-document.js.map +1 -1
  9. package/dist/ingest/geotech-extract.d.ts.map +1 -1
  10. package/dist/ingest/geotech-extract.js +6 -2
  11. package/dist/ingest/geotech-extract.js.map +1 -1
  12. package/dist/ingest/job-store.d.ts +1 -1
  13. package/dist/ingest/job-store.d.ts.map +1 -1
  14. package/dist/ingest/job-worker.d.ts.map +1 -1
  15. package/dist/ingest/job-worker.js +49 -16
  16. package/dist/ingest/job-worker.js.map +1 -1
  17. package/dist/llm/providers/hosted-beta.d.ts.map +1 -1
  18. package/dist/llm/providers/hosted-beta.js +1 -0
  19. package/dist/llm/providers/hosted-beta.js.map +1 -1
  20. package/dist/llm/providers/zhipu.d.ts.map +1 -1
  21. package/dist/llm/providers/zhipu.js +3 -0
  22. package/dist/llm/providers/zhipu.js.map +1 -1
  23. package/dist/llm/router.d.ts +2 -0
  24. package/dist/llm/router.d.ts.map +1 -1
  25. package/dist/llm/router.js +2 -0
  26. package/dist/llm/router.js.map +1 -1
  27. package/dist/llm/types.d.ts +1 -0
  28. package/dist/llm/types.d.ts.map +1 -1
  29. package/dist/llm/types.js.map +1 -1
  30. package/dist/meta/metadata.json +2 -2
  31. package/dist/report/html.d.ts.map +1 -1
  32. package/dist/report/html.js +226 -48
  33. package/dist/report/html.js.map +1 -1
  34. package/dist/report/ingest-dossier.d.ts +1 -0
  35. package/dist/report/ingest-dossier.d.ts.map +1 -1
  36. package/dist/report/ingest-dossier.js +211 -34
  37. package/dist/report/ingest-dossier.js.map +1 -1
  38. package/dist/vision/geotech-document.d.ts +1 -0
  39. package/dist/vision/geotech-document.d.ts.map +1 -1
  40. package/dist/vision/geotech-document.js +156 -5
  41. package/dist/vision/geotech-document.js.map +1 -1
  42. package/dist/vision/layout-ocr.d.ts +44 -0
  43. package/dist/vision/layout-ocr.d.ts.map +1 -0
  44. package/dist/vision/layout-ocr.js +216 -0
  45. package/dist/vision/layout-ocr.js.map +1 -0
  46. package/dist/vision/ocr.d.ts +5 -1
  47. package/dist/vision/ocr.d.ts.map +1 -1
  48. package/dist/vision/ocr.js +33 -2
  49. package/dist/vision/ocr.js.map +1 -1
  50. 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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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;AACtC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,mCAAmC,EACxC,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,wBAAwB,EACxB,SAAS,EACT,UAAU,EACV,KAAK,mBAAmB,EACxB,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,GACnC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAC3D,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAClE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAClD,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,oBAAoB,EACnE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EACvD,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,GAC5D,MAAM,eAAe,CAAC"}
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":"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"}
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":"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"}
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,142 @@ 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
+ function isEmptySynthesisResponseError(error) {
657
+ const message = error instanceof Error ? error.message : String(error);
658
+ return /no content|empty.*content|assistant text|did not contain assistant text/i.test(message);
659
+ }
660
+ async function synthesizeGeotechDocumentResult(input) {
661
+ const contentChunks = (input.result.contentChunks ?? []);
662
+ const hasEngineeringSignal = input.result.materials.length > 0
663
+ || input.result.classifications.length > 0
664
+ || input.result.parameters.length > 0
665
+ || contentChunks.some((chunk) => chunk.sectionType !== 'administrative' && chunk.sectionType !== 'visual-appendix');
666
+ if (!hasEngineeringSignal) {
667
+ return null;
668
+ }
669
+ const prompt = `Create a concise engineering synthesis from the extracted geotechnical report evidence. Respond with ONLY a JSON object:
670
+ {
671
+ "takeaways": ["<report-level takeaway with source-page wording where possible>"],
672
+ "groundModel": ["<soil/rock/groundwater model statement>"],
673
+ "keyParameters": ["<parameter, value, unit, material/context, source page if known>"],
674
+ "interpretation": ["<engineering interpretation supported by extracted evidence>"],
675
+ "limitations": ["<uncertainty, missing evidence, OCR/layout/visual limitations>"],
676
+ "sourcePages": [<page numbers that support the synthesis>]
677
+ }
678
+
679
+ Do not invent values. Do not increase confidence. Prefer explicit soil and rock mechanics parameters, groundwater observations, classification systems, and foundation/geohazard implications.
680
+
681
+ Evidence:
682
+ ${buildSynthesisEvidence({
683
+ documentClass: input.result.documentClass,
684
+ title: input.result.title,
685
+ summary: input.result.summary,
686
+ materials: input.result.materials,
687
+ classifications: input.result.classifications,
688
+ parameters: input.result.parameters,
689
+ risks: input.result.risks,
690
+ recommendations: input.result.recommendations,
691
+ contentChunks,
692
+ }).slice(0, 9000)}`;
693
+ const requestSynthesis = async (thinkingMode) => generateText(prompt, input.config, {
694
+ systemPrompt: 'You are a senior geotechnical engineer synthesizing extracted report evidence into a review brief. Use cautious, evidence-bound language. Respond with JSON only.',
695
+ temperature: 0.1,
696
+ jsonMode: true,
697
+ maxTokens: 1200,
698
+ thinkingMode,
699
+ });
700
+ let response;
701
+ try {
702
+ response = await requestSynthesis('enabled');
703
+ if (!response.text.trim()) {
704
+ response = await requestSynthesis('disabled');
705
+ }
706
+ }
707
+ catch (error) {
708
+ if (!isEmptySynthesisResponseError(error)) {
709
+ throw error;
710
+ }
711
+ response = await requestSynthesis('disabled');
712
+ }
713
+ const parsed = parseJsonObject(response.text);
714
+ if (!parsed.value) {
715
+ return {
716
+ takeaways: [],
717
+ groundModel: [],
718
+ keyParameters: [],
719
+ interpretation: [],
720
+ limitations: ['GLM-5.1 synthesis did not return valid JSON; use extracted tables and page audits for review.'],
721
+ sourcePages: [],
722
+ rawLLMText: response.text,
723
+ latencyMs: response.latencyMs,
724
+ };
725
+ }
726
+ return {
727
+ takeaways: normalizeTextItems(parsed.value.takeaways, 8),
728
+ groundModel: normalizeTextItems(parsed.value.groundModel, 10),
729
+ keyParameters: normalizeTextItems(parsed.value.keyParameters, 16),
730
+ interpretation: normalizeTextItems(parsed.value.interpretation, 10),
731
+ limitations: normalizeTextItems(parsed.value.limitations, 10),
732
+ sourcePages: normalizeSourcePages(parsed.value.sourcePages),
733
+ rawLLMText: response.text,
734
+ latencyMs: response.latencyMs,
735
+ };
736
+ }
570
737
  function buildPageLeadText(inspectionPage, options) {
571
738
  if (!inspectionPage) {
572
739
  return '';
@@ -917,6 +1084,29 @@ export async function ingestGeotechDocument(options) {
917
1084
  ...options.config,
918
1085
  timeout: pageTimeoutMs,
919
1086
  };
1087
+ if (shouldPreferDirectVisualExtraction({
1088
+ config: options.config,
1089
+ page,
1090
+ inspectionPage,
1091
+ textHint: pageTextHint,
1092
+ })) {
1093
+ const context = {
1094
+ pageNumber: page.pageNumber,
1095
+ totalPages: page.totalPages,
1096
+ pageClassification: inspectionPage?.classification,
1097
+ directVisualPreferred: true,
1098
+ };
1099
+ 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`);
1100
+ return {
1101
+ ok: true,
1102
+ pageNumber: page.pageNumber,
1103
+ inspectionPage,
1104
+ textHintSource: 'vision-visual',
1105
+ recoveryWarnings: ['Skipped OCR-only transcription and used direct visual extraction for an image-heavy hosted-beta page.'],
1106
+ ocrRecovered: false,
1107
+ result,
1108
+ };
1109
+ }
920
1110
  const recovery = await withPageTimeout(recoverDocumentTextHint({
921
1111
  existingTextHint: pageTextHint,
922
1112
  existingTextAccepted: inspectionPage?.normalizedArtifact?.textQuality.accepted ?? true,
@@ -952,7 +1142,7 @@ export async function ingestGeotechDocument(options) {
952
1142
  inspectionPage,
953
1143
  textHintSource,
954
1144
  recoveryWarnings: recovery.warnings,
955
- ocrRecovered: recovery.source === 'local-ocr' || recovery.source === 'vision-ocr',
1145
+ ocrRecovered: recovery.source === 'local-ocr' || recovery.source === 'vision-ocr' || recovery.source === 'glm-ocr',
956
1146
  result,
957
1147
  };
958
1148
  }
@@ -971,7 +1161,11 @@ export async function ingestGeotechDocument(options) {
971
1161
  if (settled.ok) {
972
1162
  if (settled.ocrRecovered) {
973
1163
  recoveredOcrPages.add(settled.pageNumber);
974
- documentWarnings.push(`Recovered ${settled.textHintSource === 'local-ocr' ? 'local OCR' : 'OCR-style'} text hint for page ${settled.pageNumber}.`);
1164
+ documentWarnings.push(`Recovered ${settled.textHintSource === 'local-ocr'
1165
+ ? 'local OCR'
1166
+ : settled.textHintSource === 'glm-ocr'
1167
+ ? 'GLM-OCR layout'
1168
+ : 'OCR-style'} text hint for page ${settled.pageNumber}.`);
975
1169
  }
976
1170
  else if (settled.textHintSource === 'pdfjs-text') {
977
1171
  documentWarnings.push(`Recovered high-fidelity PDF text for page ${settled.pageNumber} without a multimodal OCR call.`);
@@ -1038,8 +1232,11 @@ export async function ingestGeotechDocument(options) {
1038
1232
  const contentChunks = buildContentChunks(pageResults, options.inspection);
1039
1233
  const title = chooseDocumentTitle(contentChunks);
1040
1234
  const documentClass = chooseDocumentClass(contentChunks);
1041
- const partialAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'partial').length;
1042
- const failedAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'failed').length;
1235
+ const lowYieldPages = new Set(contentChunks
1236
+ .filter((chunk) => chunk.sectionType === 'administrative' || chunk.sectionType === 'visual-appendix')
1237
+ .flatMap((chunk) => chunk.sourcePages));
1238
+ const partialAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'partial' && !lowYieldPages.has(audit.pageNumber)).length;
1239
+ const failedAuditCount = pageAudits.filter((audit) => audit.parseStatus === 'failed' && !lowYieldPages.has(audit.pageNumber)).length;
1043
1240
  const parseStatus = pageFailures.length > 0
1044
1241
  ? 'partial'
1045
1242
  : mergeParseStatus(pageResults.map((result) => result.parseStatus));
@@ -1053,18 +1250,36 @@ export async function ingestGeotechDocument(options) {
1053
1250
  : 100;
1054
1251
  const confidence = Math.max(0, Math.min(confidenceCap, Math.round(baseConfidence - failurePenalty - partialPenalty)));
1055
1252
  const reviewFindings = deriveDocumentFindings(pageResults, pageFailures, materials, classifications, parameters, options.inspection);
1253
+ for (const audit of pageAudits) {
1254
+ if (audit.textHintSource !== 'vision-visual') {
1255
+ continue;
1256
+ }
1257
+ reviewFindings.push({
1258
+ code: 'direct_visual_review_required',
1259
+ severity: 'review',
1260
+ scope: 'page',
1261
+ 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.`,
1262
+ pageNumber: audit.pageNumber,
1263
+ });
1264
+ }
1056
1265
  const reviewRequired = reviewFindings.some(findingRequiresReview);
1057
1266
  const allPagesParsed = pageAudits.length > 0 && pageAudits.every((audit) => audit.parseStatus === 'parsed');
1058
- const warnings = uniqueStrings([
1059
- ...documentWarnings,
1060
- ...parameterSanitization.warnings,
1061
- ...pageResults.flatMap((result) => result.warnings),
1062
- ]);
1063
- return {
1267
+ const contentChunksForResult = contentChunks.map((chunk) => ({
1268
+ chunkId: chunk.chunkId,
1269
+ pageRange: chunk.pageRange,
1270
+ headingAncestry: chunk.headingAncestry,
1271
+ scope: chunk.scope,
1272
+ sectionType: chunk.sectionType,
1273
+ significance: chunk.significance,
1274
+ text: chunk.text,
1275
+ sourcePages: chunk.sourcePages,
1276
+ }));
1277
+ const generatedAt = now().toISOString();
1278
+ const baseResult = {
1064
1279
  kind: 'geotech-ingest-result',
1065
1280
  schemaVersion: 1,
1066
1281
  documentType: 'geotech-document',
1067
- generatedAt: now().toISOString(),
1282
+ generatedAt,
1068
1283
  source: {
1069
1284
  ...options.source,
1070
1285
  totalPages: options.pages?.length ?? 1,
@@ -1081,19 +1296,10 @@ export async function ingestGeotechDocument(options) {
1081
1296
  parameters,
1082
1297
  risks,
1083
1298
  recommendations,
1084
- contentChunks: contentChunks.map((chunk) => ({
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
- })),
1299
+ contentChunks: contentChunksForResult,
1094
1300
  pageAudits,
1095
1301
  pageFailures,
1096
- warnings,
1302
+ warnings: [],
1097
1303
  reviewFindings,
1098
1304
  reviewReasons: summarizeReviewReasons(reviewFindings),
1099
1305
  parseStatus,
@@ -1106,5 +1312,35 @@ export async function ingestGeotechDocument(options) {
1106
1312
  && pageFailures.length === 0
1107
1313
  && parameterSanitization.warnings.length === 0,
1108
1314
  };
1315
+ let synthesis = null;
1316
+ const synthesisWarnings = [];
1317
+ const synthesisRunner = options.synthesizeDocument
1318
+ ?? (process.env.NODE_ENV === 'test' ? null : synthesizeGeotechDocumentResult);
1319
+ if (synthesisRunner) {
1320
+ try {
1321
+ synthesis = await synthesisRunner({
1322
+ config: options.config,
1323
+ result: baseResult,
1324
+ });
1325
+ if (synthesis && synthesis.takeaways.length > 0) {
1326
+ synthesisWarnings.push('GLM-5.1 synthesis generated report-level takeaways from extracted page evidence.');
1327
+ }
1328
+ }
1329
+ catch (error) {
1330
+ synthesisWarnings.push(`GLM-5.1 synthesis failed: ${error instanceof Error ? error.message : String(error)}`);
1331
+ }
1332
+ }
1333
+ const warnings = uniqueStrings([
1334
+ ...documentWarnings,
1335
+ ...parameterSanitization.warnings,
1336
+ ...synthesisWarnings,
1337
+ ...pageResults.flatMap((result) => result.warnings),
1338
+ ]);
1339
+ return {
1340
+ ...baseResult,
1341
+ summary: synthesis?.takeaways[0] ?? baseResult.summary,
1342
+ synthesis,
1343
+ warnings,
1344
+ };
1109
1345
  }
1110
1346
  //# sourceMappingURL=geotech-document.js.map