From 8c10ba18442d58c538f43a91303527683439ea37 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Wed, 8 Apr 2026 11:16:06 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=84=A4=EC=A0=95=EC=97=90=20LLM=20?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=EC=84=A0=ED=83=9D=20=EB=93=9C=EB=A1=AD?= =?UTF-8?q?=EB=8B=A4=EC=9A=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ollama에서 사용 가능한 모델 목록을 자동 로드하고 설정 > LLM 탭에서 선택할 수 있게 추가. 기존 404 에러(qwen3:4b 미설치) 해결. --- src/renderer/components/SettingsModal.tsx | 31 +++++++++++++++++++++++ src/renderer/i18n/en.json | 1 + src/renderer/i18n/ko.json | 1 + 3 files changed, 33 insertions(+) diff --git a/src/renderer/components/SettingsModal.tsx b/src/renderer/components/SettingsModal.tsx index 15c85bb..7db3bac 100644 --- a/src/renderer/components/SettingsModal.tsx +++ b/src/renderer/components/SettingsModal.tsx @@ -203,6 +203,9 @@ export function SettingsModal({ open, onClose }: SettingsModalProps): React.Reac const [hotkeyModalOpen, setHotkeyModalOpen] = useState(false) const [hotkeyModalTarget, setHotkeyModalTarget] = useState<'dictation' | 'handsFree' | 'caption'>('dictation') + // LLM 모델 목록 + const [llmModels, setLlmModels] = useState>([]) + // 오디오 디바이스 const [audioDevices, setAudioDevices] = useState([]) const [selectedDeviceId, setSelectedDeviceId] = useState('default') @@ -240,6 +243,11 @@ export function SettingsModal({ open, onClose }: SettingsModalProps): React.Reac if (devicesResult.success) setAudioDevices(devicesResult.data) if (selectedResult.success && selectedResult.data) setSelectedDeviceId(selectedResult.data) }) + + // LLM 모델 목록 로드 + window.electronAPI.llm.getModels().then((resp) => { + if (resp.success) setLlmModels(resp.data) + }) }, [open]) const updateConfig = useCallback((key: keyof AppConfig, value: AppConfig[keyof AppConfig]) => { @@ -657,6 +665,29 @@ export function SettingsModal({ open, onClose }: SettingsModalProps): React.Reac + + {t('settings.llmModel')} + + + + {t('settings.llmModel')} + + + + + {t('settings.postProcess')} diff --git a/src/renderer/i18n/en.json b/src/renderer/i18n/en.json index b305fbc..6b36aa8 100644 --- a/src/renderer/i18n/en.json +++ b/src/renderer/i18n/en.json @@ -111,6 +111,7 @@ "settings.ollamaServer": "Ollama Server", "settings.ollamaUrl": "Ollama Server URL", "settings.ollamaHint": "Connects automatically when Ollama is running. Pull models directly in Ollama (e.g. ollama pull qwen3:4b).", + "settings.llmModel": "LLM Model", "settings.postProcess": "Voice Post-Processing", "settings.defaultAction": "Default Post-Processing Command", "settings.action.none": "None (raw transcription)", diff --git a/src/renderer/i18n/ko.json b/src/renderer/i18n/ko.json index 016bf7a..7ca4eae 100644 --- a/src/renderer/i18n/ko.json +++ b/src/renderer/i18n/ko.json @@ -111,6 +111,7 @@ "settings.ollamaServer": "Ollama 서버", "settings.ollamaUrl": "Ollama 서버 URL", "settings.ollamaHint": "Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull qwen3:4b).", + "settings.llmModel": "LLM 모델", "settings.postProcess": "음성 후처리", "settings.defaultAction": "기본 후처리 명령어", "settings.action.none": "없음 (원본 텍스트 그대로)",