Use STL in input processing and fix off-by-one bug
This commit is contained in:
parent
2f700a2738
commit
68897eb13a
1 changed files with 9 additions and 9 deletions
18
main.cpp
18
main.cpp
|
@ -961,15 +961,15 @@ int main(int argc, char ** argv) {
|
||||||
--remaining_tokens;
|
--remaining_tokens;
|
||||||
} else {
|
} else {
|
||||||
// some user input remains from prompt or interaction, forward it to processing
|
// some user input remains from prompt or interaction, forward it to processing
|
||||||
while (embd_inp.size() > input_consumed) {
|
// Copy at most n_batch elements from embd_inp to embd
|
||||||
embd.push_back(embd_inp[input_consumed]);
|
size_t num_copied = std::min((size_t) params.n_batch, embd_inp.size() - input_consumed);
|
||||||
last_n_tokens.erase(last_n_tokens.begin());
|
std::copy(embd_inp.begin() + input_consumed, embd_inp.begin() + input_consumed + num_copied, std::back_inserter(embd));
|
||||||
last_n_tokens.push_back(embd_inp[input_consumed]);
|
input_consumed += num_copied;
|
||||||
++input_consumed;
|
|
||||||
if (embd.size() > params.n_batch) {
|
// Copy the last `last_n_size` elements copied into embd to last_n_tokens
|
||||||
break;
|
size_t num_copied_last_n = std::min(num_copied, (size_t) last_n_size);
|
||||||
}
|
last_n_tokens.erase(last_n_tokens.begin(), last_n_tokens.begin()+num_copied_last_n);
|
||||||
}
|
last_n_tokens.insert(last_n_tokens.end(), embd.end() - num_copied_last_n, embd.end());
|
||||||
|
|
||||||
// reset color to default if we there is no pending user input
|
// reset color to default if we there is no pending user input
|
||||||
if (!input_noecho && params.use_color && embd_inp.size() == input_consumed) {
|
if (!input_noecho && params.use_color && embd_inp.size() == input_consumed) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue