diff options
author | Rickey Bowers Jr <bitRAKE@gmail.com> | 2023-03-19 13:44:30 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-19 19:44:30 +0000 |
commit | 5c19c70ba631a8f5d54feb6634e0eea178911a84 (patch) | |
tree | 3a2af2b0a8cad83d36d52a60102aac91c1b0bfc6 | |
parent | 24568371ae0d7caf85164abe4753f36a7dba0288 (diff) |
fix coloring of last `n_batch` of prompt, and refactor line input (#221)
* fix coloring of last `n_batch` of prompt, and refactor line input
* forgot the newline that needs to be sent to the model
* (per #283) try to force flush of color reset in SIGINT handler
-rw-r--r-- | main.cpp | 58 |
1 files changed, 24 insertions, 34 deletions
@@ -7,6 +7,7 @@ #include <cstdio> #include <cstring> #include <fstream> +#include <iostream> #include <map> #include <string> #include <vector> @@ -997,11 +998,6 @@ int main(int argc, char ** argv) { break; } } - - // reset color to default if we there is no pending user input - if (!input_noecho && params.use_color && (int) embd_inp.size() == input_consumed) { - printf(ANSI_COLOR_RESET); - } } // display text @@ -1011,6 +1007,10 @@ int main(int argc, char ** argv) { } fflush(stdout); } + // reset color to default if we there is no pending user input + if (!input_noecho && params.use_color && (int)embd_inp.size() == input_consumed) { + printf(ANSI_COLOR_RESET); + } // in interactive mode, and not currently processing queued inputs; // check if we should prompt the user for more @@ -1032,43 +1032,33 @@ int main(int argc, char ** argv) { } // currently being interactive + if (params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); + std::string buffer; + std::string line; bool another_line = true; - while (another_line) { - fflush(stdout); - char buf[256] = {0}; - int n_read; - if (params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); - if (scanf("%255[^\n]%n%*c", buf, &n_read) <= 0) { - // presumable empty line, consume the newline - std::ignore = scanf("%*c"); - n_read=0; - } - if (params.use_color) printf(ANSI_COLOR_RESET); - - if (n_read > 0 && buf[n_read-1]=='\\') { - another_line = true; - buf[n_read-1] = '\n'; - buf[n_read] = 0; - } else { + do { + std::getline(std::cin, line); + if (line.empty() || line.back() != '\\') { another_line = false; - buf[n_read] = '\n'; - buf[n_read+1] = 0; - } - - std::vector<gpt_vocab::id> line_inp = ::llama_tokenize(vocab, buf, false); - embd_inp.insert(embd_inp.end(), line_inp.begin(), line_inp.end()); - - if (params.instruct) { - embd_inp.insert(embd_inp.end(), inp_sfx.begin(), inp_sfx.end()); + } else { + line.pop_back(); // Remove the continue character } + buffer += line + '\n'; // Append the line to the result + } while (another_line); + if (params.use_color) printf(ANSI_COLOR_RESET); - remaining_tokens -= line_inp.size(); + std::vector<gpt_vocab::id> line_inp = ::llama_tokenize(vocab, buffer, false); + embd_inp.insert(embd_inp.end(), line_inp.begin(), line_inp.end()); - input_noecho = true; // do not echo this again + if (params.instruct) { + embd_inp.insert(embd_inp.end(), inp_sfx.begin(), inp_sfx.end()); } - is_interacting = false; + remaining_tokens -= line_inp.size(); + + input_noecho = true; // do not echo this again } + is_interacting = false; } // end of text token |