@mneme-ai/core 0.25.0 → 0.27.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 (82) hide show
  1. package/dist/audit/baseline.d.ts +92 -0
  2. package/dist/audit/baseline.d.ts.map +1 -0
  3. package/dist/audit/baseline.js +276 -0
  4. package/dist/audit/baseline.js.map +1 -0
  5. package/dist/audit/baseline.test.d.ts +2 -0
  6. package/dist/audit/baseline.test.d.ts.map +1 -0
  7. package/dist/audit/baseline.test.js +180 -0
  8. package/dist/audit/baseline.test.js.map +1 -0
  9. package/dist/audit/certify.d.ts +139 -0
  10. package/dist/audit/certify.d.ts.map +1 -0
  11. package/dist/audit/certify.js +295 -0
  12. package/dist/audit/certify.js.map +1 -0
  13. package/dist/audit/certify.test.d.ts +2 -0
  14. package/dist/audit/certify.test.d.ts.map +1 -0
  15. package/dist/audit/certify.test.js +324 -0
  16. package/dist/audit/certify.test.js.map +1 -0
  17. package/dist/audit/index.d.ts +14 -0
  18. package/dist/audit/index.d.ts.map +1 -0
  19. package/dist/audit/index.js +14 -0
  20. package/dist/audit/index.js.map +1 -0
  21. package/dist/audit/trace.d.ts +88 -0
  22. package/dist/audit/trace.d.ts.map +1 -0
  23. package/dist/audit/trace.js +173 -0
  24. package/dist/audit/trace.js.map +1 -0
  25. package/dist/audit/trace.test.d.ts +2 -0
  26. package/dist/audit/trace.test.d.ts.map +1 -0
  27. package/dist/audit/trace.test.js +198 -0
  28. package/dist/audit/trace.test.js.map +1 -0
  29. package/dist/audit/verify.d.ts +61 -0
  30. package/dist/audit/verify.d.ts.map +1 -0
  31. package/dist/audit/verify.js +278 -0
  32. package/dist/audit/verify.js.map +1 -0
  33. package/dist/audit/verify.test.d.ts +2 -0
  34. package/dist/audit/verify.test.d.ts.map +1 -0
  35. package/dist/audit/verify.test.js +129 -0
  36. package/dist/audit/verify.test.js.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/pipeline/index.d.ts +34 -0
  42. package/dist/pipeline/index.d.ts.map +1 -0
  43. package/dist/pipeline/index.js +51 -0
  44. package/dist/pipeline/index.js.map +1 -0
  45. package/dist/pipeline/mpe.d.ts +83 -0
  46. package/dist/pipeline/mpe.d.ts.map +1 -0
  47. package/dist/pipeline/mpe.js +259 -0
  48. package/dist/pipeline/mpe.js.map +1 -0
  49. package/dist/pipeline/mpe.test.d.ts +2 -0
  50. package/dist/pipeline/mpe.test.d.ts.map +1 -0
  51. package/dist/pipeline/mpe.test.js +196 -0
  52. package/dist/pipeline/mpe.test.js.map +1 -0
  53. package/dist/pipeline/pipeline.integration.test.d.ts +2 -0
  54. package/dist/pipeline/pipeline.integration.test.d.ts.map +1 -0
  55. package/dist/pipeline/pipeline.integration.test.js +99 -0
  56. package/dist/pipeline/pipeline.integration.test.js.map +1 -0
  57. package/dist/pipeline/super-pipeline.d.ts +38 -0
  58. package/dist/pipeline/super-pipeline.d.ts.map +1 -0
  59. package/dist/pipeline/super-pipeline.js +247 -0
  60. package/dist/pipeline/super-pipeline.js.map +1 -0
  61. package/dist/pipeline/super-pipeline.test.d.ts +2 -0
  62. package/dist/pipeline/super-pipeline.test.d.ts.map +1 -0
  63. package/dist/pipeline/super-pipeline.test.js +130 -0
  64. package/dist/pipeline/super-pipeline.test.js.map +1 -0
  65. package/dist/pipeline/superscalar.d.ts +36 -0
  66. package/dist/pipeline/superscalar.d.ts.map +1 -0
  67. package/dist/pipeline/superscalar.js +130 -0
  68. package/dist/pipeline/superscalar.js.map +1 -0
  69. package/dist/pipeline/superscalar.test.d.ts +2 -0
  70. package/dist/pipeline/superscalar.test.d.ts.map +1 -0
  71. package/dist/pipeline/superscalar.test.js +130 -0
  72. package/dist/pipeline/superscalar.test.js.map +1 -0
  73. package/dist/pipeline/types.d.ts +104 -0
  74. package/dist/pipeline/types.d.ts.map +1 -0
  75. package/dist/pipeline/types.js +15 -0
  76. package/dist/pipeline/types.js.map +1 -0
  77. package/dist/retrieve/intent.d.ts.map +1 -1
  78. package/dist/retrieve/intent.js +16 -0
  79. package/dist/retrieve/intent.js.map +1 -1
  80. package/dist/retrieve/intent.test.js +23 -0
  81. package/dist/retrieve/intent.test.js.map +1 -1
  82. package/package.json +1 -1
@@ -0,0 +1,196 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { mkdtempSync, rmSync, existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { emptyMpeState, updateMpe, powerIterate, recommendFromMpe, serializeMpeState, deserializeMpeState, readMpeState, writeMpeState, } from "./mpe.js";
6
+ describe("MPE — formula basics", () => {
7
+ it("emptyMpeState seeds decay and empty maps", () => {
8
+ const s = emptyMpeState(0.9);
9
+ expect(s.decay).toBe(0.9);
10
+ expect(s.trust.size).toBe(0);
11
+ expect(s.callCount.size).toBe(0);
12
+ });
13
+ it("a single successful observation moves trust above prior", () => {
14
+ const s = updateMpe(emptyMpeState(0.85), [
15
+ { stage: "embed", ok: true, latencyMs: 10, targetMs: 100 },
16
+ ]);
17
+ // Single stage → prior = 1, trust normalized to 1.
18
+ expect(s.trust.get("embed")).toBeCloseTo(1.0, 6);
19
+ expect(s.successCount.get("embed")).toBe(1);
20
+ expect(s.failureCount.get("embed")).toBe(0);
21
+ });
22
+ it("a single failure leaves only the (1-α)×prior contribution", () => {
23
+ const s = updateMpe(emptyMpeState(0.85), [
24
+ { stage: "embed", ok: false, latencyMs: 10, targetMs: 100 },
25
+ ]);
26
+ expect(s.trust.get("embed")).toBeCloseTo(1.0, 6); // normalized
27
+ // After normalization a single stage is always 1, so check raw counters.
28
+ expect(s.failureCount.get("embed")).toBe(1);
29
+ });
30
+ it("trust eigenvector sums to 1 (proper probability distribution)", () => {
31
+ const results = [
32
+ { stage: "a", ok: true, latencyMs: 10, targetMs: 100 },
33
+ { stage: "b", ok: true, latencyMs: 50, targetMs: 100 },
34
+ { stage: "c", ok: false, latencyMs: 200, targetMs: 100 },
35
+ ];
36
+ const s = updateMpe(emptyMpeState(0.85), results);
37
+ const total = [...s.trust.values()].reduce((a, b) => a + b, 0);
38
+ expect(total).toBeCloseTo(1.0, 6);
39
+ });
40
+ });
41
+ describe("MPE — latency weighting", () => {
42
+ it("fast successes outrank slow successes", () => {
43
+ const results = [
44
+ { stage: "fast", ok: true, latencyMs: 5, targetMs: 100 },
45
+ { stage: "slow", ok: true, latencyMs: 500, targetMs: 100 },
46
+ ];
47
+ // Power-iterate to converge.
48
+ const s = powerIterate(emptyMpeState(0.85), results, { maxIter: 30 });
49
+ expect(s.trust.get("fast")).toBeGreaterThan(s.trust.get("slow"));
50
+ });
51
+ it("successes outrank failures even at the same latency", () => {
52
+ const results = [
53
+ { stage: "ok", ok: true, latencyMs: 50, targetMs: 100 },
54
+ { stage: "bad", ok: false, latencyMs: 50, targetMs: 100 },
55
+ ];
56
+ const s = powerIterate(emptyMpeState(0.85), results, { maxIter: 30 });
57
+ expect(s.trust.get("ok")).toBeGreaterThan(s.trust.get("bad"));
58
+ });
59
+ it("targetMs from earlier observation is reused if not provided", () => {
60
+ let s = updateMpe(emptyMpeState(0.85), [
61
+ { stage: "x", ok: true, latencyMs: 5, targetMs: 50 },
62
+ ]);
63
+ s = updateMpe(s, [{ stage: "x", ok: true, latencyMs: 5 }]);
64
+ expect(s.targetMs.get("x")).toBe(50);
65
+ });
66
+ });
67
+ describe("MPE — eigentrust convergence", () => {
68
+ it("power iteration converges (L1 distance shrinks below tol)", () => {
69
+ const results = [
70
+ { stage: "p", ok: true, latencyMs: 10, targetMs: 100 },
71
+ { stage: "q", ok: true, latencyMs: 20, targetMs: 100 },
72
+ { stage: "r", ok: false, latencyMs: 100, targetMs: 100 },
73
+ ];
74
+ const a = powerIterate(emptyMpeState(0.85), results, { maxIter: 100, tol: 1e-9 });
75
+ const b = updateMpe(a, results);
76
+ let l1 = 0;
77
+ for (const k of a.trust.keys())
78
+ l1 += Math.abs((a.trust.get(k) ?? 0) - (b.trust.get(k) ?? 0));
79
+ expect(l1).toBeLessThan(1e-6);
80
+ });
81
+ it("decay closer to 1 makes the ranking sharper", () => {
82
+ const results = [
83
+ { stage: "fast", ok: true, latencyMs: 1, targetMs: 100 },
84
+ { stage: "slow", ok: true, latencyMs: 200, targetMs: 100 },
85
+ ];
86
+ const sharp = powerIterate(emptyMpeState(0.99), results, { maxIter: 100 });
87
+ const soft = powerIterate(emptyMpeState(0.5), results, { maxIter: 100 });
88
+ const sharpGap = (sharp.trust.get("fast") ?? 0) - (sharp.trust.get("slow") ?? 0);
89
+ const softGap = (soft.trust.get("fast") ?? 0) - (soft.trust.get("slow") ?? 0);
90
+ expect(sharpGap).toBeGreaterThan(softGap);
91
+ });
92
+ });
93
+ describe("MPE — recommendation engine", () => {
94
+ it("ranking is sorted top-down by trust", () => {
95
+ const results = [
96
+ { stage: "a", ok: true, latencyMs: 5, targetMs: 100 },
97
+ { stage: "b", ok: true, latencyMs: 50, targetMs: 100 },
98
+ { stage: "c", ok: false, latencyMs: 200, targetMs: 100 },
99
+ ];
100
+ const s = powerIterate(emptyMpeState(0.85), results, { maxIter: 50 });
101
+ const rec = recommendFromMpe(s);
102
+ for (let i = 1; i < rec.ranking.length; i++) {
103
+ expect(rec.ranking[i].trust).toBeLessThanOrEqual(rec.ranking[i - 1].trust);
104
+ }
105
+ });
106
+ it("scaleUp picks high-trust stages whose avg latency exceeds target", () => {
107
+ // Fabricate state directly so we control averages.
108
+ const s = emptyMpeState(0.85);
109
+ s.trust.set("hot", 0.6);
110
+ s.trust.set("cold", 0.4);
111
+ s.callCount.set("hot", 5);
112
+ s.callCount.set("cold", 5);
113
+ s.totalLatencyMs.set("hot", 1000); // avg 200ms
114
+ s.totalLatencyMs.set("cold", 50); // avg 10ms
115
+ s.targetMs.set("hot", 100);
116
+ s.targetMs.set("cold", 100);
117
+ s.failureCount.set("hot", 0);
118
+ s.failureCount.set("cold", 0);
119
+ const rec = recommendFromMpe(s);
120
+ expect(rec.scaleUp).toContain("hot");
121
+ expect(rec.scaleUp).not.toContain("cold");
122
+ });
123
+ it("scaleDown flags low-trust + high-failure stages", () => {
124
+ const s = emptyMpeState(0.85);
125
+ s.trust.set("good", 0.7);
126
+ s.trust.set("flaky", 0.1);
127
+ s.callCount.set("good", 10);
128
+ s.callCount.set("flaky", 10);
129
+ s.failureCount.set("good", 0);
130
+ s.failureCount.set("flaky", 6); // 60% failure
131
+ s.totalLatencyMs.set("good", 100);
132
+ s.totalLatencyMs.set("flaky", 100);
133
+ const rec = recommendFromMpe(s);
134
+ expect(rec.scaleDown).toContain("flaky");
135
+ });
136
+ it("noSpeculate flags stages below the speculate threshold", () => {
137
+ const s = emptyMpeState(0.85);
138
+ s.trust.set("a", 0.95);
139
+ s.trust.set("b", 0.04);
140
+ s.trust.set("c", 0.01);
141
+ const rec = recommendFromMpe(s, { speculateThreshold: 0.3 });
142
+ // prior = 1/3 ≈ 0.333; cutoff = 0.3 * prior ≈ 0.1
143
+ expect(rec.noSpeculate).toContain("c");
144
+ });
145
+ });
146
+ describe("MPE — persistence", () => {
147
+ let dir;
148
+ beforeEach(() => {
149
+ dir = mkdtempSync(join(tmpdir(), "mneme-mpe-"));
150
+ });
151
+ afterEach(() => {
152
+ rmSync(dir, { recursive: true, force: true });
153
+ });
154
+ it("serialize → deserialize is round-trip stable", () => {
155
+ const s = updateMpe(emptyMpeState(0.85), [
156
+ { stage: "x", ok: true, latencyMs: 10, targetMs: 50 },
157
+ { stage: "y", ok: false, latencyMs: 200, targetMs: 50 },
158
+ ]);
159
+ const out = deserializeMpeState(serializeMpeState(s));
160
+ expect(out.trust.get("x")).toBeCloseTo(s.trust.get("x"), 9);
161
+ expect(out.trust.get("y")).toBeCloseTo(s.trust.get("y"), 9);
162
+ expect(out.decay).toBe(0.85);
163
+ });
164
+ it("readMpeState returns empty when file does not exist", () => {
165
+ const s = readMpeState(dir);
166
+ expect(s.trust.size).toBe(0);
167
+ expect(s.decay).toBe(0.85);
168
+ });
169
+ it("writeMpeState then readMpeState preserves the state", () => {
170
+ const s = updateMpe(emptyMpeState(0.7), [
171
+ { stage: "z", ok: true, latencyMs: 5, targetMs: 100 },
172
+ ]);
173
+ writeMpeState(dir, s);
174
+ expect(existsSync(join(dir, ".mneme", "mpe.json"))).toBe(true);
175
+ const back = readMpeState(dir);
176
+ expect(back.decay).toBe(0.7);
177
+ expect(back.trust.get("z")).toBeCloseTo(s.trust.get("z"), 9);
178
+ });
179
+ it("readMpeState handles corrupt JSON gracefully", () => {
180
+ writeMpeState(dir, emptyMpeState());
181
+ const f = join(dir, ".mneme", "mpe.json");
182
+ // Stomp the file with garbage.
183
+ require("node:fs").writeFileSync(f, "{not json", "utf8");
184
+ const back = readMpeState(dir);
185
+ expect(back.trust.size).toBe(0);
186
+ });
187
+ it("written file is valid JSON", () => {
188
+ const s = updateMpe(emptyMpeState(), [
189
+ { stage: "a", ok: true, latencyMs: 1, targetMs: 10 },
190
+ ]);
191
+ writeMpeState(dir, s);
192
+ const text = readFileSync(join(dir, ".mneme", "mpe.json"), "utf8");
193
+ expect(() => JSON.parse(text)).not.toThrow();
194
+ });
195
+ });
196
+ //# sourceMappingURL=mpe.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpe.test.js","sourceRoot":"","sources":["../../src/pipeline/mpe.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pipeline.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.integration.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { runDeepPipeline, defineStage } from "./index.js";
3
+ import { runPipeline } from "./super-pipeline.js";
4
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
5
+ async function collect(it) {
6
+ const out = [];
7
+ for await (const v of it)
8
+ out.push(v);
9
+ return out;
10
+ }
11
+ /**
12
+ * Simulated 4-stage pipeline modeled after Mneme's real flow:
13
+ * parse → embed → score → render
14
+ *
15
+ * Each stage has a controlled mock latency so we can compare a sequential
16
+ * baseline against a deeply-pipelined-with-superscalar run and verify the
17
+ * speedup ratio.
18
+ */
19
+ function buildStages(latencies) {
20
+ const parse = defineStage("parse", "tokenize input", async (s) => {
21
+ await sleep(latencies.parse);
22
+ return { tokens: s.split(/\s+/) };
23
+ }, { targetMs: 10 });
24
+ const embed = defineStage("embed", "vectorize tokens", async (x) => {
25
+ await sleep(latencies.embed);
26
+ return { vec: x.tokens.map((t) => t.length) };
27
+ }, { targetMs: 30 });
28
+ const score = defineStage("score", "compute score", async (x) => {
29
+ await sleep(latencies.score);
30
+ return { ...x, score: x.vec.reduce((a, b) => a + b, 0) };
31
+ }, { targetMs: 5 });
32
+ const render = defineStage("render", "format output", async (x) => {
33
+ await sleep(latencies.render);
34
+ return `score=${x.score}`;
35
+ }, { targetMs: 5 });
36
+ return [parse, embed, score, render];
37
+ }
38
+ describe("integration — 4-stage parse → embed → score → render", () => {
39
+ it("produces correct outputs in input order", async () => {
40
+ const stages = buildStages({ parse: 1, embed: 1, score: 1, render: 1 });
41
+ const inputs = ["a b c", "x y", "p q r s"];
42
+ const out = await runDeepPipeline({ stages }, inputs);
43
+ expect(out).toEqual(["score=3", "score=2", "score=4"]);
44
+ });
45
+ it("deeply-pipelined-with-width-2 outperforms a sequential baseline", async () => {
46
+ const latencies = { parse: 12, embed: 12, score: 12, render: 12 };
47
+ const inputs = Array.from({ length: 8 }, (_, i) => "token ".repeat(i + 1).trim());
48
+ // Sequential baseline: width=1, bufferSize=1 (one item moves through at a time).
49
+ const stages = buildStages(latencies);
50
+ const t0 = Date.now();
51
+ await runDeepPipeline({ stages, width: 1, bufferSize: 1 }, inputs);
52
+ const seq = Date.now() - t0;
53
+ // Deeply-pipelined + superscalar (width=2 per stage).
54
+ const t1 = Date.now();
55
+ await runDeepPipeline({ stages, width: 2, bufferSize: 4 }, inputs);
56
+ const par = Date.now() - t1;
57
+ // Speedup: parallel should be substantially faster. With 4 stages × 12ms
58
+ // each and width=2 we expect close to a 2× speedup in the steady state.
59
+ // Use a loose lower bound (par < seq * 0.85) to keep the test stable.
60
+ expect(par).toBeLessThan(seq * 0.85);
61
+ // Print the speedup for the report.
62
+ // eslint-disable-next-line no-console
63
+ console.log(`[pipeline.integration] sequential=${seq}ms pipelined+width2=${par}ms speedup=${(seq / par).toFixed(2)}×`);
64
+ });
65
+ it("emits stage-start / stage-done for every stage on every item", async () => {
66
+ const stages = buildStages({ parse: 1, embed: 1, score: 1, render: 1 });
67
+ const events = [];
68
+ const cfg = {
69
+ stages,
70
+ width: 2,
71
+ onEvent: (e) => events.push(e),
72
+ };
73
+ await runDeepPipeline(cfg, ["a b", "c d", "e f"]);
74
+ // 4 stages × 3 items = 12 stage-done events expected.
75
+ expect(events.filter((e) => e.kind === "stage-done")).toHaveLength(12);
76
+ });
77
+ it("MPE state captures every stage's call/success counts", async () => {
78
+ const stages = buildStages({ parse: 1, embed: 1, score: 1, render: 1 });
79
+ // Run via raw runPipeline so we can inspect the state side-effect.
80
+ // We approximate by counting stage-done events (state is in-memory only
81
+ // when persist=false; the public surface for state inspection across
82
+ // runs is .mneme/mpe.json).
83
+ const events = [];
84
+ for await (const _ of runPipeline({ stages, onEvent: (e) => events.push(e) }, ["a b", "c d"])) {
85
+ // drain
86
+ }
87
+ const dones = events.filter((e) => e.kind === "stage-done");
88
+ const byStage = new Map();
89
+ for (const d of dones) {
90
+ if (d.kind === "stage-done")
91
+ byStage.set(d.stage, (byStage.get(d.stage) ?? 0) + 1);
92
+ }
93
+ expect(byStage.get("parse")).toBe(2);
94
+ expect(byStage.get("embed")).toBe(2);
95
+ expect(byStage.get("score")).toBe(2);
96
+ expect(byStage.get("render")).toBe(2);
97
+ });
98
+ });
99
+ //# sourceMappingURL=pipeline.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.integration.test.js","sourceRoot":"","sources":["../../src/pipeline/pipeline.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Super Pipeline runtime.
3
+ *
4
+ * Combines deep pipelining (many short stages running concurrently) with
5
+ * superscalar widths (multiple workers per stage). Tasks flow through a
6
+ * chain of bounded async queues — when a downstream queue fills, upstream
7
+ * workers block on push (backpressure).
8
+ *
9
+ * MPE training: the runtime emits StageResult observations and applies
10
+ * updateMpe at the end of the run so the next run starts with smarter trust.
11
+ */
12
+ import type { PipelineConfig, SeqItem } from "./types.js";
13
+ import { recommendFromMpe, type MpeState } from "./mpe.js";
14
+ /**
15
+ * Run a deeply-pipelined superscalar engine.
16
+ *
17
+ * Each stage owns:
18
+ * - a bounded input queue (default 16)
19
+ * - a worker pool of `width[i]` parallel processors
20
+ *
21
+ * Workers pull from their input queue, run stage.process, and push to the
22
+ * NEXT stage's input queue. Backpressure is automatic: a slow downstream
23
+ * fills its queue, which blocks upstream pushes.
24
+ *
25
+ * Outputs are yielded in COMPLETION order (out-of-order possible). Use the
26
+ * sequence id on the yielded SeqItem to re-sort if input order matters; the
27
+ * convenience helper runDeepPipeline in ./index.ts does this for you.
28
+ */
29
+ export declare function runPipeline<I, O>(cfg: PipelineConfig, inputs: AsyncIterable<I> | Iterable<I>): AsyncIterable<SeqItem<O>>;
30
+ /**
31
+ * Convenience: run the pipeline and capture the final MPE recommendation
32
+ * without yielding outputs. Useful for orchestration / tuning.
33
+ */
34
+ export declare function trainMpeOnly(cfg: PipelineConfig, inputs: AsyncIterable<unknown> | Iterable<unknown>): Promise<{
35
+ state: MpeState;
36
+ recommendation: ReturnType<typeof recommendFromMpe>;
37
+ }>;
38
+ //# sourceMappingURL=super-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/super-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAEV,cAAc,EAGd,OAAO,EAER,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,gBAAgB,EAGhB,KAAK,QAAQ,EAEd,MAAM,UAAU,CAAC;AAkFlB;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,WAAW,CAAC,CAAC,EAAE,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACrC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAgI3B;AAYD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GACjD,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,cAAc,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;CAAE,CAAC,CAWnF"}
@@ -0,0 +1,247 @@
1
+ import { emptyMpeState, readMpeState, recommendFromMpe, updateMpe, writeMpeState, } from "./mpe.js";
2
+ /* ─────────────────────── Bounded queue ─────────────────────── */
3
+ /**
4
+ * Asynchronous bounded FIFO queue. push() resolves when a slot is free
5
+ * (backpressure). next() resolves with the next item, or { done: true }
6
+ * when the queue is closed and empty.
7
+ */
8
+ class BoundedQueue {
9
+ capacity;
10
+ buffer = [];
11
+ closed = false;
12
+ waitingPushers = [];
13
+ waitingPullers = [];
14
+ constructor(capacity) {
15
+ this.capacity = capacity;
16
+ }
17
+ async push(item) {
18
+ if (this.closed)
19
+ throw new Error("BoundedQueue: push to closed queue");
20
+ while (this.buffer.length >= this.capacity) {
21
+ await new Promise((resolve) => this.waitingPushers.push(resolve));
22
+ if (this.closed)
23
+ throw new Error("BoundedQueue: closed during push");
24
+ }
25
+ this.buffer.push(item);
26
+ const puller = this.waitingPullers.shift();
27
+ if (puller)
28
+ puller({ value: this.buffer.shift(), done: false });
29
+ }
30
+ async next() {
31
+ if (this.buffer.length > 0) {
32
+ const value = this.buffer.shift();
33
+ const pusher = this.waitingPushers.shift();
34
+ if (pusher)
35
+ pusher();
36
+ return { value, done: false };
37
+ }
38
+ if (this.closed) {
39
+ return { value: undefined, done: true };
40
+ }
41
+ return new Promise((resolve) => {
42
+ this.waitingPullers.push(resolve);
43
+ });
44
+ }
45
+ close() {
46
+ if (this.closed)
47
+ return;
48
+ this.closed = true;
49
+ // Wake every waiting puller with done; wake every waiting pusher so
50
+ // they error out on the closed check.
51
+ while (this.waitingPullers.length > 0) {
52
+ const p = this.waitingPullers.shift();
53
+ p({ value: undefined, done: true });
54
+ }
55
+ while (this.waitingPushers.length > 0) {
56
+ const p = this.waitingPushers.shift();
57
+ p();
58
+ }
59
+ }
60
+ size() {
61
+ return this.buffer.length;
62
+ }
63
+ [Symbol.asyncIterator]() {
64
+ return {
65
+ next: () => this.next(),
66
+ };
67
+ }
68
+ }
69
+ /* ─────────────────────── width helper ─────────────────────── */
70
+ function resolveWidth(width, n) {
71
+ if (width === undefined)
72
+ return Array.from({ length: n }, () => 1);
73
+ if (typeof width === "number")
74
+ return Array.from({ length: n }, () => Math.max(1, width));
75
+ // Array form — pad / truncate to n.
76
+ const out = [];
77
+ for (let i = 0; i < n; i++)
78
+ out.push(Math.max(1, width[i] ?? 1));
79
+ return out;
80
+ }
81
+ /* ─────────────────────── runPipeline ─────────────────────── */
82
+ /**
83
+ * Run a deeply-pipelined superscalar engine.
84
+ *
85
+ * Each stage owns:
86
+ * - a bounded input queue (default 16)
87
+ * - a worker pool of `width[i]` parallel processors
88
+ *
89
+ * Workers pull from their input queue, run stage.process, and push to the
90
+ * NEXT stage's input queue. Backpressure is automatic: a slow downstream
91
+ * fills its queue, which blocks upstream pushes.
92
+ *
93
+ * Outputs are yielded in COMPLETION order (out-of-order possible). Use the
94
+ * sequence id on the yielded SeqItem to re-sort if input order matters; the
95
+ * convenience helper runDeepPipeline in ./index.ts does this for you.
96
+ */
97
+ export async function* runPipeline(cfg, inputs) {
98
+ const stages = cfg.stages;
99
+ if (stages.length === 0) {
100
+ throw new Error("runPipeline: at least one stage required");
101
+ }
102
+ const widths = resolveWidth(cfg.width, stages.length);
103
+ const bufferSize = Math.max(1, cfg.bufferSize ?? 16);
104
+ // MPE state — load if persistent, otherwise empty in-memory.
105
+ const mpeCfg = cfg.mpe ?? {};
106
+ let mpeState = mpeCfg.persist && mpeCfg.repoRoot
107
+ ? readMpeState(mpeCfg.repoRoot)
108
+ : emptyMpeState(mpeCfg.decay ?? 0.85);
109
+ // Seed targetMs map from stage definitions so latency weighting works.
110
+ for (const s of stages) {
111
+ if (s.targetMs !== undefined && !mpeState.targetMs.has(s.id)) {
112
+ mpeState.targetMs.set(s.id, s.targetMs);
113
+ }
114
+ }
115
+ // Build queues: queue[i] is the INPUT to stage i. queue[stages.length] is
116
+ // the final output queue.
117
+ const queues = [];
118
+ for (let i = 0; i <= stages.length; i++) {
119
+ queues.push(new BoundedQueue(bufferSize));
120
+ }
121
+ const onEvent = cfg.onEvent;
122
+ const emit = (e) => onEvent?.(e);
123
+ const observations = [];
124
+ // Spawn workers for each stage.
125
+ const workerPromises = [];
126
+ for (let i = 0; i < stages.length; i++) {
127
+ const stage = stages[i];
128
+ const inQ = queues[i];
129
+ const outQ = queues[i + 1];
130
+ const width = widths[i];
131
+ let liveWorkers = width;
132
+ for (let w = 0; w < width; w++) {
133
+ const workerId = w;
134
+ const ctx = {
135
+ trust: mpeState.trust.get(stage.id) ?? 1 / Math.max(stages.length, 1),
136
+ workerId,
137
+ emit,
138
+ };
139
+ const p = (async () => {
140
+ while (true) {
141
+ const next = await inQ.next();
142
+ if (next.done)
143
+ break;
144
+ const { seq, value } = next.value;
145
+ const t0 = Date.now();
146
+ emit({ kind: "stage-start", stage: stage.id, workerId });
147
+ try {
148
+ const out = await stage.process(value, ctx);
149
+ const dt = Date.now() - t0;
150
+ emit({ kind: "stage-done", stage: stage.id, workerId, latencyMs: dt });
151
+ observations.push({
152
+ stage: stage.id,
153
+ ok: true,
154
+ latencyMs: dt,
155
+ targetMs: stage.targetMs,
156
+ });
157
+ await outQ.push({ seq, value: out });
158
+ }
159
+ catch (err) {
160
+ const dt = Date.now() - t0;
161
+ emit({
162
+ kind: "stage-fail",
163
+ stage: stage.id,
164
+ workerId,
165
+ error: err.message ?? String(err),
166
+ });
167
+ observations.push({
168
+ stage: stage.id,
169
+ ok: false,
170
+ latencyMs: dt,
171
+ targetMs: stage.targetMs,
172
+ });
173
+ // Failure isolation: drop the failing item, keep the pipeline alive.
174
+ // The seq is consumed; downstream consumer should treat missing
175
+ // seqs as "skipped" (reorderBySeq tolerates this on close).
176
+ }
177
+ }
178
+ })().finally(() => {
179
+ liveWorkers -= 1;
180
+ if (liveWorkers === 0)
181
+ outQ.close();
182
+ });
183
+ workerPromises.push(p);
184
+ }
185
+ }
186
+ // Producer: feed inputs into the head queue with sequence ids.
187
+ const producer = (async () => {
188
+ let seq = 0;
189
+ for await (const v of toAsyncIterable(inputs)) {
190
+ await queues[0].push({ seq, value: v });
191
+ seq += 1;
192
+ }
193
+ queues[0].close();
194
+ })();
195
+ // Drain the final queue and yield outputs as they appear.
196
+ try {
197
+ const finalQ = queues[stages.length];
198
+ while (true) {
199
+ const next = await finalQ.next();
200
+ if (next.done)
201
+ break;
202
+ yield next.value;
203
+ }
204
+ await producer;
205
+ await Promise.all(workerPromises);
206
+ }
207
+ finally {
208
+ // Apply MPE update + persist.
209
+ if (observations.length > 0) {
210
+ mpeState = updateMpe(mpeState, observations);
211
+ if (mpeCfg.persist && mpeCfg.repoRoot) {
212
+ try {
213
+ writeMpeState(mpeCfg.repoRoot, mpeState);
214
+ }
215
+ catch {
216
+ // best-effort; never let persistence kill the pipeline
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ async function* toAsyncIterable(src) {
223
+ if (Symbol.asyncIterator in src) {
224
+ for await (const v of src)
225
+ yield v;
226
+ return;
227
+ }
228
+ for (const v of src)
229
+ yield v;
230
+ }
231
+ /**
232
+ * Convenience: run the pipeline and capture the final MPE recommendation
233
+ * without yielding outputs. Useful for orchestration / tuning.
234
+ */
235
+ export async function trainMpeOnly(cfg, inputs) {
236
+ const out = [];
237
+ for await (const item of runPipeline(cfg, inputs))
238
+ out.push(item);
239
+ // Re-read state from disk if persisted, else build from observations live.
240
+ // We expose recommend() based on the last persisted state; tests typically
241
+ // pass persist=false and read state directly via the public API instead.
242
+ const state = cfg.mpe?.persist && cfg.mpe?.repoRoot
243
+ ? readMpeState(cfg.mpe.repoRoot)
244
+ : emptyMpeState(cfg.mpe?.decay ?? 0.85);
245
+ return { state, recommendation: recommendFromMpe(state) };
246
+ }
247
+ //# sourceMappingURL=super-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-pipeline.js","sourceRoot":"","sources":["../../src/pipeline/super-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=super-pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-pipeline.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/super-pipeline.test.ts"],"names":[],"mappings":""}