mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	Gate signal support on being on a unixoid system. (#74)
This commit is contained in:
		
							
								
								
									
										15
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								main.cpp
									
									
									
									
									
								
							| @@ -11,8 +11,10 @@ | |||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
|  | #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #define ANSI_COLOR_RED     "\x1b[31m" | #define ANSI_COLOR_RED     "\x1b[31m" | ||||||
| #define ANSI_COLOR_GREEN   "\x1b[32m" | #define ANSI_COLOR_GREEN   "\x1b[32m" | ||||||
| @@ -747,6 +749,7 @@ bool llama_eval( | |||||||
|  |  | ||||||
| static bool is_interacting = false; | static bool is_interacting = false; | ||||||
|  |  | ||||||
|  | #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) | ||||||
| void sigint_handler(int signo) { | void sigint_handler(int signo) { | ||||||
|     if (signo == SIGINT) { |     if (signo == SIGINT) { | ||||||
|         if (!is_interacting) { |         if (!is_interacting) { | ||||||
| @@ -756,6 +759,7 @@ void sigint_handler(int signo) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
| int main(int argc, char ** argv) { | int main(int argc, char ** argv) { | ||||||
|     ggml_time_init(); |     ggml_time_init(); | ||||||
| @@ -822,11 +826,13 @@ int main(int argc, char ** argv) { | |||||||
|     } |     } | ||||||
|     printf("\n"); |     printf("\n"); | ||||||
|     if (params.interactive) { |     if (params.interactive) { | ||||||
|  | #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) | ||||||
|         struct sigaction sigint_action; |         struct sigaction sigint_action; | ||||||
|         sigint_action.sa_handler = sigint_handler; |         sigint_action.sa_handler = sigint_handler; | ||||||
|         sigemptyset (&sigint_action.sa_mask); |         sigemptyset (&sigint_action.sa_mask); | ||||||
|         sigint_action.sa_flags = 0;  |         sigint_action.sa_flags = 0;  | ||||||
|         sigaction(SIGINT, &sigint_action, NULL); |         sigaction(SIGINT, &sigint_action, NULL); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|         printf("%s: interactive mode on.\n", __func__); |         printf("%s: interactive mode on.\n", __func__); | ||||||
|  |  | ||||||
| @@ -855,7 +861,9 @@ int main(int argc, char ** argv) { | |||||||
|  |  | ||||||
|     if (params.interactive) { |     if (params.interactive) { | ||||||
|         printf("== Running in interactive mode. ==\n" |         printf("== Running in interactive mode. ==\n" | ||||||
|  | #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) | ||||||
|                " - Press Ctrl+C to interject at any time.\n" |                " - Press Ctrl+C to interject at any time.\n" | ||||||
|  | #endif | ||||||
|                " - Press Return to return control to LLaMa.\n" |                " - Press Return to return control to LLaMa.\n" | ||||||
|                " - If you want to submit another line, end your input in '\\'.\n"); |                " - If you want to submit another line, end your input in '\\'.\n"); | ||||||
|     } |     } | ||||||
| @@ -957,10 +965,15 @@ int main(int argc, char ** argv) { | |||||||
|                 // currently being interactive  |                 // currently being interactive  | ||||||
|                 bool another_line=true; |                 bool another_line=true; | ||||||
|                 while (another_line) { |                 while (another_line) { | ||||||
|  |                     fflush(stdout); | ||||||
|                     char buf[256] = {0}; |                     char buf[256] = {0}; | ||||||
|                     int n_read; |                     int n_read; | ||||||
|                     if(params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); |                     if(params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); | ||||||
|                     scanf("%255[^\n]%n%*c", buf, &n_read); |                     if (scanf("%255[^\n]%n%*c", buf, &n_read) <= 0) { | ||||||
|  |                         // presumable empty line, consume the newline | ||||||
|  |                         scanf("%*c"); | ||||||
|  |                         n_read=0; | ||||||
|  |                     } | ||||||
|                     if(params.use_color) printf(ANSI_COLOR_RESET); |                     if(params.use_color) printf(ANSI_COLOR_RESET); | ||||||
|  |  | ||||||
|                     if (n_read > 0 && buf[n_read-1]=='\\') { |                     if (n_read > 0 && buf[n_read-1]=='\\') { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Matvey Soloviev
					Matvey Soloviev