From 88b044be7f4f504a4cc1ac4a4537cabd3404b573 Mon Sep 17 00:00:00 2001 From: Wagner Bruna Date: Wed, 19 Aug 2026 11:27:48 -0300 Subject: [PATCH] fix: mark graph cuts with both a prefix and a suffix (#1883) --- src/core/ggml_graph_cut.cpp | 9 ++++++--- src/core/ggml_graph_cut.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/ggml_graph_cut.cpp b/src/core/ggml_graph_cut.cpp index ebb9c1bf..eec43bbd 100644 --- a/src/core/ggml_graph_cut.cpp +++ b/src/core/ggml_graph_cut.cpp @@ -453,11 +453,12 @@ namespace sd::ggml_graph_cut { if (tensor == nullptr || tensor->name[0] == '\0') { return false; } - return std::strncmp(tensor->name, GGML_RUNNER_CUT_PREFIX, std::strlen(GGML_RUNNER_CUT_PREFIX)) == 0; + return starts_with(tensor->name, GGML_RUNNER_CUT_PREFIX) && + ends_with(tensor->name, GGML_RUNNER_CUT_SUFFIX); } std::string make_graph_cut_name(const std::string& group, const std::string& output) { - return std::string(GGML_RUNNER_CUT_PREFIX) + group + "|" + output; + return std::string(GGML_RUNNER_CUT_PREFIX) + group + "|" + output + GGML_RUNNER_CUT_SUFFIX; } void mark_graph_cut(ggml_tensor* tensor, const std::string& group, const std::string& output) { @@ -783,7 +784,9 @@ namespace sd::ggml_graph_cut { plan.has_cuts = true; std::string full_name(node->name); - std::string payload = full_name.substr(std::strlen(GGML_RUNNER_CUT_PREFIX)); + size_t prefix_len = std::strlen(GGML_RUNNER_CUT_PREFIX); + size_t suffix_len = std::strlen(GGML_RUNNER_CUT_SUFFIX); + std::string payload = full_name.substr(prefix_len, full_name.size() - prefix_len - suffix_len); size_t sep = payload.find('|'); std::string group = sep == std::string::npos ? payload : payload.substr(0, sep); diff --git a/src/core/ggml_graph_cut.h b/src/core/ggml_graph_cut.h index 17f2f1d7..d955049d 100644 --- a/src/core/ggml_graph_cut.h +++ b/src/core/ggml_graph_cut.h @@ -68,6 +68,7 @@ namespace sd::ggml_graph_cut { }; static constexpr const char* GGML_RUNNER_CUT_PREFIX = "ggml_runner_cut:"; + static constexpr const char* GGML_RUNNER_CUT_SUFFIX = "|"; struct MaxVramAssignment { float default_gib = 0.f;