obedding 1.0.1 → 1.0.2
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 +87 -253
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -9
- package/dist/index.js.map +1 -1
- package/dist/lmstudio.d.ts +57 -0
- package/dist/lmstudio.d.ts.map +1 -0
- package/dist/lmstudio.js +109 -0
- package/dist/lmstudio.js.map +1 -0
- package/dist/search.d.ts +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +15 -3
- package/dist/search.js.map +1 -1
- package/dist/storage.d.ts +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -1
- package/dist/storage.js.map +1 -1
- package/docs/API.md +290 -0
- package/docs/ARCHITECTURE.md +229 -0
- package/docs/BACKENDS.md +230 -0
- package/package.json +5 -2
package/dist/lmstudio.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LM Studio API client for generating embeddings using GGUF models
|
|
3
|
+
*
|
|
4
|
+
* LM Studio provides an OpenAI-compatible API for local models.
|
|
5
|
+
* Default port: 1234
|
|
6
|
+
* Default model: Qwen3-Embedding-0.6B-GGUF (from Hugging Face)
|
|
7
|
+
*/
|
|
8
|
+
const LMSTUDIO_BASE_URL = process.env.LMSTUDIO_BASE_URL || 'http://localhost:1234';
|
|
9
|
+
const DEFAULT_MODEL = 'text-embedding-qwen3-embedding-0.6b';
|
|
10
|
+
/**
|
|
11
|
+
* Check if LM Studio is running
|
|
12
|
+
*/
|
|
13
|
+
export async function checkLMStudioConnection() {
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(`${LMSTUDIO_BASE_URL}/v1/models`, {
|
|
16
|
+
method: 'GET',
|
|
17
|
+
signal: AbortSignal.timeout(5000)
|
|
18
|
+
});
|
|
19
|
+
return response.ok;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generate embedding for text using LM Studio
|
|
27
|
+
*/
|
|
28
|
+
export async function generateEmbedding(text, model = DEFAULT_MODEL) {
|
|
29
|
+
const response = await fetch(`${LMSTUDIO_BASE_URL}/v1/embeddings`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
model,
|
|
36
|
+
input: text,
|
|
37
|
+
encoding_format: 'float'
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
let errorMessage = response.statusText;
|
|
42
|
+
try {
|
|
43
|
+
const error = await response.json();
|
|
44
|
+
if (error.error?.message) {
|
|
45
|
+
errorMessage = error.error.message;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
try {
|
|
50
|
+
errorMessage = await response.text();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Use status text
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`LM Studio API error: ${errorMessage}`);
|
|
57
|
+
}
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
if (!data.data || !Array.isArray(data.data) || data.data.length === 0) {
|
|
60
|
+
throw new Error('Invalid embedding response from LM Studio');
|
|
61
|
+
}
|
|
62
|
+
const embedding = data.data[0].embedding;
|
|
63
|
+
if (!embedding || !Array.isArray(embedding)) {
|
|
64
|
+
throw new Error('Invalid embedding format in LM Studio response');
|
|
65
|
+
}
|
|
66
|
+
return embedding;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Batch generate embeddings for multiple texts
|
|
70
|
+
*/
|
|
71
|
+
export async function generateEmbeddings(texts, model = DEFAULT_MODEL, onProgress) {
|
|
72
|
+
const embeddings = [];
|
|
73
|
+
for (let i = 0; i < texts.length; i++) {
|
|
74
|
+
const embedding = await generateEmbedding(texts[i], model);
|
|
75
|
+
embeddings.push(embedding);
|
|
76
|
+
if (onProgress) {
|
|
77
|
+
onProgress(i + 1, texts.length);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return embeddings;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get model information
|
|
84
|
+
*/
|
|
85
|
+
export async function getModelInfo(model = DEFAULT_MODEL) {
|
|
86
|
+
try {
|
|
87
|
+
const response = await fetch(`${LMSTUDIO_BASE_URL}/v1/models`);
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const data = await response.json();
|
|
92
|
+
const models = data.data || [];
|
|
93
|
+
// Try to find exact or partial match
|
|
94
|
+
const modelInfo = models.find((m) => m.id === model || m.id.includes(model) || model.includes(m.id));
|
|
95
|
+
if (modelInfo) {
|
|
96
|
+
// Note: LM Studio doesn't provide dimensions in the models list
|
|
97
|
+
// We'd need to generate an embedding to determine dimensions
|
|
98
|
+
return {
|
|
99
|
+
name: modelInfo.id,
|
|
100
|
+
dimensions: undefined
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=lmstudio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lmstudio.js","sourceRoot":"","sources":["../src/lmstudio.ts"],"names":[],"mappings":"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"}
|
package/dist/search.d.ts
CHANGED
package/dist/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAiGjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAoCpE"}
|
package/dist/search.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { generateEmbedding as generateOllamaEmbedding, checkOllamaConnection } from './ollama.js';
|
|
2
2
|
import { generateEmbedding as generateMLXEmbedding, checkMLXConnection } from './mlx.js';
|
|
3
|
+
import { generateEmbedding as generateLMStudioEmbedding, checkLMStudioConnection } from './lmstudio.js';
|
|
3
4
|
import { StorageManager } from './storage.js';
|
|
4
5
|
import { cosineSimilarity, truncateToTokens } from './utils.js';
|
|
5
6
|
/**
|
|
@@ -7,7 +8,7 @@ import { cosineSimilarity, truncateToTokens } from './utils.js';
|
|
|
7
8
|
*/
|
|
8
9
|
export async function searchNotes(options) {
|
|
9
10
|
const startTime = Date.now();
|
|
10
|
-
const { query, storagePath, topK = 10, backend = '
|
|
11
|
+
const { query, storagePath, topK = 10, backend = 'lmstudio', model, minScore = 0.0 } = options;
|
|
11
12
|
// Determine model and connection check based on backend
|
|
12
13
|
let effectiveModel = model;
|
|
13
14
|
let isConnected = false;
|
|
@@ -15,12 +16,21 @@ export async function searchNotes(options) {
|
|
|
15
16
|
isConnected = await checkOllamaConnection();
|
|
16
17
|
effectiveModel = effectiveModel || 'qwen3-embedding:0.6b';
|
|
17
18
|
}
|
|
19
|
+
else if (backend === 'lmstudio') {
|
|
20
|
+
isConnected = await checkLMStudioConnection();
|
|
21
|
+
effectiveModel = effectiveModel || 'text-embedding-qwen3-embedding-0.6b';
|
|
22
|
+
}
|
|
18
23
|
else {
|
|
19
24
|
isConnected = await checkMLXConnection();
|
|
20
25
|
effectiveModel = effectiveModel || 'mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ';
|
|
21
26
|
}
|
|
27
|
+
const serverNames = {
|
|
28
|
+
ollama: 'Ollama',
|
|
29
|
+
lmstudio: 'LM Studio',
|
|
30
|
+
mlx: 'MLX'
|
|
31
|
+
};
|
|
22
32
|
if (!isConnected) {
|
|
23
|
-
throw new Error(`Cannot connect to embedding server. Make sure ${backend
|
|
33
|
+
throw new Error(`Cannot connect to embedding server. Make sure ${serverNames[backend] || serverNames.ollama} is running.`);
|
|
24
34
|
}
|
|
25
35
|
// Load storage
|
|
26
36
|
const storage = new StorageManager(storagePath);
|
|
@@ -38,7 +48,9 @@ export async function searchNotes(options) {
|
|
|
38
48
|
const truncatedQuery = truncateToTokens(query, 8000);
|
|
39
49
|
const queryEmbedding = backend === 'ollama'
|
|
40
50
|
? await generateOllamaEmbedding(truncatedQuery, effectiveModel)
|
|
41
|
-
:
|
|
51
|
+
: backend === 'lmstudio'
|
|
52
|
+
? await generateLMStudioEmbedding(truncatedQuery, effectiveModel)
|
|
53
|
+
: await generateMLXEmbedding(truncatedQuery, effectiveModel);
|
|
42
54
|
// Calculate similarities
|
|
43
55
|
const results = [];
|
|
44
56
|
for (const note of notes) {
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkChE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAsB;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export declare class StorageManager {
|
|
|
47
47
|
/**
|
|
48
48
|
* Add or update a note embedding
|
|
49
49
|
*/
|
|
50
|
-
upsertNote(note: NoteEmbedding): Promise<void>;
|
|
50
|
+
upsertNote(note: NoteEmbedding, model?: string, dimensions?: number): Promise<void>;
|
|
51
51
|
/**
|
|
52
52
|
* Remove a note by path
|
|
53
53
|
*/
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAMD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAA+B;gBAE/B,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,QAAQ,IAAI,aAAa,EAAE;IAO3B;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAMD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAA+B;gBAE/B,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,QAAQ,IAAI,aAAa,EAAE;IAO3B;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BzF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAc3D;;OAEG;IACH,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;IAwBD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAoBjB"}
|
package/dist/storage.js
CHANGED
|
@@ -73,7 +73,7 @@ export class StorageManager {
|
|
|
73
73
|
/**
|
|
74
74
|
* Add or update a note embedding
|
|
75
75
|
*/
|
|
76
|
-
async upsertNote(note) {
|
|
76
|
+
async upsertNote(note, model, dimensions) {
|
|
77
77
|
if (!this.data) {
|
|
78
78
|
await this.initialize();
|
|
79
79
|
}
|
|
@@ -87,6 +87,13 @@ export class StorageManager {
|
|
|
87
87
|
this.data.notes.push(note);
|
|
88
88
|
}
|
|
89
89
|
this.data.indexed_at = new Date().toISOString();
|
|
90
|
+
// Update model metadata if provided
|
|
91
|
+
if (model !== undefined) {
|
|
92
|
+
this.data.model = model;
|
|
93
|
+
}
|
|
94
|
+
if (dimensions !== undefined) {
|
|
95
|
+
this.data.dimensions = dimensions;
|
|
96
|
+
}
|
|
90
97
|
}
|
|
91
98
|
/**
|
|
92
99
|
* Remove a note by path
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AA4B7B,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,aAAa,GAAG,6CAA6C,CAAC;AACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,WAAW,CAAS;IACpB,IAAI,GAA0B,IAAI,CAAC;IAE3C,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uCAAwC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,uCAAuC;gBACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,2BAA4B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA4B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAmB;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/docs/API.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# CLI Reference
|
|
2
|
+
|
|
3
|
+
## Commands
|
|
4
|
+
|
|
5
|
+
### `index`
|
|
6
|
+
|
|
7
|
+
Generate embeddings for Obsidian notes.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
obedding index [options]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Options:**
|
|
14
|
+
|
|
15
|
+
| Option | Alias | Description | Default |
|
|
16
|
+
|--------|-------|-------------|---------|
|
|
17
|
+
| `--vault <path>` | `-v` | Path to Obsidian vault | `~/Library/Mobile Documents/iCloud~md~obsidian/Documents/obsidian` |
|
|
18
|
+
| `--storage <path>` | `-s` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
19
|
+
| `--incremental` | `-i` | Only index new/modified files | `false` |
|
|
20
|
+
| `--backend <type>` | `-b` | Embedding backend: `lmstudio`, `ollama`, `mlx` | `lmstudio` |
|
|
21
|
+
| `--model <name>` | `-m` | Custom model name | backend default |
|
|
22
|
+
|
|
23
|
+
**Examples:**
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Index with default settings (LM Studio)
|
|
27
|
+
obedding index --vault ~/.obsidian/Projects
|
|
28
|
+
|
|
29
|
+
# Incremental indexing (skip unchanged files)
|
|
30
|
+
obedding index --vault ~/.obsidian/Projects --incremental
|
|
31
|
+
|
|
32
|
+
# Use specific backend
|
|
33
|
+
obedding index --vault ~/.obsidian/Projects --backend ollama
|
|
34
|
+
|
|
35
|
+
# Use custom model
|
|
36
|
+
obedding index --vault ~/.obsidian/Projects --backend lmstudio --model "nomic-embed-text-v1.5"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Output:**
|
|
40
|
+
```
|
|
41
|
+
🔍 Obsidian Memory - Index Notes
|
|
42
|
+
|
|
43
|
+
Checking LM Studio connection...
|
|
44
|
+
✓ LM Studio embedding server is running
|
|
45
|
+
✓ Using model: text-embedding-qwen3-embedding-0.6b
|
|
46
|
+
|
|
47
|
+
Scanning vault: /Users/user/.obsidian/Projects
|
|
48
|
+
Found 27 markdown files
|
|
49
|
+
|
|
50
|
+
Generating embeddings for 27 notes...
|
|
51
|
+
[3.7%] path/to/note1.md
|
|
52
|
+
[7.4%] path/to/note2.md
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
✓ Embedding variance: 45.2% (good)
|
|
56
|
+
|
|
57
|
+
Storing embeddings...
|
|
58
|
+
|
|
59
|
+
✓ Indexed 27 notes in 6.2s
|
|
60
|
+
Skipped: 0 notes
|
|
61
|
+
Storage size: 108.00 KB
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### `search`
|
|
65
|
+
|
|
66
|
+
Semantic search for notes.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
obedding search <query> [options]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Options:**
|
|
73
|
+
|
|
74
|
+
| Option | Alias | Description | Default |
|
|
75
|
+
|--------|-------|-------------|---------|
|
|
76
|
+
| `--vault <path>` | `-v` | Path to Obsidian vault (for reference) | default vault |
|
|
77
|
+
| `--storage <path>` | `-s` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
78
|
+
| `--top-k <number>` | `-k` | Number of results to return | `10` |
|
|
79
|
+
| `--backend <type>` | `-b` | Embedding backend: `lmstudio`, `ollama`, `mlx` | `lmstudio` |
|
|
80
|
+
| `--model <name>` | `-m` | Custom model name | backend default |
|
|
81
|
+
| `--min-score <number>` | | Minimum similarity score (0-1) | `0` |
|
|
82
|
+
| `--json` | | Output results as JSON | `false` |
|
|
83
|
+
|
|
84
|
+
**Examples:**
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Basic search
|
|
88
|
+
obedding search "caching strategies"
|
|
89
|
+
|
|
90
|
+
# Top 5 results
|
|
91
|
+
obedding search "database optimization" --top-k 5
|
|
92
|
+
|
|
93
|
+
# Filter by relevance
|
|
94
|
+
obedding search "redis" --min-score 0.6
|
|
95
|
+
|
|
96
|
+
# JSON output
|
|
97
|
+
obedding search "API design" --json
|
|
98
|
+
|
|
99
|
+
# Use specific backend
|
|
100
|
+
obedding search "query" --backend ollama
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Output:**
|
|
104
|
+
```
|
|
105
|
+
🔍 Obsidian Memory - Search
|
|
106
|
+
|
|
107
|
+
Query: "caching strategies"
|
|
108
|
+
Found 27 results in 0.234s
|
|
109
|
+
Showing top 10 results:
|
|
110
|
+
|
|
111
|
+
[1] ●●● 82.3% Projects/cli/my-app/cache-strategy.md
|
|
112
|
+
Title: Cache Strategy Decision
|
|
113
|
+
Context: my-app / feature-redis-cache
|
|
114
|
+
Tags: decision, architecture, cache
|
|
115
|
+
|
|
116
|
+
We decided to use Redis for caching with a 1-hour TTL...
|
|
117
|
+
The cache invalidation strategy will be...
|
|
118
|
+
|
|
119
|
+
[2] ●●○ 67.8% Projects/cli/my-app/performance-notes.md
|
|
120
|
+
Title: Performance Optimization Notes
|
|
121
|
+
Context: my-app
|
|
122
|
+
|
|
123
|
+
Caching layer reduced API latency by 40%...
|
|
124
|
+
Consider implementing cache warming for...
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**JSON Output:**
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"query": "caching strategies",
|
|
131
|
+
"results": [
|
|
132
|
+
{
|
|
133
|
+
"path": "Projects/cli/my-app/cache-strategy.md",
|
|
134
|
+
"vault_path": "/full/path/to/cache-strategy.md",
|
|
135
|
+
"score": 0.823,
|
|
136
|
+
"metadata": {
|
|
137
|
+
"title": "Cache Strategy Decision",
|
|
138
|
+
"repo": "my-app",
|
|
139
|
+
"context": "feature-redis-cache",
|
|
140
|
+
"tags": ["decision", "architecture", "cache"]
|
|
141
|
+
},
|
|
142
|
+
"excerpt": "We decided to use Redis for caching..."
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"totalFound": 27,
|
|
146
|
+
"duration": 0.234
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### `stats`
|
|
151
|
+
|
|
152
|
+
Show storage statistics.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
obedding stats [options]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Options:**
|
|
159
|
+
|
|
160
|
+
| Option | Alias | Description | Default |
|
|
161
|
+
|--------|-------|-------------|---------|
|
|
162
|
+
| `--storage <path>` | `-s` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
163
|
+
|
|
164
|
+
**Examples:**
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
obedding stats
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Output:**
|
|
171
|
+
```
|
|
172
|
+
🔍 Obsidian Memory - Statistics
|
|
173
|
+
|
|
174
|
+
Storage: /Users/user/.claude/data/obsidian-embeddings.json
|
|
175
|
+
Notes: 27
|
|
176
|
+
Model: text-embedding-qwen3-embedding-0.6b
|
|
177
|
+
Dimensions: 1024
|
|
178
|
+
Storage size: 108.00 KB
|
|
179
|
+
Last indexed: 2026-03-08T10:30:00Z
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### `clear`
|
|
183
|
+
|
|
184
|
+
Delete all stored embeddings.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
obedding clear [options]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Options:**
|
|
191
|
+
|
|
192
|
+
| Option | Alias | Description | Default |
|
|
193
|
+
|--------|-------|-------------|---------|
|
|
194
|
+
| `--storage <path>` | `-s` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
195
|
+
| `--force` | `-f` | Skip confirmation | `false` |
|
|
196
|
+
|
|
197
|
+
**Examples:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# With confirmation
|
|
201
|
+
obedding clear
|
|
202
|
+
|
|
203
|
+
# Skip confirmation
|
|
204
|
+
obedding clear --force
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Output:**
|
|
208
|
+
```
|
|
209
|
+
? Are you sure you want to clear all embeddings at /Users/user/.claude/data/obsidian-embeddings.json? (yes/no): yes
|
|
210
|
+
✓ Cleared all embeddings
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Exit Codes
|
|
214
|
+
|
|
215
|
+
| Code | Meaning |
|
|
216
|
+
|------|---------|
|
|
217
|
+
| 0 | Success |
|
|
218
|
+
| 1 | Error (see error message) |
|
|
219
|
+
|
|
220
|
+
## Error Messages
|
|
221
|
+
|
|
222
|
+
| Error | Cause | Solution |
|
|
223
|
+
|-------|-------|----------|
|
|
224
|
+
| `Cannot connect to LM Studio embedding server` | LM Studio not running | Start LM Studio server |
|
|
225
|
+
| `Cannot connect to Ollama embedding server` | Ollama not running | Run `ollama serve` |
|
|
226
|
+
| `Cannot connect to MLX embedding server` | MLX not running | Run `swama serve` |
|
|
227
|
+
| `Invalid embedding response` | Backend returned invalid data | Check backend logs, try different model |
|
|
228
|
+
| `Dimension mismatch` | Query embedding size doesn't match stored | Re-index with current backend |
|
|
229
|
+
| `No notes to index` | All files up to date | Use `--incremental` or modify files |
|
|
230
|
+
|
|
231
|
+
## Configuration Files
|
|
232
|
+
|
|
233
|
+
obedding does not use configuration files. All configuration is via command-line options.
|
|
234
|
+
|
|
235
|
+
## Storage Format
|
|
236
|
+
|
|
237
|
+
Embeddings are stored in JSON format at `~/.claude/data/obsidian-embeddings.json`:
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"version": "1.0",
|
|
242
|
+
"model": "text-embedding-qwen3-embedding-0.6b",
|
|
243
|
+
"dimensions": 1024,
|
|
244
|
+
"indexed_at": "2026-03-08T10:30:00Z",
|
|
245
|
+
"notes": [
|
|
246
|
+
{
|
|
247
|
+
"path": "Projects/cli/my-app/note.md",
|
|
248
|
+
"vault_path": "/full/path/to/note.md",
|
|
249
|
+
"embedding": [0.0123, -0.0456, ...],
|
|
250
|
+
"metadata": {
|
|
251
|
+
"type": "cli",
|
|
252
|
+
"repo": "my-app",
|
|
253
|
+
"context": "feature-redis-cache",
|
|
254
|
+
"tags": ["decision", "architecture"],
|
|
255
|
+
"title": "Note Title"
|
|
256
|
+
},
|
|
257
|
+
"excerpt": "First 200 characters of note...",
|
|
258
|
+
"indexed_at": "2026-03-08T10:30:00Z",
|
|
259
|
+
"hash": "sha256hash"
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Programmatic Usage
|
|
266
|
+
|
|
267
|
+
You can also use obedding as a Node.js library:
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
import { indexNotes, searchNotes } from 'obedding';
|
|
271
|
+
|
|
272
|
+
// Index notes
|
|
273
|
+
await indexNotes({
|
|
274
|
+
vaultPath: '~/.obsidian/Projects',
|
|
275
|
+
storagePath: '~/.claude/data/obsidian-embeddings.json',
|
|
276
|
+
backend: 'lmstudio',
|
|
277
|
+
incremental: true
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Search notes
|
|
281
|
+
const results = await searchNotes({
|
|
282
|
+
query: 'caching strategies',
|
|
283
|
+
storagePath: '~/.claude/data/obsidian-embeddings.json',
|
|
284
|
+
backend: 'lmstudio',
|
|
285
|
+
topK: 5,
|
|
286
|
+
minScore: 0.6
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
console.log(results);
|
|
290
|
+
```
|