@memberjunction/db-auto-doc 6.2.0-edge.5 → 6.2.0-edge.6
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/README.md +10 -0
- package/dist/api/DBAutoDocAPI.d.ts +2 -0
- package/dist/api/DBAutoDocAPI.d.ts.map +1 -1
- package/dist/api/DBAutoDocAPI.js +2 -1
- package/dist/api/DBAutoDocAPI.js.map +1 -1
- package/dist/core/AnalysisEngine.d.ts +24 -0
- package/dist/core/AnalysisEngine.d.ts.map +1 -1
- package/dist/core/AnalysisEngine.js +104 -11
- package/dist/core/AnalysisEngine.js.map +1 -1
- package/dist/core/AnalysisOrchestrator.d.ts.map +1 -1
- package/dist/core/AnalysisOrchestrator.js +17 -5
- package/dist/core/AnalysisOrchestrator.js.map +1 -1
- package/dist/discovery/ColumnNormalizer.d.ts +31 -0
- package/dist/discovery/ColumnNormalizer.d.ts.map +1 -1
- package/dist/discovery/ColumnNormalizer.js +68 -2
- package/dist/discovery/ColumnNormalizer.js.map +1 -1
- package/dist/discovery/Composer.d.ts +33 -2
- package/dist/discovery/Composer.d.ts.map +1 -1
- package/dist/discovery/Composer.js +126 -5
- package/dist/discovery/Composer.js.map +1 -1
- package/dist/discovery/DiscoveryEngine.d.ts +3 -0
- package/dist/discovery/DiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/DiscoveryEngine.js +1 -1
- package/dist/discovery/DiscoveryEngine.js.map +1 -1
- package/dist/discovery/EmbeddingProvider.d.ts +6 -1
- package/dist/discovery/EmbeddingProvider.d.ts.map +1 -1
- package/dist/discovery/EmbeddingProvider.js +11 -1
- package/dist/discovery/EmbeddingProvider.js.map +1 -1
- package/dist/discovery/IndexKeyEvidence.d.ts +36 -0
- package/dist/discovery/IndexKeyEvidence.d.ts.map +1 -0
- package/dist/discovery/IndexKeyEvidence.js +42 -0
- package/dist/discovery/IndexKeyEvidence.js.map +1 -0
- package/dist/discovery/JoinProbe.d.ts +148 -0
- package/dist/discovery/JoinProbe.d.ts.map +1 -0
- package/dist/discovery/JoinProbe.js +233 -0
- package/dist/discovery/JoinProbe.js.map +1 -0
- package/dist/discovery/LLMDiscoveryValidator.d.ts +8 -1
- package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -1
- package/dist/discovery/LLMDiscoveryValidator.js +24 -3
- package/dist/discovery/LLMDiscoveryValidator.js.map +1 -1
- package/dist/discovery/LLMSanityChecker.d.ts.map +1 -1
- package/dist/discovery/LLMSanityChecker.js +10 -1
- package/dist/discovery/LLMSanityChecker.js.map +1 -1
- package/dist/discovery/OrganicKeyDetector.d.ts +29 -1
- package/dist/discovery/OrganicKeyDetector.d.ts.map +1 -1
- package/dist/discovery/OrganicKeyDetector.js +26 -3
- package/dist/discovery/OrganicKeyDetector.js.map +1 -1
- package/dist/discovery/OrganicKeyTranslator.d.ts +24 -5
- package/dist/discovery/OrganicKeyTranslator.d.ts.map +1 -1
- package/dist/discovery/OrganicKeyTranslator.js +32 -14
- package/dist/discovery/OrganicKeyTranslator.js.map +1 -1
- package/dist/discovery/PKDetector.d.ts +9 -0
- package/dist/discovery/PKDetector.d.ts.map +1 -1
- package/dist/discovery/PKDetector.js +86 -8
- package/dist/discovery/PKDetector.js.map +1 -1
- package/dist/discovery/SemanticPhase.d.ts +25 -0
- package/dist/discovery/SemanticPhase.d.ts.map +1 -1
- package/dist/discovery/SemanticPhase.js +55 -11
- package/dist/discovery/SemanticPhase.js.map +1 -1
- package/dist/discovery/embedding-provider-default.d.ts +25 -0
- package/dist/discovery/embedding-provider-default.d.ts.map +1 -0
- package/dist/discovery/embedding-provider-default.js +47 -0
- package/dist/discovery/embedding-provider-default.js.map +1 -0
- package/dist/drivers/BaseAutoDocDriver.d.ts +63 -0
- package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -1
- package/dist/drivers/BaseAutoDocDriver.js.map +1 -1
- package/dist/drivers/MySQLDriver.d.ts +21 -1
- package/dist/drivers/MySQLDriver.d.ts.map +1 -1
- package/dist/drivers/MySQLDriver.js +64 -0
- package/dist/drivers/MySQLDriver.js.map +1 -1
- package/dist/drivers/PostgreSQLDriver.d.ts +34 -1
- package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -1
- package/dist/drivers/PostgreSQLDriver.js +91 -0
- package/dist/drivers/PostgreSQLDriver.js.map +1 -1
- package/dist/drivers/SQLServerDriver.d.ts +28 -1
- package/dist/drivers/SQLServerDriver.d.ts.map +1 -1
- package/dist/drivers/SQLServerDriver.js +106 -0
- package/dist/drivers/SQLServerDriver.js.map +1 -1
- package/dist/drivers/probeErrors.d.ts +30 -0
- package/dist/drivers/probeErrors.d.ts.map +1 -0
- package/dist/drivers/probeErrors.js +94 -0
- package/dist/drivers/probeErrors.js.map +1 -0
- package/dist/generators/AdditionalSchemaInfoGenerator.d.ts +0 -18
- package/dist/generators/AdditionalSchemaInfoGenerator.d.ts.map +1 -1
- package/dist/generators/AdditionalSchemaInfoGenerator.js +45 -4
- package/dist/generators/AdditionalSchemaInfoGenerator.js.map +1 -1
- package/dist/prompts/PromptEngine.d.ts.map +1 -1
- package/dist/prompts/PromptEngine.js +10 -1
- package/dist/prompts/PromptEngine.js.map +1 -1
- package/dist/types/config.d.ts +82 -4
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/discovery.d.ts +39 -0
- package/dist/types/discovery.d.ts.map +1 -1
- package/dist/types/state.d.ts +2 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/utils/call-deadline.d.ts +43 -0
- package/dist/utils/call-deadline.d.ts.map +1 -0
- package/dist/utils/call-deadline.js +81 -0
- package/dist/utils/call-deadline.js.map +1 -0
- package/dist/utils/index-hints.d.ts +8 -1
- package/dist/utils/index-hints.d.ts.map +1 -1
- package/dist/utils/index-hints.js +15 -0
- package/dist/utils/index-hints.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/seed-context.d.ts +23 -0
- package/dist/utils/seed-context.d.ts.map +1 -0
- package/dist/utils/seed-context.js +38 -0
- package/dist/utils/seed-context.js.map +1 -0
- package/package.json +5 -5
- package/prompts/fk-pruning-holistic.md +7 -0
- package/prompts/fk-pruning-table.md +7 -0
- package/prompts/pk-pruning-holistic.md +7 -0
- package/prompts/pk-pruning-table.md +7 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JoinProbe — verify a candidate key against the data before emitting it.
|
|
3
|
+
*
|
|
4
|
+
* Every key DBAutoDoc writes into `additionalSchemaInfo` is a claim that a join
|
|
5
|
+
* works. Until this module existed, two of the three paths that emit keys never
|
|
6
|
+
* checked that claim:
|
|
7
|
+
*
|
|
8
|
+
* - the ORGANIC path (SemanticPhase → Composer → OrganicKeyTranslator) reasons
|
|
9
|
+
* from LLM concept names and embedding distance and emits whatever it formed;
|
|
10
|
+
* - the LLM-PROPOSED FK path (AnalysisEngine.applyStructuredInsights) stamps a
|
|
11
|
+
* candidate `status: 'confirmed'` with a literal `valueOverlap: 0` placeholder;
|
|
12
|
+
* - only the STATISTICAL FK path (FKDetector.analyzeFKCandidate) probed, via
|
|
13
|
+
* `testValueOverlap` + its 75% GATE 6.
|
|
14
|
+
*
|
|
15
|
+
* A key that matches nothing is worse than a missing key: the join it generates
|
|
16
|
+
* returns an empty result with no error, which is indistinguishable from a true
|
|
17
|
+
* negative for every downstream consumer.
|
|
18
|
+
*
|
|
19
|
+
* ── What is probed ───────────────────────────────────────────────────────────
|
|
20
|
+
* One query per candidate edge, returning exactly two integers: how many distinct
|
|
21
|
+
* non-null child values were sampled, and how many of those exist in the parent
|
|
22
|
+
* column. That is the containment ratio, and it is the whole measurement.
|
|
23
|
+
*
|
|
24
|
+
* ── Never read customer data values ──────────────────────────────────────────
|
|
25
|
+
* The probe returns counts and nothing else. There is no code path here that can
|
|
26
|
+
* surface a value, a sample row, or a masked select — {@link JoinProbeResult}
|
|
27
|
+
* carries no value-bearing field, and the driver contract
|
|
28
|
+
* ({@link BaseAutoDocDriver.ProbeJoinContainment}) returns two numbers. "4,812 of
|
|
29
|
+
* 5,000 matched" is the maximum resolution this module is capable of.
|
|
30
|
+
*
|
|
31
|
+
* ── The bound ────────────────────────────────────────────────────────────────
|
|
32
|
+
* An unbounded probe over a wide schema is how DBAutoDoc burns its budget, so the
|
|
33
|
+
* cost is capped three ways, all configurable:
|
|
34
|
+
*
|
|
35
|
+
* 1. per-probe row bound — the child sample is capped at `sampleSize`
|
|
36
|
+
* (default 1000 distinct values);
|
|
37
|
+
* 2. per-run probe count — at most `maxProbes` probes per run (default 500),
|
|
38
|
+
* after which every remaining candidate is Unprobed;
|
|
39
|
+
* 3. per-probe timeout — `probeTimeoutMs` (default 5000), after which that
|
|
40
|
+
* one probe is Unprobed and the run continues.
|
|
41
|
+
*
|
|
42
|
+
* ── Refusal behaviour ────────────────────────────────────────────────────────
|
|
43
|
+
* The three outcomes are deliberately distinct, because conflating the last two
|
|
44
|
+
* is the defect this module exists to remove:
|
|
45
|
+
*
|
|
46
|
+
* Verified containment >= minContainment. Emit, stamped with the counts.
|
|
47
|
+
* Refuted the probe RAN and measured containment below the floor. Do NOT emit.
|
|
48
|
+
* Unprobed the probe could not run — no permission, timeout, budget exhausted,
|
|
49
|
+
* incomparable types, missing table. EMIT, stamped `Unprobed` with the
|
|
50
|
+
* reason, and never stamped Verified.
|
|
51
|
+
*
|
|
52
|
+
* Emitting on Unprobed is the deliberate choice. Refusing to emit whenever the
|
|
53
|
+
* probe cannot run converts a permissions or timeout problem into total key loss
|
|
54
|
+
* with no signal — which is precisely the failure mode of emitting nothing
|
|
55
|
+
* silently. So the engine refuses only on measured refutation; it never refuses
|
|
56
|
+
* out of ignorance, and it never claims a verification it did not perform.
|
|
57
|
+
*/
|
|
58
|
+
/** Resolved defaults for {@link KeyVerificationConfig}. */
|
|
59
|
+
export const DEFAULT_KEY_VERIFICATION = {
|
|
60
|
+
enabled: true,
|
|
61
|
+
sampleSize: 1000,
|
|
62
|
+
maxProbes: 500,
|
|
63
|
+
probeTimeoutMs: 5000,
|
|
64
|
+
minContainment: 0.05,
|
|
65
|
+
};
|
|
66
|
+
function refRefersToSame(a, b) {
|
|
67
|
+
return (a.Schema.toLowerCase() === b.Schema.toLowerCase() &&
|
|
68
|
+
a.Table.toLowerCase() === b.Table.toLowerCase() &&
|
|
69
|
+
a.Column.toLowerCase() === b.Column.toLowerCase());
|
|
70
|
+
}
|
|
71
|
+
/** Stable cache key for an edge, so the same candidate is never probed twice in a run. */
|
|
72
|
+
export function CandidateKey(c) {
|
|
73
|
+
const f = (r) => `${r.Schema}.${r.Table}.${r.Column}`.toLowerCase();
|
|
74
|
+
const edgeKey = `${f(c.Child)}->${f(c.Parent)}`;
|
|
75
|
+
// Exact on both sides is the same probe whether or not the candidate spelled it out, so
|
|
76
|
+
// an organic edge and an FK edge over the same columns share one measurement.
|
|
77
|
+
const n = c.Normalization;
|
|
78
|
+
const exact = !n || (n.Child === 'ExactMatch' && n.Parent === 'ExactMatch');
|
|
79
|
+
return exact ? edgeKey : `${edgeKey}|${n.Child}/${n.Parent}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Verifies candidate key edges against the live database, under a fixed budget.
|
|
83
|
+
*
|
|
84
|
+
* One instance per analysis run: the probe cap and the result cache are per-run
|
|
85
|
+
* state, so sharing an instance across the organic and FK paths is what keeps the
|
|
86
|
+
* total cost bounded rather than bounded-per-path.
|
|
87
|
+
*/
|
|
88
|
+
export class KeyVerifier {
|
|
89
|
+
constructor(driver, config = {}) {
|
|
90
|
+
this.driver = driver;
|
|
91
|
+
this.cache = new Map();
|
|
92
|
+
this.probesUsed = 0;
|
|
93
|
+
this.measured = 0;
|
|
94
|
+
this.unprobedCount = 0;
|
|
95
|
+
this.cfg = { ...DEFAULT_KEY_VERIFICATION, ...stripUndefined(config) };
|
|
96
|
+
}
|
|
97
|
+
get Budget() {
|
|
98
|
+
return {
|
|
99
|
+
ProbesUsed: this.probesUsed,
|
|
100
|
+
ProbesAllowed: this.cfg.maxProbes,
|
|
101
|
+
Exhausted: this.probesUsed >= this.cfg.maxProbes,
|
|
102
|
+
Measured: this.measured,
|
|
103
|
+
Unprobed: this.unprobedCount,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** The resolved configuration, so callers can report the bound they ran under. */
|
|
107
|
+
get ResolvedConfig() {
|
|
108
|
+
return { ...this.cfg };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Verify one candidate edge. Never throws: a probe that cannot run comes back
|
|
112
|
+
* as `Unprobed` with a reason, which callers must not treat as a refutation.
|
|
113
|
+
*/
|
|
114
|
+
async Verify(candidate) {
|
|
115
|
+
const ck = CandidateKey(candidate);
|
|
116
|
+
const cached = this.cache.get(ck);
|
|
117
|
+
if (cached)
|
|
118
|
+
return cached;
|
|
119
|
+
const result = await this.runProbe(candidate);
|
|
120
|
+
this.cache.set(ck, result);
|
|
121
|
+
if (result.Status === 'Unprobed')
|
|
122
|
+
this.unprobedCount += 1;
|
|
123
|
+
else
|
|
124
|
+
this.measured += 1;
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Verify many candidates, sequentially so the per-run bound is honored exactly.
|
|
129
|
+
* Returns a map keyed by {@link CandidateKey}.
|
|
130
|
+
*/
|
|
131
|
+
async VerifyAll(candidates) {
|
|
132
|
+
const out = new Map();
|
|
133
|
+
for (const c of candidates) {
|
|
134
|
+
out.set(CandidateKey(c), await this.Verify(c));
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
async runProbe(candidate) {
|
|
139
|
+
const probedAt = new Date().toISOString();
|
|
140
|
+
if (!this.cfg.enabled) {
|
|
141
|
+
return unprobed('key verification disabled by configuration', probedAt);
|
|
142
|
+
}
|
|
143
|
+
if (!this.driver) {
|
|
144
|
+
return unprobed('no database driver available to probe', probedAt);
|
|
145
|
+
}
|
|
146
|
+
if (refRefersToSame(candidate.Child, candidate.Parent)) {
|
|
147
|
+
return unprobed('child and parent are the same column', probedAt);
|
|
148
|
+
}
|
|
149
|
+
const normalization = probeNormalizationFor(candidate);
|
|
150
|
+
if (!normalization) {
|
|
151
|
+
// The expression is model-written SQL; the probe does not execute it, and a raw
|
|
152
|
+
// comparison would measure a different join than the one that will run.
|
|
153
|
+
return unprobed('custom normalization expression is not probed', probedAt);
|
|
154
|
+
}
|
|
155
|
+
if (this.probesUsed >= this.cfg.maxProbes) {
|
|
156
|
+
return unprobed(`probe budget exhausted (${this.cfg.maxProbes} probes used); candidate not verified`, probedAt);
|
|
157
|
+
}
|
|
158
|
+
this.probesUsed += 1;
|
|
159
|
+
const outcome = await this.driver.ProbeJoinContainment(candidate.Child, candidate.Parent, this.cfg.sampleSize, this.cfg.probeTimeoutMs, normalization);
|
|
160
|
+
if (outcome.Ok !== true) {
|
|
161
|
+
// A failed probe is NOT zero containment. This distinction is the whole
|
|
162
|
+
// point of the discriminated union: `testValueOverlap` returns a bare
|
|
163
|
+
// number and swallows its errors as 0, which the 75% gate then reads as
|
|
164
|
+
// a refutation — so on PostgreSQL an incomparable `text = uuid` join
|
|
165
|
+
// silently deletes a candidate instead of reporting that it could not
|
|
166
|
+
// be compared.
|
|
167
|
+
return unprobed(outcome.Reason, probedAt);
|
|
168
|
+
}
|
|
169
|
+
const sampledValues = outcome.SampledValues;
|
|
170
|
+
const matchedValues = outcome.MatchedValues;
|
|
171
|
+
if (sampledValues === 0) {
|
|
172
|
+
return unprobed('child column has no non-null values to sample', probedAt);
|
|
173
|
+
}
|
|
174
|
+
const containment = matchedValues / sampledValues;
|
|
175
|
+
const measurement = { SampledValues: sampledValues, MatchedValues: matchedValues, Containment: containment };
|
|
176
|
+
const pct = (containment * 100).toFixed(1);
|
|
177
|
+
if (containment < this.cfg.minContainment) {
|
|
178
|
+
return {
|
|
179
|
+
Status: 'Refuted',
|
|
180
|
+
Containment: measurement,
|
|
181
|
+
Reason: `${matchedValues} of ${sampledValues} sampled values matched (${pct}%), below the ${(this.cfg.minContainment * 100).toFixed(1)}% floor`,
|
|
182
|
+
ProbedAt: probedAt,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
Status: 'Verified',
|
|
187
|
+
Containment: measurement,
|
|
188
|
+
Reason: `${matchedValues} of ${sampledValues} sampled values matched (${pct}%)`,
|
|
189
|
+
ProbedAt: probedAt,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Build the persisted stamp for an emitted key from a probe result. */
|
|
194
|
+
export function StampFor(provenance, result) {
|
|
195
|
+
return {
|
|
196
|
+
Provenance: provenance,
|
|
197
|
+
Verification: result.Status,
|
|
198
|
+
VerifiedAt: result.ProbedAt,
|
|
199
|
+
MatchedRows: result.Containment ? result.Containment.MatchedValues : null,
|
|
200
|
+
SampledRows: result.Containment ? result.Containment.SampledValues : null,
|
|
201
|
+
VerificationNote: result.Reason,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The driver-side normalization for a candidate, or null when either side needs a `Custom`
|
|
206
|
+
* expression the probe will not run.
|
|
207
|
+
*/
|
|
208
|
+
function probeNormalizationFor(candidate) {
|
|
209
|
+
const n = candidate.Normalization;
|
|
210
|
+
if (!n)
|
|
211
|
+
return { Child: 'ExactMatch', Parent: 'ExactMatch' };
|
|
212
|
+
if (n.Child === 'Custom' || n.Parent === 'Custom')
|
|
213
|
+
return null;
|
|
214
|
+
return { Child: n.Child, Parent: n.Parent };
|
|
215
|
+
}
|
|
216
|
+
function unprobed(reason, probedAt) {
|
|
217
|
+
return { Status: 'Unprobed', Containment: null, Reason: reason, ProbedAt: probedAt };
|
|
218
|
+
}
|
|
219
|
+
function stripUndefined(c) {
|
|
220
|
+
const out = {};
|
|
221
|
+
if (c.enabled !== undefined)
|
|
222
|
+
out.enabled = c.enabled;
|
|
223
|
+
if (c.sampleSize !== undefined)
|
|
224
|
+
out.sampleSize = c.sampleSize;
|
|
225
|
+
if (c.maxProbes !== undefined)
|
|
226
|
+
out.maxProbes = c.maxProbes;
|
|
227
|
+
if (c.probeTimeoutMs !== undefined)
|
|
228
|
+
out.probeTimeoutMs = c.probeTimeoutMs;
|
|
229
|
+
if (c.minContainment !== undefined)
|
|
230
|
+
out.minContainment = c.minContainment;
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=JoinProbe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinProbe.js","sourceRoot":"","sources":["../../src/discovery/JoinProbe.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { BaseAutoDocDriver } from '../drivers/BaseAutoDocDriver.js';
|
|
7
7
|
import { ColumnStatsCache } from './ColumnStatsCache.js';
|
|
8
|
+
import { SeedContextText } from '../utils/seed-context.js';
|
|
8
9
|
import { SchemaDefinition } from '../types/state.js';
|
|
9
10
|
import { PKCandidate, FKCandidate, LLMValidationResult } from '../types/discovery.js';
|
|
10
11
|
import { RelationshipDiscoveryConfig, AIConfig } from '../types/config.js';
|
|
@@ -14,8 +15,12 @@ export declare class LLMDiscoveryValidator {
|
|
|
14
15
|
private aiConfig;
|
|
15
16
|
private statsCache;
|
|
16
17
|
private schemas;
|
|
18
|
+
/** The operator's seed context; paragraphs naming the target table are added to the prompt. */
|
|
19
|
+
private seedContext?;
|
|
17
20
|
private llm;
|
|
18
|
-
constructor(driver: BaseAutoDocDriver, config: RelationshipDiscoveryConfig, aiConfig: AIConfig, statsCache: ColumnStatsCache, schemas: SchemaDefinition[]
|
|
21
|
+
constructor(driver: BaseAutoDocDriver, config: RelationshipDiscoveryConfig, aiConfig: AIConfig, statsCache: ColumnStatsCache, schemas: SchemaDefinition[],
|
|
22
|
+
/** The operator's seed context; paragraphs naming the target table are added to the prompt. */
|
|
23
|
+
seedContext?: SeedContextText);
|
|
19
24
|
/**
|
|
20
25
|
* Validate PK/FK candidates for a single table using LLM reasoning
|
|
21
26
|
*/
|
|
@@ -60,6 +65,8 @@ export declare class LLMDiscoveryValidator {
|
|
|
60
65
|
* Build reasoning string for FK candidate
|
|
61
66
|
*/
|
|
62
67
|
private buildFKReasoning;
|
|
68
|
+
/** The operator's notes on the target table, as a prompt section, or an empty string when there are none. */
|
|
69
|
+
protected seedNotes(tableName: string): string;
|
|
63
70
|
/**
|
|
64
71
|
* Build LLM validation prompt
|
|
65
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMDiscoveryValidator.d.ts","sourceRoot":"","sources":["../../src/discovery/LLMDiscoveryValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"LLMDiscoveryValidator.d.ts","sourceRoot":"","sources":["../../src/discovery/LLMDiscoveryValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAsB,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,WAAW,EACX,WAAW,EAGX,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE3E,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,+FAA+F;IAC/F,OAAO,CAAC,WAAW,CAAC;IATtB,OAAO,CAAC,GAAG,CAAU;gBAGX,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,EACnC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,gBAAgB,EAAE;IACnC,+FAA+F;IACvF,WAAW,CAAC,EAAE,eAAe;IAQvC;;OAEG;IACU,0BAA0B,CACrC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA6F/B,0DAA0D;IAC7C,0BAA0B,CACrC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiFzB,mFAAmF;IACnF,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqFzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsC9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB,6GAA6G;IAC7G,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAa9C;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAoG9B"}
|
|
@@ -3,15 +3,20 @@
|
|
|
3
3
|
* Uses LLM reasoning to validate and refine PK/FK candidates discovered through statistical analysis
|
|
4
4
|
* Processes one table at a time with rich statistical context
|
|
5
5
|
*/
|
|
6
|
+
import { ResolveCallTimeoutMs, WithCallDeadline } from '../utils/call-deadline.js';
|
|
6
7
|
import { CreateLLMInstance } from '../utils/llm-factory.js';
|
|
7
8
|
import { BuildIndexHints, FormatIndexHint } from '../utils/index-hints.js';
|
|
9
|
+
import { SeedContextExcerpt } from '../utils/seed-context.js';
|
|
8
10
|
export class LLMDiscoveryValidator {
|
|
9
|
-
constructor(driver, config, aiConfig, statsCache, schemas
|
|
11
|
+
constructor(driver, config, aiConfig, statsCache, schemas,
|
|
12
|
+
/** The operator's seed context; paragraphs naming the target table are added to the prompt. */
|
|
13
|
+
seedContext) {
|
|
10
14
|
this.driver = driver;
|
|
11
15
|
this.config = config;
|
|
12
16
|
this.aiConfig = aiConfig;
|
|
13
17
|
this.statsCache = statsCache;
|
|
14
18
|
this.schemas = schemas;
|
|
19
|
+
this.seedContext = seedContext;
|
|
15
20
|
// Resolve the provider name (e.g. 'gemini') to its driver class (e.g. 'GeminiLLM'), as the rest
|
|
16
21
|
// of DBAutoDoc does. Using the raw provider name as the registration key resolved to nothing and
|
|
17
22
|
// left a bare BaseLLM, so every validation call failed.
|
|
@@ -42,7 +47,10 @@ export class LLMDiscoveryValidator {
|
|
|
42
47
|
maxOutputTokens: this.aiConfig.maxTokens,
|
|
43
48
|
responseFormat: 'JSON'
|
|
44
49
|
};
|
|
45
|
-
|
|
50
|
+
// Bounded. This runs once per candidate table inside a sequential loop, so one stalled call
|
|
51
|
+
// parks every table after it — the discovery phase would appear to be working and simply never
|
|
52
|
+
// reach its next table.
|
|
53
|
+
const chatResult = await WithCallDeadline(ResolveCallTimeoutMs(this.aiConfig.callTimeoutMs), `relationship validation for ${schemaName}.${tableName}`, signal => this.llm.ChatCompletion({ ...params, cancellationToken: signal }));
|
|
46
54
|
if (!chatResult.success) {
|
|
47
55
|
return {
|
|
48
56
|
validated: false,
|
|
@@ -359,6 +367,19 @@ export class LLMDiscoveryValidator {
|
|
|
359
367
|
}
|
|
360
368
|
return reasons.join(', ');
|
|
361
369
|
}
|
|
370
|
+
/** The operator's notes on the target table, as a prompt section, or an empty string when there are none. */
|
|
371
|
+
seedNotes(tableName) {
|
|
372
|
+
const excerpt = SeedContextExcerpt(this.seedContext, [tableName]);
|
|
373
|
+
if (!excerpt) {
|
|
374
|
+
return '';
|
|
375
|
+
}
|
|
376
|
+
return `## Notes from the operator about this data
|
|
377
|
+
Written by the person running the analysis. Treat them as evidence about how tables relate and which columns are keys; they do not override what the data and constraints show.
|
|
378
|
+
|
|
379
|
+
${excerpt}
|
|
380
|
+
|
|
381
|
+
`;
|
|
382
|
+
}
|
|
362
383
|
/**
|
|
363
384
|
* Build LLM validation prompt
|
|
364
385
|
*/
|
|
@@ -422,7 +443,7 @@ ${context.fkCandidates.length > 0
|
|
|
422
443
|
.join('\n')
|
|
423
444
|
: 'None'}
|
|
424
445
|
|
|
425
|
-
## Your Task:
|
|
446
|
+
${this.seedNotes(context.TargetTable.table)}## Your Task:
|
|
426
447
|
Analyze the statistical findings and provide validation:
|
|
427
448
|
|
|
428
449
|
1. **Validate Primary Keys**: Are the PK candidates correct? Should any be removed?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMDiscoveryValidator.js","sourceRoot":"","sources":["../../src/discovery/LLMDiscoveryValidator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LLMDiscoveryValidator.js","sourceRoot":"","sources":["../../src/discovery/LLMDiscoveryValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSanityChecker.d.ts","sourceRoot":"","sources":["../../src/discovery/LLMSanityChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"LLMSanityChecker.d.ts","sourceRoot":"","sources":["../../src/discovery/LLMSanityChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,KAAK,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,UAAU,EAAE,KAAK,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ;IAAY,OAAO,CAAC,UAAU,CAAC;IAF3D,OAAO,CAAC,GAAG,CAAU;gBAED,QAAQ,EAAE,QAAQ,EAAU,UAAU,CAAC,EAAE,gBAAgB;IAK7E;;;OAGG;IACU,gBAAgB,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IAsF7B,gDAAgD;IACnC,gBAAgB,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAiF/B"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Uses LLM intelligence to review and reject obviously wrong PK/FK candidates
|
|
4
4
|
* This is a MACRO-LEVEL review that happens once after statistical detection
|
|
5
5
|
*/
|
|
6
|
+
import { ResolveCallTimeoutMs, WithCallDeadline } from '../utils/call-deadline.js';
|
|
6
7
|
import { CreateLLMInstance } from '../utils/llm-factory.js';
|
|
7
8
|
export class LLMSanityChecker {
|
|
8
9
|
constructor(aiConfig, statsCache) {
|
|
@@ -37,7 +38,15 @@ export class LLMSanityChecker {
|
|
|
37
38
|
responseFormat: 'JSON'
|
|
38
39
|
};
|
|
39
40
|
console.log(`[LLMSanityChecker] Calling LLM for sanity check...`);
|
|
40
|
-
|
|
41
|
+
// Bounded. This call reviews the ENTIRE candidate set in one request, so its prompt grows with
|
|
42
|
+
// the schema and it is the single largest call the discovery phase makes — and it had no
|
|
43
|
+
// deadline, no retry and no failover, so a stall here parked the whole run.
|
|
44
|
+
//
|
|
45
|
+
// The throw is deliberately NOT caught here: the caller in DiscoveryEngine already treats an
|
|
46
|
+
// exception from this checker as fatal to the iteration, whereas a returned failure is
|
|
47
|
+
// swallowed into "no candidates were invalid" — which would silently pass every statistically
|
|
48
|
+
// derived key through unreviewed. A timeout must not look like an all-clear.
|
|
49
|
+
const chatResult = await WithCallDeadline(ResolveCallTimeoutMs(this.aiConfig.callTimeoutMs), 'PK/FK sanity check', signal => this.llm.ChatCompletion({ ...params, cancellationToken: signal }));
|
|
41
50
|
if (!chatResult.success) {
|
|
42
51
|
console.warn(`[LLMSanityChecker] LLM call failed: ${chatResult.errorMessage}`);
|
|
43
52
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSanityChecker.js","sourceRoot":"","sources":["../../src/discovery/LLMSanityChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"LLMSanityChecker.js","sourceRoot":"","sources":["../../src/discovery/LLMSanityChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,9 @@ import { DatabaseDocumentation } from '../types/state.js';
|
|
|
20
20
|
import { OrganicKeyCluster, OrganicKeyDetectionPhase } from '../types/organic-keys.js';
|
|
21
21
|
import { ProgressCallback } from './SemanticPhase.js';
|
|
22
22
|
import { BridgeViewProvider } from './BridgeViewSQLGenerator.js';
|
|
23
|
+
import { ClusterVerification } from './Composer.js';
|
|
23
24
|
import { DetectedOrganicKeysOutput } from './OrganicKeyTranslator.js';
|
|
25
|
+
import { KeyVerifier } from './JoinProbe.js';
|
|
24
26
|
export interface OrganicKeyDetectionResult {
|
|
25
27
|
clusters: OrganicKeyCluster[];
|
|
26
28
|
output: DetectedOrganicKeysOutput;
|
|
@@ -37,20 +39,46 @@ export interface OrganicKeyDetectionResult {
|
|
|
37
39
|
outputKeys: number;
|
|
38
40
|
outputSpokes: number;
|
|
39
41
|
transitiveBridges: number;
|
|
42
|
+
/** Clusters the value-overlap probe refuted outright. */
|
|
43
|
+
clustersDroppedUnverified: number;
|
|
44
|
+
/** Members dropped for not sharing the anchor's value space. */
|
|
45
|
+
membersDroppedUnverified: number;
|
|
46
|
+
/** Concepts not emitted because no member owns the value as its table's primary key. */
|
|
47
|
+
conceptsSkippedUnanchored: number;
|
|
48
|
+
/** Probes spent, and the cap they ran under. */
|
|
49
|
+
probesUsed: number;
|
|
50
|
+
probesAllowed: number;
|
|
40
51
|
};
|
|
52
|
+
/** Per-cluster probe record, so a dropped key can be explained rather than just missing. */
|
|
53
|
+
Verification: ClusterVerification[];
|
|
41
54
|
}
|
|
42
55
|
export interface DetectorRunOptions {
|
|
43
56
|
OnProgress?: ProgressCallback;
|
|
44
57
|
}
|
|
58
|
+
/** Emit-time behaviour for the detector. */
|
|
59
|
+
export interface OrganicKeyEmitOptions {
|
|
60
|
+
/**
|
|
61
|
+
* Set `AutoCreateRelatedViewOnForm` on emitted keys. Default false — a
|
|
62
|
+
* machine-proposed key should not silently create a grid per spoke on every form.
|
|
63
|
+
*/
|
|
64
|
+
AutoCreateRelatedViewOnForm?: boolean;
|
|
65
|
+
}
|
|
45
66
|
export declare class OrganicKeyDetector {
|
|
46
67
|
private readonly config;
|
|
47
68
|
private readonly aiConfig;
|
|
48
69
|
private readonly databaseProvider?;
|
|
70
|
+
private readonly keyVerifier;
|
|
71
|
+
private readonly emitOptions;
|
|
49
72
|
/**
|
|
50
73
|
* @param databaseProvider - Platform of the analyzed database. Bridge-view SQL is emitted in
|
|
51
74
|
* its dialect because CodeGen executes it verbatim. Default SQL Server.
|
|
75
|
+
* @param keyVerifier - Probes each cluster member against the cluster anchor before
|
|
76
|
+
* the key is emitted. Pass the SAME instance the analysis engine
|
|
77
|
+
* got, so one probe budget covers the whole run. When null, keys
|
|
78
|
+
* are emitted unverified — the previous behaviour — and the
|
|
79
|
+
* per-cluster record says they were never checked.
|
|
52
80
|
*/
|
|
53
|
-
constructor(config: OrganicKeyDetectionConfig, aiConfig: AIConfig, databaseProvider?: BridgeViewProvider);
|
|
81
|
+
constructor(config: OrganicKeyDetectionConfig, aiConfig: AIConfig, databaseProvider?: BridgeViewProvider, keyVerifier?: KeyVerifier | null, emitOptions?: OrganicKeyEmitOptions);
|
|
54
82
|
Detect(state: DatabaseDocumentation, opts?: DetectorRunOptions): Promise<OrganicKeyDetectionResult>;
|
|
55
83
|
/** @deprecated Use {@link Detect}. */
|
|
56
84
|
detect(state: DatabaseDocumentation, opts?: DetectorRunOptions): Promise<OrganicKeyDetectionResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganicKeyDetector.d.ts","sourceRoot":"","sources":["../../src/discovery/OrganicKeyDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"OrganicKeyDetector.d.ts","sourceRoot":"","sources":["../../src/discovery/OrganicKeyDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAW,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,yBAAyB,CAAC;IAClC,KAAK,EAAE,wBAAwB,CAAC;IAChC,OAAO,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,2BAA2B,EAAE,MAAM,CAAC;QACpC,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,yDAAyD;QACzD,yBAAyB,EAAE,MAAM,CAAC;QAClC,gEAAgE;QAChE,wBAAwB,EAAE,MAAM,CAAC;QACjC,wFAAwF;QACxF,yBAAyB,EAAE,MAAM,CAAC;QAClC,gDAAgD;QAChD,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,4FAA4F;IAC5F,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IAClC;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,qBAAa,kBAAkB;IAWvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAdhC;;;;;;;;OAQG;gBAEkB,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,CAAC,EAAE,kBAAkB,EACrC,WAAW,GAAE,WAAW,GAAG,IAAW,EACtC,WAAW,GAAE,qBAA0B;IAG/C,MAAM,CACf,KAAK,EAAE,qBAAqB,EAC5B,IAAI,GAAE,kBAAuB,GAC9B,OAAO,CAAC,yBAAyB,CAAC;IA6ErC,sCAAsC;IACzB,MAAM,CACf,KAAK,EAAE,qBAAqB,EAC5B,IAAI,GAAE,kBAAuB,GAC9B,OAAO,CAAC,yBAAyB,CAAC;IAIrC,OAAO,CAAC,YAAY;CAMvB"}
|
|
@@ -22,11 +22,18 @@ export class OrganicKeyDetector {
|
|
|
22
22
|
/**
|
|
23
23
|
* @param databaseProvider - Platform of the analyzed database. Bridge-view SQL is emitted in
|
|
24
24
|
* its dialect because CodeGen executes it verbatim. Default SQL Server.
|
|
25
|
+
* @param keyVerifier - Probes each cluster member against the cluster anchor before
|
|
26
|
+
* the key is emitted. Pass the SAME instance the analysis engine
|
|
27
|
+
* got, so one probe budget covers the whole run. When null, keys
|
|
28
|
+
* are emitted unverified — the previous behaviour — and the
|
|
29
|
+
* per-cluster record says they were never checked.
|
|
25
30
|
*/
|
|
26
|
-
constructor(config, aiConfig, databaseProvider) {
|
|
31
|
+
constructor(config, aiConfig, databaseProvider, keyVerifier = null, emitOptions = {}) {
|
|
27
32
|
this.config = config;
|
|
28
33
|
this.aiConfig = aiConfig;
|
|
29
34
|
this.databaseProvider = databaseProvider;
|
|
35
|
+
this.keyVerifier = keyVerifier;
|
|
36
|
+
this.emitOptions = emitOptions;
|
|
30
37
|
}
|
|
31
38
|
async Detect(state, opts = {}) {
|
|
32
39
|
const progress = opts.OnProgress ?? (() => { });
|
|
@@ -40,8 +47,18 @@ export class OrganicKeyDetector {
|
|
|
40
47
|
progress(b.Summary.walked
|
|
41
48
|
? `structural: ${b.Summary.transitiveBridgesFound} bridges${b.Summary.truncationReasons ? ` (walk truncated: ${b.Summary.truncationReasons.join(', ')})` : ''}`
|
|
42
49
|
: `structural: skipped (${b.Summary.skipReason})`);
|
|
43
|
-
const c = Compose(a.clusters, b.Bridges
|
|
44
|
-
|
|
50
|
+
const c = await Compose(a.clusters, b.Bridges, this.keyVerifier, {
|
|
51
|
+
AutoCreateRelatedViewOnForm: this.emitOptions.AutoCreateRelatedViewOnForm,
|
|
52
|
+
});
|
|
53
|
+
// Report what the probe removed, not just what survived: "emitted 5 clusters" and
|
|
54
|
+
// "emitted 5 of 161, 156 refuted" are the same output and completely different
|
|
55
|
+
// facts about the schema.
|
|
56
|
+
const budget = this.keyVerifier ? this.keyVerifier.Budget : null;
|
|
57
|
+
progress(`compose: emitted ${c.Emitted}/${a.clusters.length} clusters (${c.Summary.outputKeys} keys, ${c.Summary.outputSpokes} spokes)`
|
|
58
|
+
+ (c.SkippedUnanchored > 0 ? `; skipped ${c.SkippedUnanchored} concepts with no primary-key owner` : '')
|
|
59
|
+
+ (budget
|
|
60
|
+
? `; probe refuted ${c.DroppedUnverified} clusters and ${c.DroppedMembers} members using ${budget.ProbesUsed}/${budget.ProbesAllowed} probes`
|
|
61
|
+
: '; keys NOT verified (no probe configured)'));
|
|
45
62
|
// Net additional clusters produced by the concept-name split (sub-clusters created
|
|
46
63
|
// beyond the raw clusterer output, counting both kept and dropped sub-clusters).
|
|
47
64
|
const splitClusterCount = Math.max(0, a.Summary.clustersFound + a.Summary.clustersDropped - a.Summary.clustersBeforeSplit);
|
|
@@ -75,7 +92,13 @@ export class OrganicKeyDetector {
|
|
|
75
92
|
outputKeys: c.Summary.outputKeys,
|
|
76
93
|
outputSpokes: c.Summary.outputSpokes,
|
|
77
94
|
transitiveBridges: b.Summary.transitiveBridgesFound,
|
|
95
|
+
clustersDroppedUnverified: c.DroppedUnverified,
|
|
96
|
+
membersDroppedUnverified: c.DroppedMembers,
|
|
97
|
+
conceptsSkippedUnanchored: c.SkippedUnanchored,
|
|
98
|
+
probesUsed: budget ? budget.ProbesUsed : 0,
|
|
99
|
+
probesAllowed: budget ? budget.ProbesAllowed : 0,
|
|
78
100
|
},
|
|
101
|
+
Verification: c.Verification,
|
|
79
102
|
};
|
|
80
103
|
}
|
|
81
104
|
/** @deprecated Use {@link Detect}. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganicKeyDetector.js","sourceRoot":"","sources":["../../src/discovery/OrganicKeyDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"OrganicKeyDetector.js","sourceRoot":"","sources":["../../src/discovery/OrganicKeyDetector.ts"],"names":[],"mappings":"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"}
|