#pragma once #include "engine/models/stable_audio/assets.h" #include "engine/models/stable_audio/conditioner.h" #include "engine/models/stable_audio/t5gemma.h" #include #include namespace engine::core { class ExecutionContext; } namespace engine::models::stable_audio { struct StableAudioConditionedInput { int64_t batch = 0; int64_t cross_tokens = 0; int64_t cond_dim = 0; std::vector cross_attention; std::vector cross_attention_mask; std::vector global; }; struct StableAudioConditioningInputs { StableAudioConditionedInput positive; StableAudioConditionedInput negative; bool has_negative = false; }; class StableAudioConditionerRuntime { public: StableAudioConditionerRuntime( core::ExecutionContext & execution, std::shared_ptr assets, assets::TensorStorageType weight_storage_type, int64_t max_batch); ~StableAudioConditionerRuntime(); StableAudioConditionerRuntime(const StableAudioConditionerRuntime &) = delete; StableAudioConditionerRuntime & operator=(const StableAudioConditionerRuntime &) = delete; void prepare() const; StableAudioConditioningInputs encode(const StableAudioConditioningBatch & inputs) const; void release_runtime_graphs() const; private: StableAudioConditionedInput encode_one( const StableAudioTokenBatch & tokens, const std::vector & normalized_seconds, const std::vector & seconds_fourier_features) const; std::shared_ptr assets_; StableAudioT5EncoderRuntime t5_; std::vector prompt_padding_embedding_; std::vector seconds_projection_weight_; std::vector seconds_projection_bias_; }; } // namespace engine::models::stable_audio