@djolex999/vir-cli 0.14.1 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +265 -264
- package/dist/cli/embedSetup.js +62 -0
- package/dist/cli/embedSetup.js.map +1 -0
- package/dist/cli.js +70 -17
- package/dist/cli.js.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/diagnostics/doctor.js +42 -0
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/pipeline/embeddingSweep.js +17 -11
- package/dist/pipeline/embeddingSweep.js.map +1 -1
- package/dist/pipeline/run.js +19 -7
- package/dist/pipeline/run.js.map +1 -1
- package/dist/pipeline/writer.js +43 -23
- package/dist/pipeline/writer.js.map +1 -1
- package/dist/search/embedder.js +75 -15
- package/dist/search/embedder.js.map +1 -1
- package/dist/search/localProvider.js +99 -0
- package/dist/search/localProvider.js.map +1 -0
- package/dist/search/provider.js +72 -0
- package/dist/search/provider.js.map +1 -0
- package/dist/search/retriever.js +39 -12
- package/dist/search/retriever.js.map +1 -1
- package/dist/search/thresholds.js +18 -0
- package/dist/search/thresholds.js.map +1 -0
- package/dist/state/db.js +65 -17
- package/dist/state/db.js.map +1 -1
- package/package.json +1 -1
package/dist/pipeline/writer.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { join, relative } from "node:path";
|
|
4
|
-
import { cosineSimilarity
|
|
4
|
+
import { cosineSimilarity } from "../search/embedder.js";
|
|
5
|
+
import { embedNoteWithProvider, resolveEmbeddingProvider, } from "../search/provider.js";
|
|
6
|
+
import { thresholdsFor } from "../search/thresholds.js";
|
|
5
7
|
import { ARTICLES_SUBDIR, articleRelPath, buildArticleFrontmatter, } from "./articleDistiller.js";
|
|
6
8
|
import { PDFS_SUBDIR, buildPdfFrontmatter, pdfRelPath, } from "./pdfDistiller.js";
|
|
7
9
|
import { TOPICS_SUBDIR, buildComposeFrontmatter, composeRelPath, } from "./composer.js";
|
|
@@ -15,6 +17,7 @@ const CATEGORY_DIR = {
|
|
|
15
17
|
export class VaultWriter {
|
|
16
18
|
root;
|
|
17
19
|
db;
|
|
20
|
+
embeddingChoice;
|
|
18
21
|
topicsDir;
|
|
19
22
|
// Count of notes whose write-time embedding was skipped because Ollama was
|
|
20
23
|
// down. run.ts reads this to emit one traceable daemon.log line — a silent
|
|
@@ -24,6 +27,7 @@ export class VaultWriter {
|
|
|
24
27
|
constructor(cfg, db = null) {
|
|
25
28
|
this.root = join(cfg.vaultPath, cfg.outputDir);
|
|
26
29
|
this.db = db;
|
|
30
|
+
this.embeddingChoice = cfg.embeddingProvider;
|
|
27
31
|
this.topicsDir = cfg.topicsDir ?? TOPICS_SUBDIR;
|
|
28
32
|
for (const sub of [
|
|
29
33
|
...Object.values(CATEGORY_DIR),
|
|
@@ -82,13 +86,16 @@ export class VaultWriter {
|
|
|
82
86
|
// retrieval ranking still weights it.
|
|
83
87
|
const strippedBody = stripRelatedSection(markdown);
|
|
84
88
|
const vec = await this.computeNoteEmbedding(frontmatter + wikilinkHeader + strippedBody);
|
|
85
|
-
const
|
|
89
|
+
const provider = vec ? await this.provider() : null;
|
|
90
|
+
const related = vec && provider
|
|
91
|
+
? this.neighborLinks(vec, session.sessionId, provider.modelName)
|
|
92
|
+
: [];
|
|
86
93
|
const body = strippedBody + renderRelatedSection(related);
|
|
87
94
|
const finalContent = frontmatter + wikilinkHeader + body + "\n";
|
|
88
95
|
writeFileSync(fullPath, finalContent);
|
|
89
|
-
if (vec && this.db) {
|
|
96
|
+
if (vec && provider && this.db) {
|
|
90
97
|
try {
|
|
91
|
-
this.db.storeEmbedding(session.sessionId, vec);
|
|
98
|
+
this.db.storeEmbedding(session.sessionId, vec, provider.provenance());
|
|
92
99
|
console.log(chalk.dim(` embedded ${note.classification.topic} (${vec.length}d)`));
|
|
93
100
|
}
|
|
94
101
|
catch {
|
|
@@ -154,12 +161,13 @@ export class VaultWriter {
|
|
|
154
161
|
if (!this.db)
|
|
155
162
|
return;
|
|
156
163
|
try {
|
|
157
|
-
|
|
164
|
+
const provider = await this.provider();
|
|
165
|
+
if (!provider)
|
|
158
166
|
return;
|
|
159
|
-
const vec = await
|
|
167
|
+
const vec = await embedNoteWithProvider(provider, fileContent);
|
|
160
168
|
if (!vec)
|
|
161
169
|
return;
|
|
162
|
-
this.db.storeArticleEmbedding(article.filePath, vec);
|
|
170
|
+
this.db.storeArticleEmbedding(article.filePath, vec, provider.provenance());
|
|
163
171
|
}
|
|
164
172
|
catch {
|
|
165
173
|
// never crash the writer on embedding failure
|
|
@@ -199,12 +207,13 @@ export class VaultWriter {
|
|
|
199
207
|
if (!this.db)
|
|
200
208
|
return;
|
|
201
209
|
try {
|
|
202
|
-
|
|
210
|
+
const provider = await this.provider();
|
|
211
|
+
if (!provider)
|
|
203
212
|
return;
|
|
204
|
-
const vec = await
|
|
213
|
+
const vec = await embedNoteWithProvider(provider, fileContent);
|
|
205
214
|
if (!vec)
|
|
206
215
|
return;
|
|
207
|
-
this.db.storePdfEmbedding(parsed.filePath, vec);
|
|
216
|
+
this.db.storePdfEmbedding(parsed.filePath, vec, provider.provenance());
|
|
208
217
|
}
|
|
209
218
|
catch {
|
|
210
219
|
// never crash the writer on embedding failure
|
|
@@ -260,12 +269,13 @@ export class VaultWriter {
|
|
|
260
269
|
if (!this.db)
|
|
261
270
|
return;
|
|
262
271
|
try {
|
|
263
|
-
|
|
272
|
+
const provider = await this.provider();
|
|
273
|
+
if (!provider)
|
|
264
274
|
return;
|
|
265
|
-
const vec = await
|
|
275
|
+
const vec = await embedNoteWithProvider(provider, fileContent);
|
|
266
276
|
if (!vec)
|
|
267
277
|
return;
|
|
268
|
-
this.db.storeTopicEmbedding(id, vec);
|
|
278
|
+
this.db.storeTopicEmbedding(id, vec, provider.provenance());
|
|
269
279
|
}
|
|
270
280
|
catch {
|
|
271
281
|
// never crash the writer on embedding failure
|
|
@@ -390,18 +400,27 @@ export class VaultWriter {
|
|
|
390
400
|
// Best-effort note embedding, computed up front so write() can pick
|
|
391
401
|
// Related neighbors from it before composing the body. Storage happens in
|
|
392
402
|
// write() after the file lands.
|
|
403
|
+
// The provider is resolved once per writer instance (configured > Ollama
|
|
404
|
+
// detected > local installed > none) and reused for every embed + provenance
|
|
405
|
+
// stamp, so a note can never carry a vector from one model and the label of
|
|
406
|
+
// another.
|
|
407
|
+
providerPromise = null;
|
|
408
|
+
provider() {
|
|
409
|
+
this.providerPromise ??= resolveEmbeddingProvider(this.embeddingChoice);
|
|
410
|
+
return this.providerPromise;
|
|
411
|
+
}
|
|
393
412
|
async computeNoteEmbedding(text) {
|
|
394
413
|
if (!this.db)
|
|
395
414
|
return null;
|
|
396
415
|
try {
|
|
397
|
-
const
|
|
398
|
-
if (!
|
|
416
|
+
const provider = await this.provider();
|
|
417
|
+
if (!provider) {
|
|
399
418
|
// Traceable, not loud — run.ts logs the aggregate once after the loop.
|
|
400
|
-
// The self-heal sweep back-fills this note
|
|
419
|
+
// The self-heal sweep back-fills this note on a later run.
|
|
401
420
|
this.embedSkipped += 1;
|
|
402
421
|
return null;
|
|
403
422
|
}
|
|
404
|
-
return await
|
|
423
|
+
return await embedNoteWithProvider(provider, text);
|
|
405
424
|
}
|
|
406
425
|
catch {
|
|
407
426
|
// never crash the writer on embedding failure
|
|
@@ -411,15 +430,19 @@ export class VaultWriter {
|
|
|
411
430
|
// Top-K nearest EXISTING session notes by cosine similarity — the Related
|
|
412
431
|
// section links only to files that are actually on disk, never to
|
|
413
432
|
// LLM-guessed topics.
|
|
414
|
-
neighborLinks(vec, selfSessionId) {
|
|
433
|
+
neighborLinks(vec, selfSessionId, model) {
|
|
415
434
|
if (!this.db)
|
|
416
435
|
return [];
|
|
436
|
+
const relatedMinSim = thresholdsFor(model).relatedMinSim;
|
|
417
437
|
try {
|
|
418
438
|
return this.db
|
|
419
439
|
.getEmbeddings(this.root)
|
|
420
|
-
.filter((r) => r.sessionId !== selfSessionId
|
|
440
|
+
.filter((r) => r.sessionId !== selfSessionId &&
|
|
441
|
+
// Cross-model cosine is meaningless — only neighbors embedded by
|
|
442
|
+
// the same model as `vec` are candidates.
|
|
443
|
+
r.embeddingModel === model)
|
|
421
444
|
.map((r) => ({ r, sim: cosineSimilarity(vec, r.embedding) }))
|
|
422
|
-
.filter((x) => x.sim >=
|
|
445
|
+
.filter((x) => x.sim >= relatedMinSim && existsSync(x.r.filePath))
|
|
423
446
|
.sort((a, b) => b.sim - a.sim)
|
|
424
447
|
.slice(0, RELATED_K)
|
|
425
448
|
.map((x) => ({
|
|
@@ -496,9 +519,6 @@ export function renderThemesLines(themes) {
|
|
|
496
519
|
];
|
|
497
520
|
}
|
|
498
521
|
const RELATED_K = 5;
|
|
499
|
-
// nomic-embed-text cosine floor: unrelated dev notes sit ≈0.4–0.55, genuine
|
|
500
|
-
// neighbors ≥0.6. Below the floor a link is noise, not knowledge.
|
|
501
|
-
const RELATED_MIN_SIM = 0.6;
|
|
502
522
|
// Drops the LLM's `## Related` section (heading + its bullets, up to the
|
|
503
523
|
// next heading or EOF). Session notes rebuild Related from embedding
|
|
504
524
|
// neighbors; legacy stored content still carries the old section, so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/pipeline/writer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/pipeline/writer.ts"],"names":[],"mappings":"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"}
|
package/dist/search/embedder.js
CHANGED
|
@@ -1,29 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
// OLLAMA_HOST is Ollama's own standard override; honoring it also lets tests
|
|
2
|
+
// and fresh-install simulations point detection at a dead port.
|
|
3
|
+
const OLLAMA_BASE = (process.env["OLLAMA_HOST"] ?? "http://localhost:11434").replace(/\/$/, "");
|
|
2
4
|
export const EMBED_MODEL = "nomic-embed-text";
|
|
5
|
+
export const EMBED_DIM = 768;
|
|
6
|
+
// Provenance stamped on every vector this embedder writes. Retrieval partitions
|
|
7
|
+
// on it, so it must always describe the model that actually produced the vector.
|
|
8
|
+
export const OLLAMA_PROVENANCE = {
|
|
9
|
+
model: EMBED_MODEL,
|
|
10
|
+
dim: EMBED_DIM,
|
|
11
|
+
};
|
|
3
12
|
const EMBED_TIMEOUT_MS = 10_000;
|
|
4
13
|
const PING_TIMEOUT_MS = 3_000;
|
|
5
14
|
export class EmbedderError extends Error {
|
|
6
|
-
|
|
15
|
+
kind;
|
|
16
|
+
constructor(message, kind = "http") {
|
|
7
17
|
super(message);
|
|
8
18
|
this.name = "EmbedderError";
|
|
19
|
+
this.kind = kind;
|
|
9
20
|
}
|
|
10
21
|
}
|
|
11
|
-
|
|
22
|
+
// Ollama serves nomic-embed-text at num_ctx 2048; longer inputs are a hard 500
|
|
23
|
+
// ("input length exceeds the context length"), not a silent truncation. 2048
|
|
24
|
+
// tokens × the codebase chars/4 heuristic gives the proactive cap; the reactive
|
|
25
|
+
// halving in embedText covers text that tokenizes denser than 4 chars/token.
|
|
26
|
+
export const EMBED_MAX_CHARS = 8192;
|
|
27
|
+
const EMBED_MIN_CHARS = 512;
|
|
28
|
+
function isContextLengthError(message) {
|
|
29
|
+
return /context length/i.test(message);
|
|
30
|
+
}
|
|
31
|
+
async function embedOnce(text, fetchImpl) {
|
|
12
32
|
const ac = new AbortController();
|
|
13
33
|
const t = setTimeout(() => ac.abort(), EMBED_TIMEOUT_MS);
|
|
14
34
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
35
|
+
let resp;
|
|
36
|
+
try {
|
|
37
|
+
resp = await fetchImpl(`${OLLAMA_BASE}/api/embeddings`, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/json" },
|
|
40
|
+
body: JSON.stringify({ model: EMBED_MODEL, prompt: text }),
|
|
41
|
+
signal: ac.signal,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
throw new EmbedderError(`Ollama unreachable: ${err.message}`, "network");
|
|
46
|
+
}
|
|
21
47
|
if (!resp.ok) {
|
|
22
|
-
|
|
48
|
+
const body = await resp.text().catch(() => "");
|
|
49
|
+
throw new EmbedderError(`Ollama ${resp.status}: ${body}`, isContextLengthError(body) ? "context-limit" : "http");
|
|
23
50
|
}
|
|
24
51
|
const data = (await resp.json());
|
|
25
|
-
if (data.error)
|
|
26
|
-
throw new EmbedderError(`Ollama error: ${data.error}
|
|
52
|
+
if (data.error) {
|
|
53
|
+
throw new EmbedderError(`Ollama error: ${data.error}`, isContextLengthError(data.error) ? "context-limit" : "http");
|
|
54
|
+
}
|
|
27
55
|
if (!Array.isArray(data.embedding) || data.embedding.length === 0) {
|
|
28
56
|
throw new EmbedderError("Ollama returned no embedding");
|
|
29
57
|
}
|
|
@@ -33,6 +61,27 @@ export async function embed(text) {
|
|
|
33
61
|
clearTimeout(t);
|
|
34
62
|
}
|
|
35
63
|
}
|
|
64
|
+
// fetchImpl is injectable for tests only — production callers pass nothing.
|
|
65
|
+
export async function embedText(text, fetchImpl = fetch) {
|
|
66
|
+
let sendChars = Math.min(text.length, EMBED_MAX_CHARS);
|
|
67
|
+
for (;;) {
|
|
68
|
+
try {
|
|
69
|
+
const embedding = await embedOnce(text.slice(0, sendChars), fetchImpl);
|
|
70
|
+
return { embedding, sentChars: sendChars, truncated: sendChars < text.length };
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const contextLimit = err instanceof EmbedderError && err.kind === "context-limit";
|
|
74
|
+
if (contextLimit && sendChars > EMBED_MIN_CHARS) {
|
|
75
|
+
sendChars = Math.floor(sendChars / 2);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function embed(text, fetchImpl) {
|
|
83
|
+
return (await embedText(text, fetchImpl)).embedding;
|
|
84
|
+
}
|
|
36
85
|
export function cosineSimilarity(a, b) {
|
|
37
86
|
if (a.length === 0 || b.length === 0 || a.length !== b.length)
|
|
38
87
|
return 0;
|
|
@@ -95,11 +144,22 @@ export async function probeEmbedding() {
|
|
|
95
144
|
return null;
|
|
96
145
|
}
|
|
97
146
|
}
|
|
98
|
-
|
|
147
|
+
// Best-effort embed for the write/sweep paths: never throws, returns null on
|
|
148
|
+
// failure. The optional `log` receives one line per noteworthy event — a
|
|
149
|
+
// truncation (text was cut to fit the model context) or a failure with its
|
|
150
|
+
// kind — so a context-limit failure is distinguishable from Ollama being down
|
|
151
|
+
// in daemon.log. fetchImpl is injectable for tests only.
|
|
152
|
+
export async function embeddingForNote(text, log, fetchImpl) {
|
|
99
153
|
try {
|
|
100
|
-
|
|
154
|
+
const result = await embedText(text, fetchImpl ?? fetch);
|
|
155
|
+
if (result.truncated) {
|
|
156
|
+
log?.(`embedding truncated: sent ${result.sentChars} of ${text.length} chars (model context limit)`);
|
|
157
|
+
}
|
|
158
|
+
return result.embedding;
|
|
101
159
|
}
|
|
102
|
-
catch {
|
|
160
|
+
catch (err) {
|
|
161
|
+
const kind = err instanceof EmbedderError ? err.kind : "network";
|
|
162
|
+
log?.(`embed failed (${kind}): ${err.message}`);
|
|
103
163
|
return null;
|
|
104
164
|
}
|
|
105
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/search/embedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/search/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
export const LOCAL_EMBED_MODEL = "bge-small-en-v1.5";
|
|
7
|
+
export const LOCAL_EMBED_DIM = 384;
|
|
8
|
+
// bge-small truncates at 512 tokens. 2000 chars ≈ 500 tokens on the chars/4
|
|
9
|
+
// heuristic — under the model's own cutoff, so what we record as "sent" is
|
|
10
|
+
// what the model actually saw, same discipline as the Ollama context fix.
|
|
11
|
+
export const LOCAL_MAX_CHARS = 2000;
|
|
12
|
+
// fastembed is ~233 MB of node_modules — far too heavy to ship as a dependency
|
|
13
|
+
// of a ~200 KB CLI, so it lives in its own npm prefix under ~/.vir, installed
|
|
14
|
+
// on demand by `vir embed --setup` and loaded dynamically from there.
|
|
15
|
+
export const LOCAL_PROVIDER_DIR = join(homedir(), ".vir", "embedder");
|
|
16
|
+
export const LOCAL_MODEL_CACHE_DIR = join(LOCAL_PROVIDER_DIR, "model-cache");
|
|
17
|
+
// Measured on the 2026-07-31 scratchpad experiment (fastembed 2.1.0, darwin).
|
|
18
|
+
export const SETUP_INSTALL_MB = 233;
|
|
19
|
+
export const SETUP_MODEL_MB = 128;
|
|
20
|
+
export function isLocalProviderInstalled(dir = LOCAL_PROVIDER_DIR) {
|
|
21
|
+
return existsSync(join(dir, "node_modules", "fastembed"));
|
|
22
|
+
}
|
|
23
|
+
async function loadFastembedEngine() {
|
|
24
|
+
const req = createRequire(join(LOCAL_PROVIDER_DIR, "package.json"));
|
|
25
|
+
const resolved = req.resolve("fastembed");
|
|
26
|
+
const imported = (await import(pathToFileURL(resolved).href));
|
|
27
|
+
const mod = "FlagEmbedding" in imported ? imported : imported.default;
|
|
28
|
+
const model = await mod.FlagEmbedding.init({
|
|
29
|
+
model: mod.EmbeddingModel["BGESmallENV15"] ?? "fast-bge-small-en-v1.5",
|
|
30
|
+
cacheDir: LOCAL_MODEL_CACHE_DIR,
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
embedBatch: async (texts) => {
|
|
34
|
+
const out = [];
|
|
35
|
+
for await (const batch of model.embed(texts, 16)) {
|
|
36
|
+
for (const v of batch)
|
|
37
|
+
out.push(Array.from(v));
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
},
|
|
41
|
+
queryEmbed: async (text) => Array.from(await model.queryEmbed(text)),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export class LocalProvider {
|
|
45
|
+
engineFactory;
|
|
46
|
+
name = "local";
|
|
47
|
+
modelName = LOCAL_EMBED_MODEL;
|
|
48
|
+
dimensions = LOCAL_EMBED_DIM;
|
|
49
|
+
maxInputChars = LOCAL_MAX_CHARS;
|
|
50
|
+
enginePromise = null;
|
|
51
|
+
// engineFactory is injectable for tests only — production callers pass
|
|
52
|
+
// nothing and get the real fastembed load from LOCAL_PROVIDER_DIR.
|
|
53
|
+
constructor(engineFactory = loadFastembedEngine) {
|
|
54
|
+
this.engineFactory = engineFactory;
|
|
55
|
+
}
|
|
56
|
+
engine() {
|
|
57
|
+
this.enginePromise ??= this.engineFactory();
|
|
58
|
+
return this.enginePromise;
|
|
59
|
+
}
|
|
60
|
+
async available() {
|
|
61
|
+
return isLocalProviderInstalled();
|
|
62
|
+
}
|
|
63
|
+
async embedDoc(text) {
|
|
64
|
+
const sent = text.slice(0, this.maxInputChars);
|
|
65
|
+
const vecs = await (await this.engine()).embedBatch([sent]);
|
|
66
|
+
const embedding = vecs[0];
|
|
67
|
+
if (!embedding || embedding.length === 0) {
|
|
68
|
+
throw new Error("fastembed returned no embedding");
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
embedding,
|
|
72
|
+
sentChars: sent.length,
|
|
73
|
+
truncated: sent.length < text.length,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async embedQuery(text) {
|
|
77
|
+
return (await this.engine()).queryEmbed(text.slice(0, this.maxInputChars));
|
|
78
|
+
}
|
|
79
|
+
provenance() {
|
|
80
|
+
return { model: this.modelName, dim: this.dimensions };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// The cost statement `vir embed --setup` prints BEFORE touching the disk or
|
|
84
|
+
// the network. quiet=true drops the decorative lines but never the numbers.
|
|
85
|
+
export function buildSetupPlan(installed, quiet) {
|
|
86
|
+
const lines = [];
|
|
87
|
+
if (installed) {
|
|
88
|
+
lines.push("fastembed already installed — skipping the package install.");
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
lines.push(`This installs fastembed (~${SETUP_INSTALL_MB} MB of node_modules) into ${LOCAL_PROVIDER_DIR}`);
|
|
92
|
+
}
|
|
93
|
+
lines.push(`and downloads the ${LOCAL_EMBED_MODEL} model (~${SETUP_MODEL_MB} MB) on first embed.`);
|
|
94
|
+
if (!quiet) {
|
|
95
|
+
lines.push("Nothing outside ~/.vir is touched; remove that folder to undo.");
|
|
96
|
+
}
|
|
97
|
+
return { lines, needsInstall: !installed };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=localProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localProvider.js","sourceRoot":"","sources":["../../src/search/localProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { EMBED_DIM, EMBED_MAX_CHARS, EMBED_MODEL, EmbedderError, embed, embedText, isOllamaAvailable, } from "./embedder.js";
|
|
2
|
+
import { LocalProvider, isLocalProviderInstalled } from "./localProvider.js";
|
|
3
|
+
// Resolution order: configured > Ollama detected > local installed > none.
|
|
4
|
+
// `none` is a supported floor (TF-IDF), never an error state — so a configured
|
|
5
|
+
// provider that turns out unusable falls through to detection instead of
|
|
6
|
+
// blocking. Returns null for none.
|
|
7
|
+
export async function resolveEmbeddingProvider(configured, probes = {}) {
|
|
8
|
+
const ollamaUp = probes.ollamaAvailable ?? isOllamaAvailable;
|
|
9
|
+
const localUp = probes.localInstalled ?? isLocalProviderInstalled;
|
|
10
|
+
if (configured === "none")
|
|
11
|
+
return null;
|
|
12
|
+
if (configured === "ollama" && (await ollamaUp()))
|
|
13
|
+
return new OllamaProvider();
|
|
14
|
+
if (configured === "local" && localUp())
|
|
15
|
+
return new LocalProvider();
|
|
16
|
+
if (await ollamaUp())
|
|
17
|
+
return new OllamaProvider();
|
|
18
|
+
if (localUp())
|
|
19
|
+
return new LocalProvider();
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
// Module-level memo mirroring isOllamaAvailableCached: one resolution per
|
|
23
|
+
// process is enough (the daemon restarts every run). Not per-config — a single
|
|
24
|
+
// process never runs two configs.
|
|
25
|
+
let _resolvedProvider = null;
|
|
26
|
+
export function resolveActiveProviderCached(configured) {
|
|
27
|
+
_resolvedProvider ??= resolveEmbeddingProvider(configured);
|
|
28
|
+
return _resolvedProvider;
|
|
29
|
+
}
|
|
30
|
+
// Best-effort embed through a provider: never throws, returns null on failure,
|
|
31
|
+
// reports truncation and failure kind through `log` — the provider-agnostic
|
|
32
|
+
// successor of embedder.ts's embeddingForNote.
|
|
33
|
+
export async function embedNoteWithProvider(provider, text, log) {
|
|
34
|
+
try {
|
|
35
|
+
const result = await provider.embedDoc(text);
|
|
36
|
+
if (result.truncated) {
|
|
37
|
+
log?.(`embedding truncated: sent ${result.sentChars} of ${text.length} chars (model context limit)`);
|
|
38
|
+
}
|
|
39
|
+
return result.embedding;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const kind = err instanceof EmbedderError ? err.kind : "network";
|
|
43
|
+
log?.(`embed failed (${kind}): ${err.message}`);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class OllamaProvider {
|
|
48
|
+
fetchImpl;
|
|
49
|
+
name = "ollama";
|
|
50
|
+
modelName = EMBED_MODEL;
|
|
51
|
+
dimensions = EMBED_DIM;
|
|
52
|
+
maxInputChars = EMBED_MAX_CHARS;
|
|
53
|
+
// fetchImpl is injectable for tests only — production callers pass nothing.
|
|
54
|
+
constructor(fetchImpl) {
|
|
55
|
+
this.fetchImpl = fetchImpl;
|
|
56
|
+
}
|
|
57
|
+
available() {
|
|
58
|
+
return isOllamaAvailable();
|
|
59
|
+
}
|
|
60
|
+
embedDoc(text) {
|
|
61
|
+
return embedText(text, this.fetchImpl);
|
|
62
|
+
}
|
|
63
|
+
// Routed through embed() (not embedText directly) so test suites that mock
|
|
64
|
+
// the embedder module intercept query embedding the same way they always have.
|
|
65
|
+
embedQuery(text) {
|
|
66
|
+
return embed(text, this.fetchImpl);
|
|
67
|
+
}
|
|
68
|
+
provenance() {
|
|
69
|
+
return { model: this.modelName, dim: this.dimensions };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/search/provider.ts"],"names":[],"mappings":"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"}
|