-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptions.js
More file actions
138 lines (115 loc) · 4.54 KB
/
options.js
File metadata and controls
138 lines (115 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const modelSelect = document.getElementById("modelSelect");
let saveButton;
let statusMessage;
// Wrap storage access in a DOMContentLoaded listener
document.addEventListener("DOMContentLoaded", () => {
saveButton = document.getElementById("saveSettings");
statusMessage = document.getElementById("statusMessage");
// Load Ollama models
loadModelsFromOllama();
// Load saved model on page load
chrome.storage.local.get(["selectedModel"], (result) => {
if (chrome.runtime.lastError) {
console.error("Error accessing chrome.storage:", chrome.runtime.lastError);
showStatus("Error loading settings. Please try again.", "error");
return;
}
if (result.selectedModel) {
modelSelect.value = result.selectedModel;
}
});
// Save settings when button is clicked
saveButton.addEventListener("click", () => {
saveButton.disabled = true;
saveButton.textContent = "Saving...";
chrome.storage.local.set({ selectedModel: modelSelect.value }, () => {
if (chrome.runtime.lastError) {
console.error("Error saving to chrome.storage:", chrome.runtime.lastError);
showStatus("Error saving settings. Please try again.", "error");
saveButton.disabled = false;
saveButton.textContent = "Save Settings";
return;
}
console.log("Model saved:", modelSelect.value);
showStatus("Settings saved successfully!", "success");
setTimeout(() => {
saveButton.disabled = false;
saveButton.textContent = "Save Settings";
}, 1000);
});
});
});
function loadModelsFromOllama() {
console.log("Loading models from Ollama...");
modelSelect.disabled = true;
if (saveButton) saveButton.disabled = true;
// Add a loading option
const loadingOption = document.createElement("option");
loadingOption.textContent = "Loading models...";
modelSelect.appendChild(loadingOption);
fetch("http://localhost:11434/api/tags")
.then(res => {
if (!res.ok) {
throw new Error(`HTTP error! Status: ${res.status}`);
}
return res.json();
})
.then(json => {
// The API response includes `models` property with an array of objects
const modelsArray = json.models || [];
// Clear existing options
modelSelect.innerHTML = "";
if (modelsArray.length === 0) {
const noModelsOpt = document.createElement("option");
noModelsOpt.textContent = "No models found";
modelSelect.appendChild(noModelsOpt);
showStatus("No models found in Ollama. Please check if Ollama is running.", "error");
return;
}
// Populate dropdown with each model's "name"
modelsArray.forEach(item => {
const opt = document.createElement("option");
opt.value = item.name; // e.g. "phi4:latest"
opt.textContent = item.name; // e.g. "phi4:latest"
modelSelect.appendChild(opt);
});
// Restore the previously selected value, if any
chrome.storage.local.get(["selectedModel"], (result) => {
if (chrome.runtime.lastError) {
console.error("Error accessing chrome.storage:", chrome.runtime.lastError);
return; // Handle the error
}
if (result.selectedModel && modelsArray.some(m => m.name === result.selectedModel)) {
modelSelect.value = result.selectedModel;
} else if (modelsArray.length > 0) {
// Default to first model if previously selected model is no longer available
modelSelect.value = modelsArray[0].name;
}
});
modelSelect.disabled = false;
if (saveButton) saveButton.disabled = false;
})
.catch(err => {
console.error("Error loading models from Ollama:", err);
modelSelect.innerHTML = "";
const errorOpt = document.createElement("option");
errorOpt.textContent = "Error loading models";
modelSelect.appendChild(errorOpt);
showStatus("Error connecting to Ollama. Please make sure Ollama is running at http://localhost:11434.", "error");
modelSelect.disabled = true;
if (saveButton) saveButton.disabled = false;
});
}
// Helper function to show status messages
function showStatus(message, type) {
if (!statusMessage) return;
statusMessage.textContent = message;
statusMessage.className = "status-message " + type;
statusMessage.style.display = "block";
// Auto-hide success messages after 3 seconds
if (type === "success") {
setTimeout(() => {
statusMessage.style.display = "none";
}, 3000);
}
}