@easynet/agent-memory 1.0.57 → 1.0.58

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.
@@ -1,4 +1,4 @@
1
- import { describe, it } from "node:test";
1
+ import { it } from "node:test";
2
2
  import assert from "node:assert";
3
3
  import { MemoryRouter } from "../../../src/core/router.js";
4
4
  import { randomUUID } from "node:crypto";
@@ -28,113 +28,111 @@ function makeProvider() {
28
28
  },
29
29
  };
30
30
  }
31
- describe("MemoryRouter", () => {
32
- it("routeWrite uses defaultProvider when no rules match", () => {
33
- const defaultP = makeProvider();
34
- const router = new MemoryRouter({
35
- providers: new Map([["default", defaultP]]),
36
- defaultProviderId: "default",
37
- rules: [],
38
- });
39
- const ids = router.routeWrite({
40
- namespace: "user:1",
41
- type: "knowledge",
42
- content: "x",
43
- });
44
- assert.deepStrictEqual(ids, ["default"]);
31
+ it("routeWrite uses defaultProvider when no rules match", () => {
32
+ const defaultP = makeProvider();
33
+ const router = new MemoryRouter({
34
+ providers: new Map([["default", defaultP]]),
35
+ defaultProviderId: "default",
36
+ rules: [],
45
37
  });
46
- it("routeWrite matches rule by type and routes to provider", () => {
47
- const defaultP = makeProvider();
48
- const ragP = makeProvider();
49
- const router = new MemoryRouter({
50
- providers: new Map([
51
- ["default", defaultP],
52
- ["rag", ragP],
53
- ]),
54
- defaultProviderId: "default",
55
- rules: [
56
- { types: ["knowledge"], providerId: "rag" },
57
- { types: ["cross_thread"], providerId: "mem0" },
58
- ],
59
- });
60
- const idsKnowledge = router.routeWrite({
61
- namespace: "ns",
62
- type: "knowledge",
63
- content: "doc",
64
- });
65
- assert.deepStrictEqual(idsKnowledge, ["rag"]);
66
- const idsCrossThread = router.routeWrite({
67
- namespace: "ns",
68
- type: "cross_thread",
69
- content: "pref",
70
- });
71
- assert.deepStrictEqual(idsCrossThread, ["mem0"]);
38
+ const ids = router.routeWrite({
39
+ namespace: "user:1",
40
+ type: "knowledge",
41
+ content: "x",
72
42
  });
73
- it("routeQuery matches rule by req.types", () => {
74
- const defaultP = makeProvider();
75
- const ragP = makeProvider();
76
- const router = new MemoryRouter({
77
- providers: new Map([
78
- ["default", defaultP],
79
- ["rag", ragP],
80
- ]),
81
- defaultProviderId: "default",
82
- rules: [{ types: ["knowledge"], providerId: "rag" }],
83
- });
84
- const ids = router.routeQuery({
85
- namespace: "ns",
86
- query: "q",
87
- types: ["knowledge"],
88
- });
89
- assert.deepStrictEqual(ids, ["rag"]);
43
+ assert.deepStrictEqual(ids, ["default"]);
44
+ });
45
+ it("routeWrite matches rule by type and routes to provider", () => {
46
+ const defaultP = makeProvider();
47
+ const ragP = makeProvider();
48
+ const router = new MemoryRouter({
49
+ providers: new Map([
50
+ ["default", defaultP],
51
+ ["rag", ragP],
52
+ ]),
53
+ defaultProviderId: "default",
54
+ rules: [
55
+ { types: ["knowledge"], providerId: "rag" },
56
+ { types: ["cross_thread"], providerId: "mem0" },
57
+ ],
58
+ });
59
+ const idsKnowledge = router.routeWrite({
60
+ namespace: "ns",
61
+ type: "knowledge",
62
+ content: "doc",
63
+ });
64
+ assert.deepStrictEqual(idsKnowledge, ["rag"]);
65
+ const idsCrossThread = router.routeWrite({
66
+ namespace: "ns",
67
+ type: "cross_thread",
68
+ content: "pref",
69
+ });
70
+ assert.deepStrictEqual(idsCrossThread, ["mem0"]);
71
+ });
72
+ it("routeQuery matches rule by req.types", () => {
73
+ const defaultP = makeProvider();
74
+ const ragP = makeProvider();
75
+ const router = new MemoryRouter({
76
+ providers: new Map([
77
+ ["default", defaultP],
78
+ ["rag", ragP],
79
+ ]),
80
+ defaultProviderId: "default",
81
+ rules: [{ types: ["knowledge"], providerId: "rag" }],
82
+ });
83
+ const ids = router.routeQuery({
84
+ namespace: "ns",
85
+ query: "q",
86
+ types: ["knowledge"],
87
+ });
88
+ assert.deepStrictEqual(ids, ["rag"]);
89
+ });
90
+ it("write and query flow", async () => {
91
+ const defaultP = makeProvider();
92
+ const router = new MemoryRouter({
93
+ providers: new Map([["default", defaultP]]),
94
+ defaultProviderId: "default",
95
+ });
96
+ const item = await router.write({
97
+ namespace: "user:1",
98
+ type: "cross_thread",
99
+ content: "hello",
100
+ });
101
+ assert.ok(item.id);
102
+ assert.strictEqual(item.content, "hello");
103
+ const items = await router.query({
104
+ namespace: "user:1",
105
+ query: "any",
106
+ topK: 5,
107
+ });
108
+ assert.strictEqual(items.length, 1);
109
+ assert.strictEqual(items[0].content, "hello");
110
+ });
111
+ it("write fans out to multiple providers for one type", async () => {
112
+ const p1 = makeProvider();
113
+ const p2 = makeProvider();
114
+ const router = new MemoryRouter({
115
+ providers: new Map([
116
+ ["p1", p1],
117
+ ["p2", p2],
118
+ ]),
119
+ defaultProviderId: "p1",
120
+ rules: [
121
+ { types: ["cross_thread"], providerId: "p1" },
122
+ { types: ["cross_thread"], providerId: "p2" },
123
+ ],
90
124
  });
91
- it("write and query flow", async () => {
92
- const defaultP = makeProvider();
93
- const router = new MemoryRouter({
94
- providers: new Map([["default", defaultP]]),
95
- defaultProviderId: "default",
96
- });
97
- const item = await router.write({
98
- namespace: "user:1",
99
- type: "cross_thread",
100
- content: "hello",
101
- });
102
- assert.ok(item.id);
103
- assert.strictEqual(item.content, "hello");
104
- const items = await router.query({
105
- namespace: "user:1",
106
- query: "any",
107
- topK: 5,
108
- });
109
- assert.strictEqual(items.length, 1);
110
- assert.strictEqual(items[0].content, "hello");
125
+ await router.write({
126
+ namespace: "user:multi",
127
+ type: "cross_thread",
128
+ content: "fanout write",
111
129
  });
112
- it("write fans out to multiple providers for one type", async () => {
113
- const p1 = makeProvider();
114
- const p2 = makeProvider();
115
- const router = new MemoryRouter({
116
- providers: new Map([
117
- ["p1", p1],
118
- ["p2", p2],
119
- ]),
120
- defaultProviderId: "p1",
121
- rules: [
122
- { types: ["cross_thread"], providerId: "p1" },
123
- { types: ["cross_thread"], providerId: "p2" },
124
- ],
125
- });
126
- await router.write({
127
- namespace: "user:multi",
128
- type: "cross_thread",
129
- content: "fanout write",
130
- });
131
- const items = await router.query({
132
- namespace: "user:multi",
133
- query: "fanout",
134
- types: ["cross_thread"],
135
- topK: 10,
136
- });
137
- assert.strictEqual(items.length, 2);
130
+ const items = await router.query({
131
+ namespace: "user:multi",
132
+ query: "fanout",
133
+ types: ["cross_thread"],
134
+ topK: 10,
138
135
  });
136
+ assert.strictEqual(items.length, 2);
139
137
  });
140
138
  //# sourceMappingURL=router.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.test.js","sourceRoot":"","sources":["../../../../test/unit/core/router.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.test.js","sourceRoot":"","sources":["../../../../test/unit/core/router.test.ts"],"names":[],"mappings":"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"}