fix(release): stop shipping native modules built for the wrong runtime
Some checks failed
deploy-site / deploy (push) Failing after 14m16s

The released installer could not start: it carried a better-sqlite3 build for the
host Node runtime instead of Electron, so the app died immediately with a module
version mismatch when it opened its database.

Packaging now proves the Electron build of every runtime-sensitive native module
before an installer or archive exists, and installers are produced only from that
verified tree, so the mistake cannot pass silently. The release pipelines run the
same check.

The default local model also pointed at a retired model: a *.gguf name that
Ollama cannot serve, while the settings, onboarding, and guide screens
recommended an older model. All of them now use the model the service code
already preferred.
This commit is contained in:
Yun Chan 2026-09-18 15:45:03 +09:00
parent 0fbbbc1756
commit 1af3cf75c7
42 changed files with 473 additions and 83 deletions

View file

@ -42,7 +42,7 @@ const CONFIG_DEFAULTS: AppConfig = {
ttsSpeed: 1.0,
onlineApiUrl: 'http://127.0.0.1:5000',
localModelsDir: '',
llmModelId: 'gemma-2-2b-it.Q4_K_M.gguf',
llmModelId: 'gemma4:e4b',
ollamaServerUrl: 'http://127.0.0.1:11434',
appUsageMode: null,
authToken: null,

View file

@ -663,7 +663,7 @@ class LocalLLMService extends EventEmitter {
return {
connectionState,
serverUrl: getOllamaServerUrl(),
activeModel: configGet('llmModelId') || 'gemma2:2b',
activeModel: configGet('llmModelId') || 'gemma4:e4b',
serverVersion: this._serverVersion
}
}
@ -686,7 +686,7 @@ class LocalLLMService extends EventEmitter {
}
const serverUrl = getOllamaServerUrl()
const model = options?.model ?? configGet('llmModelId') ?? 'gemma2:2b'
const model = options?.model ?? configGet('llmModelId') ?? 'gemma4:e4b'
this._abortController = new AbortController()
this._state = LLMState.Generating

View file

@ -146,7 +146,7 @@ export function OllamaGuideModal({ open, onClose }: OllamaGuideModalProps): Reac
const { t } = useI18n()
const [llmStatus, setLlmStatus] = useState<LLMStatus | null>(null)
const [installedModels, setInstalledModels] = useState<LLMModel[]>([])
const [activeModel, setActiveModel] = useState<string>('gemma2:2b')
const [activeModel, setActiveModel] = useState<string>('gemma4:e4b')
const [checking, setChecking] = useState(false)
const [starting, setStarting] = useState(false)
const [startMessage, setStartMessage] = useState<string | null>(null)
@ -582,7 +582,7 @@ export function OllamaGuideModal({ open, onClose }: OllamaGuideModalProps): Reac
<Typography sx={{ fontSize: '11px', color: d3roPalette.text.dimLabel }}>
:
</Typography>
<CodeBlock code="ollama pull gemma2:2b" />
<CodeBlock code="ollama pull gemma4:e4b" />
</Box>
</Box>

View file

@ -49,7 +49,7 @@ export function OnboardingModal({ open, onClose }: OnboardingModalProps): React.
// Local Ollama State
const [ollamaStatus, setOllamaStatus] = useState<LLMStatus | null>(null)
const [installedModels, setInstalledModels] = useState<LLMModel[]>([])
const [activeModel, setActiveModel] = useState<string>('gemma2:2b')
const [activeModel, setActiveModel] = useState<string>('gemma4:e4b')
const [checkingOllama, setCheckingOllama] = useState(false)
const [startingOllama, setStartingOllama] = useState(false)
const [ollamaMsg, setOllamaMsg] = useState<string | null>(null)
@ -498,7 +498,7 @@ export function OnboardingModal({ open, onClose }: OnboardingModalProps): React.
<Button
variant="contained"
startIcon={<Download size={14} />}
onClick={() => handlePullModel('gemma2:2b')}
onClick={() => handlePullModel('gemma4:e4b')}
disabled={!isOllamaConnected}
sx={{
fontWeight: 500,

View file

@ -723,7 +723,7 @@ export function SettingsModal({ open, initialTab = 0, onClose }: SettingsModalPr
: 'Ollama 오프라인 (서버 실행 필요)'}
</Typography>
<Typography sx={{ fontSize: '11px', color: d3roPalette.text.secondary }}>
: {ollamaModels.length} | : {config.llmModelId ?? 'gemma2:2b'}
: {ollamaModels.length} | : {config.llmModelId ?? 'gemma4:e4b'}
</Typography>
</Box>
</Box>
@ -800,7 +800,7 @@ export function SettingsModal({ open, initialTab = 0, onClose }: SettingsModalPr
<InputLabel> Ollama </InputLabel>
<Select
label="활성 Ollama 모델"
value={config.llmModelId ?? 'gemma2:2b'}
value={config.llmModelId ?? 'gemma4:e4b'}
onChange={(e) => {
const val = e.target.value
updateConfig('llmModelId', val)
@ -815,7 +815,7 @@ export function SettingsModal({ open, initialTab = 0, onClose }: SettingsModalPr
))}
{/* 설치된 모델 목록이 없거나 기본 추천 추가 */}
{ollamaModels.length === 0 && (
<MenuItem value="gemma2:2b">gemma2:2b ()</MenuItem>
<MenuItem value="gemma4:e4b">gemma4:e4b ()</MenuItem>
)}
{!ollamaModels.some((m) => m.name === 'llama3.2:3b') && (
<MenuItem value="llama3.2:3b">llama3.2:3b</MenuItem>