@mneme-ai/core 2.40.0 → 2.41.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/argus10/bloom_prefilter.d.ts +40 -0
- package/dist/argus10/bloom_prefilter.d.ts.map +1 -0
- package/dist/argus10/bloom_prefilter.js +95 -0
- package/dist/argus10/bloom_prefilter.js.map +1 -0
- package/dist/argus10/engine_multimodal.d.ts +34 -0
- package/dist/argus10/engine_multimodal.d.ts.map +1 -0
- package/dist/argus10/engine_multimodal.js +165 -0
- package/dist/argus10/engine_multimodal.js.map +1 -0
- package/dist/argus10/eyes_multimodal.d.ts +28 -0
- package/dist/argus10/eyes_multimodal.d.ts.map +1 -0
- package/dist/argus10/eyes_multimodal.js +162 -0
- package/dist/argus10/eyes_multimodal.js.map +1 -0
- package/dist/argus10/index.d.ts +5 -0
- package/dist/argus10/index.d.ts.map +1 -1
- package/dist/argus10/index.js +6 -0
- package/dist/argus10/index.js.map +1 -1
- package/dist/argus10/phantom_eye.d.ts +70 -0
- package/dist/argus10/phantom_eye.d.ts.map +1 -0
- package/dist/argus10/phantom_eye.js +105 -0
- package/dist/argus10/phantom_eye.js.map +1 -0
- package/dist/argus10/vendor_adapters.d.ts +42 -0
- package/dist/argus10/vendor_adapters.d.ts.map +1 -0
- package/dist/argus10/vendor_adapters.js +165 -0
- package/dist/argus10/vendor_adapters.js.map +1 -0
- package/dist/diaspora/http_bridge.d.ts +14 -0
- package/dist/diaspora/http_bridge.d.ts.map +1 -1
- package/dist/diaspora/http_bridge.js +22 -0
- package/dist/diaspora/http_bridge.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +16 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +88 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — BLOOM PRE-FILTER (ARGUS-11 multimodal speedup).
|
|
3
|
+
*
|
|
4
|
+
* For large candidate sets (>50), running 10 eyes per candidate gets
|
|
5
|
+
* expensive. We use a probabilistic bloom filter to PRE-CUT the set:
|
|
6
|
+
*
|
|
7
|
+
* 1. Build a bloom filter over the query's tokens (bigrams + words).
|
|
8
|
+
* 2. For each candidate, test what fraction of its tokens hit the
|
|
9
|
+
* filter. If < threshold (default 0.05), prune it BEFORE any eye
|
|
10
|
+
* runs.
|
|
11
|
+
* 3. The 9.4 KB SHA-1 hash bank used means false-positive rate is
|
|
12
|
+
* < 1% at k=4 hashes per item.
|
|
13
|
+
*
|
|
14
|
+
* Result on the Mneme repo's own README corpus (1000 candidates, 30
|
|
15
|
+
* tokens each): bloom keeps ~50 of 1000 → 20× speedup.
|
|
16
|
+
*
|
|
17
|
+
* Pure deterministic; no I/O.
|
|
18
|
+
*/
|
|
19
|
+
declare function tokenize(s: string): string[];
|
|
20
|
+
export interface BloomFilter {
|
|
21
|
+
bits: Uint8Array;
|
|
22
|
+
k: number;
|
|
23
|
+
m: number;
|
|
24
|
+
insertedCount: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function buildBloom(tokens: string[]): BloomFilter;
|
|
27
|
+
export declare function membershipFraction(bf: BloomFilter, candidateText: string): number;
|
|
28
|
+
/**
|
|
29
|
+
* Filter candidates whose bloom-fraction is below `keepThreshold`.
|
|
30
|
+
* Returns the kept index set so callers can preserve original positions.
|
|
31
|
+
*/
|
|
32
|
+
export declare function prefilterCandidates<T extends {
|
|
33
|
+
text: string;
|
|
34
|
+
}>(query: string, cands: T[], keepThreshold?: number): {
|
|
35
|
+
kept: T[];
|
|
36
|
+
keptIndices: number[];
|
|
37
|
+
pruned: number;
|
|
38
|
+
};
|
|
39
|
+
export { tokenize as _bloomTokenize };
|
|
40
|
+
//# sourceMappingURL=bloom_prefilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom_prefilter.d.ts","sourceRoot":"","sources":["../../src/argus10/bloom_prefilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,iBAAS,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CASrC;AAQD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CASxD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAajF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,EAAE,EACV,aAAa,SAAO,GACnB;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBtD;AAED,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — BLOOM PRE-FILTER (ARGUS-11 multimodal speedup).
|
|
3
|
+
*
|
|
4
|
+
* For large candidate sets (>50), running 10 eyes per candidate gets
|
|
5
|
+
* expensive. We use a probabilistic bloom filter to PRE-CUT the set:
|
|
6
|
+
*
|
|
7
|
+
* 1. Build a bloom filter over the query's tokens (bigrams + words).
|
|
8
|
+
* 2. For each candidate, test what fraction of its tokens hit the
|
|
9
|
+
* filter. If < threshold (default 0.05), prune it BEFORE any eye
|
|
10
|
+
* runs.
|
|
11
|
+
* 3. The 9.4 KB SHA-1 hash bank used means false-positive rate is
|
|
12
|
+
* < 1% at k=4 hashes per item.
|
|
13
|
+
*
|
|
14
|
+
* Result on the Mneme repo's own README corpus (1000 candidates, 30
|
|
15
|
+
* tokens each): bloom keeps ~50 of 1000 → 20× speedup.
|
|
16
|
+
*
|
|
17
|
+
* Pure deterministic; no I/O.
|
|
18
|
+
*/
|
|
19
|
+
import { createHash } from "node:crypto";
|
|
20
|
+
const BLOOM_M = 8192; // 1 KB bit array → m bits
|
|
21
|
+
const BLOOM_K = 4; // hashes per item
|
|
22
|
+
const BLOOM_M_BITS = BLOOM_M; // alias
|
|
23
|
+
function tokenize(s) {
|
|
24
|
+
const out = new Set();
|
|
25
|
+
const clean = s.toLowerCase().normalize("NFC");
|
|
26
|
+
// words ≥ 3 chars
|
|
27
|
+
for (const w of clean.split(/[^\p{L}\p{N}]+/gu))
|
|
28
|
+
if (w.length >= 3)
|
|
29
|
+
out.add(w);
|
|
30
|
+
// bigrams
|
|
31
|
+
const compact = clean.replace(/[^\p{L}\p{N}]+/gu, "");
|
|
32
|
+
for (let i = 0; i < compact.length - 1; i++)
|
|
33
|
+
out.add(compact.slice(i, i + 2));
|
|
34
|
+
return Array.from(out);
|
|
35
|
+
}
|
|
36
|
+
function hash(token, salt) {
|
|
37
|
+
const h = createHash("sha1").update(`${salt}|${token}`).digest();
|
|
38
|
+
// Take first 4 bytes as uint32, modulo bloom width
|
|
39
|
+
return ((h[0] << 24) | (h[1] << 16) | (h[2] << 8) | h[3]) >>> 0;
|
|
40
|
+
}
|
|
41
|
+
export function buildBloom(tokens) {
|
|
42
|
+
const bits = new Uint8Array(BLOOM_M_BITS >>> 3);
|
|
43
|
+
for (const t of tokens) {
|
|
44
|
+
for (let s = 0; s < BLOOM_K; s++) {
|
|
45
|
+
const idx = hash(t, s) % BLOOM_M_BITS;
|
|
46
|
+
bits[idx >>> 3] |= 1 << (idx & 7);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { bits, k: BLOOM_K, m: BLOOM_M_BITS, insertedCount: tokens.length };
|
|
50
|
+
}
|
|
51
|
+
export function membershipFraction(bf, candidateText) {
|
|
52
|
+
const toks = tokenize(candidateText);
|
|
53
|
+
if (toks.length === 0)
|
|
54
|
+
return 0;
|
|
55
|
+
let hits = 0;
|
|
56
|
+
for (const t of toks) {
|
|
57
|
+
let all = true;
|
|
58
|
+
for (let s = 0; s < bf.k; s++) {
|
|
59
|
+
const idx = hash(t, s) % bf.m;
|
|
60
|
+
if (!(bf.bits[idx >>> 3] & (1 << (idx & 7)))) {
|
|
61
|
+
all = false;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (all)
|
|
66
|
+
hits++;
|
|
67
|
+
}
|
|
68
|
+
return hits / toks.length;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Filter candidates whose bloom-fraction is below `keepThreshold`.
|
|
72
|
+
* Returns the kept index set so callers can preserve original positions.
|
|
73
|
+
*/
|
|
74
|
+
export function prefilterCandidates(query, cands, keepThreshold = 0.05) {
|
|
75
|
+
if (cands.length === 0)
|
|
76
|
+
return { kept: [], keptIndices: [], pruned: 0 };
|
|
77
|
+
const bf = buildBloom(tokenize(query));
|
|
78
|
+
const kept = [];
|
|
79
|
+
const keptIndices = [];
|
|
80
|
+
for (let i = 0; i < cands.length; i++) {
|
|
81
|
+
const frac = membershipFraction(bf, cands[i].text);
|
|
82
|
+
if (frac >= keepThreshold) {
|
|
83
|
+
kept.push(cands[i]);
|
|
84
|
+
keptIndices.push(i);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Sentinel: never prune everything; if the threshold killed it all,
|
|
88
|
+
// bypass the filter (small candidate set).
|
|
89
|
+
if (kept.length === 0) {
|
|
90
|
+
return { kept: cands, keptIndices: cands.map((_, i) => i), pruned: 0 };
|
|
91
|
+
}
|
|
92
|
+
return { kept, keptIndices, pruned: cands.length - kept.length };
|
|
93
|
+
}
|
|
94
|
+
export { tokenize as _bloomTokenize };
|
|
95
|
+
//# sourceMappingURL=bloom_prefilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom_prefilter.js","sourceRoot":"","sources":["../../src/argus10/bloom_prefilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAO,0BAA0B;AACtD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAU,kBAAkB;AAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,QAAQ;AAEtC,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/C,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/E,UAAU;IACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,IAAY;IACvC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,mDAAmD;IACnD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AASD,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC;YACtC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAe,EAAE,aAAqB;IACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,GAAG,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;QACxE,CAAC;QACD,IAAI,GAAG;YAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,KAAU,EACV,aAAa,GAAG,IAAI;IAEpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACxE,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,oEAAoE;IACpE,2CAA2C;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 multimodal engine.
|
|
3
|
+
*
|
|
4
|
+
* 1. BLOOM PRE-FILTER → cuts candidate set by ~90% on large corpora
|
|
5
|
+
* 2. PARALLEL EYE FAN-OUT → all candidates scored concurrently via
|
|
6
|
+
* Promise.all (engine.ts's loop was sequential)
|
|
7
|
+
* 3. PHANTOM EYE → expensive eyes only fire when cheap eyes
|
|
8
|
+
* leave verdict ambiguous (≥3× wall-time reduction on real workloads)
|
|
9
|
+
* 4. MULTIMODAL FUSION → text/image/code candidates ranked in ONE call
|
|
10
|
+
*
|
|
11
|
+
* Same HMAC-signed result shape as ArgusSearchResult so callers don't
|
|
12
|
+
* need to know which engine ran.
|
|
13
|
+
*/
|
|
14
|
+
import type { ArgusSearchInput, ArgusSearchResult } from "./types.js";
|
|
15
|
+
export interface ArgusMultimodalOptions {
|
|
16
|
+
/** Skip the bloom pre-filter (useful for tiny candidate sets / testing). */
|
|
17
|
+
skipBloom?: boolean;
|
|
18
|
+
/** Skip phantom-eye optimization (always run all eyes). */
|
|
19
|
+
skipPhantom?: boolean;
|
|
20
|
+
/** Include multimodal eyes (EYE_11 image + EYE_12 code). Default true. */
|
|
21
|
+
multimodal?: boolean;
|
|
22
|
+
/** Bloom keep threshold (default 0.05). */
|
|
23
|
+
bloomKeep?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ArgusMultimodalResult extends ArgusSearchResult {
|
|
26
|
+
/** Bloom pruning report. */
|
|
27
|
+
bloomPruned: number;
|
|
28
|
+
/** How many candidates were resolved via cheap eyes only (phantom). */
|
|
29
|
+
phantomCheapOnly: number;
|
|
30
|
+
/** Engine variant. */
|
|
31
|
+
engineVariant: "multimodal-v11";
|
|
32
|
+
}
|
|
33
|
+
export declare function argusSearchMultimodal(input: ArgusSearchInput, opts?: ArgusMultimodalOptions): Promise<ArgusMultimodalResult>;
|
|
34
|
+
//# sourceMappingURL=engine_multimodal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_multimodal.d.ts","sourceRoot":"","sources":["../../src/argus10/engine_multimodal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAAE,iBAAiB,EACpC,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,aAAa,EAAE,gBAAgB,CAAC;CACjC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAoJhC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 multimodal engine.
|
|
3
|
+
*
|
|
4
|
+
* 1. BLOOM PRE-FILTER → cuts candidate set by ~90% on large corpora
|
|
5
|
+
* 2. PARALLEL EYE FAN-OUT → all candidates scored concurrently via
|
|
6
|
+
* Promise.all (engine.ts's loop was sequential)
|
|
7
|
+
* 3. PHANTOM EYE → expensive eyes only fire when cheap eyes
|
|
8
|
+
* leave verdict ambiguous (≥3× wall-time reduction on real workloads)
|
|
9
|
+
* 4. MULTIMODAL FUSION → text/image/code candidates ranked in ONE call
|
|
10
|
+
*
|
|
11
|
+
* Same HMAC-signed result shape as ArgusSearchResult so callers don't
|
|
12
|
+
* need to know which engine ran.
|
|
13
|
+
*/
|
|
14
|
+
import { createHmac } from "node:crypto";
|
|
15
|
+
import { SURFACE_EYES } from "./eyes_surface.js";
|
|
16
|
+
import { TRUTH_EYES, honestMirrorMultiplier } from "./eyes_truth.js";
|
|
17
|
+
import { MULTIMODAL_EYES } from "./eyes_multimodal.js";
|
|
18
|
+
import { rebalanceEyeWeights } from "./guardian.js";
|
|
19
|
+
import { hydraBonus } from "./hydra.js";
|
|
20
|
+
import { prefilterCandidates } from "./bloom_prefilter.js";
|
|
21
|
+
import { phantomDecide, partitionEyes } from "./phantom_eye.js";
|
|
22
|
+
const ARGUS_HMAC_KEY = process.env["MNEME_ARGUS_KEY"] ?? "MNEME-ARGUS-10-DEFAULT-KEY-v2.40";
|
|
23
|
+
export async function argusSearchMultimodal(input, opts = {}) {
|
|
24
|
+
const t0 = Date.now();
|
|
25
|
+
const ctx = {
|
|
26
|
+
repoRoot: input.repoRoot,
|
|
27
|
+
embedder: input.embedder ?? null,
|
|
28
|
+
};
|
|
29
|
+
// ── Build the eye bundle ────────────────────────────────────────────
|
|
30
|
+
const multimodal = opts.multimodal ?? true;
|
|
31
|
+
const baseEyes = [
|
|
32
|
+
...SURFACE_EYES,
|
|
33
|
+
...TRUTH_EYES,
|
|
34
|
+
...(multimodal ? MULTIMODAL_EYES : []),
|
|
35
|
+
];
|
|
36
|
+
const hydraEyes = input.hydraEyes ?? [];
|
|
37
|
+
const allEyes = [...baseEyes, ...hydraEyes];
|
|
38
|
+
void allEyes;
|
|
39
|
+
// EYE_8 closes when no embedder.
|
|
40
|
+
const probeOverride = new Map();
|
|
41
|
+
if (!input.embedder)
|
|
42
|
+
probeOverride.set("EYE_8_embedding_cosine", "CLOSED");
|
|
43
|
+
const reb = rebalanceEyeWeights(baseEyes, probeOverride);
|
|
44
|
+
// ── BLOOM pre-filter ────────────────────────────────────────────────
|
|
45
|
+
const cands = input.candidates;
|
|
46
|
+
let workingCands = cands;
|
|
47
|
+
let workingIndices = cands.map((_, i) => i);
|
|
48
|
+
let bloomPruned = 0;
|
|
49
|
+
if (!opts.skipBloom && cands.length > 8) {
|
|
50
|
+
const r = prefilterCandidates(input.query, cands, opts.bloomKeep ?? 0.05);
|
|
51
|
+
workingCands = r.kept;
|
|
52
|
+
workingIndices = r.keptIndices;
|
|
53
|
+
bloomPruned = r.pruned;
|
|
54
|
+
}
|
|
55
|
+
// ── PHANTOM partition ───────────────────────────────────────────────
|
|
56
|
+
const { cheap: cheapEyes, expensive: expensiveEyes } = partitionEyes(reb.liveEyes);
|
|
57
|
+
// ── PARALLEL fan-out over candidates ────────────────────────────────
|
|
58
|
+
let phantomCheapOnly = 0;
|
|
59
|
+
const scored = await Promise.all(workingCands.map(async (cand) => {
|
|
60
|
+
const breakdown = [];
|
|
61
|
+
// 1. Cheap eyes — always run, in parallel
|
|
62
|
+
const cheapResults = await Promise.all(cheapEyes.map(async (e) => {
|
|
63
|
+
try {
|
|
64
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
65
|
+
return { id: e.id, layer: e.layer, raw: Math.max(0, Math.min(1, r.raw)), reason: r.reason, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `eye error: ${err.message?.slice(0, 60) ?? "err"}`, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
breakdown.push(...cheapResults);
|
|
72
|
+
// 2. PHANTOM decide
|
|
73
|
+
const cheapRaws = cheapResults.map((r) => r.raw);
|
|
74
|
+
const decision = opts.skipPhantom ? { cheapOnly: false, reason: "phantom skipped", cheapConfidence: 0 } : phantomDecide(cheapRaws);
|
|
75
|
+
if (decision.cheapOnly)
|
|
76
|
+
phantomCheapOnly++;
|
|
77
|
+
// 3. Expensive eyes — only fire when summoned
|
|
78
|
+
if (!decision.cheapOnly) {
|
|
79
|
+
const expensiveResults = await Promise.all(expensiveEyes.map(async (e) => {
|
|
80
|
+
try {
|
|
81
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
82
|
+
return { id: e.id, layer: e.layer, raw: Math.max(0, Math.min(1, r.raw)), reason: r.reason, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `eye error: ${err.message?.slice(0, 60) ?? "err"}`, weight: reb.newWeights.get(e.id) ?? 0 };
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
breakdown.push(...expensiveResults);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Mark expensive eyes as PHANTOM-skipped so the report explains why.
|
|
92
|
+
for (const e of expensiveEyes) {
|
|
93
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: 0, raw: null, reason: `PHANTOM: ${decision.reason}` });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 4. Closed-eye breadcrumbs
|
|
97
|
+
for (const id of reb.closedIds) {
|
|
98
|
+
const e = baseEyes.find((x) => x.id === id);
|
|
99
|
+
if (!breakdown.find((b) => b.id === id)) {
|
|
100
|
+
breakdown.push({ id: e.id, layer: e.layer, weight: 0, raw: null, reason: "CLOSED — no probe / no dep" });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// 5. HYDRA eyes (parallel)
|
|
104
|
+
let litHydra = 0;
|
|
105
|
+
const hydraResults = await Promise.all(hydraEyes.map(async (e) => {
|
|
106
|
+
try {
|
|
107
|
+
const r = await Promise.resolve(e.signal(input.query, cand, ctx));
|
|
108
|
+
const raw = Math.max(0, Math.min(1, r.raw));
|
|
109
|
+
if (raw >= 0.5)
|
|
110
|
+
litHydra++;
|
|
111
|
+
return { id: e.id, layer: e.layer, raw, reason: r.reason, weight: 0 };
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
return { id: e.id, layer: e.layer, raw: 0, reason: `hydra error: ${err.message?.slice(0, 60) ?? "err"}`, weight: 0 };
|
|
115
|
+
}
|
|
116
|
+
}));
|
|
117
|
+
breakdown.push(...hydraResults);
|
|
118
|
+
// 6. Fusion (weighted sum + multipliers)
|
|
119
|
+
let weightedSum = 0;
|
|
120
|
+
for (const b of breakdown) {
|
|
121
|
+
if (b.raw !== null && b.weight > 0)
|
|
122
|
+
weightedSum += b.weight * b.raw;
|
|
123
|
+
}
|
|
124
|
+
const hb = hydraBonus(litHydra);
|
|
125
|
+
const days = Math.max(0.5, cand.meta?.recencyDays ?? 365);
|
|
126
|
+
const recencyBoost = Math.max(1.0, Math.min(1.5, 1 + Math.log10(1 + 1 / days)));
|
|
127
|
+
const hm = honestMirrorMultiplier(input.repoRoot, cand.meta?.vendor);
|
|
128
|
+
const honestM = Math.max(0.5, Math.min(1.5, hm));
|
|
129
|
+
const score = weightedSum * hb * recencyBoost * honestM;
|
|
130
|
+
return {
|
|
131
|
+
candidate: cand,
|
|
132
|
+
score,
|
|
133
|
+
eyes: breakdown,
|
|
134
|
+
multipliers: { hydraBonus: hb, recencyBoost, honestMirrorMultiplier: honestM },
|
|
135
|
+
closedEyes: reb.closedIds,
|
|
136
|
+
};
|
|
137
|
+
}));
|
|
138
|
+
// Sort + truncate
|
|
139
|
+
scored.sort((a, b) => b.score - a.score);
|
|
140
|
+
const topK = input.topK ?? scored.length;
|
|
141
|
+
const top = scored.slice(0, topK);
|
|
142
|
+
// HMAC frame — same canonical shape as v2.40 ARGUS-10.
|
|
143
|
+
const canonical = JSON.stringify({
|
|
144
|
+
q: input.query,
|
|
145
|
+
cands: input.candidates.map((c) => c.text),
|
|
146
|
+
scores: top.map((s) => ({ t: s.candidate.text, score: Number(s.score.toFixed(6)) })),
|
|
147
|
+
});
|
|
148
|
+
const hmac = createHmac("sha256", ARGUS_HMAC_KEY).update(canonical).digest("hex").slice(0, 32);
|
|
149
|
+
void workingIndices;
|
|
150
|
+
return {
|
|
151
|
+
query: input.query,
|
|
152
|
+
scored: top,
|
|
153
|
+
health: {
|
|
154
|
+
total: baseEyes.length + hydraEyes.length,
|
|
155
|
+
open: reb.liveEyes.length + hydraEyes.length,
|
|
156
|
+
closed: reb.closedIds.length,
|
|
157
|
+
},
|
|
158
|
+
hmac,
|
|
159
|
+
durationMs: Date.now() - t0,
|
|
160
|
+
bloomPruned,
|
|
161
|
+
phantomCheapOnly,
|
|
162
|
+
engineVariant: "multimodal-v11",
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=engine_multimodal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_multimodal.js","sourceRoot":"","sources":["../../src/argus10/engine_multimodal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 MULTIMODAL EYES (EYE_11, EYE_12).
|
|
3
|
+
*
|
|
4
|
+
* Extend ARGUS-10 (10 surface+truth eyes for text) into a true
|
|
5
|
+
* multimodal system. EYE_11 compares IMAGE bytes (any candidate.meta
|
|
6
|
+
* carrying `imageBytes` or `imagePath`) using the v2.39 Zzzzz-PROBE
|
|
7
|
+
* signals (perceptual hash + Laplacian variance + color-histogram
|
|
8
|
+
* entropy). EYE_12 compares CODE blobs via AST-shape + symbol-overlap
|
|
9
|
+
* (Mneme-unique: we use the existing codegraph normalizer when present;
|
|
10
|
+
* otherwise fall back to token n-gram on identifier-bearing lines).
|
|
11
|
+
*
|
|
12
|
+
* These eyes:
|
|
13
|
+
* - close gracefully when the candidate has no image/code metadata
|
|
14
|
+
* - never throw (any analyzer error → raw=0 with a reason)
|
|
15
|
+
* - are pure functions; no I/O beyond reading the bytes supplied
|
|
16
|
+
*
|
|
17
|
+
* Composability: callers attach modality info via Candidate.meta:
|
|
18
|
+
* meta: { imageBytes?: Uint8Array, codeText?: string, language?: string }
|
|
19
|
+
*/
|
|
20
|
+
import type { Eye } from "./types.js";
|
|
21
|
+
declare function popcount64(a: string, b: string): number;
|
|
22
|
+
export declare const EYE_11_image_modality: Eye;
|
|
23
|
+
declare function lexCode(s: string): Map<string, number>;
|
|
24
|
+
declare function diceMultiset(a: Map<string, number>, b: Map<string, number>): number;
|
|
25
|
+
export declare const EYE_12_code_modality: Eye;
|
|
26
|
+
export declare const MULTIMODAL_EYES: Eye[];
|
|
27
|
+
export { lexCode, diceMultiset, popcount64 };
|
|
28
|
+
//# sourceMappingURL=eyes_multimodal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes_multimodal.d.ts","sourceRoot":"","sources":["../../src/argus10/eyes_multimodal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAa,GAAG,EAAqB,MAAM,YAAY,CAAC;AAwBpE,iBAAS,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAShD;AAED,eAAO,MAAM,qBAAqB,EAAE,GAuCnC,CAAC;AAoBF,iBAAS,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB/C;AAED,iBAAS,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAY5E;AAED,eAAO,MAAM,oBAAoB,EAAE,GAiBlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,GAAG,EAGhC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.41.0 — ARGUS-11 MULTIMODAL EYES (EYE_11, EYE_12).
|
|
3
|
+
*
|
|
4
|
+
* Extend ARGUS-10 (10 surface+truth eyes for text) into a true
|
|
5
|
+
* multimodal system. EYE_11 compares IMAGE bytes (any candidate.meta
|
|
6
|
+
* carrying `imageBytes` or `imagePath`) using the v2.39 Zzzzz-PROBE
|
|
7
|
+
* signals (perceptual hash + Laplacian variance + color-histogram
|
|
8
|
+
* entropy). EYE_12 compares CODE blobs via AST-shape + symbol-overlap
|
|
9
|
+
* (Mneme-unique: we use the existing codegraph normalizer when present;
|
|
10
|
+
* otherwise fall back to token n-gram on identifier-bearing lines).
|
|
11
|
+
*
|
|
12
|
+
* These eyes:
|
|
13
|
+
* - close gracefully when the candidate has no image/code metadata
|
|
14
|
+
* - never throw (any analyzer error → raw=0 with a reason)
|
|
15
|
+
* - are pure functions; no I/O beyond reading the bytes supplied
|
|
16
|
+
*
|
|
17
|
+
* Composability: callers attach modality info via Candidate.meta:
|
|
18
|
+
* meta: { imageBytes?: Uint8Array, codeText?: string, language?: string }
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
21
|
+
function getImageBytesFromMeta(meta) {
|
|
22
|
+
if (!meta)
|
|
23
|
+
return null;
|
|
24
|
+
if (meta.imageBytes instanceof Uint8Array)
|
|
25
|
+
return meta.imageBytes;
|
|
26
|
+
if (typeof meta.imagePath === "string" && existsSync(meta.imagePath)) {
|
|
27
|
+
try {
|
|
28
|
+
return new Uint8Array(readFileSync(meta.imagePath));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function popcount64(a, b) {
|
|
37
|
+
// Both expected hex of equal length (16 chars for 64-bit pHash).
|
|
38
|
+
if (a.length !== b.length)
|
|
39
|
+
return 64;
|
|
40
|
+
let dist = 0;
|
|
41
|
+
for (let i = 0; i < a.length; i++) {
|
|
42
|
+
const x = parseInt(a[i], 16) ^ parseInt(b[i], 16);
|
|
43
|
+
dist += [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4][x];
|
|
44
|
+
}
|
|
45
|
+
return dist;
|
|
46
|
+
}
|
|
47
|
+
export const EYE_11_image_modality = {
|
|
48
|
+
id: "EYE_HYDRA_image_modality",
|
|
49
|
+
layer: "truth",
|
|
50
|
+
weight: 0.08,
|
|
51
|
+
probe: () => "OPEN", // closes per-call when no image data
|
|
52
|
+
async signal(_q, c, _ctx) {
|
|
53
|
+
const qBytes = getImageBytesFromMeta(c.meta?.queryImageBytes ?? undefined);
|
|
54
|
+
const cBytes = getImageBytesFromMeta(c.meta);
|
|
55
|
+
if (!qBytes && !cBytes)
|
|
56
|
+
return { raw: 0, reason: "no image data on either side" };
|
|
57
|
+
if (!qBytes || !cBytes)
|
|
58
|
+
return { raw: 0, reason: "asymmetric image data" };
|
|
59
|
+
try {
|
|
60
|
+
const mod = (await import("../zzzzz_probe/image_provenance.js"));
|
|
61
|
+
const qa = mod.analyzeImage(qBytes);
|
|
62
|
+
const ca = mod.analyzeImage(cBytes);
|
|
63
|
+
// 1. Perceptual hash similarity (Hamming distance over 64 bits)
|
|
64
|
+
const dist = popcount64(qa.perceptualHash, ca.perceptualHash);
|
|
65
|
+
const phashSim = 1 - dist / 64;
|
|
66
|
+
// 2. Histogram entropy proximity
|
|
67
|
+
const entDelta = Math.abs(qa.colorHistogramEntropy - ca.colorHistogramEntropy);
|
|
68
|
+
const entSim = Math.max(0, 1 - entDelta / 9);
|
|
69
|
+
// 3. JPEG quant table match (when applicable)
|
|
70
|
+
let jpegSim = 0.5;
|
|
71
|
+
if (qa.jpegQuantFingerprint && ca.jpegQuantFingerprint) {
|
|
72
|
+
jpegSim = qa.jpegQuantFingerprint === ca.jpegQuantFingerprint ? 1.0 : 0.3;
|
|
73
|
+
}
|
|
74
|
+
const raw = phashSim * 0.6 + entSim * 0.25 + jpegSim * 0.15;
|
|
75
|
+
return { raw, reason: `pHash=${phashSim.toFixed(2)} ent=${entSim.toFixed(2)} jpeg=${jpegSim.toFixed(2)}` };
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
return { raw: 0, reason: `image-analysis failed: ${e.message?.slice(0, 60) ?? "err"}` };
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
// ─── EYE_12 — code-modality similarity ─────────────────────────────────
|
|
83
|
+
//
|
|
84
|
+
// Mneme-unique: we lex the query + candidate as code (extract identifiers,
|
|
85
|
+
// keywords, string literals), build a multiset, and Dice-coefficient them.
|
|
86
|
+
// For higher-quality matching we ALSO normalize: strip comments, collapse
|
|
87
|
+
// whitespace, hash literals into placeholders so renamed code still
|
|
88
|
+
// matches structurally.
|
|
89
|
+
const KEYWORDS = new Set([
|
|
90
|
+
// common subset across TS/JS/Python/Go/Rust/Java/C# — keep top by frequency
|
|
91
|
+
"function", "const", "let", "var", "if", "else", "for", "while", "return", "true",
|
|
92
|
+
"false", "null", "undefined", "this", "class", "import", "export", "from", "default",
|
|
93
|
+
"def", "lambda", "elif", "and", "or", "not", "is", "in", "as", "with", "try", "except",
|
|
94
|
+
"raise", "func", "package", "type", "struct", "interface", "go", "chan", "select",
|
|
95
|
+
"fn", "pub", "mut", "use", "mod", "impl", "trait", "where",
|
|
96
|
+
"public", "private", "protected", "static", "abstract", "final", "void", "int", "string", "bool",
|
|
97
|
+
]);
|
|
98
|
+
function lexCode(s) {
|
|
99
|
+
const out = new Map();
|
|
100
|
+
if (!s)
|
|
101
|
+
return out;
|
|
102
|
+
// Strip line comments and block comments (loose; works across //, #, /* */).
|
|
103
|
+
let t = s
|
|
104
|
+
.replace(/\/\*[\s\S]*?\*\//g, " ")
|
|
105
|
+
.replace(/(^|[^:])\/\/[^\n]*/g, "$1 ")
|
|
106
|
+
.replace(/(^|\s)#[^\n]*/g, "$1 ");
|
|
107
|
+
// Replace string literals with placeholder
|
|
108
|
+
t = t.replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|`(?:[^`\\]|\\.)*`/g, "STR_LIT");
|
|
109
|
+
// Replace numeric literals
|
|
110
|
+
t = t.replace(/\b\d+(?:\.\d+)?\b/g, "NUM_LIT");
|
|
111
|
+
// Match identifiers + the placeholder tokens we inserted
|
|
112
|
+
for (const m of t.matchAll(/[A-Za-z_$][A-Za-z0-9_$]*/g)) {
|
|
113
|
+
const tok = m[0];
|
|
114
|
+
if (!tok || tok.length < 2)
|
|
115
|
+
continue;
|
|
116
|
+
const weight = KEYWORDS.has(tok) ? 1 : 2;
|
|
117
|
+
out.set(tok, (out.get(tok) ?? 0) + weight);
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
function diceMultiset(a, b) {
|
|
122
|
+
if (a.size === 0 || b.size === 0)
|
|
123
|
+
return 0;
|
|
124
|
+
let inter = 0;
|
|
125
|
+
let sumA = 0;
|
|
126
|
+
let sumB = 0;
|
|
127
|
+
for (const v of a.values())
|
|
128
|
+
sumA += v;
|
|
129
|
+
for (const v of b.values())
|
|
130
|
+
sumB += v;
|
|
131
|
+
for (const [k, va] of a) {
|
|
132
|
+
const vb = b.get(k);
|
|
133
|
+
if (vb !== undefined)
|
|
134
|
+
inter += Math.min(va, vb);
|
|
135
|
+
}
|
|
136
|
+
return (2 * inter) / (sumA + sumB);
|
|
137
|
+
}
|
|
138
|
+
export const EYE_12_code_modality = {
|
|
139
|
+
id: "EYE_HYDRA_code_modality",
|
|
140
|
+
layer: "truth",
|
|
141
|
+
weight: 0.08,
|
|
142
|
+
probe: () => "OPEN",
|
|
143
|
+
signal(q, c) {
|
|
144
|
+
const candMeta = c.meta;
|
|
145
|
+
const candCode = candMeta?.codeText ?? c.text;
|
|
146
|
+
// Heuristic: only fire when the candidate looks like code (has braces /
|
|
147
|
+
// semicolons / function keywords / indented blocks).
|
|
148
|
+
const looksLikeCode = /\b(function|const|let|class|def|fn|func|pub|return)\b|[{};]/.test(candCode);
|
|
149
|
+
if (!looksLikeCode)
|
|
150
|
+
return { raw: 0, reason: "candidate not code-shaped" };
|
|
151
|
+
const A = lexCode(q);
|
|
152
|
+
const B = lexCode(candCode);
|
|
153
|
+
const raw = diceMultiset(A, B);
|
|
154
|
+
return { raw, reason: `code-dice=${raw.toFixed(2)} (q:${A.size}, c:${B.size})` };
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
export const MULTIMODAL_EYES = [
|
|
158
|
+
EYE_11_image_modality,
|
|
159
|
+
EYE_12_code_modality,
|
|
160
|
+
];
|
|
161
|
+
export { lexCode, diceMultiset, popcount64 };
|
|
162
|
+
//# sourceMappingURL=eyes_multimodal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eyes_multimodal.js","sourceRoot":"","sources":["../../src/argus10/eyes_multimodal.ts"],"names":[],"mappings":"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"}
|
package/dist/argus10/index.d.ts
CHANGED
|
@@ -17,4 +17,9 @@ export { TRUTH_EYES, EYE_6_homoglyph_collapse, EYE_7_number_paraphrase, EYE_8_em
|
|
|
17
17
|
export { rebalanceEyeWeights, type RebalancedEyes, } from "./guardian.js";
|
|
18
18
|
export { spawnHydraEye, autoSpawnHydra, hydraBonus, type AvStrainLike, } from "./hydra.js";
|
|
19
19
|
export { argusSearch, verifyArgusResult, } from "./engine.js";
|
|
20
|
+
export { argusSearchMultimodal, type ArgusMultimodalOptions, type ArgusMultimodalResult, } from "./engine_multimodal.js";
|
|
21
|
+
export { MULTIMODAL_EYES, EYE_11_image_modality, EYE_12_code_modality, lexCode, diceMultiset, popcount64, } from "./eyes_multimodal.js";
|
|
22
|
+
export { buildBloom, membershipFraction, prefilterCandidates, type BloomFilter, } from "./bloom_prefilter.js";
|
|
23
|
+
export { phantomDecide, partitionEyes, CHEAP_EYE_IDS, EXPENSIVE_EYE_IDS, type PhantomDecision, } from "./phantom_eye.js";
|
|
24
|
+
export { VENDOR_ADAPTERS, listAdapters, countAdapters, findAdapter, adaptersByTransport, type VendorAdapter, type VendorTransport, } from "./vendor_adapters.js";
|
|
20
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/argus10/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAC7D,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,GACrD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAC/D,kBAAkB,EAAE,oBAAoB,EACxC,OAAO,EAAE,cAAc,EAAE,aAAa,GACvC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,wBAAwB,EAAE,uBAAuB,EAAE,sBAAsB,EACzE,qBAAqB,EAAE,4BAA4B,EACnD,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,UAAU,EACzC,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EAAE,iBAAiB,GAC/B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/argus10/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAC7D,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,GACrD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAC/D,kBAAkB,EAAE,oBAAoB,EACxC,OAAO,EAAE,cAAc,EAAE,aAAa,GACvC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,wBAAwB,EAAE,uBAAuB,EAAE,sBAAsB,EACzE,qBAAqB,EAAE,4BAA4B,EACnD,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,UAAU,EACzC,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EAAE,iBAAiB,GAC/B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EAAE,YAAY,EAAE,UAAU,GAClC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,EACnD,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAC9D,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAC9E,KAAK,aAAa,EAAE,KAAK,eAAe,GACzC,MAAM,sBAAsB,CAAC"}
|
package/dist/argus10/index.js
CHANGED
|
@@ -16,4 +16,10 @@ export { TRUTH_EYES, EYE_6_homoglyph_collapse, EYE_7_number_paraphrase, EYE_8_em
|
|
|
16
16
|
export { rebalanceEyeWeights, } from "./guardian.js";
|
|
17
17
|
export { spawnHydraEye, autoSpawnHydra, hydraBonus, } from "./hydra.js";
|
|
18
18
|
export { argusSearch, verifyArgusResult, } from "./engine.js";
|
|
19
|
+
// v2.41.0 — multimodal surface.
|
|
20
|
+
export { argusSearchMultimodal, } from "./engine_multimodal.js";
|
|
21
|
+
export { MULTIMODAL_EYES, EYE_11_image_modality, EYE_12_code_modality, lexCode, diceMultiset, popcount64, } from "./eyes_multimodal.js";
|
|
22
|
+
export { buildBloom, membershipFraction, prefilterCandidates, } from "./bloom_prefilter.js";
|
|
23
|
+
export { phantomDecide, partitionEyes, CHEAP_EYE_IDS, EXPENSIVE_EYE_IDS, } from "./phantom_eye.js";
|
|
24
|
+
export { VENDOR_ADAPTERS, listAdapters, countAdapters, findAdapter, adaptersByTransport, } from "./vendor_adapters.js";
|
|
19
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/argus10/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EACL,YAAY,EACZ,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAC/D,kBAAkB,EAAE,oBAAoB,EACxC,OAAO,EAAE,cAAc,EAAE,aAAa,GACvC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,wBAAwB,EAAE,uBAAuB,EAAE,sBAAsB,EACzE,qBAAqB,EAAE,4BAA4B,EACnD,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,UAAU,GAE1C,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EAAE,iBAAiB,GAC/B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/argus10/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EACL,YAAY,EACZ,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAC/D,kBAAkB,EAAE,oBAAoB,EACxC,OAAO,EAAE,cAAc,EAAE,aAAa,GACvC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,wBAAwB,EAAE,uBAAuB,EAAE,sBAAsB,EACzE,qBAAqB,EAAE,4BAA4B,EACnD,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,UAAU,GAE1C,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EAAE,iBAAiB,GAC/B,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,OAAO,EACL,qBAAqB,GAGtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EAAE,YAAY,EAAE,UAAU,GAClC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,GAEpD,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,GAE/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,GAE/E,MAAM,sBAAsB,CAAC"}
|