Skip to content

Commit e474e45

Browse files
phymbertngxson
andcommitted
llama_split_prefix: use a clearer version, not pass split path len but dest max len.
Co-authored-by: Xuan Son Nguyen <[email protected]>
1 parent 4c04400 commit e474e45

File tree

3 files changed

+15
-21
lines changed

3 files changed

+15
-21
lines changed

examples/gguf-split/gguf-split.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ static void gguf_merge(const split_params & split_params) {
355355
}
356356

357357
// Verify the file naming and extract split_prefix
358-
if (!llama_split_prefix(split_prefix, split_path, strlen(split_path), i_split, n_split)) {
358+
if (!llama_split_prefix(split_prefix, sizeof (split_prefix), split_path, i_split, n_split)) {
359359
fprintf(stderr, "\n%s: unexpected input file name: %s"
360360
" i_split=%d"
361361
" n_split=%d\n", __func__,

llama.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2888,7 +2888,7 @@ struct llama_model_loader {
28882888
}
28892889

28902890
char split_prefix[PATH_MAX] = {0};
2891-
if (!llama_split_prefix(split_prefix, fname.c_str(), fname.size(), idx, n_split)) {
2891+
if (!llama_split_prefix(split_prefix, sizeof(split_prefix), fname.c_str(), idx, n_split)) {
28922892
throw std::runtime_error(format("invalid split file: %s", fname.c_str()));
28932893
}
28942894

@@ -14806,25 +14806,19 @@ LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * pa
1480614806
return 0;
1480714807
}
1480814808

14809-
LLAMA_API int llama_split_prefix(char * dest, const char * split_path, size_t split_path_len, int split_no, int split_count) {
14810-
char split_prefix[PATH_MAX] = {0};
14811-
int split_no_file = 0;
14812-
int split_count_file = 0;
14813-
const char * split_format = "-00000-of-00000.gguf";
14809+
int llama_split_prefix(char * dest, size_t maxlen, const char * split_path, int split_no, int split_count) {
14810+
std::string str_split_path(split_path);
14811+
char postfix[32];
14812+
sprintf(postfix, "-%05d-of-%05d.gguf", split_no + 1, split_count);
14813+
std::string str_postfix(postfix);
1481414814

14815-
if (split_path_len > strlen(split_format) + 1) {
14816-
size_t prefix_len = split_path_len - strlen(split_format);
14817-
if (prefix_len >= sizeof(split_prefix)) {
14818-
prefix_len = sizeof(split_prefix) - 1; // leave room for null terminator
14819-
}
14820-
strncpy(split_prefix, split_path, prefix_len);
14821-
14822-
int n = sscanf(&split_path[0] + strlen(split_prefix), "-%d-of-%d", &split_no_file, &split_count_file);
14823-
if (n == 2 && split_no_file - 1 == split_no && split_count_file == split_count) {
14824-
strcpy(dest, split_prefix);
14825-
return strlen(split_prefix);
14826-
}
14815+
// check if dest ends with postfix
14816+
auto size_prefix = str_split_path.size() - str_postfix.size();
14817+
if (size_prefix > 0 && str_split_path.find(str_postfix, size_prefix) != std::string::npos) {
14818+
strncpy(dest, split_path, std::min(size_prefix, maxlen));
14819+
return size_prefix;
1482714820
}
14821+
1482814822
return 0;
1482914823
}
1483014824

llama.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -966,9 +966,9 @@ extern "C" {
966966
LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count);
967967

968968
/// @details Extract the path prefix from the split_path if and only if the split_no and split_count match.
969-
/// llama_split_prefix(split_prefix, "/models/ggml-model-q4_0-00002-of-00004.gguf", 43, 2, 4) => split_prefix = "/models/ggml-model-q4_0"
969+
/// llama_split_prefix(split_prefix, 64, "/models/ggml-model-q4_0-00002-of-00004.gguf", 2, 4) => split_prefix = "/models/ggml-model-q4_0"
970970
// Returns the split_prefix length.
971-
LLAMA_API int llama_split_prefix(char * split_prefix, const char * split_path, size_t split_path_len, int split_no, int split_count);
971+
LLAMA_API int llama_split_prefix(char * split_prefix, size_t maxlen, const char * split_path, int split_no, int split_count);
972972

973973
// Performance information
974974
LLAMA_API struct llama_timings llama_get_timings(struct llama_context * ctx);

0 commit comments

Comments
 (0)