Feature/lmstudio provider (#30)

* chore: just a plan update

* Add LM Studio as local AI provider (OpenAI-compatible, like Ollama)

* Convert WebP thumbnails to JPEG before image analysis for LM Studio compatibility

* Strengthen language enforcement in image analysis prompt for local models

* Use i18n localized prompts for image analysis instead of English instructions

* Add airplane mode (Flugmodus) with status bar toggle and offline model preferences

* Fix flightmode: persist model IDs, skip network when offline, airplane icon

* Auto-fallback to offline models in airplane mode for chat, title, and image analysis

* Auto-select first local model as offline fallback when no explicit offline model configured

* Block git fetch/pull/push and site upload in airplane mode

* fix: thumbnails optimized for AI

* fix: error handling in airplane mode

---------

Co-authored-by: hugo <hugoms@me.com>
This commit is contained in:
Georg Bauer
2026-03-02 13:35:42 +01:00
committed by GitHub
parent 4b4a9c1c8b
commit 5747925503
34 changed files with 2215 additions and 105 deletions

View File

@@ -34,6 +34,7 @@
"app.sitemapGenerationFailed": "Sitemap generation failed",
"app.calendarRegenerationFailed": "Calendar regeneration failed",
"app.uploadSiteFailed": "Site upload failed",
"app.uploadSiteOfflineMode": "Site upload is blocked while airplane mode is active.",
"app.uploadSiteNoCredentials": "Please configure SSH publishing credentials in Settings first.",
"app.previewOpenFailed": "Failed to open selected post preview",
"app.metadataDiff": "Metadata Diff",
@@ -314,6 +315,7 @@
"gitSidebar.error.loadRepoStatus": "Unable to load repository status.",
"gitSidebar.error.initFailed": "Failed to initialize git repository.",
"gitSidebar.error.actionFailed": "Failed to {action}.",
"gitSidebar.error.offlineMode": "This action is blocked while airplane mode is active.",
"gitSidebar.error.commitFailed": "Failed to commit changes.",
"gitSidebar.progress.preparingInit": "Preparing repository initialization...",
"gitSidebar.progress.pushingRemote": "Pushing commits to remote... this can take a while for large uploads.",
@@ -742,6 +744,7 @@
"settings.ai.providerOpenCode": "OpenCode",
"settings.ai.providerMistral": "Mistral",
"settings.ai.providerOllama": "Ollama (Local)",
"settings.ai.providerLmstudio": "LM Studio (Local)",
"settings.ai.providerOther": "Other",
"settings.ai.ollamaLabel": "Ollama (Local Models)",
"settings.ai.ollamaDescription": "Connect to a locally running Ollama instance to use local AI models.",
@@ -756,6 +759,28 @@
"settings.toast.modelCatalogRefreshFailed": "Failed to refresh model catalog",
"settings.toast.ollamaEnabled": "Ollama enabled",
"settings.toast.ollamaDisabled": "Ollama disabled",
"settings.ai.lmstudioLabel": "LM Studio (Local Models)",
"settings.ai.lmstudioDescription": "Connect to a locally running LM Studio instance to use local AI models.",
"settings.ai.lmstudioEnable": "Enable LM Studio",
"settings.ai.lmstudioCapabilitiesDescription": "Configure capabilities for each LM Studio model. Enable tools for function calling or vision for image analysis.",
"settings.ai.lmstudioCapModel": "Model",
"settings.ai.lmstudioCapTools": "Tools",
"settings.ai.lmstudioCapVision": "Vision",
"settings.toast.lmstudioEnabled": "LM Studio enabled",
"settings.toast.lmstudioDisabled": "LM Studio disabled",
"settings.ai.offlineLabel": "Airplane Mode",
"settings.ai.offlineDescription": "When enabled, only locally hosted models (Ollama, LM Studio) are used. Cloud providers are disabled.",
"settings.ai.offlineEnable": "Enable Airplane Mode",
"settings.ai.offlineChatModel": "Offline Chat Model",
"settings.ai.offlineChatModelDescription": "Model used for chat conversations when in airplane mode.",
"settings.ai.offlineTitleModel": "Offline Title Model",
"settings.ai.offlineTitleModelDescription": "Model used for title generation when in airplane mode.",
"settings.ai.offlineImageAnalysisModel": "Offline Image Analysis Model",
"settings.ai.offlineImageAnalysisModelDescription": "Model used for image analysis when in airplane mode.",
"settings.ai.offlineNoLocalProviders": "No local providers enabled. Enable Ollama or LM Studio first.",
"settings.ai.offlineNoLocalModels": "No local models available",
"settings.toast.offlineEnabled": "Airplane mode enabled",
"settings.toast.offlineDisabled": "Airplane mode disabled",
"settings.publishing.sshHostDescription": "The SSH server hostname or IP address.",
"settings.publishing.sshUsernameDescription": "Your SSH account username.",
"settings.publishing.sshRemotePathDescription": "The destination directory on the remote server where your blog will be published.",
@@ -891,6 +916,9 @@
"statusBar.theme": "Theme: {theme}",
"statusBar.ui": "UI",
"statusBar.uiLanguage": "UI language",
"statusBar.offlineMode": "Airplane Mode",
"statusBar.offlineModeActive": "Airplane Mode (active)",
"statusBar.offlineModeTooltip": "Click to toggle airplane mode",
"windowTitleBar.toggleSidebar": "Toggle Sidebar",
"windowTitleBar.hideSidebar": "Hide Sidebar (Ctrl+B)",
"windowTitleBar.showSidebar": "Show Sidebar (Ctrl+B)",