Ariver
2026-06-05 793682b82812d3e89adcc354dd8b844af094ce13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//go:build darwin
 
package engine
 
import (
    "path/filepath"
    "testing"
 
    "voicesnap/internal/model"
)
 
func TestOfflineConfigForParakeetUsesNemoTransducer(t *testing.T) {
    root := t.TempDir()
    files := map[string]string{
        "encoder": filepath.Join(root, "encoder.int8.onnx"),
        "decoder": filepath.Join(root, "decoder.int8.onnx"),
        "joiner":  filepath.Join(root, "joiner.int8.onnx"),
        "tokens":  filepath.Join(root, "tokens.txt"),
    }
    resolved := model.ResolvedModel{
        ModelID:     model.ParakeetModelID,
        BackendKind: model.BackendNemoTransducer,
        Profile: model.ModelProfile{
            DisplayName:   "Parakeet English",
            BackendKind:   model.BackendNemoTransducer,
            ProviderOrder: []string{"cpu"},
            NumThreads:    4,
        },
        Files: files,
    }
 
    config, err := offlineConfigForResolvedModel(resolved, "cpu")
    if err != nil {
        t.Fatal(err)
    }
    if config.ModelConfig.Transducer.Encoder != files["encoder"] {
        t.Fatalf("encoder = %q, want %q", config.ModelConfig.Transducer.Encoder, files["encoder"])
    }
    if config.ModelConfig.Transducer.Decoder != files["decoder"] {
        t.Fatalf("decoder = %q, want %q", config.ModelConfig.Transducer.Decoder, files["decoder"])
    }
    if config.ModelConfig.Transducer.Joiner != files["joiner"] {
        t.Fatalf("joiner = %q, want %q", config.ModelConfig.Transducer.Joiner, files["joiner"])
    }
    if config.ModelConfig.Tokens != files["tokens"] {
        t.Fatalf("tokens = %q, want %q", config.ModelConfig.Tokens, files["tokens"])
    }
    if config.ModelConfig.ModelType != model.BackendNemoTransducer {
        t.Fatalf("model type = %q, want %q", config.ModelConfig.ModelType, model.BackendNemoTransducer)
    }
}
 
func TestOfflineConfigForQwen3ASRUsesQwen3Config(t *testing.T) {
    root := t.TempDir()
    files := map[string]string{
        "conv_frontend": filepath.Join(root, "conv_frontend.onnx"),
        "encoder":       filepath.Join(root, "encoder.int8.onnx"),
        "decoder":       filepath.Join(root, "decoder.int8.onnx"),
        "tokenizer":     filepath.Join(root, "tokenizer"),
    }
    resolved := model.ResolvedModel{
        ModelID:     model.Qwen3ASRModelID,
        BackendKind: model.BackendQwen3ASR,
        Profile: model.ModelProfile{
            DisplayName:   "Qwen3-ASR",
            BackendKind:   model.BackendQwen3ASR,
            ProviderOrder: []string{"cpu"},
            NumThreads:    4,
        },
        Files: files,
    }
 
    config, err := offlineConfigForResolvedModel(resolved, "cpu")
    if err != nil {
        t.Fatal(err)
    }
    if config.ModelConfig.Qwen3ASR.ConvFrontend != files["conv_frontend"] {
        t.Fatalf("conv frontend = %q, want %q", config.ModelConfig.Qwen3ASR.ConvFrontend, files["conv_frontend"])
    }
    if config.ModelConfig.Qwen3ASR.Encoder != files["encoder"] {
        t.Fatalf("encoder = %q, want %q", config.ModelConfig.Qwen3ASR.Encoder, files["encoder"])
    }
    if config.ModelConfig.Qwen3ASR.Decoder != files["decoder"] {
        t.Fatalf("decoder = %q, want %q", config.ModelConfig.Qwen3ASR.Decoder, files["decoder"])
    }
    if config.ModelConfig.Qwen3ASR.Tokenizer != files["tokenizer"] {
        t.Fatalf("tokenizer = %q, want %q", config.ModelConfig.Qwen3ASR.Tokenizer, files["tokenizer"])
    }
    if config.ModelConfig.Qwen3ASR.MaxTotalLen != 1024 {
        t.Fatalf("max total len = %d, want 1024", config.ModelConfig.Qwen3ASR.MaxTotalLen)
    }
    if config.ModelConfig.Qwen3ASR.MaxNewTokens != 256 {
        t.Fatalf("max new tokens = %d, want 256", config.ModelConfig.Qwen3ASR.MaxNewTokens)
    }
    if config.ModelConfig.Tokens != "" {
        t.Fatalf("tokens = %q, want empty for qwen3-asr", config.ModelConfig.Tokens)
    }
}