claude-code-workflow 6.2.4 → 6.2.6
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/ccw/dist/core/lite-scanner-complete.d.ts.map +1 -1
- package/ccw/dist/core/lite-scanner-complete.js +4 -1
- package/ccw/dist/core/lite-scanner-complete.js.map +1 -1
- package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
- package/ccw/dist/core/lite-scanner.js +4 -1
- package/ccw/dist/core/lite-scanner.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +3 -5
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +2 -1
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.js +31 -6
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
- package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/rules-routes.js +4 -3
- package/ccw/dist/core/routes/rules-routes.js.map +1 -1
- package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/skills-routes.js +124 -6
- package/ccw/dist/core/routes/skills-routes.js.map +1 -1
- package/ccw/dist/tools/cli-executor.d.ts +4 -1
- package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor.js +54 -2
- package/ccw/dist/tools/cli-executor.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts +20 -3
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +166 -37
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/package.json +1 -1
- package/ccw/src/core/lite-scanner-complete.ts +5 -1
- package/ccw/src/core/lite-scanner.ts +5 -1
- package/ccw/src/core/routes/claude-routes.ts +3 -5
- package/ccw/src/core/routes/cli-routes.ts +2 -1
- package/ccw/src/core/routes/codexlens-routes.ts +34 -6
- package/ccw/src/core/routes/rules-routes.ts +4 -3
- package/ccw/src/core/routes/skills-routes.ts +144 -6
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +7 -12
- package/ccw/src/templates/dashboard-js/i18n.js +167 -5
- package/ccw/src/templates/dashboard-js/views/claude-manager.js +18 -4
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +5 -3
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +790 -25
- package/ccw/src/templates/dashboard-js/views/rules-manager.js +35 -6
- package/ccw/src/templates/dashboard-js/views/skills-manager.js +385 -21
- package/ccw/src/tools/cli-executor.ts +70 -2
- package/ccw/src/tools/codex-lens.ts +183 -35
- package/codex-lens/pyproject.toml +66 -48
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/embedding_manager.py +3 -3
- package/codex-lens/src/codexlens/cli/model_manager.py +24 -2
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +313 -313
- package/codex-lens/src/codexlens/semantic/__init__.py +76 -39
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ollama_backend.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/embedder.py +244 -185
- package/codex-lens/src/codexlens/semantic/gpu_support.py +192 -0
- package/package.json +1 -1
|
@@ -75,6 +75,8 @@ interface ReadyStatus {
|
|
|
75
75
|
interface SemanticStatus {
|
|
76
76
|
available: boolean;
|
|
77
77
|
backend?: string;
|
|
78
|
+
accelerator?: string;
|
|
79
|
+
providers?: string[];
|
|
78
80
|
error?: string;
|
|
79
81
|
}
|
|
80
82
|
|
|
@@ -190,18 +192,39 @@ async function checkSemanticStatus(): Promise<SemanticStatus> {
|
|
|
190
192
|
return { available: false, error: 'CodexLens not installed' };
|
|
191
193
|
}
|
|
192
194
|
|
|
193
|
-
// Check semantic module availability
|
|
195
|
+
// Check semantic module availability and accelerator info
|
|
194
196
|
return new Promise((resolve) => {
|
|
195
197
|
const checkCode = `
|
|
196
198
|
import sys
|
|
199
|
+
import json
|
|
197
200
|
try:
|
|
198
201
|
from codexlens.semantic import SEMANTIC_AVAILABLE, SEMANTIC_BACKEND
|
|
199
|
-
if SEMANTIC_AVAILABLE
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
result = {"available": SEMANTIC_AVAILABLE, "backend": SEMANTIC_BACKEND if SEMANTIC_AVAILABLE else None}
|
|
203
|
+
|
|
204
|
+
# Get ONNX providers for accelerator info
|
|
205
|
+
try:
|
|
206
|
+
import onnxruntime
|
|
207
|
+
providers = onnxruntime.get_available_providers()
|
|
208
|
+
result["providers"] = providers
|
|
209
|
+
|
|
210
|
+
# Determine accelerator type
|
|
211
|
+
if "CUDAExecutionProvider" in providers or "TensorrtExecutionProvider" in providers:
|
|
212
|
+
result["accelerator"] = "CUDA"
|
|
213
|
+
elif "DmlExecutionProvider" in providers:
|
|
214
|
+
result["accelerator"] = "DirectML"
|
|
215
|
+
elif "CoreMLExecutionProvider" in providers:
|
|
216
|
+
result["accelerator"] = "CoreML"
|
|
217
|
+
elif "ROCMExecutionProvider" in providers:
|
|
218
|
+
result["accelerator"] = "ROCm"
|
|
219
|
+
else:
|
|
220
|
+
result["accelerator"] = "CPU"
|
|
221
|
+
except:
|
|
222
|
+
result["providers"] = []
|
|
223
|
+
result["accelerator"] = "CPU"
|
|
224
|
+
|
|
225
|
+
print(json.dumps(result))
|
|
203
226
|
except Exception as e:
|
|
204
|
-
print(
|
|
227
|
+
print(json.dumps({"available": False, "error": str(e)}))
|
|
205
228
|
`;
|
|
206
229
|
const child = spawn(VENV_PYTHON, ['-c', checkCode], {
|
|
207
230
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
@@ -220,12 +243,16 @@ except Exception as e:
|
|
|
220
243
|
|
|
221
244
|
child.on('close', (code) => {
|
|
222
245
|
const output = stdout.trim();
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
resolve({
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
246
|
+
try {
|
|
247
|
+
const result = JSON.parse(output);
|
|
248
|
+
resolve({
|
|
249
|
+
available: result.available || false,
|
|
250
|
+
backend: result.backend,
|
|
251
|
+
accelerator: result.accelerator || 'CPU',
|
|
252
|
+
providers: result.providers || [],
|
|
253
|
+
error: result.error
|
|
254
|
+
});
|
|
255
|
+
} catch {
|
|
229
256
|
resolve({ available: false, error: output || stderr || 'Unknown error' });
|
|
230
257
|
}
|
|
231
258
|
});
|
|
@@ -237,10 +264,66 @@ except Exception as e:
|
|
|
237
264
|
}
|
|
238
265
|
|
|
239
266
|
/**
|
|
240
|
-
*
|
|
267
|
+
* GPU acceleration mode for semantic search
|
|
268
|
+
*/
|
|
269
|
+
type GpuMode = 'cpu' | 'cuda' | 'directml';
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Detect available GPU acceleration
|
|
273
|
+
* @returns Detected GPU mode and info
|
|
274
|
+
*/
|
|
275
|
+
async function detectGpuSupport(): Promise<{ mode: GpuMode; available: GpuMode[]; info: string }> {
|
|
276
|
+
const available: GpuMode[] = ['cpu'];
|
|
277
|
+
let detectedInfo = 'CPU only';
|
|
278
|
+
|
|
279
|
+
// Check for NVIDIA GPU (CUDA)
|
|
280
|
+
try {
|
|
281
|
+
if (process.platform === 'win32') {
|
|
282
|
+
execSync('nvidia-smi', { stdio: 'pipe' });
|
|
283
|
+
available.push('cuda');
|
|
284
|
+
detectedInfo = 'NVIDIA GPU detected (CUDA available)';
|
|
285
|
+
} else {
|
|
286
|
+
execSync('which nvidia-smi', { stdio: 'pipe' });
|
|
287
|
+
available.push('cuda');
|
|
288
|
+
detectedInfo = 'NVIDIA GPU detected (CUDA available)';
|
|
289
|
+
}
|
|
290
|
+
} catch {
|
|
291
|
+
// NVIDIA not available
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// On Windows, DirectML is always available if DirectX 12 is supported
|
|
295
|
+
if (process.platform === 'win32') {
|
|
296
|
+
try {
|
|
297
|
+
// Check for DirectX 12 support via dxdiag or registry
|
|
298
|
+
// DirectML works on most modern Windows 10/11 systems
|
|
299
|
+
available.push('directml');
|
|
300
|
+
if (available.includes('cuda')) {
|
|
301
|
+
detectedInfo = 'NVIDIA GPU detected (CUDA & DirectML available)';
|
|
302
|
+
} else {
|
|
303
|
+
detectedInfo = 'DirectML available (Windows GPU acceleration)';
|
|
304
|
+
}
|
|
305
|
+
} catch {
|
|
306
|
+
// DirectML check failed
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Recommend best available mode
|
|
311
|
+
let recommendedMode: GpuMode = 'cpu';
|
|
312
|
+
if (process.platform === 'win32' && available.includes('directml')) {
|
|
313
|
+
recommendedMode = 'directml'; // DirectML is easier on Windows (no CUDA toolkit needed)
|
|
314
|
+
} else if (available.includes('cuda')) {
|
|
315
|
+
recommendedMode = 'cuda';
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return { mode: recommendedMode, available, info: detectedInfo };
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Install semantic search dependencies with optional GPU acceleration
|
|
323
|
+
* @param gpuMode - GPU acceleration mode: 'cpu', 'cuda', or 'directml'
|
|
241
324
|
* @returns Bootstrap result
|
|
242
325
|
*/
|
|
243
|
-
async function installSemantic(): Promise<BootstrapResult> {
|
|
326
|
+
async function installSemantic(gpuMode: GpuMode = 'cpu'): Promise<BootstrapResult> {
|
|
244
327
|
// First ensure CodexLens is installed
|
|
245
328
|
const venvStatus = await checkVenvStatus();
|
|
246
329
|
if (!venvStatus.ready) {
|
|
@@ -252,42 +335,106 @@ async function installSemantic(): Promise<BootstrapResult> {
|
|
|
252
335
|
? join(CODEXLENS_VENV, 'Scripts', 'pip.exe')
|
|
253
336
|
: join(CODEXLENS_VENV, 'bin', 'pip');
|
|
254
337
|
|
|
338
|
+
// IMPORTANT: Uninstall all onnxruntime variants first to prevent conflicts
|
|
339
|
+
// Having multiple onnxruntime packages causes provider detection issues
|
|
340
|
+
const onnxVariants = ['onnxruntime', 'onnxruntime-gpu', 'onnxruntime-directml'];
|
|
341
|
+
console.log(`[CodexLens] Cleaning up existing ONNX Runtime packages...`);
|
|
342
|
+
|
|
343
|
+
for (const pkg of onnxVariants) {
|
|
344
|
+
try {
|
|
345
|
+
execSync(`"${pipPath}" uninstall ${pkg} -y`, { stdio: 'pipe' });
|
|
346
|
+
console.log(`[CodexLens] Removed ${pkg}`);
|
|
347
|
+
} catch {
|
|
348
|
+
// Package not installed, ignore
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Build package list based on GPU mode
|
|
353
|
+
const packages = ['numpy>=1.24', 'fastembed>=0.5', 'hnswlib>=0.8.0'];
|
|
354
|
+
|
|
355
|
+
let modeDescription = 'CPU (ONNX Runtime)';
|
|
356
|
+
let onnxPackage = 'onnxruntime>=1.18.0'; // Default CPU
|
|
357
|
+
|
|
358
|
+
if (gpuMode === 'cuda') {
|
|
359
|
+
onnxPackage = 'onnxruntime-gpu>=1.18.0';
|
|
360
|
+
modeDescription = 'NVIDIA CUDA GPU acceleration';
|
|
361
|
+
} else if (gpuMode === 'directml') {
|
|
362
|
+
onnxPackage = 'onnxruntime-directml>=1.18.0';
|
|
363
|
+
modeDescription = 'Windows DirectML GPU acceleration';
|
|
364
|
+
}
|
|
365
|
+
|
|
255
366
|
return new Promise((resolve) => {
|
|
256
|
-
console.log(
|
|
257
|
-
console.log(
|
|
367
|
+
console.log(`[CodexLens] Installing semantic search dependencies...`);
|
|
368
|
+
console.log(`[CodexLens] Mode: ${modeDescription}`);
|
|
369
|
+
console.log(`[CodexLens] ONNX Runtime: ${onnxPackage}`);
|
|
370
|
+
console.log(`[CodexLens] Packages: ${packages.join(', ')}`);
|
|
258
371
|
|
|
259
|
-
|
|
372
|
+
// Install ONNX Runtime first with force-reinstall to ensure clean state
|
|
373
|
+
const installOnnx = spawn(pipPath, ['install', '--force-reinstall', onnxPackage], {
|
|
260
374
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
261
|
-
timeout: 600000, // 10 minutes for
|
|
375
|
+
timeout: 600000, // 10 minutes for GPU packages
|
|
262
376
|
});
|
|
263
377
|
|
|
264
|
-
let
|
|
265
|
-
let
|
|
378
|
+
let onnxStdout = '';
|
|
379
|
+
let onnxStderr = '';
|
|
266
380
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
// Log progress
|
|
381
|
+
installOnnx.stdout.on('data', (data) => {
|
|
382
|
+
onnxStdout += data.toString();
|
|
270
383
|
const line = data.toString().trim();
|
|
271
|
-
if (line.includes('Downloading') || line.includes('Installing')
|
|
384
|
+
if (line.includes('Downloading') || line.includes('Installing')) {
|
|
272
385
|
console.log(`[CodexLens] ${line}`);
|
|
273
386
|
}
|
|
274
387
|
});
|
|
275
388
|
|
|
276
|
-
|
|
277
|
-
|
|
389
|
+
installOnnx.stderr.on('data', (data) => {
|
|
390
|
+
onnxStderr += data.toString();
|
|
278
391
|
});
|
|
279
392
|
|
|
280
|
-
|
|
281
|
-
if (
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
} else {
|
|
285
|
-
resolve({ success: false, error: `Installation failed: ${stderr || stdout}` });
|
|
393
|
+
installOnnx.on('close', (onnxCode) => {
|
|
394
|
+
if (onnxCode !== 0) {
|
|
395
|
+
resolve({ success: false, error: `Failed to install ${onnxPackage}: ${onnxStderr || onnxStdout}` });
|
|
396
|
+
return;
|
|
286
397
|
}
|
|
398
|
+
|
|
399
|
+
console.log(`[CodexLens] ${onnxPackage} installed successfully`);
|
|
400
|
+
|
|
401
|
+
// Now install remaining packages
|
|
402
|
+
const child = spawn(pipPath, ['install', ...packages], {
|
|
403
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
404
|
+
timeout: 600000,
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
let stdout = '';
|
|
408
|
+
let stderr = '';
|
|
409
|
+
|
|
410
|
+
child.stdout.on('data', (data) => {
|
|
411
|
+
stdout += data.toString();
|
|
412
|
+
const line = data.toString().trim();
|
|
413
|
+
if (line.includes('Downloading') || line.includes('Installing') || line.includes('Collecting')) {
|
|
414
|
+
console.log(`[CodexLens] ${line}`);
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
child.stderr.on('data', (data) => {
|
|
419
|
+
stderr += data.toString();
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
child.on('close', (code) => {
|
|
423
|
+
if (code === 0) {
|
|
424
|
+
console.log(`[CodexLens] Semantic dependencies installed successfully (${gpuMode} mode)`);
|
|
425
|
+
resolve({ success: true, message: `Installed with ${modeDescription}` });
|
|
426
|
+
} else {
|
|
427
|
+
resolve({ success: false, error: `Installation failed: ${stderr || stdout}` });
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
child.on('error', (err) => {
|
|
432
|
+
resolve({ success: false, error: `Failed to run pip: ${err.message}` });
|
|
433
|
+
});
|
|
287
434
|
});
|
|
288
435
|
|
|
289
|
-
|
|
290
|
-
resolve({ success: false, error: `Failed to
|
|
436
|
+
installOnnx.on('error', (err) => {
|
|
437
|
+
resolve({ success: false, error: `Failed to install ONNX Runtime: ${err.message}` });
|
|
291
438
|
});
|
|
292
439
|
});
|
|
293
440
|
}
|
|
@@ -1126,7 +1273,8 @@ function isIndexingInProgress(): boolean {
|
|
|
1126
1273
|
export type { ProgressInfo, ExecuteOptions };
|
|
1127
1274
|
|
|
1128
1275
|
// Export for direct usage
|
|
1129
|
-
export { ensureReady, executeCodexLens, checkVenvStatus, bootstrapVenv, checkSemanticStatus, installSemantic, uninstallCodexLens, cancelIndexing, isIndexingInProgress };
|
|
1276
|
+
export { ensureReady, executeCodexLens, checkVenvStatus, bootstrapVenv, checkSemanticStatus, installSemantic, detectGpuSupport, uninstallCodexLens, cancelIndexing, isIndexingInProgress };
|
|
1277
|
+
export type { GpuMode };
|
|
1130
1278
|
|
|
1131
1279
|
// Backward-compatible export for tests
|
|
1132
1280
|
export const codexLensTool = {
|
|
@@ -1,48 +1,66 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=61.0"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "codex-lens"
|
|
7
|
-
version = "0.1.0"
|
|
8
|
-
description = "CodexLens multi-modal code analysis platform"
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.10"
|
|
11
|
-
license = { text = "MIT" }
|
|
12
|
-
authors = [
|
|
13
|
-
{ name = "CodexLens contributors" }
|
|
14
|
-
]
|
|
15
|
-
dependencies = [
|
|
16
|
-
"typer>=0.9",
|
|
17
|
-
"rich>=13",
|
|
18
|
-
"pydantic>=2.0",
|
|
19
|
-
"tree-sitter>=0.20",
|
|
20
|
-
"tree-sitter-python>=0.25",
|
|
21
|
-
"tree-sitter-javascript>=0.25",
|
|
22
|
-
"tree-sitter-typescript>=0.23",
|
|
23
|
-
"pathspec>=0.11",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
[project.optional-dependencies]
|
|
27
|
-
# Semantic search using fastembed (ONNX-based, lightweight ~200MB)
|
|
28
|
-
semantic = [
|
|
29
|
-
"numpy>=1.24",
|
|
30
|
-
"fastembed>=0.2",
|
|
31
|
-
"hnswlib>=0.8.0",
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
[
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "codex-lens"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "CodexLens multi-modal code analysis platform"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "CodexLens contributors" }
|
|
14
|
+
]
|
|
15
|
+
dependencies = [
|
|
16
|
+
"typer>=0.9",
|
|
17
|
+
"rich>=13",
|
|
18
|
+
"pydantic>=2.0",
|
|
19
|
+
"tree-sitter>=0.20",
|
|
20
|
+
"tree-sitter-python>=0.25",
|
|
21
|
+
"tree-sitter-javascript>=0.25",
|
|
22
|
+
"tree-sitter-typescript>=0.23",
|
|
23
|
+
"pathspec>=0.11",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[project.optional-dependencies]
|
|
27
|
+
# Semantic search using fastembed (ONNX-based, lightweight ~200MB)
|
|
28
|
+
semantic = [
|
|
29
|
+
"numpy>=1.24",
|
|
30
|
+
"fastembed>=0.2",
|
|
31
|
+
"hnswlib>=0.8.0",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
# GPU acceleration for semantic search (NVIDIA CUDA)
|
|
35
|
+
# Install with: pip install codexlens[semantic-gpu]
|
|
36
|
+
semantic-gpu = [
|
|
37
|
+
"numpy>=1.24",
|
|
38
|
+
"fastembed>=0.2",
|
|
39
|
+
"hnswlib>=0.8.0",
|
|
40
|
+
"onnxruntime-gpu>=1.15.0", # CUDA support
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
# GPU acceleration for Windows (DirectML - supports NVIDIA/AMD/Intel)
|
|
44
|
+
# Install with: pip install codexlens[semantic-directml]
|
|
45
|
+
semantic-directml = [
|
|
46
|
+
"numpy>=1.24",
|
|
47
|
+
"fastembed>=0.2",
|
|
48
|
+
"hnswlib>=0.8.0",
|
|
49
|
+
"onnxruntime-directml>=1.15.0", # DirectML support
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
# Encoding detection for non-UTF8 files
|
|
53
|
+
encoding = [
|
|
54
|
+
"chardet>=5.0",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
# Full features including tiktoken for accurate token counting
|
|
58
|
+
full = [
|
|
59
|
+
"tiktoken>=0.5.0",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[project.urls]
|
|
63
|
+
Homepage = "https://github.com/openai/codex-lens"
|
|
64
|
+
|
|
65
|
+
[tool.setuptools]
|
|
66
|
+
package-dir = { "" = "src" }
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -20,8 +20,8 @@ except ImportError:
|
|
|
20
20
|
logger = logging.getLogger(__name__)
|
|
21
21
|
|
|
22
22
|
# Embedding batch size - larger values improve throughput on modern hardware
|
|
23
|
-
#
|
|
24
|
-
EMBEDDING_BATCH_SIZE =
|
|
23
|
+
# Benchmark: 256 gives ~2.35x speedup over 64 with DirectML GPU acceleration
|
|
24
|
+
EMBEDDING_BATCH_SIZE = 256 # Optimized from 64 based on batch size benchmarks
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def _generate_chunks_from_cursor(
|
|
@@ -275,7 +275,7 @@ def generate_embeddings(
|
|
|
275
275
|
total_chunks_created = 0
|
|
276
276
|
total_files_processed = 0
|
|
277
277
|
FILE_BATCH_SIZE = 100 # Process 100 files at a time
|
|
278
|
-
# EMBEDDING_BATCH_SIZE is defined at module level (default:
|
|
278
|
+
# EMBEDDING_BATCH_SIZE is defined at module level (default: 256)
|
|
279
279
|
|
|
280
280
|
try:
|
|
281
281
|
with VectorStore(index_path) as vector_store:
|
|
@@ -14,6 +14,8 @@ except ImportError:
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# Model profiles with metadata
|
|
17
|
+
# Note: 768d is max recommended dimension for optimal performance/quality balance
|
|
18
|
+
# 1024d models are available but not recommended due to higher resource usage
|
|
17
19
|
MODEL_PROFILES = {
|
|
18
20
|
"fast": {
|
|
19
21
|
"model_name": "BAAI/bge-small-en-v1.5",
|
|
@@ -21,6 +23,15 @@ MODEL_PROFILES = {
|
|
|
21
23
|
"size_mb": 80,
|
|
22
24
|
"description": "Fast, lightweight, English-optimized",
|
|
23
25
|
"use_case": "Quick prototyping, resource-constrained environments",
|
|
26
|
+
"recommended": True,
|
|
27
|
+
},
|
|
28
|
+
"base": {
|
|
29
|
+
"model_name": "BAAI/bge-base-en-v1.5",
|
|
30
|
+
"dimensions": 768,
|
|
31
|
+
"size_mb": 220,
|
|
32
|
+
"description": "General purpose, good balance of speed and quality",
|
|
33
|
+
"use_case": "General text search, documentation",
|
|
34
|
+
"recommended": True,
|
|
24
35
|
},
|
|
25
36
|
"code": {
|
|
26
37
|
"model_name": "jinaai/jina-embeddings-v2-base-code",
|
|
@@ -28,20 +39,31 @@ MODEL_PROFILES = {
|
|
|
28
39
|
"size_mb": 150,
|
|
29
40
|
"description": "Code-optimized, best for programming languages",
|
|
30
41
|
"use_case": "Open source projects, code semantic search",
|
|
42
|
+
"recommended": True,
|
|
43
|
+
},
|
|
44
|
+
"minilm": {
|
|
45
|
+
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
|
|
46
|
+
"dimensions": 384,
|
|
47
|
+
"size_mb": 90,
|
|
48
|
+
"description": "Popular lightweight model, good quality",
|
|
49
|
+
"use_case": "General purpose, low resource environments",
|
|
50
|
+
"recommended": True,
|
|
31
51
|
},
|
|
32
52
|
"multilingual": {
|
|
33
53
|
"model_name": "intfloat/multilingual-e5-large",
|
|
34
54
|
"dimensions": 1024,
|
|
35
55
|
"size_mb": 1000,
|
|
36
|
-
"description": "Multilingual + code support",
|
|
56
|
+
"description": "Multilingual + code support (high resource usage)",
|
|
37
57
|
"use_case": "Enterprise multilingual projects",
|
|
58
|
+
"recommended": False, # 1024d not recommended
|
|
38
59
|
},
|
|
39
60
|
"balanced": {
|
|
40
61
|
"model_name": "mixedbread-ai/mxbai-embed-large-v1",
|
|
41
62
|
"dimensions": 1024,
|
|
42
63
|
"size_mb": 600,
|
|
43
|
-
"description": "High accuracy, general purpose",
|
|
64
|
+
"description": "High accuracy, general purpose (high resource usage)",
|
|
44
65
|
"use_case": "High-quality semantic search, balanced performance",
|
|
66
|
+
"recommended": False, # 1024d not recommended
|
|
45
67
|
},
|
|
46
68
|
}
|
|
47
69
|
|