From ce96a0e5272d6bcdf732dd0fc1ff8a9d9c834a0c Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 15:00:58 +0800
Subject: [PATCH] Fix Round 4 model download QA issues

---
 privatevoice.src/internal/engine/engine.go |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/privatevoice.src/internal/engine/engine.go b/privatevoice.src/internal/engine/engine.go
index 8e2c23c..b529332 100755
--- a/privatevoice.src/internal/engine/engine.go
+++ b/privatevoice.src/internal/engine/engine.go
@@ -3,8 +3,10 @@
 import (
 	"fmt"
 	"voicesnap/internal/config"
+	"voicesnap/internal/language"
 	"voicesnap/internal/logger"
 	"voicesnap/internal/model"
+	"voicesnap/internal/modelselection"
 	"voicesnap/internal/paths"
 )
 
@@ -60,9 +62,10 @@
 	cfg, err := config.Load()
 	if err != nil {
 		logger.Error("Failed to load config for model selection: %v", err)
-		return NewWithModelID(model.DefaultModelID)
+		cfg = config.Default()
 	}
-	return NewWithModelID(cfg.SelectedModelID)
+	current := modelselection.Resolve(cfg, language.NewSystemDetector())
+	return NewWithModelID(current.ModelID)
 }
 
 func NewWithModelID(modelID string) (Engine, error) {
@@ -77,18 +80,28 @@
 	if !resolved.IsUsable() {
 		return nil, fmt.Errorf("model %s is not usable: %s missing=%v problems=%v", resolved.ModelID, resolved.Status, resolved.Missing, resolved.Problems)
 	}
-	if resolved.BackendKind != model.BackendSenseVoice {
+	if !isSupportedBackend(resolved.BackendKind) {
 		return nil, fmt.Errorf("unsupported backend kind: %s", resolved.BackendKind)
 	}
 
-	logger.Info("Loading model %s from %s", resolved.ModelID, resolved.RootDir)
+	logger.Info("Loading model %s backend=%s from %s", resolved.ModelID, resolved.BackendKind, resolved.RootDir)
 	return newPlatformEngine(resolved)
+}
+
+func isSupportedBackend(backend string) bool {
+	switch backend {
+	case model.BackendSenseVoice, model.BackendMoonshine, model.BackendNemoTransducer:
+		return true
+	default:
+		return false
+	}
 }
 
 func resolveCurrentModel() (model.ResolvedModel, error) {
 	cfg, err := config.Load()
 	if err != nil {
-		return model.ResolveModel(model.DefaultModelID)
+		cfg = config.Default()
 	}
-	return model.ResolveModel(model.NormalizeModelID(cfg.SelectedModelID))
+	current := modelselection.Resolve(cfg, language.NewSystemDetector())
+	return model.ResolveModel(current.ModelID)
 }

--
Gitblit v1.9.3