diff --git a/app/chrome-extension/entrypoints/background/index.ts b/app/chrome-extension/entrypoints/background/index.ts index cf7560f..ee59291 100644 --- a/app/chrome-extension/entrypoints/background/index.ts +++ b/app/chrome-extension/entrypoints/background/index.ts @@ -1,8 +1,10 @@ import { initNativeHostListener } from './native-host'; -import { initSemanticSimilarityListener } from './semantic-similarity'; +import { + initSemanticSimilarityListener, + initializeSemanticEngineIfCached, +} from './semantic-similarity'; import { initStorageManagerListener } from './storage-manager'; -import { vectorSearchTabsContentTool } from './tools/browser/vector-search'; -import { ERROR_MESSAGES } from '@/common/constants'; +import { cleanupModelCache } from '@/utils/semantic-similarity-engine'; /** * Background script entry point @@ -14,14 +16,23 @@ export default defineBackground(() => { initSemanticSimilarityListener(); initStorageManagerListener(); - // Initialize vector search tool and handle potential errors - vectorSearchTabsContentTool.getIndexStats().catch((error) => { - console.error( - `${ERROR_MESSAGES.TOOL_EXECUTION_FAILED}: VectorSearchTabsContentTool initialization`, - error, - ); - }); + // Conditionally initialize semantic similarity engine if model cache exists + initializeSemanticEngineIfCached() + .then((initialized) => { + if (initialized) { + console.log('Background: Semantic similarity engine initialized from cache'); + } else { + console.log( + 'Background: Semantic similarity engine initialization skipped (no cache found)', + ); + } + }) + .catch((error) => { + console.warn('Background: Failed to conditionally initialize semantic engine:', error); + }); - // Note: Semantic similarity engine initialization is now user-controlled via popup - console.log('Background: Semantic similarity engine initialization is now user-controlled'); + // Initial cleanup on startup + cleanupModelCache().catch((error) => { + console.warn('Background: Initial cache cleanup failed:', error); + }); }); diff --git a/app/chrome-extension/entrypoints/background/semantic-similarity.ts b/app/chrome-extension/entrypoints/background/semantic-similarity.ts index d018cd0..f1626a9 100644 --- a/app/chrome-extension/entrypoints/background/semantic-similarity.ts +++ b/app/chrome-extension/entrypoints/background/semantic-similarity.ts @@ -1,7 +1,8 @@ import type { ModelPreset } from '@/utils/semantic-similarity-engine'; import { OffscreenManager } from '@/utils/offscreen-manager'; import { BACKGROUND_MESSAGE_TYPES, OFFSCREEN_MESSAGE_TYPES } from '@/common/message-types'; -import { SEMANTIC_CONFIG, STORAGE_KEYS, ERROR_MESSAGES } from '@/common/constants'; +import { STORAGE_KEYS, ERROR_MESSAGES } from '@/common/constants'; +import { hasAnyModelCache } from '@/utils/semantic-similarity-engine'; /** * Model configuration state management interface @@ -14,6 +15,29 @@ interface ModelConfig { let currentBackgroundModelConfig: ModelConfig | null = null; +/** + * Initialize semantic engine only if model cache exists + * This is called during plugin startup to avoid downloading models unnecessarily + */ +export async function initializeSemanticEngineIfCached(): Promise { + try { + console.log('Background: Checking if semantic engine should be initialized from cache...'); + + const hasCachedModel = await hasAnyModelCache(); + if (!hasCachedModel) { + console.log('Background: No cached models found, skipping semantic engine initialization'); + return false; + } + + console.log('Background: Found cached models, initializing semantic engine...'); + await initializeDefaultSemanticEngine(); + return true; + } catch (error) { + console.error('Background: Error during conditional semantic engine initialization:', error); + return false; + } +} + /** * Initialize default semantic engine model */ diff --git a/app/chrome-extension/entrypoints/background/tools/browser/vector-search.ts b/app/chrome-extension/entrypoints/background/tools/browser/vector-search.ts index 15b6770..a1e5366 100644 --- a/app/chrome-extension/entrypoints/background/tools/browser/vector-search.ts +++ b/app/chrome-extension/entrypoints/background/tools/browser/vector-search.ts @@ -35,19 +35,6 @@ class VectorSearchTabsContentTool extends BaseBrowserToolExecutor { maxChunksPerPage: LIMITS.MAX_SEARCH_RESULTS, skipDuplicates: true, }); - // Start background initialization without waiting for completion - this.startBackgroundInitialization(); - } - - /** - * Start background initialization (non-blocking) - * Note: Semantic engine initialization is now user-controlled - */ - private startBackgroundInitialization(): void { - console.log( - 'VectorSearchTabsContentTool: Background initialization skipped - semantic engine initialization is now user-controlled', - ); - // this.contentIndexer.startSemanticEngineInitialization(); // Removed automatic initialization } private async initializeIndexer(): Promise { diff --git a/app/chrome-extension/entrypoints/popup/App.vue b/app/chrome-extension/entrypoints/popup/App.vue index 69eaa34..65e0fa0 100644 --- a/app/chrome-extension/entrypoints/popup/App.vue +++ b/app/chrome-extension/entrypoints/popup/App.vue @@ -209,6 +209,14 @@ {{ isClearingData ? '清空中...' : '清空所有数据' }} + + +