]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
Process escape sequences given in prompts (#1173)
authorDannyDaemonic <redacted>
Wed, 3 May 2023 01:46:20 +0000 (18:46 -0700)
committerGitHub <redacted>
Wed, 3 May 2023 01:46:20 +0000 (18:46 -0700)
examples/common.cpp

index 222b4fa73e3b1954f3b297377e4405e2fd2b9777..1a2f4743a2d850f2bfdc6dc7d96ccd33c55a0cf0 100644 (file)
@@ -66,6 +66,33 @@ int32_t get_num_physical_cores() {
     return n_threads > 0 ? (n_threads <= 4 ? n_threads : n_threads / 2) : 4;
 }
 
+std::string process_escapes(const char* input) {
+    std::string output;
+
+    if (input != nullptr) {
+        std::size_t input_len = std::strlen(input);
+        output.reserve(input_len);
+
+        for (std::size_t i = 0; i < input_len; ++i) {
+            if (input[i] == '\\' && i + 1 < input_len) {
+                switch (input[++i]) {
+                    case 'n':  output.push_back('\n'); break;
+                    case 't':  output.push_back('\t'); break;
+                    case '\'': output.push_back('\''); break;
+                    case '\"': output.push_back('\"'); break;
+                    case '\\': output.push_back('\\'); break;
+                    default:   output.push_back('\\');
+                               output.push_back(input[i]); break;
+                }
+            } else {
+                output.push_back(input[i]);
+            }
+        }
+    }
+
+    return output;
+}
+
 bool gpt_params_parse(int argc, char ** argv, gpt_params & params) {
     bool invalid_param = false;
     std::string arg;
@@ -91,7 +118,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) {
                 invalid_param = true;
                 break;
             }
-            params.prompt = argv[i];
+            params.prompt = process_escapes(argv[i]);
         } else if (arg == "--session") {
             if (++i >= argc) {
                 invalid_param = true;