agentfootprint 8.8.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/CLAUDE.md +3 -1
- 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/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/embedders/index.js +11 -0
- package/dist/esm/embedders/index.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/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/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.js +14 -0
- 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-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/hosting/sqliteSessions.js +10 -27
- package/dist/hosting/sqliteSessions.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/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 +14 -0
- 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-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/embedders/index.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/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/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.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-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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/sqliteUnavailable — the one refusal for "this Node has no `node:sqlite`".
|
|
3
|
+
*
|
|
4
|
+
* Pattern: leaf error type (imports nothing).
|
|
5
|
+
* Role: shared by `hosting/sqliteSessions` and `adapters/memory/sqliteVector`.
|
|
6
|
+
* It lives here rather than in either of them because two adapters
|
|
7
|
+
* hitting the same missing module must raise the same error: a
|
|
8
|
+
* consumer catching `SqliteUnavailableError` should not have to know
|
|
9
|
+
* which of our stores was being constructed, and two classes of one
|
|
10
|
+
* name is a duplicate type the build refuses anyway.
|
|
11
|
+
* Emits: N/A.
|
|
12
|
+
*
|
|
13
|
+
* Node 20 does not have the module at all; Node 22.5 through 22.12 have it
|
|
14
|
+
* behind `--experimental-sqlite`; Node 22.13+ and 23.4+ have it as-is (still
|
|
15
|
+
* marked experimental by Node, which is why it prints a warning on first use).
|
|
16
|
+
*
|
|
17
|
+
* The refusal names the version you are on and the three ways out, because
|
|
18
|
+
* "cannot find module 'node:sqlite'" out of a library's guts tells you what
|
|
19
|
+
* broke and nothing about what to do.
|
|
20
|
+
*
|
|
21
|
+
* **There is deliberately no fallback.** Each caller supplies its own last
|
|
22
|
+
* sentence saying what a silent fallback would have looked like from the
|
|
23
|
+
* outside, because that sentence is the argument — not decoration.
|
|
24
|
+
*/
|
|
25
|
+
const SESSIONS_CONTEXT = {
|
|
26
|
+
door: 'hosting',
|
|
27
|
+
factory: 'sqliteSessions()',
|
|
28
|
+
alternative: 'memorySessions() — which keeps conversations in a Map and loses them on restart, and says so in its name',
|
|
29
|
+
whyNotFallback: 'a store that silently forgot every conversation on restart looks, from the outside, exactly like a brand-new user',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Raised when `node:sqlite` is not available in the running Node.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* try {
|
|
37
|
+
* const store = sqliteVectorStore({ file: './corpus.db' });
|
|
38
|
+
* } catch (err) {
|
|
39
|
+
* if (err instanceof SqliteUnavailableError) {
|
|
40
|
+
* console.error(`Node ${err.nodeVersion} cannot do this`, err.message);
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export class SqliteUnavailableError extends Error {
|
|
46
|
+
code = 'ERR_SQLITE_UNAVAILABLE';
|
|
47
|
+
/** The Node version this process is running. */
|
|
48
|
+
nodeVersion;
|
|
49
|
+
constructor(nodeVersion, reason, context = SESSIONS_CONTEXT) {
|
|
50
|
+
super(`[${context.door}] ${context.factory} needs Node's built-in 'node:sqlite' module, and this ` +
|
|
51
|
+
`process (Node ${nodeVersion}) does not have it (${reason}). ` +
|
|
52
|
+
`That module ships with Node 22.5 and newer: on Node 22.13+ (and 23.4+) it is ` +
|
|
53
|
+
`available as-is, and on Node 22.5–22.12 it is behind --experimental-sqlite. ` +
|
|
54
|
+
`So: upgrade Node, add that flag, or use ${context.alternative}. ` +
|
|
55
|
+
`This refuses rather than falling back to memory on your behalf: ` +
|
|
56
|
+
`${context.whyNotFallback}.`);
|
|
57
|
+
this.name = 'SqliteUnavailableError';
|
|
58
|
+
this.nodeVersion = nodeVersion;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# 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,MAAM,OAAO,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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { emitEmbedding } from './emitEmbedding.js';
|
|
1
2
|
/** Default: extract plaintext from any supported content shape. */
|
|
2
3
|
function defaultTextFrom(message) {
|
|
3
4
|
return message.content ?? '';
|
|
@@ -18,6 +19,7 @@ export function embedMessages(config) {
|
|
|
18
19
|
}
|
|
19
20
|
const texts = messages.map(textFrom);
|
|
20
21
|
const signal = scope.$getEnv?.()?.signal;
|
|
22
|
+
const startedAt = Date.now();
|
|
21
23
|
let vectors;
|
|
22
24
|
if (embedder.embedBatch) {
|
|
23
25
|
vectors = (await embedder.embedBatch({
|
|
@@ -28,6 +30,20 @@ export function embedMessages(config) {
|
|
|
28
30
|
else {
|
|
29
31
|
vectors = await Promise.all(texts.map((text) => embedder.embed({ text, ...(signal ? { signal } : {}) })));
|
|
30
32
|
}
|
|
33
|
+
// The INDEX-time half of the two-phase cost model (8.9.0). Embedding cost
|
|
34
|
+
// splits in two — this side scales with the size of what you store, and
|
|
35
|
+
// the query side scales with traffic — and telling them apart is the whole
|
|
36
|
+
// reason for a durable index. `agentfootprint.embedding.generated` has been
|
|
37
|
+
// declared since 2.x with an `inputKind` field and no emitter; this is one
|
|
38
|
+
// of its two.
|
|
39
|
+
emitEmbedding(scope, {
|
|
40
|
+
model: config.embedderId ?? embedder.id ?? 'unknown',
|
|
41
|
+
provider: 'custom',
|
|
42
|
+
inputKind: 'document',
|
|
43
|
+
dimension: embedder.dimensions,
|
|
44
|
+
count: vectors.length,
|
|
45
|
+
durationMs: Date.now() - startedAt,
|
|
46
|
+
});
|
|
31
47
|
scope.newMessageEmbeddings = vectors;
|
|
32
48
|
if (config.embedderId !== undefined) {
|
|
33
49
|
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,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmCnD,mEAAmE;AACnE,SAAS,eAAe,CAAC,OAAgB;IACvC,OAAO,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,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,aAAa,CAAC,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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* emitEmbedding — one place that reports an embedding call.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: leaf helper over the emit channel.
|
|
5
|
+
* Role: memory/ layer. Both halves of the two-phase cost model go through
|
|
6
|
+
* it — `embedMessages` reports `'document'`, `loadRelevant` reports
|
|
7
|
+
* `'query'` — so the two can never drift into describing the same
|
|
8
|
+
* fact two different ways.
|
|
9
|
+
* Emits: `agentfootprint.embedding.generated`.
|
|
10
|
+
*
|
|
11
|
+
* ── Why this event matters more than it looks ───────────────────────────────
|
|
12
|
+
* Embedding cost is not one number. **Index time** embeds the corpus: it
|
|
13
|
+
* happens once, and its cost scales with how much you store. **Query time**
|
|
14
|
+
* embeds the user's question: it happens per retrieval, and its cost scales
|
|
15
|
+
* with traffic. `inputKind` is the field that separates them, and separating
|
|
16
|
+
* them is what makes "should this corpus live in a file?" a question with an
|
|
17
|
+
* arithmetic answer instead of a feeling.
|
|
18
|
+
*
|
|
19
|
+
* The payload has been declared since 2.x and nothing emitted it, so any
|
|
20
|
+
* dashboard built against it has been reading a flat line that meant "not
|
|
21
|
+
* wired", not "no cost".
|
|
22
|
+
*
|
|
23
|
+
* Telemetry rides the EMIT channel, never a commit payload — a cost report is
|
|
24
|
+
* an observation about a stage, not state the next stage reads.
|
|
25
|
+
*/
|
|
26
|
+
import type { TypedScope } from 'footprintjs';
|
|
27
|
+
import type { EmbeddingGeneratedPayload } from '../../events/payloads.js';
|
|
28
|
+
/**
|
|
29
|
+
* Fire the event when the scope has an emit channel, and do nothing when it
|
|
30
|
+
* does not.
|
|
31
|
+
*
|
|
32
|
+
* A memory pipeline can be mounted outside an Agent (`mountMemoryRead` on a
|
|
33
|
+
* bare flowchart), and a stage that threw because nobody was listening would
|
|
34
|
+
* make observability a requirement rather than an option.
|
|
35
|
+
*/
|
|
36
|
+
export declare function emitEmbedding(scope: TypedScope<Record<string, unknown>> | {
|
|
37
|
+
$emit?: unknown;
|
|
38
|
+
}, payload: EmbeddingGeneratedPayload): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fire the event when the scope has an emit channel, and do nothing when it
|
|
3
|
+
* does not.
|
|
4
|
+
*
|
|
5
|
+
* A memory pipeline can be mounted outside an Agent (`mountMemoryRead` on a
|
|
6
|
+
* bare flowchart), and a stage that threw because nobody was listening would
|
|
7
|
+
* make observability a requirement rather than an option.
|
|
8
|
+
*/
|
|
9
|
+
export function emitEmbedding(scope, payload) {
|
|
10
|
+
const emitter = scope.$emit;
|
|
11
|
+
if (typeof emitter === 'function') {
|
|
12
|
+
emitter.call(scope, 'agentfootprint.embedding.generated', payload);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# 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,MAAM,UAAU,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"}
|
|
@@ -2,6 +2,7 @@ import { identityNamespace } from '../identity/index.js';
|
|
|
2
2
|
import { fnv1a } from '../../lib/fnv1a.js';
|
|
3
3
|
import { chunkProvenance } from '../retrieval/provenance.js';
|
|
4
4
|
import { topK } from '../retrieval/topK.js';
|
|
5
|
+
import { emitEmbedding } from './emitEmbedding.js';
|
|
5
6
|
/**
|
|
6
7
|
* Default query extractor — last user message.
|
|
7
8
|
*
|
|
@@ -76,10 +77,23 @@ export function loadRelevant(config) {
|
|
|
76
77
|
return;
|
|
77
78
|
}
|
|
78
79
|
const signal = scope.$getEnv?.()?.signal;
|
|
80
|
+
const embedStartedAt = Date.now();
|
|
79
81
|
const queryVec = (await embedder.embed({
|
|
80
82
|
text,
|
|
81
83
|
...(signal ? { signal } : {}),
|
|
82
84
|
}));
|
|
85
|
+
// The QUERY-time half of the two-phase cost model (8.9.0): one embedding
|
|
86
|
+
// per retrieval, scaling with traffic rather than with corpus size. Paired
|
|
87
|
+
// with the `'document'` side in `embedMessages`, this is what makes the
|
|
88
|
+
// cost of a corpus a number you can read rather than one you estimate.
|
|
89
|
+
emitEmbedding(scope, {
|
|
90
|
+
model: config.embedderId ?? embedder.id ?? 'unknown',
|
|
91
|
+
provider: 'custom',
|
|
92
|
+
inputKind: 'query',
|
|
93
|
+
dimension: queryVec.length,
|
|
94
|
+
count: 1,
|
|
95
|
+
durationMs: Date.now() - embedStartedAt,
|
|
96
|
+
});
|
|
83
97
|
// store.search optional on MemoryStore but required when an embedder
|
|
84
98
|
// is configured (validated upstream by defineMemory).
|
|
85
99
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRelevant.js","sourceRoot":"","sources":["../../../../src/memory/embedding/loadRelevant.ts"],"names":[],"mappings":"AAmDA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"loadRelevant.js","sourceRoot":"","sources":["../../../../src/memory/embedding/loadRelevant.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ export function mockEmbedder(options = {}) {
|
|
|
17
17
|
}
|
|
18
18
|
return {
|
|
19
19
|
dimensions,
|
|
20
|
+
// Named like the others so a store can refuse the swap between a mock
|
|
21
|
+
// index and a real one — which is a swap worth refusing, since a corpus
|
|
22
|
+
// indexed by letter frequency and queried by meaning scores nothing.
|
|
23
|
+
id: 'mock',
|
|
20
24
|
async embed({ text }) {
|
|
21
25
|
return charFrequency(text, dimensions);
|
|
22
26
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockEmbedder.js","sourceRoot":"","sources":["../../../../src/memory/embedding/mockEmbedder.ts"],"names":[],"mappings":"AAeA,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4DAA4D,UAAU,GAAG,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,UAAU;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAa;YAC7B,OAAO,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAkB;YACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"mockEmbedder.js","sourceRoot":"","sources":["../../../../src/memory/embedding/mockEmbedder.ts"],"names":[],"mappings":"AAeA,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4DAA4D,UAAU,GAAG,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,UAAU;QACV,sEAAsE;QACtE,wEAAwE;QACxE,qEAAqE;QACrE,EAAE,EAAE,MAAM;QACV,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAa;YAC7B,OAAO,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAkB;YACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -35,6 +35,30 @@ export interface EmbedBatchArgs {
|
|
|
35
35
|
export interface Embedder {
|
|
36
36
|
/** Vector length. Constant per embedder instance. */
|
|
37
37
|
readonly dimensions: number;
|
|
38
|
+
/**
|
|
39
|
+
* Stable name of the embedding space this instance produces (8.9.0).
|
|
40
|
+
*
|
|
41
|
+
* Together with `dimensions` it forms the fingerprint a durable store
|
|
42
|
+
* records per vector — `'<id>@<dims>'` — and refuses on when it changes.
|
|
43
|
+
* Cosine similarity between two embedding spaces is not a weak signal; it
|
|
44
|
+
* is not a signal, and it comes back as a confident number in the same
|
|
45
|
+
* range as a real one. A store that can name the space can refuse the mix;
|
|
46
|
+
* one that cannot has to let it through.
|
|
47
|
+
*
|
|
48
|
+
* Optional, because an `Embedder` is a structural interface and every
|
|
49
|
+
* hand-written one predates this field. When it is absent the store falls
|
|
50
|
+
* back to comparing `dimensions` alone, which catches the arithmetically
|
|
51
|
+
* impossible case and not the merely wrong one.
|
|
52
|
+
*
|
|
53
|
+
* Every shipped embedder sets it, and it is what you pass as `embedderId`:
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* const embedder = staticEmbedder();
|
|
57
|
+
* await indexDocuments(store, embedder, docs, { embedderId: embedder.id });
|
|
58
|
+
* defineRAG({ id: 'docs', store, embedder, embedderId: embedder.id });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
readonly id?: string;
|
|
38
62
|
/** Embed a single text into a vector of length `dimensions`. */
|
|
39
63
|
embed(args: EmbedArgs): Promise<number[]>;
|
|
40
64
|
/**
|
|
@@ -38,4 +38,6 @@
|
|
|
38
38
|
*/
|
|
39
39
|
export { RedisStore, type RedisStoreOptions, type RedisLikeClient, type RedisLikePipeline, } from './adapters/memory/redis.js';
|
|
40
40
|
export { AgentCoreStore, UnreadableMemoryEntryError, type AgentCoreStoreOptions, type AgentCoreLikeClient, type AgentCoreEvent, type AgentCoreMemoryRecord, } from './adapters/memory/agentcore.js';
|
|
41
|
+
export { sqliteVectorStore, UnreadableIndexFileError, EmbedderMismatchError, type SqliteVectorStore, type SqliteVectorStoreOptions, type SqliteVectorDatabaseLike, type SqliteVectorStatementLike, type SqliteVectorModuleLike, } from './adapters/memory/sqliteVector.js';
|
|
42
|
+
export { SqliteUnavailableError } from './lib/sqliteUnavailable.js';
|
|
41
43
|
export { BedrockAgentMemory, type BedrockAgentMemoryOptions, type BedrockAgentMemoryLikeClient, type BedrockAgentSummary, } from './adapters/memory/bedrockAgentMemory.js';
|
|
@@ -41,6 +41,14 @@
|
|
|
41
41
|
// `ioredis` or `@aws-sdk/client-bedrock-agent-runtime`.
|
|
42
42
|
export { RedisStore, } from './adapters/memory/redis.js';
|
|
43
43
|
export { AgentCoreStore, UnreadableMemoryEntryError, } from './adapters/memory/agentcore.js';
|
|
44
|
+
// A durable vector index in one SQLite file — zero dependencies (node:sqlite is
|
|
45
|
+
// inside Node), exact search, and the corpus embedded once rather than on every
|
|
46
|
+
// restart. Lazy-loads `node:sqlite` at construction, so importing this barrel
|
|
47
|
+
// costs nothing for consumers who never build one.
|
|
48
|
+
export { sqliteVectorStore, UnreadableIndexFileError, EmbedderMismatchError, } from './adapters/memory/sqliteVector.js';
|
|
49
|
+
// The SAME refusal `sqliteSessions` raises for the same missing module — one
|
|
50
|
+
// class, so catching it does not require knowing which store was being built.
|
|
51
|
+
export { SqliteUnavailableError } from './lib/sqliteUnavailable.js';
|
|
44
52
|
// Read-only reader for the legacy Bedrock Agents auto session-summary memory.
|
|
45
53
|
// NOT a MemoryStore (Bedrock owns the writes) — see the class docstring.
|
|
46
54
|
export { BedrockAgentMemory, } from './adapters/memory/bedrockAgentMemory.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-providers.js","sourceRoot":"","sources":["../../src/memory-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,sEAAsE;AACtE,sEAAsE;AACtE,wDAAwD;AACxD,OAAO,EACL,UAAU,GAIX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,0BAA0B,GAK3B,MAAM,gCAAgC,CAAC;AAExC,8EAA8E;AAC9E,yEAAyE;AACzE,OAAO,EACL,kBAAkB,GAInB,MAAM,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"memory-providers.js","sourceRoot":"","sources":["../../src/memory-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,sEAAsE;AACtE,sEAAsE;AACtE,wDAAwD;AACxD,OAAO,EACL,UAAU,GAIX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,0BAA0B,GAK3B,MAAM,gCAAgC,CAAC;AAExC,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,mDAAmD;AACnD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GAMtB,MAAM,mCAAmC,CAAC;AAE3C,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,8EAA8E;AAC9E,yEAAyE;AACzE,OAAO,EACL,kBAAkB,GAInB,MAAM,yCAAyC,CAAC"}
|
package/dist/esm/observe.d.ts
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* • CostRecorder — token/USD spend
|
|
23
23
|
* • EvalRecorder — eval scores from `runner.emit('eval.*', ...)`
|
|
24
24
|
* • MemoryRecorder — memory injections + writes
|
|
25
|
+
* • EmbeddingRecorder — embedding cost, index-time vs query-time
|
|
25
26
|
* • PermissionRecorder — permission decisions + denials
|
|
26
27
|
* • SkillRecorder — skill activations
|
|
27
28
|
* • LoggingRecorder — structured log lines per event
|
|
@@ -46,6 +47,7 @@ export { toolsRecorder, type ToolsRecorderOptions } from './recorders/core/Tools
|
|
|
46
47
|
export { contextEvaluatedRecorder, type ContextEvaluatedRecorderOptions, } from './recorders/core/ContextEvaluatedRecorder.js';
|
|
47
48
|
export { evalRecorder, type EvalRecorderOptions } from './recorders/core/EvalRecorder.js';
|
|
48
49
|
export { memoryRecorder, type MemoryRecorderOptions } from './recorders/core/MemoryRecorder.js';
|
|
50
|
+
export { embeddingRecorder, type EmbeddingRecorderOptions, } from './recorders/core/EmbeddingRecorder.js';
|
|
49
51
|
export { permissionRecorder, type PermissionRecorderOptions, } from './recorders/core/PermissionRecorder.js';
|
|
50
52
|
export { skillRecorder, type SkillRecorderOptions } from './recorders/core/SkillRecorder.js';
|
|
51
53
|
export { resilienceRecorder, type ResilienceRecorderOptions, } from './recorders/core/ResilienceRecorder.js';
|
package/dist/esm/observe.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* • CostRecorder — token/USD spend
|
|
23
23
|
* • EvalRecorder — eval scores from `runner.emit('eval.*', ...)`
|
|
24
24
|
* • MemoryRecorder — memory injections + writes
|
|
25
|
+
* • EmbeddingRecorder — embedding cost, index-time vs query-time
|
|
25
26
|
* • PermissionRecorder — permission decisions + denials
|
|
26
27
|
* • SkillRecorder — skill activations
|
|
27
28
|
* • LoggingRecorder — structured log lines per event
|
|
@@ -59,6 +60,7 @@ export { toolsRecorder } from './recorders/core/ToolsRecorder.js';
|
|
|
59
60
|
export { contextEvaluatedRecorder, } from './recorders/core/ContextEvaluatedRecorder.js';
|
|
60
61
|
export { evalRecorder } from './recorders/core/EvalRecorder.js';
|
|
61
62
|
export { memoryRecorder } from './recorders/core/MemoryRecorder.js';
|
|
63
|
+
export { embeddingRecorder, } from './recorders/core/EmbeddingRecorder.js';
|
|
62
64
|
export { permissionRecorder, } from './recorders/core/PermissionRecorder.js';
|
|
63
65
|
export { skillRecorder } from './recorders/core/SkillRecorder.js';
|
|
64
66
|
// Provider-decorator telemetry (fallback.triggered / error.retried /
|
package/dist/esm/observe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAA+B,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,cAAc,EAA8B,MAAM,oCAAoC,CAAC;AAEhG,+BAA+B;AAC/B,OAAO,EACL,mBAAmB,GAEpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAkBjB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,GAQhB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,eAAe,EACf,cAAc,EACd,wBAAwB,GAQzB,MAAM,gDAAgD,CAAC;AAExD,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO,EACL,SAAS,GAIV,MAAM,wCAAwC,CAAC;AAEhD,8EAA8E;AAC9E,gFAAgF;AAChF,iEAAiE;AACjE,OAAO,EACL,cAAc,EACd,aAAa,EACb,gBAAgB,GAKjB,MAAM,oCAAoC,CAAC;AAE5C,mEAAmE;AACnE,4EAA4E;AAC5E,mDAAmD;AACnD,OAAO,EACL,wBAAwB,GAGzB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,oBAAoB,GAKrB,MAAM,gDAAgD,CAAC;AAExD,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAA4B,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EACL,wBAAwB,GAEzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,YAAY,EAA4B,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAA8B,MAAM,oCAAoC,CAAC;AAChG,OAAO,EACL,iBAAiB,GAElB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,kBAAkB,GAEnB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,qEAAqE;AACrE,0EAA0E;AAC1E,wEAAwE;AACxE,oDAAoD;AACpD,OAAO,EACL,kBAAkB,GAEnB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,aAAa,EACb,cAAc,GAIf,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,YAAY,GAGb,MAAM,6CAA6C,CAAC;AACrD,4EAA4E;AAC5E,gFAAgF;AAChF,OAAO,EACL,mBAAmB,GAMpB,MAAM,kDAAkD,CAAC;AAC1D,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EACL,kBAAkB,GAQnB,MAAM,yDAAyD,CAAC;AAEjE,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,kEAAkE;AAClE,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,wEAAwE;AACxE,cAAc,YAAY,CAAC;AAC3B,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAOnB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EACL,aAAa,EACb,cAAc,GAOf,MAAM,4CAA4C,CAAC;AAEpD,sEAAsE;AACtE,4EAA4E;AAC5E,+CAA+C;AAC/C,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,GACZ,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingRecorder — forwards `agentfootprint.embedding.*` emits to the dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Factory over EmitBridge.
|
|
5
|
+
* Role: Bridges the embedding domain — the two-phase cost model. Without a
|
|
6
|
+
* bridge an emit never reaches `agent.on(...)` no matter how correctly
|
|
7
|
+
* it is fired, which is the shape this domain was in until 8.9.0: it
|
|
8
|
+
* had a payload type, a registry entry and a `DomainWildcard` arm, and
|
|
9
|
+
* no way for the event to arrive.
|
|
10
|
+
* Emits: agentfootprint.embedding.generated
|
|
11
|
+
*
|
|
12
|
+
* Always-on and zero-cost: an agent with no memory pipeline embeds nothing and
|
|
13
|
+
* this bridge sees nothing.
|
|
14
|
+
*/
|
|
15
|
+
import { EmitBridge, type EmitBridgeOptions } from './EmitBridge.js';
|
|
16
|
+
export type EmbeddingRecorderOptions = Omit<EmitBridgeOptions, 'id' | 'prefix'> & {
|
|
17
|
+
readonly id?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function embeddingRecorder(options: EmbeddingRecorderOptions): EmitBridge;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingRecorder — forwards `agentfootprint.embedding.*` emits to the dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Factory over EmitBridge.
|
|
5
|
+
* Role: Bridges the embedding domain — the two-phase cost model. Without a
|
|
6
|
+
* bridge an emit never reaches `agent.on(...)` no matter how correctly
|
|
7
|
+
* it is fired, which is the shape this domain was in until 8.9.0: it
|
|
8
|
+
* had a payload type, a registry entry and a `DomainWildcard` arm, and
|
|
9
|
+
* no way for the event to arrive.
|
|
10
|
+
* Emits: agentfootprint.embedding.generated
|
|
11
|
+
*
|
|
12
|
+
* Always-on and zero-cost: an agent with no memory pipeline embeds nothing and
|
|
13
|
+
* this bridge sees nothing.
|
|
14
|
+
*/
|
|
15
|
+
import { EmitBridge } from './EmitBridge.js';
|
|
16
|
+
export function embeddingRecorder(options) {
|
|
17
|
+
return new EmitBridge({
|
|
18
|
+
id: options.id ?? 'agentfootprint.embedding-recorder',
|
|
19
|
+
prefix: 'agentfootprint.embedding.',
|
|
20
|
+
dispatcher: options.dispatcher,
|
|
21
|
+
getRunContext: options.getRunContext,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=EmbeddingRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingRecorder.js","sourceRoot":"","sources":["../../../../src/recorders/core/EmbeddingRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAMrE,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,OAAO,IAAI,UAAU,CAAC;QACpB,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,mCAAmC;QACrD,MAAM,EAAE,2BAA2B;QACnC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -58,37 +58,20 @@ exports.sqliteSessions = exports.UnreadableSessionFileError = exports.SqliteUnav
|
|
|
58
58
|
const envelope_js_1 = require("./envelope.js");
|
|
59
59
|
const errors_js_1 = require("./errors.js");
|
|
60
60
|
const lazyRequire_js_1 = require("../lib/lazyRequire.js");
|
|
61
|
+
const sqliteUnavailable_js_1 = require("../lib/sqliteUnavailable.js");
|
|
61
62
|
// ─── The refusals ────────────────────────────────────────────────────
|
|
62
63
|
/**
|
|
63
64
|
* Raised when `node:sqlite` is not available in the running Node.
|
|
64
65
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* broke and nothing about what to do.
|
|
66
|
+
* The class moved to `lib/sqliteUnavailable.ts` in 8.9.0 so the SQLite vector
|
|
67
|
+
* store raises the SAME error for the same missing module — a consumer
|
|
68
|
+
* catching it should not have to know which of our stores was being built.
|
|
69
|
+
* Constructed with no third argument it produces exactly the message it always
|
|
70
|
+
* did, and it is re-exported here under its own name, so nothing that imports
|
|
71
|
+
* it from this module changes.
|
|
72
72
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
/** The Node version this process is running. */
|
|
76
|
-
nodeVersion;
|
|
77
|
-
constructor(nodeVersion, reason) {
|
|
78
|
-
super(`[hosting] sqliteSessions() needs Node's built-in 'node:sqlite' module, and this ` +
|
|
79
|
-
`process (Node ${nodeVersion}) does not have it (${reason}). ` +
|
|
80
|
-
`That module ships with Node 22.5 and newer: on Node 22.13+ (and 23.4+) it is ` +
|
|
81
|
-
`available as-is, and on Node 22.5–22.12 it is behind --experimental-sqlite. ` +
|
|
82
|
-
`So: upgrade Node, add that flag, or use memorySessions() — which keeps ` +
|
|
83
|
-
`conversations in a Map and loses them on restart, and says so in its name. ` +
|
|
84
|
-
`This refuses rather than falling back to memory on your behalf: a store that ` +
|
|
85
|
-
`silently forgot every conversation on restart looks, from the outside, exactly ` +
|
|
86
|
-
`like a brand-new user.`);
|
|
87
|
-
this.name = 'SqliteUnavailableError';
|
|
88
|
-
this.nodeVersion = nodeVersion;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
exports.SqliteUnavailableError = SqliteUnavailableError;
|
|
73
|
+
var sqliteUnavailable_js_2 = require("../lib/sqliteUnavailable.js");
|
|
74
|
+
Object.defineProperty(exports, "SqliteUnavailableError", { enumerable: true, get: function () { return sqliteUnavailable_js_2.SqliteUnavailableError; } });
|
|
92
75
|
/**
|
|
93
76
|
* Raised when the file exists but this runtime cannot use it as a session
|
|
94
77
|
* store.
|
|
@@ -296,7 +279,7 @@ function loadSqlite() {
|
|
|
296
279
|
return mod.DatabaseSync;
|
|
297
280
|
}
|
|
298
281
|
catch (err) {
|
|
299
|
-
throw new SqliteUnavailableError(nodeVersion(), describe(err));
|
|
282
|
+
throw new sqliteUnavailable_js_1.SqliteUnavailableError(nodeVersion(), describe(err));
|
|
300
283
|
}
|
|
301
284
|
}
|
|
302
285
|
/** The version string, without assuming `process` exists. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqliteSessions.js","sourceRoot":"","sources":["../../src/hosting/sqliteSessions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;;;AAEH,+CAA8C;AAC9C,2CAAsD;AACtD,0DAAoD;
|
|
1
|
+
{"version":3,"file":"sqliteSessions.js","sourceRoot":"","sources":["../../src/hosting/sqliteSessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|