| 236 | } |
| 237 | |
| 238 | void llama_kv_cache_recurrent::seq_keep(llama_seq_id seq_id) { |
| 239 | uint32_t new_head = size; |
| 240 | |
| 241 | for (uint32_t i = 0; i < size; ++i) { |
| 242 | if ((llama_seq_id) i != seq_id) { |
| 243 | cells[i].tail = -1; |
| 244 | } |
| 245 | |
| 246 | if (!cells[i].has_seq_id(seq_id)) { |
| 247 | if (cells[i].pos >= 0) { |
| 248 | used--; |
| 249 | } |
| 250 | |
| 251 | cells[i].pos = -1; |
| 252 | cells[i].src = -1; |
| 253 | cells[i].seq_id.clear(); |
| 254 | |
| 255 | if (new_head == size){ |
| 256 | new_head = i; |
| 257 | } |
| 258 | } else { |
| 259 | cells[i].seq_id.clear(); |
| 260 | cells[i].seq_id.insert(seq_id); |
| 261 | } |
| 262 | } |
| 263 | |
| 264 | // If we freed up a slot, set head to it so searching can start there. |
| 265 | if (new_head != size && new_head < head) { |
| 266 | head = new_head; |
| 267 | } |
| 268 | } |
| 269 | |
| 270 | void llama_kv_cache_recurrent::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) { |
| 271 | if (shift == 0) { |
nothing calls this directly
no test coverage detected