@@ -61,7 +61,10 @@ extern "C" {
6161 struct llama_model ;
6262 struct llama_context ;
6363 struct llama_sampler ;
64- struct llama_kv_cache ;
64+
65+ typedef struct llama_memory_i * llama_memory_t ;
66+
67+ struct llama_kv_cache ; // DEPRECATED (use llama_memory instead)
6568
6669 typedef int32_t llama_pos;
6770 typedef int32_t llama_token;
@@ -493,9 +496,11 @@ extern "C" {
493496 DEPRECATED (LLAMA_API int32_t llama_n_vocab (const struct llama_vocab * vocab), "use llama_vocab_n_tokens instead");
494497
495498 LLAMA_API const struct llama_model * llama_get_model (const struct llama_context * ctx);
496- LLAMA_API struct llama_kv_cache * llama_get_kv_self ( struct llama_context * ctx);
499+ LLAMA_API llama_memory_t llama_get_memory ( const struct llama_context * ctx);
497500 LLAMA_API enum llama_pooling_type llama_pooling_type (const struct llama_context * ctx); // TODO: rename to llama_get_pooling_type
498501
502+ DEPRECATED (LLAMA_API struct llama_kv_cache * llama_get_kv_self (struct llama_context * ctx), "use llama_get_memory instead");
503+
499504 LLAMA_API const struct llama_vocab * llama_model_get_vocab (const struct llama_model * model);
500505 LLAMA_API enum llama_rope_type llama_model_rope_type (const struct llama_model * model);
501506
@@ -609,7 +614,78 @@ extern "C" {
609614 int32_t il_end);
610615
611616 //
612- // KV cache
617+ // Memory
618+ //
619+
620+ // Clear the memory contents
621+ LLAMA_API void llama_memory_clear (llama_memory_t mem);
622+
623+ // Removes all tokens that belong to the specified sequence and have positions in [p0, p1)
624+ // Returns false if a partial sequence cannot be removed. Removing a whole sequence never fails
625+ // seq_id < 0 : match any sequence
626+ // p0 < 0 : [0, p1]
627+ // p1 < 0 : [p0, inf)
628+ LLAMA_API bool llama_memory_seq_rm (
629+ llama_memory_t mem,
630+ llama_seq_id seq_id,
631+ llama_pos p0,
632+ llama_pos p1);
633+
634+ // Copy all tokens that belong to the specified sequence to another sequence
635+ // p0 < 0 : [0, p1]
636+ // p1 < 0 : [p0, inf)
637+ LLAMA_API void llama_memory_seq_cp (
638+ llama_memory_t mem,
639+ llama_seq_id seq_id_src,
640+ llama_seq_id seq_id_dst,
641+ llama_pos p0,
642+ llama_pos p1);
643+
644+ // Removes all tokens that do not belong to the specified sequence
645+ LLAMA_API void llama_memory_seq_keep (
646+ llama_memory_t mem,
647+ llama_seq_id seq_id);
648+
649+ // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1)
650+ // p0 < 0 : [0, p1]
651+ // p1 < 0 : [p0, inf)
652+ LLAMA_API void llama_memory_seq_add (
653+ llama_memory_t mem,
654+ llama_seq_id seq_id,
655+ llama_pos p0,
656+ llama_pos p1,
657+ llama_pos delta);
658+
659+ // Integer division of the positions by factor of `d > 1`
660+ // p0 < 0 : [0, p1]
661+ // p1 < 0 : [p0, inf)
662+ LLAMA_API void llama_memory_seq_div (
663+ llama_memory_t mem,
664+ llama_seq_id seq_id,
665+ llama_pos p0,
666+ llama_pos p1,
667+ int d);
668+
669+ // Returns the smallest position present in the memory for the specified sequence
670+ // This is typically non-zero only for SWA caches
671+ // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory
672+ // Return -1 if the sequence is empty
673+ LLAMA_API llama_pos llama_memory_seq_pos_min (
674+ llama_memory_t mem,
675+ llama_seq_id seq_id);
676+
677+ // Returns the largest position present in the memory for the specified sequence
678+ // Note that all positions in the range [pos_min, pos_max] are guaranteed to be present in the memory
679+ // Return -1 if the sequence is empty
680+ LLAMA_API llama_pos llama_memory_seq_pos_max (
681+ llama_memory_t mem,
682+ llama_seq_id seq_id);
683+
684+ // Check if the memory supports shifting
685+ LLAMA_API bool llama_memory_can_shift (llama_memory_t mem);
686+
687+ //
688+ // KV cache for self-attention (TODO: deprecate in favor of llama_memory)
613689 //
614690
615691 // Returns the number of tokens in the KV cache (slow, use only for debug)
@@ -623,7 +699,7 @@ extern "C" {
623699
624700 // Clear the KV cache - both cell info is erased and KV data is zeroed
625701 LLAMA_API void llama_kv_self_clear (
626- struct llama_context * ctx);
702+ struct llama_context * ctx);
627703
628704 // Removes all tokens that belong to the specified sequence and have positions in [p0, p1)
629705 // Returns false if a partial sequence cannot be removed. Removing a whole sequence never fails
@@ -694,22 +770,22 @@ extern "C" {
694770 // Defragment the KV cache
695771 // This will be applied:
696772 // - lazily on next llama_decode()
697- LLAMA_API DEPRECATED (void llama_kv_self_defrag (struct llama_context * ctx),
773+ DEPRECATED (LLAMA_API void llama_kv_self_defrag (struct llama_context * ctx),
698774 "simply remove this call, the context will automatically decide when to do a defragmentation based on 'defrag_thold'");
699775
700776 // Check if the context supports KV cache shifting
701777 LLAMA_API bool llama_kv_self_can_shift (const struct llama_context * ctx);
702778
703779 // Apply the KV cache updates (such as K-shifts, defragmentation, etc.)
704- LLAMA_API DEPRECATED (void llama_kv_self_update (struct llama_context * ctx),
780+ DEPRECATED (LLAMA_API void llama_kv_self_update (struct llama_context * ctx),
705781 "simply remove this call, updates are applied lazily on the next llama_decode()");
706782
707783 //
708784 // State / sessions
709785 //
710786
711787 // Returns the *actual* size in bytes of the state
712- // (logits, embedding and kv_cache )
788+ // (logits, embedding and memory )
713789 // Only use when saving the state, not when restoring it, otherwise the size may be too small.
714790 LLAMA_API size_t llama_state_get_size (struct llama_context * ctx);
715791 LLAMA_API DEPRECATED (size_t llama_get_state_size (struct llama_context * ctx),
@@ -765,12 +841,12 @@ extern "C" {
765841 size_t n_token_count),
766842 "use llama_state_save_file instead");
767843
768- // Get the exact size needed to copy the KV cache of a single sequence
844+ // Get the exact size needed to copy the state of a single sequence
769845 LLAMA_API size_t llama_state_seq_get_size (
770846 struct llama_context * ctx,
771847 llama_seq_id seq_id);
772848
773- // Copy the KV cache of a single sequence into the specified buffer
849+ // Copy the state of a single sequence into the specified buffer
774850 LLAMA_API size_t llama_state_seq_get_data (
775851 struct llama_context * ctx,
776852 uint8_t * dst,
@@ -836,16 +912,16 @@ extern "C" {
836912 // For encode-decoder contexts, processes the batch using the encoder.
837913 // Can store the encoder output internally for later use by the decoder's cross-attention layers.
838914 // 0 - success
839- // < 0 - error. the KV cache state is restored to the state before this call
915+ // < 0 - error. the memory state is restored to the state before this call
840916 LLAMA_API int32_t llama_encode (
841917 struct llama_context * ctx,
842918 struct llama_batch batch);
843919
844920 // Process a batch of tokens.
845- // Requires KV cache .
921+ // Requires the context to have a memory .
846922 // For encode-decoder contexts, processes the batch using the decoder.
847923 // Positive return values does not mean a fatal error, but rather a warning.
848- // Upon non-zero return values, the KV cache state is restored to the state before this call
924+ // Upon non-zero return values, the memory state is restored to the state before this call
849925 // 0 - success
850926 // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context)
851927 // 2 - aborted
0 commit comments