diff --git a/examples/control-vector-generator/README.md b/examples/control-vector-generator/README.md index fd89dfa3b..d00652d73 100644 --- a/examples/control-vector-generator/README.md +++ b/examples/control-vector-generator/README.md @@ -7,7 +7,7 @@ Related PRs: - (Issue) [Generate control vector using llama.cpp](https://github.com/ggerganov/llama.cpp/issues/6880) - [Add control-vector-generator example](https://github.com/ggerganov/llama.cpp/pull/7514) -Example: +## Examples ```sh # CPU only @@ -21,5 +21,14 @@ Example: # To see help message ./control-vector-generator -h -# Then, have a look at "control-vector-generator" section +# Then, have a look at "control-vector" section +``` + +## Tips and tricks + +If your prompt have multiple lines (per prompt), convert the newline to escape sequence `\n`. For example: + +``` +<|im_start|>system\nAct like a person who is extremely happy.<|im_end|> +<|im_start|>system\nYou are in a very good mood today<|im_end|> ``` diff --git a/examples/control-vector-generator/control-vector-generator.cpp b/examples/control-vector-generator/control-vector-generator.cpp index 136f78974..9941683db 100644 --- a/examples/control-vector-generator/control-vector-generator.cpp +++ b/examples/control-vector-generator/control-vector-generator.cpp @@ -289,7 +289,7 @@ static std::string to_string(const T & val) { return ss.str(); } -static std::vector ctrlvec_load_prompt_file(std::string path, bool skip_empty_lines = false) { +static std::vector ctrlvec_load_prompt_file(std::string path, bool skip_empty_lines) { std::vector output; std::ifstream file(path); if (!file.is_open()) { @@ -300,6 +300,7 @@ static std::vector ctrlvec_load_prompt_file(std::string path, bool while (std::getline(file, line)) { bool is_skip = skip_empty_lines && line.empty(); if (!is_skip) { + string_process_escapes(line); output.push_back(line); } } @@ -362,8 +363,8 @@ static void export_gguf(const std::vector & v_ctrl, const */ static int prepare_entries(gpt_params & params, train_context & ctx_train) { // load prompts - std::vector positive_prompts = ctrlvec_load_prompt_file(params.cvector_positive_file); - std::vector negative_prompts = ctrlvec_load_prompt_file(params.cvector_negative_file); + std::vector positive_prompts = ctrlvec_load_prompt_file(params.cvector_positive_file, true); + std::vector negative_prompts = ctrlvec_load_prompt_file(params.cvector_negative_file, true); if (positive_prompts.size() != negative_prompts.size()) { fprintf(stderr, "number of positive and negative prompts must be equal\n"); return 1; diff --git a/examples/control-vector-generator/pca.hpp b/examples/control-vector-generator/pca.hpp index 903f6cc7c..28f8bd3e9 100644 --- a/examples/control-vector-generator/pca.hpp +++ b/examples/control-vector-generator/pca.hpp @@ -11,6 +11,7 @@ #endif #include +#include #include #include #include