diff --git a/sdk/runanywhere-commons/CMakeLists.txt b/sdk/runanywhere-commons/CMakeLists.txt index 4308620ba..3f07f50a4 100644 --- a/sdk/runanywhere-commons/CMakeLists.txt +++ b/sdk/runanywhere-commons/CMakeLists.txt @@ -197,6 +197,7 @@ set(RAC_CORE_SOURCES src/core/sdk_state.cpp src/core/rac_structured_error.cpp src/core/capabilities/lifecycle_manager.cpp + src/core/rac_error_model.cpp ) # Infrastructure sources - registry, model management, network, telemetry diff --git a/sdk/runanywhere-commons/include/rac/core/rac_error_model.h b/sdk/runanywhere-commons/include/rac/core/rac_error_model.h new file mode 100644 index 000000000..c0ddbcd7e --- /dev/null +++ b/sdk/runanywhere-commons/include/rac/core/rac_error_model.h @@ -0,0 +1,36 @@ +#ifndef RAC_ERROR_MODEL_H +#define RAC_ERROR_MODEL_H + +#include "rac/core/rac_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Structured error model for RunAnywhere SDKs + * + * This wraps existing rac_result_t codes into a typed, + * structured error representation for cross-SDK consistency. + */ +typedef struct { + rac_result_t code; /**< Numeric error code */ + const char* message; /**< Human-readable error message */ + const char* category; /**< Error category (e.g., Model, Network, Validation) */ +} rac_error_model_t; + +/** + * @brief Create structured error model from error code + */ +rac_error_model_t rac_make_error_model(rac_result_t code); + +/** + * @brief Get error category string from error code + */ +const char* rac_error_category(rac_result_t code); + +#ifdef __cplusplus +} +#endif + +#endif // RAC_ERROR_MODEL_H \ No newline at end of file diff --git a/sdk/runanywhere-commons/src/core/rac_error_model.cpp b/sdk/runanywhere-commons/src/core/rac_error_model.cpp new file mode 100644 index 000000000..fbc9ed15e --- /dev/null +++ b/sdk/runanywhere-commons/src/core/rac_error_model.cpp @@ -0,0 +1,45 @@ +#include "rac/core/rac_error_model.h" +#include "rac/core/rac_error.h" + +#include + +// ------------------------------------------------------------ +// Internal Helper: Determine Category from Error Code Range +// ------------------------------------------------------------ +const char* rac_error_category(rac_result_t code) { + if (code >= -109 && code <= -100) return "Initialization"; + if (code >= -129 && code <= -110) return "Model"; + if (code >= -149 && code <= -130) return "Generation"; + if (code >= -179 && code <= -150) return "Network"; + if (code >= -219 && code <= -180) return "Storage"; + if (code >= -229 && code <= -220) return "Hardware"; + if (code >= -249 && code <= -230) return "ComponentState"; + if (code >= -279 && code <= -250) return "Validation"; + if (code >= -299 && code <= -280) return "Audio"; + if (code >= -319 && code <= -300) return "LanguageVoice"; + if (code >= -329 && code <= -320) return "Authentication"; + if (code >= -349 && code <= -330) return "Security"; + if (code >= -369 && code <= -350) return "Extraction"; + if (code >= -379 && code <= -370) return "Calibration"; + if (code >= -389 && code <= -380) return "Cancellation"; + if (code >= -499 && code <= -400) return "ModuleService"; + if (code >= -599 && code <= -500) return "PlatformAdapter"; + if (code >= -699 && code <= -600) return "Backend"; + if (code >= -799 && code <= -700) return "Event"; + if (code >= -899 && code <= -800) return "Other"; + + if (code == RAC_SUCCESS) return "Success"; + + return "Unknown"; +} + +// ------------------------------------------------------------ +// Public API: Create Structured Error Model +// ------------------------------------------------------------ +rac_error_model_t rac_make_error_model(rac_result_t code) { + rac_error_model_t model; + model.code = code; + model.message = rac_error_message(code); + model.category = rac_error_category(code); + return model; +} \ No newline at end of file diff --git a/sdk/runanywhere-commons/src/core/rac_logger.cpp b/sdk/runanywhere-commons/src/core/rac_logger.cpp index 98c70af40..53466a669 100644 --- a/sdk/runanywhere-commons/src/core/rac_logger.cpp +++ b/sdk/runanywhere-commons/src/core/rac_logger.cpp @@ -13,6 +13,7 @@ #include #include +#include "rac/core/rac_error_model.h" #include "rac/core/rac_platform_adapter.h" // ============================================================================= @@ -154,7 +155,10 @@ void log_to_stderr(rac_log_level_t level, const char* category, const char* mess fprintf(stream, ", func=%s", metadata->function); } if (metadata->error_code != 0) { - fprintf(stream, ", error_code=%d", metadata->error_code); + rac_error_model_t err = rac_make_error_model((rac_result_t)metadata->error_code); + fprintf(stream, ", error_code=%d", err.code); + fprintf(stream, ", error_category=%s", err.category); + fprintf(stream, ", error_message=%s", err.message); } if (metadata->model_id) { fprintf(stream, ", model=%s", metadata->model_id);