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/README.md
CHANGED
|
@@ -1,318 +1,152 @@
|
|
|
1
|
-
#
|
|
1
|
+
# obedding
|
|
2
2
|
|
|
3
|
-
Semantic search for your Obsidian vault using local
|
|
3
|
+
> Semantic search for your Obsidian vault using local embeddings
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
│ ~/.obsidian/ │ │ (obedding) │ │ embeddings.json │
|
|
24
|
-
└─────────────────┘ └──────────────────┘ └─────────────────┘
|
|
25
|
-
│
|
|
26
|
-
▼
|
|
27
|
-
┌──────────────────┐
|
|
28
|
-
│ MLX Embedding │
|
|
29
|
-
│ Server │
|
|
30
|
-
│ localhost:28100 │
|
|
31
|
-
└──────────────────┘
|
|
5
|
+
```text _____________ ___________
|
|
6
|
+
│ │
|
|
7
|
+
▼ ▼
|
|
8
|
+
┌─────────────┐ ┌──────────────┐
|
|
9
|
+
│ Obsidian │ │ obedding │
|
|
10
|
+
│ Vault │─────▶│ │
|
|
11
|
+
│ │ │ ● Index │
|
|
12
|
+
│ *.md files │ │ ● Search │
|
|
13
|
+
│ │ │ ● Stats │
|
|
14
|
+
└─────────────┘ └──────┬───────┘
|
|
15
|
+
│
|
|
16
|
+
┌───────────────┼───────────────┐
|
|
17
|
+
│ │ │
|
|
18
|
+
┌─────▼─────┐ ┌─────▼─────┐ ┌────▼─────┐
|
|
19
|
+
│ LM Studio │ │ Ollama │ │ MLX │
|
|
20
|
+
│ (DEFAULT) │ │ │ │ (NOT REC)│
|
|
21
|
+
│ :1234 │ │ :11434 │ │ :28100 │
|
|
22
|
+
└───────────┘ └───────────┘ └──────────┘
|
|
32
23
|
```
|
|
33
24
|
|
|
34
|
-
|
|
25
|
+
## ✨ Features
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
27
|
+
- **🔍 Semantic Search** — Find notes by meaning, not just keywords
|
|
28
|
+
- **🏠 Local & Private** — Everything runs on your machine, no external API calls
|
|
29
|
+
- **🔄 Multiple Backends** — LM Studio (default), Ollama, or MLX
|
|
30
|
+
- **⚡ Incremental Indexing** — Only re-index changed files
|
|
31
|
+
- **📝 YAML Support** — Extracts metadata from frontmatter
|
|
41
32
|
|
|
42
|
-
|
|
43
|
-
- OpenAI-compatible `/v1/embeddings` API
|
|
44
|
-
- Batch processing for efficiency
|
|
45
|
-
- Auto-truncation to 2048 dimensions (MLX workaround)
|
|
46
|
-
- Connection health checks
|
|
33
|
+
## 🚀 Quick Start
|
|
47
34
|
|
|
48
|
-
|
|
49
|
-
- JSON file storage (`~/.claude/data/obsidian-embeddings.json`)
|
|
50
|
-
- Content-based change detection
|
|
51
|
-
- Upsert operations for note updates
|
|
52
|
-
- Statistics and management
|
|
35
|
+
### 1. Install a Backend
|
|
53
36
|
|
|
54
|
-
|
|
55
|
-
- Cosine similarity scoring
|
|
56
|
-
- Top-K result retrieval
|
|
57
|
-
- Minimum score filtering
|
|
58
|
-
- Formatted output with excerpts
|
|
59
|
-
|
|
60
|
-
5. **CLI Interface** (`src/cli.ts`)
|
|
61
|
-
- Commander.js-based CLI
|
|
62
|
-
- Commands: index, search, stats, clear
|
|
63
|
-
- Configurable options
|
|
64
|
-
|
|
65
|
-
## Installation
|
|
66
|
-
|
|
67
|
-
### npx (No installation required!)
|
|
68
|
-
|
|
69
|
-
Use directly without installing:
|
|
37
|
+
Choose one — LM Studio is recommended:
|
|
70
38
|
|
|
39
|
+
**LM Studio** (GUI, easy):
|
|
71
40
|
```bash
|
|
72
|
-
|
|
73
|
-
|
|
41
|
+
# Download from https://lmstudio.ai/
|
|
42
|
+
# Load an embedding model and start the server
|
|
74
43
|
```
|
|
75
44
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
### Optional: Global Install
|
|
79
|
-
|
|
80
|
-
For frequent use, install globally:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
npm install -g obedging
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Then use directly:
|
|
87
|
-
```bash
|
|
88
|
-
obedding index --vault ~/.obsidian/Projects
|
|
89
|
-
obedding search "your query"
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### From Source
|
|
93
|
-
|
|
45
|
+
**Ollama** (CLI, simple):
|
|
94
46
|
```bash
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
npm run build
|
|
99
|
-
npm link
|
|
47
|
+
curl -fsSL https://ollama.ai/install.sh | sh
|
|
48
|
+
ollama pull qwen3-embedding:0.6b
|
|
49
|
+
ollama serve
|
|
100
50
|
```
|
|
101
51
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
1. **MLX Embedding Server** running at `http://localhost:28100` with model `mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ`
|
|
105
|
-
|
|
106
|
-
2. **Node.js** 18+ installed
|
|
107
|
-
|
|
108
|
-
3. **Obsidian vault** at:
|
|
109
|
-
```
|
|
110
|
-
~/.obsidian/Projects
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Usage
|
|
114
|
-
|
|
115
|
-
### Using npx (Recommended)
|
|
116
|
-
|
|
117
|
-
Index all notes in your Obsidian vault:
|
|
52
|
+
### 2. Index Your Notes
|
|
118
53
|
|
|
119
54
|
```bash
|
|
120
|
-
npx
|
|
55
|
+
npx obedding index --vault ~/.obsidian/Projects
|
|
121
56
|
```
|
|
122
57
|
|
|
123
|
-
|
|
58
|
+
### 3. Search
|
|
124
59
|
|
|
125
60
|
```bash
|
|
126
|
-
npx obedding
|
|
61
|
+
npx obedding search "what did we decide about caching?"
|
|
127
62
|
```
|
|
128
63
|
|
|
129
|
-
|
|
64
|
+
## 📖 Usage
|
|
130
65
|
|
|
131
66
|
```bash
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
Get top 5 results:
|
|
67
|
+
# Index notes
|
|
68
|
+
npx obedding index --vault ~/.obsidian/Projects
|
|
136
69
|
|
|
137
|
-
|
|
138
|
-
npx obedding
|
|
139
|
-
```
|
|
70
|
+
# Incremental indexing (faster)
|
|
71
|
+
npx obedding index --vault ~/.obsidian/Projects --incremental
|
|
140
72
|
|
|
141
|
-
|
|
73
|
+
# Semantic search
|
|
74
|
+
npx obedding search "database optimization"
|
|
142
75
|
|
|
143
|
-
|
|
144
|
-
npx obedding search "API design" --
|
|
145
|
-
```
|
|
76
|
+
# Top 5 results
|
|
77
|
+
npx obedding search "API design" --top-k 5
|
|
146
78
|
|
|
147
|
-
|
|
79
|
+
# Filter by relevance
|
|
80
|
+
npx obedding search "redis" --min-score 0.6
|
|
148
81
|
|
|
149
|
-
|
|
82
|
+
# JSON output
|
|
83
|
+
npx obedding search "architecture" --json
|
|
150
84
|
|
|
151
|
-
|
|
85
|
+
# Show statistics
|
|
152
86
|
npx obedding stats
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Clear all embeddings:
|
|
156
87
|
|
|
157
|
-
|
|
88
|
+
# Clear all embeddings
|
|
158
89
|
npx obedding clear --force
|
|
159
90
|
```
|
|
160
91
|
|
|
161
|
-
## Options
|
|
162
|
-
|
|
163
|
-
### Index Command
|
|
164
|
-
|
|
165
|
-
| Option | Description | Default |
|
|
166
|
-
|--------|-------------|---------|
|
|
167
|
-
| `-v, --vault <path>` | Path to Obsidian vault | `~/.obsidian` |
|
|
168
|
-
| `-s, --storage <path>` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
169
|
-
| `-i, --incremental` | Only index new/modified files | false |
|
|
170
|
-
| `-m, --model <name>` | MLX model to use | `mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ` |
|
|
171
|
-
|
|
172
|
-
### Search Command
|
|
173
|
-
|
|
174
|
-
| Option | Description | Default |
|
|
175
|
-
|--------|-------------|---------|
|
|
176
|
-
| `-k, --top-k <number>` | Number of results | 10 |
|
|
177
|
-
| `-s, --storage <path>` | Path to storage file | `~/.claude/data/obsidian-embeddings.json` |
|
|
178
|
-
| `-m, --model <name>` | MLX model to use | `mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ` |
|
|
179
|
-
| `--min-score <number>` | Minimum similarity (0-1) | 0 |
|
|
180
|
-
| `--json` | Output as JSON | false |
|
|
181
|
-
|
|
182
|
-
## Data Structure
|
|
183
|
-
|
|
184
|
-
Embeddings are stored in `~/.claude/data/obsidian-embeddings.json`:
|
|
185
|
-
|
|
186
|
-
```json
|
|
187
|
-
{
|
|
188
|
-
"version": "1.0",
|
|
189
|
-
"model": "mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ",
|
|
190
|
-
"dimensions": 2048,
|
|
191
|
-
"indexed_at": "2026-03-08T10:00:00Z",
|
|
192
|
-
"notes": [
|
|
193
|
-
{
|
|
194
|
-
"path": "Projects/cli/my-repo/feature-x/note.md",
|
|
195
|
-
"vault_path": "/full/path/to/note.md",
|
|
196
|
-
"embedding": [0.0123, -0.0456, ...],
|
|
197
|
-
"metadata": {
|
|
198
|
-
"type": "cli",
|
|
199
|
-
"repo": "my-repo",
|
|
200
|
-
"context": "feature-x",
|
|
201
|
-
"tags": ["decision", "architecture"],
|
|
202
|
-
"title": "Note Title"
|
|
203
|
-
},
|
|
204
|
-
"excerpt": "First 200 chars...",
|
|
205
|
-
"indexed_at": "2026-03-08T10:00:00Z",
|
|
206
|
-
"hash": "sha256..."
|
|
207
|
-
}
|
|
208
|
-
]
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Performance
|
|
213
|
-
|
|
214
|
-
- **Embedding dimensions**: 2048 (truncated from variable MLX output)
|
|
215
|
-
- **Storage per note**: ~8KB
|
|
216
|
-
- **Index speed**: ~1-2 notes/sec (depends on hardware)
|
|
217
|
-
- **Search latency**: ~50-100ms for 100 notes
|
|
218
|
-
|
|
219
|
-
## Design Decisions
|
|
220
|
-
|
|
221
|
-
### Why JSON Storage?
|
|
222
|
-
|
|
223
|
-
- **Simplicity**: No database dependencies
|
|
224
|
-
- **Portability**: Single file can be easily backed up or moved
|
|
225
|
-
- **Debuggability**: Human-readable for inspection
|
|
226
|
-
- **Sufficient scale**: Handles 1000s of notes efficiently
|
|
227
|
-
|
|
228
|
-
SQLite would be better for 10K+ notes, but JSON is optimal for the target use case.
|
|
92
|
+
## 🎯 Backend Options
|
|
229
93
|
|
|
230
|
-
|
|
94
|
+
| Backend | Server | Model | Dims | Notes |
|
|
95
|
+
|---------|--------|-------|------|-------|
|
|
96
|
+
| **LM Studio** `--backend lmstudio` | `:1234` | `text-embedding-qwen3-embedding-0.6b` | 1024 | ✅ Default, GUI |
|
|
97
|
+
| **Ollama** `--backend ollama` | `:11434` | `qwen3-embedding:0.6b` | 768 | ✅ Stable |
|
|
98
|
+
| **MLX** `--backend mlx` | `:28100` | `Qwen3-Embedding-0.6B-4bit-DWQ` | 2048 | ⚠️ Known issues |
|
|
231
99
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
### Why Content Hashing?
|
|
235
|
-
|
|
236
|
-
Incremental indexing uses SHA-256 hashes of note content (excluding frontmatter) to detect changes. This is more reliable than modification timestamps and prevents unnecessary re-embedding.
|
|
237
|
-
|
|
238
|
-
## Claude Code Integration
|
|
239
|
-
|
|
240
|
-
The `/obsidian-search` skill automatically triggers when you ask to search your notes:
|
|
241
|
-
|
|
242
|
-
- "Search obsidian for..."
|
|
243
|
-
- "Find notes about..."
|
|
244
|
-
- "What did we decide about..."
|
|
245
|
-
- "Show me notes related to..."
|
|
246
|
-
|
|
247
|
-
## YAML Frontmatter
|
|
248
|
-
|
|
249
|
-
Obsidian Memory extracts metadata from YAML frontmatter:
|
|
100
|
+
## 📁 YAML Frontmatter
|
|
250
101
|
|
|
251
102
|
```yaml
|
|
252
103
|
---
|
|
253
104
|
type: cli
|
|
254
105
|
repo: my-repo
|
|
255
106
|
context: feature-x
|
|
256
|
-
|
|
257
|
-
tags: [decision, architecture, cache]
|
|
107
|
+
tags: [decision, architecture]
|
|
258
108
|
title: Cache Strategy Decision
|
|
259
109
|
---
|
|
260
110
|
```
|
|
261
111
|
|
|
262
|
-
##
|
|
112
|
+
## 📚 Documentation
|
|
263
113
|
|
|
264
|
-
|
|
114
|
+
- **[Architecture](docs/ARCHITECTURE.md)** — System design and components
|
|
115
|
+
- **[Backends](docs/BACKENDS.md)** — Backend setup and comparison
|
|
116
|
+
- **[API Reference](docs/API.md)** — Complete CLI documentation
|
|
117
|
+
- **[CLAUDE.md](CLAUDE.md)** — Project context for Claude Code
|
|
265
118
|
|
|
266
|
-
|
|
267
|
-
# Check if MLX server is running
|
|
268
|
-
curl http://localhost:28100/
|
|
269
|
-
|
|
270
|
-
# Test embedding endpoint
|
|
271
|
-
curl -X POST http://localhost:28100/v1/embeddings \
|
|
272
|
-
-H "Content-Type: application/json" \
|
|
273
|
-
-d '{"input": ["test"], "model": "mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ"}'
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### npx takes time on first run
|
|
277
|
-
|
|
278
|
-
The first `npx obedging` command downloads the package from npm. Subsequent runs use the cached version.
|
|
279
|
-
|
|
280
|
-
### Vault path not found
|
|
119
|
+
## 🛠️ Development
|
|
281
120
|
|
|
282
121
|
```bash
|
|
283
|
-
|
|
284
|
-
|
|
122
|
+
git clone https://github.com/tuannvm/obedding.git
|
|
123
|
+
cd obedding
|
|
124
|
+
npm install
|
|
125
|
+
npm run build
|
|
126
|
+
npm link
|
|
127
|
+
obedding search "test"
|
|
285
128
|
```
|
|
286
129
|
|
|
287
|
-
|
|
130
|
+
## ❓ Troubleshooting
|
|
288
131
|
|
|
132
|
+
**Server not running?**
|
|
289
133
|
```bash
|
|
290
|
-
#
|
|
291
|
-
|
|
134
|
+
# LM Studio
|
|
135
|
+
curl http://localhost:1234/v1/models
|
|
292
136
|
|
|
293
|
-
#
|
|
294
|
-
|
|
137
|
+
# Ollama
|
|
138
|
+
curl http://localhost:11434/api/tags
|
|
295
139
|
```
|
|
296
140
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
- **Variable-length embeddings**: MLX server returns variable-length embeddings based on input content. The client truncates to 2048 dimensions as a workaround.
|
|
300
|
-
- **No PostCompact hook support**: Auto-indexing after note creation not available (hook type not supported by Claude Code).
|
|
301
|
-
|
|
302
|
-
## Development
|
|
303
|
-
|
|
141
|
+
**No results?**
|
|
304
142
|
```bash
|
|
305
|
-
#
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
# Build
|
|
309
|
-
npm run build
|
|
143
|
+
# Check stats
|
|
144
|
+
npx obedding stats
|
|
310
145
|
|
|
311
|
-
#
|
|
312
|
-
|
|
313
|
-
obedding search "test"
|
|
146
|
+
# Re-index
|
|
147
|
+
npx obedding index --vault ~/.obsidian/Projects
|
|
314
148
|
```
|
|
315
149
|
|
|
316
|
-
## License
|
|
150
|
+
## 📄 License
|
|
317
151
|
|
|
318
152
|
MIT
|
package/dist/cli.js
CHANGED
|
@@ -16,8 +16,8 @@ program
|
|
|
16
16
|
.option('-v, --vault <path>', `Path to Obsidian vault`, DEFAULT_VAULT_PATH)
|
|
17
17
|
.option('-s, --storage <path>', `Path to storage file`, DEFAULT_STORAGE_PATH)
|
|
18
18
|
.option('-i, --incremental', 'Only index new or modified files')
|
|
19
|
-
.option('-b, --backend <type>', 'Embedding backend:
|
|
20
|
-
.option('-m, --model <name>', 'Model to use (default: qwen3-embedding:0.6b for ollama, Qwen3-Embedding-0.6B-4bit-DWQ for mlx)')
|
|
19
|
+
.option('-b, --backend <type>', 'Embedding backend: lmstudio (default), ollama, or mlx', 'lmstudio')
|
|
20
|
+
.option('-m, --model <name>', 'Model to use (default: qwen3-embedding:0.6b for ollama, text-embedding-qwen3-embedding-0.6b for lmstudio, Qwen3-Embedding-0.6B-4bit-DWQ for mlx)')
|
|
21
21
|
.action(async (options) => {
|
|
22
22
|
try {
|
|
23
23
|
const vaultPath = path.resolve(options.vault);
|
|
@@ -45,7 +45,7 @@ program
|
|
|
45
45
|
.option('-v, --vault <path>', `Path to Obsidian vault (for reference)`, DEFAULT_VAULT_PATH)
|
|
46
46
|
.option('-s, --storage <path>', `Path to storage file`, DEFAULT_STORAGE_PATH)
|
|
47
47
|
.option('-k, --top-k <number>', 'Number of results to return', '10')
|
|
48
|
-
.option('-b, --backend <type>', 'Embedding backend:
|
|
48
|
+
.option('-b, --backend <type>', 'Embedding backend: lmstudio (default), ollama, or mlx', 'lmstudio')
|
|
49
49
|
.option('-m, --model <name>', 'Model to use')
|
|
50
50
|
.option('--min-score <number>', 'Minimum similarity score (0-1)', '0')
|
|
51
51
|
.option('--json', 'Output results as JSON')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CACrC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EACtB,gEAAgE,CACjE,CAAC;AACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CACvC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EACtB,uCAAuC,CACxC,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,iBAAiB,CAAC;KACvB,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,oBAAoB,EAAE,wBAAwB,EAAE,kBAAkB,CAAC;KAC1E,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;KAC/D,MAAM,CAAC,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export interface IndexOptions {
|
|
|
3
3
|
storagePath: string;
|
|
4
4
|
incremental?: boolean;
|
|
5
5
|
model?: string;
|
|
6
|
-
backend?: 'ollama' | 'mlx';
|
|
6
|
+
backend?: 'ollama' | 'mlx' | 'lmstudio';
|
|
7
7
|
onProgress?: (current: number, total: number, file: string) => void;
|
|
8
8
|
}
|
|
9
9
|
export interface IndexResult {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IACxC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiN5E"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { scanObsidianVault, extractMetadata, getNoteHash } from './scanner.js';
|
|
2
2
|
import { generateEmbeddings as generateOllamaEmbeddings, checkOllamaConnection, getModelInfo as getOllamaModelInfo } from './ollama.js';
|
|
3
3
|
import { generateEmbeddings as generateMLXEmbeddings, checkMLXConnection, getModelInfo as getMLXModelInfo } from './mlx.js';
|
|
4
|
+
import { generateEmbeddings as generateLMStudioEmbeddings, checkLMStudioConnection, getModelInfo as getLMStudioModelInfo } from './lmstudio.js';
|
|
4
5
|
import { StorageManager } from './storage.js';
|
|
5
6
|
import { truncateToTokens, generateExcerpt, formatDuration, formatFileSize } from './utils.js';
|
|
6
7
|
import { preprocessNote, checkEmbeddingVariance } from './preprocessor.js';
|
|
@@ -9,7 +10,7 @@ import { preprocessNote, checkEmbeddingVariance } from './preprocessor.js';
|
|
|
9
10
|
*/
|
|
10
11
|
export async function indexNotes(options) {
|
|
11
12
|
const startTime = Date.now();
|
|
12
|
-
const { vaultPath, storagePath, incremental = false, backend = '
|
|
13
|
+
const { vaultPath, storagePath, incremental = false, backend = 'lmstudio', model } = options;
|
|
13
14
|
// Determine model and connection check based on backend
|
|
14
15
|
let effectiveModel = model;
|
|
15
16
|
let isConnected = false;
|
|
@@ -22,6 +23,13 @@ export async function indexNotes(options) {
|
|
|
22
23
|
effectiveModel = effectiveModel || 'qwen3-embedding:0.6b';
|
|
23
24
|
modelInfo = await getOllamaModelInfo(effectiveModel);
|
|
24
25
|
}
|
|
26
|
+
else if (backend === 'lmstudio') {
|
|
27
|
+
console.log('Checking LM Studio connection...');
|
|
28
|
+
isConnected = await checkLMStudioConnection();
|
|
29
|
+
connectionType = 'LM Studio';
|
|
30
|
+
effectiveModel = effectiveModel || 'text-embedding-qwen3-embedding-0.6b';
|
|
31
|
+
modelInfo = await getLMStudioModelInfo(effectiveModel);
|
|
32
|
+
}
|
|
25
33
|
else {
|
|
26
34
|
console.log('Checking MLX embedding server connection...');
|
|
27
35
|
isConnected = await checkMLXConnection();
|
|
@@ -29,8 +37,13 @@ export async function indexNotes(options) {
|
|
|
29
37
|
effectiveModel = effectiveModel || 'mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ';
|
|
30
38
|
modelInfo = await getMLXModelInfo(effectiveModel);
|
|
31
39
|
}
|
|
40
|
+
const serverUrls = {
|
|
41
|
+
ollama: 'http://localhost:11434',
|
|
42
|
+
lmstudio: 'http://localhost:1234',
|
|
43
|
+
mlx: 'http://localhost:28100'
|
|
44
|
+
};
|
|
32
45
|
if (!isConnected) {
|
|
33
|
-
throw new Error(`Cannot connect to ${connectionType} embedding server. Make sure it is running at ${backend
|
|
46
|
+
throw new Error(`Cannot connect to ${connectionType} embedding server. Make sure it is running at ${serverUrls[backend] || serverUrls.ollama}`);
|
|
34
47
|
}
|
|
35
48
|
console.log(`✓ ${connectionType} embedding server is running`);
|
|
36
49
|
if (modelInfo) {
|
|
@@ -96,12 +109,19 @@ export async function indexNotes(options) {
|
|
|
96
109
|
console.log(` [${percent}%] ${note}`);
|
|
97
110
|
options.onProgress?.(current, total, note);
|
|
98
111
|
})
|
|
99
|
-
:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
112
|
+
: backend === 'lmstudio'
|
|
113
|
+
? await generateLMStudioEmbeddings(textsToEmbed, effectiveModel, (current, total) => {
|
|
114
|
+
const percent = ((current / total) * 100).toFixed(1);
|
|
115
|
+
const note = noteMapping[current - 1]?.note.relativePath || 'unknown';
|
|
116
|
+
console.log(` [${percent}%] ${note}`);
|
|
117
|
+
options.onProgress?.(current, total, note);
|
|
118
|
+
})
|
|
119
|
+
: await generateMLXEmbeddings(textsToEmbed, effectiveModel, (current, total) => {
|
|
120
|
+
const percent = ((current / total) * 100).toFixed(1);
|
|
121
|
+
const note = noteMapping[current - 1]?.note.relativePath || 'unknown';
|
|
122
|
+
console.log(` [${percent}%] ${note}`);
|
|
123
|
+
options.onProgress?.(current, total, note);
|
|
124
|
+
});
|
|
105
125
|
// Check embedding variance to detect potential issues
|
|
106
126
|
const varianceCheck = checkEmbeddingVariance(embeddings);
|
|
107
127
|
if (varianceCheck.isTooLow) {
|
|
@@ -136,7 +156,7 @@ export async function indexNotes(options) {
|
|
|
136
156
|
excerpt,
|
|
137
157
|
indexed_at: new Date().toISOString(),
|
|
138
158
|
hash
|
|
139
|
-
});
|
|
159
|
+
}, effectiveModel, embedding.length);
|
|
140
160
|
indexedCount++;
|
|
141
161
|
}
|
|
142
162
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAY,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,qBAAqB,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxI,OAAO,EAAE,kBAAkB,IAAI,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAsB3E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,KAAK,EAAE,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
export interface EmbeddingResponse {
|
|
9
|
+
object: string;
|
|
10
|
+
data: Array<{
|
|
11
|
+
object: string;
|
|
12
|
+
index: number;
|
|
13
|
+
embedding: number[];
|
|
14
|
+
}>;
|
|
15
|
+
model: string;
|
|
16
|
+
usage: {
|
|
17
|
+
prompt_tokens: number;
|
|
18
|
+
total_tokens: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface ModelInfo {
|
|
22
|
+
id: string;
|
|
23
|
+
object: string;
|
|
24
|
+
created: number;
|
|
25
|
+
owned_by: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ModelsResponse {
|
|
28
|
+
object: string;
|
|
29
|
+
data: ModelInfo[];
|
|
30
|
+
}
|
|
31
|
+
export interface LMStudioError {
|
|
32
|
+
error: {
|
|
33
|
+
message: string;
|
|
34
|
+
type: string;
|
|
35
|
+
code?: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if LM Studio is running
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkLMStudioConnection(): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Generate embedding for text using LM Studio
|
|
44
|
+
*/
|
|
45
|
+
export declare function generateEmbedding(text: string, model?: string): Promise<number[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Batch generate embeddings for multiple texts
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateEmbeddings(texts: string[], model?: string, onProgress?: (current: number, total: number) => void): Promise<number[][]>;
|
|
50
|
+
/**
|
|
51
|
+
* Get model information
|
|
52
|
+
*/
|
|
53
|
+
export declare function getModelInfo(model?: string): Promise<{
|
|
54
|
+
name: string;
|
|
55
|
+
dimensions?: number;
|
|
56
|
+
} | null>;
|
|
57
|
+
//# sourceMappingURL=lmstudio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lmstudio.d.ts","sourceRoot":"","sources":["../src/lmstudio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUhE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,GAAE,MAAsB,EAC7B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAarB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,GAAE,MAAsB,GAAG,OAAO,CAAC;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAAC,CA4BR"}
|