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',