#pragma once #include "engine/framework/io/json.h" #include #include #include #include #include #include #include namespace engine::assets { enum class TensorStorageType; } namespace engine::core { enum class BackendType; } namespace engine::runtime { struct OptionMatch { std::string key; std::string value; }; struct ComponentExecPlan { std::string impl; std::optional backend; std::unordered_map artifacts; io::json::Value::Object params; }; struct ComponentExecImplementation { std::string_view name; std::initializer_list backends; std::initializer_list required_artifacts; std::initializer_list optional_artifacts; std::initializer_list params; }; struct ComponentExecSpec { std::string_view name; std::string_view default_impl; std::initializer_list implementations; }; // Parses one family.exec_plan JSON object. Omitted components/fields retain their // defaults. Parameter values retain JSON types for model-local semantic validation. std::unordered_map parse_exec_plan( const std::unordered_map & options, std::string_view key, std::initializer_list components); std::optional find_option_match( const std::unordered_map & options, std::initializer_list keys); std::optional find_option( const std::unordered_map & options, std::initializer_list keys); bool parse_bool_option(const std::string & value, std::string_view key); std::optional parse_int_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_float_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_finite_float_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_positive_finite_float_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_u32_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_u64_option( const std::unordered_map & options, std::initializer_list keys); std::optional parse_i64_option( const std::unordered_map & options, std::initializer_list keys); int64_t parse_positive_i64_option( const std::unordered_map & options, std::initializer_list keys, int64_t fallback); size_t parse_size_mb_option( const std::unordered_map & options, std::initializer_list keys, size_t fallback_bytes); assets::TensorStorageType parse_tensor_storage_option( const std::unordered_map & options, std::string_view key, assets::TensorStorageType fallback, std::initializer_list allowed); assets::TensorStorageType parse_tensor_storage_option( const std::unordered_map & options, std::string_view key, std::string_view fallback_key, assets::TensorStorageType fallback, std::initializer_list allowed); uint32_t random_u32_seed(); uint64_t random_u64_seed(); } // namespace engine::runtime