From 3fbceec8de833416bf1ae049f959f222c3f1a4a0 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 02 Jun 2026 14:05:59 +0800
Subject: [PATCH] Prepare Round 1 model profile QA baseline

---
 privatevoice.src/internal/engine/engine_darwin.go |   54 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/VoiceSnapGo/internal/engine/engine_darwin.go b/privatevoice.src/internal/engine/engine_darwin.go
similarity index 61%
rename from VoiceSnapGo/internal/engine/engine_darwin.go
rename to privatevoice.src/internal/engine/engine_darwin.go
index 52af4cb..7a7f9c1 100755
--- a/VoiceSnapGo/internal/engine/engine_darwin.go
+++ b/privatevoice.src/internal/engine/engine_darwin.go
@@ -5,9 +5,10 @@
 import (
 	"fmt"
 	"voicesnap/internal/logger"
+	"voicesnap/internal/model"
 
-	sherpa "github.com/k2-fsa/sherpa-onnx-go/sherpa_onnx"
 	_ "github.com/k2-fsa/sherpa-onnx-go-macos"
+	sherpa "github.com/k2-fsa/sherpa-onnx-go/sherpa_onnx"
 )
 
 type sherpaEngine struct {
@@ -15,27 +16,17 @@
 	hwInfo     string
 }
 
-func newPlatformEngine() (Engine, error) {
-	modelPath := ModelPath()
-	tokensPath := TokensPath()
-
-	// Try CoreML first, then CPU fallback
-	providers := []struct {
-		name     string
-		provider string
-	}{
-		{"CoreML (Apple Neural Engine)", "coreml"},
-		{"CPU", "cpu"},
-	}
+func newPlatformEngine(resolved model.ResolvedModel) (Engine, error) {
+	providers := darwinProviders(resolved.ProviderOrder)
 
 	for _, p := range providers {
 		config := sherpa.OfflineRecognizerConfig{}
 		config.FeatConfig.SampleRate = 16000
 		config.FeatConfig.FeatureDim = 80
-		config.ModelConfig.SenseVoice.Model = modelPath
+		config.ModelConfig.SenseVoice.Model = resolved.Files["model"]
 		config.ModelConfig.SenseVoice.UseInverseTextNormalization = 1
-		config.ModelConfig.Tokens = tokensPath
-		config.ModelConfig.NumThreads = 4
+		config.ModelConfig.Tokens = resolved.Files["tokens"]
+		config.ModelConfig.NumThreads = resolved.Profile.NumThreads
 		config.ModelConfig.Provider = p.provider
 		config.DecodingMethod = "greedy_search"
 
@@ -54,6 +45,37 @@
 	return nil, fmt.Errorf("failed to initialize sherpa-onnx with any provider")
 }
 
+func darwinProviders(providerOrder []string) []struct {
+	name     string
+	provider string
+} {
+	names := map[string]string{
+		"coreml": "CoreML (Apple Neural Engine)",
+		"cpu":    "CPU",
+	}
+	providers := make([]struct {
+		name     string
+		provider string
+	}, 0, len(providerOrder))
+	for _, provider := range providerOrder {
+		name, ok := names[provider]
+		if !ok {
+			continue
+		}
+		providers = append(providers, struct {
+			name     string
+			provider string
+		}{name: name, provider: provider})
+	}
+	if len(providers) == 0 {
+		providers = append(providers, struct {
+			name     string
+			provider string
+		}{name: "CPU", provider: "cpu"})
+	}
+	return providers
+}
+
 func (e *sherpaEngine) Recognize(samples []float32) (string, error) {
 	stream := sherpa.NewOfflineStream(e.recognizer)
 	defer sherpa.DeleteOfflineStream(stream)

--
Gitblit v1.9.3