Add support for new models and settings in Electron app
This commit is contained in:
@@ -12,6 +12,8 @@ const execFileAsync = promisify(execFile)
|
|||||||
const DEFAULT_BACKEND_API_URL = 'http://127.0.0.1:8000'
|
const DEFAULT_BACKEND_API_URL = 'http://127.0.0.1:8000'
|
||||||
const DEFAULT_OLLAMA_API_URL = 'http://127.0.0.1:11434'
|
const DEFAULT_OLLAMA_API_URL = 'http://127.0.0.1:11434'
|
||||||
const DEFAULT_EMBED_MODEL = 'nomic-embed-text:latest'
|
const DEFAULT_EMBED_MODEL = 'nomic-embed-text:latest'
|
||||||
|
const DEFAULT_RERANK_MODEL = DEFAULT_EMBED_MODEL
|
||||||
|
const DEFAULT_TRANSCRIPTION_MODEL = 'base'
|
||||||
const BGE_EMBED_MODEL = 'bge-m3:latest'
|
const BGE_EMBED_MODEL = 'bge-m3:latest'
|
||||||
const REPO_ROOT = path.resolve(__dirname, '..')
|
const REPO_ROOT = path.resolve(__dirname, '..')
|
||||||
const UPDATE_REMOTE_URL = 'https://giers10.uber.space/giers10/Heimgeist.git'
|
const UPDATE_REMOTE_URL = 'https://giers10.uber.space/giers10/Heimgeist.git'
|
||||||
@@ -33,22 +35,46 @@ const DEFAULT_AUDIO_INPUT_LANGUAGE = ''
|
|||||||
const defaultSettings = {
|
const defaultSettings = {
|
||||||
backendApiUrl: DEFAULT_BACKEND_API_URL,
|
backendApiUrl: DEFAULT_BACKEND_API_URL,
|
||||||
ollamaApiUrl: DEFAULT_OLLAMA_API_URL,
|
ollamaApiUrl: DEFAULT_OLLAMA_API_URL,
|
||||||
|
chatModel: 'llama3',
|
||||||
|
visionModel: '',
|
||||||
embedModel: DEFAULT_EMBED_MODEL,
|
embedModel: DEFAULT_EMBED_MODEL,
|
||||||
|
rerankModel: DEFAULT_RERANK_MODEL,
|
||||||
|
transcriptionModel: DEFAULT_TRANSCRIPTION_MODEL,
|
||||||
colorScheme: 'Default',
|
colorScheme: 'Default',
|
||||||
uiScale: DEFAULT_UI_SCALE,
|
uiScale: DEFAULT_UI_SCALE,
|
||||||
openDevToolsOnStartup: DEFAULT_OPEN_DEVTOOLS_ON_STARTUP,
|
openDevToolsOnStartup: DEFAULT_OPEN_DEVTOOLS_ON_STARTUP,
|
||||||
audioInputEnabled: DEFAULT_AUDIO_INPUT_ENABLED,
|
audioInputEnabled: DEFAULT_AUDIO_INPUT_ENABLED,
|
||||||
audioInputDeviceId: DEFAULT_AUDIO_INPUT_DEVICE_ID,
|
audioInputDeviceId: DEFAULT_AUDIO_INPUT_DEVICE_ID,
|
||||||
audioInputLanguage: DEFAULT_AUDIO_INPUT_LANGUAGE,
|
audioInputLanguage: DEFAULT_AUDIO_INPUT_LANGUAGE,
|
||||||
chatModel: 'llama3',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalizeEmbedModel(value) {
|
function normalizeEmbedModel(value) {
|
||||||
const trimmed = String(value || '').trim().toLowerCase()
|
const trimmed = String(value || '').trim()
|
||||||
if (trimmed === 'bge' || trimmed === 'bge-m3' || trimmed === BGE_EMBED_MODEL) {
|
if (!trimmed) {
|
||||||
|
return DEFAULT_EMBED_MODEL
|
||||||
|
}
|
||||||
|
|
||||||
|
const lowered = trimmed.toLowerCase()
|
||||||
|
if (lowered === 'bge' || lowered === 'bge-m3' || lowered === BGE_EMBED_MODEL) {
|
||||||
return BGE_EMBED_MODEL
|
return BGE_EMBED_MODEL
|
||||||
}
|
}
|
||||||
return DEFAULT_EMBED_MODEL
|
if (lowered === 'nomic' || lowered === 'nomic-embed-text' || lowered === DEFAULT_EMBED_MODEL) {
|
||||||
|
return DEFAULT_EMBED_MODEL
|
||||||
|
}
|
||||||
|
return trimmed
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeRerankModel(value) {
|
||||||
|
return normalizeEmbedModel(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeModelName(value, fallback = '') {
|
||||||
|
const trimmed = String(value || '').trim()
|
||||||
|
return trimmed || fallback
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeTranscriptionModel(value) {
|
||||||
|
return normalizeModelName(value, DEFAULT_TRANSCRIPTION_MODEL)
|
||||||
}
|
}
|
||||||
|
|
||||||
function looksLikeOllamaUrl(value) {
|
function looksLikeOllamaUrl(value) {
|
||||||
@@ -88,9 +114,28 @@ function migrateSettings(rawSettings) {
|
|||||||
migrated = true
|
migrated = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(source, 'rerankModel')) {
|
||||||
|
nextSettings.rerankModel = nextSettings.embedModel
|
||||||
|
migrated = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(source, 'visionModel')) {
|
||||||
|
nextSettings.visionModel = nextSettings.chatModel || ''
|
||||||
|
migrated = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(source, 'transcriptionModel')) {
|
||||||
|
nextSettings.transcriptionModel = DEFAULT_TRANSCRIPTION_MODEL
|
||||||
|
migrated = true
|
||||||
|
}
|
||||||
|
|
||||||
nextSettings.backendApiUrl = String(nextSettings.backendApiUrl || '').trim()
|
nextSettings.backendApiUrl = String(nextSettings.backendApiUrl || '').trim()
|
||||||
nextSettings.ollamaApiUrl = String(nextSettings.ollamaApiUrl || '').trim()
|
nextSettings.ollamaApiUrl = String(nextSettings.ollamaApiUrl || '').trim()
|
||||||
|
nextSettings.chatModel = normalizeModelName(nextSettings.chatModel)
|
||||||
|
nextSettings.visionModel = normalizeModelName(nextSettings.visionModel)
|
||||||
nextSettings.embedModel = normalizeEmbedModel(nextSettings.embedModel)
|
nextSettings.embedModel = normalizeEmbedModel(nextSettings.embedModel)
|
||||||
|
nextSettings.rerankModel = normalizeRerankModel(nextSettings.rerankModel)
|
||||||
|
nextSettings.transcriptionModel = normalizeTranscriptionModel(nextSettings.transcriptionModel)
|
||||||
nextSettings.openDevToolsOnStartup = normalizeOpenDevToolsOnStartup(nextSettings.openDevToolsOnStartup)
|
nextSettings.openDevToolsOnStartup = normalizeOpenDevToolsOnStartup(nextSettings.openDevToolsOnStartup)
|
||||||
nextSettings.audioInputEnabled = normalizeBooleanSetting(nextSettings.audioInputEnabled)
|
nextSettings.audioInputEnabled = normalizeBooleanSetting(nextSettings.audioInputEnabled)
|
||||||
nextSettings.audioInputDeviceId = String(nextSettings.audioInputDeviceId || '').trim()
|
nextSettings.audioInputDeviceId = String(nextSettings.audioInputDeviceId || '').trim()
|
||||||
@@ -550,6 +595,12 @@ ipcMain.handle('set-setting', (event, key, value) => {
|
|||||||
appSettings[key] = normalizeUiScale(value)
|
appSettings[key] = normalizeUiScale(value)
|
||||||
} else if (key === 'embedModel') {
|
} else if (key === 'embedModel') {
|
||||||
appSettings[key] = normalizeEmbedModel(value)
|
appSettings[key] = normalizeEmbedModel(value)
|
||||||
|
} else if (key === 'rerankModel') {
|
||||||
|
appSettings[key] = normalizeRerankModel(value)
|
||||||
|
} else if (key === 'chatModel' || key === 'visionModel') {
|
||||||
|
appSettings[key] = normalizeModelName(value)
|
||||||
|
} else if (key === 'transcriptionModel') {
|
||||||
|
appSettings[key] = normalizeTranscriptionModel(value)
|
||||||
} else if (key === 'openDevToolsOnStartup') {
|
} else if (key === 'openDevToolsOnStartup') {
|
||||||
appSettings[key] = normalizeOpenDevToolsOnStartup(value)
|
appSettings[key] = normalizeOpenDevToolsOnStartup(value)
|
||||||
} else if (key === 'audioInputEnabled') {
|
} else if (key === 'audioInputEnabled') {
|
||||||
@@ -573,7 +624,11 @@ ipcMain.handle('set-setting', (event, key, value) => {
|
|||||||
ipcMain.handle('update-settings', (event, settings) => {
|
ipcMain.handle('update-settings', (event, settings) => {
|
||||||
appSettings = { ...appSettings, ...settings }
|
appSettings = { ...appSettings, ...settings }
|
||||||
appSettings.uiScale = normalizeUiScale(appSettings.uiScale)
|
appSettings.uiScale = normalizeUiScale(appSettings.uiScale)
|
||||||
|
appSettings.chatModel = normalizeModelName(appSettings.chatModel)
|
||||||
|
appSettings.visionModel = normalizeModelName(appSettings.visionModel)
|
||||||
appSettings.embedModel = normalizeEmbedModel(appSettings.embedModel)
|
appSettings.embedModel = normalizeEmbedModel(appSettings.embedModel)
|
||||||
|
appSettings.rerankModel = normalizeRerankModel(appSettings.rerankModel)
|
||||||
|
appSettings.transcriptionModel = normalizeTranscriptionModel(appSettings.transcriptionModel)
|
||||||
appSettings.openDevToolsOnStartup = normalizeOpenDevToolsOnStartup(appSettings.openDevToolsOnStartup)
|
appSettings.openDevToolsOnStartup = normalizeOpenDevToolsOnStartup(appSettings.openDevToolsOnStartup)
|
||||||
appSettings.audioInputEnabled = normalizeBooleanSetting(appSettings.audioInputEnabled)
|
appSettings.audioInputEnabled = normalizeBooleanSetting(appSettings.audioInputEnabled)
|
||||||
appSettings.audioInputDeviceId = String(appSettings.audioInputDeviceId || '').trim()
|
appSettings.audioInputDeviceId = String(appSettings.audioInputDeviceId || '').trim()
|
||||||
|
|||||||
Reference in New Issue
Block a user