@@ -638,6 +638,19 @@ Napi::Value AddonContext::GetSequenceKvCacheMinPosition(const Napi::CallbackInfo
638638
639639 return Napi::Number::New (info.Env (), minPosition);
640640}
641+ Napi::Value AddonContext::GetSequenceKvCacheMaxPosition (const Napi::CallbackInfo& info) {
642+ if (disposed) {
643+ Napi::Error::New (info.Env (), " Context is disposed" ).ThrowAsJavaScriptException ();
644+ return info.Env ().Undefined ();
645+ }
646+
647+ int32_t sequenceId = info[0 ].As <Napi::Number>().Int32Value ();
648+
649+
650+ const auto maxPosition = llama_kv_self_seq_pos_max (ctx, sequenceId);
651+
652+ return Napi::Number::New (info.Env (), maxPosition);
653+ }
641654Napi::Value AddonContext::DecodeBatch (const Napi::CallbackInfo& info) {
642655 AddonContextDecodeBatchWorker* worker = new AddonContextDecodeBatchWorker (info.Env (), this );
643656 worker->Queue ();
@@ -945,6 +958,7 @@ void AddonContext::init(Napi::Object exports) {
945958 InstanceMethod (" removeTokenCellsFromSequence" , &AddonContext::RemoveTokenCellsFromSequence),
946959 InstanceMethod (" shiftSequenceTokenCells" , &AddonContext::ShiftSequenceTokenCells),
947960 InstanceMethod (" getSequenceKvCacheMinPosition" , &AddonContext::GetSequenceKvCacheMinPosition),
961+ InstanceMethod (" getSequenceKvCacheMaxPosition" , &AddonContext::GetSequenceKvCacheMaxPosition),
948962 InstanceMethod (" decodeBatch" , &AddonContext::DecodeBatch),
949963 InstanceMethod (" sampleToken" , &AddonContext::SampleToken),
950964 InstanceMethod (" getEmbedding" , &AddonContext::GetEmbedding),
0 commit comments