#pragma once #include "engine/framework/runtime/model.h" #include "engine/framework/runtime/session.h" #include "engine/framework/runtime/session_base.h" #include #include #include #include #include namespace engine::models::miocodec { struct MioCodecAssets; struct MioCodecWeights; class MioCodecGlobalEncoderRuntime; class MioCodecGlobalReferenceEncoder; class MioCodecWaveDecoderRuntime; class MioCodecWaveformReconstructor; } namespace engine::models::miotts { struct MioTTSAssets; class MioTTSQwen3Runtime; class MioTTSTokenizer; class MioTTSSession final : public runtime::RuntimeSessionBase, public runtime::IOfflineVoiceTaskSession { public: MioTTSSession( const runtime::TaskSpec & task, const runtime::SessionOptions & options, std::shared_ptr assets); ~MioTTSSession() override; std::string family() const override; runtime::VoiceTaskKind task_kind() const override; runtime::RunMode run_mode() const override; void prepare(const runtime::SessionPreparationRequest & request) override; runtime::TaskResult run(const runtime::TaskRequest & request) override; private: runtime::IOfflineVoiceTaskSession & best_of_n_asr_session(); runtime::TaskSpec task_; std::shared_ptr assets_; std::optional text_chunk_size_; bool best_of_n_enabled_ = false; int best_of_n_default_ = 1; int best_of_n_max_ = 8; std::string best_of_n_language_ = "auto"; std::filesystem::path best_of_n_asr_model_path_; std::shared_ptr codec_assets_; std::shared_ptr codec_weights_; std::unique_ptr tokenizer_; std::unique_ptr language_model_; std::unique_ptr best_of_n_asr_model_; std::unique_ptr best_of_n_asr_session_; bool best_of_n_asr_prepared_ = false; std::unique_ptr global_encoder_; std::unique_ptr global_reference_; std::unique_ptr wave_decoder_; std::unique_ptr waveform_reconstructor_; }; } // namespace engine::models::miotts