Gate signal support on being on a unixoid system. (#74)

This commit is contained in:
Matvey Soloviev 2023-03-13 04:08:01 +01:00
parent 460c482540
commit a169bb889c

View File

@ -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]=='\\') {