| 1799 | } |
| 1800 | |
| 1801 | static void llama_kv_cache_seq_keep(struct llama_kv_cache & cache, llama_seq_id seq_id) { |
| 1802 | uint32_t new_head = cache.size; |
| 1803 | |
| 1804 | for (uint32_t i = 0; i < cache.size; ++i) { |
| 1805 | if (!cache.cells[i].has_seq_id(seq_id)) { |
| 1806 | cache.cells[i].pos = -1; |
| 1807 | cache.cells[i].seq_id.clear(); |
| 1808 | if (new_head == cache.size) new_head = i; |
| 1809 | } else { |
| 1810 | cache.cells[i].seq_id.clear(); |
| 1811 | cache.cells[i].seq_id.insert(seq_id); |
| 1812 | } |
| 1813 | } |
| 1814 | |
| 1815 | // If we freed up a slot, set head to it so searching can start there. |
| 1816 | if (new_head != cache.size) cache.head = new_head; |
| 1817 | } |
| 1818 | |
| 1819 | static void llama_kv_cache_seq_shift( |
| 1820 | struct llama_kv_cache & cache, |