@mmnto/totem 1.123.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts/grounding.d.ts +27 -7
- package/dist/artifacts/grounding.d.ts.map +1 -1
- package/dist/artifacts/grounding.js +23 -5
- package/dist/artifacts/grounding.js.map +1 -1
- package/dist/artifacts/grounding.test.js +28 -0
- package/dist/artifacts/grounding.test.js.map +1 -1
- package/dist/artifacts/schema.d.ts +63 -18
- package/dist/artifacts/schema.d.ts.map +1 -1
- package/dist/artifacts/schema.js +13 -4
- package/dist/artifacts/schema.js.map +1 -1
- package/dist/config-schema.d.ts +70 -15
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +80 -14
- package/dist/config-schema.js.map +1 -1
- package/dist/config-schema.test.js +77 -1
- package/dist/config-schema.test.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/ingest/pipeline.d.ts +12 -0
- package/dist/ingest/pipeline.d.ts.map +1 -1
- package/dist/ingest/pipeline.js +5 -0
- package/dist/ingest/pipeline.js.map +1 -1
- package/dist/ingest/pipeline.test.js +9 -0
- package/dist/ingest/pipeline.test.js.map +1 -1
- package/dist/semantic-dedup.d.ts.map +1 -1
- package/dist/semantic-dedup.js +2 -5
- package/dist/semantic-dedup.js.map +1 -1
- package/dist/semantic-dedup.test.js +32 -1
- package/dist/semantic-dedup.test.js.map +1 -1
- package/dist/store/lance-search.d.ts +1 -1
- package/dist/store/lance-search.d.ts.map +1 -1
- package/dist/store/lance-search.js +89 -18
- package/dist/store/lance-search.js.map +1 -1
- package/dist/store/lance-search.test.js +207 -26
- package/dist/store/lance-search.test.js.map +1 -1
- package/dist/store/lance-store.d.ts.map +1 -1
- package/dist/store/lance-store.js +1 -1
- package/dist/store/lance-store.js.map +1 -1
- package/dist/store/lance-store.test.js +23 -0
- package/dist/store/lance-store.test.js.map +1 -1
- package/dist/store/relevance.d.ts +70 -0
- package/dist/store/relevance.d.ts.map +1 -0
- package/dist/store/relevance.js +115 -0
- package/dist/store/relevance.js.map +1 -0
- package/dist/store/relevance.sdk.test.d.ts +20 -0
- package/dist/store/relevance.sdk.test.d.ts.map +1 -0
- package/dist/store/relevance.sdk.test.js +145 -0
- package/dist/store/relevance.sdk.test.js.map +1 -0
- package/dist/store/relevance.test.d.ts +2 -0
- package/dist/store/relevance.test.d.ts.map +1 -0
- package/dist/store/relevance.test.js +192 -0
- package/dist/store/relevance.test.js.map +1 -0
- package/dist/store/search-lessons.d.ts +18 -0
- package/dist/store/search-lessons.d.ts.map +1 -0
- package/dist/store/search-lessons.js +18 -0
- package/dist/store/search-lessons.js.map +1 -0
- package/dist/store/search-lessons.test.d.ts +2 -0
- package/dist/store/search-lessons.test.d.ts.map +1 -0
- package/dist/store/search-lessons.test.js +48 -0
- package/dist/store/search-lessons.test.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { TotemError } from '../errors.js';
|
|
3
|
+
import { assertDistanceMetric, DISTANCE_METRICS, isRelevanceInRange, OUT_OF_RANGE_CAUSE, relevanceFromDistance, VECTOR_DISTANCE_METRIC, } from './relevance.js';
|
|
4
|
+
// ─── The pinned map (mmnto-ai/totem#2738) ────────────────
|
|
5
|
+
//
|
|
6
|
+
// These numbers are the contract, not an implementation echo. `l2` is pinned to
|
|
7
|
+
// the MEASURED fact that LanceDB's `_distance` for `l2` is the SQUARED
|
|
8
|
+
// Euclidean distance (R1, 3/3 trials): a self-hit is 0, and the measured pair
|
|
9
|
+
// at cosine 0.845 came back as 0.3096 = |a-b|². On unit-norm vectors that puts
|
|
10
|
+
// `_distance` in [0, 4] and therefore relevance in [0.2, 1].
|
|
11
|
+
describe('relevanceFromDistance — l2', () => {
|
|
12
|
+
it('maps a self-hit (d = 0) to relevance 1', () => {
|
|
13
|
+
expect(relevanceFromDistance('l2', 0)).toBe(1);
|
|
14
|
+
});
|
|
15
|
+
it('maps the antipodal unit-vector bound (d = 4) to relevance 0.2', () => {
|
|
16
|
+
expect(relevanceFromDistance('l2', 4)).toBeCloseTo(0.2, 10);
|
|
17
|
+
});
|
|
18
|
+
it('maps the R1-measured pair (d = 0.3096, cosine 0.845) to ~0.7636', () => {
|
|
19
|
+
expect(relevanceFromDistance('l2', 0.3096)).toBeCloseTo(0.7636, 4);
|
|
20
|
+
});
|
|
21
|
+
it('is monotone decreasing in distance', () => {
|
|
22
|
+
const distances = [0, 0.25, 0.3096, 0.5, 1, 2, 3, 4, 10];
|
|
23
|
+
const relevances = distances.map((d) => relevanceFromDistance('l2', d));
|
|
24
|
+
for (let i = 1; i < relevances.length; i += 1) {
|
|
25
|
+
expect(relevances[i]).toBeLessThan(relevances[i - 1]);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
it('INVARIANT: unit-norm rows produce relevance in [0.2, 1]', () => {
|
|
29
|
+
// On unit vectors |a-b|² = 2 - 2·cos ∈ [0, 4]; the sweep walks that interval.
|
|
30
|
+
for (const d of [0, 0.5, 1, 2, 3, 4]) {
|
|
31
|
+
const relevance = relevanceFromDistance('l2', d);
|
|
32
|
+
expect(relevance).toBeGreaterThanOrEqual(0.2);
|
|
33
|
+
expect(relevance).toBeLessThanOrEqual(1);
|
|
34
|
+
expect(isRelevanceInRange(relevance)).toBe(true);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('relevanceFromDistance — cosine', () => {
|
|
39
|
+
it('maps d = 0 to 1', () => {
|
|
40
|
+
expect(relevanceFromDistance('cosine', 0)).toBe(1);
|
|
41
|
+
});
|
|
42
|
+
it('maps the far bound d = 2 to 0', () => {
|
|
43
|
+
expect(relevanceFromDistance('cosine', 2)).toBe(0);
|
|
44
|
+
});
|
|
45
|
+
it('maps the orthogonal midpoint d = 1 to 0.5', () => {
|
|
46
|
+
expect(relevanceFromDistance('cosine', 1)).toBe(0.5);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('relevanceFromDistance — dot', () => {
|
|
50
|
+
// The SDK: "If the vectors are normalized (i.e. their l2 norm is 1), then dot
|
|
51
|
+
// distance is equivalent to the cosine distance" — so `dot` takes the same map.
|
|
52
|
+
it('maps d = 0 to 1', () => {
|
|
53
|
+
expect(relevanceFromDistance('dot', 0)).toBe(1);
|
|
54
|
+
});
|
|
55
|
+
it('maps d = 2 to 0', () => {
|
|
56
|
+
expect(relevanceFromDistance('dot', 2)).toBe(0);
|
|
57
|
+
});
|
|
58
|
+
it('maps d = 1 to 0.5', () => {
|
|
59
|
+
expect(relevanceFromDistance('dot', 1)).toBe(0.5);
|
|
60
|
+
});
|
|
61
|
+
it('agrees with cosine at every pinned point (the SDK equivalence on unit vectors)', () => {
|
|
62
|
+
for (const d of [0, 0.5, 1, 1.5, 2]) {
|
|
63
|
+
expect(relevanceFromDistance('dot', d)).toBe(relevanceFromDistance('cosine', d));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
// ─── Out-of-range detection ─────────────────────────────
|
|
68
|
+
//
|
|
69
|
+
// `relevanceFromDistance` computes; it never warns, throws or clamps. The range
|
|
70
|
+
// judgment is `isRelevanceInRange`, exercised at the search call sites.
|
|
71
|
+
describe('isRelevanceInRange', () => {
|
|
72
|
+
it('is false for an l2 relevance above 1 (a negative _distance)', () => {
|
|
73
|
+
const relevance = relevanceFromDistance('l2', -0.5);
|
|
74
|
+
expect(relevance).toBeCloseTo(2, 10);
|
|
75
|
+
expect(isRelevanceInRange(relevance)).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
it('is false for a cosine relevance below 0 (a distance past the [0, 2] bound)', () => {
|
|
78
|
+
const relevance = relevanceFromDistance('cosine', 3);
|
|
79
|
+
expect(relevance).toBeCloseTo(-0.5, 10);
|
|
80
|
+
expect(isRelevanceInRange(relevance)).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
it('is false for NaN and Infinity', () => {
|
|
83
|
+
expect(isRelevanceInRange(Number.NaN)).toBe(false);
|
|
84
|
+
expect(isRelevanceInRange(Number.POSITIVE_INFINITY)).toBe(false);
|
|
85
|
+
expect(isRelevanceInRange(Number.NEGATIVE_INFINITY)).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
it('is true at both closed bounds', () => {
|
|
88
|
+
expect(isRelevanceInRange(0)).toBe(true);
|
|
89
|
+
expect(isRelevanceInRange(1)).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
// ─── The loud gate ──────────────────────────────────────
|
|
93
|
+
describe('assertDistanceMetric', () => {
|
|
94
|
+
it('throws a TotemError naming the value and the three allowed spellings', () => {
|
|
95
|
+
// 'ip' is a metric name from OTHER vector databases; the LanceDB SDK has no
|
|
96
|
+
// such spelling, and guessing it silently would be exactly the drift #2738
|
|
97
|
+
// exists to stop.
|
|
98
|
+
expect(() => assertDistanceMetric('ip')).toThrow(TotemError);
|
|
99
|
+
let thrown;
|
|
100
|
+
try {
|
|
101
|
+
assertDistanceMetric('ip');
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
thrown = err;
|
|
105
|
+
}
|
|
106
|
+
const thrownError = thrown;
|
|
107
|
+
expect(thrownError.code).toBe('CONFIG_INVALID');
|
|
108
|
+
expect(thrownError.message).toContain('"ip"');
|
|
109
|
+
expect(thrownError.message).toContain('"l2"');
|
|
110
|
+
expect(thrownError.message).toContain('"cosine"');
|
|
111
|
+
expect(thrownError.message).toContain('"dot"');
|
|
112
|
+
});
|
|
113
|
+
it('returns the metric unchanged for a valid spelling', () => {
|
|
114
|
+
expect(assertDistanceMetric('cosine')).toBe('cosine');
|
|
115
|
+
});
|
|
116
|
+
it('accepts every listed metric and rejects non-strings', () => {
|
|
117
|
+
for (const metric of DISTANCE_METRICS) {
|
|
118
|
+
expect(assertDistanceMetric(metric)).toBe(metric);
|
|
119
|
+
}
|
|
120
|
+
expect(() => assertDistanceMetric(undefined)).toThrow(TotemError);
|
|
121
|
+
expect(() => assertDistanceMetric(null)).toThrow(TotemError);
|
|
122
|
+
expect(() => assertDistanceMetric(2)).toThrow(TotemError);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('VECTOR_DISTANCE_METRIC', () => {
|
|
126
|
+
it('is the l2 metric the store queries with', () => {
|
|
127
|
+
expect(VECTOR_DISTANCE_METRIC).toBe('l2');
|
|
128
|
+
expect(DISTANCE_METRICS).toContain(VECTOR_DISTANCE_METRIC);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
// ─── the falsification round's folds (mmnto-ai/totem#2738) ───
|
|
132
|
+
describe('relevanceFromDistance gates its metric (F5)', () => {
|
|
133
|
+
it('raises the named TotemError for a spelling that reached it past the type', () => {
|
|
134
|
+
// A value read off a record, an `any`, or a JS caller can carry 'ip' here.
|
|
135
|
+
// Indexing the map with it would have thrown a bare TypeError ("is not a
|
|
136
|
+
// function"); the named error says what is wrong and what is allowed.
|
|
137
|
+
const badMetric = 'ip';
|
|
138
|
+
expect(() => relevanceFromDistance(badMetric, 0.5)).toThrow(TotemError);
|
|
139
|
+
let thrown;
|
|
140
|
+
try {
|
|
141
|
+
relevanceFromDistance(badMetric, 0.5);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
thrown = err;
|
|
145
|
+
}
|
|
146
|
+
expect(thrown.code).toBe('CONFIG_INVALID');
|
|
147
|
+
expect(thrown.message).toContain('"ip"');
|
|
148
|
+
});
|
|
149
|
+
it('still computes for every valid metric', () => {
|
|
150
|
+
for (const metric of DISTANCE_METRICS) {
|
|
151
|
+
expect(Number.isFinite(relevanceFromDistance(metric, 0.5))).toBe(true);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('OUT_OF_RANGE_CAUSE is metric-specific (F1)', () => {
|
|
156
|
+
it('names a FAULT for l2, never a non-unit-norm embedder', () => {
|
|
157
|
+
// Squared L2 is >= 0 by construction, so 1/(1+d) is in (0, 1] for every
|
|
158
|
+
// value the SDK can legally return: no vector norm can push it out.
|
|
159
|
+
expect(OUT_OF_RANGE_CAUSE.l2).toContain('which squared L2 cannot produce');
|
|
160
|
+
expect(OUT_OF_RANGE_CAUSE.l2).not.toContain('unit-norm');
|
|
161
|
+
});
|
|
162
|
+
it('names ONLY the negative-distance case for l2 — a non-finite one never reaches it', () => {
|
|
163
|
+
// The search layer requires `Number.isFinite` before the map runs at BOTH
|
|
164
|
+
// sites, so a non-finite `_distance` yields no relevance and cannot produce
|
|
165
|
+
// a breach. Naming it would describe a report this warning cannot make.
|
|
166
|
+
expect(OUT_OF_RANGE_CAUSE.l2).toContain('a negative _distance');
|
|
167
|
+
expect(OUT_OF_RANGE_CAUSE.l2).not.toContain('non-finite');
|
|
168
|
+
});
|
|
169
|
+
it('names the unit-norm cause for cosine and dot, where the mapping really can leave [0, 1]', () => {
|
|
170
|
+
expect(OUT_OF_RANGE_CAUSE.cosine).toContain('unit-norm');
|
|
171
|
+
expect(OUT_OF_RANGE_CAUSE.dot).toContain('unit-norm');
|
|
172
|
+
// `dot` on a non-unit vector is the live case: q·[2,0,0] = 2 → d = -1 → 1.5.
|
|
173
|
+
expect(isRelevanceInRange(relevanceFromDistance('dot', -1))).toBe(false);
|
|
174
|
+
});
|
|
175
|
+
it('has an entry for every metric', () => {
|
|
176
|
+
for (const metric of DISTANCE_METRICS) {
|
|
177
|
+
expect(OUT_OF_RANGE_CAUSE[metric].length).toBeGreaterThan(0);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
describe('DISTANCE_METRICS', () => {
|
|
182
|
+
// The allow-list `assertDistanceMetric` gates on is frozen at runtime, not only
|
|
183
|
+
// `readonly` in the type: a JS caller that pushed a spelling onto it would
|
|
184
|
+
// otherwise pass the gate and reach an undefined map entry (CodeRabbit on
|
|
185
|
+
// mmnto-ai/totem#2761). Pinned so a refactor cannot drop the freeze unnoticed.
|
|
186
|
+
it('is frozen at runtime', () => {
|
|
187
|
+
expect(Object.isFrozen(DISTANCE_METRICS)).toBe(true);
|
|
188
|
+
expect(() => DISTANCE_METRICS.push('euclidean')).toThrow();
|
|
189
|
+
expect(DISTANCE_METRICS).toEqual(['l2', 'cosine', 'dot']);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
//# sourceMappingURL=relevance.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relevance.test.js","sourceRoot":"","sources":["../../src/store/relevance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SearchResult } from '../types.js';
|
|
2
|
+
import type { LanceStore } from './lance-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ask the store for lessons — the ONE place the `lesson` content type is
|
|
5
|
+
* spelled for retrieval (mmnto-ai/totem#2735).
|
|
6
|
+
*
|
|
7
|
+
* Every lesson retrieval in the CLI and in core routes through here. The defect
|
|
8
|
+
* it repairs: mmnto-ai/totem#431 re-keyed the old partition helper onto
|
|
9
|
+
* `type === 'lesson'` but left its callers querying the store with
|
|
10
|
+
* `typeFilter: 'spec'`, so the partitioned pool could not contain a lesson by
|
|
11
|
+
* construction and every command delivered zero of them. A single spelling
|
|
12
|
+
* makes that class of drift a one-line regression instead of a silent one.
|
|
13
|
+
*
|
|
14
|
+
* Pure pass-through: `query` and `maxResults` reach the store unchanged, and
|
|
15
|
+
* nothing is cached.
|
|
16
|
+
*/
|
|
17
|
+
export declare function searchLessons(store: LanceStore, query: string, maxResults: number): Promise<SearchResult[]>;
|
|
18
|
+
//# sourceMappingURL=search-lessons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-lessons.d.ts","sourceRoot":"","sources":["../../src/store/search-lessons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAEzB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ask the store for lessons — the ONE place the `lesson` content type is
|
|
3
|
+
* spelled for retrieval (mmnto-ai/totem#2735).
|
|
4
|
+
*
|
|
5
|
+
* Every lesson retrieval in the CLI and in core routes through here. The defect
|
|
6
|
+
* it repairs: mmnto-ai/totem#431 re-keyed the old partition helper onto
|
|
7
|
+
* `type === 'lesson'` but left its callers querying the store with
|
|
8
|
+
* `typeFilter: 'spec'`, so the partitioned pool could not contain a lesson by
|
|
9
|
+
* construction and every command delivered zero of them. A single spelling
|
|
10
|
+
* makes that class of drift a one-line regression instead of a silent one.
|
|
11
|
+
*
|
|
12
|
+
* Pure pass-through: `query` and `maxResults` reach the store unchanged, and
|
|
13
|
+
* nothing is cached.
|
|
14
|
+
*/
|
|
15
|
+
export async function searchLessons(store, query, maxResults) {
|
|
16
|
+
return store.search({ query, typeFilter: 'lesson', maxResults });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=search-lessons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-lessons.js","sourceRoot":"","sources":["../../src/store/search-lessons.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAiB,EACjB,KAAa,EACb,UAAkB;IAElB,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-lessons.test.d.ts","sourceRoot":"","sources":["../../src/store/search-lessons.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { searchLessons } from './search-lessons.js';
|
|
3
|
+
// The invariant pinned in the package that OWNS the helper, from source: the
|
|
4
|
+
// CLI's twin of this test reaches it through core's built dist, so a source
|
|
5
|
+
// change here would only fail there after a rebuild (mmnto-ai/totem#2735).
|
|
6
|
+
/** A spy store that records the search request and returns one lesson row. */
|
|
7
|
+
function spyStore() {
|
|
8
|
+
const requests = [];
|
|
9
|
+
const lesson = {
|
|
10
|
+
content: 'Always validate input at boundaries.',
|
|
11
|
+
contextPrefix: '',
|
|
12
|
+
filePath: '.totem/lessons/lesson-abc.md',
|
|
13
|
+
absoluteFilePath: '.totem/lessons/lesson-abc.md',
|
|
14
|
+
type: 'lesson',
|
|
15
|
+
label: 'Lesson A',
|
|
16
|
+
score: 0.9,
|
|
17
|
+
metadata: {},
|
|
18
|
+
};
|
|
19
|
+
const store = {
|
|
20
|
+
search: async (req) => {
|
|
21
|
+
requests.push(req);
|
|
22
|
+
return [lesson];
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
return { store, requests };
|
|
26
|
+
}
|
|
27
|
+
describe('searchLessons', () => {
|
|
28
|
+
it("asks the store for typeFilter 'lesson' — the one place the type is spelled", async () => {
|
|
29
|
+
const { store, requests } = spyStore();
|
|
30
|
+
await searchLessons(store, 'any query', 10);
|
|
31
|
+
expect(requests).toHaveLength(1);
|
|
32
|
+
expect(requests[0]['typeFilter']).toBe('lesson');
|
|
33
|
+
});
|
|
34
|
+
it('passes query and maxResults through unchanged', async () => {
|
|
35
|
+
const { store, requests } = spyStore();
|
|
36
|
+
await searchLessons(store, 'lesson trap pattern decision', 3);
|
|
37
|
+
expect(requests[0]['query']).toBe('lesson trap pattern decision');
|
|
38
|
+
expect(requests[0]['maxResults']).toBe(3);
|
|
39
|
+
});
|
|
40
|
+
it("returns the store's rows untouched", async () => {
|
|
41
|
+
const { store } = spyStore();
|
|
42
|
+
const results = await searchLessons(store, 'any query', 10);
|
|
43
|
+
expect(results).toHaveLength(1);
|
|
44
|
+
expect(results[0].type).toBe('lesson');
|
|
45
|
+
expect(results[0].label).toBe('Lesson A');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=search-lessons.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-lessons.test.js","sourceRoot":"","sources":["../../src/store/search-lessons.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAE3E,8EAA8E;AAC9E,SAAS,QAAQ;IACf,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAiB;QAC3B,OAAO,EAAE,sCAAsC;QAC/C,aAAa,EAAE,EAAE;QACjB,QAAQ,EAAE,8BAA8B;QACxC,gBAAgB,EAAE,8BAA8B;QAChD,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,EAAE;KACb,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,KAAK,EAAE,GAA4B,EAA2B,EAAE;YACtE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;KACuB,CAAC;IAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;QAEvC,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;QAEvC,MAAM,aAAa,CAAC,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC;QAE9D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAE5D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -102,8 +102,10 @@ export interface SearchResult {
|
|
|
102
102
|
label: string;
|
|
103
103
|
score: number;
|
|
104
104
|
/**
|
|
105
|
-
* True per-hit relevance signal
|
|
106
|
-
*
|
|
105
|
+
* True per-hit relevance signal — the vector-leg relevance from
|
|
106
|
+
* `relevanceFromDistance(VECTOR_DISTANCE_METRIC, _distance)`; on unit-norm
|
|
107
|
+
* vectors under `l2` it lies in [0.2, 1]; absent on FTS-only rows
|
|
108
|
+
* (mmnto-ai/totem#2463, metric-bound in mmnto-ai/totem#2738). Distinct from
|
|
107
109
|
* `score`, which in hybrid/federated modes is an RRF rank artifact
|
|
108
110
|
* (`1/(60+rank)` ≈ 0.016) that carries ordering but destroys the relevance
|
|
109
111
|
* magnitude. Populated by `rowToSearchResult` for vector-derived rows and
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAEhB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IAEtB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,IAAI,EAAE,WAAW,CAAC;IAElB,iDAAiD;IACjD,QAAQ,EAAE,aAAa,CAAC;IAExB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmnto/totem",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Core engine for Totem, the local-first toolkit that keeps AI-agent work queryable, enforceable, and derivable as plain files in your codebase",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|