#pragma once #include "recipe.h" #include "engine/framework/core/backend.h" #include "engine/framework/runtime/registry.h" #include #include #include #include #include namespace minitts::app { struct CliRecipeOptions { std::unordered_map model_paths; std::unordered_map model_families; std::unordered_map load_options; std::unordered_map session_options; std::optional model_spec_override; engine::core::BackendConfig backend; }; class CliRecipeModelExecutor final : public IRecipeModelExecutor { public: CliRecipeModelExecutor(engine::runtime::ModelRegistry & registry, CliRecipeOptions options); ~CliRecipeModelExecutor() override; engine::runtime::TaskResult run( std::string_view role, const engine::runtime::TaskSpec & task, const engine::runtime::TaskRequest & request) override; engine::runtime::TaskResult stream(std::string_view role, const engine::runtime::TaskSpec & task, const engine::runtime::TaskRequest & request, const RecipeEventSink & sink, const AudioChunkStream * source = nullptr) override; private: struct ModelEntry; ModelEntry & model_for(std::string_view role, const engine::runtime::TaskSpec & task); std::mutex models_mutex_; engine::runtime::ModelRegistry & registry_; CliRecipeOptions options_; std::unordered_map> models_; }; } // namespace minitts::app