@@ -338,6 +338,8 @@ void llama_kv_cache::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, ll
338338 llama_pos pos = v_cells[s0].pos_get (i);
339339 llama_pos shift = v_cells[s0].get_shift (i);
340340
341+ llama_kv_cell_ext ext = v_cells[s0].ext_get (i);
342+
341343 if (shift != 0 ) {
342344 pos -= shift;
343345 assert (pos >= 0 );
@@ -349,6 +351,8 @@ void llama_kv_cache::seq_cp(llama_seq_id seq_id_src, llama_seq_id seq_id_dst, ll
349351 if (shift != 0 ) {
350352 v_cells[s1].pos_add (i, shift);
351353 }
354+
355+ v_cells[s1].ext_set (i, ext);
352356 }
353357 }
354358
@@ -383,6 +387,7 @@ void llama_kv_cache::seq_keep(llama_seq_id seq_id) {
383387
384388void llama_kv_cache::seq_add (llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos shift) {
385389 GGML_ASSERT (seq_id >= 0 && (size_t ) seq_id < seq_to_stream.size ());
390+ GGML_ASSERT (hparams.n_pos_per_embd () == 1 && " seq_add() is only supported for n_pos_per_embd() == 1" );
386391
387392 auto & cells = v_cells[seq_to_stream[seq_id]];
388393 auto & head = v_heads[seq_to_stream[seq_id]];
@@ -427,6 +432,7 @@ void llama_kv_cache::seq_add(llama_seq_id seq_id, llama_pos p0, llama_pos p1, ll
427432
428433void llama_kv_cache::seq_div (llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) {
429434 GGML_ASSERT (seq_id >= 0 && (size_t ) seq_id < seq_to_stream.size ());
435+ GGML_ASSERT (hparams.n_pos_per_embd () == 1 && " seq_div() is only supported for n_pos_per_embd() == 1" );
430436
431437 auto & cells = v_cells[seq_to_stream[seq_id]];
432438
@@ -905,7 +911,7 @@ void llama_kv_cache::apply_ubatch(const slot_info & sinfo, const llama_ubatch &
905911 /* .x =*/ ubatch.pos [i + ubatch.n_tokens *2 ],
906912 /* .y =*/ ubatch.pos [i + ubatch.n_tokens ],
907913 };
908- cells.ext_set (idx, std::move ( ext) );
914+ cells.ext_set (idx, ext);
909915 }
910916
911917 for (int32_t s = 0 ; s < ubatch.n_seq_id [i]; s++) {
0 commit comments