diff --git a/sidepanel.html b/sidepanel.html index 3293c9c..14f78ca 100644 --- a/sidepanel.html +++ b/sidepanel.html @@ -29,6 +29,10 @@ +
+ + +
diff --git a/sidepanel.js b/sidepanel.js index 1cad244..fc32b06 100644 --- a/sidepanel.js +++ b/sidepanel.js @@ -1,6 +1,7 @@ // DOM Elements const apiKeyInput = document.getElementById('apiKey'); const scriptUrlInput = document.getElementById('scriptUrl'); +const modelInput = document.getElementById('modelInput'); const saveConfigBtn = document.getElementById('saveConfig'); const extractLaptopBtn = document.getElementById('extractLaptop'); const extractPeripheralBtn = document.getElementById('extractPeripheral'); @@ -20,7 +21,7 @@ toggleConfig.addEventListener('click', () => { }); // Load settings on startup -chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl'], (data) => { +chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl', 'geminiModel'], (data) => { if (data.geminiApiKey) { apiKeyInput.value = data.geminiApiKey; // Fold by default if already configured @@ -32,13 +33,19 @@ chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl'], (data) => { configChevron.classList.add('rotate-180'); } if (data.googleScriptUrl) scriptUrlInput.value = data.googleScriptUrl; + if (data.geminiModel) modelInput.value = data.geminiModel; }); // Save settings saveConfigBtn.addEventListener('click', () => { const apiKey = apiKeyInput.value.trim(); const scriptUrl = scriptUrlInput.value.trim(); - chrome.storage.local.set({ geminiApiKey: apiKey, googleScriptUrl: scriptUrl }, () => { + const model = modelInput.value.trim(); + chrome.storage.local.set({ + geminiApiKey: apiKey, + googleScriptUrl: scriptUrl, + geminiModel: model + }, () => { updateStatus('已保存', 'bg-green-500 text-white'); setTimeout(() => updateStatus('待机', 'bg-gray-200 text-gray-600'), 2000); }); @@ -50,15 +57,16 @@ extractPeripheralBtn.addEventListener('click', () => handleExtraction('periphera sendCustomBtn.addEventListener('click', () => handleExtraction('custom', customInput.value)); async function handleExtraction(type, customText = '') { - const { geminiApiKey, googleScriptUrl } = await chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl']); + const { geminiApiKey, googleScriptUrl, geminiModel } = await chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl', 'geminiModel']); if (!geminiApiKey) { alert('请先输入 Gemini API 密钥。'); return; } + const selectedModel = geminiModel || 'gemini-1.5-flash'; updateStatus('提取中...', 'bg-blue-500 text-white'); - resultsArea.textContent = '正在读取页面内容...'; + resultsArea.textContent = `正在使用 ${selectedModel} 读取内容...`; try { // 1. Get current tab content @@ -89,7 +97,7 @@ Title: ${pageData.title}`; } // 3. Call Gemini API - const geminiResult = await callGemini(geminiApiKey, systemPrompt, pageData.text, userPrompt); + const geminiResult = await callGemini(geminiApiKey, selectedModel, systemPrompt, pageData.text, userPrompt); const cleanedJson = parseGeminiJson(geminiResult); resultsArea.textContent = JSON.stringify(cleanedJson, null, 2); @@ -110,8 +118,8 @@ Title: ${pageData.title}`; } } -async function callGemini(apiKey, systemPrompt, contextText, userPrompt) { - const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent?key=${apiKey}`; +async function callGemini(apiKey, model, systemPrompt, contextText, userPrompt) { + const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`; const response = await fetch(url, { method: 'POST',