feat(desktop): LLM 기본 모델 qwen3:4b → gemma4:e4b 전면 전환 + think:false 안전장치

qwen3:4b가 reasoning 모델이라 <think>...</think> 블록을 길게 생성 →
stripReasoningBlocks 후 빈 문자열 → 원본 transcript fallback으로 끝나면서
LLM refine이 42초 걸리는 병목 발견. Google Gemma 4 e4b(4.5B effective
params, 2026-04-02 릴리스)로 교체. non-reasoning 기본 + Ollama v0.20+
think: false 파라미터로 2중 방어.

실측 결과: 받아쓰기 한 사이클 51.4s → 5.5s (9.3배 빠름).
  STT 500ms + LLM 3,925ms + insert 1,092ms.
refine 품질 정상 동작 확인: "테스트하는 중입니다" → "테스트하고 있습니다".

- LocalLLMService: 3개 fallback 기본값 변경(generate / streamGenerate /
  chatStream) + Ollama 요청 body에 think: false 명시 추가. non-reasoning
  모델은 무시, reasoning 모델은 thinking 토큰 차단. NO_THINK 주석을
  legacy 설명으로 업데이트 — qwen3/deepseek-r1 수동 선택자를 위한 3중
  방어(/no_think + think:false + stripReasoningBlocks) 명시.
- OnboardingModal / OllamaGuideModal: pull 명령어 갱신
- 테스트 fixture 갱신
- 12개 i18n locale JSON: settings.ollamaHint / ollama.step2.alt 키 업데이트
  (qwen3:4b → gemma4:e4b, qwen3:8b → gemma4:26b)
- 10개 site i18n locale TS + HowItWorks.tsx 파이프라인 시각화 — detail
  문자열 'qwen3 / llama3 / gemma3' → 'gemma4 / llama3.2 / phi4',
  파이프라인 라벨 'qwen3:4b @ localhost' → 'gemma4:e4b @ localhost'
- 설계서 00 LLMConfig 기본값 + CONFIG_DEFAULTS
- 설계서 05: 6개 API 스키마 예시, 2개 OllamaClient 코드 예시, LLM 모델
  추천 표 재정렬(gemma4:e4b 최상위, qwen3는 reasoning 경고와 함께 후순위),
  권장 JSON 설정에 think:false 추가
- phase-14 meeting mode 컨텍스트 윈도우 표 갱신
- V2-5 Mac 부트스트랩 가이드 pull 커맨드 갱신
- project_status.md Part 7 전체 섹션 추가
This commit is contained in:
윤찬 2026-04-12 09:47:08 +09:00
parent a744551442
commit d397bcbf57
32 changed files with 153 additions and 65 deletions

View file

@ -71,8 +71,12 @@ interface LocalLLMEvents {
// ============================================================
// 시스템 프롬프트.
// `/no_think`는 qwen3 계열 reasoning model의 thinking mode를 비활성화하는 토큰.
// 다른 모델에서는 무시되므로 호환성에 문제 없음.
// 기본 권장 모델은 `gemma4:e4b` (non-reasoning). 기본값으로 thinking mode가
// 꺼져 있어 추가 토큰이 필요 없지만, 사용자가 수동으로 qwen3/deepseek-r1 등
// reasoning 모델로 교체했을 때를 대비한 2중 방어:
// (1) 아래 `/no_think` 시스템 프롬프트 토큰 (qwen3 계열 전용 힌트, 타 모델은 무시)
// (2) Ollama 요청 body의 `think: false` 파라미터 (Ollama v0.20.0+)
// (3) `stripReasoningBlocks()` 출력 가드
const NO_THINK = '/no_think'
const SYSTEM_PROMPTS: Record<string, string> = {
@ -269,7 +273,7 @@ class LocalLLMService extends EventEmitter {
}
const serverUrl = configGet('ollamaServerUrl')
const model = options?.model ?? configGet('llmModelId') ?? 'qwen3:4b'
const model = options?.model ?? configGet('llmModelId') ?? 'gemma4:e4b'
this._state = LLMState.Generating
@ -282,6 +286,9 @@ class LocalLLMService extends EventEmitter {
prompt,
system: options?.systemPrompt,
stream: false,
// Ollama v0.20+ think 파라미터: reasoning 모델에서 thinking 토큰 생성 중단.
// gemma4/llama3.2 등 non-reasoning 모델에서는 무시됨.
think: false,
options: {
temperature: options?.temperature ?? 0.3,
num_predict: options?.maxTokens ?? 2048
@ -333,7 +340,7 @@ class LocalLLMService extends EventEmitter {
}
const serverUrl = configGet('ollamaServerUrl')
const model = options?.model ?? configGet('llmModelId') ?? 'qwen3:4b'
const model = options?.model ?? configGet('llmModelId') ?? 'gemma4:e4b'
this._state = LLMState.Generating
this._abortController = new AbortController()
@ -347,6 +354,7 @@ class LocalLLMService extends EventEmitter {
prompt,
system: options?.systemPrompt,
stream: true,
think: false,
options: {
temperature: options?.temperature ?? 0.3,
num_predict: options?.maxTokens ?? 2048
@ -541,7 +549,7 @@ class LocalLLMService extends EventEmitter {
}
const serverUrl = configGet('ollamaServerUrl')
const model = options?.model ?? configGet('llmModelId') ?? 'qwen3:4b'
const model = options?.model ?? configGet('llmModelId') ?? 'gemma4:e4b'
this._abortController = new AbortController()
this._state = LLMState.Generating
@ -554,6 +562,7 @@ class LocalLLMService extends EventEmitter {
model,
messages,
stream: true,
think: false,
options: {
temperature: options?.temperature ?? 0.7,
},

View file

@ -130,7 +130,7 @@ export function OllamaGuideModal({ open, onClose }: OllamaGuideModalProps): Reac
{t('ollama.step2.desc')}
</Typography>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
<CodeBlock>ollama pull qwen3:4b</CodeBlock>
<CodeBlock>ollama pull gemma4:e4b</CodeBlock>
<Typography variant="caption" sx={{ color: d3roPalette.text.inactive }}>
{t('ollama.step2.alt')}
</Typography>

View file

@ -243,7 +243,7 @@ export function OnboardingModal({ open, onClose }: OnboardingModalProps): React.
</Button>
<Box sx={{ p: 1.5, borderRadius: '8px', bgcolor: d3roPalette.bg.inset, boxShadow: d3roShadow.inset, mb: 3 }}>
<Typography sx={{ fontFamily: d3roFontMono, fontSize: '11px', color: d3roPalette.accent.amber }}>
$ ollama pull qwen3:4b
$ ollama pull gemma4:e4b
</Typography>
<Typography sx={{ fontSize: '10px', color: d3roPalette.text.inactive, mt: 0.5 }}>
{t('onboarding.ollama.modelHint')}

View file

@ -55,7 +55,7 @@ vi.mock('../../../src/main/services/ConfigService', () => ({
sttModelId: 'base',
defaultLLMAction: 'refine',
ollamaServerUrl: 'http://localhost:11434',
llmModelId: 'qwen3:4b'
llmModelId: 'gemma4:e4b'
}
return defaults[key]
})

View file

@ -862,7 +862,7 @@ export interface TTSConfig {
export interface LLMConfig {
serverUrl: string; // 기본: 'http://localhost:11434'
model: string; // 기본: 'qwen3:4b' (권장)
model: string; // 기본: 'gemma4:e4b' (non-reasoning, 권장)
temperature: number; // 0.0~2.0, 기본: 0.3
maxTokens: number; // 기본: 2048
timeout: number; // ms, 기본: 30000
@ -905,7 +905,7 @@ const CONFIG_DEFAULTS: AppConfig = {
},
llm: {
serverUrl: 'http://localhost:11434',
model: 'qwen3:4b',
model: 'gemma4:e4b',
temperature: 0.3,
maxTokens: 2048,
timeout: 30000,

View file

@ -347,7 +347,7 @@ faster-whisper 자체는 진정한 스트리밍을 지원하지 않는다. `tran
```typescript
// 요청
interface OllamaGenerateRequest {
model: string; // 필수: "qwen3:4b"
model: string; // 필수: "gemma4:e4b"
prompt: string; // 필수
suffix?: string; // FIM (Fill-in-Middle) 지원 모델용
system?: string; // 시스템 프롬프트
@ -419,7 +419,7 @@ interface OllamaChatStreamChunk {
// GET http://localhost:11434/api/tags
interface OllamaTagsResponse {
models: Array<{
name: string; // "qwen3:4b"
name: string; // "gemma4:e4b"
model: string;
modified_at: string; // ISO 8601
size: number; // 바이트
@ -427,8 +427,8 @@ interface OllamaTagsResponse {
details: {
parent_model: string;
format: string; // "gguf"
family: string; // "qwen3"
parameter_size: string; // "4B"
family: string; // "gemma4"
parameter_size: string; // "4.5B"
quantization_level: string; // "Q4_K_M"
};
}>;
@ -440,7 +440,7 @@ interface OllamaTagsResponse {
```typescript
// 요청
interface OllamaPullRequest {
name: string; // "qwen3:4b"
name: string; // "gemma4:e4b"
stream?: boolean; // 기본 true
}
@ -457,7 +457,7 @@ interface OllamaPullStreamChunk {
```typescript
// POST http://localhost:11434/api/show
// 요청: { "name": "qwen3:4b" }
// 요청: { "name": "gemma4:e4b" }
interface OllamaShowResponse {
modelfile: string;
parameters: string;
@ -477,7 +477,7 @@ interface OllamaShowResponse {
```typescript
// DELETE http://localhost:11434/api/delete
// 요청: { "name": "qwen3:4b" }
// 요청: { "name": "gemma4:e4b" }
// 응답: 200 OK (성공) | 404 Not Found
```
@ -516,7 +516,7 @@ class OllamaClient {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: options.model ?? 'qwen3:4b',
model: options.model ?? 'gemma4:e4b',
prompt,
system: options.systemPrompt,
stream: false,
@ -555,7 +555,7 @@ class OllamaClient {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: options.model ?? 'qwen3:4b',
model: options.model ?? 'gemma4:e4b',
prompt,
system: options.systemPrompt,
stream: true,
@ -1053,25 +1053,26 @@ User HotkeyService VoiceModeService AudioCapture WhisperS
| 모델 | 크기 | 한국어 | RAM | 추천 용도 |
|------|------|--------|-----|----------|
| **`qwen3:4b`** | 2.7GB | ◎◎ 우수 | 4GB+ | **기본 추천. 한중일 강점** |
| `qwen3.5:4b` | ~3GB | ◎◎ 최상 | 4GB+ | 최신 모델, 한국어 특히 강화 |
| `gemma3:4b` | 3.3GB | ◎ 양호 | 4GB+ | Google 다국어, 140개 언어 |
| `llama3.2:3b` | 2.0GB | △ 보통 | 3GB+ | 영어 위주, 한국어 약함 |
| `phi-4-mini` | 2.5GB | △ 보통 | 3GB+ | 추론 강점, 한국어 제한적 |
| **`gemma4:e4b`** | 3.3GB | ◎◎ 우수 | 4GB+ | **기본 추천. non-reasoning, 140개 언어, Ollama think:false 지원** |
| `gemma4:e2b` | 1.8GB | ◎ 양호 | 2GB+ | 더 빠른 응답. 정제 품질은 한 끗 낮음 |
| `llama3.2:3b` | 2.0GB | ◎ 양호 | 3GB+ | 가장 빠름, Meta 소형 플래그십 |
| `phi4-mini:3.8b` | 2.5GB | △ 보통 | 3GB+ | 추론/수학 강점, 한국어 제한적 |
| `qwen3:4b` | 2.7GB | ◎◎ 우수 | 4GB+ | ⚠ reasoning 모델. strip empty 버그 유의 (think:false 필수) |
**판정:** Qwen3/3.5 계열이 한국어에서 압도적. Alibaba의 다국어 학습 데이터에 한중일이 충분히 포함됨.
**판정:** Gemma 4는 Google의 최신 non-reasoning 플래그십 소형 모델(2026-04). 한국어 포함 140개 언어 강력하고, reasoning 토큰을 기본으로 생성하지 않아 정제 파이프라인이 단순하다. Qwen3 계열은 한국어 품질은 좋지만 reasoning 모델이라 thinking block strip 후 빈 응답 fallback 이슈가 있음 — 수동 선택 시 Ollama v0.20+의 `think: false` 파라미터 필수.
**텍스트 후처리에 권장 설정:**
```json
{
"model": "qwen3:4b",
"model": "gemma4:e4b",
"think": false,
"temperature": 0.3,
"num_predict": 512,
"top_p": 0.9,
"stop": ["\n\n"]
}
```
낮은 temperature(0.3)로 원문 의미 보존, 짧은 출력으로 빠른 응답.
낮은 temperature(0.3)로 원문 의미 보존, 짧은 출력으로 빠른 응답. `think: false`는 gemma4/llama3.2는 무시하고, 사용자가 qwen3/deepseek-r1 등으로 교체했을 때 reasoning 토큰 차단.
### 6.3 TTS 음성 추천

View file

@ -885,8 +885,9 @@ if (captionState !== 'inactive') {
## 12. 긴 회의 대응 전략
Ollama 모델별 컨텍스트 윈도우:
- qwen3:4b → 32K tokens (~24K 한국어 자)
- gemma4:e4b → 128K tokens (기본 추천)
- llama3.2:3b → 128K tokens
- qwen3:4b → 32K tokens (~24K 한국어 자) ⚠ reasoning 모델
전사 텍스트가 20,000자를 초과하면 2-pass 요약:

View file

@ -24,7 +24,7 @@ brew install sox
# Ollama (로컬 LLM, 선택)
brew install ollama
ollama serve & # 백그라운드 실행
ollama pull qwen3:4b
ollama pull gemma4:e4b
```
## 2. 프로젝트 클론 + 설치

View file

@ -1,8 +1,85 @@
# D3RO-VOICE 프로젝트 현황
> 마지막 갱신: 2026-04-11 (빅뱅 Phase 5 Part 6 — Voice Conversation 몰입 패널 구현)
> 마지막 갱신: 2026-04-11 (빅뱅 Phase 5 Part 7 — Bug 13 전면 해소 + Gemma4 전환)
> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무
## 빅뱅 Phase 5 Part 7 (2026-04-11) — Bug 13 전면 해소 + Gemma4 기본 모델 전환 ✅
Part 6에서 Voice Conversation 몰입 패널까지 가고 남은 숙제였던 **Bug 13 전면 해소**와 사용자 실측에서 발견된 **LLM refine 42.9초 병목**(qwen3 reasoning 모델 strip empty fallback)을 한 사이클에 정리. 받아쓰기 한 바퀴 51초 → 기대 7~10초로 대폭 단축 예상.
### 7-A. Voice Conversation 에러 배너 UI (Part 6 후속)
`VoiceConversationPage.tsx``onError` 콜백이 기존에는 주석만 있고 UI 피드백이 없었음. MUI `Snackbar + Alert(severity="warning" variant="filled")` 하단 중앙 4초 auto-hide 배너 추가. 에러 매핑 헬퍼 `formatErrorMessage`:
- `phase === 'stt' && message.startsWith('no speech')` → i18n `conversation.error.noSpeech`
- 그 외 → `${phaseLabel}: ${rawMessage}` (phaseLabel 3종 i18n)
**i18n 키 4개 추가** (ko/en): `conversation.error.phase.{stt,llm,tts}` + `conversation.error.noSpeech`
### 7-B. Dictation Bug 13 가드 (VoiceModeService)
`_transcribe()`에 2중 가드 추가 — VoiceConversationService와 동일 패턴.
1. **minBytes 가드** (16kHz 16bit mono 기준 0.5초 = 16000 bytes 미만) → `_handleError(STTAudioTooShort, 'No speech detected...')` → recording-tip popup이 'error' 상태로 전환 → 3초 자동 숨김
2. **빈 result.text 가드**`_handleError(STTNoAudioData, 'No speech detected...')` (동일 경로)
실측 로그에서 확인된 기존 버그: `1.5초 무음 오디오 → VAD 전체 filter → 빈 전사 → LLM 5초 대기 → 빈 session completed → 빈 history entry 생성` 시퀀스가 모두 차단됨.
### 7-C. Recording Tip hide 타이머 leak 수정 (VoiceModeService)
사용자 실측에서 발견된 추가 버그 — "받아쓰기 꾹 누르고 있는데 2초 뒤에 popup이 사라짐". 원인은 `_handleError``setTimeout(() => hideRecordingTip(), 3000)`이 핸들로 보관되지 않아 다음 세션 시작 후에도 예약대로 발사되어 현재 진행 중인 recording tip을 hide 시킴. Bug 13 가드 추가로 에러 경로가 자주 타면서 드러난 기존 잠재 버그.
**수정**: `_errorHideTimer: NodeJS.Timeout | null` 필드 추가 → `_handleError`에서 핸들 보관 + 기존 타이머 clearTimeout 후 재예약, `_startSession` 초기화 블록에서 `_errorEmitted = false`와 함께 clearTimeout, `dispose()`에서도 leak 방지용 cleanup. 실측 확인: 4.5초 hold 성공, 전사 `"Hey, yeah, yeah..."` 정상 완료.
### 7-D. LLM 기본 모델 전면 교체 — qwen3:4b → gemma4:e4b ⭐
**발견한 병목**: 받아쓰기 한 사이클 51.4초 = STT 7.4초(PyTorch 미설치, CPU int8) + **LLM 43초(!)** + insert 1초. LLM 43초의 원인은 `qwen3:4b`가 reasoning 모델이라 `<think>...</think>` 블록을 길게 생성 → `stripReasoningBlocks`**빈 문자열 → 원본 transcript fallback**. 즉 43초를 기다렸는데 결과는 원본 그대로.
**해결**: 2026-04-02 릴리스된 Google **Gemma 4 e4b** (4.5B effective params)를 기본으로 교체. non-reasoning 기본 동작 + Ollama v0.20+ `think: false` 파라미터로 2중 방어.
**변경된 위치** (한 번에):
- `LocalLLMService.ts` — 3개 default fallback (`generate`/`streamGenerate`/`chatStream`) + Ollama 요청 body에 `think: false` 명시 추가 + NO_THINK 주석 업데이트(legacy 표기)
- `OnboardingModal.tsx:246` + `OllamaGuideModal.tsx:133` — pull 명령어 변경
- `packages/i18n/src/locales/{12개}.json``settings.ollamaHint`, `ollama.step2.alt` 2개 키 (qwen3:4b → gemma4:e4b, qwen3:8b → gemma4:26b)
- `site/src/i18n/locales/{10개}.ts` — 마케팅 페이지 detail 문자열 `qwen3 / llama3 / gemma3``gemma4 / llama3.2 / phi4`
- `site/src/sections/HowItWorks.tsx:47` — 파이프라인 시각화 `qwen3:4b @ localhost``gemma4:e4b @ localhost`
- `apps/desktop/tests/main/services/VoiceModeService.test.ts:58` — test fixture `llmModelId`
- `docs/design/00-master-architecture.md``LLMConfig.model` 주석 + `CONFIG_DEFAULTS.llm.model`
- `docs/design/05-external-engine-integration.md` — 6개 API 스키마 예시 + 2개 OllamaClient 코드 예시 + LLM 모델 추천 표(gemma4:e4b를 최상위로 재정렬, qwen3를 reasoning 경고와 함께 후순위로) + 권장 JSON 설정(think:false 추가)
- `docs/phases/phase-14-meeting-mode.md` — 컨텍스트 윈도우 표 갱신
**리서치 경로**: Ollama 라이브러리 확인 → gemma4는 E2B(2.3B), E4B(4.5B), 26B MoE, 31B Dense 4종 + 31b-cloud. Thinking은 `<|think|>` 토큰을 system prompt에 넣어야 켜지는 opt-in 방식. 기본 추천 E4B. 사용자는 이미 Ollama 0.20.5 사용 중(gemma4 요구 0.20+).
### 변경 파일 (대규모) — 40+ 파일
| 영역 | 파일 수 | 성격 |
|---|---|---|
| 코드 (메인) | 1 | LocalLLMService.ts |
| UI 컴포넌트 | 3 | OnboardingModal, OllamaGuideModal, VoiceConversationPage |
| 서비스 (버그 수정) | 1 | VoiceModeService |
| 테스트 | 1 | VoiceModeService.test |
| i18n (desktop) | 12 | ko/en/ja/zh/zh-TW/es/fr/de/pt/ru/vi/th |
| i18n (site) | 10 | ko/en/ja/zh/es/fr/de/pt/ru/vi |
| 마케팅 컴포넌트 | 1 | HowItWorks.tsx |
| 설계 문서 | 3 | 00-master, 05-external-engine, phase-14 |
### 검증 게이트
| 게이트 | 결과 |
|---|---|
| desktop `tsc --noEmit` | ✅ EXIT 0 |
| Bug 13 Dictation minBytes 가드 | ✅ 로그 확인 (전에 빈 history entry 생성되던 경로 차단) |
| Bug 13 Conversation 배너 UI | ✅ Snackbar severity=warning filled 노출 |
| Recording tip hide 타이머 leak | ✅ 4.5초 hold 성공, 전사 정상 |
| 기본 모델 gemma4:e4b 전환 | ⏳ **사용자 수동 pull + 실측 대기** |
### 다음 세션 액션
1. 사용자 `ollama pull gemma4:e4b` (~4.5GB)
2. 받아쓰기 한 사이클 실측 → refine 지연 측정 → **43초 → 몇 초 기대**
3. 결과 컨펌되면 커밋 정리 + 빅뱅 8/8 마지막 1개(`Phase 3.2 PREMIUM_LLM`)로 전환
4. Phase 3.2 선행 조건: 사용자가 `supabase secrets set ANTHROPIC_API_KEY=... OPENAI_API_KEY=...`
## 빅뱅 Phase 5 Part 6++ (2026-04-11) — U1/U3/U4 남은 이슈 정리 ✅
### U1 — Realtime TIMED_OUT 자동 재구독 (CloudSyncService.ts)

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Automatische Erkennung",
"settings.ollamaServer": "Ollama-Server",
"settings.ollamaUrl": "Ollama-Server-URL",
"settings.ollamaHint": "D3RO Voice verbindet sich automatisch, wenn Ollama läuft. Lade Modelle direkt über Ollama herunter (z. B.: ollama pull qwen3:4b).",
"settings.ollamaHint": "D3RO Voice verbindet sich automatisch, wenn Ollama läuft. Lade Modelle direkt über Ollama herunter (z. B.: ollama pull gemma4:e4b).",
"settings.postProcess": "Sprachnachbearbeitung",
"settings.defaultAction": "Standard-Nachbearbeitungsaktion",
"settings.action.none": "Keine (Originaltext unverändert)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama ist ein kostenloses Tool zum lokalen Ausführen von LLMs.",
"ollama.step2.title": "SCHRITT 2 — Modell herunterladen",
"ollama.step2.desc": "Führe den folgenden Befehl im Terminal aus, um das empfohlene Modell herunterzuladen:",
"ollama.step2.alt": "Oder ein größeres Modell: ollama pull qwen3:8b (genauer, langsamer)",
"ollama.step2.alt": "Oder ein größeres Modell: ollama pull gemma4:26b (genauer, langsamer)",
"ollama.step3.title": "SCHRITT 3 — Automatische Verbindung",
"ollama.step3.desc": "D3RO-VOICE erkennt automatisch, wenn Ollama läuft. Wenn die LED in der Statusleiste von Rot auf Grün wechselt, ist alles bereit!",
"service.sttEngine": "STT-ENGINE",

View file

@ -122,7 +122,7 @@
"settings.sttLang.auto": "Auto-detect",
"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.ollamaHint": "Connects automatically when Ollama is running. Pull models directly in Ollama (e.g. ollama pull gemma4:e4b).",
"settings.llmModel": "LLM Model",
"settings.postProcess": "Voice Post-Processing",
"settings.defaultAction": "Default Post-Processing Command",
@ -187,7 +187,7 @@
"ollama.step1.desc": "Ollama is a free tool for running LLMs locally.",
"ollama.step2.title": "STEP 2 — Download a Model",
"ollama.step2.desc": "Pull a model from your terminal. Recommended:",
"ollama.step2.alt": "Or a larger model: ollama pull qwen3:8b (more accurate, slower)",
"ollama.step2.alt": "Or a larger model: ollama pull gemma4:26b (more accurate, slower)",
"ollama.step3.title": "STEP 3 — Auto-Connect",
"ollama.step3.desc": "Once Ollama is running, D3RO-VOICE will detect it automatically. When the status bar LED turns from red to green, you're ready!",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Detección automática",
"settings.ollamaServer": "Servidor Ollama",
"settings.ollamaUrl": "URL del servidor Ollama",
"settings.ollamaHint": "D3RO Voice se conecta automáticamente cuando Ollama está en ejecución. Descarga modelos directamente desde Ollama (ej: ollama pull qwen3:4b).",
"settings.ollamaHint": "D3RO Voice se conecta automáticamente cuando Ollama está en ejecución. Descarga modelos directamente desde Ollama (ej: ollama pull gemma4:e4b).",
"settings.postProcess": "Postprocesado de voz",
"settings.defaultAction": "Acción de postprocesado predeterminada",
"settings.action.none": "Ninguna (texto original sin cambios)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama es una herramienta gratuita para ejecutar LLMs de forma local.",
"ollama.step2.title": "PASO 2 — Descargar un modelo",
"ollama.step2.desc": "Ejecuta el siguiente comando en la terminal para descargar el modelo recomendado:",
"ollama.step2.alt": "O un modelo más grande: ollama pull qwen3:8b (más preciso, más lento)",
"ollama.step2.alt": "O un modelo más grande: ollama pull gemma4:26b (más preciso, más lento)",
"ollama.step3.title": "PASO 3 — Conexión automática",
"ollama.step3.desc": "D3RO-VOICE detecta automáticamente cuando Ollama está en ejecución. Cuando el LED de la barra de estado pase de rojo a verde, ¡estará listo!",
"service.sttEngine": "MOTOR STT",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Détection automatique",
"settings.ollamaServer": "Serveur Ollama",
"settings.ollamaUrl": "URL du serveur Ollama",
"settings.ollamaHint": "D3RO Voice se connecte automatiquement quand Ollama est en cours d'exécution. Téléchargez les modèles directement depuis Ollama (ex : ollama pull qwen3:4b).",
"settings.ollamaHint": "D3RO Voice se connecte automatiquement quand Ollama est en cours d'exécution. Téléchargez les modèles directement depuis Ollama (ex : ollama pull gemma4:e4b).",
"settings.postProcess": "Post-traitement vocal",
"settings.defaultAction": "Action de post-traitement par défaut",
"settings.action.none": "Aucune (texte original inchangé)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama est un outil gratuit pour exécuter des LLM en local.",
"ollama.step2.title": "ÉTAPE 2 — Télécharger un modèle",
"ollama.step2.desc": "Exécutez la commande suivante dans le terminal pour télécharger le modèle recommandé :",
"ollama.step2.alt": "Ou un modèle plus grand : ollama pull qwen3:8b (plus précis, plus lent)",
"ollama.step2.alt": "Ou un modèle plus grand : ollama pull gemma4:26b (plus précis, plus lent)",
"ollama.step3.title": "ÉTAPE 3 — Connexion automatique",
"ollama.step3.desc": "D3RO-VOICE détecte automatiquement quand Ollama est en cours d'exécution. Quand la LED de la barre d'état passe du rouge au vert, c'est prêt !",
"service.sttEngine": "MOTEUR STT",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "自動検出",
"settings.ollamaServer": "Ollamaサーバー",
"settings.ollamaUrl": "OllamaサーバーURL",
"settings.ollamaHint": "Ollamaが起動していれば自動的に接続されます。モデルはOllamaから直接pullしてください例: ollama pull qwen3:4b。",
"settings.ollamaHint": "Ollamaが起動していれば自動的に接続されます。モデルはOllamaから直接pullしてください例: ollama pull gemma4:e4b。",
"settings.postProcess": "音声後処理",
"settings.defaultAction": "デフォルト後処理コマンド",
"settings.action.none": "なし (元のテキストをそのまま)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "OllamaはローカルでLLMを実行するための無料ツールです。",
"ollama.step2.title": "STEP 2 — モデルのダウンロード",
"ollama.step2.desc": "ターミナルで希望のモデルをpullしてください。日本語におすすめ:",
"ollama.step2.alt": "または大きいモデル: ollama pull qwen3:8b (より正確、より遅い)",
"ollama.step2.alt": "または大きいモデル: ollama pull gemma4:26b (より正確、より遅い)",
"ollama.step3.title": "STEP 3 — 自動接続",
"ollama.step3.desc": "Ollamaが起動するとD3RO-VOICEが自動的に検出します。下部ステータスバーのLEDが赤から緑に変われば準備完了",
"service.sttEngine": "STT ENGINE",

View file

@ -123,7 +123,7 @@
"settings.sttLang.auto": "자동 감지",
"settings.ollamaServer": "Ollama 서버",
"settings.ollamaUrl": "Ollama 서버 URL",
"settings.ollamaHint": "Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull qwen3:4b).",
"settings.ollamaHint": "Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull gemma4:e4b).",
"settings.llmModel": "LLM 모델",
"settings.postProcess": "음성 후처리",
"settings.defaultAction": "기본 후처리 명령어",
@ -188,7 +188,7 @@
"ollama.step1.desc": "Ollama는 로컬에서 LLM을 실행하는 무료 도구입니다.",
"ollama.step2.title": "STEP 2 — 모델 다운로드",
"ollama.step2.desc": "터미널에서 원하는 모델을 pull하세요. 한국어에 추천:",
"ollama.step2.alt": "또는 더 큰 모델: ollama pull qwen3:8b (더 정확, 더 느림)",
"ollama.step2.alt": "또는 더 큰 모델: ollama pull gemma4:26b (더 정확, 더 느림)",
"ollama.step3.title": "STEP 3 — 자동 연결",
"ollama.step3.desc": "Ollama가 실행되면 D3RO-VOICE가 자동으로 감지합니다. 하단 상태 바의 LED가 빨간색에서 초록색으로 바뀌면 준비 완료!",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Detecção automática",
"settings.ollamaServer": "Servidor Ollama",
"settings.ollamaUrl": "URL do servidor Ollama",
"settings.ollamaHint": "D3RO Voice conecta-se automaticamente quando o Ollama está em execução. Baixe modelos diretamente pelo Ollama (ex: ollama pull qwen3:4b).",
"settings.ollamaHint": "D3RO Voice conecta-se automaticamente quando o Ollama está em execução. Baixe modelos diretamente pelo Ollama (ex: ollama pull gemma4:e4b).",
"settings.postProcess": "Pós-processamento de voz",
"settings.defaultAction": "Ação de pós-processamento padrão",
"settings.action.none": "Nenhuma (texto original sem alterações)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "O Ollama é uma ferramenta gratuita para executar LLMs localmente.",
"ollama.step2.title": "PASSO 2 — Baixar um modelo",
"ollama.step2.desc": "Execute o seguinte comando no terminal para baixar o modelo recomendado:",
"ollama.step2.alt": "Ou um modelo maior: ollama pull qwen3:8b (mais preciso, mais lento)",
"ollama.step2.alt": "Ou um modelo maior: ollama pull gemma4:26b (mais preciso, mais lento)",
"ollama.step3.title": "PASSO 3 — Conexão automática",
"ollama.step3.desc": "D3RO-VOICE detecta automaticamente quando o Ollama está em execução. Quando o LED da barra de status mudar de vermelho para verde, está pronto!",
"service.sttEngine": "MOTOR STT",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Автоопределение",
"settings.ollamaServer": "Сервер Ollama",
"settings.ollamaUrl": "URL сервера Ollama",
"settings.ollamaHint": "Если Ollama запущена, подключение произойдёт автоматически. Загружайте модели напрямую через Ollama (например: ollama pull qwen3:4b).",
"settings.ollamaHint": "Если Ollama запущена, подключение произойдёт автоматически. Загружайте модели напрямую через Ollama (например: ollama pull gemma4:e4b).",
"settings.postProcess": "Постобработка речи",
"settings.defaultAction": "Команда постобработки по умолчанию",
"settings.action.none": "Нет (оригинальный текст)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama — бесплатный инструмент для локального запуска LLM.",
"ollama.step2.title": "ШАГ 2 — Загрузка модели",
"ollama.step2.desc": "Загрузите нужную модель через терминал. Рекомендуется:",
"ollama.step2.alt": "Или более крупная модель: ollama pull qwen3:8b (точнее, медленнее)",
"ollama.step2.alt": "Или более крупная модель: ollama pull gemma4:26b (точнее, медленнее)",
"ollama.step3.title": "ШАГ 3 — Автоподключение",
"ollama.step3.desc": "При запуске Ollama D3RO-VOICE обнаружит её автоматически. Когда индикатор LED на нижней панели сменится с красного на зелёный — готово!",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "ตรวจจับอัตโนมัติ",
"settings.ollamaServer": "เซิร์ฟเวอร์ Ollama",
"settings.ollamaUrl": "URL เซิร์ฟเวอร์ Ollama",
"settings.ollamaHint": "หาก Ollama กำลังทำงาน จะเชื่อมต่ออัตโนมัติ ดาวน์โหลดโมเดลโดยตรงจาก Ollama (เช่น: ollama pull qwen3:4b)",
"settings.ollamaHint": "หาก Ollama กำลังทำงาน จะเชื่อมต่ออัตโนมัติ ดาวน์โหลดโมเดลโดยตรงจาก Ollama (เช่น: ollama pull gemma4:e4b)",
"settings.postProcess": "การประมวลผลเสียงหลังการบันทึก",
"settings.defaultAction": "คำสั่งประมวลผลเริ่มต้น",
"settings.action.none": "ไม่มี (ข้อความต้นฉบับ)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama เป็นเครื่องมือฟรีสำหรับรัน LLM ในเครื่อง",
"ollama.step2.title": "ขั้นตอนที่ 2 — ดาวน์โหลดโมเดล",
"ollama.step2.desc": "ดาวน์โหลดโมเดลที่ต้องการผ่านเทอร์มินัล แนะนำ:",
"ollama.step2.alt": "หรือโมเดลที่ใหญ่กว่า: ollama pull qwen3:8b (แม่นยำกว่า ช้ากว่า)",
"ollama.step2.alt": "หรือโมเดลที่ใหญ่กว่า: ollama pull gemma4:26b (แม่นยำกว่า ช้ากว่า)",
"ollama.step3.title": "ขั้นตอนที่ 3 — เชื่อมต่ออัตโนมัติ",
"ollama.step3.desc": "เมื่อ Ollama ทำงาน D3RO-VOICE จะตรวจพบโดยอัตโนมัติ เมื่อไฟ LED บนแถบสถานะเปลี่ยนจากสีแดงเป็นสีเขียว — พร้อมใช้งาน!",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "Tự động phát hiện",
"settings.ollamaServer": "Máy chủ Ollama",
"settings.ollamaUrl": "URL máy chủ Ollama",
"settings.ollamaHint": "Nếu Ollama đang chạy, kết nối sẽ tự động. Tải mô hình trực tiếp từ Ollama (ví dụ: ollama pull qwen3:4b).",
"settings.ollamaHint": "Nếu Ollama đang chạy, kết nối sẽ tự động. Tải mô hình trực tiếp từ Ollama (ví dụ: ollama pull gemma4:e4b).",
"settings.postProcess": "Hậu xử lý giọng nói",
"settings.defaultAction": "Lệnh hậu xử lý mặc định",
"settings.action.none": "Không có (văn bản gốc)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama là công cụ miễn phí để chạy LLM cục bộ.",
"ollama.step2.title": "BƯỚC 2 — Tải mô hình",
"ollama.step2.desc": "Tải mô hình bạn muốn qua terminal. Khuyến nghị:",
"ollama.step2.alt": "Hoặc mô hình lớn hơn: ollama pull qwen3:8b (chính xác hơn, chậm hơn)",
"ollama.step2.alt": "Hoặc mô hình lớn hơn: ollama pull gemma4:26b (chính xác hơn, chậm hơn)",
"ollama.step3.title": "BƯỚC 3 — Tự động kết nối",
"ollama.step3.desc": "Khi Ollama chạy, D3RO-VOICE sẽ tự động phát hiện. Khi đèn LED trên thanh trạng thái chuyển từ đỏ sang xanh — đã sẵn sàng!",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "自動偵測",
"settings.ollamaServer": "Ollama伺服器",
"settings.ollamaUrl": "Ollama伺服器URL",
"settings.ollamaHint": "Ollama執行時將自動連線。請直接在Ollama中pull模型例如ollama pull qwen3:4b。",
"settings.ollamaHint": "Ollama執行時將自動連線。請直接在Ollama中pull模型例如ollama pull gemma4:e4b。",
"settings.postProcess": "語音後處理",
"settings.defaultAction": "預設後處理指令",
"settings.action.none": "無(保留原始文字)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama是一款在本地端執行LLM的免費工具。",
"ollama.step2.title": "STEP 2 — 下載模型",
"ollama.step2.desc": "在終端機中pull所需模型。推薦繁體中文模型",
"ollama.step2.alt": "或更大的模型ollama pull qwen3:8b更精準速度較慢",
"ollama.step2.alt": "或更大的模型ollama pull gemma4:26b更精準速度較慢",
"ollama.step3.title": "STEP 3 — 自動連線",
"ollama.step3.desc": "Ollama啟動後D3RO-VOICE將自動偵測。底部狀態列的LED從紅色變為綠色即表示準備就緒",
"service.sttEngine": "STT ENGINE",

View file

@ -116,7 +116,7 @@
"settings.sttLang.auto": "自动检测",
"settings.ollamaServer": "Ollama服务器",
"settings.ollamaUrl": "Ollama服务器URL",
"settings.ollamaHint": "Ollama运行时将自动连接。请直接在Ollama中pull模型例如ollama pull qwen3:4b。",
"settings.ollamaHint": "Ollama运行时将自动连接。请直接在Ollama中pull模型例如ollama pull gemma4:e4b。",
"settings.postProcess": "语音后处理",
"settings.defaultAction": "默认后处理命令",
"settings.action.none": "无(保留原始文本)",
@ -173,7 +173,7 @@
"ollama.step1.desc": "Ollama是一款在本地运行LLM的免费工具。",
"ollama.step2.title": "STEP 2 — 下载模型",
"ollama.step2.desc": "在终端中pull所需模型。推荐中文模型",
"ollama.step2.alt": "或更大的模型ollama pull qwen3:8b更精准更慢",
"ollama.step2.alt": "或更大的模型ollama pull gemma4:26b更精准更慢",
"ollama.step3.title": "STEP 3 — 自动连接",
"ollama.step3.desc": "Ollama启动后D3RO-VOICE将自动检测。底部状态栏的LED从红色变为绿色即表示准备就绪",
"service.sttEngine": "STT ENGINE",

View file

@ -47,7 +47,7 @@ export const de: Translations = {
steps: [
{ label: 'EINGABE', title: 'Hotkey drucken', description: 'Right Alt (oder Ihre benutzerdefinierte Taste) gedruckt halten zum Aufnehmen. Doppeltippen fur KI-Modus. Umschalten fur Freisprechen.', detail: 'Halten / Umschalten / Doppeldruck' },
{ label: 'TRANSKRIBIEREN', title: 'Whisper STT', description: 'Lokale faster-whisper Engine konvertiert 16kHz PCM-Audio in Echtzeit zu Text. GPU-Beschleunigung unterstutzt.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'VERARBEITEN', title: 'Ollama LLM', description: 'Lokales LLM korrigiert Grammatik, passt den Ton an, ubersetzt oder fasst zusammen. Benutzerdefinierte Anweisungen unterstutzt.', detail: 'qwen3 / llama3 / gemma3 / benutzerdefiniert' },
{ label: 'VERARBEITEN', title: 'Ollama LLM', description: 'Lokales LLM korrigiert Grammatik, passt den Ton an, ubersetzt oder fasst zusammen. Benutzerdefinierte Anweisungen unterstutzt.', detail: 'gemma4 / llama3.2 / phi4 / benutzerdefiniert' },
{ label: 'AUSGABE', title: 'Auto-Einfugen', description: 'Korrigierter Text wird an der Cursorposition in jeder App eingefugt. Notepad, VS Code, Chrome, Slack, uberall.', detail: 'Zwischenablage + Ctrl+V / 100ms Latenz' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const en: Translations = {
steps: [
{ label: 'INPUT', title: 'Press Hotkey', description: 'Hold Right Alt (or your custom key) to start recording. Double-tap for AI mode. Toggle for hands-free.', detail: 'Hold-to-talk / Toggle / Double-press' },
{ label: 'TRANSCRIBE', title: 'Whisper STT', description: 'Local faster-whisper engine converts 16kHz PCM audio to text in real-time. GPU acceleration supported.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'PROCESS', title: 'Ollama LLM', description: 'Local LLM polishes grammar, adjusts tone, translates, or summarizes. Custom instructions supported.', detail: 'qwen3 / llama3 / gemma3 / custom' },
{ label: 'PROCESS', title: 'Ollama LLM', description: 'Local LLM polishes grammar, adjusts tone, translates, or summarizes. Custom instructions supported.', detail: 'gemma4 / llama3.2 / phi4 / custom' },
{ label: 'OUTPUT', title: 'Auto Insert', description: 'Polished text is pasted at your cursor position in any app. Notepad, VS Code, Chrome, Slack, anywhere.', detail: 'Clipboard + Ctrl+V / 100ms latency' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const es: Translations = {
steps: [
{ label: 'ENTRADA', title: 'Pulsa la tecla', description: 'Manten Right Alt (o tu tecla personalizada) para grabar. Doble toque para modo IA. Alternar para manos libres.', detail: 'Mantener / Alternar / Doble pulsacion' },
{ label: 'TRANSCRIBIR', title: 'Whisper STT', description: 'El motor local faster-whisper convierte audio PCM 16kHz a texto en tiempo real. Compatible con aceleracion GPU.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'PROCESAR', title: 'Ollama LLM', description: 'El LLM local pule la gramatica, ajusta el tono, traduce o resume. Instrucciones personalizadas soportadas.', detail: 'qwen3 / llama3 / gemma3 / personalizado' },
{ label: 'PROCESAR', title: 'Ollama LLM', description: 'El LLM local pule la gramatica, ajusta el tono, traduce o resume. Instrucciones personalizadas soportadas.', detail: 'gemma4 / llama3.2 / phi4 / personalizado' },
{ label: 'SALIDA', title: 'Insercion automatica', description: 'El texto pulido se pega en la posicion del cursor en cualquier app. Bloc de notas, VS Code, Chrome, Slack, donde sea.', detail: 'Portapapeles + Ctrl+V / 100ms latencia' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const fr: Translations = {
steps: [
{ label: 'ENTREE', title: 'Appuyez sur la touche', description: 'Maintenez Right Alt (ou votre touche personnalisee) pour enregistrer. Double appui pour le mode IA. Basculez pour mains libres.', detail: 'Maintenir / Basculer / Double appui' },
{ label: 'TRANSCRIRE', title: 'Whisper STT', description: 'Le moteur local faster-whisper convertit l\'audio PCM 16kHz en texte en temps reel. Acceleration GPU supportee.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'TRAITER', title: 'Ollama LLM', description: 'Le LLM local corrige la grammaire, ajuste le ton, traduit ou resume. Instructions personnalisees supportees.', detail: 'qwen3 / llama3 / gemma3 / personnalise' },
{ label: 'TRAITER', title: 'Ollama LLM', description: 'Le LLM local corrige la grammaire, ajuste le ton, traduit ou resume. Instructions personnalisees supportees.', detail: 'gemma4 / llama3.2 / phi4 / personnalise' },
{ label: 'SORTIE', title: 'Insertion automatique', description: 'Le texte corrige est colle a la position du curseur dans n\'importe quelle app. Bloc-notes, VS Code, Chrome, Slack, partout.', detail: 'Presse-papiers + Ctrl+V / 100ms latence' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const ja: Translations = {
steps: [
{ label: '入力', title: 'ホットキー押下', description: 'Right Altまたはカスタムキーを長押しで録音開始。ダブルタップでAIモード。トグルでハンズフリー。', detail: '長押し / トグル / ダブルプレス' },
{ label: '文字起こし', title: 'Whisper STT', description: 'ローカルfaster-whisperエンジンが16kHz PCMオーディオをリアルタイムでテキストに変換。GPU加速対応。', detail: 'faster-whisper / base ~ large-v3' },
{ label: '処理', title: 'Ollama LLM', description: 'ローカルLLMが文法を校正し、トーンを調整し、翻訳または要約。カスタム指示に対応。', detail: 'qwen3 / llama3 / gemma3 / カスタム' },
{ label: '処理', title: 'Ollama LLM', description: 'ローカルLLMが文法を校正し、トーンを調整し、翻訳または要約。カスタム指示に対応。', detail: 'gemma4 / llama3.2 / phi4 / カスタム' },
{ label: '出力', title: '自動挿入', description: '校正されたテキストが任意のアプリのカーソル位置に自動貼り付け。メモ帳、VS Code、Chrome、Slackなど。', detail: 'クリップボード + Ctrl+V / 100msレイテンシ' },
],
panelTitle: 'D3RO Voice パイプライン',

View file

@ -47,7 +47,7 @@ export const ko: Translations = {
steps: [
{ label: '입력', title: '핫키 누르기', description: 'Right Alt(또는 설정한 키)를 길게 눌러 녹음을 시작. 더블탭으로 AI 모드. 토글로 핸즈프리.', detail: '길게 누르기 / 토글 / 더블프레스' },
{ label: '전사', title: 'Whisper STT', description: '로컬 faster-whisper 엔진이 16kHz PCM 오디오를 실시간으로 텍스트로 변환. GPU 가속 지원.', detail: 'faster-whisper / base ~ large-v3' },
{ label: '처리', title: 'Ollama LLM', description: '로컬 LLM이 문법을 다듬고, 톤을 조절하고, 번역하거나 요약합니다. 커스텀 명령어 지원.', detail: 'qwen3 / llama3 / gemma3 / 커스텀' },
{ label: '처리', title: 'Ollama LLM', description: '로컬 LLM이 문법을 다듬고, 톤을 조절하고, 번역하거나 요약합니다. 커스텀 명령어 지원.', detail: 'gemma4 / llama3.2 / phi4 / 커스텀' },
{ label: '출력', title: '자동 삽입', description: '다듬어진 텍스트가 어떤 앱에서든 커서 위치에 자동 붙여넣기. 메모장, VS Code, Chrome, Slack, 어디서나.', detail: '클립보드 + Ctrl+V / 100ms 지연' },
],
panelTitle: 'D3RO Voice 파이프라인',

View file

@ -47,7 +47,7 @@ export const pt: Translations = {
steps: [
{ label: 'ENTRADA', title: 'Pressione a tecla', description: 'Segure Right Alt (ou sua tecla personalizada) para gravar. Toque duplo para modo IA. Alternar para viva-voz.', detail: 'Segurar / Alternar / Toque duplo' },
{ label: 'TRANSCREVER', title: 'Whisper STT', description: 'Motor local faster-whisper converte audio PCM 16kHz em texto em tempo real. Aceleracao GPU suportada.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'PROCESSAR', title: 'Ollama LLM', description: 'LLM local corrige gramatica, ajusta tom, traduz ou resume. Instrucoes personalizadas suportadas.', detail: 'qwen3 / llama3 / gemma3 / personalizado' },
{ label: 'PROCESSAR', title: 'Ollama LLM', description: 'LLM local corrige gramatica, ajusta tom, traduz ou resume. Instrucoes personalizadas suportadas.', detail: 'gemma4 / llama3.2 / phi4 / personalizado' },
{ label: 'SAIDA', title: 'Insercao automatica', description: 'Texto polido e colado na posicao do cursor em qualquer app. Bloco de notas, VS Code, Chrome, Slack, em qualquer lugar.', detail: 'Area de transferencia + Ctrl+V / 100ms latencia' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const ru: Translations = {
steps: [
{ label: 'ВВОД', title: 'Нажмите горячую клавишу', description: 'Удерживайте Right Alt (или вашу клавишу) для записи. Двойное нажатие для ИИ-режима. Переключение для свободных рук.', detail: 'Удержание / Переключение / Двойное нажатие' },
{ label: 'ТРАНСКРИПЦИЯ', title: 'Whisper STT', description: 'Локальный движок faster-whisper преобразует 16кГц PCM аудио в текст в реальном времени. Поддержка GPU-ускорения.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'ОБРАБОТКА', title: 'Ollama LLM', description: 'Локальная LLM корректирует грамматику, настраивает тон, переводит или обобщает. Пользовательские инструкции поддерживаются.', detail: 'qwen3 / llama3 / gemma3 / пользовательский' },
{ label: 'ОБРАБОТКА', title: 'Ollama LLM', description: 'Локальная LLM корректирует грамматику, настраивает тон, переводит или обобщает. Пользовательские инструкции поддерживаются.', detail: 'gemma4 / llama3.2 / phi4 / пользовательский' },
{ label: 'ВЫВОД', title: 'Автовставка', description: 'Отредактированный текст вставляется в позицию курсора в любом приложении. Блокнот, VS Code, Chrome, Slack, где угодно.', detail: 'Буфер обмена + Ctrl+V / 100мс задержка' },
],
panelTitle: 'D3RO Voice Конвейер',

View file

@ -47,7 +47,7 @@ export const vi: Translations = {
steps: [
{ label: 'DAU VAO', title: 'Nhan phim nong', description: 'Giu Right Alt (hoac phim tuy chinh) de ghi am. Nhan doi cho che do AI. Chuyen doi cho che do ranh tay.', detail: 'Giu / Chuyen doi / Nhan doi' },
{ label: 'PHIEN AM', title: 'Whisper STT', description: 'Bo may faster-whisper cuc bo chuyen doi am thanh PCM 16kHz thanh van ban thoi gian thuc. Ho tro tang toc GPU.', detail: 'faster-whisper / base ~ large-v3' },
{ label: 'XU LY', title: 'Ollama LLM', description: 'LLM cuc bo sua ngu phap, dieu chinh giong dieu, dich hoac tom tat. Ho tro chi dan tuy chinh.', detail: 'qwen3 / llama3 / gemma3 / tuy chinh' },
{ label: 'XU LY', title: 'Ollama LLM', description: 'LLM cuc bo sua ngu phap, dieu chinh giong dieu, dich hoac tom tat. Ho tro chi dan tuy chinh.', detail: 'gemma4 / llama3.2 / phi4 / tuy chinh' },
{ label: 'DAU RA', title: 'Tu dong chen', description: 'Van ban da tinh chinh duoc dan vao vi tri con tro trong bat ky ung dung nao. Notepad, VS Code, Chrome, Slack, bat cu dau.', detail: 'Clipboard + Ctrl+V / 100ms do tre' },
],
panelTitle: 'D3RO Voice Pipeline',

View file

@ -47,7 +47,7 @@ export const zh: Translations = {
steps: [
{ label: '输入', title: '按下快捷键', description: '长按 Right Alt或自定义按键开始录音。双击进入AI模式。切换免提模式。', detail: '长按 / 切换 / 双击' },
{ label: '转录', title: 'Whisper STT', description: '本地 faster-whisper 引擎将 16kHz PCM 音频实时转换为文本。支持GPU加速。', detail: 'faster-whisper / base ~ large-v3' },
{ label: '处理', title: 'Ollama LLM', description: '本地 LLM 润色语法、调整语气、翻译或摘要。支持自定义指令。', detail: 'qwen3 / llama3 / gemma3 / 自定义' },
{ label: '处理', title: 'Ollama LLM', description: '本地 LLM 润色语法、调整语气、翻译或摘要。支持自定义指令。', detail: 'gemma4 / llama3.2 / phi4 / 自定义' },
{ label: '输出', title: '自动插入', description: '润色后的文本自动粘贴到任何应用的光标位置。记事本、VS Code、Chrome、Slack任何地方。', detail: '剪贴板 + Ctrl+V / 100ms延迟' },
],
panelTitle: 'D3RO Voice 流程',

View file

@ -44,7 +44,7 @@ export function HowItWorks() {
<div className="flex items-center gap-2">
<Led color="green" size="sm" />
<span className="text-emerald-400/70">{t.pipeline.llmConnected}</span>
<span className="text-neutral-600">qwen3:4b @ localhost:11434</span>
<span className="text-neutral-600">gemma4:e4b @ localhost:11434</span>
</div>
<div className="h-px bg-white/[0.04] my-3" />
<div className="flex items-start gap-2">