@mneme-ai/core 0.24.0 → 0.26.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.
Files changed (41) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/pipeline/index.d.ts +34 -0
  6. package/dist/pipeline/index.d.ts.map +1 -0
  7. package/dist/pipeline/index.js +51 -0
  8. package/dist/pipeline/index.js.map +1 -0
  9. package/dist/pipeline/mpe.d.ts +83 -0
  10. package/dist/pipeline/mpe.d.ts.map +1 -0
  11. package/dist/pipeline/mpe.js +259 -0
  12. package/dist/pipeline/mpe.js.map +1 -0
  13. package/dist/pipeline/mpe.test.d.ts +2 -0
  14. package/dist/pipeline/mpe.test.d.ts.map +1 -0
  15. package/dist/pipeline/mpe.test.js +196 -0
  16. package/dist/pipeline/mpe.test.js.map +1 -0
  17. package/dist/pipeline/pipeline.integration.test.d.ts +2 -0
  18. package/dist/pipeline/pipeline.integration.test.d.ts.map +1 -0
  19. package/dist/pipeline/pipeline.integration.test.js +99 -0
  20. package/dist/pipeline/pipeline.integration.test.js.map +1 -0
  21. package/dist/pipeline/super-pipeline.d.ts +38 -0
  22. package/dist/pipeline/super-pipeline.d.ts.map +1 -0
  23. package/dist/pipeline/super-pipeline.js +247 -0
  24. package/dist/pipeline/super-pipeline.js.map +1 -0
  25. package/dist/pipeline/super-pipeline.test.d.ts +2 -0
  26. package/dist/pipeline/super-pipeline.test.d.ts.map +1 -0
  27. package/dist/pipeline/super-pipeline.test.js +130 -0
  28. package/dist/pipeline/super-pipeline.test.js.map +1 -0
  29. package/dist/pipeline/superscalar.d.ts +36 -0
  30. package/dist/pipeline/superscalar.d.ts.map +1 -0
  31. package/dist/pipeline/superscalar.js +130 -0
  32. package/dist/pipeline/superscalar.js.map +1 -0
  33. package/dist/pipeline/superscalar.test.d.ts +2 -0
  34. package/dist/pipeline/superscalar.test.d.ts.map +1 -0
  35. package/dist/pipeline/superscalar.test.js +130 -0
  36. package/dist/pipeline/superscalar.test.js.map +1 -0
  37. package/dist/pipeline/types.d.ts +104 -0
  38. package/dist/pipeline/types.d.ts.map +1 -0
  39. package/dist/pipeline/types.js +15 -0
  40. package/dist/pipeline/types.js.map +1 -0
  41. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { runPipeline } from "./super-pipeline.js";
3
+ import { reorderBySeq } from "./superscalar.js";
4
+ import { defineStage } from "./index.js";
5
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
6
+ async function* fromArray(items) {
7
+ for (const v of items)
8
+ yield v;
9
+ }
10
+ async function collect(it) {
11
+ const out = [];
12
+ for await (const v of it)
13
+ out.push(v);
14
+ return out;
15
+ }
16
+ describe("runPipeline — fan-through correctness", () => {
17
+ it("two-stage chain produces all outputs", async () => {
18
+ const stages = [
19
+ defineStage("plus1", "plus1", (n) => n + 1),
20
+ defineStage("times2", "times2", (n) => n * 2),
21
+ ];
22
+ const out = await collect(reorderBySeq(runPipeline({ stages }, [1, 2, 3])));
23
+ expect(out.map((x) => x.value)).toEqual([4, 6, 8]);
24
+ });
25
+ it("preserves input order via reorderBySeq", async () => {
26
+ // Stage 0 sleeps inversely so later items finish first.
27
+ const stages = [
28
+ defineStage("sleep", "sleep", async (n) => {
29
+ await sleep((5 - n) * 5);
30
+ return n;
31
+ }),
32
+ defineStage("id", "id", (n) => n),
33
+ ];
34
+ const out = await collect(reorderBySeq(runPipeline({ stages, width: 4 }, [0, 1, 2, 3, 4])));
35
+ expect(out.map((x) => x.seq)).toEqual([0, 1, 2, 3, 4]);
36
+ expect(out.map((x) => x.value)).toEqual([0, 1, 2, 3, 4]);
37
+ });
38
+ });
39
+ describe("runPipeline — superscalar speedup", () => {
40
+ it("width=4 finishes a slow stage faster than width=1", async () => {
41
+ const inputs = Array.from({ length: 8 }, (_, i) => i);
42
+ const slow = defineStage("slow", "slow", async (n) => {
43
+ await sleep(20);
44
+ return n;
45
+ });
46
+ const t0 = Date.now();
47
+ await collect(runPipeline({ stages: [slow], width: 1 }, inputs));
48
+ const seq = Date.now() - t0;
49
+ const t1 = Date.now();
50
+ await collect(runPipeline({ stages: [slow], width: 4 }, inputs));
51
+ const par = Date.now() - t1;
52
+ // 4 workers should finish noticeably faster — give a generous bound to
53
+ // keep the test stable on slow CI.
54
+ expect(par).toBeLessThan(seq);
55
+ });
56
+ });
57
+ describe("runPipeline — backpressure", () => {
58
+ it("a slow downstream stage caps in-flight queue depth", async () => {
59
+ // When stage 2 is slow + bufferSize=2, stage 1 cannot run more than
60
+ // ~2 items ahead (queue capacity).
61
+ let stage1InFlight = 0;
62
+ let maxInFlight = 0;
63
+ const stages = [
64
+ defineStage("fast", "fast", async (n) => {
65
+ stage1InFlight += 1;
66
+ maxInFlight = Math.max(maxInFlight, stage1InFlight);
67
+ await sleep(2);
68
+ stage1InFlight -= 1;
69
+ return n;
70
+ }),
71
+ defineStage("slow", "slow", async (n) => {
72
+ await sleep(40);
73
+ return n;
74
+ }),
75
+ ];
76
+ await collect(runPipeline({ stages, width: 1, bufferSize: 2 }, Array.from({ length: 10 }, (_, i) => i)));
77
+ // Without backpressure, stage 1 would race ahead and finish all 10 ~immediately.
78
+ // With bufferSize=2, the running window is bounded.
79
+ expect(maxInFlight).toBeLessThanOrEqual(2);
80
+ });
81
+ });
82
+ describe("runPipeline — failure isolation", () => {
83
+ it("a single stage failure does not stop the rest of the items", async () => {
84
+ const events = [];
85
+ const stages = [
86
+ defineStage("guard", "guard", (n) => {
87
+ if (n === 2)
88
+ throw new Error("nope");
89
+ return n;
90
+ }),
91
+ defineStage("ok", "ok", (n) => n + 100),
92
+ ];
93
+ const out = await collect(runPipeline({ stages, onEvent: (e) => events.push(e) }, [0, 1, 2, 3]));
94
+ // 3 succeed, 1 dropped — but pipeline finishes.
95
+ expect(out.map((x) => x.value).sort((a, b) => a - b)).toEqual([100, 101, 103]);
96
+ expect(events.some((e) => e.kind === "stage-fail")).toBe(true);
97
+ });
98
+ });
99
+ describe("runPipeline — events + MPE telemetry", () => {
100
+ it("emits stage-start and stage-done for every successful run", async () => {
101
+ const events = [];
102
+ const stages = [defineStage("e", "e", (n) => n)];
103
+ await collect(runPipeline({ stages, onEvent: (e) => events.push(e) }, [0, 1, 2]));
104
+ const starts = events.filter((e) => e.kind === "stage-start").length;
105
+ const dones = events.filter((e) => e.kind === "stage-done").length;
106
+ expect(starts).toBe(3);
107
+ expect(dones).toBe(3);
108
+ });
109
+ it("requires at least one stage", async () => {
110
+ await expect(async () => {
111
+ for await (const _ of runPipeline({ stages: [] }, [1])) {
112
+ // unreachable
113
+ }
114
+ }).rejects.toThrow(/at least one stage/);
115
+ });
116
+ it("stage receives StageContext.trust ∈ [0,1]", async () => {
117
+ const trusts = [];
118
+ const stage = {
119
+ id: "trust",
120
+ description: "t",
121
+ async process(n, ctx) {
122
+ trusts.push(ctx.trust);
123
+ return n;
124
+ },
125
+ };
126
+ await collect(runPipeline({ stages: [stage] }, [0]));
127
+ expect(trusts.every((t) => t >= 0 && t <= 1)).toBe(true);
128
+ });
129
+ });
130
+ //# sourceMappingURL=super-pipeline.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-pipeline.test.js","sourceRoot":"","sources":["../../src/pipeline/super-pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Superscalar layer — N parallel workers per stage with sequence-id
3
+ * preservation, plus speculative pre-fetch helpers.
4
+ *
5
+ * "Superscalar" here means: multiple identical workers can pull items from
6
+ * the same input queue and process them concurrently. Outputs may complete
7
+ * out of order (one item is slow while a later one is fast). Each item
8
+ * carries a seq number so downstream code can re-sort if needed.
9
+ */
10
+ import type { PipelineStage, StageContext, SeqItem } from "./types.js";
11
+ /**
12
+ * Spawn `width` parallel workers for a single stage. Reads SeqItem<I> from
13
+ * `inputs`, processes through `stage.process`, and yields SeqItem<O> in the
14
+ * order they complete (NOT the order they entered — see reorderBySeq).
15
+ */
16
+ export declare function superscalar<I, O>(stage: PipelineStage<I, O>, inputs: AsyncIterable<SeqItem<I>>, width: number, baseCtx: Omit<StageContext, "workerId">): AsyncIterable<SeqItem<O>>;
17
+ /**
18
+ * Re-emit SeqItem<T> in monotonically-increasing seq order. Buffers
19
+ * out-of-order items in a small heap-like structure (insertion sort —
20
+ * pipelines rarely have huge reorder windows so O(n) per insert is fine).
21
+ *
22
+ * `startAt` is the first seq number to emit (default 0).
23
+ */
24
+ export declare function reorderBySeq<T>(inputs: AsyncIterable<SeqItem<T>>, startAt?: number): AsyncIterable<SeqItem<T>>;
25
+ /**
26
+ * Speculative pre-fetch: start nextStage on a predicted input before the
27
+ * upstream finalizes. Returns a promise + a cancel() function. cancel()
28
+ * does NOT abort the underlying process call (we can't cancel arbitrary
29
+ * promises) but flips an internal flag so callers can ignore the result.
30
+ */
31
+ export declare function speculatePrefetch<I, O>(nextStage: PipelineStage<I, O>, predicted: I, ctx?: StageContext): {
32
+ promise: Promise<O>;
33
+ cancel: () => void;
34
+ cancelled: () => boolean;
35
+ };
36
+ //# sourceMappingURL=superscalar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superscalar.d.ts","sourceRoot":"","sources":["../../src/pipeline/superscalar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;GAIG;AACH,wBAAuB,WAAW,CAAC,CAAC,EAAE,CAAC,EACrC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GACtC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAoE3B;AAED;;;;;;GAMG;AACH,wBAAuB,YAAY,CAAC,CAAC,EACnC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACjC,OAAO,SAAI,GACV,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CA6B3B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EACpC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,SAAS,EAAE,CAAC,EACZ,GAAG,GAAE,YAAyC,GAC7C;IAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,OAAO,CAAA;CAAE,CAgBvE"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Spawn `width` parallel workers for a single stage. Reads SeqItem<I> from
3
+ * `inputs`, processes through `stage.process`, and yields SeqItem<O> in the
4
+ * order they complete (NOT the order they entered — see reorderBySeq).
5
+ */
6
+ export async function* superscalar(stage, inputs, width, baseCtx) {
7
+ // Bridge an AsyncIterator into a single shared "next()" channel that
8
+ // multiple workers can pull from sequentially. JS iterators aren't
9
+ // thread-safe, but they ARE single-threaded — calls to next() are atomic
10
+ // with respect to each other on the event loop, so workers naturally
11
+ // round-robin through the queue.
12
+ const it = inputs[Symbol.asyncIterator]();
13
+ // We use a small in-flight buffer + manual completion signalling so
14
+ // outputs surface as soon as ANY worker finishes, not in worker-id order.
15
+ const ready = [];
16
+ let pendingResolve = null;
17
+ const wakeMain = () => {
18
+ if (pendingResolve) {
19
+ const r = pendingResolve;
20
+ pendingResolve = null;
21
+ r();
22
+ }
23
+ };
24
+ let activeWorkers = width;
25
+ const workerLoop = async (workerId) => {
26
+ const ctx = { ...baseCtx, workerId };
27
+ while (true) {
28
+ const next = await it.next();
29
+ if (next.done)
30
+ break;
31
+ const { seq, value } = next.value;
32
+ try {
33
+ const out = await stage.process(value, ctx);
34
+ ready.push({ seq, value: out });
35
+ }
36
+ catch (err) {
37
+ // Re-throw on the main stream by stashing as a pending error.
38
+ // We push a sentinel that downstream filters out via failure path.
39
+ ready.push({ seq, value: err });
40
+ wakeMain();
41
+ throw err;
42
+ }
43
+ wakeMain();
44
+ }
45
+ };
46
+ const workers = Array.from({ length: Math.max(1, width) }, (_, i) => workerLoop(i).finally(() => {
47
+ activeWorkers -= 1;
48
+ wakeMain();
49
+ }));
50
+ // Drain loop: yield whatever's ready; wait when nothing is.
51
+ try {
52
+ while (true) {
53
+ while (ready.length > 0) {
54
+ yield ready.shift();
55
+ }
56
+ if (activeWorkers === 0 && ready.length === 0)
57
+ break;
58
+ await new Promise((resolve) => {
59
+ pendingResolve = resolve;
60
+ });
61
+ }
62
+ // Surface any worker-side errors.
63
+ await Promise.all(workers);
64
+ }
65
+ catch (err) {
66
+ // Make sure workers settle even if one threw.
67
+ await Promise.allSettled(workers);
68
+ throw err;
69
+ }
70
+ }
71
+ /**
72
+ * Re-emit SeqItem<T> in monotonically-increasing seq order. Buffers
73
+ * out-of-order items in a small heap-like structure (insertion sort —
74
+ * pipelines rarely have huge reorder windows so O(n) per insert is fine).
75
+ *
76
+ * `startAt` is the first seq number to emit (default 0).
77
+ */
78
+ export async function* reorderBySeq(inputs, startAt = 0) {
79
+ let next = startAt;
80
+ const buffer = [];
81
+ for await (const item of inputs) {
82
+ // Insert sorted by seq so the smallest is at index 0.
83
+ let i = 0;
84
+ while (i < buffer.length && buffer[i].seq < item.seq)
85
+ i++;
86
+ buffer.splice(i, 0, item);
87
+ while (buffer.length > 0 && buffer[0].seq === next) {
88
+ yield buffer.shift();
89
+ next += 1;
90
+ }
91
+ }
92
+ // Drain remaining (gaps surface naturally since we only advance on match).
93
+ while (buffer.length > 0) {
94
+ const head = buffer.shift();
95
+ if (head.seq === next) {
96
+ yield head;
97
+ next += 1;
98
+ }
99
+ else {
100
+ // Skipped seq — yield in order anyway (this should never happen if
101
+ // the upstream is well-formed, but it's a safe fallback).
102
+ yield head;
103
+ next = head.seq + 1;
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Speculative pre-fetch: start nextStage on a predicted input before the
109
+ * upstream finalizes. Returns a promise + a cancel() function. cancel()
110
+ * does NOT abort the underlying process call (we can't cancel arbitrary
111
+ * promises) but flips an internal flag so callers can ignore the result.
112
+ */
113
+ export function speculatePrefetch(nextStage, predicted, ctx = { trust: 1, workerId: -1 }) {
114
+ let cancelled = false;
115
+ const promise = nextStage.process(predicted, ctx).then((v) => {
116
+ if (cancelled) {
117
+ ctx.emit?.({ kind: "drop", stage: nextStage.id, reason: "speculation cancelled" });
118
+ }
119
+ return v;
120
+ });
121
+ ctx.emit?.({ kind: "speculate", stage: nextStage.id, reason: "prefetch" });
122
+ return {
123
+ promise,
124
+ cancel: () => {
125
+ cancelled = true;
126
+ },
127
+ cancelled: () => cancelled,
128
+ };
129
+ }
130
+ //# sourceMappingURL=superscalar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superscalar.js","sourceRoot":"","sources":["../../src/pipeline/superscalar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=superscalar.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superscalar.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/superscalar.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,130 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { superscalar, reorderBySeq, speculatePrefetch } from "./superscalar.js";
3
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
4
+ function makeStage(id, fn) {
5
+ return { id, description: id, async process(input) { return fn(input); } };
6
+ }
7
+ async function* fromArray(items) {
8
+ for (const v of items)
9
+ yield v;
10
+ }
11
+ async function collect(it) {
12
+ const out = [];
13
+ for await (const v of it)
14
+ out.push(v);
15
+ return out;
16
+ }
17
+ describe("superscalar — N parallel workers", () => {
18
+ it("processes every input exactly once with width=4", async () => {
19
+ const seen = [];
20
+ const stage = makeStage("double", async (n) => {
21
+ seen.push(n);
22
+ return n * 2;
23
+ });
24
+ const inputs = Array.from({ length: 20 }, (_, i) => ({
25
+ seq: i,
26
+ value: i,
27
+ }));
28
+ const out = await collect(superscalar(stage, fromArray(inputs), 4, { trust: 1 }));
29
+ expect(out).toHaveLength(20);
30
+ expect(seen.sort((a, b) => a - b)).toEqual(Array.from({ length: 20 }, (_, i) => i));
31
+ });
32
+ it("with width>1, slow items don't block fast ones (out-of-order)", async () => {
33
+ // Item 0 sleeps 60ms, items 1..3 sleep 5ms. With width=2, item 1 should
34
+ // finish before item 0.
35
+ const stage = makeStage("vary", async (n) => {
36
+ await sleep(n === 0 ? 60 : 5);
37
+ return n;
38
+ });
39
+ const inputs = [0, 1, 2, 3].map((v, i) => ({ seq: i, value: v }));
40
+ const out = await collect(superscalar(stage, fromArray(inputs), 2, { trust: 1 }));
41
+ // First item to complete should NOT be seq 0.
42
+ expect(out[0].seq).not.toBe(0);
43
+ expect(out).toHaveLength(4);
44
+ });
45
+ it("workerId is forwarded into ctx (0..width-1)", async () => {
46
+ const ids = new Set();
47
+ const stage = {
48
+ id: "id-stage",
49
+ description: "id",
50
+ async process(n, ctx) {
51
+ ids.add(ctx.workerId);
52
+ await sleep(2);
53
+ return n;
54
+ },
55
+ };
56
+ const inputs = Array.from({ length: 8 }, (_, i) => ({ seq: i, value: i }));
57
+ await collect(superscalar(stage, fromArray(inputs), 3, { trust: 1 }));
58
+ expect([...ids].every((i) => i >= 0 && i < 3)).toBe(true);
59
+ });
60
+ it("a thrown stage error propagates to the consumer", async () => {
61
+ const stage = makeStage("err", async (n) => {
62
+ if (n === 1)
63
+ throw new Error("boom");
64
+ return n;
65
+ });
66
+ const inputs = [0, 1, 2].map((v, i) => ({ seq: i, value: v }));
67
+ await expect(collect(superscalar(stage, fromArray(inputs), 1, { trust: 1 }))).rejects.toThrow(/boom/);
68
+ });
69
+ });
70
+ describe("reorderBySeq — input-order recovery", () => {
71
+ it("yields items in monotonic seq order", async () => {
72
+ // Out-of-order source: 2, 0, 1, 3
73
+ const src = [
74
+ { seq: 2, value: "c" },
75
+ { seq: 0, value: "a" },
76
+ { seq: 1, value: "b" },
77
+ { seq: 3, value: "d" },
78
+ ];
79
+ const out = await collect(reorderBySeq(fromArray(src)));
80
+ expect(out.map((x) => x.value)).toEqual(["a", "b", "c", "d"]);
81
+ });
82
+ it("respects a non-zero startAt", async () => {
83
+ const src = [
84
+ { seq: 11, value: 11 },
85
+ { seq: 10, value: 10 },
86
+ ];
87
+ const out = await collect(reorderBySeq(fromArray(src), 10));
88
+ expect(out.map((x) => x.seq)).toEqual([10, 11]);
89
+ });
90
+ it("drains buffered items once the source closes (gap fallback)", async () => {
91
+ // Seq 1 is missing — reorder still emits the remaining items.
92
+ const src = [
93
+ { seq: 0, value: 0 },
94
+ { seq: 2, value: 2 },
95
+ ];
96
+ const out = await collect(reorderBySeq(fromArray(src)));
97
+ expect(out.map((x) => x.value)).toEqual([0, 2]);
98
+ });
99
+ });
100
+ describe("speculatePrefetch", () => {
101
+ it("starts the next stage immediately on the predicted input", async () => {
102
+ const fn = vi.fn(async (n) => n * 10);
103
+ const stage = makeStage("predict", fn);
104
+ const { promise } = speculatePrefetch(stage, 7);
105
+ expect(fn).toHaveBeenCalledTimes(1);
106
+ await expect(promise).resolves.toBe(70);
107
+ });
108
+ it("cancel() flips the cancelled flag (the underlying promise still resolves)", async () => {
109
+ const stage = makeStage("predict", async (n) => {
110
+ await sleep(10);
111
+ return n + 1;
112
+ });
113
+ const { promise, cancel, cancelled } = speculatePrefetch(stage, 1);
114
+ cancel();
115
+ expect(cancelled()).toBe(true);
116
+ // The promise still resolves — cancel is advisory.
117
+ await expect(promise).resolves.toBe(2);
118
+ });
119
+ it("emits a 'speculate' event when an emit sink is provided", async () => {
120
+ const events = [];
121
+ const stage = makeStage("predict", async (n) => n);
122
+ speculatePrefetch(stage, 0, {
123
+ trust: 1,
124
+ workerId: -1,
125
+ emit: (e) => events.push(e.kind),
126
+ });
127
+ expect(events).toContain("speculate");
128
+ });
129
+ });
130
+ //# sourceMappingURL=superscalar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superscalar.test.js","sourceRoot":"","sources":["../../src/pipeline/superscalar.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Super Pipeline Engine — types.
3
+ *
4
+ * Borrows two ideas from CPU architecture:
5
+ * 1. Deep pipelining — many small stages, each running concurrently on
6
+ * different items (high throughput, item-level parallelism).
7
+ * 2. Superscalar — each stage may have multiple workers (width N) so
8
+ * independent items at the same stage run in parallel.
9
+ *
10
+ * The novel ingredient is MPE (Multi-stage Pipelined Eigentrust): an
11
+ * eigentrust-style update that auto-tunes per-stage trust + width based
12
+ * on success rate and latency. See ./mpe.ts.
13
+ */
14
+ /**
15
+ * A single stage in the deep pipeline. Tasks flow through stages; each stage
16
+ * runs in its own worker pool (superscalar width N) and can speculatively
17
+ * pre-fetch from the next stage's input queue.
18
+ */
19
+ export interface PipelineStage<I, O> {
20
+ /** Stage identifier — used by MPE for trust tracking. */
21
+ readonly id: string;
22
+ /** Plain-English name for events / logs. */
23
+ readonly description: string;
24
+ /** Pure function: input → output. Called with the stage's allocated worker. */
25
+ process(input: I, ctx: StageContext): Promise<O>;
26
+ /** Soft target latency (ms). MPE uses this for backpressure. */
27
+ readonly targetMs?: number;
28
+ }
29
+ /**
30
+ * Per-call context passed into PipelineStage.process(). Workers receive a
31
+ * read-only view of their stage's running trust score plus an optional event
32
+ * sink for telemetry.
33
+ */
34
+ export interface StageContext {
35
+ /** Stage's running success rate (0..1) per MPE. */
36
+ trust: number;
37
+ /** Worker index (0..width-1) — for tracing. */
38
+ workerId: number;
39
+ /** Optional event sink — emits stage-start, stage-done, etc. */
40
+ emit?: (e: PipelineEvent) => void;
41
+ }
42
+ /**
43
+ * Events emitted by the runtime for tracing + MPE training. Consumers may
44
+ * subscribe via PipelineConfig.onEvent (added by super-pipeline.ts).
45
+ */
46
+ export type PipelineEvent = {
47
+ kind: "stage-start";
48
+ stage: string;
49
+ workerId: number;
50
+ inputHash?: string;
51
+ } | {
52
+ kind: "stage-done";
53
+ stage: string;
54
+ workerId: number;
55
+ latencyMs: number;
56
+ } | {
57
+ kind: "stage-fail";
58
+ stage: string;
59
+ workerId: number;
60
+ error: string;
61
+ } | {
62
+ kind: "speculate";
63
+ stage: string;
64
+ reason: string;
65
+ } | {
66
+ kind: "drop";
67
+ stage: string;
68
+ reason: string;
69
+ };
70
+ /** MPE configuration block. See ./mpe.ts for the math. */
71
+ export interface MpeConfig {
72
+ /** PageRank-style decay (0..1). Higher = more recency bias. Default 0.85. */
73
+ decay?: number;
74
+ /** Trust threshold below which speculative pre-fetch is suppressed. Default 0.3. */
75
+ speculateThreshold?: number;
76
+ /** Whether to read/write .mneme/mpe.json — false in tests. Default false. */
77
+ persist?: boolean;
78
+ /** Repo root for persistence (only used when persist=true). */
79
+ repoRoot?: string;
80
+ }
81
+ /**
82
+ * Configuration for runPipeline. `Stages` is an ordered tuple — the runtime
83
+ * does not check type compatibility between adjacent stages, but the helper
84
+ * runDeepPipeline in pipeline/index.ts does at the type level.
85
+ */
86
+ export interface PipelineConfig<Stages extends ReadonlyArray<PipelineStage<unknown, unknown>> = ReadonlyArray<PipelineStage<unknown, unknown>>> {
87
+ stages: Stages;
88
+ /** Superscalar width per stage (default 1). Pass an array to vary per-stage. */
89
+ width?: number | number[];
90
+ /** Backpressure queue size between stages (default 16). */
91
+ bufferSize?: number;
92
+ /** MPE config — auto-tune trust eigenvector per stage. */
93
+ mpe?: MpeConfig;
94
+ /** Optional event subscriber. Receives every PipelineEvent. */
95
+ onEvent?: (e: PipelineEvent) => void;
96
+ }
97
+ /** Internal envelope: items flow through the pipeline tagged with a sequence id
98
+ * so the runtime can yield outputs in original input order even when stages
99
+ * complete out of order. */
100
+ export interface SeqItem<T> {
101
+ readonly seq: number;
102
+ readonly value: T;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc,CAC7B,MAAM,SAAS,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,aAAa,CAC3E,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAChC;IAED,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CACtC;AAED;;6BAE6B;AAC7B,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Super Pipeline Engine — types.
3
+ *
4
+ * Borrows two ideas from CPU architecture:
5
+ * 1. Deep pipelining — many small stages, each running concurrently on
6
+ * different items (high throughput, item-level parallelism).
7
+ * 2. Superscalar — each stage may have multiple workers (width N) so
8
+ * independent items at the same stage run in parallel.
9
+ *
10
+ * The novel ingredient is MPE (Multi-stage Pipelined Eigentrust): an
11
+ * eigentrust-style update that auto-tunes per-stage trust + width based
12
+ * on success rate and latency. See ./mpe.ts.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",