MCPcopy Create free account
hub / github.com/abetlen/llama-cpp-python / AttentionMemoryPolicy

Class AttentionMemoryPolicy

examples/server/server.py:12685–12740  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12683
12684
12685class AttentionMemoryPolicy(MemoryPolicy):
12686 def match_prefix(self, tokens: Sequence[int]) -> Tuple[int, int]:
12687 return self.scheduler.radix_trie.longest_prefix(
12688 tokens,
12689 preferred_sequences=self.scheduler.free_sequences,
12690 )
12691
12692 @staticmethod
12693 def reuse_len_for_request(request: CompletionRequest, match_length: int) -> int:
12694 needs_generation = (
12695 request.payload.max_tokens != 0
12696 and request.effective_max_len > len(request.prompt_tokens)
12697 )
12698 reuse_len = match_length
12699 if needs_generation and request.prompt_tokens:
12700 reuse_len = min(reuse_len, len(request.prompt_tokens) - 1)
12701 return request.prompt_plan.clamp_to_reusable_boundary(reuse_len)
12702
12703 def admit_request(self, request: CompletionRequest) -> None:
12704 match_seq_id = request.match_sequence_id
12705 match_length = request.match_length
12706 reuse_len = self.reuse_len_for_request(request, match_length)
12707 claimable = match_seq_id in self.scheduler.free_sequences
12708 if request.sequence_cache_match is not None:
12709 base_seq_id = self.scheduler.claim_unused_sequence()
12710 reuse_len, request.prompt_logits = self.scheduler.hydrate_sequence_cache_match(
12711 request,
12712 base_seq_id,
12713 )
12714 elif claimable:
12715 base_seq_id = self.scheduler.claim_free_sequence(match_seq_id)
12716 if self.scheduler.radix_trie.length(base_seq_id) > reuse_len:
12717 self.scheduler.truncate_sequence(base_seq_id, reuse_len)
12718 else:
12719 base_seq_id = self.scheduler.claim_unused_sequence()
12720 if reuse_len > 0 and match_seq_id >= 0:
12721 self.copy_prompt_state(match_seq_id, base_seq_id, reuse_len)
12722 sibling_count = request.internal_completion_count - 1
12723 sibling_seq_ids: List[int] = []
12724 for _ in range(sibling_count):
12725 seq_id = self.scheduler.claim_unused_sequence()
12726 sibling_seq_ids.append(seq_id)
12727 self.scheduler.activate_request(
12728 request,
12729 base_seq_id=base_seq_id,
12730 sibling_seq_ids=sibling_seq_ids,
12731 )
12732 request.prompt_cursor = reuse_len
12733 if request.prompt_cursor == len(request.prompt_tokens):
12734 request.prompt_done = True
12735 self.scheduler.maybe_save_sequence_cache(request)
12736 self.scheduler.start_completions(
12737 request,
12738 prompt_output_index=None,
12739 prompt_logits=request.prompt_logits,
12740 )
12741
12742

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…