| | |
| | | } |
| | | } |
| | | |
| | | func TestOfflineConfigForQwen3ASRUsesQwen3Config(t *testing.T) { |
| | | func TestOfflineConfigForZipformerUsesPlainTransducer(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"), |
| | | "encoder": filepath.Join(root, "encoder-epoch-99-avg-1.int8.onnx"), |
| | | "decoder": filepath.Join(root, "decoder-epoch-99-avg-1.onnx"), |
| | | "joiner": filepath.Join(root, "joiner-epoch-99-avg-1.int8.onnx"), |
| | | "tokens": filepath.Join(root, "tokens.txt"), |
| | | } |
| | | resolved := model.ResolvedModel{ |
| | | ModelID: model.Qwen3ASRModelID, |
| | | BackendKind: model.BackendQwen3ASR, |
| | | ModelID: model.JapaneseModelID, |
| | | BackendKind: model.BackendTransducer, |
| | | Profile: model.ModelProfile{ |
| | | DisplayName: "Qwen3-ASR", |
| | | BackendKind: model.BackendQwen3ASR, |
| | | DisplayName: "Zipformer Japanese", |
| | | BackendKind: model.BackendTransducer, |
| | | ProviderOrder: []string{"cpu"}, |
| | | NumThreads: 4, |
| | | NumThreads: 1, |
| | | }, |
| | | Files: files, |
| | | } |
| | |
| | | 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.Transducer.Encoder != files["encoder"] { |
| | | t.Fatalf("encoder = %q, want %q", config.ModelConfig.Transducer.Encoder, files["encoder"]) |
| | | } |
| | | if config.ModelConfig.Qwen3ASR.Encoder != files["encoder"] { |
| | | t.Fatalf("encoder = %q, want %q", config.ModelConfig.Qwen3ASR.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.Qwen3ASR.Decoder != files["decoder"] { |
| | | t.Fatalf("decoder = %q, want %q", config.ModelConfig.Qwen3ASR.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.Qwen3ASR.Tokenizer != files["tokenizer"] { |
| | | t.Fatalf("tokenizer = %q, want %q", config.ModelConfig.Qwen3ASR.Tokenizer, files["tokenizer"]) |
| | | if config.ModelConfig.Tokens != files["tokens"] { |
| | | t.Fatalf("tokens = %q, want %q", config.ModelConfig.Tokens, files["tokens"]) |
| | | } |
| | | 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) |
| | | if config.ModelConfig.ModelType != "" { |
| | | t.Fatalf("model type = %q, want empty for plain transducer", config.ModelConfig.ModelType) |
| | | } |
| | | } |
| | | |