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
This commit is contained in:
		
							parent
							
								
									24568371ae
								
							
						
					
					
						commit
						5c19c70ba6
					
				
							
								
								
									
										58
									
								
								main.cpp
								
								
								
								
							
							
						
						
									
										58
									
								
								main.cpp
								
								
								
								
							|  | @ -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; | ||||
|                     } 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); | ||||
| 
 | ||||
|                     std::vector<gpt_vocab::id> line_inp = ::llama_tokenize(vocab, buf, false); | ||||
|                     embd_inp.insert(embd_inp.end(), line_inp.begin(), line_inp.end()); | ||||
|                 std::vector<gpt_vocab::id> line_inp = ::llama_tokenize(vocab, buffer, 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()); | ||||
|                     } | ||||
| 
 | ||||
|                     remaining_tokens -= line_inp.size(); | ||||
| 
 | ||||
|                     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
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue