diff --git a/src/GeneralSettings.jsx b/src/GeneralSettings.jsx
index 3e98446..ac9eb59 100644
--- a/src/GeneralSettings.jsx
+++ b/src/GeneralSettings.jsx
@@ -480,6 +480,11 @@ export default function GeneralSettings({
const audioDeviceRefreshLabel = audioInputDevices.some(device => device.hasLabel)
? 'Refresh devices'
: 'Allow microphone access';
+ const chatModelOptions = buildSelectOptions(chatModels, selectedModel, 'saved model unavailable');
+ const visionModelOptions = buildSelectOptions(visionModels, visionModel, 'saved model unavailable');
+ const embeddingModelOptions = buildSelectOptions(embeddingModels, embedModel, 'saved model unavailable');
+ const rerankingModelOptions = buildSelectOptions(rerankingModels, rerankModel, 'saved model unavailable');
+ const transcriptionModelOptions = buildSelectOptions(whisperModels, transcriptionModel, 'saved model unavailable');
return (
@@ -507,24 +512,34 @@ export default function GeneralSettings({
Embedding Model
-
-
- nomic
-
-
-
-
-
-
- bge-m3
-
-
+
+ {embeddingModelOptions.length === 0 && — No embedding models available — }
+ {embeddingModelOptions.map(model => (
+ {model.label}
+ ))}
+
- Heimgeist uses this model for web-search reranking and for building or rebuilding local database embeddings.
+ Heimgeist uses this model for building or rebuilding local database embeddings.
+
+
+
+
Reranking Model
+
+ {rerankingModelOptions.length === 0 && — No reranking models available — }
+ {rerankingModelOptions.map(model => (
+ {model.label}
+ ))}
+
+
+ Heimgeist currently uses an embedding-based reranker for web search, so this should generally be an embedding-capable Ollama model.
@@ -544,6 +559,19 @@ export default function GeneralSettings({
{audioInputEnabled && (
<>
+
+ {transcriptionModelOptions.length === 0 && — No Whisper models available — }
+ {transcriptionModelOptions.map(model => (
+
+ {model.label}
+
+ ))}
+
{audioInputStatus.message}
)}
+
+ Select the Whisper model Heimgeist should use for microphone transcription.
+
Whisper can auto-detect the spoken language, but you can force a fixed input language here when auto-detection drifts.
@@ -594,9 +625,26 @@ export default function GeneralSettings({
value={selectedModel}
onChange={handleModelChange}
>
- {models.length === 0 && — No models available — }
- {models.map(m => {m} )}
+ {chatModelOptions.length === 0 && — No chat models available — }
+ {chatModelOptions.map(model => {model.label} )}
+
+ Heimgeist uses this model for normal text chat.
+
+
+
+
Vision Model
+
+ {visionModelOptions.length === 0 && — No vision models available — }
+ {visionModelOptions.map(model => {model.label} )}
+
+
+ Heimgeist uses this model when a chat message includes image attachments.
+
Stream Output