return iparams;
}
+ if (params.ctx_shift && !llama_kv_cache_can_shift(lctx)) {
+ LOG_ERR("%s: KV cache shifting is not supported for this model (--no-context-shift to disable)'\n", __func__);
+ llama_free_model(model);
+ return iparams;
+ }
+
if (!params.control_vectors.empty()) {
if (params.control_vector_layer_start <= 0) params.control_vector_layer_start = 1;
if (params.control_vector_layer_end <= 0) params.control_vector_layer_end = llama_n_layer(model);
// Apply the KV cache updates (such as K-shifts, defragmentation, etc.)
LLAMA_API void llama_kv_cache_update(struct llama_context * ctx);
+ // Check if the context supports KV cache shifting
+ LLAMA_API bool llama_kv_cache_can_shift(struct llama_context * ctx);
+
//
// State / sessions
//
// apply K-shift if needed
if (lctx.model.hparams.rope_type != LLAMA_ROPE_TYPE_NONE && lctx.kv_self.has_shift) {
- if (lctx.model.arch == LLM_ARCH_DEEPSEEK2) { // not supported due to MLA
+ if (!llama_kv_cache_can_shift(&lctx)) {
GGML_ABORT("Deepseek2 does not support K-shift");
}
llama_kv_cache_update_internal(*ctx);
}
+bool llama_kv_cache_can_shift(struct llama_context * ctx) {
+ return ctx->model.arch != LLM_ARCH_DEEPSEEK2; // not supported due to MLA
+}
+
// deprecated
size_t llama_get_state_size(struct llama_context * ctx) {
return llama_state_get_size(ctx);