]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
gguf-split : add basic checks (#9499)
authorslaren <redacted>
Sun, 15 Sep 2024 17:02:27 +0000 (19:02 +0200)
committerGitHub <redacted>
Sun, 15 Sep 2024 17:02:27 +0000 (19:02 +0200)
* gguf-split : do not overwrite existing files when merging

* gguf-split : error when too many arguments are passed

examples/gguf-split/gguf-split.cpp

index 881f0451c14559bfd11cbfbe5ee4630eeedbbc4e..82c239b8336be8a79606416fcd8ac8f9efe36e46 100644 (file)
@@ -152,7 +152,7 @@ static void split_params_parse_ex(int argc, const char ** argv, split_params & p
         throw std::invalid_argument("error: invalid parameter for argument: " + arg);
     }
 
-    if (argc - arg_idx < 2) {
+    if (argc - arg_idx != 2) {
         throw std::invalid_argument("error: bad arguments");
     }
 
@@ -389,10 +389,17 @@ static void gguf_merge(const split_params & split_params) {
     int n_split = 1;
     int total_tensors = 0;
 
-    auto * ctx_out = gguf_init_empty();
+    // avoid overwriting existing output file
+    if (std::ifstream(split_params.output.c_str())) {
+        fprintf(stderr, "%s: output file %s already exists\n", __func__, split_params.output.c_str());
+        exit(EXIT_FAILURE);
+    }
+
     std::ofstream fout(split_params.output.c_str(), std::ios::binary);
     fout.exceptions(std::ofstream::failbit); // fail fast on write errors
 
+    auto * ctx_out = gguf_init_empty();
+
     std::vector<uint8_t> read_data;
     std::vector<ggml_context *> ctx_metas;
     std::vector<gguf_context *> ctx_ggufs;