diff --git a/examples/common.cpp b/examples/common.cpp index 00535f558..73278db0e 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -346,7 +346,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { } if (params.prompt_cache_all && (params.interactive || params.interactive_first || - params.instruct || params.antiprompt.size())) { + params.instruct)) { fprintf(stderr, "error: --prompt-cache-all not supported in interactive mode yet\n"); gpt_print_usage(argc, argv, default_params); exit(1); diff --git a/examples/main/main.cpp b/examples/main/main.cpp index f23a4bc72..231a99951 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -209,8 +209,8 @@ int main(int argc, char ** argv) { params.antiprompt.push_back("### Instruction:\n\n"); } - // enable interactive mode if interactive start is specified - if (params.interactive_start) { + // enable interactive mode if reverse prompt or interactive start is specified + if (params.interactive_first) { params.interactive = true; } @@ -306,7 +306,7 @@ int main(int argc, char ** argv) { std::vector embd; - while ((n_remain != 0 && !is_antiprompt) || params.interactive) { + while (n_remain != 0 || params.interactive) { // predict if (embd.size() > 0) { // infinite text generation via context swapping @@ -504,8 +504,9 @@ int main(int argc, char ** argv) { console_set_color(con_st, CONSOLE_COLOR_DEFAULT); } - // if not currently processing queued inputs; - if ((int) embd_inp.size() <= n_consumed) { + // in interactive mode, and not currently processing queued inputs; + // check if we should prompt the user for more + if (params.interactive && (int) embd_inp.size() <= n_consumed) { // check for reverse prompt if (params.antiprompt.size()) { @@ -516,21 +517,10 @@ int main(int argc, char ** argv) { is_antiprompt = false; // Check if each of the reverse prompts appears at the end of the output. - // If we're not running interactively, the reverse prompt might be tokenized with some following characters - // so we'll compensate for that by widening the search window a bit. for (std::string & antiprompt : params.antiprompt) { - size_t extra_padding = params.interactive ? 0 : 2; - size_t search_start_pos = last_output.length() > static_cast(antiprompt.length() + extra_padding) - ? last_output.length() - static_cast(antiprompt.length() + extra_padding) - : 0; - - if (last_output.find(antiprompt.c_str(), search_start_pos) != std::string::npos) { - if (params.interactive) { - is_interacting = true; - set_console_color(con_st, CONSOLE_COLOR_USER_INPUT); - } + if (last_output.find(antiprompt.c_str(), last_output.length() - antiprompt.length(), antiprompt.length()) != std::string::npos) { + is_interacting = true; is_antiprompt = true; - fflush(stdout); break; } }