Skip to content

Commit 43f46c9

Browse files
committed
Fix initializing fp32 Qwen3-ASR models.
1 parent 23185f8 commit 43f46c9

2 files changed

Lines changed: 47 additions & 37 deletions

File tree

sherpa-onnx/csrc/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,6 @@ if(SHERPA_ONNX_HAS_ALSA AND SHERPA_ONNX_ENABLE_BINARY)
573573
add_executable(sherpa-onnx-vad-alsa sherpa-onnx-vad-alsa.cc alsa.cc)
574574
add_executable(sherpa-onnx-vad-alsa-offline-asr sherpa-onnx-vad-alsa-offline-asr.cc alsa.cc)
575575

576-
577576
if(SHERPA_ONNX_ENABLE_TTS)
578577
add_executable(sherpa-onnx-offline-tts-play-alsa sherpa-onnx-offline-tts-play-alsa.cc alsa-play.cc)
579578
endif()
@@ -669,8 +668,6 @@ if(SHERPA_ONNX_ENABLE_PORTAUDIO AND SHERPA_ONNX_ENABLE_BINARY)
669668
microphone.cc
670669
)
671670

672-
673-
674671
add_executable(sherpa-onnx-vad-microphone-offline-asr
675672
sherpa-onnx-vad-microphone-offline-asr.cc
676673
microphone.cc
@@ -695,8 +692,8 @@ if(SHERPA_ONNX_ENABLE_PORTAUDIO AND SHERPA_ONNX_ENABLE_BINARY)
695692
sherpa-onnx-vad-microphone
696693
sherpa-onnx-vad-microphone-simulated-streaming-asr
697694
sherpa-onnx-vad-microphone-offline-asr
698-
699695
)
696+
700697
if(SHERPA_ONNX_ENABLE_TTS)
701698
list(APPEND exes
702699
sherpa-onnx-offline-tts-play

sherpa-onnx/csrc/offline-qwen3-asr-model.cc

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "sherpa-onnx/csrc/macros.h"
3030
#include "sherpa-onnx/csrc/onnx-utils.h"
3131
#include "sherpa-onnx/csrc/session.h"
32+
#include "sherpa-onnx/csrc/text-utils.h"
3233

3334
namespace sherpa_onnx {
3435

@@ -131,33 +132,21 @@ class OfflineQwen3ASRModel::Impl {
131132
is_cpu_provider_(config.provider == "cpu" || config.provider.empty()) {
132133
const auto &c = config_.qwen3_asr;
133134

134-
{
135-
auto buf = ReadFile(c.conv_frontend);
136-
if (buf.empty()) {
137-
SHERPA_ONNX_LOGE("Failed to read qwen3_asr.conv_frontend: %s",
138-
c.conv_frontend.c_str());
139-
SHERPA_ONNX_EXIT(-1);
140-
}
141-
InitConvFrontend(buf.data(), buf.size());
142-
}
143-
{
144-
auto buf = ReadFile(c.encoder);
145-
if (buf.empty()) {
146-
SHERPA_ONNX_LOGE("Failed to read qwen3_asr.encoder: %s",
147-
c.encoder.c_str());
148-
SHERPA_ONNX_EXIT(-1);
149-
}
150-
InitEncoder(buf.data(), buf.size());
151-
}
152-
{
153-
auto buf = ReadFile(c.decoder);
154-
if (buf.empty()) {
155-
SHERPA_ONNX_LOGE("Failed to read qwen3_asr.decoder: %s",
156-
c.decoder.c_str());
157-
SHERPA_ONNX_EXIT(-1);
158-
}
159-
InitDecoder(buf.data(), buf.size());
160-
}
135+
conv_sess_ = std::make_unique<Ort::Session>(
136+
env_, SHERPA_ONNX_TO_ORT_PATH(c.conv_frontend), sess_opts_conv_);
137+
138+
InitConvFrontend(nullptr, 0);
139+
140+
encoder_sess_ = std::make_unique<Ort::Session>(
141+
env_, SHERPA_ONNX_TO_ORT_PATH(c.encoder), sess_opts_encoder_);
142+
143+
InitEncoder(nullptr, 0);
144+
145+
decoder_sess_ = std::make_unique<Ort::Session>(
146+
env_, SHERPA_ONNX_TO_ORT_PATH(c.decoder), sess_opts_decoder_);
147+
148+
InitDecoder(nullptr, 0);
149+
161150
InitIoBindingConfig();
162151
}
163152

@@ -224,8 +213,16 @@ class OfflineQwen3ASRModel::Impl {
224213
}
225214

226215
void InitConvFrontend(void *model_data, size_t model_data_length) {
227-
conv_sess_ = std::make_unique<Ort::Session>(
228-
env_, model_data, model_data_length, sess_opts_conv_);
216+
if (model_data) {
217+
conv_sess_ = std::make_unique<Ort::Session>(
218+
env_, model_data, model_data_length, sess_opts_conv_);
219+
} else if (!conv_sess_) {
220+
SHERPA_ONNX_LOGE(
221+
"Please pass buffer data or initialize conv session outside of "
222+
"this function");
223+
SHERPA_ONNX_EXIT(-1);
224+
}
225+
229226
InitSessionIo(conv_sess_.get(), &conv_input_names_, &conv_input_names_ptr_,
230227
&conv_output_names_, &conv_output_names_ptr_);
231228

@@ -243,8 +240,16 @@ class OfflineQwen3ASRModel::Impl {
243240
}
244241

245242
void InitEncoder(void *model_data, size_t model_data_length) {
246-
encoder_sess_ = std::make_unique<Ort::Session>(
247-
env_, model_data, model_data_length, sess_opts_encoder_);
243+
if (model_data) {
244+
encoder_sess_ = std::make_unique<Ort::Session>(
245+
env_, model_data, model_data_length, sess_opts_encoder_);
246+
} else if (!encoder_sess_) {
247+
SHERPA_ONNX_LOGE(
248+
"Please pass buffer data or initialize encoder session outside of "
249+
"this function");
250+
SHERPA_ONNX_EXIT(-1);
251+
}
252+
248253
InitEncoderSession();
249254
}
250255

@@ -267,8 +272,16 @@ class OfflineQwen3ASRModel::Impl {
267272
}
268273

269274
void InitDecoder(void *model_data, size_t model_data_length) {
270-
decoder_sess_ = std::make_unique<Ort::Session>(
271-
env_, model_data, model_data_length, sess_opts_decoder_);
275+
if (model_data) {
276+
decoder_sess_ = std::make_unique<Ort::Session>(
277+
env_, model_data, model_data_length, sess_opts_decoder_);
278+
} else if (!decoder_sess_) {
279+
SHERPA_ONNX_LOGE(
280+
"Please pass buffer data or initialize decoder session outside of "
281+
"this function");
282+
SHERPA_ONNX_EXIT(-1);
283+
}
284+
272285
InitDecoderSession();
273286
}
274287

0 commit comments

Comments
 (0)