Fixed leak in llama_control_vector_load_one() and allow llama_control_vector_load() to grow
This commit is contained in:
parent
8854044561
commit
2b276756ee
1 changed files with 7 additions and 4 deletions
|
@ -2923,6 +2923,8 @@ static llama_control_vector_data llama_control_vector_load_one(const llama_contr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ggml_free(ctx);
|
||||||
|
gguf_free(ctx_gguf);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2933,16 +2935,17 @@ llama_control_vector_data llama_control_vector_load(const std::vector<llama_cont
|
||||||
auto cur = llama_control_vector_load_one(info);
|
auto cur = llama_control_vector_load_one(info);
|
||||||
|
|
||||||
if (cur.n_embd == -1) {
|
if (cur.n_embd == -1) {
|
||||||
return result;
|
continue;
|
||||||
}
|
}
|
||||||
if (result.n_embd != -1 && (result.n_embd != cur.n_embd || result.data.size() != cur.data.size())) {
|
if (result.n_embd != -1 && result.n_embd != cur.n_embd) {
|
||||||
fprintf(stderr, "%s: control vector in %s does not match previous vector dimensions\n", __func__, info.fname.c_str());
|
fprintf(stderr, "%s: control vector in %s does not match previous vector dimensions\n", __func__, info.fname.c_str());
|
||||||
return result;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.n_embd == -1) {
|
if (result.n_embd == -1) {
|
||||||
result = std::move(cur);
|
result = std::move(cur);
|
||||||
} else {
|
} else {
|
||||||
|
result.data.resize(std::max(result.data.size(), cur.data.size()), 0.0f); // extend if necessary
|
||||||
for (size_t i = 0; i < cur.data.size(); i++) {
|
for (size_t i = 0; i < cur.data.size(); i++) {
|
||||||
result.data[i] += cur.data[i];
|
result.data[i] += cur.data[i];
|
||||||
}
|
}
|
||||||
|
@ -2950,7 +2953,7 @@ llama_control_vector_data llama_control_vector_load(const std::vector<llama_cont
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.n_embd == -1) {
|
if (result.n_embd == -1) {
|
||||||
fprintf(stderr, "%s: no vectors passed\n", __func__);
|
fprintf(stderr, "%s: no valid vectors passed\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue