mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	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:
		
							
								
								
									
										58
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								main.cpp
									
									
									
									
									
								
							| @@ -7,6 +7,7 @@ | |||||||
| #include <cstdio> | #include <cstdio> | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <fstream> | #include <fstream> | ||||||
|  | #include <iostream> | ||||||
| #include <map> | #include <map> | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| @@ -997,11 +998,6 @@ int main(int argc, char ** argv) { | |||||||
|                     break; |                     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 |         // display text | ||||||
| @@ -1011,6 +1007,10 @@ int main(int argc, char ** argv) { | |||||||
|             } |             } | ||||||
|             fflush(stdout); |             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; |         // in interactive mode, and not currently processing queued inputs; | ||||||
|         // check if we should prompt the user for more |         // check if we should prompt the user for more | ||||||
| @@ -1032,43 +1032,33 @@ int main(int argc, char ** argv) { | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 // currently being interactive |                 // currently being interactive | ||||||
|  |                 if (params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); | ||||||
|  |                 std::string buffer; | ||||||
|  |                 std::string line; | ||||||
|                 bool another_line = true; |                 bool another_line = true; | ||||||
|                 while (another_line) { |                 do { | ||||||
|                     fflush(stdout); |                     std::getline(std::cin, line); | ||||||
|                     char buf[256] = {0}; |                     if (line.empty() || line.back() != '\\') { | ||||||
|                     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 { |  | ||||||
|                         another_line = false; |                         another_line = false; | ||||||
|                         buf[n_read] = '\n'; |                     } else { | ||||||
|                         buf[n_read+1] = 0; |                         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); |                 std::vector<gpt_vocab::id> line_inp = ::llama_tokenize(vocab, buffer, false); | ||||||
|                     embd_inp.insert(embd_inp.end(), line_inp.begin(), line_inp.end()); |                 embd_inp.insert(embd_inp.end(), line_inp.begin(), line_inp.end()); | ||||||
|  |  | ||||||
|                     if (params.instruct) { |                 if (params.instruct) { | ||||||
|                         embd_inp.insert(embd_inp.end(), inp_sfx.begin(), inp_sfx.end()); |                     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 |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 is_interacting = false; |                 remaining_tokens -= line_inp.size(); | ||||||
|  |  | ||||||
|  |                 input_noecho = true; // do not echo this again | ||||||
|             } |             } | ||||||
|  |             is_interacting = false; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // end of text token |         // end of text token | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rickey Bowers Jr
					Rickey Bowers Jr