Ariver
2026-06-03 5de2a0495c233e6f12ae1ebb6e71cb6c73fbbc72
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, model.BackendQwen3ASR:
      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)
}