common/speculative : fix nullptr crash in get_devices_str (#23386)
ggml_backend_dev_by_name always appends a nullptr sentinel to the devices vector. Skipping nullptr entries prevents assertion failure in ggml_backend_dev_name. Assisted-by: llama.cpp:local pi
This commit is contained in:
@@ -33,16 +33,15 @@ const std::map<std::string, common_speculative_type> common_speculative_type_fro
|
|||||||
};
|
};
|
||||||
|
|
||||||
static std::string common_speculative_get_devices_str(const std::vector<ggml_backend_dev_t> & devices) {
|
static std::string common_speculative_get_devices_str(const std::vector<ggml_backend_dev_t> & devices) {
|
||||||
if (devices.empty()) {
|
|
||||||
return "default";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string result;
|
std::string result;
|
||||||
for (size_t i = 0; i < devices.size(); i++) {
|
for (size_t i = 0; i < devices.size(); i++) {
|
||||||
if (i > 0) result += ", ";
|
if (devices[i] == nullptr) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!result.empty()) result += ", ";
|
||||||
result += ggml_backend_dev_name(devices[i]);
|
result += ggml_backend_dev_name(devices[i]);
|
||||||
}
|
}
|
||||||
return result;
|
return result.empty() ? "default" : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct common_speculative_config {
|
struct common_speculative_config {
|
||||||
|
|||||||
Reference in New Issue
Block a user