@plurnk/plurnk-service 1.2.0 → 1.3.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/.env.defaults +7 -5
- package/README.md +16 -13
- package/SPEC.md +72 -130
- package/dist/build-info.d.ts +11 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +45 -0
- package/dist/build-info.js.map +1 -0
- package/dist/build-info.json +1 -0
- package/dist/content/index.js +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/line-marker.js +1 -1
- package/dist/content/line-marker.js.map +1 -1
- package/dist/content/matcher.js +4 -4
- package/dist/content/matcher.js.map +1 -1
- package/dist/content/mimetype-binary.js +1 -1
- package/dist/content/mimetype-binary.js.map +1 -1
- package/dist/content/path-mimetype.js +1 -1
- package/dist/content/path-mimetype.js.map +1 -1
- package/dist/core/ChannelWrite.d.ts +2 -1
- package/dist/core/ChannelWrite.d.ts.map +1 -1
- package/dist/core/ChannelWrite.js +6 -19
- package/dist/core/ChannelWrite.js.map +1 -1
- package/dist/core/ChannelWrite.sql +2 -7
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +92 -23
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/Engine.d.ts +9 -0
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +126 -30
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Engine.sql +8 -6
- package/dist/core/PacketBuilder.js +1 -1
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PluginLoader.d.ts +1 -0
- package/dist/core/PluginLoader.d.ts.map +1 -1
- package/dist/core/PluginLoader.js +22 -11
- package/dist/core/PluginLoader.js.map +1 -1
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +11 -6
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/ProviderInstantiate.d.ts +1 -0
- package/dist/core/ProviderInstantiate.d.ts.map +1 -1
- package/dist/core/ProviderInstantiate.js +8 -0
- package/dist/core/ProviderInstantiate.js.map +1 -1
- package/dist/core/SchemeRegistry.d.ts +3 -1
- package/dist/core/SchemeRegistry.d.ts.map +1 -1
- package/dist/core/SchemeRegistry.js +18 -11
- package/dist/core/SchemeRegistry.js.map +1 -1
- package/dist/core/caps/DbEntryCaps.d.ts +6 -5
- package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
- package/dist/core/caps/DbEntryCaps.js +36 -14
- package/dist/core/caps/DbEntryCaps.js.map +1 -1
- package/dist/core/caps/DbProjectionCaps.d.ts +11 -0
- package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -0
- package/dist/core/caps/DbProjectionCaps.js +19 -0
- package/dist/core/caps/DbProjectionCaps.js.map +1 -0
- package/dist/core/caps/DbSubscriptionCaps.d.ts +3 -1
- package/dist/core/caps/DbSubscriptionCaps.d.ts.map +1 -1
- package/dist/core/caps/DbSubscriptionCaps.js +12 -3
- package/dist/core/caps/DbSubscriptionCaps.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +18 -4
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +26 -12
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/fork.sql +4 -4
- package/dist/core/git-membership.d.ts.map +1 -1
- package/dist/core/git-membership.js +23 -0
- package/dist/core/git-membership.js.map +1 -1
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +3 -2
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/path-decode.d.ts +1 -0
- package/dist/core/path-decode.d.ts.map +1 -1
- package/dist/core/path-decode.js +1 -0
- package/dist/core/path-decode.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +5 -3
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/resolveForLoop.js +1 -1
- package/dist/core/resolveForLoop.js.map +1 -1
- package/dist/core/results.js +2 -2
- package/dist/core/results.js.map +1 -1
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/core/scheme-types.js +1 -1
- package/dist/core/scheme-types.js.map +1 -1
- package/dist/core/search-gate.js +2 -2
- package/dist/core/search-gate.js.map +1 -1
- package/dist/digest/Digest.d.ts.map +1 -1
- package/dist/digest/Digest.js +79 -8
- package/dist/digest/Digest.js.map +1 -1
- package/dist/digest/digest.sql +1 -1
- package/dist/schemes/Exec.d.ts +2 -4
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +41 -11
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +1 -0
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +20 -0
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Prompt.d.ts +6 -7
- package/dist/schemes/Prompt.d.ts.map +1 -1
- package/dist/schemes/Prompt.js +4 -5
- package/dist/schemes/Prompt.js.map +1 -1
- package/dist/schemes/Skill.d.ts +7 -9
- package/dist/schemes/Skill.d.ts.map +1 -1
- package/dist/schemes/Skill.js +5 -7
- package/dist/schemes/Skill.js.map +1 -1
- package/dist/schemes/Worker.d.ts.map +1 -1
- package/dist/schemes/Worker.js +1 -0
- package/dist/schemes/Worker.js.map +1 -1
- package/dist/schemes/_entry-chunk.d.ts +4 -1
- package/dist/schemes/_entry-chunk.d.ts.map +1 -1
- package/dist/schemes/_entry-chunk.js +76 -22
- package/dist/schemes/_entry-chunk.js.map +1 -1
- package/dist/schemes/_entry-crud.d.ts.map +1 -1
- package/dist/schemes/_entry-crud.js +0 -10
- package/dist/schemes/_entry-crud.js.map +1 -1
- package/dist/schemes/_entry-find.d.ts.map +1 -1
- package/dist/schemes/_entry-find.js +9 -8
- package/dist/schemes/_entry-find.js.map +1 -1
- package/dist/schemes/_entry-find.sql +1 -1
- package/dist/schemes/_entry-graph.d.ts +1 -1
- package/dist/schemes/_entry-graph.d.ts.map +1 -1
- package/dist/schemes/_entry-graph.js +13 -12
- package/dist/schemes/_entry-graph.js.map +1 -1
- package/dist/schemes/_entry-graph.sql +49 -13
- package/dist/schemes/_entry-manifest.d.ts +5 -2
- package/dist/schemes/_entry-manifest.d.ts.map +1 -1
- package/dist/schemes/_entry-manifest.js +135 -123
- package/dist/schemes/_entry-manifest.js.map +1 -1
- package/dist/schemes/_entry-ops.d.ts.map +1 -1
- package/dist/schemes/_entry-ops.js +0 -4
- package/dist/schemes/_entry-ops.js.map +1 -1
- package/dist/schemes/_entry-semantic.d.ts +12 -5
- package/dist/schemes/_entry-semantic.d.ts.map +1 -1
- package/dist/schemes/_entry-semantic.js +57 -70
- package/dist/schemes/_entry-semantic.js.map +1 -1
- package/dist/schemes/_entry-semantic.sql +22 -53
- package/dist/server/Daemon.d.ts +4 -3
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +109 -44
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/auto.d.ts +6 -0
- package/dist/server/auto.d.ts.map +1 -0
- package/dist/server/{yolo.js → auto.js} +15 -16
- package/dist/server/auto.js.map +1 -0
- package/dist/server/client-input.d.ts +1 -1
- package/dist/server/client-input.d.ts.map +1 -1
- package/dist/server/client-input.js +11 -4
- package/dist/server/client-input.js.map +1 -1
- package/dist/server/drain.sql +6 -3
- package/dist/server/loopDocs.d.ts.map +1 -1
- package/dist/server/loopDocs.js +2 -2
- package/dist/server/loopDocs.js.map +1 -1
- package/dist/server/noProposals.js +5 -5
- package/dist/server/noProposals.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +18 -5
- package/dist/service.js.map +1 -1
- package/migrations/0000-00-00.01_schema.sql +55 -48
- package/migrations/0004_loop-provider.sql +3 -0
- package/migrations/0005_subscription-published-channel.sql +3 -0
- package/package.json +27 -22
- package/dist/server/yolo.d.ts +0 -6
- package/dist/server/yolo.d.ts.map +0 -1
- package/dist/server/yolo.js.map +0 -1
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
// ~semantic
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// channel does (a daughter projection, per the §mimetype boundary). Called from the
|
|
5
|
-
// gated manifest-add hook, so only when body content actually changed.
|
|
6
|
-
import { contentHash } from "../core/content-hash.js";
|
|
1
|
+
// ~semantic storage and ranking. Complete content-addressed derivations own the
|
|
2
|
+
// reader-projected FTS, graph, and vectors. Vector search ranks every eligible
|
|
3
|
+
// vector in scope; FTS is only the explicit no-embedder fallback.
|
|
7
4
|
import EntryChunk from "./_entry-chunk.js";
|
|
8
5
|
export default class EntrySemantic {
|
|
9
|
-
|
|
6
|
+
static maxEmbedSize() {
|
|
7
|
+
const raw = process.env.PLURNK_SERVICE_MAX_EMBED_SIZE;
|
|
8
|
+
const value = Number(raw);
|
|
9
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
10
|
+
throw new Error(`PLURNK_SERVICE_MAX_EMBED_SIZE must be a non-negative safe integer byte count (0 = unlimited), got ${JSON.stringify(raw)}`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
static embedSizeRejection(content) {
|
|
15
|
+
const maxBytes = EntrySemantic.maxEmbedSize();
|
|
16
|
+
if (maxBytes === 0)
|
|
17
|
+
return null;
|
|
18
|
+
const actualBytes = Buffer.byteLength(content, "utf8");
|
|
19
|
+
return actualBytes > maxBytes ? { actualBytes, maxBytes } : null;
|
|
20
|
+
}
|
|
21
|
+
// Replace a derivation artifact's FTS row with its readable content.
|
|
10
22
|
// Empty content (binary member / cleared entry) → no FTS row (delete only).
|
|
11
|
-
static async indexFts(db,
|
|
12
|
-
await db.fts_delete.run({
|
|
23
|
+
static async indexFts(db, derivationId, content) {
|
|
24
|
+
await db.fts_delete.run({ derivation_id: derivationId });
|
|
13
25
|
if (content.length > 0)
|
|
14
|
-
await db.fts_insert.run({
|
|
26
|
+
await db.fts_insert.run({ derivation_id: derivationId, content });
|
|
15
27
|
}
|
|
16
28
|
// Cosine similarity over two Float32 vectors stored as BLOBs — the SqlRite
|
|
17
29
|
// `cosine()` function delegates here (cosine.ts is the registration adapter).
|
|
@@ -29,61 +41,35 @@ export default class EntrySemantic {
|
|
|
29
41
|
const denom = Math.sqrt(nx) * Math.sqrt(ny);
|
|
30
42
|
return denom === 0 ? 0 : dot / denom;
|
|
31
43
|
}
|
|
32
|
-
// Store
|
|
44
|
+
// Store a derivation's embedding vectors + model, or clear them.
|
|
33
45
|
// row (binary/empty entry, or a degraded `embeddingMissing` projection). Called
|
|
34
46
|
// from the gated manifest-add hook beside indexFts / the symbol index.
|
|
35
|
-
static async indexEmbedding(db,
|
|
36
|
-
// Re-derivation = clear all of the
|
|
47
|
+
static async indexEmbedding(db, derivationId, chunks, model) {
|
|
48
|
+
// Re-derivation = clear all of the artifact's chunk rows, then insert each in seq
|
|
37
49
|
// order. No model (no embedder installed) or no chunks → just cleared.
|
|
38
|
-
await db.embedding_delete.run({
|
|
50
|
+
await db.embedding_delete.run({ derivation_id: derivationId });
|
|
39
51
|
if (model === undefined)
|
|
40
52
|
return;
|
|
41
53
|
for (const [seq, c] of chunks.entries()) {
|
|
42
54
|
await db.embedding_set.run({
|
|
43
|
-
|
|
55
|
+
derivation_id: derivationId, chunk_seq: seq, line_start: c.lineStart, line_end: c.lineEnd,
|
|
44
56
|
vector: c.vector, embedding_model: model,
|
|
45
57
|
});
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
|
-
// §semantic-embed-dedup (#416) — before the expensive embed, reuse an existing embedding for
|
|
49
|
-
// IDENTICAL body content (any other entry, same active model): the metaproject's 15×
|
|
50
|
-
// tokenizer.json embeds ONCE, the rest copy. Returns the model on a hit, undefined on a miss
|
|
51
|
-
// (caller embeds). content_hash is the stamped body identity (content-hash.ts).
|
|
52
|
-
static async tryReuseEmbeddings(db, entryId, bodyContent, mimetypes) {
|
|
53
|
-
const info = await EntrySemantic.#embedderInfo(mimetypes);
|
|
54
|
-
if (info === null || info.model === undefined)
|
|
55
|
-
return undefined;
|
|
56
|
-
const hash = contentHash(bodyContent);
|
|
57
|
-
const rows = await db.embedding_by_content_hash.all({ content_hash: hash, embedding_model: info.model, entry_id: entryId });
|
|
58
|
-
if (rows.length === 0)
|
|
59
|
-
return undefined;
|
|
60
|
-
await db.embedding_delete.run({ entry_id: entryId });
|
|
61
|
-
for (const c of rows) {
|
|
62
|
-
await db.embedding_set.run({ entry_id: entryId, chunk_seq: c.chunk_seq, line_start: c.line_start, line_end: c.line_end, vector: c.vector, embedding_model: info.model });
|
|
63
|
-
}
|
|
64
|
-
return info.model;
|
|
65
|
-
}
|
|
66
60
|
// Project Semantics — derive an entry's chunk embeddings. Probes the embedder
|
|
67
|
-
// capability (the
|
|
61
|
+
// capability (the plugin's window + tokenizer, surfaced via the Mimetypes
|
|
68
62
|
// handle): ABSENT → one whole-entry chunk from the fallback vector (today's
|
|
69
63
|
// behavior, no extra embed call); PRESENT → lossless tile, embed each chunk.
|
|
70
64
|
// Returns the chunk list + model for indexEmbedding; never touches the DB.
|
|
71
|
-
static async deriveEmbeddings(mimetypes, content, symbols, fallbackEmbedding, fallbackModel, signal,
|
|
65
|
+
static async deriveEmbeddings(mimetypes, content, symbols, fallbackEmbedding, fallbackModel, signal, onProgress) {
|
|
72
66
|
const info = await EntrySemantic.#embedderInfo(mimetypes);
|
|
73
67
|
if (info === null) {
|
|
74
68
|
const totalLines = content.length === 0 ? 0 : content.split("\n").length;
|
|
75
69
|
if (fallbackEmbedding === undefined || fallbackEmbedding.byteLength === 0 || totalLines === 0)
|
|
76
|
-
return { chunks: [], model: undefined
|
|
77
|
-
return { chunks: [{ lineStart: 1, lineEnd: totalLines, vector: fallbackEmbedding }], model: fallbackModel
|
|
70
|
+
return { chunks: [], model: undefined };
|
|
71
|
+
return { chunks: [{ lineStart: 1, lineEnd: totalLines, vector: fallbackEmbedding }], model: fallbackModel };
|
|
78
72
|
}
|
|
79
|
-
// §semantic-entry-chunk-cap — a LATENCY stage, never a coverage bound: the INLINE
|
|
80
|
-
// (dispatch-time) path caps chunks so a cold ~query answers in bounded seconds, and a
|
|
81
|
-
// capped pass does NOT stamp the deep hash — the background pump completes the entry to
|
|
82
|
-
// FULL depth (a 300-page book is entirely searchable at steady state; rank can't be
|
|
83
|
-
// dominated regardless — semantic_rank takes one best chunk per entry). The old flat cap
|
|
84
|
-
// silently foreclosed legitimate large texts: head-only vectors under a whole-file FTS
|
|
85
|
-
// narrow returned head-biased spans forever, and the stamped hash made it permanent.
|
|
86
|
-
const CHUNK_CAP = maxChunks ?? Number.POSITIVE_INFINITY;
|
|
87
73
|
// Symbol edges (a @graph endLine, or the line before a symbol starts) are the
|
|
88
74
|
// tiler's preferred cut points; it still tiles every line if there are none.
|
|
89
75
|
const boundaries = new Set();
|
|
@@ -97,41 +83,41 @@ export default class EntrySemantic {
|
|
|
97
83
|
// is the operator's to declare (their knob), and the counter resolves through the seam's
|
|
98
84
|
// tokenizers by the embedder's model name — the chars/2 upper bound when inexact is the
|
|
99
85
|
// surfaced conservative fallback (smaller chunks are correct chunks).
|
|
100
|
-
if (info.
|
|
101
|
-
throw new Error("remote embedder reports no
|
|
86
|
+
if (info.contextWindow === null)
|
|
87
|
+
throw new Error("remote embedder reports no input context window — set PLURNK_MIMETYPES_EMBED_CONTEXT_WINDOW to the endpoint's limit");
|
|
102
88
|
const counter = info.countTokens ?? (await mimetypes.tokenizer(info.model ?? "")).countTokens;
|
|
103
|
-
const budget = EntrySemantic.#chunkBudget(info.
|
|
104
|
-
let specs = await EntryChunk.tile(content, boundaries, budget, EntrySemantic.#chunkOverlap(), counter);
|
|
89
|
+
const budget = EntrySemantic.#chunkBudget(info.contextWindow);
|
|
90
|
+
let specs = await EntryChunk.tile(content, boundaries, budget, EntrySemantic.#chunkOverlap(), counter, (progress) => onProgress?.({ phase: "planning", ...progress }));
|
|
105
91
|
if (specs.length === 0)
|
|
106
|
-
return { chunks: [], model: undefined
|
|
107
|
-
const capped = specs.length > CHUNK_CAP;
|
|
108
|
-
if (capped)
|
|
109
|
-
specs = specs.slice(0, CHUNK_CAP); // §semantic-entry-chunk-cap — inline latency stage; the pump completes
|
|
92
|
+
return { chunks: [], model: undefined };
|
|
110
93
|
// One data-parallel batch over the tiled chunk texts (#272 — embedBatch via the
|
|
111
94
|
// framework seam, ~6× the per-chunk loop on a multi-core box; vectors bit-identical,
|
|
112
95
|
// so no re-embed). Each tile embeds as PLAIN TEXT: a chunk is a fragment, not a
|
|
113
96
|
// standalone document, so embedding under the entry's mimetype (e.g. application/json)
|
|
114
97
|
// re-validates the partial and throws — embedBatch embeds raw text directly.
|
|
115
|
-
const vectors = await mimetypes.embedBatch(specs.map((s) => s.text), {
|
|
98
|
+
const vectors = await mimetypes.embedBatch(specs.map((s) => s.text), {
|
|
99
|
+
signal,
|
|
100
|
+
onProgress: (progress) => onProgress?.({ phase: "embedding", ...progress }),
|
|
101
|
+
});
|
|
116
102
|
const chunks = [];
|
|
117
103
|
for (const [i, spec] of specs.entries()) {
|
|
118
104
|
const vector = vectors[i];
|
|
119
105
|
if (vector !== undefined && vector.byteLength > 0)
|
|
120
106
|
chunks.push({ lineStart: spec.lineStart, lineEnd: spec.lineEnd, vector });
|
|
121
107
|
}
|
|
122
|
-
return { chunks, model: chunks.length > 0 ? info.model : undefined
|
|
108
|
+
return { chunks, model: chunks.length > 0 ? info.model : undefined };
|
|
123
109
|
}
|
|
124
110
|
// Chunk budget in tokens — `.env.defaults` is the law, no code fallback. EMPTY =
|
|
125
111
|
// the embedder's reported window (scalable — NO model-specific number baked in);
|
|
126
112
|
// a positive value caps BELOW the window (e.g. to sweep granularity).
|
|
127
|
-
static #chunkBudget(
|
|
113
|
+
static #chunkBudget(contextWindow) {
|
|
128
114
|
const raw = process.env.PLURNK_SERVICE_SEMANTIC_CHUNK_TOKENS;
|
|
129
115
|
if (raw === undefined || raw.trim() === "")
|
|
130
|
-
return
|
|
116
|
+
return contextWindow;
|
|
131
117
|
const v = Number(raw);
|
|
132
118
|
if (!Number.isInteger(v) || v < 1)
|
|
133
119
|
throw new Error(`PLURNK_SERVICE_SEMANTIC_CHUNK_TOKENS must be empty (= the embedder's window) or a positive integer, got ${JSON.stringify(raw)}`);
|
|
134
|
-
return Math.min(v,
|
|
120
|
+
return Math.min(v, contextWindow);
|
|
135
121
|
}
|
|
136
122
|
static #chunkOverlap() {
|
|
137
123
|
const v = Number(process.env.PLURNK_SERVICE_SEMANTIC_CHUNK_OVERLAP);
|
|
@@ -139,11 +125,11 @@ export default class EntrySemantic {
|
|
|
139
125
|
throw new Error(`PLURNK_SERVICE_SEMANTIC_CHUNK_OVERLAP must be in [0,1), got ${JSON.stringify(process.env.PLURNK_SERVICE_SEMANTIC_CHUNK_OVERLAP)}`);
|
|
140
126
|
return v;
|
|
141
127
|
}
|
|
142
|
-
// The embedder capability surface (
|
|
128
|
+
// The embedder capability surface (plugin window + tokenizer + model id), probed
|
|
143
129
|
// through the Mimetypes handle. null until an embedder is installed.
|
|
144
130
|
static async #embedderInfo(mimetypes) {
|
|
145
131
|
// PLURNK_SERVICE_EMBED_DISABLE=1 forces the no-embedder path even when the optional embeddings package
|
|
146
|
-
// IS installed — the whole semantic stack (deriveEmbeddings,
|
|
132
|
+
// IS installed — the whole semantic stack (deriveEmbeddings, exhaustive ~query cosine rank, the
|
|
147
133
|
// deep_hash config) funnels through here, so one gate makes everything FTS-only. The fast lane
|
|
148
134
|
// (mock-provider tests) sets it so the suite doesn't spin up the MiniLM worker pool for nothing.
|
|
149
135
|
if (process.env.PLURNK_SERVICE_EMBED_DISABLE === "1")
|
|
@@ -159,24 +145,22 @@ export default class EntrySemantic {
|
|
|
159
145
|
const info = await EntrySemantic.#embedderInfo(mimetypes);
|
|
160
146
|
if (info === null)
|
|
161
147
|
return "embed:none";
|
|
162
|
-
|
|
148
|
+
const base = `embed:${info.model ?? "?"}:${info.contextWindow}:${info.contextWindow === null ? "?" : EntrySemantic.#chunkBudget(info.contextWindow)}:${EntrySemantic.#chunkOverlap()}`;
|
|
149
|
+
const maxBytes = EntrySemantic.maxEmbedSize();
|
|
150
|
+
return maxBytes === 0 ? base : `${base}:max-bytes=${maxBytes}`;
|
|
163
151
|
}
|
|
164
|
-
// Build the FTS5
|
|
165
|
-
// cosine does the precision). FTS5-syntax-safe (bare lowercased terms).
|
|
152
|
+
// Build the FTS5 query used only by the no-embedder keyword fallback.
|
|
166
153
|
static ftsQueryFor(text) {
|
|
167
154
|
const terms = text.toLowerCase().match(/[a-z0-9]+/g);
|
|
168
155
|
if (terms === null)
|
|
169
156
|
return "";
|
|
170
157
|
return [...new Set(terms)].join(" OR ");
|
|
171
158
|
}
|
|
172
|
-
// The ~query dispatch: embed the query text through the SAME channel
|
|
173
|
-
//
|
|
159
|
+
// The ~query dispatch: embed the query text through the SAME channel and cosine-rank
|
|
160
|
+
// every vector in scope, top-K. Each result carries its best-matching
|
|
174
161
|
// chunk's line span (the Finding extent). No embedder → the top-K <K> form degrades to an
|
|
175
162
|
// FTS-only keyword rank (whole-entry findings); the <0.x> threshold form stays 501.
|
|
176
163
|
static async rankSemantic(db, workspaceId, scheme, mimetypes, queryText, marker) {
|
|
177
|
-
const ftsQuery = EntrySemantic.ftsQueryFor(queryText);
|
|
178
|
-
if (ftsQuery.length === 0)
|
|
179
|
-
return { status: 200, results: [] };
|
|
180
164
|
// #209 — the result marker form-dispatches: integer <K> → top-K rank;
|
|
181
165
|
// decimal <0.x> → a similarity threshold (minimum cosine in (0,1)), with
|
|
182
166
|
// <0.x,N> capping the threshold set at N (else unbounded). A fractional
|
|
@@ -198,6 +182,9 @@ export default class EntrySemantic {
|
|
|
198
182
|
// based (no bounded BM25 analogue) → it stays 501.
|
|
199
183
|
if (!Number.isInteger(first))
|
|
200
184
|
return { status: 501, results: [] };
|
|
185
|
+
const ftsQuery = EntrySemantic.ftsQueryFor(queryText);
|
|
186
|
+
if (ftsQuery.length === 0)
|
|
187
|
+
return { status: 200, results: [] };
|
|
201
188
|
const rows = await db.semantic_rank_fts.all({
|
|
202
189
|
fts_query: ftsQuery, workspace_id: workspaceId, scheme, k: first,
|
|
203
190
|
});
|
|
@@ -205,7 +192,7 @@ export default class EntrySemantic {
|
|
|
205
192
|
}
|
|
206
193
|
if (Number.isInteger(first)) {
|
|
207
194
|
const rows = await db.semantic_rank.all({
|
|
208
|
-
|
|
195
|
+
workspace_id: workspaceId, scheme, query_vector: r.embedding, embedding_model: r.embeddingModel, k: first,
|
|
209
196
|
});
|
|
210
197
|
return { status: 200, results: rows.map(toResult) };
|
|
211
198
|
}
|
|
@@ -213,7 +200,7 @@ export default class EntrySemantic {
|
|
|
213
200
|
return { status: 416, results: [] };
|
|
214
201
|
const cap = (last !== null && Number.isInteger(last) && last > 0) ? last : -1;
|
|
215
202
|
const rows = await db.semantic_rank_threshold.all({
|
|
216
|
-
|
|
203
|
+
workspace_id: workspaceId, scheme, query_vector: r.embedding, embedding_model: r.embeddingModel, threshold: first, cap,
|
|
217
204
|
});
|
|
218
205
|
return { status: 200, results: rows.map(toResult) };
|
|
219
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_entry-semantic.js","sourceRoot":"","sources":["../../src/schemes/_entry-semantic.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"_entry-semantic.js","sourceRoot":"","sources":["../../src/schemes/_entry-semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
-- ~semantic (plurnk-service#186)
|
|
2
|
-
--
|
|
3
|
-
--
|
|
1
|
+
-- ~semantic (plurnk-service#186): exhaustive cosine ranking over every complete
|
|
2
|
+
-- derivation in scope. FTS is retained only as the explicit no-embedder fallback;
|
|
3
|
+
-- it never gates vector recall.
|
|
4
4
|
|
|
5
5
|
-- PREP: fts_delete
|
|
6
|
-
DELETE FROM entry_fts WHERE rowid = $
|
|
6
|
+
DELETE FROM entry_fts WHERE rowid = $derivation_id;
|
|
7
7
|
|
|
8
8
|
-- PREP: fts_insert
|
|
9
|
-
INSERT INTO entry_fts (rowid, content) VALUES ($
|
|
9
|
+
INSERT INTO entry_fts (rowid, content) VALUES ($derivation_id, $content);
|
|
10
10
|
|
|
11
11
|
-- PREP: embedding_set
|
|
12
12
|
-- Insert ONE chunk's vector + its <L> extent + the model. The caller clears the
|
|
13
13
|
-- entry's rows (embedding_delete) first and inserts each chunk in seq order, so no
|
|
14
14
|
-- upsert is needed — a re-derivation is delete-all then insert-each.
|
|
15
|
-
INSERT INTO entry_embeddings (
|
|
16
|
-
VALUES ($
|
|
15
|
+
INSERT INTO entry_embeddings (derivation_id, chunk_seq, line_start, line_end, vector, embedding_model)
|
|
16
|
+
VALUES ($derivation_id, $chunk_seq, $line_start, $line_end, $vector, $embedding_model);
|
|
17
17
|
|
|
18
18
|
-- PREP: embedding_delete
|
|
19
19
|
-- Clears ALL of an entry's chunk rows (the re-derivation reset).
|
|
20
|
-
DELETE FROM entry_embeddings WHERE
|
|
20
|
+
DELETE FROM entry_embeddings WHERE derivation_id = $derivation_id;
|
|
21
21
|
|
|
22
22
|
-- PREP: semantic_rank
|
|
23
|
-
--
|
|
24
|
-
-- narrowed candidates over the query embedding ($query_vector), top-K. Scheme-scoped
|
|
25
|
-
-- like every dialect. FTS does the scale-cut; cosine the precise rank — so a high-
|
|
26
|
-
-- cosine entry that doesn't match the keyword is correctly excluded by the narrow.
|
|
23
|
+
-- Exhaustive cosine rank over every vector in the workspace+scheme scope.
|
|
27
24
|
-- Many chunk rows per entry → rank by the entry's BEST chunk (per-entry top cosine via
|
|
28
25
|
-- ROW_NUMBER), and surface that winning chunk's line span as the finding extent
|
|
29
26
|
-- (Project Findings). embedding_model filter keeps cosine within one model's dimensions.
|
|
@@ -31,10 +28,10 @@ WITH ranked AS (
|
|
|
31
28
|
SELECT e.pathname, em.line_start, em.line_end,
|
|
32
29
|
cosine(em.vector, $query_vector) AS score,
|
|
33
30
|
ROW_NUMBER() OVER (PARTITION BY e.id ORDER BY cosine(em.vector, $query_vector) DESC) AS rn
|
|
34
|
-
FROM
|
|
35
|
-
JOIN entries e ON e.
|
|
36
|
-
JOIN entry_embeddings em ON em.
|
|
37
|
-
WHERE
|
|
31
|
+
FROM derivations d
|
|
32
|
+
JOIN entries e ON e.deep_hash = d.deep_hash
|
|
33
|
+
JOIN entry_embeddings em ON em.derivation_id = d.id AND em.embedding_model = $embedding_model
|
|
34
|
+
WHERE d.state = 'complete'
|
|
38
35
|
AND e.workspace_id = $workspace_id
|
|
39
36
|
AND e.scheme = $scheme
|
|
40
37
|
)
|
|
@@ -44,17 +41,17 @@ ORDER BY score DESC
|
|
|
44
41
|
LIMIT $k;
|
|
45
42
|
|
|
46
43
|
-- PREP: semantic_rank_threshold
|
|
47
|
-
-- #209 — the <0.x> similarity-threshold form: same
|
|
44
|
+
-- #209 — the <0.x> similarity-threshold form: same exhaustive cosine rank, but a cosine
|
|
48
45
|
-- floor ($threshold, in (0,1)) replaces top-K, and $cap (-1 = unbounded) is the
|
|
49
46
|
-- optional <0.x,N> result cap.
|
|
50
47
|
WITH ranked AS (
|
|
51
48
|
SELECT e.pathname, em.line_start, em.line_end,
|
|
52
49
|
cosine(em.vector, $query_vector) AS score,
|
|
53
50
|
ROW_NUMBER() OVER (PARTITION BY e.id ORDER BY cosine(em.vector, $query_vector) DESC) AS rn
|
|
54
|
-
FROM
|
|
55
|
-
JOIN entries e ON e.
|
|
56
|
-
JOIN entry_embeddings em ON em.
|
|
57
|
-
WHERE
|
|
51
|
+
FROM derivations d
|
|
52
|
+
JOIN entries e ON e.deep_hash = d.deep_hash
|
|
53
|
+
JOIN entry_embeddings em ON em.derivation_id = d.id AND em.embedding_model = $embedding_model
|
|
54
|
+
WHERE d.state = 'complete'
|
|
58
55
|
AND e.workspace_id = $workspace_id
|
|
59
56
|
AND e.scheme = $scheme
|
|
60
57
|
)
|
|
@@ -64,7 +61,7 @@ ORDER BY score DESC
|
|
|
64
61
|
LIMIT $cap;
|
|
65
62
|
|
|
66
63
|
-- PREP: semantic_rank_fts
|
|
67
|
-
-- FTS-only fallback when no embedder is installed: rank
|
|
64
|
+
-- FTS-only fallback when no embedder is installed: rank processed readable content by BM25
|
|
68
65
|
-- relevance alone (no entry_embeddings join, no cosine), scheme-scoped, top-K. Without
|
|
69
66
|
-- chunk vectors there is no winning span, so the finding is the whole entry — line
|
|
70
67
|
-- 1..its line count, derived from the indexed FTS content.
|
|
@@ -72,38 +69,10 @@ SELECT e.pathname,
|
|
|
72
69
|
1 AS line_start,
|
|
73
70
|
length(f.content) - length(replace(f.content, char(10), '')) + 1 AS line_end
|
|
74
71
|
FROM entry_fts f
|
|
75
|
-
JOIN
|
|
76
|
-
|
|
77
|
-
AND e.workspace_id = $workspace_id
|
|
78
|
-
AND e.scheme = $scheme
|
|
79
|
-
ORDER BY rank
|
|
80
|
-
LIMIT $k;
|
|
81
|
-
|
|
82
|
-
-- PREP: semantic_fts_candidates
|
|
83
|
-
-- §semantic-cold-query-full-fidelity — the FTS-narrowed candidate slice, BM25-ordered,
|
|
84
|
-
-- with the derivation inputs (content/mimetype/deep_hash) so the caller can derive any
|
|
85
|
-
-- stale candidate INLINE before ranking. Ranking only ever scores this narrowed set, so
|
|
86
|
-
-- embedding exactly this slice on demand gives bit-identical results to a warm corpus.
|
|
87
|
-
SELECT e.id AS entry_id, e.pathname, ec.content, ec.mimetype, e.deep_hash, 'body' AS channel
|
|
88
|
-
FROM entry_fts f
|
|
89
|
-
JOIN entries e ON e.id = f.rowid
|
|
90
|
-
JOIN entry_channels ec ON ec.entry_id = e.id AND ec.name = 'body'
|
|
72
|
+
JOIN derivations d ON d.id = f.rowid AND d.state = 'complete'
|
|
73
|
+
JOIN entries e ON e.deep_hash = d.deep_hash
|
|
91
74
|
WHERE f.content MATCH $fts_query
|
|
92
75
|
AND e.workspace_id = $workspace_id
|
|
93
76
|
AND e.scheme = $scheme
|
|
94
77
|
ORDER BY bm25(entry_fts)
|
|
95
|
-
LIMIT $
|
|
96
|
-
|
|
97
|
-
-- PREP: embedding_by_content_hash
|
|
98
|
-
-- §semantic-embed-dedup (#416) — the chunk rows of ONE OTHER entry whose body content_hash
|
|
99
|
-
-- matches, already embedded under the active model. Identical content → identical embeddings, so
|
|
100
|
-
-- a duplicate (the metaproject's 15× tokenizer.json) copies instead of re-embedding. Picks the
|
|
101
|
-
-- newest such source entry; returns its chunks in seq order.
|
|
102
|
-
SELECT em.chunk_seq, em.line_start, em.line_end, em.vector
|
|
103
|
-
FROM entry_embeddings em
|
|
104
|
-
WHERE em.embedding_model = $embedding_model AND em.entry_id = (
|
|
105
|
-
SELECT ec.entry_id FROM entry_channels ec
|
|
106
|
-
JOIN entry_embeddings e2 ON e2.entry_id = ec.entry_id AND e2.embedding_model = $embedding_model
|
|
107
|
-
WHERE ec.name = 'body' AND ec.content_hash = $content_hash AND ec.entry_id != $entry_id
|
|
108
|
-
ORDER BY ec.entry_id DESC LIMIT 1)
|
|
109
|
-
ORDER BY em.chunk_seq ASC;
|
|
78
|
+
LIMIT $k;
|
package/dist/server/Daemon.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ProposalResolution } from "../core/ProposalLifecycle.ts";
|
|
|
3
3
|
import Engine from "../core/Engine.ts";
|
|
4
4
|
import SchemeRegistry from "../core/SchemeRegistry.ts";
|
|
5
5
|
import { Mimetypes } from "@plurnk/plurnk-mimetypes";
|
|
6
|
-
import type { Provider } from "@plurnk/plurnk-providers";
|
|
6
|
+
import type { Provider, ProviderAlias } from "@plurnk/plurnk-providers";
|
|
7
7
|
export type NotifyTarget = "all" | {
|
|
8
8
|
workspaceId: number;
|
|
9
9
|
};
|
|
@@ -132,6 +132,7 @@ export default class Daemon {
|
|
|
132
132
|
effect: string;
|
|
133
133
|
glob: string;
|
|
134
134
|
}[]>;
|
|
135
|
+
workspaceDerivationStatus(workspaceId: number): import("../core/Engine.ts").WorkspaceDerivationStatus | null;
|
|
135
136
|
createWorkspace(args: {
|
|
136
137
|
name?: string;
|
|
137
138
|
projectRoot?: string | null;
|
|
@@ -221,7 +222,7 @@ export default class Daemon {
|
|
|
221
222
|
workspaceId: number;
|
|
222
223
|
workerId: number;
|
|
223
224
|
prompt: string;
|
|
224
|
-
|
|
225
|
+
providerSpec: ProviderAlias;
|
|
225
226
|
systemPrompt: string;
|
|
226
227
|
maxTurns?: number;
|
|
227
228
|
flags?: Partial<LoopFlags>;
|
|
@@ -242,5 +243,5 @@ export default class Daemon {
|
|
|
242
243
|
*/
|
|
243
244
|
cancelDrain(workerId: number, reason?: string): boolean;
|
|
244
245
|
}
|
|
245
|
-
export type CoreSeam = Pick<Daemon, "subscribeToEvents" | "pendingProposals" | "resolveProposal" | "runLoop" | "cancelDrain" | "dispatchAsClient" | "ensureModelWorker" | "readLog" | "readEntry" | "look" | "listProviders" | "listWorkspaces" | "listWorkers" | "listPrompts" | "listMembers" | "listConstraints" | "createWorkspace" | "attachWorkspace" | "createConversationWorker" | "renameWorkspace" | "constrain" | "unconstrain" | "forkWorker" | "hotloadRuntime">;
|
|
246
|
+
export type CoreSeam = Pick<Daemon, "subscribeToEvents" | "pendingProposals" | "resolveProposal" | "runLoop" | "cancelDrain" | "dispatchAsClient" | "ensureModelWorker" | "readLog" | "readEntry" | "look" | "listProviders" | "listWorkspaces" | "listWorkers" | "listPrompts" | "listMembers" | "listConstraints" | "workspaceDerivationStatus" | "createWorkspace" | "attachWorkspace" | "createConversationWorker" | "renameWorkspace" | "constrain" | "unconstrain" | "forkWorker" | "hotloadRuntime">;
|
|
246
247
|
//# sourceMappingURL=Daemon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Daemon.d.ts","sourceRoot":"","sources":["../../src/server/Daemon.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAc,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"Daemon.d.ts","sourceRoot":"","sources":["../../src/server/Daemon.ts"],"names":[],"mappings":"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"}
|