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
|
@@ -82,6 +82,16 @@ function buildSystemPromptSlot(config) {
|
|
|
82
82
|
sourceId: inj.id,
|
|
83
83
|
reason: inj.description ?? `${inj.flavor} '${inj.id}' active`,
|
|
84
84
|
rawContent: promptContent,
|
|
85
|
+
// Retrieval provenance (8.8.0) — present only when a retrieval
|
|
86
|
+
// produced this injection. These are the payload's declared
|
|
87
|
+
// `retrievalScore` / `rankPosition` / `threshold`, written for
|
|
88
|
+
// the first time; before the recall was split per chunk there
|
|
89
|
+
// was no single score a record could honestly carry.
|
|
90
|
+
...(inj.retrieval !== undefined && {
|
|
91
|
+
retrievalScore: inj.retrieval.score,
|
|
92
|
+
rankPosition: inj.retrieval.rank,
|
|
93
|
+
...(inj.retrieval.threshold !== undefined && { threshold: inj.retrieval.threshold }),
|
|
94
|
+
}),
|
|
85
95
|
});
|
|
86
96
|
}
|
|
87
97
|
scope.$setValue(conventions_js_1.INJECTION_KEYS.SYSTEM_PROMPT, injections);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSystemPromptSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildSystemPromptSlot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,6CAAwC;AAExC,yDAAsD;AAEtD,4DAAiE;AAEjE,6CAAiG;AA6CjG;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CAAC,MAA8B;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,sBAAsB,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,0EAA0E;IAC1E,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO,IAAA,uBAAS,EACd,SAAS,EACT,KAAK,EAAE,KAA2C,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAwB,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAEtF,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,+DAA+D;QAC/D,gEAAgE;QAChE,6DAA6D;QAC7D,8DAA8D;QAC9D,+DAA+D;QAC/D,0BAA0B;QAC1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC;gBACd,cAAc,EAAE,IAAA,qBAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC;gBACtC,WAAW,EAAE,IAAA,kBAAK,EAAC,MAAM,QAAQ,EAAE,CAAC;gBACpC,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,MAAM;gBACd,MAAM;gBACN,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,2DAA2D;QAC3D,kEAAkE;QAClE,8DAA8D;QAC9D,mEAAmE;QACnE,sDAAsD;QACtD,MAAM,gBAAgB,GACnB,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAA4C,IAAI,EAAE,CAAC;QACxF,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC3D,mEAAmE;YACnE,8DAA8D;YAC9D,kEAAkE;YAClE,gEAAgE;YAChE,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW;gBAAE,SAAS;YACxE,UAAU,CAAC,IAAI,CAAC;gBACd,cAAc,EAAE,IAAA,qBAAQ,EAAC,aAAa,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,IAAA,kBAAK,EAAC,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,aAAa,EAAE,CAAC;gBACjE,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,UAAU;gBAC7D,UAAU,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"buildSystemPromptSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildSystemPromptSlot.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.formatOverflowWarning = exports.slotOverflow = exports.composeSlot = exports.breakdown = exports.truncate = exports.fnv1a = void 0;
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Non-cryptographic stable hash — sufficient for InjectionRecord dedup.
|
|
13
|
+
*
|
|
14
|
+
* The implementation moved to `lib/fnv1a.ts` in 8.8.0 so the memory
|
|
15
|
+
* layer's retrieval record can hash the same way without importing
|
|
16
|
+
* `core/` (which imports `memory/` — the cycle is why a second copy was
|
|
17
|
+
* the alternative). Re-exported here under the same name: every existing
|
|
18
|
+
* importer of `helpers.fnv1a` is untouched, and there is still exactly
|
|
19
|
+
* one implementation.
|
|
20
|
+
*/
|
|
21
|
+
var fnv1a_js_1 = require("../../lib/fnv1a.js");
|
|
22
|
+
Object.defineProperty(exports, "fnv1a", { enumerable: true, get: function () { return fnv1a_js_1.fnv1a; } });
|
|
21
23
|
/** Truncate with ellipsis for contentSummary fields. */
|
|
22
24
|
function truncate(s, n) {
|
|
23
25
|
if (s.length <= n)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/core/slots/helpers.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AASH
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/core/slots/helpers.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AASH;;;;;;;;;GASG;AACH,+CAA2C;AAAlC,iGAAA,KAAK,OAAA;AAEd,wDAAwD;AACxD,SAAgB,QAAQ,CAAC,CAAS,EAAE,CAAS;IAC3C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACjC,CAAC;AAHD,4BAGC;AAED,gFAAgF;AAChF,SAAgB,SAAS,CACvB,UAAsC;IAEtC,MAAM,GAAG,GAAqE,EAAE,CAAC;IACjF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;gBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,KAAK;gBAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;aAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAjBD,8BAiBC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CACzB,IAAiB,EACjB,SAAiB,EACjB,UAAsC,EACtC,SAAiB,EACjB,gBAAyB,EACzB,OAAyD;IAEzD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EACnE,CAAC,CACF,CAAC;IACF,OAAO;QACL,IAAI;QACJ,SAAS;QACT,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE;QAC9E,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC;QACtC,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAC3D,YAAY,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACjC,gBAAgB,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;KAC3C,CAAC;AACJ,CAAC;AArBD,kCAqBC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,WAA4B;IACvD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,SAAS,EAAE,GAAG;QACd,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI,GAAG,GAAG;QACtB,UAAU,EAAE,MAAM;KACnB,CAAC;AACJ,CAAC;AAVD,oCAUC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IASrC;IACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpE,OAAO,CACL,oBAAoB,QAAQ,CAAC,IAAI,qBAAqB;QACtD,GAAG,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,SAAS,YAAY,QAAQ,CAAC,UAAU,KAAK;QACrF,GAAG,SAAS,IAAI,QAAQ,yCAAyC,WAAW,aAAa;QACzF,0DAA0D,MAAM,EAAE,CACnE,CAAC;AACJ,CAAC;AAjBD,sDAiBC"}
|
package/dist/embedders/index.js
CHANGED
|
@@ -85,6 +85,12 @@ function openaiEmbedder(options = {}) {
|
|
|
85
85
|
}
|
|
86
86
|
return {
|
|
87
87
|
dimensions,
|
|
88
|
+
// The embedding SPACE, not the instance: two `openaiEmbedder()` calls with
|
|
89
|
+
// the same model produce interchangeable vectors, and a store must treat
|
|
90
|
+
// them as one index. The SIZE is deliberately not in here — a store's
|
|
91
|
+
// fingerprint is `'<id>@<dims>'`, so it appends the dimensions itself and
|
|
92
|
+
// a truncated vector is already a different fingerprint from a native one.
|
|
93
|
+
id: `openai:${model}`,
|
|
88
94
|
async embed({ text, signal }) {
|
|
89
95
|
return (await call([text], signal))[0];
|
|
90
96
|
},
|
|
@@ -118,6 +124,10 @@ function localEmbedder(options = {}) {
|
|
|
118
124
|
};
|
|
119
125
|
return {
|
|
120
126
|
dimensions,
|
|
127
|
+
// `dtype` is part of the name because a q8 and an fp32 build of one model
|
|
128
|
+
// are close but not identical spaces, and "close" is exactly the kind of
|
|
129
|
+
// difference that shows up as a mysteriously worse ranking.
|
|
130
|
+
id: `local:${model}:${dtype}`,
|
|
121
131
|
async embed({ text }) {
|
|
122
132
|
const p = await getPipe();
|
|
123
133
|
const out = await p(text, { pooling: 'mean', normalize: true });
|
|
@@ -173,6 +183,7 @@ function staticEmbedder(options = {}) {
|
|
|
173
183
|
};
|
|
174
184
|
return {
|
|
175
185
|
dimensions,
|
|
186
|
+
id: `static:${spec}`,
|
|
176
187
|
async embed({ text }) {
|
|
177
188
|
const fn = await getEmbed();
|
|
178
189
|
const rows = toRows(await fn([text]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAqC;IAC1D,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAgB,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,wBAAwB,CAAC;IACxD,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IACrC,MAAM,UAAU,GAAG,SAAS,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,8CAA8C;YACnF,wFAAwF;YACxF,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,2BAA2B,aAAa,CAAC;IAE3E,KAAK,UAAU,IAAI,CAAC,KAAwB,EAAE,MAAoB;QAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;YAClF,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CACrF;YACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,UAAU;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* adapters/memory/sqliteVector — a corpus in a file, so you embed it once.
|
|
3
|
+
*
|
|
4
|
+
* `InMemoryStore` is a `Map`, and its cost is the one nobody notices until the
|
|
5
|
+
* bill arrives: **restart the process and the whole corpus is re-embedded.**
|
|
6
|
+
* That is fine for three documents and absurd for ten thousand. The step up was
|
|
7
|
+
* "bring a vector database", and the step between those two — *one machine, one
|
|
8
|
+
* file, nothing to install* — was a store every consumer had to write for
|
|
9
|
+
* themselves. This is that store.
|
|
10
|
+
*
|
|
11
|
+
* ── The two-phase cost model this exists to fix ─────────────────────────────
|
|
12
|
+
* **Index time** embeds the corpus. It happens once, in its own process, and
|
|
13
|
+
* its cost scales with the size of your documents. **Query time** embeds one
|
|
14
|
+
* thing — the user's question — per retrieval, and its cost scales with
|
|
15
|
+
* traffic. A 10,000-chunk corpus is 10,000 embeddings *once* and one embedding
|
|
16
|
+
* per question thereafter. With a `Map` it is 10,000 embeddings *per restart*.
|
|
17
|
+
* That is the whole argument for a file.
|
|
18
|
+
*
|
|
19
|
+
* ── Exact search, and the ceiling said out loud ─────────────────────────────
|
|
20
|
+
* Vectors live in SQLite as `Float32Array` blobs. On the first search of a
|
|
21
|
+
* namespace they are hydrated into ONE resident `Float32Array` matrix,
|
|
22
|
+
* normalised, and every later query is an exact dot product across it. There is
|
|
23
|
+
* **no approximate index and no pretence of one**: this returns the true top-K,
|
|
24
|
+
* or it does not answer.
|
|
25
|
+
*
|
|
26
|
+
* Measured against THIS implementation on Node 22.16, Apple silicon, one
|
|
27
|
+
* namespace, median of five queries:
|
|
28
|
+
*
|
|
29
|
+
* | corpus | query | resident matrix | file | first search (hydration) |
|
|
30
|
+
* |---|---|---|---|---|
|
|
31
|
+
* | 10,000 × 384-d | 6 ms | 15 MB | 21 MB | 45 ms |
|
|
32
|
+
* | 50,000 × 384-d | 31 ms | 77 MB | 105 MB | 251 ms |
|
|
33
|
+
* | 100,000 × 384-d | 65 ms | 154 MB | 211 MB | 939 ms |
|
|
34
|
+
* | 10,000 × 1536-d | 16 ms | 61 MB | 83 MB | 122 ms |
|
|
35
|
+
* | 50,000 × 1536-d | 89 ms | 307 MB | 413 MB | **5.7 s** |
|
|
36
|
+
*
|
|
37
|
+
* **The documented ceiling is 50,000 chunks.** Below it, every query is under
|
|
38
|
+
* 100 ms at every embedder this library ships and the resident matrix is under
|
|
39
|
+
* ~300 MB. It degrades linearly and predictably to about 100,000. Above that,
|
|
40
|
+
* or when the process cannot hold the matrix, move to a managed vector database
|
|
41
|
+
* — `MemoryStore` is the seam, and nothing else in your code changes. For scale
|
|
42
|
+
* intuition: 50,000 chunks at ~1,000 characters is roughly 50 MB of text, on
|
|
43
|
+
* the order of 25,000 pages.
|
|
44
|
+
*
|
|
45
|
+
* **Hydration is the number to plan around, not the query.** Steady-state
|
|
46
|
+
* search is fast everywhere in that table; reading the vectors off disk the
|
|
47
|
+
* FIRST time is what costs, and at 50,000 × 1536 it is 5.7 seconds. Paid
|
|
48
|
+
* lazily, that lands on whoever asks the first question after a deploy. Call
|
|
49
|
+
* {@link SqliteVectorStore.warm} at boot to pay it somewhere you chose — see
|
|
50
|
+
* that method. Smaller vectors are dramatically cheaper here: 384 dimensions
|
|
51
|
+
* hydrates 100,000 chunks in under a second, which is one more reason a
|
|
52
|
+
* 384-dimension embedder is the better default for a corpus this size.
|
|
53
|
+
*
|
|
54
|
+
* A loadable extension (sqlite-vec) was measured against this and deliberately
|
|
55
|
+
* NOT taken: it is roughly 2× faster at these sizes, and costs a native binary
|
|
56
|
+
* on a five-platform matrix (no musl, no Windows/arm64) plus a pre-1.0
|
|
57
|
+
* dependency. Two times, at sizes where we are already under 100 ms, does not
|
|
58
|
+
* buy that.
|
|
59
|
+
*
|
|
60
|
+
* ── One process on one machine ──────────────────────────────────────────────
|
|
61
|
+
* The same ceiling `sqliteSessions` states, for the same reason. It survives a
|
|
62
|
+
* restart, a crash, a deploy. It is NOT distributed. WAL gives one writer and
|
|
63
|
+
* many readers at once; a second writer waits up to `busyTimeoutMs` and then
|
|
64
|
+
* fails loudly rather than queueing forever.
|
|
65
|
+
*
|
|
66
|
+
* ── Zero dependencies, and the version floor that buys ──────────────────────
|
|
67
|
+
* SQLite is *inside Node* — no install, no native build, no peer dependency.
|
|
68
|
+
* The price is a version floor this package does not otherwise have, so the
|
|
69
|
+
* module is loaded when you actually construct a store and its absence is
|
|
70
|
+
* refused by name. There is deliberately **no fallback to memory**: a corpus
|
|
71
|
+
* that silently forgot every document on restart looks, from the outside,
|
|
72
|
+
* exactly like a corpus that was never built.
|
|
73
|
+
*/
|
|
74
|
+
import type { MemoryIdentity } from '../../memory/identity/index.js';
|
|
75
|
+
import type { MemoryStore } from '../../memory/store/types.js';
|
|
76
|
+
/** One prepared statement, as this adapter calls it. */
|
|
77
|
+
export interface SqliteVectorStatementLike {
|
|
78
|
+
run(...params: readonly unknown[]): unknown;
|
|
79
|
+
get(...params: readonly unknown[]): unknown;
|
|
80
|
+
all(...params: readonly unknown[]): unknown[];
|
|
81
|
+
}
|
|
82
|
+
/** One open database, as this adapter calls it. */
|
|
83
|
+
export interface SqliteVectorDatabaseLike {
|
|
84
|
+
exec(sql: string): void;
|
|
85
|
+
prepare(sql: string): SqliteVectorStatementLike;
|
|
86
|
+
close(): void;
|
|
87
|
+
}
|
|
88
|
+
/** The shape of `node:sqlite` this adapter needs, declared locally. */
|
|
89
|
+
export interface SqliteVectorModuleLike {
|
|
90
|
+
new (path: string): SqliteVectorDatabaseLike;
|
|
91
|
+
}
|
|
92
|
+
export interface SqliteVectorStoreOptions {
|
|
93
|
+
/**
|
|
94
|
+
* The database file. Created if it does not exist, along with its parent
|
|
95
|
+
* directory — "no infrastructure" would be a thin promise if you still had
|
|
96
|
+
* to `mkdir` first.
|
|
97
|
+
*
|
|
98
|
+
* `':memory:'` is refused: it looks like a file, keeps nothing across a
|
|
99
|
+
* restart, and re-embedding the corpus on every boot is the exact cost this
|
|
100
|
+
* store exists to remove. Use `InMemoryStore` when that is what you want —
|
|
101
|
+
* it says so in its name.
|
|
102
|
+
*/
|
|
103
|
+
readonly file: string;
|
|
104
|
+
/**
|
|
105
|
+
* How long a write waits for another writer's lock before failing, in
|
|
106
|
+
* milliseconds. Default 5000. It fails rather than waiting forever on
|
|
107
|
+
* purpose: a request hung on a lock looks exactly like a slow model, and the
|
|
108
|
+
* two need different fixes.
|
|
109
|
+
*/
|
|
110
|
+
readonly busyTimeoutMs?: number;
|
|
111
|
+
/**
|
|
112
|
+
* @internal Test seam only — the `node:sqlite` module, injected. Not public
|
|
113
|
+
* API, not supported, and not a place to plug in another SQLite driver.
|
|
114
|
+
*/
|
|
115
|
+
readonly _sqlite?: SqliteVectorModuleLike;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Raised when the file exists but this runtime cannot use it as a vector index.
|
|
119
|
+
*
|
|
120
|
+
* The law `sqliteSessions` states for a session file, one domain over: **an
|
|
121
|
+
* unreadable index and an empty one are different facts, and only one of them
|
|
122
|
+
* is safe to answer with "no matches".** A store that opened a corrupt file as
|
|
123
|
+
* an empty database would answer every question from the model's own weights
|
|
124
|
+
* and log nothing.
|
|
125
|
+
*
|
|
126
|
+
* `problem` is the fact to branch on:
|
|
127
|
+
*
|
|
128
|
+
* - `'cannot-open'` — not a SQLite database, or not readable.
|
|
129
|
+
* - `'not-our-schema'` — a database whose `af_vectors` table is somebody
|
|
130
|
+
* else's table of that name. Point the store at its own file.
|
|
131
|
+
* - `'newer-schema'` — written by a newer agentfootprint than this one.
|
|
132
|
+
*/
|
|
133
|
+
export declare class UnreadableIndexFileError extends Error {
|
|
134
|
+
readonly code: "ERR_UNREADABLE_INDEX_FILE";
|
|
135
|
+
/** The file that was refused. */
|
|
136
|
+
readonly file: string;
|
|
137
|
+
/** Which of the three cases this is. */
|
|
138
|
+
readonly problem: 'cannot-open' | 'not-our-schema' | 'newer-schema';
|
|
139
|
+
constructor(file: string, problem: UnreadableIndexFileError['problem'], detail: string);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Raised when a vector meets an index built by a different embedder.
|
|
143
|
+
*
|
|
144
|
+
* **This is the refusal that keeps the store honest.** Cosine similarity between
|
|
145
|
+
* two different embedding spaces is not a weak signal — it is not a signal at
|
|
146
|
+
* all, and it comes back as a confident number in the same 0-to-1 range as a
|
|
147
|
+
* real one. There is no threshold that separates them, and nothing downstream
|
|
148
|
+
* can tell them apart. So the mismatch is refused where it happens, on both
|
|
149
|
+
* sides:
|
|
150
|
+
*
|
|
151
|
+
* - at **write**, so a second embedder's vectors never enter a namespace;
|
|
152
|
+
* - at **query**, so a swapped embedder never scores against the old ones.
|
|
153
|
+
*
|
|
154
|
+
* The named fix is an explicit re-index — delete the namespace and build it
|
|
155
|
+
* again with one embedder, or point the retriever at a different file. It is
|
|
156
|
+
* never a fallback: silently ignoring the mismatch is the failure, and silently
|
|
157
|
+
* re-embedding somebody's corpus is a bill they did not agree to.
|
|
158
|
+
*
|
|
159
|
+
* `problem` says which half is wrong. `'dimensions'` is arithmetically
|
|
160
|
+
* impossible to score at all; `'model'` would score, and lie.
|
|
161
|
+
*/
|
|
162
|
+
export declare class EmbedderMismatchError extends Error {
|
|
163
|
+
readonly code: "ERR_EMBEDDER_MISMATCH";
|
|
164
|
+
/** The fingerprint the namespace was built with, `'<id>@<dims>'`. */
|
|
165
|
+
readonly indexed: string;
|
|
166
|
+
/** The fingerprint that just arrived. */
|
|
167
|
+
readonly incoming: string;
|
|
168
|
+
/** Which half disagrees. */
|
|
169
|
+
readonly problem: 'dimensions' | 'model';
|
|
170
|
+
constructor(namespace: string, indexed: string, incoming: string, problem: EmbedderMismatchError['problem'], operation: 'write to' | 'search');
|
|
171
|
+
}
|
|
172
|
+
/** A durable vector store, plus the three things a file owns beyond the port. */
|
|
173
|
+
export interface SqliteVectorStore extends MemoryStore {
|
|
174
|
+
/**
|
|
175
|
+
* The journalling mode the file **actually has**, read back from SQLite
|
|
176
|
+
* rather than assumed from what was asked for.
|
|
177
|
+
*
|
|
178
|
+
* Normally `'wal'`. Something else when the file lives where WAL cannot work
|
|
179
|
+
* — a network filesystem is the usual reason — and that is a fact worth being
|
|
180
|
+
* able to read: the store still works, with one writer *or* one reader at a
|
|
181
|
+
* time instead of both. A silent downgrade is only ever discovered under load.
|
|
182
|
+
*/
|
|
183
|
+
readonly journalMode: string;
|
|
184
|
+
/** The file this store is backed by. */
|
|
185
|
+
readonly file: string;
|
|
186
|
+
/**
|
|
187
|
+
* The embedder fingerprint (`'<id>@<dims>'`) a namespace was built with, or
|
|
188
|
+
* `undefined` when nothing with a vector has been written to it yet.
|
|
189
|
+
*
|
|
190
|
+
* Read this before an embedder swap: it is the fact `EmbedderMismatchError`
|
|
191
|
+
* refuses on, available up front instead of at the first failed write.
|
|
192
|
+
*/
|
|
193
|
+
fingerprintOf(identity: MemoryIdentity): string | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Read a namespace's vectors into memory NOW, and report how many and how
|
|
196
|
+
* long it took.
|
|
197
|
+
*
|
|
198
|
+
* The first search of a namespace pays for hydration — 251 ms for 50,000
|
|
199
|
+
* 384-dimension vectors, 5.7 s for 50,000 at 1536. Left alone that bill
|
|
200
|
+
* lands on whoever asks the first question after a deploy, which is the
|
|
201
|
+
* worst possible person to hand it to and the hardest latency to explain
|
|
202
|
+
* afterwards.
|
|
203
|
+
*
|
|
204
|
+
* Calling this at boot moves the cost somewhere you chose. It is optional,
|
|
205
|
+
* idempotent, and changes no result: a warmed store and a cold one answer
|
|
206
|
+
* identically, one of them just answers the first question faster.
|
|
207
|
+
*
|
|
208
|
+
* ```ts
|
|
209
|
+
* const store = sqliteVectorStore({ file: './corpus.db' });
|
|
210
|
+
* const { count, durationMs } = await store.warm({ conversationId: '_global' });
|
|
211
|
+
* console.log(`corpus ready: ${count} vectors in ${durationMs}ms`);
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
warm(identity: MemoryIdentity): Promise<{
|
|
215
|
+
count: number;
|
|
216
|
+
durationMs: number;
|
|
217
|
+
}>;
|
|
218
|
+
/**
|
|
219
|
+
* Close the file. Idempotent — a shutdown hook and an explicit close can
|
|
220
|
+
* coexist. Reading or writing afterwards refuses by name rather than
|
|
221
|
+
* reopening behind your back.
|
|
222
|
+
*/
|
|
223
|
+
close(): void;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Open (or create) a vector index in one SQLite file.
|
|
227
|
+
*
|
|
228
|
+
* @throws SqliteUnavailableError when the running Node has no `node:sqlite`.
|
|
229
|
+
* @throws UnreadableIndexFileError when the file exists but cannot be used —
|
|
230
|
+
* never answered with an empty index.
|
|
231
|
+
* @throws EmbedderMismatchError from `put`/`putMany`/`search` when a vector
|
|
232
|
+
* meets a namespace built by a different embedder.
|
|
233
|
+
*
|
|
234
|
+
* @example Embed the corpus once, ever
|
|
235
|
+
* ```ts
|
|
236
|
+
* import { indexDocuments, defineRAG } from 'agentfootprint';
|
|
237
|
+
* import { sqliteVectorStore } from 'agentfootprint/memory';
|
|
238
|
+
* import { staticEmbedder } from 'agentfootprint/providers';
|
|
239
|
+
*
|
|
240
|
+
* const store = sqliteVectorStore({ file: './corpus.db' });
|
|
241
|
+
* const embedder = staticEmbedder();
|
|
242
|
+
*
|
|
243
|
+
* // First boot indexes; every boot after this one finds the vectors already there.
|
|
244
|
+
* await indexDocuments(store, embedder, docs, { embedderId: embedder.id });
|
|
245
|
+
*
|
|
246
|
+
* const agent = Agent.create({ provider })
|
|
247
|
+
* .rag(defineRAG({ id: 'docs', store, embedder, embedderId: embedder.id }))
|
|
248
|
+
* .build();
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export declare function sqliteVectorStore(options: SqliteVectorStoreOptions): SqliteVectorStore;
|