Fix locale-dependent float printing in GGUF metadata (#17331)

* Set C locale for consistent float formatting across all binaries.

* Add C locale setting to all tools binaries

Add std::setlocale(LC_NUMERIC, "C") to all 16 binaries in the tools/
directory to ensure consistent floating-point formatting.

* Apply suggestion from @JohannesGaessler

---------

Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
This commit is contained in:
SamareshSingh
2026-03-04 09:30:40 +01:00
committed by GitHub
co-authored by Johannes Gäßler
parent 54910bd4f3
commit cb8f4fa3f8
39 changed files with 140 additions and 19 deletions
+3
View File
@@ -4,6 +4,7 @@
#include "llama.h"
#include <algorithm>
#include <clocale>
#include <cstdio>
#include <string>
#include <vector>
@@ -15,6 +16,8 @@ static void print_usage(int, char ** argv) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
if (!common_params_parse(argc, argv, params, LLAMA_EXAMPLE_BENCH, print_usage)) {
+3
View File
@@ -6,6 +6,7 @@
#include "llama.h"
#include "chat.h"
#include <clocale>
#include <cstdio>
#include <cstring>
#include <ctime>
@@ -84,6 +85,8 @@ static void sigint_handler(int signo) {
#endif
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
g_params = &params;
@@ -7,6 +7,8 @@
#include "pca.hpp"
#include "mean.hpp"
#include <clocale>
#ifdef GGML_USE_CUDA
#include "ggml-cuda.h"
#endif
@@ -392,6 +394,8 @@ static int prepare_entries(common_params & params, train_context & ctx_train) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
params.out_file = "control_vector.gguf";
+3
View File
@@ -5,6 +5,7 @@
#include "arg.h"
#include "common.h"
#include <clocale>
#include <map>
#include <vector>
#include <string>
@@ -411,6 +412,8 @@ static void print_usage(int, char ** argv) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
params.out_file = "ggml-lora-merged-f16.gguf";
+3
View File
@@ -6,6 +6,7 @@
#include <algorithm>
#include <cinttypes>
#include <climits>
#include <clocale>
#include <cstdio>
#include <cstdlib>
#include <stdexcept>
@@ -567,6 +568,8 @@ static void gguf_merge(const split_params & split_params) {
}
int main(int argc, const char ** argv) {
std::setlocale(LC_NUMERIC, "C");
split_params params;
split_params_parse(argc, argv, params);
+3
View File
@@ -6,6 +6,7 @@
#include <algorithm>
#include <chrono>
#include <clocale>
#include <cmath>
#include <cstdio>
#include <cstring>
@@ -1191,6 +1192,8 @@ static bool show_statistics(const common_params & params) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
params.out_file = "imatrix.gguf";
+2 -1
View File
@@ -2034,8 +2034,9 @@ static std::unique_ptr<printer> create_printer(output_formats format) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
// try to set locale for unicode characters in markdown
setlocale(LC_CTYPE, ".UTF-8");
std::setlocale(LC_CTYPE, ".UTF-8");
#if !defined(NDEBUG)
fprintf(stderr, "warning: asserts enabled, performance may be affected\n");
+3
View File
@@ -1,7 +1,10 @@
#include <clocale>
#include <cstdio>
#include <string>
int main(int argc, char** argv) {
std::setlocale(LC_NUMERIC, "C");
std::string filename = "main";
if (argc >= 1) {
filename = argv[0];
+2
View File
@@ -274,6 +274,8 @@ static int eval_message(mtmd_cli_context & ctx, common_chat_msg & msg) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
ggml_time_init();
common_params params;
+4 -1
View File
@@ -3,10 +3,11 @@
#include "log.h"
#include "llama.h"
#include <chrono>
#include <algorithm>
#include <array>
#include <atomic>
#include <chrono>
#include <clocale>
#include <cmath>
#include <cstdio>
#include <cstring>
@@ -2004,6 +2005,8 @@ static void kl_divergence(llama_context * ctx, const common_params & params) {
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
params.n_ctx = 512;
+6
View File
@@ -2,6 +2,10 @@
#include "llama.h"
#include "gguf.h"
#include <algorithm>
#include <cctype>
#include <clocale>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <vector>
@@ -485,6 +489,8 @@ static bool parse_layer_prune(const char * data, std::vector<int> & prune_layers
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
if (argc < 3) {
usage(argv[0]);
}
+9 -4
View File
@@ -10,12 +10,15 @@
# include <unistd.h>
# include <sys/stat.h>
#endif
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <thread>
#include <clocale>
#include <codecvt>
#include <filesystem>
#include <regex>
#include <stdio.h>
#include <string>
#include <thread>
#include <vector>
#if defined(__linux__)
#include <sys/types.h>
@@ -285,6 +288,8 @@ static std::vector<ggml_backend_dev_t> get_devices(const rpc_server_params & par
}
int main(int argc, char * argv[]) {
std::setlocale(LC_NUMERIC, "C");
ggml_backend_load_all();
rpc_server_params params;
+3
View File
@@ -8,6 +8,7 @@
#include "log.h"
#include <atomic>
#include <clocale>
#include <exception>
#include <signal.h>
#include <thread> // for std::thread::hardware_concurrency
@@ -67,6 +68,8 @@ static server_http_context::handler_t ex_wrapper(server_http_context::handler_t
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
// own arguments required by this example
common_params params;
+3
View File
@@ -2,6 +2,7 @@
//#include "log.h" // TODO: start using log.h
#include "llama.h"
#include <clocale>
#include <cstdio>
#include <cstring>
#include <fstream>
@@ -184,6 +185,8 @@ static void write_utf8_cstr_to_stdout(const char * str, bool & invalid_utf8) {
}
int main(int raw_argc, char ** raw_argv) {
std::setlocale(LC_NUMERIC, "C");
const std::vector<std::string> argv = ingest_args(raw_argc, raw_argv);
const int argc = argv.size();
+3
View File
@@ -10,6 +10,7 @@
#include <nlohmann/json.hpp>
#include <algorithm>
#include <clocale>
#include <cmath>
#include <cstdio>
#include <fstream>
@@ -536,6 +537,8 @@ static std::string audio_data_from_speaker(json speaker, const outetts_version t
}
int main(int argc, char ** argv) {
std::setlocale(LC_NUMERIC, "C");
common_params params;
params.out_file = "output.wav";