@easynet/agent-memory 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -224
- package/dist/src/core/agent-memory.d.ts +41 -0
- package/dist/src/core/agent-memory.d.ts.map +1 -0
- package/dist/src/core/agent-memory.js +127 -0
- package/dist/src/core/agent-memory.js.map +1 -0
- package/dist/src/core/config.d.ts +78 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js +41 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/observability.d.ts +22 -0
- package/dist/src/core/observability.d.ts.map +1 -0
- package/dist/src/core/observability.js +33 -0
- package/dist/src/core/observability.js.map +1 -0
- package/dist/src/core/policy.d.ts +47 -0
- package/dist/src/core/policy.d.ts.map +1 -0
- package/dist/src/core/policy.js +73 -0
- package/dist/src/core/policy.js.map +1 -0
- package/dist/src/core/privacy.d.ts +23 -0
- package/dist/src/core/privacy.d.ts.map +1 -0
- package/dist/src/core/privacy.js +45 -0
- package/dist/src/core/privacy.js.map +1 -0
- package/dist/src/core/router.d.ts +35 -0
- package/dist/src/core/router.d.ts.map +1 -0
- package/dist/src/core/router.js +86 -0
- package/dist/src/core/router.js.map +1 -0
- package/dist/src/core/types.d.ts +82 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +7 -0
- package/dist/{adapters → src/core}/types.js.map +1 -1
- package/dist/src/create-agent-memory.d.ts +47 -0
- package/dist/src/create-agent-memory.d.ts.map +1 -0
- package/dist/src/create-agent-memory.js +148 -0
- package/dist/src/create-agent-memory.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +51 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingest/pdf-ingest.d.ts +27 -0
- package/dist/src/ingest/pdf-ingest.d.ts.map +1 -0
- package/dist/src/ingest/pdf-ingest.js +89 -0
- package/dist/src/ingest/pdf-ingest.js.map +1 -0
- package/dist/src/ingest/url-ingest.d.ts +27 -0
- package/dist/src/ingest/url-ingest.d.ts.map +1 -0
- package/dist/src/ingest/url-ingest.js +301 -0
- package/dist/src/ingest/url-ingest.js.map +1 -0
- package/dist/src/integrations/deepagents-adapter.d.ts +42 -0
- package/dist/src/integrations/deepagents-adapter.d.ts.map +1 -0
- package/dist/src/integrations/deepagents-adapter.js +146 -0
- package/dist/src/integrations/deepagents-adapter.js.map +1 -0
- package/dist/src/integrations/langchain.d.ts +27 -0
- package/dist/src/integrations/langchain.d.ts.map +1 -0
- package/dist/src/integrations/langchain.js +28 -0
- package/dist/src/integrations/langchain.js.map +1 -0
- package/dist/src/integrations/langgraph.d.ts +23 -0
- package/dist/src/integrations/langgraph.d.ts.map +1 -0
- package/dist/src/integrations/langgraph.js +30 -0
- package/dist/src/integrations/langgraph.js.map +1 -0
- package/dist/src/providers/in-memory-store.d.ts +15 -0
- package/dist/src/providers/in-memory-store.d.ts.map +1 -0
- package/dist/src/providers/in-memory-store.js +62 -0
- package/dist/src/providers/in-memory-store.js.map +1 -0
- package/dist/src/providers/mem0-provider.d.ts +47 -0
- package/dist/src/providers/mem0-provider.d.ts.map +1 -0
- package/dist/src/providers/mem0-provider.js +99 -0
- package/dist/src/providers/mem0-provider.js.map +1 -0
- package/dist/src/providers/rag-provider.d.ts +27 -0
- package/dist/src/providers/rag-provider.d.ts.map +1 -0
- package/dist/src/providers/rag-provider.js +58 -0
- package/dist/src/providers/rag-provider.js.map +1 -0
- package/dist/src/providers/sqlite-store.d.ts +21 -0
- package/dist/src/providers/sqlite-store.d.ts.map +1 -0
- package/dist/src/providers/sqlite-store.js +142 -0
- package/dist/src/providers/sqlite-store.js.map +1 -0
- package/dist/test/core/agent-memory.test.d.ts +2 -0
- package/dist/test/core/agent-memory.test.d.ts.map +1 -0
- package/dist/test/core/agent-memory.test.js +119 -0
- package/dist/test/core/agent-memory.test.js.map +1 -0
- package/dist/test/core/config.test.d.ts +2 -0
- package/dist/test/core/config.test.d.ts.map +1 -0
- package/dist/test/core/config.test.js +48 -0
- package/dist/test/core/config.test.js.map +1 -0
- package/dist/test/core/observability.test.d.ts +2 -0
- package/dist/test/core/observability.test.d.ts.map +1 -0
- package/dist/test/core/observability.test.js +53 -0
- package/dist/test/core/observability.test.js.map +1 -0
- package/dist/test/core/policy.test.d.ts +2 -0
- package/dist/test/core/policy.test.d.ts.map +1 -0
- package/dist/test/core/policy.test.js +42 -0
- package/dist/test/core/policy.test.js.map +1 -0
- package/dist/test/core/privacy.test.d.ts +2 -0
- package/dist/test/core/privacy.test.d.ts.map +1 -0
- package/dist/test/core/privacy.test.js +44 -0
- package/dist/test/core/privacy.test.js.map +1 -0
- package/dist/test/core/router.test.d.ts +2 -0
- package/dist/test/core/router.test.d.ts.map +1 -0
- package/dist/test/core/router.test.js +118 -0
- package/dist/test/core/router.test.js.map +1 -0
- package/dist/test/create-agent-memory.test.d.ts +2 -0
- package/dist/test/create-agent-memory.test.d.ts.map +1 -0
- package/dist/test/create-agent-memory.test.js +122 -0
- package/dist/test/create-agent-memory.test.js.map +1 -0
- package/dist/test/ingest/url-ingest.test.d.ts +2 -0
- package/dist/test/ingest/url-ingest.test.d.ts.map +1 -0
- package/dist/test/ingest/url-ingest.test.js +142 -0
- package/dist/test/ingest/url-ingest.test.js.map +1 -0
- package/dist/test/integration/agent-memory-flow.test.d.ts +5 -0
- package/dist/test/integration/agent-memory-flow.test.d.ts.map +1 -0
- package/dist/test/integration/agent-memory-flow.test.js +80 -0
- package/dist/test/integration/agent-memory-flow.test.js.map +1 -0
- package/dist/test/integration/helpers/ollama-live.d.ts +16 -0
- package/dist/test/integration/helpers/ollama-live.d.ts.map +1 -0
- package/dist/test/integration/helpers/ollama-live.js +101 -0
- package/dist/test/integration/helpers/ollama-live.js.map +1 -0
- package/dist/test/integration/url-ingest-flow.test.d.ts +5 -0
- package/dist/test/integration/url-ingest-flow.test.d.ts.map +1 -0
- package/dist/test/integration/url-ingest-flow.test.js +50 -0
- package/dist/test/integration/url-ingest-flow.test.js.map +1 -0
- package/dist/test/integration/vlm-llm-live.test.d.ts +9 -0
- package/dist/test/integration/vlm-llm-live.test.d.ts.map +1 -0
- package/dist/test/integration/vlm-llm-live.test.js +141 -0
- package/dist/test/integration/vlm-llm-live.test.js.map +1 -0
- package/dist/test/providers/in-memory-store.test.d.ts +2 -0
- package/dist/test/providers/in-memory-store.test.d.ts.map +1 -0
- package/dist/test/providers/in-memory-store.test.js +44 -0
- package/dist/test/providers/in-memory-store.test.js.map +1 -0
- package/dist/test/providers/rag-provider.test.d.ts +2 -0
- package/dist/test/providers/rag-provider.test.d.ts.map +1 -0
- package/dist/test/providers/rag-provider.test.js +113 -0
- package/dist/test/providers/rag-provider.test.js.map +1 -0
- package/dist/test/providers/sqlite-store.test.d.ts +2 -0
- package/dist/test/providers/sqlite-store.test.d.ts.map +1 -0
- package/dist/test/providers/sqlite-store.test.js +119 -0
- package/dist/test/providers/sqlite-store.test.js.map +1 -0
- package/package.json +79 -39
- package/bin/chat +0 -11
- package/dist/adapters/index.d.ts +0 -8
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -29
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/mem0/mem0-store.d.ts +0 -29
- package/dist/adapters/mem0/mem0-store.d.ts.map +0 -1
- package/dist/adapters/mem0/mem0-store.js +0 -174
- package/dist/adapters/mem0/mem0-store.js.map +0 -1
- package/dist/adapters/rag-http/rag-http-retriever.d.ts +0 -18
- package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +0 -1
- package/dist/adapters/rag-http/rag-http-retriever.js +0 -71
- package/dist/adapters/rag-http/rag-http-retriever.js.map +0 -1
- package/dist/adapters/types.d.ts +0 -25
- package/dist/adapters/types.d.ts.map +0 -1
- package/dist/adapters/types.js +0 -6
- package/dist/boot/boot-rebuilder.d.ts +0 -26
- package/dist/boot/boot-rebuilder.d.ts.map +0 -1
- package/dist/boot/boot-rebuilder.js +0 -112
- package/dist/boot/boot-rebuilder.js.map +0 -1
- package/dist/boot/index.d.ts +0 -3
- package/dist/boot/index.d.ts.map +0 -1
- package/dist/boot/index.js +0 -6
- package/dist/boot/index.js.map +0 -1
- package/dist/cli/chat-split.d.ts +0 -22
- package/dist/cli/chat-split.d.ts.map +0 -1
- package/dist/cli/chat-split.js +0 -187
- package/dist/cli/chat-split.js.map +0 -1
- package/dist/cli/chat.d.ts +0 -19
- package/dist/cli/chat.d.ts.map +0 -1
- package/dist/cli/chat.js +0 -266
- package/dist/cli/chat.js.map +0 -1
- package/dist/cli/commands/command-handler.d.ts +0 -32
- package/dist/cli/commands/command-handler.d.ts.map +0 -1
- package/dist/cli/commands/command-handler.js +0 -143
- package/dist/cli/commands/command-handler.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -8
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ui/display-manager.d.ts +0 -18
- package/dist/cli/ui/display-manager.d.ts.map +0 -1
- package/dist/cli/ui/display-manager.js +0 -69
- package/dist/cli/ui/display-manager.js.map +0 -1
- package/dist/cli/ui/screen-layout.d.ts +0 -12
- package/dist/cli/ui/screen-layout.d.ts.map +0 -1
- package/dist/cli/ui/screen-layout.js +0 -125
- package/dist/cli/ui/screen-layout.js.map +0 -1
- package/dist/config/index.d.ts +0 -2
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -6
- package/dist/config/index.js.map +0 -1
- package/dist/config/loader.d.ts +0 -9
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -107
- package/dist/config/loader.js.map +0 -1
- package/dist/context/context-builder.d.ts +0 -18
- package/dist/context/context-builder.d.ts.map +0 -1
- package/dist/context/context-builder.js +0 -91
- package/dist/context/context-builder.js.map +0 -1
- package/dist/core/agent-memory.d.ts +0 -50
- package/dist/core/agent-memory.d.ts.map +0 -1
- package/dist/core/agent-memory.js +0 -297
- package/dist/core/agent-memory.js.map +0 -1
- package/dist/embedding/embedder.d.ts +0 -49
- package/dist/embedding/embedder.d.ts.map +0 -1
- package/dist/embedding/embedder.js +0 -146
- package/dist/embedding/embedder.js.map +0 -1
- package/dist/embedding/index.d.ts +0 -3
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js +0 -8
- package/dist/embedding/index.js.map +0 -1
- package/dist/gate/deduplicator.d.ts +0 -22
- package/dist/gate/deduplicator.d.ts.map +0 -1
- package/dist/gate/deduplicator.js +0 -74
- package/dist/gate/deduplicator.js.map +0 -1
- package/dist/gate/extractor.d.ts +0 -33
- package/dist/gate/extractor.d.ts.map +0 -1
- package/dist/gate/extractor.js +0 -122
- package/dist/gate/extractor.js.map +0 -1
- package/dist/gate/index.d.ts +0 -3
- package/dist/gate/index.d.ts.map +0 -1
- package/dist/gate/index.js +0 -6
- package/dist/gate/index.js.map +0 -1
- package/dist/gate/memory-gate.d.ts +0 -27
- package/dist/gate/memory-gate.d.ts.map +0 -1
- package/dist/gate/memory-gate.js +0 -86
- package/dist/gate/memory-gate.js.map +0 -1
- package/dist/gate/redactor.d.ts +0 -14
- package/dist/gate/redactor.d.ts.map +0 -1
- package/dist/gate/redactor.js +0 -24
- package/dist/gate/redactor.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -24
- package/dist/index.js.map +0 -1
- package/dist/indexing/in-memory-index.d.ts +0 -67
- package/dist/indexing/in-memory-index.d.ts.map +0 -1
- package/dist/indexing/in-memory-index.js +0 -135
- package/dist/indexing/in-memory-index.js.map +0 -1
- package/dist/indexing/index.d.ts +0 -3
- package/dist/indexing/index.d.ts.map +0 -1
- package/dist/indexing/index.js +0 -6
- package/dist/indexing/index.js.map +0 -1
- package/dist/persistence/database/schema.d.ts +0 -6
- package/dist/persistence/database/schema.d.ts.map +0 -1
- package/dist/persistence/database/schema.js +0 -75
- package/dist/persistence/database/schema.js.map +0 -1
- package/dist/persistence/index.d.ts +0 -3
- package/dist/persistence/index.d.ts.map +0 -1
- package/dist/persistence/index.js +0 -6
- package/dist/persistence/index.js.map +0 -1
- package/dist/persistence/repository/embedding-operations.d.ts +0 -17
- package/dist/persistence/repository/embedding-operations.d.ts.map +0 -1
- package/dist/persistence/repository/embedding-operations.js +0 -58
- package/dist/persistence/repository/embedding-operations.js.map +0 -1
- package/dist/persistence/repository/memory-operations.d.ts +0 -28
- package/dist/persistence/repository/memory-operations.d.ts.map +0 -1
- package/dist/persistence/repository/memory-operations.js +0 -87
- package/dist/persistence/repository/memory-operations.js.map +0 -1
- package/dist/persistence/repository/meta-operations.d.ts +0 -15
- package/dist/persistence/repository/meta-operations.d.ts.map +0 -1
- package/dist/persistence/repository/meta-operations.js +0 -20
- package/dist/persistence/repository/meta-operations.js.map +0 -1
- package/dist/persistence/sqlite-repo.d.ts +0 -58
- package/dist/persistence/sqlite-repo.d.ts.map +0 -1
- package/dist/persistence/sqlite-repo.js +0 -81
- package/dist/persistence/sqlite-repo.js.map +0 -1
- package/dist/persistence/utils/hash.d.ts +0 -8
- package/dist/persistence/utils/hash.d.ts.map +0 -1
- package/dist/persistence/utils/hash.js +0 -48
- package/dist/persistence/utils/hash.js.map +0 -1
- package/dist/persistence/utils/serialization.d.ts +0 -33
- package/dist/persistence/utils/serialization.d.ts.map +0 -1
- package/dist/persistence/utils/serialization.js +0 -85
- package/dist/persistence/utils/serialization.js.map +0 -1
- package/dist/processing/document/document-processor.d.ts +0 -30
- package/dist/processing/document/document-processor.d.ts.map +0 -1
- package/dist/processing/document/document-processor.js +0 -158
- package/dist/processing/document/document-processor.js.map +0 -1
- package/dist/processing/document/index.d.ts +0 -3
- package/dist/processing/document/index.d.ts.map +0 -1
- package/dist/processing/document/index.js +0 -6
- package/dist/processing/document/index.js.map +0 -1
- package/dist/ranker/ranker.d.ts +0 -26
- package/dist/ranker/ranker.d.ts.map +0 -1
- package/dist/ranker/ranker.js +0 -40
- package/dist/ranker/ranker.js.map +0 -1
- package/dist/recall/recall-engine.d.ts +0 -19
- package/dist/recall/recall-engine.d.ts.map +0 -1
- package/dist/recall/recall-engine.js +0 -79
- package/dist/recall/recall-engine.js.map +0 -1
- package/dist/types/config.d.ts +0 -821
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -128
- package/dist/types/config.js.map +0 -1
- package/dist/types/document.d.ts +0 -37
- package/dist/types/document.d.ts.map +0 -1
- package/dist/types/document.js +0 -6
- package/dist/types/document.js.map +0 -1
- package/dist/types/index.d.ts +0 -86
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
const agent_memory_js_1 = require("../../src/core/agent-memory.js");
|
|
13
|
+
const router_js_1 = require("../../src/core/router.js");
|
|
14
|
+
const in_memory_store_js_1 = require("../../src/providers/in-memory-store.js");
|
|
15
|
+
const url_ingest_js_1 = require("../../src/ingest/url-ingest.js");
|
|
16
|
+
function makeTestMemory() {
|
|
17
|
+
const provider = new in_memory_store_js_1.InMemoryStoreProvider();
|
|
18
|
+
const router = new router_js_1.MemoryRouter({
|
|
19
|
+
providers: new Map([["default", provider]]),
|
|
20
|
+
defaultProviderId: "default",
|
|
21
|
+
});
|
|
22
|
+
return new agent_memory_js_1.AgentMemory({ router });
|
|
23
|
+
}
|
|
24
|
+
(0, node_test_1.describe)("ingestUrlToMemory", () => {
|
|
25
|
+
(0, node_test_1.it)("ingests local txt file and memorizes chunks", async () => {
|
|
26
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-ingest-${(0, node_crypto_1.randomUUID)()}`);
|
|
27
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
28
|
+
const filePath = (0, node_path_1.join)(dir, "doc.txt");
|
|
29
|
+
const content = "First paragraph.\n\nSecond paragraph.\n\nThird.";
|
|
30
|
+
await (0, promises_1.writeFile)(filePath, content, "utf-8");
|
|
31
|
+
const memory = makeTestMemory();
|
|
32
|
+
try {
|
|
33
|
+
const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
|
|
34
|
+
url: filePath,
|
|
35
|
+
namespace: "test",
|
|
36
|
+
chunkSize: 50,
|
|
37
|
+
});
|
|
38
|
+
node_assert_1.default.ok(count >= 1);
|
|
39
|
+
node_assert_1.default.ok(firstItem?.id);
|
|
40
|
+
node_assert_1.default.strictEqual(firstItem?.type, "knowledge");
|
|
41
|
+
const result = await memory.recall({
|
|
42
|
+
namespace: "test",
|
|
43
|
+
query: "paragraph",
|
|
44
|
+
topK: 10,
|
|
45
|
+
});
|
|
46
|
+
node_assert_1.default.ok(result.items.length >= 1);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
(0, node_test_1.it)("ingests HTML and strips tags", async () => {
|
|
53
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-html-${(0, node_crypto_1.randomUUID)()}`);
|
|
54
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
55
|
+
const filePath = (0, node_path_1.join)(dir, "page.html");
|
|
56
|
+
await (0, promises_1.writeFile)(filePath, "<html><body><script>ignore</script><p>Visible text</p></body></html>", "utf-8");
|
|
57
|
+
const memory = makeTestMemory();
|
|
58
|
+
try {
|
|
59
|
+
const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
|
|
60
|
+
url: filePath,
|
|
61
|
+
namespace: "test",
|
|
62
|
+
chunkSize: 500,
|
|
63
|
+
});
|
|
64
|
+
node_assert_1.default.ok(count >= 1);
|
|
65
|
+
node_assert_1.default.ok(firstItem);
|
|
66
|
+
const result = await memory.recall({
|
|
67
|
+
namespace: "test",
|
|
68
|
+
query: "Visible",
|
|
69
|
+
topK: 5,
|
|
70
|
+
});
|
|
71
|
+
node_assert_1.default.strictEqual(result.items.length, 1);
|
|
72
|
+
node_assert_1.default.ok(result.items[0].content.includes("Visible text"));
|
|
73
|
+
node_assert_1.default.ok(!result.items[0].content.includes("<script>"));
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
(0, node_test_1.it)("uses captionFn for image when provided", async () => {
|
|
80
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img-${(0, node_crypto_1.randomUUID)()}`);
|
|
81
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
82
|
+
const filePath = (0, node_path_1.join)(dir, "fake.png");
|
|
83
|
+
await (0, promises_1.writeFile)(filePath, "not a real png", "utf-8");
|
|
84
|
+
const memory = makeTestMemory();
|
|
85
|
+
const captionFn = async (_buffer) => "Caption for image";
|
|
86
|
+
try {
|
|
87
|
+
const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
|
|
88
|
+
url: filePath,
|
|
89
|
+
namespace: "test",
|
|
90
|
+
captionFn,
|
|
91
|
+
chunkSize: 500,
|
|
92
|
+
});
|
|
93
|
+
node_assert_1.default.ok(count >= 1);
|
|
94
|
+
node_assert_1.default.strictEqual(firstItem?.content, "Caption for image");
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
(0, node_test_1.it)("uses placeholder when image and no captionFn", async () => {
|
|
101
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img2-${(0, node_crypto_1.randomUUID)()}`);
|
|
102
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
103
|
+
const filePath = (0, node_path_1.join)(dir, "x.png");
|
|
104
|
+
await (0, promises_1.writeFile)(filePath, "x", "utf-8");
|
|
105
|
+
const memory = makeTestMemory();
|
|
106
|
+
try {
|
|
107
|
+
const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
|
|
108
|
+
url: filePath,
|
|
109
|
+
namespace: "test",
|
|
110
|
+
chunkSize: 500,
|
|
111
|
+
});
|
|
112
|
+
node_assert_1.default.ok(count >= 1);
|
|
113
|
+
node_assert_1.default.ok(firstItem?.content.startsWith("(image:"));
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
(0, node_test_1.it)("detects image by magic bytes when path has no extension (e.g. upload temp file)", async () => {
|
|
120
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img3-${(0, node_crypto_1.randomUUID)()}`);
|
|
121
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
122
|
+
const minimalPng = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==", "base64");
|
|
123
|
+
const filePath = (0, node_path_1.join)(dir, "upload-temp-no-ext");
|
|
124
|
+
await (0, promises_1.writeFile)(filePath, minimalPng);
|
|
125
|
+
const captionFn = async (_buffer) => "Caption for image";
|
|
126
|
+
const memory = makeTestMemory();
|
|
127
|
+
try {
|
|
128
|
+
const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
|
|
129
|
+
url: filePath,
|
|
130
|
+
namespace: "test",
|
|
131
|
+
chunkSize: 500,
|
|
132
|
+
captionFn,
|
|
133
|
+
});
|
|
134
|
+
node_assert_1.default.strictEqual(count, 1, "image should produce exactly one caption, not many chunks");
|
|
135
|
+
node_assert_1.default.strictEqual(firstItem?.content, "Caption for image");
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=url-ingest.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-ingest.test.js","sourceRoot":"","sources":["../../../test/ingest/url-ingest.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory-flow.test.d.ts","sourceRoot":"","sources":["../../../test/integration/agent-memory-flow.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration tests: full createAgentMemory → memorize → recall flow.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const node_test_1 = require("node:test");
|
|
10
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
+
const create_agent_memory_js_1 = require("../../src/create-agent-memory.js");
|
|
12
|
+
(0, node_test_1.describe)("createAgentMemory integration", () => {
|
|
13
|
+
(0, node_test_1.it)("createAgentMemory with config: memorize and recall", async () => {
|
|
14
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
15
|
+
config: {
|
|
16
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
17
|
+
router: { defaultProvider: "default", rules: [] },
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const item = await memory.memorize({
|
|
21
|
+
namespace: "user:1",
|
|
22
|
+
type: "cross_thread",
|
|
23
|
+
content: "User prefers dark mode.",
|
|
24
|
+
});
|
|
25
|
+
node_assert_1.default.ok(item.id);
|
|
26
|
+
node_assert_1.default.strictEqual(item.content, "User prefers dark mode.");
|
|
27
|
+
node_assert_1.default.strictEqual(item.type, "cross_thread");
|
|
28
|
+
const result = await memory.recall({
|
|
29
|
+
namespace: "user:1",
|
|
30
|
+
query: "user preferences",
|
|
31
|
+
topK: 5,
|
|
32
|
+
});
|
|
33
|
+
node_assert_1.default.strictEqual(result.items.length, 1);
|
|
34
|
+
node_assert_1.default.strictEqual(result.items[0].content, "User prefers dark mode.");
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.it)("retrieveForPrompt returns formatted items", async () => {
|
|
37
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
38
|
+
config: {
|
|
39
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
40
|
+
router: { defaultProvider: "default", rules: [] },
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
await memory.memorize({
|
|
44
|
+
namespace: "user:1",
|
|
45
|
+
type: "knowledge",
|
|
46
|
+
content: "API docs: GET /users returns list.",
|
|
47
|
+
});
|
|
48
|
+
const result = await memory.retrieveForPrompt({
|
|
49
|
+
namespace: "user:1",
|
|
50
|
+
query: "API",
|
|
51
|
+
topK: 5,
|
|
52
|
+
});
|
|
53
|
+
node_assert_1.default.ok(result.traceId);
|
|
54
|
+
node_assert_1.default.ok(result.injectedText.includes("knowledge"));
|
|
55
|
+
node_assert_1.default.strictEqual(result.items.length, 1);
|
|
56
|
+
node_assert_1.default.strictEqual(result.items[0].content, "API docs: GET /users returns list.");
|
|
57
|
+
});
|
|
58
|
+
(0, node_test_1.it)("write (deprecated) and recall", async () => {
|
|
59
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
60
|
+
config: {
|
|
61
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
62
|
+
router: { defaultProvider: "default", rules: [] },
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
const item = await memory.write({
|
|
66
|
+
namespace: "user:1",
|
|
67
|
+
type: "cross_thread",
|
|
68
|
+
content: "Legacy write.",
|
|
69
|
+
});
|
|
70
|
+
node_assert_1.default.ok(item.id);
|
|
71
|
+
const result = await memory.recall({
|
|
72
|
+
namespace: "user:1",
|
|
73
|
+
query: "any",
|
|
74
|
+
topK: 5,
|
|
75
|
+
});
|
|
76
|
+
node_assert_1.default.strictEqual(result.items.length, 1);
|
|
77
|
+
node_assert_1.default.strictEqual(result.items[0].content, "Legacy write.");
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=agent-memory-flow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory-flow.test.js","sourceRoot":"","sources":["../../../test/integration/agent-memory-flow.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for live integration tests: call real Ollama VLM (caption) and LLM (classify).
|
|
3
|
+
* Used only when RUN_LIVE_INTEGRATION=1; no use-case hardcoding.
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryType } from "../../../src/core/types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a captionFn that calls the given Ollama VLM with the image buffer.
|
|
8
|
+
* Uses /api/chat with images (recommended for vision models like qwen3-vl).
|
|
9
|
+
*/
|
|
10
|
+
export declare function createOllamaCaptionFn(vlmBaseUrl: string, model: string, prompt?: string): (buffer: Buffer) => Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Create a classifyMemory callback that calls the given Ollama LLM to infer
|
|
13
|
+
* memory type (thread / cross_thread / knowledge). Returns one of the allowed types.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createOllamaClassifyMemoryFn(llmBaseUrl: string, model: string): (content: string, _metadata?: Record<string, unknown>) => Promise<MemoryType>;
|
|
16
|
+
//# sourceMappingURL=ollama-live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-live.d.ts","sourceRoot":"","sources":["../../../../test/integration/helpers/ollama-live.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAyF7D;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAqD,GAC5D,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAQrC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAgB/E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Helpers for live integration tests: call real Ollama VLM (caption) and LLM (classify).
|
|
4
|
+
* Used only when RUN_LIVE_INTEGRATION=1; no use-case hardcoding.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createOllamaCaptionFn = createOllamaCaptionFn;
|
|
8
|
+
exports.createOllamaClassifyMemoryFn = createOllamaClassifyMemoryFn;
|
|
9
|
+
const MEMORY_TYPES = ["thread", "cross_thread", "knowledge"];
|
|
10
|
+
/** Normalize base URL (no trailing slash) for fetch. */
|
|
11
|
+
function baseUrl(url) {
|
|
12
|
+
return url.replace(/\/+$/, "") || url;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Call Ollama /api/generate with optional images; return full response text.
|
|
16
|
+
* Uses stream: false so we get a single JSON with "response".
|
|
17
|
+
*/
|
|
18
|
+
async function ollamaGenerate(baseUrlStr, model, prompt, options = {}) {
|
|
19
|
+
const url = `${baseUrl(baseUrlStr)}/api/generate`;
|
|
20
|
+
const body = {
|
|
21
|
+
model,
|
|
22
|
+
prompt,
|
|
23
|
+
stream: false,
|
|
24
|
+
};
|
|
25
|
+
if (options.images?.length)
|
|
26
|
+
body.images = options.images;
|
|
27
|
+
if (options.system)
|
|
28
|
+
body.system = options.system;
|
|
29
|
+
const res = await fetch(url, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: { "Content-Type": "application/json" },
|
|
32
|
+
body: JSON.stringify(body),
|
|
33
|
+
});
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
const text = await res.text();
|
|
36
|
+
throw new Error(`Ollama generate failed ${res.status}: ${text}`);
|
|
37
|
+
}
|
|
38
|
+
const data = (await res.json());
|
|
39
|
+
const text = data.response ?? "";
|
|
40
|
+
return text.trim();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Call Ollama /api/chat with images (vision); return assistant message content.
|
|
44
|
+
* Some VLMs work more reliably with chat than generate.
|
|
45
|
+
*/
|
|
46
|
+
async function ollamaChatWithImage(baseUrlStr, model, userPrompt, imagesBase64) {
|
|
47
|
+
const url = `${baseUrl(baseUrlStr)}/api/chat`;
|
|
48
|
+
const body = {
|
|
49
|
+
model,
|
|
50
|
+
stream: false,
|
|
51
|
+
messages: [{ role: "user", content: userPrompt }],
|
|
52
|
+
images: imagesBase64,
|
|
53
|
+
};
|
|
54
|
+
const res = await fetch(url, {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: { "Content-Type": "application/json" },
|
|
57
|
+
body: JSON.stringify(body),
|
|
58
|
+
});
|
|
59
|
+
if (!res.ok) {
|
|
60
|
+
const text = await res.text();
|
|
61
|
+
throw new Error(`Ollama chat failed ${res.status}: ${text}`);
|
|
62
|
+
}
|
|
63
|
+
const data = (await res.json());
|
|
64
|
+
const text = data.message?.content ?? "";
|
|
65
|
+
return text.trim();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a captionFn that calls the given Ollama VLM with the image buffer.
|
|
69
|
+
* Uses /api/chat with images (recommended for vision models like qwen3-vl).
|
|
70
|
+
*/
|
|
71
|
+
function createOllamaCaptionFn(vlmBaseUrl, model, prompt = "Describe this image in one short sentence.") {
|
|
72
|
+
return async (buffer) => {
|
|
73
|
+
const base64 = buffer.toString("base64");
|
|
74
|
+
const caption = await ollamaChatWithImage(vlmBaseUrl, model, prompt, [
|
|
75
|
+
base64,
|
|
76
|
+
]);
|
|
77
|
+
return caption || "(no caption)";
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a classifyMemory callback that calls the given Ollama LLM to infer
|
|
82
|
+
* memory type (thread / cross_thread / knowledge). Returns one of the allowed types.
|
|
83
|
+
*/
|
|
84
|
+
function createOllamaClassifyMemoryFn(llmBaseUrl, model) {
|
|
85
|
+
const systemPrompt = `You classify memory content into exactly one word: thread, cross_thread, or knowledge.
|
|
86
|
+
- thread: session-specific, ephemeral.
|
|
87
|
+
- cross_thread: user preferences, facts, cross-session.
|
|
88
|
+
- knowledge: documentation, APIs, long-lived reference.
|
|
89
|
+
Reply with only that one word, nothing else.`;
|
|
90
|
+
return async (content) => {
|
|
91
|
+
const prompt = `Classify this memory:\n\n${content.slice(0, 500)}`;
|
|
92
|
+
const raw = await ollamaGenerate(llmBaseUrl, model, prompt, {
|
|
93
|
+
system: systemPrompt,
|
|
94
|
+
});
|
|
95
|
+
const word = raw.toLowerCase().replace(/\s+/g, " ").trim().split(/\s/)[0];
|
|
96
|
+
if (MEMORY_TYPES.includes(word))
|
|
97
|
+
return word;
|
|
98
|
+
return "cross_thread";
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ollama-live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama-live.js","sourceRoot":"","sources":["../../../../test/integration/helpers/ollama-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-ingest-flow.test.d.ts","sourceRoot":"","sources":["../../../test/integration/url-ingest-flow.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration tests: createAgentMemory + memorize(url) + recall (full stack).
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const node_test_1 = require("node:test");
|
|
10
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
+
const node_path_1 = require("node:path");
|
|
12
|
+
const promises_1 = require("node:fs/promises");
|
|
13
|
+
const node_os_1 = require("node:os");
|
|
14
|
+
const node_crypto_1 = require("node:crypto");
|
|
15
|
+
const create_agent_memory_js_1 = require("../../src/create-agent-memory.js");
|
|
16
|
+
(0, node_test_1.describe)("url ingest integration", () => {
|
|
17
|
+
(0, node_test_1.it)("createAgentMemory memorize with url ingests file and recall returns content", async () => {
|
|
18
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-integration-${(0, node_crypto_1.randomUUID)()}`);
|
|
19
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
20
|
+
const filePath = (0, node_path_1.join)(dir, "note.txt");
|
|
21
|
+
const content = "Integration chunk one.\n\nIntegration chunk two.";
|
|
22
|
+
await (0, promises_1.writeFile)(filePath, content, "utf-8");
|
|
23
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
24
|
+
config: {
|
|
25
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
26
|
+
router: { defaultProvider: "default", rules: [] },
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
const item = await memory.memorize({
|
|
31
|
+
namespace: "test:ingest",
|
|
32
|
+
url: filePath,
|
|
33
|
+
});
|
|
34
|
+
node_assert_1.default.ok(item.id);
|
|
35
|
+
node_assert_1.default.strictEqual(item.type, "knowledge");
|
|
36
|
+
const result = await memory.recall({
|
|
37
|
+
namespace: "test:ingest",
|
|
38
|
+
query: "Integration",
|
|
39
|
+
topK: 10,
|
|
40
|
+
});
|
|
41
|
+
node_assert_1.default.ok(result.items.length >= 1);
|
|
42
|
+
node_assert_1.default.ok(result.injectedText.includes("Integration"));
|
|
43
|
+
node_assert_1.default.ok(result.traceId);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=url-ingest-flow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-ingest-flow.test.js","sourceRoot":"","sources":["../../../test/integration/url-ingest-flow.test.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAEH,yCAAyC;AACzC,8DAAiC;AACjC,yCAAiC;AACjC,+CAAwD;AACxD,qCAAiC;AACjC,6CAAyC;AACzC,6EAAqE;AAErE,IAAA,oBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAA,cAAE,EAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,4BAA4B,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QACvE,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,kDAAkD,CAAC;QACnE,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAiB,EAAC;YACrC,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBACjD,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;aAClD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACjC,SAAS,EAAE,aAAa;gBACxB,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,qBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,aAAa;gBACxB,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,EAAE;aACT,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACpC,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;YACvD,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live integration tests: real VLM (image caption) and LLM (classify) via Ollama.
|
|
3
|
+
* Run only when RUN_LIVE_INTEGRATION=1. Uses env for endpoints and models.
|
|
4
|
+
*
|
|
5
|
+
* VLM: AGENT_MEMORY_VLM_URL (default http://localhost:11434), AGENT_MEMORY_VLM_MODEL (default qwen3-vl:2b)
|
|
6
|
+
* LLM: AGENT_MEMORY_LLM_URL (default https://ollama-rtx-4070.easynet.world/), AGENT_MEMORY_LLM_MODEL (default gpt-oss-80k:latest)
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=vlm-llm-live.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vlm-llm-live.test.d.ts","sourceRoot":"","sources":["../../../test/integration/vlm-llm-live.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Live integration tests: real VLM (image caption) and LLM (classify) via Ollama.
|
|
4
|
+
* Run only when RUN_LIVE_INTEGRATION=1. Uses env for endpoints and models.
|
|
5
|
+
*
|
|
6
|
+
* VLM: AGENT_MEMORY_VLM_URL (default http://localhost:11434), AGENT_MEMORY_VLM_MODEL (default qwen3-vl:2b)
|
|
7
|
+
* LLM: AGENT_MEMORY_LLM_URL (default https://ollama-rtx-4070.easynet.world/), AGENT_MEMORY_LLM_MODEL (default gpt-oss-80k:latest)
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const node_test_1 = require("node:test");
|
|
14
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
15
|
+
const node_path_1 = require("node:path");
|
|
16
|
+
const promises_1 = require("node:fs/promises");
|
|
17
|
+
const node_os_1 = require("node:os");
|
|
18
|
+
const node_crypto_1 = require("node:crypto");
|
|
19
|
+
const create_agent_memory_js_1 = require("../../src/create-agent-memory.js");
|
|
20
|
+
const ollama_live_js_1 = require("./helpers/ollama-live.js");
|
|
21
|
+
const RUN_LIVE = process.env.RUN_LIVE_INTEGRATION === "1";
|
|
22
|
+
const VLM_URL = process.env.AGENT_MEMORY_VLM_URL ?? "http://localhost:11434";
|
|
23
|
+
const VLM_MODEL = process.env.AGENT_MEMORY_VLM_MODEL ?? "qwen3-vl:2b";
|
|
24
|
+
const LLM_URL = process.env.AGENT_MEMORY_LLM_URL ?? "https://ollama-rtx-4070.easynet.world/";
|
|
25
|
+
const LLM_MODEL = process.env.AGENT_MEMORY_LLM_MODEL ?? "gpt-oss-80k:latest";
|
|
26
|
+
/** Minimal 1x1 PNG (valid image for VLM caption). */
|
|
27
|
+
const MINIMAL_PNG = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==", "base64");
|
|
28
|
+
const baseConfig = {
|
|
29
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
30
|
+
router: { defaultProvider: "default", rules: [] },
|
|
31
|
+
};
|
|
32
|
+
(0, node_test_1.describe)("VLM/LLM live integration", { skip: !RUN_LIVE }, () => {
|
|
33
|
+
(0, node_test_1.it)("VLM: memorize image URL with captionFn and recall returns caption", async () => {
|
|
34
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-vlm-${(0, node_crypto_1.randomUUID)()}`);
|
|
35
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
36
|
+
const imagePath = (0, node_path_1.join)(dir, "test.png");
|
|
37
|
+
await (0, promises_1.writeFile)(imagePath, MINIMAL_PNG);
|
|
38
|
+
try {
|
|
39
|
+
const captionFn = (0, ollama_live_js_1.createOllamaCaptionFn)(VLM_URL, VLM_MODEL);
|
|
40
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
41
|
+
config: baseConfig,
|
|
42
|
+
captionFn,
|
|
43
|
+
});
|
|
44
|
+
const item = await memory.memorize({
|
|
45
|
+
namespace: "test:vlm-live",
|
|
46
|
+
url: imagePath,
|
|
47
|
+
});
|
|
48
|
+
node_assert_1.default.ok(item.id);
|
|
49
|
+
node_assert_1.default.strictEqual(item.type, "knowledge");
|
|
50
|
+
const result = await memory.recall({
|
|
51
|
+
namespace: "test:vlm-live",
|
|
52
|
+
query: "image",
|
|
53
|
+
topK: 5,
|
|
54
|
+
});
|
|
55
|
+
node_assert_1.default.ok(result.items.length >= 1, "recall should return at least one item");
|
|
56
|
+
const content = result.items[0].content;
|
|
57
|
+
node_assert_1.default.ok(content && !content.startsWith("(image:"), "stored content should be VLM caption, not placeholder");
|
|
58
|
+
node_assert_1.default.ok(content.length > 5, "caption should be non-trivial");
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
(0, node_test_1.it)("LLM: memorize without type uses classifyMemory and recall returns typed item", async () => {
|
|
65
|
+
const classifyMemory = (0, ollama_live_js_1.createOllamaClassifyMemoryFn)(LLM_URL, LLM_MODEL);
|
|
66
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
67
|
+
config: baseConfig,
|
|
68
|
+
classifyMemory,
|
|
69
|
+
});
|
|
70
|
+
const item = await memory.memorize({
|
|
71
|
+
namespace: "test:llm-live",
|
|
72
|
+
content: "GET /users returns a list of users. POST /users creates a user. See API docs.",
|
|
73
|
+
});
|
|
74
|
+
node_assert_1.default.ok(item.id);
|
|
75
|
+
node_assert_1.default.ok(["thread", "cross_thread", "knowledge"].includes(item.type), "type should be one of thread/cross_thread/knowledge");
|
|
76
|
+
const result = await memory.recall({
|
|
77
|
+
namespace: "test:llm-live",
|
|
78
|
+
query: "API",
|
|
79
|
+
topK: 5,
|
|
80
|
+
});
|
|
81
|
+
node_assert_1.default.strictEqual(result.items.length, 1);
|
|
82
|
+
node_assert_1.default.strictEqual(result.items[0].content, "GET /users returns a list of users. POST /users creates a user. See API docs.");
|
|
83
|
+
});
|
|
84
|
+
(0, node_test_1.it)("full use case: VLM + LLM together — image caption, text classify, recall and retrieveForPrompt", async () => {
|
|
85
|
+
const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-full-${(0, node_crypto_1.randomUUID)()}`);
|
|
86
|
+
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
87
|
+
const imagePath = (0, node_path_1.join)(dir, "doc.png");
|
|
88
|
+
await (0, promises_1.writeFile)(imagePath, MINIMAL_PNG);
|
|
89
|
+
const captionFn = (0, ollama_live_js_1.createOllamaCaptionFn)(VLM_URL, VLM_MODEL);
|
|
90
|
+
const classifyMemory = (0, ollama_live_js_1.createOllamaClassifyMemoryFn)(LLM_URL, LLM_MODEL);
|
|
91
|
+
const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
|
|
92
|
+
config: baseConfig,
|
|
93
|
+
captionFn,
|
|
94
|
+
classifyMemory,
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
// 1) Memorize image — real VLM captions it
|
|
98
|
+
const imageItem = await memory.memorize({
|
|
99
|
+
namespace: "test:full",
|
|
100
|
+
url: imagePath,
|
|
101
|
+
});
|
|
102
|
+
node_assert_1.default.ok(imageItem.id);
|
|
103
|
+
node_assert_1.default.strictEqual(imageItem.type, "knowledge");
|
|
104
|
+
node_assert_1.default.ok(imageItem.content && !imageItem.content.startsWith("(image:"), "VLM must have produced a real caption");
|
|
105
|
+
// 2) Memorize text without type — real LLM classifies it
|
|
106
|
+
const textItem = await memory.memorize({
|
|
107
|
+
namespace: "test:full",
|
|
108
|
+
content: "User preference: prefers dark theme and compact layout.",
|
|
109
|
+
});
|
|
110
|
+
node_assert_1.default.ok(textItem.id);
|
|
111
|
+
node_assert_1.default.ok(["thread", "cross_thread", "knowledge"].includes(textItem.type), "LLM must have classified type");
|
|
112
|
+
// 3) Recall — should return both items (real provider)
|
|
113
|
+
const recallResult = await memory.recall({
|
|
114
|
+
namespace: "test:full",
|
|
115
|
+
query: "preference and image",
|
|
116
|
+
topK: 10,
|
|
117
|
+
});
|
|
118
|
+
node_assert_1.default.ok(recallResult.items.length >= 2, "recall should return image + text");
|
|
119
|
+
node_assert_1.default.ok(recallResult.traceId);
|
|
120
|
+
const contents = recallResult.items.map((i) => i.content);
|
|
121
|
+
const hasCaption = contents.some((c) => c && !c.startsWith("(image:") && c.length > 5);
|
|
122
|
+
const hasPreference = contents.some((c) => c && c.includes("dark") && c.includes("preference"));
|
|
123
|
+
node_assert_1.default.ok(hasCaption, "recall should include VLM caption");
|
|
124
|
+
node_assert_1.default.ok(hasPreference, "recall should include user preference text");
|
|
125
|
+
// 4) retrieveForPrompt — full stack formatting for prompt injection
|
|
126
|
+
const promptResult = await memory.retrieveForPrompt({
|
|
127
|
+
namespace: "test:full",
|
|
128
|
+
query: "user preferences and any images",
|
|
129
|
+
topK: 10,
|
|
130
|
+
});
|
|
131
|
+
node_assert_1.default.ok(promptResult.traceId);
|
|
132
|
+
node_assert_1.default.ok(promptResult.injectedText.length > 0);
|
|
133
|
+
node_assert_1.default.ok(promptResult.injectedText.includes("knowledge") || promptResult.injectedText.includes("cross_thread") || promptResult.injectedText.includes("thread"), "injected text should include type context");
|
|
134
|
+
node_assert_1.default.ok(promptResult.items.length >= 2);
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=vlm-llm-live.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vlm-llm-live.test.js","sourceRoot":"","sources":["../../../test/integration/vlm-llm-live.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-store.test.d.ts","sourceRoot":"","sources":["../../../test/providers/in-memory-store.test.ts"],"names":[],"mappings":""}
|