@geotechcli/core 0.4.21 → 0.4.23

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 (154) hide show
  1. package/dist/agents/brain.d.ts +1 -5
  2. package/dist/agents/brain.d.ts.map +1 -1
  3. package/dist/agents/brain.js +4 -120
  4. package/dist/agents/brain.js.map +1 -1
  5. package/dist/agents/data-tools.js +759 -0
  6. package/dist/agents/data-tools.js.map +1 -1
  7. package/dist/agents/runtime-bootstrap.d.ts +6 -0
  8. package/dist/agents/runtime-bootstrap.d.ts.map +1 -0
  9. package/dist/agents/runtime-bootstrap.js +8 -0
  10. package/dist/agents/runtime-bootstrap.js.map +1 -0
  11. package/dist/agents/runtime-fallbacks.d.ts +7 -0
  12. package/dist/agents/runtime-fallbacks.d.ts.map +1 -0
  13. package/dist/agents/runtime-fallbacks.js +87 -0
  14. package/dist/agents/runtime-fallbacks.js.map +1 -0
  15. package/dist/agents/swarm.d.ts +1 -4
  16. package/dist/agents/swarm.d.ts.map +1 -1
  17. package/dist/agents/swarm.js +74 -8
  18. package/dist/agents/swarm.js.map +1 -1
  19. package/dist/agents/tool-runtime.d.ts +7 -0
  20. package/dist/agents/tool-runtime.d.ts.map +1 -0
  21. package/dist/agents/tool-runtime.js +9 -0
  22. package/dist/agents/tool-runtime.js.map +1 -0
  23. package/dist/config/index.d.ts +4 -4
  24. package/dist/config/index.js +1 -1
  25. package/dist/config/index.js.map +1 -1
  26. package/dist/geo/coordinates.d.ts +40 -0
  27. package/dist/geo/coordinates.d.ts.map +1 -0
  28. package/dist/geo/coordinates.js +461 -0
  29. package/dist/geo/coordinates.js.map +1 -0
  30. package/dist/geo/index.d.ts +1 -0
  31. package/dist/geo/index.d.ts.map +1 -1
  32. package/dist/geo/index.js +1 -0
  33. package/dist/geo/index.js.map +1 -1
  34. package/dist/index.d.ts +3 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/ingest/ags.d.ts +3 -0
  39. package/dist/ingest/ags.d.ts.map +1 -1
  40. package/dist/ingest/ags.js +98 -9
  41. package/dist/ingest/ags.js.map +1 -1
  42. package/dist/ingest/cpt.d.ts +4 -0
  43. package/dist/ingest/cpt.d.ts.map +1 -1
  44. package/dist/ingest/cpt.js +87 -25
  45. package/dist/ingest/cpt.js.map +1 -1
  46. package/dist/ingest/document-inputs.d.ts +37 -0
  47. package/dist/ingest/document-inputs.d.ts.map +1 -0
  48. package/dist/ingest/document-inputs.js +197 -0
  49. package/dist/ingest/document-inputs.js.map +1 -0
  50. package/dist/ingest/geotech-document.d.ts +118 -0
  51. package/dist/ingest/geotech-document.d.ts.map +1 -0
  52. package/dist/ingest/geotech-document.js +1006 -0
  53. package/dist/ingest/geotech-document.js.map +1 -0
  54. package/dist/ingest/geotech-extract.d.ts +86 -0
  55. package/dist/ingest/geotech-extract.d.ts.map +1 -0
  56. package/dist/ingest/geotech-extract.js +652 -0
  57. package/dist/ingest/geotech-extract.js.map +1 -0
  58. package/dist/ingest/geotech-schemas.d.ts +248 -0
  59. package/dist/ingest/geotech-schemas.d.ts.map +1 -0
  60. package/dist/ingest/geotech-schemas.js +150 -0
  61. package/dist/ingest/geotech-schemas.js.map +1 -0
  62. package/dist/ingest/index.d.ts +8 -0
  63. package/dist/ingest/index.d.ts.map +1 -1
  64. package/dist/ingest/index.js +8 -0
  65. package/dist/ingest/index.js.map +1 -1
  66. package/dist/ingest/ingest-job-child.d.ts +2 -0
  67. package/dist/ingest/ingest-job-child.d.ts.map +1 -0
  68. package/dist/ingest/ingest-job-child.js +45 -0
  69. package/dist/ingest/ingest-job-child.js.map +1 -0
  70. package/dist/ingest/job-store.d.ts +117 -0
  71. package/dist/ingest/job-store.d.ts.map +1 -0
  72. package/dist/ingest/job-store.js +541 -0
  73. package/dist/ingest/job-store.js.map +1 -0
  74. package/dist/ingest/job-worker.d.ts +24 -0
  75. package/dist/ingest/job-worker.d.ts.map +1 -0
  76. package/dist/ingest/job-worker.js +1129 -0
  77. package/dist/ingest/job-worker.js.map +1 -0
  78. package/dist/ingest/pdf.d.ts +102 -0
  79. package/dist/ingest/pdf.d.ts.map +1 -0
  80. package/dist/ingest/pdf.js +1544 -0
  81. package/dist/ingest/pdf.js.map +1 -0
  82. package/dist/ingest/review-store.d.ts +215 -0
  83. package/dist/ingest/review-store.d.ts.map +1 -0
  84. package/dist/ingest/review-store.js +1995 -0
  85. package/dist/ingest/review-store.js.map +1 -0
  86. package/dist/llm/capabilities.d.ts +8 -0
  87. package/dist/llm/capabilities.d.ts.map +1 -0
  88. package/dist/llm/capabilities.js +73 -0
  89. package/dist/llm/capabilities.js.map +1 -0
  90. package/dist/llm/index.d.ts +3 -2
  91. package/dist/llm/index.d.ts.map +1 -1
  92. package/dist/llm/index.js +2 -1
  93. package/dist/llm/index.js.map +1 -1
  94. package/dist/llm/providers/anthropic.d.ts +6 -0
  95. package/dist/llm/providers/anthropic.d.ts.map +1 -1
  96. package/dist/llm/providers/anthropic.js +10 -1
  97. package/dist/llm/providers/anthropic.js.map +1 -1
  98. package/dist/llm/providers/hosted-beta.d.ts +6 -0
  99. package/dist/llm/providers/hosted-beta.d.ts.map +1 -1
  100. package/dist/llm/providers/hosted-beta.js +40 -10
  101. package/dist/llm/providers/hosted-beta.js.map +1 -1
  102. package/dist/llm/providers/huggingface.d.ts +6 -0
  103. package/dist/llm/providers/huggingface.d.ts.map +1 -1
  104. package/dist/llm/providers/huggingface.js +21 -1
  105. package/dist/llm/providers/huggingface.js.map +1 -1
  106. package/dist/llm/providers/openai-compatible.d.ts +6 -0
  107. package/dist/llm/providers/openai-compatible.d.ts.map +1 -1
  108. package/dist/llm/providers/openai-compatible.js +21 -1
  109. package/dist/llm/providers/openai-compatible.js.map +1 -1
  110. package/dist/llm/providers/zhipu.d.ts +6 -0
  111. package/dist/llm/providers/zhipu.d.ts.map +1 -1
  112. package/dist/llm/providers/zhipu.js +15 -1
  113. package/dist/llm/providers/zhipu.js.map +1 -1
  114. package/dist/llm/router.d.ts +7 -0
  115. package/dist/llm/router.d.ts.map +1 -1
  116. package/dist/llm/router.js +33 -13
  117. package/dist/llm/router.js.map +1 -1
  118. package/dist/llm/types.d.ts +22 -4
  119. package/dist/llm/types.d.ts.map +1 -1
  120. package/dist/llm/types.js.map +1 -1
  121. package/dist/meta/metadata.json +1 -1
  122. package/dist/report/html.d.ts +3 -0
  123. package/dist/report/html.d.ts.map +1 -0
  124. package/dist/report/html.js +626 -0
  125. package/dist/report/html.js.map +1 -0
  126. package/dist/report/index.d.ts +2 -0
  127. package/dist/report/index.d.ts.map +1 -1
  128. package/dist/report/index.js +2 -0
  129. package/dist/report/index.js.map +1 -1
  130. package/dist/report/ingest-dossier.d.ts +81 -0
  131. package/dist/report/ingest-dossier.d.ts.map +1 -0
  132. package/dist/report/ingest-dossier.js +324 -0
  133. package/dist/report/ingest-dossier.js.map +1 -0
  134. package/dist/storage/index.d.ts +5 -0
  135. package/dist/storage/index.d.ts.map +1 -1
  136. package/dist/storage/index.js +12 -6
  137. package/dist/storage/index.js.map +1 -1
  138. package/dist/vision/geotech-document.d.ts +46 -0
  139. package/dist/vision/geotech-document.d.ts.map +1 -0
  140. package/dist/vision/geotech-document.js +576 -0
  141. package/dist/vision/geotech-document.js.map +1 -0
  142. package/dist/vision/index.d.ts +31 -0
  143. package/dist/vision/index.d.ts.map +1 -1
  144. package/dist/vision/index.js +659 -27
  145. package/dist/vision/index.js.map +1 -1
  146. package/dist/vision/ocr.d.ts +29 -0
  147. package/dist/vision/ocr.d.ts.map +1 -0
  148. package/dist/vision/ocr.js +287 -0
  149. package/dist/vision/ocr.js.map +1 -0
  150. package/dist/vision/preprocess.d.ts +26 -0
  151. package/dist/vision/preprocess.d.ts.map +1 -0
  152. package/dist/vision/preprocess.js +194 -0
  153. package/dist/vision/preprocess.js.map +1 -0
  154. package/package.json +5 -1
@@ -0,0 +1,46 @@
1
+ import type { LLMConfig } from '../llm/types.js';
2
+ import { type ParseSafety } from './parse.js';
3
+ export type { ParseSafety, ParseStatus } from './parse.js';
4
+ declare const MATERIAL_KINDS: readonly ["soil", "rock", "fill", "groundwater", "mixed", "other"];
5
+ export interface GeotechMaterialObservation {
6
+ kind: typeof MATERIAL_KINDS[number];
7
+ description: string;
8
+ uscsSymbol: string | null;
9
+ lithology: string | null;
10
+ }
11
+ export interface GeotechDocumentClassification {
12
+ system: string;
13
+ value: string;
14
+ context: string | null;
15
+ }
16
+ export interface GeotechParameterObservation {
17
+ name: string;
18
+ valueText: string;
19
+ numericValue: number | null;
20
+ unit: string | null;
21
+ material: string | null;
22
+ context: string | null;
23
+ }
24
+ export interface GeotechDocumentContext {
25
+ pageNumber?: number;
26
+ totalPages?: number;
27
+ pageTextHint?: string;
28
+ pageClassification?: string;
29
+ }
30
+ export interface GeotechDocumentInsight extends ParseSafety {
31
+ documentClass: string | null;
32
+ title: string | null;
33
+ summary: string | null;
34
+ materials: GeotechMaterialObservation[];
35
+ classifications: GeotechDocumentClassification[];
36
+ parameters: GeotechParameterObservation[];
37
+ risks: string[];
38
+ recommendations: string[];
39
+ pageNumber: number | null;
40
+ totalPages: number | null;
41
+ rawLLMText: string;
42
+ latencyMs: number;
43
+ }
44
+ export declare function extractGeotechDocumentFactsFromText(pageText: string, config: LLMConfig, context?: GeotechDocumentContext): Promise<GeotechDocumentInsight>;
45
+ export declare function interpretGeotechDocumentPage(imageBase64: string, mimeType: string, config: LLMConfig, context?: GeotechDocumentContext): Promise<GeotechDocumentInsight>;
46
+ //# sourceMappingURL=geotech-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geotech-document.d.ts","sourceRoot":"","sources":["../../src/vision/geotech-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6H3D,QAAA,MAAM,cAAc,oEAAqE,CAAC;AAE1F,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,0BAA0B,EAAE,CAAC;IACxC,eAAe,EAAE,6BAA6B,EAAE,CAAC;IACjD,UAAU,EAAE,2BAA2B,EAAE,CAAC;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoaD,wBAAsB,mCAAmC,CACvD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CA+IjC;AAED,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAwBjC"}
@@ -0,0 +1,576 @@
1
+ import { generateText } from '../llm/router.js';
2
+ import { clampConfidence, createParseSafety, deriveParseStatus, normalizeWarnings, parseJsonObject, } from './parse.js';
3
+ import { transcribeDocumentImageText } from './index.js';
4
+ function getHostedBetaGeotechDocumentMaxTokens(config, profile, requestedMaxTokens) {
5
+ if (config.provider !== 'hosted-beta') {
6
+ return requestedMaxTokens;
7
+ }
8
+ const cap = profile === 'structured-text' ? 700 : 850;
9
+ return Math.min(requestedMaxTokens, cap);
10
+ }
11
+ function isRecoverableEmptyResponse(error) {
12
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
13
+ return (message.includes('returned no content')
14
+ || message.includes('did not contain assistant text')
15
+ || message.includes('no completion choices')
16
+ || message.includes('empty completion'));
17
+ }
18
+ async function textWithRetry(prompt, config, systemPrompt, maxTokens) {
19
+ const start = Date.now();
20
+ const primaryMaxTokens = getHostedBetaGeotechDocumentMaxTokens(config, 'structured-text', maxTokens);
21
+ const fallbackMaxTokens = getHostedBetaGeotechDocumentMaxTokens(config, 'fallback-text', maxTokens + 250);
22
+ try {
23
+ const first = await generateText(prompt, config, {
24
+ systemPrompt,
25
+ temperature: 0.1,
26
+ jsonMode: true,
27
+ maxTokens: primaryMaxTokens,
28
+ });
29
+ if (first.text && first.text.trim().length > 10) {
30
+ return { text: first.text, latencyMs: first.latencyMs, usedFallback: false };
31
+ }
32
+ }
33
+ catch (error) {
34
+ if (!isRecoverableEmptyResponse(error)) {
35
+ throw error;
36
+ }
37
+ }
38
+ try {
39
+ const second = await generateText(prompt, config, {
40
+ systemPrompt: `${systemPrompt} Return best-effort structured information even if some fields are uncertain.`,
41
+ temperature: 0.25,
42
+ jsonMode: false,
43
+ maxTokens: fallbackMaxTokens,
44
+ });
45
+ if (second.text && second.text.trim().length > 0) {
46
+ return {
47
+ text: second.text,
48
+ latencyMs: Date.now() - start,
49
+ usedFallback: true,
50
+ };
51
+ }
52
+ }
53
+ catch (error) {
54
+ if (!isRecoverableEmptyResponse(error)) {
55
+ throw error;
56
+ }
57
+ }
58
+ return {
59
+ text: '',
60
+ latencyMs: Date.now() - start,
61
+ usedFallback: true,
62
+ };
63
+ }
64
+ function combineWarnings(base, extra) {
65
+ return [...new Set([...base, ...extra])];
66
+ }
67
+ function splitSentences(rawText) {
68
+ return rawText
69
+ .replace(/\s+/g, ' ')
70
+ .split(/(?<=[.!?])\s+/)
71
+ .map((sentence) => sentence.trim())
72
+ .filter(Boolean);
73
+ }
74
+ function firstMatchingSentence(rawText, predicate) {
75
+ return splitSentences(rawText).find(predicate) ?? null;
76
+ }
77
+ function readOptionalString(source, key) {
78
+ const value = source?.[key];
79
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
80
+ }
81
+ function readOptionalNumber(source, key) {
82
+ const value = source?.[key];
83
+ const numeric = typeof value === 'number' ? value : Number(value);
84
+ return Number.isFinite(numeric) ? numeric : null;
85
+ }
86
+ function normalizeTextList(value) {
87
+ if (!Array.isArray(value)) {
88
+ return [];
89
+ }
90
+ return [...new Set(value
91
+ .map((item) => (typeof item === 'string' ? item.trim() : ''))
92
+ .filter(Boolean))];
93
+ }
94
+ function isRecord(value) {
95
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
96
+ }
97
+ const MATERIAL_KINDS = ['soil', 'rock', 'fill', 'groundwater', 'mixed', 'other'];
98
+ function normalizeMaterialKind(value) {
99
+ return typeof value === 'string' && MATERIAL_KINDS.includes(value)
100
+ ? value
101
+ : 'other';
102
+ }
103
+ function inferUscsFromText(rawText) {
104
+ const match = rawText.match(/\b(GW|GP|GM|GC|SW|SP|SM|SC|ML|CL|OL|MH|CH|OH|PT|CL-ML)\b/i);
105
+ return match ? match[1].toUpperCase() : null;
106
+ }
107
+ function normalizeMaterials(value) {
108
+ if (!Array.isArray(value)) {
109
+ return [];
110
+ }
111
+ const seen = new Set();
112
+ const materials = [];
113
+ for (const item of value) {
114
+ if (!isRecord(item)) {
115
+ continue;
116
+ }
117
+ const description = typeof item.description === 'string' && item.description.trim()
118
+ ? item.description.trim()
119
+ : null;
120
+ if (!description) {
121
+ continue;
122
+ }
123
+ const normalized = {
124
+ kind: normalizeMaterialKind(item.kind),
125
+ description,
126
+ uscsSymbol: typeof item.uscsSymbol === 'string' && item.uscsSymbol.trim()
127
+ ? item.uscsSymbol.trim().toUpperCase()
128
+ : inferUscsFromText(description),
129
+ lithology: typeof item.lithology === 'string' && item.lithology.trim()
130
+ ? item.lithology.trim()
131
+ : null,
132
+ };
133
+ const key = [
134
+ normalized.kind,
135
+ normalized.description.toLowerCase(),
136
+ normalized.uscsSymbol ?? '',
137
+ normalized.lithology?.toLowerCase() ?? '',
138
+ ].join('|');
139
+ if (seen.has(key)) {
140
+ continue;
141
+ }
142
+ seen.add(key);
143
+ materials.push(normalized);
144
+ }
145
+ return materials;
146
+ }
147
+ function normalizeClassifications(value) {
148
+ if (!Array.isArray(value)) {
149
+ return [];
150
+ }
151
+ const seen = new Set();
152
+ const classifications = [];
153
+ for (const item of value) {
154
+ if (!isRecord(item)) {
155
+ continue;
156
+ }
157
+ const system = typeof item.system === 'string' && item.system.trim() ? item.system.trim() : null;
158
+ const classificationValue = typeof item.value === 'string' && item.value.trim() ? item.value.trim() : null;
159
+ if (!system || !classificationValue) {
160
+ continue;
161
+ }
162
+ const context = typeof item.context === 'string' && item.context.trim() ? item.context.trim() : null;
163
+ const key = [system.toLowerCase(), classificationValue.toLowerCase(), context?.toLowerCase() ?? ''].join('|');
164
+ if (seen.has(key)) {
165
+ continue;
166
+ }
167
+ seen.add(key);
168
+ classifications.push({
169
+ system,
170
+ value: classificationValue,
171
+ context,
172
+ });
173
+ }
174
+ return classifications;
175
+ }
176
+ function normalizeParameters(value) {
177
+ if (!Array.isArray(value)) {
178
+ return [];
179
+ }
180
+ const seen = new Set();
181
+ const parameters = [];
182
+ for (const item of value) {
183
+ if (!isRecord(item)) {
184
+ continue;
185
+ }
186
+ const name = typeof item.name === 'string' && item.name.trim() ? item.name.trim() : null;
187
+ const valueText = typeof item.valueText === 'string' && item.valueText.trim()
188
+ ? item.valueText.trim()
189
+ : (item.numericValue != null ? String(item.numericValue) : null);
190
+ if (!name || !valueText) {
191
+ continue;
192
+ }
193
+ const numericValue = typeof item.numericValue === 'number' && Number.isFinite(item.numericValue)
194
+ ? item.numericValue
195
+ : (Number.isFinite(Number(valueText)) ? Number(valueText) : null);
196
+ const unit = typeof item.unit === 'string' && item.unit.trim() ? item.unit.trim() : null;
197
+ const material = typeof item.material === 'string' && item.material.trim() ? item.material.trim() : null;
198
+ const context = typeof item.context === 'string' && item.context.trim() ? item.context.trim() : null;
199
+ const normalized = {
200
+ name,
201
+ valueText,
202
+ numericValue,
203
+ unit,
204
+ material,
205
+ context,
206
+ };
207
+ const key = [
208
+ normalized.name.toLowerCase(),
209
+ normalized.valueText.toLowerCase(),
210
+ normalized.unit?.toLowerCase() ?? '',
211
+ normalized.material?.toLowerCase() ?? '',
212
+ normalized.context?.toLowerCase() ?? '',
213
+ ].join('|');
214
+ if (seen.has(key)) {
215
+ continue;
216
+ }
217
+ seen.add(key);
218
+ parameters.push(normalized);
219
+ }
220
+ return parameters;
221
+ }
222
+ function classifyDocumentHeuristically(rawText) {
223
+ const normalized = rawText.toLowerCase();
224
+ if (/\bborehole\b|\bspt\b|\bwater table\b/.test(normalized))
225
+ return 'borehole-log';
226
+ if (/\brqd\b|\brmr\b|\bucs\b|\bjoint\b|\bcore box\b/.test(normalized))
227
+ return 'rock-mass-document';
228
+ if (/\b(chain of custody|required analysis|sample id|parcel id|matrix type|lab use only|certificate of analysis|analyte|reporting limit|source result|surrogate|analytical laboratory|paracel|ccil|liquid limit|plasticity index|atterberg|triaxial|permeability)\b/.test(normalized))
229
+ return 'lab-report';
230
+ if (/\blithology\b|\bgeology\b|\bstrata\b|\bformation\b/.test(normalized))
231
+ return 'geology-log';
232
+ return 'geotechnical-document';
233
+ }
234
+ function extractRiskHints(rawText) {
235
+ const sentences = splitSentences(rawText);
236
+ const matches = sentences.filter((sentence) => /(settlement|liquefaction|groundwater|seepage|collapse|weathered|weak|loose|soft|instability|squeezing|high plasticity|compressible)/i.test(sentence));
237
+ return [...new Set(matches)].slice(0, 6);
238
+ }
239
+ function extractParameterMatches(rawText) {
240
+ const patterns = [
241
+ { name: 'frictionAngle', unit: 'deg', regex: /\b(?:friction angle|phi|φ)\b[^0-9-]{0,20}(-?\d+(?:\.\d+)?)\s*(?:deg|°)?/gi },
242
+ { name: 'cohesion', unit: 'kPa', regex: /\bcohesion\b[^0-9-]{0,20}(-?\d+(?:\.\d+)?)\s*(?:kpa)?/gi },
243
+ { name: 'unitWeight', unit: 'kN/m3', regex: /\b(?:unit weight|gamma|γ)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*(?:kn\/m(?:\^?3|3|³))?/gi },
244
+ { name: 'waterContent', unit: '%', regex: /\b(?:water content|moisture content)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*%/gi },
245
+ { name: 'liquidLimit', unit: '%', regex: /\b(?:liquid limit|ll)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*%/gi },
246
+ { name: 'plasticityIndex', unit: '%', regex: /\b(?:plasticity index|pi)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*%/gi },
247
+ { name: 'permeability', unit: 'm/s', regex: /\b(?:permeability|hydraulic conductivity|k)\b[^0-9-]{0,20}((?:\d+(?:\.\d+)?)?(?:e[+-]?\d+|\d*(?:\.\d+)?))\s*(?:m\/s)?/gi },
248
+ { name: 'modulusSubgradeReaction', unit: 'MPa/m', regex: /\bmodulus of subgrade reaction\b[^0-9-]{0,40}(\d+(?:\.\d+)?)\s*(?:mpa\s*\/\s*m|mpa\/m)?/gi },
249
+ { name: 'relativeCompaction', unit: '% SPMDD', regex: /\bcompacted to\b[^0-9]{0,24}(\d+(?:\.\d+)?)\s*%\s+of\b[^.]{0,96}\b(?:standard proctor maximum dry density|spmdd)\b/gi },
250
+ { name: 'optimumMoistureTolerance', unit: '%', regex: /\bwithin\s*\+\/-\s*(\d+(?:\.\d+)?)\s*%\s+of\s+its\s+optimum moisture content\b/gi },
251
+ { name: 'liftThickness', unit: 'm', regex: /\b(?:not greater than|generally not greater than)\s*(\d+(?:\.\d+)?)\s*m\b[^.]{0,80}\bloose lifts\b/gi },
252
+ { name: 'ucs', unit: 'MPa', regex: /\b(?:ucs|uniaxial compressive strength)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*(?:mpa)?/gi },
253
+ { name: 'rqd', unit: '%', regex: /\brqd\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*%?/gi },
254
+ { name: 'rmr', unit: null, regex: /\brmr\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\b/gi },
255
+ { name: 'sptN', unit: null, regex: /\b(?:spt|n[- ]?value|n60|n160)\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\b/gi },
256
+ ];
257
+ const parameters = [];
258
+ for (const pattern of patterns) {
259
+ for (const match of rawText.matchAll(pattern.regex)) {
260
+ const valueText = match[1]?.trim();
261
+ if (!valueText) {
262
+ continue;
263
+ }
264
+ parameters.push({
265
+ name: pattern.name,
266
+ valueText,
267
+ numericValue: Number.isFinite(Number(valueText)) ? Number(valueText) : null,
268
+ unit: pattern.unit,
269
+ material: null,
270
+ context: null,
271
+ });
272
+ }
273
+ }
274
+ return normalizeParameters(parameters);
275
+ }
276
+ function extractMaterialMatches(rawText) {
277
+ const matches = [];
278
+ const normalized = rawText.toLowerCase();
279
+ const dictionaries = [
280
+ { kind: 'soil', values: ['clay', 'silt', 'sand', 'gravel', 'peat', 'fill', 'alluvium', 'colluvium'] },
281
+ { kind: 'rock', values: ['sandstone', 'siltstone', 'shale', 'mudstone', 'claystone', 'limestone', 'granite', 'basalt', 'tuff', 'schist', 'gneiss', 'rock'] },
282
+ { kind: 'groundwater', values: ['groundwater', 'water table', 'seepage'] },
283
+ ];
284
+ for (const dictionary of dictionaries) {
285
+ for (const value of dictionary.values) {
286
+ if (!normalized.includes(value)) {
287
+ continue;
288
+ }
289
+ matches.push({
290
+ kind: dictionary.kind,
291
+ description: value,
292
+ uscsSymbol: dictionary.kind === 'soil' ? inferUscsFromText(value) : null,
293
+ lithology: dictionary.kind === 'rock' && value !== 'rock' ? value : null,
294
+ });
295
+ }
296
+ }
297
+ const layeredSentences = splitSentences(rawText).filter((sentence) => /(clay|silt|sand|gravel|peat|fill|sandstone|shale|limestone|granite|basalt|mudstone|siltstone)/i.test(sentence));
298
+ for (const sentence of layeredSentences.slice(0, 6)) {
299
+ const description = sentence.trim();
300
+ const lower = description.toLowerCase();
301
+ const kind = /(sandstone|shale|limestone|granite|basalt|mudstone|siltstone|rock)/i.test(lower)
302
+ ? 'rock'
303
+ : /(water table|groundwater|seepage)/i.test(lower)
304
+ ? 'groundwater'
305
+ : /(fill)/i.test(lower)
306
+ ? 'fill'
307
+ : 'soil';
308
+ matches.push({
309
+ kind,
310
+ description,
311
+ uscsSymbol: kind === 'soil' ? inferUscsFromText(description) : null,
312
+ lithology: kind === 'rock'
313
+ ? firstMatchingSentence(description, () => true)
314
+ : null,
315
+ });
316
+ }
317
+ return normalizeMaterials(matches);
318
+ }
319
+ function extractClassificationMatches(rawText) {
320
+ const classifications = [];
321
+ const uscsMatches = [...rawText.matchAll(/\b(GW|GP|GM|GC|SW|SP|SM|SC|ML|CL|OL|MH|CH|OH|PT|CL-ML)\b/gi)];
322
+ if (uscsMatches.length > 0) {
323
+ for (const match of uscsMatches) {
324
+ classifications.push({
325
+ system: 'USCS',
326
+ value: match[1].toUpperCase(),
327
+ context: null,
328
+ });
329
+ }
330
+ }
331
+ const scalarMatches = [
332
+ { system: 'RMR', regex: /\bRMR\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\b/i },
333
+ { system: 'RQD', regex: /\bRQD\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\s*%?/i },
334
+ { system: 'Q-system', regex: /\bQ(?:-system)?\b[^0-9-]{0,20}(\d+(?:\.\d+)?)\b/i },
335
+ ];
336
+ for (const scalarMatch of scalarMatches) {
337
+ const match = rawText.match(scalarMatch.regex);
338
+ if (match?.[1]) {
339
+ classifications.push({
340
+ system: scalarMatch.system,
341
+ value: match[1],
342
+ context: null,
343
+ });
344
+ }
345
+ }
346
+ return normalizeClassifications(classifications);
347
+ }
348
+ function extractGeotechDocumentFallback(rawText) {
349
+ if (!rawText.trim()) {
350
+ return { value: null, baseStatus: 'failed', warnings: [] };
351
+ }
352
+ const summary = firstMatchingSentence(rawText, (sentence) => /(ground|soil|rock|litholog|formation|parameter|strength|plasticity|permeability|settlement|bearing|laborator|analysis|sample id|chain of custody|required analysis|parcel id)/i.test(sentence)) ?? splitSentences(rawText)[0] ?? null;
353
+ const materials = extractMaterialMatches(rawText);
354
+ const classifications = extractClassificationMatches(rawText);
355
+ const parameters = extractParameterMatches(rawText);
356
+ const risks = extractRiskHints(rawText);
357
+ const recommendations = splitSentences(rawText)
358
+ .filter((sentence) => /(recommend|should|verify|review|check|monitor|confirm|test)/i.test(sentence))
359
+ .slice(0, 5);
360
+ const value = {
361
+ documentClass: classifyDocumentHeuristically(rawText),
362
+ };
363
+ if (summary)
364
+ value.summary = summary;
365
+ if (materials.length > 0)
366
+ value.materials = materials;
367
+ if (classifications.length > 0)
368
+ value.classifications = classifications;
369
+ if (parameters.length > 0)
370
+ value.parameters = parameters;
371
+ if (risks.length > 0)
372
+ value.risks = risks;
373
+ if (recommendations.length > 0)
374
+ value.recommendations = recommendations;
375
+ if (Object.keys(value).length <= 1) {
376
+ return { value: null, baseStatus: 'failed', warnings: [] };
377
+ }
378
+ return {
379
+ value,
380
+ baseStatus: 'partial',
381
+ warnings: ['Vision model returned narrative text; extracted partial structured geotechnical document fields.'],
382
+ };
383
+ }
384
+ function buildGeotechDocumentInsightFromValue(input) {
385
+ const materials = normalizeMaterials(input.mergedValue.materials);
386
+ const classifications = normalizeClassifications(input.mergedValue.classifications);
387
+ const parameters = normalizeParameters(input.mergedValue.parameters);
388
+ const risks = normalizeTextList(input.mergedValue.risks);
389
+ const recommendations = normalizeTextList(input.mergedValue.recommendations);
390
+ const summary = readOptionalString(input.mergedValue, 'summary');
391
+ const title = readOptionalString(input.mergedValue, 'title');
392
+ const documentClass = readOptionalString(input.mergedValue, 'documentClass')
393
+ ?? classifyDocumentHeuristically(input.normalizedPageText);
394
+ const confidence = clampConfidence(input.mergedValue.confidence, input.baseStatus === 'parsed' ? 74 : input.baseStatus === 'partial' ? 58 : 0);
395
+ const status = deriveParseStatus(input.baseStatus, [
396
+ summary,
397
+ materials.length > 0 ? 'materials' : null,
398
+ classifications.length > 0 ? 'classifications' : null,
399
+ parameters.length > 0 ? 'parameters' : null,
400
+ ].filter((value) => value !== null).length, 2);
401
+ const safety = createParseSafety(status, confidence, combineWarnings(input.warnings, normalizeWarnings(input.mergedValue.warnings)));
402
+ return {
403
+ ...safety,
404
+ documentClass,
405
+ title,
406
+ summary,
407
+ materials,
408
+ classifications,
409
+ parameters,
410
+ risks,
411
+ recommendations,
412
+ pageNumber: input.context.pageNumber ?? null,
413
+ totalPages: input.context.totalPages ?? null,
414
+ rawLLMText: input.rawLLMText,
415
+ latencyMs: input.latencyMs,
416
+ };
417
+ }
418
+ function shouldShortCircuitToDeterministicFallback(insight) {
419
+ const hasSummary = typeof insight.summary === 'string' && insight.summary.trim().length > 0;
420
+ const hasStrongStructuredSignal = insight.parameters.length > 0
421
+ || (insight.materials.length > 0 && insight.classifications.length > 0)
422
+ || (insight.materials.length > 0 && insight.risks.length > 0);
423
+ const hasRecognizableLabFormSignal = insight.documentClass === 'lab-report'
424
+ && /chain of custody|required analysis|sample id|analytical laboratory|laboratories|certificate of analysis|analyte|reporting limit|source result|surrogate/i.test(`${insight.title ?? ''}\n${insight.summary ?? ''}`);
425
+ return hasSummary && (hasStrongStructuredSignal || hasRecognizableLabFormSignal);
426
+ }
427
+ export async function extractGeotechDocumentFactsFromText(pageText, config, context = {}) {
428
+ const normalizedPageText = pageText.replace(/\s+/g, ' ').trim();
429
+ if (!normalizedPageText) {
430
+ return {
431
+ ...createParseSafety('failed', 0, ['No usable document text was available for geotechnical extraction.']),
432
+ documentClass: null,
433
+ title: null,
434
+ summary: null,
435
+ materials: [],
436
+ classifications: [],
437
+ parameters: [],
438
+ risks: [],
439
+ recommendations: [],
440
+ pageNumber: context.pageNumber ?? null,
441
+ totalPages: context.totalPages ?? null,
442
+ rawLLMText: '',
443
+ latencyMs: 0,
444
+ };
445
+ }
446
+ const contextParts = [
447
+ context.pageNumber != null && context.totalPages != null
448
+ ? `Page ${context.pageNumber} of ${context.totalPages}`
449
+ : null,
450
+ context.pageClassification ? `Page classification: ${context.pageClassification}` : null,
451
+ ].filter((value) => Boolean(value));
452
+ const sharedContext = contextParts.join('\n');
453
+ const fallback = extractGeotechDocumentFallback(normalizedPageText);
454
+ const deterministicFallbackInsight = fallback.value
455
+ ? buildGeotechDocumentInsightFromValue({
456
+ mergedValue: fallback.value,
457
+ baseStatus: fallback.baseStatus,
458
+ warnings: fallback.warnings,
459
+ normalizedPageText,
460
+ context,
461
+ rawLLMText: '',
462
+ latencyMs: 0,
463
+ })
464
+ : null;
465
+ if (deterministicFallbackInsight && shouldShortCircuitToDeterministicFallback(deterministicFallbackInsight)) {
466
+ const deterministicConfidence = Math.max(deterministicFallbackInsight.confidence, 72);
467
+ return {
468
+ ...deterministicFallbackInsight,
469
+ confidence: deterministicConfidence,
470
+ canAutoProceed: deterministicFallbackInsight.parseStatus === 'parsed'
471
+ && deterministicConfidence >= 70,
472
+ warnings: combineWarnings(deterministicFallbackInsight.warnings, ['Strong deterministic text extraction satisfied the evidence threshold; skipped model extraction for this page.']),
473
+ };
474
+ }
475
+ const prompt = `Analyze this extracted geotechnical document text and extract the crucial engineering content. Respond with ONLY a JSON object:
476
+ {
477
+ "documentClass": "<borehole-log|geology-log|lab-report|rock-mass-document|site-investigation-report|geotechnical-document|unknown>",
478
+ "title": "<short title if clearly visible in the text or null>",
479
+ "summary": "<brief engineering summary of the page text>",
480
+ "materials": [
481
+ {
482
+ "kind": "<soil|rock|fill|groundwater|mixed|other>",
483
+ "description": "<ground type / soil / rock / lithology description>",
484
+ "uscsSymbol": "<USCS symbol if identifiable or null>",
485
+ "lithology": "<lithology if identifiable or null>"
486
+ }
487
+ ],
488
+ "classifications": [
489
+ {
490
+ "system": "<USCS|RMR|RQD|Q-system|other>",
491
+ "value": "<classification value>",
492
+ "context": "<material or page context or null>"
493
+ }
494
+ ],
495
+ "parameters": [
496
+ {
497
+ "name": "<parameter key such as frictionAngle, cohesion, unitWeight, waterContent, liquidLimit, plasticityIndex, permeability, ucs, rqd, rmr, sptN>",
498
+ "valueText": "<printed or inferred value as text>",
499
+ "numericValue": <number or null>,
500
+ "unit": "<unit or null>",
501
+ "material": "<material/layer context or null>",
502
+ "context": "<page/table context or null>"
503
+ }
504
+ ],
505
+ "risks": ["<engineering risk or limitation>"],
506
+ "recommendations": ["<follow-up recommendation>"],
507
+ "confidence": <number 0-100>,
508
+ "warnings": ["<warning>", "<warning>"]
509
+ }
510
+
511
+ Capture geology, lithology, soil/rock mechanics parameters, groundwater cues, and critical engineering insights only when supported by the text.
512
+
513
+ Context:
514
+ ${sharedContext}
515
+
516
+ Document text:
517
+ ${normalizedPageText.slice(0, 6000)}`;
518
+ let response;
519
+ try {
520
+ response = await textWithRetry(prompt, config, 'You are an expert geotechnical engineer and engineering geologist extracting structured engineering meaning from document text. Respond with JSON only when possible.', 1200);
521
+ }
522
+ catch (error) {
523
+ if (deterministicFallbackInsight) {
524
+ const message = error instanceof Error ? error.message : String(error);
525
+ return {
526
+ ...deterministicFallbackInsight,
527
+ canAutoProceed: false,
528
+ warnings: combineWarnings(deterministicFallbackInsight.warnings, [`Structured text extraction failed (${message}); used deterministic fallback instead.`]),
529
+ };
530
+ }
531
+ throw error;
532
+ }
533
+ const parsed = parseJsonObject(response.text);
534
+ const mergedValue = {
535
+ ...(fallback.value ?? {}),
536
+ ...(parsed.value ?? {}),
537
+ };
538
+ const baseStatus = parsed.baseStatus !== 'failed' ? parsed.baseStatus : fallback.baseStatus;
539
+ const warnings = [...parsed.warnings, ...fallback.warnings];
540
+ if (response.usedFallback) {
541
+ warnings.push('Text extraction required a fallback retry before structured parsing succeeded.');
542
+ }
543
+ return buildGeotechDocumentInsightFromValue({
544
+ mergedValue,
545
+ baseStatus,
546
+ warnings,
547
+ normalizedPageText,
548
+ context,
549
+ rawLLMText: response.text,
550
+ latencyMs: response.latencyMs,
551
+ });
552
+ }
553
+ export async function interpretGeotechDocumentPage(imageBase64, mimeType, config, context = {}) {
554
+ const seededText = typeof context.pageTextHint === 'string' && context.pageTextHint.trim().length >= 24
555
+ ? context.pageTextHint.trim()
556
+ : null;
557
+ let text = seededText;
558
+ const transcriptionWarnings = [];
559
+ let transcriptionLatencyMs = 0;
560
+ if (!text) {
561
+ const transcription = await transcribeDocumentImageText(imageBase64, mimeType, config);
562
+ text = transcription.text.trim();
563
+ transcriptionWarnings.push(...transcription.warnings);
564
+ transcriptionLatencyMs = transcription.latencyMs;
565
+ if (!text) {
566
+ transcriptionWarnings.push('OCR-style transcription did not recover usable text from the page image.');
567
+ }
568
+ }
569
+ const extracted = await extractGeotechDocumentFactsFromText(text ?? '', config, context);
570
+ return {
571
+ ...extracted,
572
+ warnings: combineWarnings(extracted.warnings, transcriptionWarnings),
573
+ latencyMs: extracted.latencyMs + transcriptionLatencyMs,
574
+ };
575
+ }
576
+ //# sourceMappingURL=geotech-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geotech-document.js","sourceRoot":"","sources":["../../src/vision/geotech-document.ts"],"names":[],"mappings":"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"}