@alex900530/claude-persistent-memory 1.1.0 → 1.1.1
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/bin/setup.js +30 -13
- package/package.json +1 -1
package/bin/setup.js
CHANGED
|
@@ -195,29 +195,46 @@ async function setupModel() {
|
|
|
195
195
|
const cacheDir = path.join(os.homedir(), '.cache', 'huggingface', 'transformers-js');
|
|
196
196
|
const modelDir = path.join(cacheDir, 'Xenova', 'bge-m3', 'onnx');
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
198
|
+
const modelFile = path.join(modelDir, 'model.onnx_data');
|
|
199
|
+
const modelBaseDir = path.join(cacheDir, 'Xenova', 'bge-m3');
|
|
200
|
+
|
|
201
|
+
// Helper: import transformers.js (handles both ESM and CJS re-export)
|
|
202
|
+
async function loadTransformers() {
|
|
203
|
+
const transformersPath = require.resolve('@huggingface/transformers', { paths: [PKG_DIR] });
|
|
204
|
+
const mod = await import(transformersPath);
|
|
205
|
+
const pipeline = mod.pipeline || mod.default?.pipeline;
|
|
206
|
+
const env = mod.env || mod.default?.env;
|
|
207
|
+
if (env) env.cacheDir = cacheDir;
|
|
208
|
+
return { pipeline, env };
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Check if model is already cached — verify by running inference
|
|
212
|
+
if (fs.existsSync(modelFile)) {
|
|
213
|
+
try {
|
|
214
|
+
const { pipeline } = await loadTransformers();
|
|
215
|
+
const extractor = await pipeline('feature-extraction', 'Xenova/bge-m3', { device: 'cpu' });
|
|
216
|
+
await extractor('test', { pooling: 'cls', normalize: true });
|
|
217
|
+
const stat = fs.statSync(modelFile);
|
|
218
|
+
ok(` Model already cached and verified (${(stat.size / 1024 / 1024 / 1024).toFixed(1)}GB).`);
|
|
203
219
|
return;
|
|
220
|
+
} catch (e) {
|
|
221
|
+
warn(` Cached model is corrupt or incomplete, cleaning up ...`);
|
|
222
|
+
try { fs.rmSync(modelBaseDir, { recursive: true, force: true }); } catch {}
|
|
204
223
|
}
|
|
205
|
-
warn(' Incomplete model cache detected, re-downloading ...');
|
|
206
224
|
}
|
|
207
225
|
|
|
208
226
|
log(' Downloading model (~2GB, this may take a few minutes) ...');
|
|
209
227
|
try {
|
|
210
|
-
|
|
211
|
-
const transformersPath = require.resolve('@huggingface/transformers', { paths: [PKG_DIR] });
|
|
212
|
-
const { pipeline, env } = await import(transformersPath);
|
|
213
|
-
env.cacheDir = cacheDir;
|
|
228
|
+
const { pipeline } = await loadTransformers();
|
|
214
229
|
const extractor = await pipeline('feature-extraction', 'Xenova/bge-m3', { device: 'cpu' });
|
|
215
|
-
// Quick test to verify model works
|
|
216
230
|
await extractor('test', { pooling: 'cls', normalize: true });
|
|
217
231
|
ok(' Model downloaded and verified.');
|
|
218
232
|
} catch (e) {
|
|
219
|
-
|
|
220
|
-
|
|
233
|
+
// Clean up partial download
|
|
234
|
+
try { fs.rmSync(modelBaseDir, { recursive: true, force: true }); } catch {}
|
|
235
|
+
console.error(`${PREFIX} \x1b[31mModel download failed: ${e.message}\x1b[0m`);
|
|
236
|
+
console.error(`${PREFIX} Please retry: npm install @alex900530/claude-persistent-memory`);
|
|
237
|
+
process.exit(1);
|
|
221
238
|
}
|
|
222
239
|
}
|
|
223
240
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alex900530/claude-persistent-memory",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Persistent memory system for Claude Code — hybrid BM25 + vector search, LLM-driven structuring, automatic clustering",
|
|
5
5
|
"main": "lib/memory-db.js",
|
|
6
6
|
"bin": {
|