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
3334namespace 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