agentfootprint 8.7.0 → 8.9.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/AGENTS.md +12 -4
- package/CLAUDE.md +7 -3
- package/ai-instructions/claude-code/SKILL.md +1 -1
- package/ai-instructions/setup.sh +0 -0
- package/bin/agentfootprint-lint-tools.mjs +0 -0
- package/dist/adapters/memory/sqliteVector.js +875 -0
- package/dist/adapters/memory/sqliteVector.js.map +1 -0
- package/dist/core/Agent.js +6 -0
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +12 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +12 -1
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/memoryRecallInjections.js +100 -10
- package/dist/core/agent/memoryRecallInjections.js.map +1 -1
- package/dist/core/agent/stages/deliver.js.map +1 -1
- package/dist/core/slots/buildSystemPromptSlot.js +10 -0
- package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/core/slots/helpers.js +12 -10
- package/dist/core/slots/helpers.js.map +1 -1
- package/dist/embedders/index.js +11 -0
- package/dist/embedders/index.js.map +1 -1
- package/dist/esm/adapters/memory/sqliteVector.d.ts +251 -0
- package/dist/esm/adapters/memory/sqliteVector.js +869 -0
- package/dist/esm/adapters/memory/sqliteVector.js.map +1 -0
- package/dist/esm/core/Agent.js +6 -0
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +13 -2
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +13 -2
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/memoryRecallInjections.d.ts +13 -3
- package/dist/esm/core/agent/memoryRecallInjections.js +101 -11
- package/dist/esm/core/agent/memoryRecallInjections.js.map +1 -1
- package/dist/esm/core/agent/stages/deliver.d.ts +6 -3
- package/dist/esm/core/agent/stages/deliver.js.map +1 -1
- package/dist/esm/core/slots/buildSystemPromptSlot.js +10 -0
- package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/esm/core/slots/helpers.d.ts +11 -2
- package/dist/esm/core/slots/helpers.js +11 -9
- package/dist/esm/core/slots/helpers.js.map +1 -1
- package/dist/esm/embedders/index.js +11 -0
- package/dist/esm/embedders/index.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +63 -0
- package/dist/esm/events/registry.d.ts +3 -1
- package/dist/esm/events/registry.js +2 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/hosting/sqliteSessions.d.ts +7 -13
- package/dist/esm/hosting/sqliteSessions.js +8 -25
- package/dist/esm/hosting/sqliteSessions.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +6 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/fnv1a.d.ts +16 -0
- package/dist/esm/lib/fnv1a.js +24 -0
- package/dist/esm/lib/fnv1a.js.map +1 -0
- package/dist/esm/lib/injection-engine/types.d.ts +17 -0
- package/dist/esm/lib/injection-engine/types.js.map +1 -1
- package/dist/esm/lib/rag/defineRAG.d.ts +126 -26
- package/dist/esm/lib/rag/defineRAG.js +112 -25
- package/dist/esm/lib/rag/defineRAG.js.map +1 -1
- package/dist/esm/lib/rag/index.d.ts +1 -1
- package/dist/esm/lib/rag/index.js +1 -1
- package/dist/esm/lib/rag/index.js.map +1 -1
- package/dist/esm/lib/rag/indexDocuments.d.ts +26 -4
- package/dist/esm/lib/rag/indexDocuments.js +12 -1
- package/dist/esm/lib/rag/indexDocuments.js.map +1 -1
- package/dist/esm/lib/sqliteUnavailable.d.ts +55 -0
- package/dist/esm/lib/sqliteUnavailable.js +61 -0
- package/dist/esm/lib/sqliteUnavailable.js.map +1 -0
- package/dist/esm/memory/define.js +38 -2
- package/dist/esm/memory/define.js.map +1 -1
- package/dist/esm/memory/define.types.d.ts +93 -1
- package/dist/esm/memory/define.types.js +18 -0
- package/dist/esm/memory/define.types.js.map +1 -1
- package/dist/esm/memory/embedding/embedMessages.js +16 -0
- package/dist/esm/memory/embedding/embedMessages.js.map +1 -1
- package/dist/esm/memory/embedding/emitEmbedding.d.ts +38 -0
- package/dist/esm/memory/embedding/emitEmbedding.js +15 -0
- package/dist/esm/memory/embedding/emitEmbedding.js.map +1 -0
- package/dist/esm/memory/embedding/loadRelevant.d.ts +49 -15
- package/dist/esm/memory/embedding/loadRelevant.js +150 -7
- package/dist/esm/memory/embedding/loadRelevant.js.map +1 -1
- package/dist/esm/memory/embedding/mockEmbedder.js +4 -0
- package/dist/esm/memory/embedding/mockEmbedder.js.map +1 -1
- package/dist/esm/memory/embedding/types.d.ts +24 -0
- package/dist/esm/memory/index.d.ts +2 -1
- package/dist/esm/memory/index.js +2 -1
- package/dist/esm/memory/index.js.map +1 -1
- package/dist/esm/memory/pipeline/semantic.d.ts +15 -0
- package/dist/esm/memory/pipeline/semantic.js +3 -1
- package/dist/esm/memory/pipeline/semantic.js.map +1 -1
- package/dist/esm/memory/retrieval/index.d.ts +10 -0
- package/dist/esm/memory/retrieval/index.js +3 -0
- package/dist/esm/memory/retrieval/index.js.map +1 -0
- package/dist/esm/memory/retrieval/provenance.d.ts +43 -0
- package/dist/esm/memory/retrieval/provenance.js +60 -0
- package/dist/esm/memory/retrieval/provenance.js.map +1 -0
- package/dist/esm/memory/retrieval/topK.d.ts +67 -0
- package/dist/esm/memory/retrieval/topK.js +53 -0
- package/dist/esm/memory/retrieval/topK.js.map +1 -0
- package/dist/esm/memory/retrieval/types.d.ts +189 -0
- package/dist/esm/memory/retrieval/types.js +2 -0
- package/dist/esm/memory/retrieval/types.js.map +1 -0
- package/dist/esm/memory/stages/formatDefault.d.ts +52 -26
- package/dist/esm/memory/stages/formatDefault.js +118 -28
- package/dist/esm/memory/stages/formatDefault.js.map +1 -1
- package/dist/esm/memory/stages/pickByBudget.js +53 -3
- package/dist/esm/memory/stages/pickByBudget.js.map +1 -1
- package/dist/esm/memory/stages/types.d.ts +15 -0
- package/dist/esm/memory/wire/mountMemoryPipeline.d.ts +25 -0
- package/dist/esm/memory/wire/mountMemoryPipeline.js +11 -2
- package/dist/esm/memory/wire/mountMemoryPipeline.js.map +1 -1
- package/dist/esm/memory-providers.d.ts +2 -0
- package/dist/esm/memory-providers.js +8 -0
- package/dist/esm/memory-providers.js.map +1 -1
- package/dist/esm/observe.d.ts +2 -0
- package/dist/esm/observe.js +2 -0
- package/dist/esm/observe.js.map +1 -1
- package/dist/esm/recorders/core/EmbeddingRecorder.d.ts +19 -0
- package/dist/esm/recorders/core/EmbeddingRecorder.js +24 -0
- package/dist/esm/recorders/core/EmbeddingRecorder.js.map +1 -0
- package/dist/events/registry.js +2 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/hosting/sqliteSessions.js +10 -27
- package/dist/hosting/sqliteSessions.js.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/fnv1a.js +28 -0
- package/dist/lib/fnv1a.js.map +1 -0
- package/dist/lib/injection-engine/types.js.map +1 -1
- package/dist/lib/rag/defineRAG.js +113 -26
- package/dist/lib/rag/defineRAG.js.map +1 -1
- package/dist/lib/rag/index.js +2 -1
- package/dist/lib/rag/index.js.map +1 -1
- package/dist/lib/rag/indexDocuments.js +12 -1
- package/dist/lib/rag/indexDocuments.js.map +1 -1
- package/dist/lib/sqliteUnavailable.js +65 -0
- package/dist/lib/sqliteUnavailable.js.map +1 -0
- package/dist/memory/define.js +38 -2
- package/dist/memory/define.js.map +1 -1
- package/dist/memory/define.types.js +21 -1
- package/dist/memory/define.types.js.map +1 -1
- package/dist/memory/embedding/embedMessages.js +16 -0
- package/dist/memory/embedding/embedMessages.js.map +1 -1
- package/dist/memory/embedding/emitEmbedding.js +19 -0
- package/dist/memory/embedding/emitEmbedding.js.map +1 -0
- package/dist/memory/embedding/loadRelevant.js +152 -8
- package/dist/memory/embedding/loadRelevant.js.map +1 -1
- package/dist/memory/embedding/mockEmbedder.js +4 -0
- package/dist/memory/embedding/mockEmbedder.js.map +1 -1
- package/dist/memory/index.js +5 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/pipeline/semantic.js +2 -0
- package/dist/memory/pipeline/semantic.js.map +1 -1
- package/dist/memory/retrieval/index.js +9 -0
- package/dist/memory/retrieval/index.js.map +1 -0
- package/dist/memory/retrieval/provenance.js +65 -0
- package/dist/memory/retrieval/provenance.js.map +1 -0
- package/dist/memory/retrieval/topK.js +57 -0
- package/dist/memory/retrieval/topK.js.map +1 -0
- package/dist/memory/retrieval/types.js +3 -0
- package/dist/memory/retrieval/types.js.map +1 -0
- package/dist/memory/stages/formatDefault.js +118 -28
- package/dist/memory/stages/formatDefault.js.map +1 -1
- package/dist/memory/stages/pickByBudget.js +53 -3
- package/dist/memory/stages/pickByBudget.js.map +1 -1
- package/dist/memory/wire/mountMemoryPipeline.js +11 -2
- package/dist/memory/wire/mountMemoryPipeline.js.map +1 -1
- package/dist/memory-providers.js +13 -1
- package/dist/memory-providers.js.map +1 -1
- package/dist/observe.js +4 -1
- package/dist/observe.js.map +1 -1
- package/dist/recorders/core/EmbeddingRecorder.js +28 -0
- package/dist/recorders/core/EmbeddingRecorder.js.map +1 -0
- package/dist/types/adapters/memory/sqliteVector.d.ts +252 -0
- package/dist/types/adapters/memory/sqliteVector.d.ts.map +1 -0
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/memoryRecallInjections.d.ts +13 -3
- package/dist/types/core/agent/memoryRecallInjections.d.ts.map +1 -1
- package/dist/types/core/agent/stages/deliver.d.ts +6 -3
- package/dist/types/core/agent/stages/deliver.d.ts.map +1 -1
- package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
- package/dist/types/core/slots/helpers.d.ts +11 -2
- package/dist/types/core/slots/helpers.d.ts.map +1 -1
- package/dist/types/embedders/index.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +63 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +3 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/hosting/sqliteSessions.d.ts +7 -13
- package/dist/types/hosting/sqliteSessions.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/fnv1a.d.ts +17 -0
- package/dist/types/lib/fnv1a.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/types.d.ts +17 -0
- package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
- package/dist/types/lib/rag/defineRAG.d.ts +126 -26
- package/dist/types/lib/rag/defineRAG.d.ts.map +1 -1
- package/dist/types/lib/rag/index.d.ts +1 -1
- package/dist/types/lib/rag/index.d.ts.map +1 -1
- package/dist/types/lib/rag/indexDocuments.d.ts +26 -4
- package/dist/types/lib/rag/indexDocuments.d.ts.map +1 -1
- package/dist/types/lib/sqliteUnavailable.d.ts +56 -0
- package/dist/types/lib/sqliteUnavailable.d.ts.map +1 -0
- package/dist/types/memory/define.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +93 -1
- package/dist/types/memory/define.types.d.ts.map +1 -1
- package/dist/types/memory/embedding/embedMessages.d.ts.map +1 -1
- package/dist/types/memory/embedding/emitEmbedding.d.ts +39 -0
- package/dist/types/memory/embedding/emitEmbedding.d.ts.map +1 -0
- package/dist/types/memory/embedding/loadRelevant.d.ts +49 -15
- package/dist/types/memory/embedding/loadRelevant.d.ts.map +1 -1
- package/dist/types/memory/embedding/mockEmbedder.d.ts.map +1 -1
- package/dist/types/memory/embedding/types.d.ts +24 -0
- package/dist/types/memory/embedding/types.d.ts.map +1 -1
- package/dist/types/memory/index.d.ts +2 -1
- package/dist/types/memory/index.d.ts.map +1 -1
- package/dist/types/memory/pipeline/semantic.d.ts +15 -0
- package/dist/types/memory/pipeline/semantic.d.ts.map +1 -1
- package/dist/types/memory/retrieval/index.d.ts +11 -0
- package/dist/types/memory/retrieval/index.d.ts.map +1 -0
- package/dist/types/memory/retrieval/provenance.d.ts +44 -0
- package/dist/types/memory/retrieval/provenance.d.ts.map +1 -0
- package/dist/types/memory/retrieval/topK.d.ts +68 -0
- package/dist/types/memory/retrieval/topK.d.ts.map +1 -0
- package/dist/types/memory/retrieval/types.d.ts +190 -0
- package/dist/types/memory/retrieval/types.d.ts.map +1 -0
- package/dist/types/memory/stages/formatDefault.d.ts +52 -26
- package/dist/types/memory/stages/formatDefault.d.ts.map +1 -1
- package/dist/types/memory/stages/pickByBudget.d.ts.map +1 -1
- package/dist/types/memory/stages/types.d.ts +15 -0
- package/dist/types/memory/stages/types.d.ts.map +1 -1
- package/dist/types/memory/wire/mountMemoryPipeline.d.ts +25 -0
- package/dist/types/memory/wire/mountMemoryPipeline.d.ts.map +1 -1
- package/dist/types/memory-providers.d.ts +2 -0
- package/dist/types/memory-providers.d.ts.map +1 -1
- package/dist/types/observe.d.ts +2 -0
- package/dist/types/observe.d.ts.map +1 -1
- package/dist/types/recorders/core/EmbeddingRecorder.d.ts +20 -0
- package/dist/types/recorders/core/EmbeddingRecorder.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -1,24 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* defineRAG —
|
|
3
|
+
* defineRAG — retrieval-augmented generation over a document corpus.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* strategy: TOP_K })` — the rename is for intent + ergonomics.
|
|
5
|
+
* Embed the user's question, retrieve the most similar chunks from a
|
|
6
|
+
* vector store, inject them into the system-prompt slot of the next LLM
|
|
7
|
+
* call. It is the same machinery as `defineMemory({ type: SEMANTIC,
|
|
8
|
+
* strategy: TOP_K })` — with three differences that are not cosmetic:
|
|
10
9
|
*
|
|
11
10
|
* defineMemory ─┬─► EPISODIC (raw conversation)
|
|
12
11
|
* ├─► SEMANTIC (extracted facts / RAG chunks)
|
|
13
12
|
* ├─► NARRATIVE (beats / summaries)
|
|
14
13
|
* └─► CAUSAL (footprintjs decision snapshots)
|
|
15
14
|
*
|
|
16
|
-
* defineRAG ─► SEMANTIC + TOP_K
|
|
17
|
-
*
|
|
15
|
+
* defineRAG ─► SEMANTIC + TOP_K, READ-ONLY, over a NAMED CORPUS,
|
|
16
|
+
* rendered as citable <source> blocks.
|
|
17
|
+
*
|
|
18
|
+
* ─── What changed in 8.8.0, and why ────────────────────────────────────
|
|
19
|
+
*
|
|
20
|
+
* **1. A corpus is read-only.** Until 8.8.0 `defineRAG` also mounted the
|
|
21
|
+
* semantic pipeline's WRITE half, which embedded every conversation turn
|
|
22
|
+
* and stored it in the same namespace as the documents. The consequence
|
|
23
|
+
* was measurable and bad: the user's own question, re-embedded, is the
|
|
24
|
+
* single best-scoring "document" in the corpus (cosine 1.0 against
|
|
25
|
+
* itself), so it came back as retrieval hit #1 and consumed a slot in
|
|
26
|
+
* the top-K budget that a real passage should have had. A corpus is not
|
|
27
|
+
* a conversation log. Nothing this retriever reads is written back.
|
|
28
|
+
*
|
|
29
|
+
* If you want conversation memory ALONGSIDE a corpus, that is what
|
|
30
|
+
* `defineMemory` is for, and the two are registered separately, each
|
|
31
|
+
* with its own store:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const agent = Agent.create({ provider })
|
|
35
|
+
* .rag(defineRAG({ id: 'product-docs', store: corpusStore, embedder }))
|
|
36
|
+
* .memory(defineMemory({
|
|
37
|
+
* id: 'chat',
|
|
38
|
+
* type: MEMORY_TYPES.EPISODIC,
|
|
39
|
+
* strategy: { kind: MEMORY_STRATEGIES.WINDOW, size: 10 },
|
|
40
|
+
* store: conversationStore,
|
|
41
|
+
* }))
|
|
42
|
+
* .build();
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* **2. The corpus has its own namespace.** A memory reads under the
|
|
46
|
+
* identity passed to `agent.run()`. For conversation recall that is
|
|
47
|
+
* right. For a shared corpus it was the reason the documented example
|
|
48
|
+
* retrieved NOTHING: `indexDocuments` writes under
|
|
49
|
+
* `{ conversationId: '_global' }` by default, while a run with no
|
|
50
|
+
* explicit identity gets `{ conversationId: 'run-<timestamp>-<n>' }` —
|
|
51
|
+
* so the write side and the read side never met, silently. `corpus`
|
|
52
|
+
* defaults to the same `'_global'` the indexer uses, so the documented
|
|
53
|
+
* example works with no extra arguments; pass it explicitly when you
|
|
54
|
+
* index per tenant.
|
|
55
|
+
*
|
|
56
|
+
* **3. Chunks are citable.** Retrieved passages render as
|
|
57
|
+
* `<source id="refunds.md#3" doc="refunds.md" score="0.81">` under a
|
|
58
|
+
* corpus header, instead of the conversation-recall shape that printed
|
|
59
|
+
* `role="unknown" turn="0"` on a page of a PDF and gave the model
|
|
60
|
+
* nothing to cite.
|
|
18
61
|
*
|
|
19
62
|
* Pattern: Composition over duplication — defineRAG returns a
|
|
20
63
|
* MemoryDefinition produced by defineMemory. No new engine
|
|
21
|
-
* code, no new slot subflow, no new
|
|
64
|
+
* code, no new slot subflow, no new stage.
|
|
22
65
|
*
|
|
23
66
|
* Role: Layer-3 context-engineering primitive. Lives next to
|
|
24
67
|
* defineSkill / defineSteering / defineInstruction / defineFact
|
|
@@ -26,27 +69,32 @@
|
|
|
26
69
|
* (RAG content is computed at runtime via async retrieval —
|
|
27
70
|
* can't fit the synchronous Injection.inject shape).
|
|
28
71
|
*
|
|
29
|
-
* Emits:
|
|
30
|
-
*
|
|
31
|
-
*
|
|
72
|
+
* Emits: `agentfootprint.memory.retrieved` (once per retrieval, with
|
|
73
|
+
* every candidate and its score — including the rejected ones),
|
|
74
|
+
* `agentfootprint.memory.attached` (once per chunk that reached
|
|
75
|
+
* the prompt), and `agentfootprint.context.injected` with
|
|
76
|
+
* `source: 'rag'` (once per chunk).
|
|
32
77
|
*
|
|
33
78
|
* @see ./indexDocuments.ts for the seeding helper
|
|
34
79
|
* @see ../../memory/define.ts for the underlying factory
|
|
80
|
+
* @see ../../memory/retrieval/ for the retrieval seam
|
|
35
81
|
* @see ../../memory/asRoleRefusal.ts for why `asRole` is refused, not honoured
|
|
36
82
|
*
|
|
37
|
-
* @example Basic usage
|
|
83
|
+
* @example Basic usage — works with no identity argument anywhere
|
|
38
84
|
* ```ts
|
|
39
|
-
* import {
|
|
40
|
-
import { InMemoryStore, mockEmbedder } from 'agentfootprint/memory'
|
|
41
|
-
import { mock } from 'agentfootprint/
|
|
85
|
+
* import { Agent, defineRAG, indexDocuments } from 'agentfootprint';
|
|
86
|
+
* import { InMemoryStore, mockEmbedder } from 'agentfootprint/memory';
|
|
87
|
+
* import { mock } from 'agentfootprint/providers';
|
|
42
88
|
*
|
|
43
89
|
* const embedder = mockEmbedder();
|
|
44
90
|
* const store = new InMemoryStore();
|
|
45
91
|
*
|
|
46
|
-
* // Seed the
|
|
92
|
+
* // Seed the corpus once at startup (defaults to the '_global' namespace).
|
|
47
93
|
* await indexDocuments(store, embedder, [
|
|
48
|
-
* { id: '
|
|
49
|
-
*
|
|
94
|
+
* { id: 'refunds.md#0', content: 'Refunds are processed within 3 business days.',
|
|
95
|
+
* metadata: { source: 'refunds.md' } },
|
|
96
|
+
* { id: 'pricing.md#0', content: 'Pro plan costs $20/month.',
|
|
97
|
+
* metadata: { source: 'pricing.md' } },
|
|
50
98
|
* ]);
|
|
51
99
|
*
|
|
52
100
|
* const docs = defineRAG({
|
|
@@ -61,13 +109,27 @@ import { mock } from 'agentfootprint/llm-providers';
|
|
|
61
109
|
* const agent = Agent.create({ provider: mock({ reply: 'ok' }), model: 'mock' })
|
|
62
110
|
* .rag(docs)
|
|
63
111
|
* .build();
|
|
112
|
+
*
|
|
113
|
+
* agent.on('agentfootprint.memory.retrieved', (e) => {
|
|
114
|
+
* // every candidate, admitted or not, with its score and its reason
|
|
115
|
+
* console.log(e.payload.candidates);
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* await agent.run({ message: 'How long do refunds take?' });
|
|
64
119
|
* ```
|
|
65
120
|
*/
|
|
66
121
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.defineRAG = void 0;
|
|
122
|
+
exports.defineRAG = exports.DEFAULT_CORPUS_IDENTITY = void 0;
|
|
68
123
|
const define_types_js_1 = require("../../memory/define.types.js");
|
|
69
124
|
const define_js_1 = require("../../memory/define.js");
|
|
70
125
|
const asRoleRefusal_js_1 = require("../../memory/asRoleRefusal.js");
|
|
126
|
+
/**
|
|
127
|
+
* The namespace a corpus lives in unless told otherwise — the same one
|
|
128
|
+
* `indexDocuments` writes to by default. The two defaults are one value
|
|
129
|
+
* on purpose: index with no options, retrieve with no options, and the
|
|
130
|
+
* documents are found.
|
|
131
|
+
*/
|
|
132
|
+
exports.DEFAULT_CORPUS_IDENTITY = { conversationId: '_global' };
|
|
71
133
|
/**
|
|
72
134
|
* Build a RAG context-engineering definition. The returned
|
|
73
135
|
* `MemoryDefinition` is registered on the Agent via `.rag(definition)`
|
|
@@ -75,6 +137,7 @@ const asRoleRefusal_js_1 = require("../../memory/asRoleRefusal.js");
|
|
|
75
137
|
*
|
|
76
138
|
* @throws when `store` does not implement `search()`. RAG requires a
|
|
77
139
|
* vector-capable adapter.
|
|
140
|
+
* @throws when `retrieval` is combined with `topK` or `threshold`.
|
|
78
141
|
*/
|
|
79
142
|
function defineRAG(opts) {
|
|
80
143
|
if (!opts.id || opts.id.trim() === '') {
|
|
@@ -94,17 +157,41 @@ function defineRAG(opts) {
|
|
|
94
157
|
throw new Error(`defineRAG[${opts.id}]: store must implement search(). ` +
|
|
95
158
|
'Pass a vector-capable adapter (InMemoryStore, pgvector, Pinecone, ...).');
|
|
96
159
|
}
|
|
160
|
+
if (opts.retrieval !== undefined) {
|
|
161
|
+
const shorthand = [];
|
|
162
|
+
if (opts.topK !== undefined)
|
|
163
|
+
shorthand.push('`topK`');
|
|
164
|
+
if (opts.threshold !== undefined)
|
|
165
|
+
shorthand.push('`threshold`');
|
|
166
|
+
if (shorthand.length > 0) {
|
|
167
|
+
throw new Error(`defineRAG[${opts.id}]: ${shorthand.join(' and ')} cannot be combined with \`retrieval\` ` +
|
|
168
|
+
'— they are two spellings of the same rule and could disagree. Keep ' +
|
|
169
|
+
`\`retrieval: ${opts.retrieval.name}({ ... })\` and drop ${shorthand.join('/')}.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
97
172
|
return (0, define_js_1.defineMemory)({
|
|
98
173
|
id: opts.id,
|
|
99
174
|
...(opts.description !== undefined && { description: opts.description }),
|
|
100
175
|
type: define_types_js_1.MEMORY_TYPES.SEMANTIC,
|
|
101
|
-
strategy:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
176
|
+
strategy: opts.retrieval !== undefined
|
|
177
|
+
? {
|
|
178
|
+
kind: define_types_js_1.MEMORY_STRATEGIES.TOP_K,
|
|
179
|
+
embedder: opts.embedder,
|
|
180
|
+
retrieval: opts.retrieval,
|
|
181
|
+
...(opts.embedderId !== undefined && { embedderId: opts.embedderId }),
|
|
182
|
+
}
|
|
183
|
+
: {
|
|
184
|
+
kind: define_types_js_1.MEMORY_STRATEGIES.TOP_K,
|
|
185
|
+
topK: opts.topK ?? 3,
|
|
186
|
+
threshold: opts.threshold ?? 0.7,
|
|
187
|
+
embedder: opts.embedder,
|
|
188
|
+
...(opts.embedderId !== undefined && { embedderId: opts.embedderId }),
|
|
189
|
+
},
|
|
107
190
|
store: opts.store,
|
|
191
|
+
// A corpus is not a conversation log — see the header.
|
|
192
|
+
readOnly: true,
|
|
193
|
+
corpus: opts.corpus ?? exports.DEFAULT_CORPUS_IDENTITY,
|
|
194
|
+
flavor: 'rag',
|
|
108
195
|
});
|
|
109
196
|
}
|
|
110
197
|
exports.defineRAG = defineRAG;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineRAG.js","sourceRoot":"","sources":["../../../src/lib/rag/defineRAG.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"defineRAG.js","sourceRoot":"","sources":["../../../src/lib/rag/defineRAG.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsHG;;;AAOH,kEAA+E;AAC/E,sDAAsD;AACtD,oEAA6D;AAE7D;;;;;GAKG;AACU,QAAA,uBAAuB,GAAmB,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAuGrF;;;;;;;;GAQG;AACH,SAAgB,SAAS,CAAC,IAAsB;IAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,sEAAsE;IACtE,oEAAoE;IACpE,uDAAuD;IACvD,IAAA,+BAAY,EAAC,IAAI,EAAE,cAAc,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,EAAE,oCAAoC;YACtD,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,yCAAyC;gBACxF,qEAAqE;gBACrE,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,wBAAwB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAA,wBAAY,EAAC;QAClB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxE,IAAI,EAAE,8BAAY,CAAC,QAAQ;QAC3B,QAAQ,EACN,IAAI,CAAC,SAAS,KAAK,SAAS;YAC1B,CAAC,CAAC;gBACE,IAAI,EAAE,mCAAiB,CAAC,KAAK;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;aACtE;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,mCAAiB,CAAC,KAAK;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;gBACpB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;aACtE;QACP,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,uDAAuD;QACvD,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,+BAAuB;QAC9C,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC;AA1DD,8BA0DC"}
|
package/dist/lib/rag/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.indexDocuments = exports.defineRAG = void 0;
|
|
3
|
+
exports.indexDocuments = exports.DEFAULT_CORPUS_IDENTITY = exports.defineRAG = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* RAG — retrieval-augmented generation as a context-engineering
|
|
6
6
|
* flavor. ONE factory + ONE seeding helper. Composes over the memory
|
|
@@ -8,6 +8,7 @@ exports.indexDocuments = exports.defineRAG = void 0;
|
|
|
8
8
|
*/
|
|
9
9
|
var defineRAG_js_1 = require("./defineRAG.js");
|
|
10
10
|
Object.defineProperty(exports, "defineRAG", { enumerable: true, get: function () { return defineRAG_js_1.defineRAG; } });
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_CORPUS_IDENTITY", { enumerable: true, get: function () { return defineRAG_js_1.DEFAULT_CORPUS_IDENTITY; } });
|
|
11
12
|
var indexDocuments_js_1 = require("./indexDocuments.js");
|
|
12
13
|
Object.defineProperty(exports, "indexDocuments", { enumerable: true, get: function () { return indexDocuments_js_1.indexDocuments; } });
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/rag/index.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/rag/index.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,+CAA2F;AAAlF,yGAAA,SAAS,OAAA;AAAE,uHAAA,uBAAuB,OAAA;AAC3C,yDAAmG;AAA1F,mHAAA,cAAc,OAAA"}
|
|
@@ -54,8 +54,11 @@ async function indexDocuments(store, embedder, documents, options = {}) {
|
|
|
54
54
|
if (!Array.isArray(documents) || documents.length === 0)
|
|
55
55
|
return 0;
|
|
56
56
|
const identity = options.identity ?? DEFAULT_IDENTITY;
|
|
57
|
-
|
|
57
|
+
// The embedder's own name first: it is what a durable store fingerprints
|
|
58
|
+
// the namespace with, and an anonymous index cannot refuse a later swap.
|
|
59
|
+
const embedderId = options.embedderId ?? embedder.id ?? 'default-embedder';
|
|
58
60
|
const now = Date.now();
|
|
61
|
+
const embedStartedAt = Date.now();
|
|
59
62
|
const ttl = options.ttlMs ? now + options.ttlMs : undefined;
|
|
60
63
|
// Embed in batch when supported, else fall back to capped-concurrency
|
|
61
64
|
// single calls. Unlimited concurrency on a large corpus would
|
|
@@ -72,6 +75,14 @@ async function indexDocuments(store, embedder, documents, options = {}) {
|
|
|
72
75
|
const limit = Math.max(1, options.maxConcurrency ?? 8);
|
|
73
76
|
vectors = await embedWithConcurrency(embedder, texts, limit, options.signal);
|
|
74
77
|
}
|
|
78
|
+
options.onEmbedding?.({
|
|
79
|
+
model: embedderId,
|
|
80
|
+
provider: 'custom',
|
|
81
|
+
inputKind: 'document',
|
|
82
|
+
dimension: embedder.dimensions,
|
|
83
|
+
count: vectors.length,
|
|
84
|
+
durationMs: Date.now() - embedStartedAt,
|
|
85
|
+
});
|
|
75
86
|
const entries = documents.map((doc, i) => {
|
|
76
87
|
const vec = vectors[i];
|
|
77
88
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexDocuments.js","sourceRoot":"","sources":["../../../src/lib/rag/indexDocuments.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;
|
|
1
|
+
{"version":3,"file":"indexDocuments.js","sourceRoot":"","sources":["../../../src/lib/rag/indexDocuments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* lib/sqliteUnavailable — the one refusal for "this Node has no `node:sqlite`".
|
|
4
|
+
*
|
|
5
|
+
* Pattern: leaf error type (imports nothing).
|
|
6
|
+
* Role: shared by `hosting/sqliteSessions` and `adapters/memory/sqliteVector`.
|
|
7
|
+
* It lives here rather than in either of them because two adapters
|
|
8
|
+
* hitting the same missing module must raise the same error: a
|
|
9
|
+
* consumer catching `SqliteUnavailableError` should not have to know
|
|
10
|
+
* which of our stores was being constructed, and two classes of one
|
|
11
|
+
* name is a duplicate type the build refuses anyway.
|
|
12
|
+
* Emits: N/A.
|
|
13
|
+
*
|
|
14
|
+
* Node 20 does not have the module at all; Node 22.5 through 22.12 have it
|
|
15
|
+
* behind `--experimental-sqlite`; Node 22.13+ and 23.4+ have it as-is (still
|
|
16
|
+
* marked experimental by Node, which is why it prints a warning on first use).
|
|
17
|
+
*
|
|
18
|
+
* The refusal names the version you are on and the three ways out, because
|
|
19
|
+
* "cannot find module 'node:sqlite'" out of a library's guts tells you what
|
|
20
|
+
* broke and nothing about what to do.
|
|
21
|
+
*
|
|
22
|
+
* **There is deliberately no fallback.** Each caller supplies its own last
|
|
23
|
+
* sentence saying what a silent fallback would have looked like from the
|
|
24
|
+
* outside, because that sentence is the argument — not decoration.
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.SqliteUnavailableError = void 0;
|
|
28
|
+
const SESSIONS_CONTEXT = {
|
|
29
|
+
door: 'hosting',
|
|
30
|
+
factory: 'sqliteSessions()',
|
|
31
|
+
alternative: 'memorySessions() — which keeps conversations in a Map and loses them on restart, and says so in its name',
|
|
32
|
+
whyNotFallback: 'a store that silently forgot every conversation on restart looks, from the outside, exactly like a brand-new user',
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Raised when `node:sqlite` is not available in the running Node.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* try {
|
|
40
|
+
* const store = sqliteVectorStore({ file: './corpus.db' });
|
|
41
|
+
* } catch (err) {
|
|
42
|
+
* if (err instanceof SqliteUnavailableError) {
|
|
43
|
+
* console.error(`Node ${err.nodeVersion} cannot do this`, err.message);
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
class SqliteUnavailableError extends Error {
|
|
49
|
+
code = 'ERR_SQLITE_UNAVAILABLE';
|
|
50
|
+
/** The Node version this process is running. */
|
|
51
|
+
nodeVersion;
|
|
52
|
+
constructor(nodeVersion, reason, context = SESSIONS_CONTEXT) {
|
|
53
|
+
super(`[${context.door}] ${context.factory} needs Node's built-in 'node:sqlite' module, and this ` +
|
|
54
|
+
`process (Node ${nodeVersion}) does not have it (${reason}). ` +
|
|
55
|
+
`That module ships with Node 22.5 and newer: on Node 22.13+ (and 23.4+) it is ` +
|
|
56
|
+
`available as-is, and on Node 22.5–22.12 it is behind --experimental-sqlite. ` +
|
|
57
|
+
`So: upgrade Node, add that flag, or use ${context.alternative}. ` +
|
|
58
|
+
`This refuses rather than falling back to memory on your behalf: ` +
|
|
59
|
+
`${context.whyNotFallback}.`);
|
|
60
|
+
this.name = 'SqliteUnavailableError';
|
|
61
|
+
this.nodeVersion = nodeVersion;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.SqliteUnavailableError = SqliteUnavailableError;
|
|
65
|
+
//# sourceMappingURL=sqliteUnavailable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqliteUnavailable.js","sourceRoot":"","sources":["../../src/lib/sqliteUnavailable.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAcH,MAAM,gBAAgB,GAA6B;IACjD,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EACT,0GAA0G;IAC5G,cAAc,EACZ,mHAAmH;CACtH,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IACtC,IAAI,GAAG,wBAAiC,CAAC;IAClD,gDAAgD;IACvC,WAAW,CAAS;IAE7B,YACE,WAAmB,EACnB,MAAc,EACd,UAAoC,gBAAgB;QAEpD,KAAK,CACH,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,wDAAwD;YAC1F,iBAAiB,WAAW,uBAAuB,MAAM,KAAK;YAC9D,+EAA+E;YAC/E,8EAA8E;YAC9E,2CAA2C,OAAO,CAAC,WAAW,IAAI;YAClE,kEAAkE;YAClE,GAAG,OAAO,CAAC,cAAc,GAAG,CAC/B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAtBD,wDAsBC"}
|
package/dist/memory/define.js
CHANGED
|
@@ -68,14 +68,21 @@ const define_types_js_1 = require("./define.types.js");
|
|
|
68
68
|
function defineMemory(options) {
|
|
69
69
|
validate(options);
|
|
70
70
|
const pipeline = buildPipeline(options);
|
|
71
|
+
// `readOnly` drops the write half entirely (8.8.0). Not "writes are
|
|
72
|
+
// skipped at runtime" — the subflow is never compiled and never mounted,
|
|
73
|
+
// so a read-only memory has no write stage in its chart, no write commit
|
|
74
|
+
// in its log, and nothing to disable later by accident.
|
|
75
|
+
const write = options.readOnly === true ? undefined : pipeline.write;
|
|
71
76
|
const definition = {
|
|
72
77
|
id: options.id,
|
|
73
78
|
...(options.description !== undefined && { description: options.description }),
|
|
74
79
|
type: options.type,
|
|
75
80
|
read: brandPipeline(pipeline.read),
|
|
76
|
-
...(
|
|
81
|
+
...(write !== undefined && { write: brandPipeline(write) }),
|
|
77
82
|
timing: options.timing ?? define_types_js_1.MEMORY_TIMING.TURN_START,
|
|
78
83
|
...(options.redact !== undefined && { redact: options.redact }),
|
|
84
|
+
...(options.corpus !== undefined && { corpus: options.corpus }),
|
|
85
|
+
...(options.flavor !== undefined && { flavor: options.flavor }),
|
|
79
86
|
...(options.type === define_types_js_1.MEMORY_TYPES.CAUSAL &&
|
|
80
87
|
options.projection !== undefined && {
|
|
81
88
|
projection: options.projection,
|
|
@@ -97,6 +104,26 @@ function validate(options) {
|
|
|
97
104
|
throw new Error(`defineMemory[id=${options.id}]: \`store\` is required. ` +
|
|
98
105
|
'Pass `new InMemoryStore()` for dev/tests, or a backed store for production.');
|
|
99
106
|
}
|
|
107
|
+
// The shorthand and the spelled-out rule EXCLUDE. Accepting both would
|
|
108
|
+
// mean one of two numbers silently loses, and the recording would name
|
|
109
|
+
// a `k` the run did not use.
|
|
110
|
+
// Read through a structural shape, not the union: the union's arms
|
|
111
|
+
// declare the OTHER spelling as `never`, so intersecting them here
|
|
112
|
+
// would make the very field this check reads unreadable.
|
|
113
|
+
const strategy = options.strategy;
|
|
114
|
+
if (strategy?.retrieval !== undefined) {
|
|
115
|
+
const shorthand = [];
|
|
116
|
+
if (strategy.topK !== undefined)
|
|
117
|
+
shorthand.push('`topK`');
|
|
118
|
+
if (strategy.threshold !== undefined)
|
|
119
|
+
shorthand.push('`threshold`');
|
|
120
|
+
if (shorthand.length > 0) {
|
|
121
|
+
throw new Error(`defineMemory[id=${options.id}]: ${shorthand.join(' and ')} cannot be combined with ` +
|
|
122
|
+
'`retrieval` — they are two spellings of the same rule and could disagree. ' +
|
|
123
|
+
`Keep the strategy (\`retrieval: ${strategy.retrieval.name}({ ... })\`) and drop ` +
|
|
124
|
+
`${shorthand.join('/')}, or drop \`retrieval\`.`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
100
127
|
}
|
|
101
128
|
// ─── Pipeline dispatch ─────────────────────────────────────────────
|
|
102
129
|
function buildPipeline(options) {
|
|
@@ -181,8 +208,11 @@ function buildSemanticPipeline(options) {
|
|
|
181
208
|
const config = {
|
|
182
209
|
store: options.store,
|
|
183
210
|
embedder: t.embedder,
|
|
184
|
-
k: t.topK,
|
|
211
|
+
...(t.topK !== undefined && { k: t.topK }),
|
|
185
212
|
...(t.threshold !== undefined && { minScore: t.threshold }),
|
|
213
|
+
...(t.embedderId !== undefined && { embedderId: t.embedderId }),
|
|
214
|
+
...(t.retrieval !== undefined && { retrieval: t.retrieval }),
|
|
215
|
+
...(options.flavor !== undefined && { flavor: options.flavor }),
|
|
186
216
|
};
|
|
187
217
|
return (0, semantic_js_1.semanticPipeline)(config);
|
|
188
218
|
}
|
|
@@ -272,6 +302,12 @@ function buildCausalPipeline(options) {
|
|
|
272
302
|
'Pass `new InMemoryStore({ embedder })` for dev/tests, or a vector adapter ' +
|
|
273
303
|
'(pgvector, Pinecone, Qdrant) for production.');
|
|
274
304
|
}
|
|
305
|
+
// CAUSAL predates the retrieval seam and reads the shorthand only. A
|
|
306
|
+
// strategy passed here would be accepted and ignored, so it is refused.
|
|
307
|
+
if (s.retrieval !== undefined) {
|
|
308
|
+
throw new Error(`defineMemory[${options.id}]: CAUSAL type does not read \`retrieval\` — snapshot recall ` +
|
|
309
|
+
'matches a stored query vector, not a document pool. Use `topK` + `threshold`.');
|
|
310
|
+
}
|
|
275
311
|
const config = {
|
|
276
312
|
store: options.store,
|
|
277
313
|
embedder: s.embedder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/memory/define.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;AAEH,yDAAkD;AAElD,sDAAoF;AACpF,0DAA4D;AAC5D,wDAAuF;AACvF,gDAA2E;AAC3E,0DAA0F;AAC1F,gDAA2E;AAC3E,gDAAkF;AAGlF,uDAgB2B;AAG3B,sEAAsE;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,YAAY,CAAC,OAA4B;IACvD,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,UAAU,GAAqB;QACnC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9E,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/memory/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* @see MEMORY.md for the load-bearing design memory
|
|
41
41
|
*/
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.isMemoryInjectionKey = exports.memoryInjectionKey = exports.MEMORY_INJECTION_KEY_PREFIX = exports.isSnapshotProjection = exports.isMemoryTiming = exports.isMemoryStrategyKind = exports.isMemoryType = exports.SNAPSHOT_PROJECTIONS = exports.MEMORY_TIMING = exports.MEMORY_STRATEGIES = exports.MEMORY_TYPES = void 0;
|
|
43
|
+
exports.isRetrievalEvidenceKey = exports.retrievalEvidenceKey = exports.RETRIEVAL_EVIDENCE_KEY_PREFIX = exports.isMemoryInjectionKey = exports.memoryInjectionKey = exports.MEMORY_INJECTION_KEY_PREFIX = exports.isSnapshotProjection = exports.isMemoryTiming = exports.isMemoryStrategyKind = exports.isMemoryType = exports.SNAPSHOT_PROJECTIONS = exports.MEMORY_TIMING = exports.MEMORY_STRATEGIES = exports.MEMORY_TYPES = void 0;
|
|
44
44
|
// ─── Const-objects (SSOT) ───────────────────────────────────────────
|
|
45
45
|
/**
|
|
46
46
|
* What shape of memory you're keeping.
|
|
@@ -135,4 +135,24 @@ function isMemoryInjectionKey(key) {
|
|
|
135
135
|
return key.startsWith(exports.MEMORY_INJECTION_KEY_PREFIX);
|
|
136
136
|
}
|
|
137
137
|
exports.isMemoryInjectionKey = isMemoryInjectionKey;
|
|
138
|
+
/**
|
|
139
|
+
* Scope-key prefix for the retrieval record a memory lifts to the parent
|
|
140
|
+
* scope (8.8.0), one key per memory id — the same layering rule as
|
|
141
|
+
* `memoryInjection_`.
|
|
142
|
+
*
|
|
143
|
+
* This key is the reason a backward slice can now reach a passage. It is
|
|
144
|
+
* ORDINARY root state, so `sliceForKey('finalContent')` walks the
|
|
145
|
+
* system-prompt write, and the record naming every candidate id and score
|
|
146
|
+
* is one hop away. Before 8.8.0 the scores existed only inside the memory
|
|
147
|
+
* subflow, which the root commit log never sees.
|
|
148
|
+
*/
|
|
149
|
+
exports.RETRIEVAL_EVIDENCE_KEY_PREFIX = 'retrievalEvidence_';
|
|
150
|
+
function retrievalEvidenceKey(id) {
|
|
151
|
+
return `${exports.RETRIEVAL_EVIDENCE_KEY_PREFIX}${id}`;
|
|
152
|
+
}
|
|
153
|
+
exports.retrievalEvidenceKey = retrievalEvidenceKey;
|
|
154
|
+
function isRetrievalEvidenceKey(key) {
|
|
155
|
+
return key.startsWith(exports.RETRIEVAL_EVIDENCE_KEY_PREFIX);
|
|
156
|
+
}
|
|
157
|
+
exports.isRetrievalEvidenceKey = isRetrievalEvidenceKey;
|
|
138
158
|
//# sourceMappingURL=define.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.types.js","sourceRoot":"","sources":["../../src/memory/define.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;
|
|
1
|
+
{"version":3,"file":"define.types.js","sourceRoot":"","sources":["../../src/memory/define.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;AAQH,uEAAuE;AAEvE;;;;;;;;;GASG;AACU,QAAA,YAAY,GAAG;IAC1B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX;;;;;;;;GAQG;AACU,QAAA,iBAAiB,GAAG;IAC/B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;CACR,CAAC;AAGX;;;;;;GAMG;AACU,QAAA,aAAa,GAAG;IAC3B,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;CAChB,CAAC;AAGX;;;;;;;;GAQG;AACU,QAAA,oBAAoB,GAAG;IAClC,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACJ,CAAC;AAqTX,uEAAuE;AAEvE,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAQ,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAFD,oCAEC;AAED,SAAgB,oBAAoB,CAAC,KAAa;IAChD,OAAQ,MAAM,CAAC,MAAM,CAAC,yBAAiB,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAFD,oDAEC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAQ,MAAM,CAAC,MAAM,CAAC,qBAAa,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAFD,wCAEC;AAED,SAAgB,oBAAoB,CAAC,KAAa;IAChD,OAAQ,MAAM,CAAC,MAAM,CAAC,4BAAoB,CAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAFD,oDAEC;AAED,uEAAuE;AAEvE;;;;;GAKG;AACU,QAAA,2BAA2B,GAAG,kBAA2B,CAAC;AAEvE,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,OAAO,GAAG,mCAA2B,GAAG,EAAE,EAAE,CAAC;AAC/C,CAAC;AAFD,gDAEC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,OAAO,GAAG,CAAC,UAAU,CAAC,mCAA2B,CAAC,CAAC;AACrD,CAAC;AAFD,oDAEC;AAED;;;;;;;;;;GAUG;AACU,QAAA,6BAA6B,GAAG,oBAA6B,CAAC;AAE3E,SAAgB,oBAAoB,CAAC,EAAU;IAC7C,OAAO,GAAG,qCAA6B,GAAG,EAAE,EAAE,CAAC;AACjD,CAAC;AAFD,oDAEC;AAED,SAAgB,sBAAsB,CAAC,GAAW;IAChD,OAAO,GAAG,CAAC,UAAU,CAAC,qCAA6B,CAAC,CAAC;AACvD,CAAC;AAFD,wDAEC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.embedMessages = void 0;
|
|
4
|
+
const emitEmbedding_js_1 = require("./emitEmbedding.js");
|
|
4
5
|
/** Default: extract plaintext from any supported content shape. */
|
|
5
6
|
function defaultTextFrom(message) {
|
|
6
7
|
return message.content ?? '';
|
|
@@ -21,6 +22,7 @@ function embedMessages(config) {
|
|
|
21
22
|
}
|
|
22
23
|
const texts = messages.map(textFrom);
|
|
23
24
|
const signal = scope.$getEnv?.()?.signal;
|
|
25
|
+
const startedAt = Date.now();
|
|
24
26
|
let vectors;
|
|
25
27
|
if (embedder.embedBatch) {
|
|
26
28
|
vectors = (await embedder.embedBatch({
|
|
@@ -31,6 +33,20 @@ function embedMessages(config) {
|
|
|
31
33
|
else {
|
|
32
34
|
vectors = await Promise.all(texts.map((text) => embedder.embed({ text, ...(signal ? { signal } : {}) })));
|
|
33
35
|
}
|
|
36
|
+
// The INDEX-time half of the two-phase cost model (8.9.0). Embedding cost
|
|
37
|
+
// splits in two — this side scales with the size of what you store, and
|
|
38
|
+
// the query side scales with traffic — and telling them apart is the whole
|
|
39
|
+
// reason for a durable index. `agentfootprint.embedding.generated` has been
|
|
40
|
+
// declared since 2.x with an `inputKind` field and no emitter; this is one
|
|
41
|
+
// of its two.
|
|
42
|
+
(0, emitEmbedding_js_1.emitEmbedding)(scope, {
|
|
43
|
+
model: config.embedderId ?? embedder.id ?? 'unknown',
|
|
44
|
+
provider: 'custom',
|
|
45
|
+
inputKind: 'document',
|
|
46
|
+
dimension: embedder.dimensions,
|
|
47
|
+
count: vectors.length,
|
|
48
|
+
durationMs: Date.now() - startedAt,
|
|
49
|
+
});
|
|
34
50
|
scope.newMessageEmbeddings = vectors;
|
|
35
51
|
if (config.embedderId !== undefined) {
|
|
36
52
|
scope.newMessageEmbeddingModel = config.embedderId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedMessages.js","sourceRoot":"","sources":["../../../src/memory/embedding/embedMessages.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"embedMessages.js","sourceRoot":"","sources":["../../../src/memory/embedding/embedMessages.ts"],"names":[],"mappings":";;;AAwBA,yDAAmD;AAmCnD,mEAAmE;AACnE,SAAS,eAAe,CAAC,OAAgB;IACvC,OAAO,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAA2B;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC;IAEpD,OAAO,KAAK,EAAE,KAAqC,EAAiB,EAAE;QACpE,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAuB,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,OAAmB,CAAC;QACxB,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC;gBACnC,KAAK;gBACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAe,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CACzB,KAAK,CAAC,GAAG,CACP,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAsB,CACvF,CACF,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,4EAA4E;QAC5E,2EAA2E;QAC3E,cAAc;QACd,IAAA,gCAAa,EAAC,KAAK,EAAE;YACnB,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS;YACpD,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC,CAAC;QAEH,KAAK,CAAC,oBAAoB,GAAG,OAAO,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAjDD,sCAiDC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitEmbedding = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Fire the event when the scope has an emit channel, and do nothing when it
|
|
6
|
+
* does not.
|
|
7
|
+
*
|
|
8
|
+
* A memory pipeline can be mounted outside an Agent (`mountMemoryRead` on a
|
|
9
|
+
* bare flowchart), and a stage that threw because nobody was listening would
|
|
10
|
+
* make observability a requirement rather than an option.
|
|
11
|
+
*/
|
|
12
|
+
function emitEmbedding(scope, payload) {
|
|
13
|
+
const emitter = scope.$emit;
|
|
14
|
+
if (typeof emitter === 'function') {
|
|
15
|
+
emitter.call(scope, 'agentfootprint.embedding.generated', payload);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.emitEmbedding = emitEmbedding;
|
|
19
|
+
//# sourceMappingURL=emitEmbedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitEmbedding.js","sourceRoot":"","sources":["../../../src/memory/embedding/emitEmbedding.ts"],"names":[],"mappings":";;;AA4BA;;;;;;;GAOG;AACH,SAAgB,aAAa,CAC3B,KAAgE,EAChE,OAAkC;IAElC,MAAM,OAAO,GAAI,KAA8D,CAAC,KAAK,CAAC;IACtF,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AARD,sCAQC"}
|