diff --git a/ccw/src/templates/dashboard-js/i18n.js b/ccw/src/templates/dashboard-js/i18n.js index 178baf99..63fe998e 100644 --- a/ccw/src/templates/dashboard-js/i18n.js +++ b/ccw/src/templates/dashboard-js/i18n.js @@ -266,6 +266,9 @@ const i18n = { 'codexlens.noApiModels': 'No API embedding models configured', 'codexlens.embeddingModel': 'Embedding Model', 'codexlens.modelHint': 'Select embedding model for vector search (models with ✓ are installed)', + 'codexlens.concurrency': 'API Concurrency', + 'codexlens.concurrencyHint': 'Number of parallel API calls (1-32). Higher values speed up indexing but may hit rate limits.', + 'codexlens.concurrencyCustom': 'Custom', 'codexlens.fullIndex': 'Full', 'codexlens.vectorIndex': 'Vector', 'codexlens.ftsIndex': 'FTS', @@ -1925,6 +1928,9 @@ const i18n = { 'codexlens.noApiModels': '未配置 API 嵌入模型', 'codexlens.embeddingModel': '嵌入模型', 'codexlens.modelHint': '选择向量搜索的嵌入模型(带 ✓ 的已安装)', + 'codexlens.concurrency': 'API 并发数', + 'codexlens.concurrencyHint': '并行 API 调用数量(1-32)。较高的值可加速索引但可能触发速率限制。', + 'codexlens.concurrencyCustom': '自定义', 'codexlens.fullIndex': '全部', 'codexlens.vectorIndex': '向量', 'codexlens.ftsIndex': 'FTS', diff --git a/ccw/src/templates/dashboard-js/views/codexlens-manager.js b/ccw/src/templates/dashboard-js/views/codexlens-manager.js index 53471bd4..6456a12f 100644 --- a/ccw/src/templates/dashboard-js/views/codexlens-manager.js +++ b/ccw/src/templates/dashboard-js/views/codexlens-manager.js @@ -1999,14 +1999,15 @@ function buildCodexLensManagerPage(config) { '' + // Concurrency selector (only for LiteLLM backend) '' + // Index buttons - two modes: full (FTS + Vector) or FTS only '
' + @@ -2204,6 +2205,18 @@ function buildModelSelectOptionsForPage() { return options; } +/** + * Validate concurrency input value (1-32) + */ +function validateConcurrencyInput(input) { + var value = parseInt(input.value, 10); + if (isNaN(value) || value < 1) { + input.value = 1; + } else if (value > 32) { + input.value = 32; + } +} + /** * Handle embedding backend change */ @@ -2290,10 +2303,10 @@ window.onEmbeddingBackendChange = onEmbeddingBackendChange; function initCodexLensIndexFromPage(indexType) { var backendSelect = document.getElementById('pageBackendSelect'); var modelSelect = document.getElementById('pageModelSelect'); - var concurrencySelect = document.getElementById('pageConcurrencySelect'); + var concurrencyInput = document.getElementById('pageConcurrencyInput'); var selectedBackend = backendSelect ? backendSelect.value : 'fastembed'; var selectedModel = modelSelect ? modelSelect.value : 'code'; - var selectedConcurrency = concurrencySelect ? parseInt(concurrencySelect.value, 10) : 1; + var selectedConcurrency = concurrencyInput ? Math.min(32, Math.max(1, parseInt(concurrencyInput.value, 10) || 4)) : 4; // For FTS-only index, model is not needed if (indexType === 'normal') {