From 58190cc84d846d8575ba26e8486bc29d9fd8ad55 Mon Sep 17 00:00:00 2001 From: anchortense Date: Mon, 6 Apr 2026 09:40:38 +1000 Subject: [PATCH] llama : correct platform-independent loading of BOOL metadata (#21428) * model-loader : fix GGUF bool array conversion * model-loader : fix remaining GGUF bool pointer uses --- src/llama-impl.cpp | 2 +- src/llama-model-loader.cpp | 5 +++-- tools/mtmd/clip-impl.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/llama-impl.cpp b/src/llama-impl.cpp index 4c0188ee72..b3a94b946d 100644 --- a/src/llama-impl.cpp +++ b/src/llama-impl.cpp @@ -128,7 +128,7 @@ static std::string gguf_data_to_str(enum gguf_type type, const void * data, int case GGUF_TYPE_INT64: return std::to_string(((const int64_t *)data)[i]); case GGUF_TYPE_FLOAT32: return std::to_string(((const float *)data)[i]); case GGUF_TYPE_FLOAT64: return std::to_string(((const double *)data)[i]); - case GGUF_TYPE_BOOL: return ((const bool *)data)[i] ? "true" : "false"; + case GGUF_TYPE_BOOL: return ((const int8_t *)data)[i] != 0 ? "true" : "false"; default: return format("unknown type %d", type); } } diff --git a/src/llama-model-loader.cpp b/src/llama-model-loader.cpp index 3d549cae5b..4f821e0dc7 100644 --- a/src/llama-model-loader.cpp +++ b/src/llama-model-loader.cpp @@ -374,8 +374,9 @@ namespace GGUFMeta { } } else { if (arr_info.gt == GGUF_TYPE_BOOL) { - std::transform((const bool *)arr_info.data, (const bool *)arr_info.data + arr_info.length, result.begin(), [](bool x) { - return static_cast(x); + const int8_t * values = (const int8_t *) arr_info.data; + std::transform(values, values + arr_info.length, result.begin(), [](int8_t x) { + return static_cast(x != 0); }); } else { std::copy((const T*)arr_info.data, (const T *)arr_info.data + arr_info.length, result.begin()); diff --git a/tools/mtmd/clip-impl.h b/tools/mtmd/clip-impl.h index 1f2f7cfaac..81b92841ca 100644 --- a/tools/mtmd/clip-impl.h +++ b/tools/mtmd/clip-impl.h @@ -522,7 +522,7 @@ static std::string gguf_data_to_str(enum gguf_type type, const void * data, int case GGUF_TYPE_INT64: return std::to_string(((const int64_t *)data)[i]); case GGUF_TYPE_FLOAT32: return std::to_string(((const float *)data)[i]); case GGUF_TYPE_FLOAT64: return std::to_string(((const double *)data)[i]); - case GGUF_TYPE_BOOL: return ((const bool *)data)[i] ? "true" : "false"; + case GGUF_TYPE_BOOL: return ((const int8_t *)data)[i] != 0 ? "true" : "false"; default: return string_format("unknown type %d", type); } }