diff --git a/.github/workflows/pr-test-rust.yml b/.github/workflows/pr-test-rust.yml index 7b7526fdc8..c1cae2e61e 100644 --- a/.github/workflows/pr-test-rust.yml +++ b/.github/workflows/pr-test-rust.yml @@ -249,7 +249,7 @@ jobs: - name: Run Python unit tests run: | cd bindings/python - python3 -m pip install pytest pytest-cov pytest-xdist + python3 -m pip install pytest pytest-asyncio pytest-cov pytest-xdist pytest -q tests --cov=smg --cov-config=.coveragerc --cov-report=term-missing --cov-fail-under=80 - name: Run grpc_servicer unit tests diff --git a/.github/workflows/release-crates.yml b/.github/workflows/release-crates.yml index d99492a272..0da5b0957f 100644 --- a/.github/workflows/release-crates.yml +++ b/.github/workflows/release-crates.yml @@ -27,8 +27,6 @@ jobs: path: crates/protocols - crate: reasoning-parser path: crates/reasoning_parser - - crate: kv-index - path: crates/kv_index - crate: data-connector path: crates/data_connector - crate: wfaas @@ -59,6 +57,8 @@ jobs: fail-fast: false matrix: include: + - crate: kv-index + path: crates/kv_index - crate: tool-parser path: crates/tool_parser - crate: smg-grpc-client diff --git a/Cargo.lock b/Cargo.lock index 08a9784201..0612f6f5c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3738,7 +3738,7 @@ dependencies = [ [[package]] name = "kv-index" -version = "1.4.0" +version = "1.5.0" dependencies = [ "bincode", "blake3", @@ -3751,6 +3751,7 @@ dependencies = [ "rustc-hash 2.1.3", "serde", "serde_json", + "smg-radix-tree", "tokio", "tracing", "xxhash-rust", @@ -7719,7 +7720,7 @@ dependencies = [ [[package]] name = "smg-radix-tree" -version = "0.1.0" +version = "0.1.1" dependencies = [ "kv-index", "rustc-hash 2.1.3", diff --git a/Cargo.toml b/Cargo.toml index 17dee0caa4..e2b1f2bd89 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,8 +14,8 @@ llm-tokenizer = { version = "1.7.0", path = "crates/tokenizer" } smg-auth = { version = "1.2.3", path = "crates/auth" } smg-mcp = { version = "2.3.3", path = "crates/mcp" } smg-external-router = { version = "0.1.0", path = "crates/external_router" } -kv-index = { version = "1.4.0", path = "crates/kv_index" } -smg-radix-tree = { version = "0.1.0", path = "crates/radix_tree" } +kv-index = { version = "1.5.0", path = "crates/kv_index" } +smg-radix-tree = { version = "0.1.1", path = "crates/radix_tree" } smg-data-connector = { version = "2.3.4", path = "crates/data_connector", package = "data-connector" } llm-multimodal = { version = "1.11.0", path = "crates/multimodal" } smg-wasm = { version = "1.1.4", path = "crates/wasm", package = "smg-wasm" } diff --git a/bindings/golang/internal/proto/common.pb.go b/bindings/golang/internal/proto/common.pb.go index ee37c298bd..a172bf310f 100644 --- a/bindings/golang/internal/proto/common.pb.go +++ b/bindings/golang/internal/proto/common.pb.go @@ -21,6 +21,112 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Multimodal input modality, shared across engine protos so the servicers can +// route each request to the matching encoder (image vs video vs audio). +type Modality int32 + +const ( + Modality_MODALITY_UNSPECIFIED Modality = 0 + Modality_IMAGE Modality = 1 + Modality_AUDIO Modality = 2 + Modality_VIDEO Modality = 3 +) + +// Enum value maps for Modality. +var ( + Modality_name = map[int32]string{ + 0: "MODALITY_UNSPECIFIED", + 1: "IMAGE", + 2: "AUDIO", + 3: "VIDEO", + } + Modality_value = map[string]int32{ + "MODALITY_UNSPECIFIED": 0, + "IMAGE": 1, + "AUDIO": 2, + "VIDEO": 3, + } +) + +func (x Modality) Enum() *Modality { + p := new(Modality) + *p = x + return p +} + +func (x Modality) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Modality) Descriptor() protoreflect.EnumDescriptor { + return file_common_proto_enumTypes[0].Descriptor() +} + +func (Modality) Type() protoreflect.EnumType { + return &file_common_proto_enumTypes[0] +} + +func (x Modality) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Modality.Descriptor instead. +func (Modality) EnumDescriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{0} +} + +type KvGroupEvent_Operation int32 + +const ( + KvGroupEvent_INVALID KvGroupEvent_Operation = 0 + KvGroupEvent_STORE KvGroupEvent_Operation = 1 + KvGroupEvent_REMOVE KvGroupEvent_Operation = 2 + KvGroupEvent_CLEAR KvGroupEvent_Operation = 3 +) + +// Enum value maps for KvGroupEvent_Operation. +var ( + KvGroupEvent_Operation_name = map[int32]string{ + 0: "INVALID", + 1: "STORE", + 2: "REMOVE", + 3: "CLEAR", + } + KvGroupEvent_Operation_value = map[string]int32{ + "INVALID": 0, + "STORE": 1, + "REMOVE": 2, + "CLEAR": 3, + } +) + +func (x KvGroupEvent_Operation) Enum() *KvGroupEvent_Operation { + p := new(KvGroupEvent_Operation) + *p = x + return p +} + +func (x KvGroupEvent_Operation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (KvGroupEvent_Operation) Descriptor() protoreflect.EnumDescriptor { + return file_common_proto_enumTypes[1].Descriptor() +} + +func (KvGroupEvent_Operation) Type() protoreflect.EnumType { + return &file_common_proto_enumTypes[1] +} + +func (x KvGroupEvent_Operation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use KvGroupEvent_Operation.Descriptor instead. +func (KvGroupEvent_Operation) EnumDescriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{4, 0} +} + type GetTokenizerRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -160,8 +266,12 @@ type KvEventBatch struct { Timestamp float64 `protobuf:"fixed64,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` Events []*KvCacheEvent `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` DpRank *int32 `protobuf:"varint,4,opt,name=dp_rank,json=dpRank,proto3,oneof" json:"dp_rank,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Group metadata is learned from received events when the engine provides it. + // Legacy events remain unchanged when unset. + GroupEventsEnabled bool `protobuf:"varint,5,opt,name=group_events_enabled,json=groupEventsEnabled,proto3" json:"group_events_enabled,omitempty"` + GroupEvents []*KvGroupEvent `protobuf:"bytes,6,rep,name=group_events,json=groupEvents,proto3" json:"group_events,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *KvEventBatch) Reset() { @@ -222,6 +332,131 @@ func (x *KvEventBatch) GetDpRank() int32 { return 0 } +func (x *KvEventBatch) GetGroupEventsEnabled() bool { + if x != nil { + return x.GroupEventsEnabled + } + return false +} + +func (x *KvEventBatch) GetGroupEvents() []*KvGroupEvent { + if x != nil { + return x.GroupEvents + } + return nil +} + +// GPU-local reports, retaining opaque native keys and the complete token span. +// Sparse stores need not contain one hash per token block; no offsets are guessed. +type KvGroupEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + Operation KvGroupEvent_Operation `protobuf:"varint,1,opt,name=operation,proto3,enum=smg.grpc.common.KvGroupEvent_Operation" json:"operation,omitempty"` + GroupId uint32 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + BlockHashes [][]byte `protobuf:"bytes,3,rep,name=block_hashes,json=blockHashes,proto3" json:"block_hashes,omitempty"` + ParentBlockHash []byte `protobuf:"bytes,4,opt,name=parent_block_hash,json=parentBlockHash,proto3" json:"parent_block_hash,omitempty"` + TokenIds []uint32 `protobuf:"varint,5,rep,packed,name=token_ids,json=tokenIds,proto3" json:"token_ids,omitempty"` + BlockSize uint32 `protobuf:"varint,6,opt,name=block_size,json=blockSize,proto3" json:"block_size,omitempty"` + Kind string `protobuf:"bytes,7,opt,name=kind,proto3" json:"kind,omitempty"` + SlidingWindow uint32 `protobuf:"varint,8,opt,name=sliding_window,json=slidingWindow,proto3" json:"sliding_window,omitempty"` + // False when LoRA or extra hash inputs prevent token-only matching. + TokensMatchable bool `protobuf:"varint,9,opt,name=tokens_matchable,json=tokensMatchable,proto3" json:"tokens_matchable,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *KvGroupEvent) Reset() { + *x = KvGroupEvent{} + mi := &file_common_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KvGroupEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KvGroupEvent) ProtoMessage() {} + +func (x *KvGroupEvent) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KvGroupEvent.ProtoReflect.Descriptor instead. +func (*KvGroupEvent) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{4} +} + +func (x *KvGroupEvent) GetOperation() KvGroupEvent_Operation { + if x != nil { + return x.Operation + } + return KvGroupEvent_INVALID +} + +func (x *KvGroupEvent) GetGroupId() uint32 { + if x != nil { + return x.GroupId + } + return 0 +} + +func (x *KvGroupEvent) GetBlockHashes() [][]byte { + if x != nil { + return x.BlockHashes + } + return nil +} + +func (x *KvGroupEvent) GetParentBlockHash() []byte { + if x != nil { + return x.ParentBlockHash + } + return nil +} + +func (x *KvGroupEvent) GetTokenIds() []uint32 { + if x != nil { + return x.TokenIds + } + return nil +} + +func (x *KvGroupEvent) GetBlockSize() uint32 { + if x != nil { + return x.BlockSize + } + return 0 +} + +func (x *KvGroupEvent) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *KvGroupEvent) GetSlidingWindow() uint32 { + if x != nil { + return x.SlidingWindow + } + return 0 +} + +func (x *KvGroupEvent) GetTokensMatchable() bool { + if x != nil { + return x.TokensMatchable + } + return false +} + type KvCacheEvent struct { state protoimpl.MessageState `protogen:"open.v1"` EventId uint64 `protobuf:"varint,1,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` @@ -237,7 +472,7 @@ type KvCacheEvent struct { func (x *KvCacheEvent) Reset() { *x = KvCacheEvent{} - mi := &file_common_proto_msgTypes[4] + mi := &file_common_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -249,7 +484,7 @@ func (x *KvCacheEvent) String() string { func (*KvCacheEvent) ProtoMessage() {} func (x *KvCacheEvent) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[4] + mi := &file_common_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -262,7 +497,7 @@ func (x *KvCacheEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use KvCacheEvent.ProtoReflect.Descriptor instead. func (*KvCacheEvent) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{4} + return file_common_proto_rawDescGZIP(), []int{5} } func (x *KvCacheEvent) GetEventId() uint64 { @@ -338,7 +573,7 @@ type KvBlocksStored struct { func (x *KvBlocksStored) Reset() { *x = KvBlocksStored{} - mi := &file_common_proto_msgTypes[5] + mi := &file_common_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -350,7 +585,7 @@ func (x *KvBlocksStored) String() string { func (*KvBlocksStored) ProtoMessage() {} func (x *KvBlocksStored) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[5] + mi := &file_common_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -363,7 +598,7 @@ func (x *KvBlocksStored) ProtoReflect() protoreflect.Message { // Deprecated: Use KvBlocksStored.ProtoReflect.Descriptor instead. func (*KvBlocksStored) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{5} + return file_common_proto_rawDescGZIP(), []int{6} } func (x *KvBlocksStored) GetBlocks() []*KvBlock { @@ -393,7 +628,7 @@ type KvBlock struct { func (x *KvBlock) Reset() { *x = KvBlock{} - mi := &file_common_proto_msgTypes[6] + mi := &file_common_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -405,7 +640,7 @@ func (x *KvBlock) String() string { func (*KvBlock) ProtoMessage() {} func (x *KvBlock) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[6] + mi := &file_common_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -418,7 +653,7 @@ func (x *KvBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use KvBlock.ProtoReflect.Descriptor instead. func (*KvBlock) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{6} + return file_common_proto_rawDescGZIP(), []int{7} } func (x *KvBlock) GetBlockHash() int64 { @@ -466,7 +701,7 @@ type KvBlocksRemoved struct { func (x *KvBlocksRemoved) Reset() { *x = KvBlocksRemoved{} - mi := &file_common_proto_msgTypes[7] + mi := &file_common_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -478,7 +713,7 @@ func (x *KvBlocksRemoved) String() string { func (*KvBlocksRemoved) ProtoMessage() {} func (x *KvBlocksRemoved) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[7] + mi := &file_common_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -491,7 +726,7 @@ func (x *KvBlocksRemoved) ProtoReflect() protoreflect.Message { // Deprecated: Use KvBlocksRemoved.ProtoReflect.Descriptor instead. func (*KvBlocksRemoved) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{7} + return file_common_proto_rawDescGZIP(), []int{8} } func (x *KvBlocksRemoved) GetBlockHashes() []int64 { @@ -516,7 +751,7 @@ type KvCacheCleared struct { func (x *KvCacheCleared) Reset() { *x = KvCacheCleared{} - mi := &file_common_proto_msgTypes[8] + mi := &file_common_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -528,7 +763,7 @@ func (x *KvCacheCleared) String() string { func (*KvCacheCleared) ProtoMessage() {} func (x *KvCacheCleared) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[8] + mi := &file_common_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -541,7 +776,7 @@ func (x *KvCacheCleared) ProtoReflect() protoreflect.Message { // Deprecated: Use KvCacheCleared.ProtoReflect.Descriptor instead. func (*KvCacheCleared) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{8} + return file_common_proto_rawDescGZIP(), []int{9} } type FlushCacheRequest struct { @@ -555,7 +790,7 @@ type FlushCacheRequest struct { func (x *FlushCacheRequest) Reset() { *x = FlushCacheRequest{} - mi := &file_common_proto_msgTypes[9] + mi := &file_common_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -567,7 +802,7 @@ func (x *FlushCacheRequest) String() string { func (*FlushCacheRequest) ProtoMessage() {} func (x *FlushCacheRequest) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[9] + mi := &file_common_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -580,7 +815,7 @@ func (x *FlushCacheRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FlushCacheRequest.ProtoReflect.Descriptor instead. func (*FlushCacheRequest) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{9} + return file_common_proto_rawDescGZIP(), []int{10} } func (x *FlushCacheRequest) GetTimeoutS() float32 { @@ -600,7 +835,7 @@ type FlushCacheResponse struct { func (x *FlushCacheResponse) Reset() { *x = FlushCacheResponse{} - mi := &file_common_proto_msgTypes[10] + mi := &file_common_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -612,7 +847,7 @@ func (x *FlushCacheResponse) String() string { func (*FlushCacheResponse) ProtoMessage() {} func (x *FlushCacheResponse) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[10] + mi := &file_common_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -625,7 +860,7 @@ func (x *FlushCacheResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FlushCacheResponse.ProtoReflect.Descriptor instead. func (*FlushCacheResponse) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{10} + return file_common_proto_rawDescGZIP(), []int{11} } func (x *FlushCacheResponse) GetSuccess() bool { @@ -661,7 +896,7 @@ type StartProfileRequest struct { func (x *StartProfileRequest) Reset() { *x = StartProfileRequest{} - mi := &file_common_proto_msgTypes[11] + mi := &file_common_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -673,7 +908,7 @@ func (x *StartProfileRequest) String() string { func (*StartProfileRequest) ProtoMessage() {} func (x *StartProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[11] + mi := &file_common_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -686,7 +921,7 @@ func (x *StartProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartProfileRequest.ProtoReflect.Descriptor instead. func (*StartProfileRequest) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{11} + return file_common_proto_rawDescGZIP(), []int{12} } func (x *StartProfileRequest) GetOutputDir() string { @@ -746,7 +981,7 @@ type StopProfileRequest struct { func (x *StopProfileRequest) Reset() { *x = StopProfileRequest{} - mi := &file_common_proto_msgTypes[12] + mi := &file_common_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -758,7 +993,7 @@ func (x *StopProfileRequest) String() string { func (*StopProfileRequest) ProtoMessage() {} func (x *StopProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[12] + mi := &file_common_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -771,7 +1006,7 @@ func (x *StopProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopProfileRequest.ProtoReflect.Descriptor instead. func (*StopProfileRequest) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{12} + return file_common_proto_rawDescGZIP(), []int{13} } type ProfileResponse struct { @@ -784,7 +1019,7 @@ type ProfileResponse struct { func (x *ProfileResponse) Reset() { *x = ProfileResponse{} - mi := &file_common_proto_msgTypes[13] + mi := &file_common_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -796,7 +1031,7 @@ func (x *ProfileResponse) String() string { func (*ProfileResponse) ProtoMessage() {} func (x *ProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_common_proto_msgTypes[13] + mi := &file_common_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -809,7 +1044,7 @@ func (x *ProfileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileResponse.ProtoReflect.Descriptor instead. func (*ProfileResponse) Descriptor() ([]byte, []int) { - return file_common_proto_rawDescGZIP(), []int{13} + return file_common_proto_rawDescGZIP(), []int{14} } func (x *ProfileResponse) GetSuccess() bool { @@ -826,6 +1061,136 @@ func (x *ProfileResponse) GetMessage() string { return "" } +type ShmHandle struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + Nbytes uint64 `protobuf:"varint,3,opt,name=nbytes,proto3" json:"nbytes,omitempty"` + // Producer/lifetime owner. Used by implementations to coordinate cleanup. + OwnerId string `protobuf:"bytes,4,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ShmHandle) Reset() { + *x = ShmHandle{} + mi := &file_common_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ShmHandle) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShmHandle) ProtoMessage() {} + +func (x *ShmHandle) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShmHandle.ProtoReflect.Descriptor instead. +func (*ShmHandle) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{15} +} + +func (x *ShmHandle) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ShmHandle) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *ShmHandle) GetNbytes() uint64 { + if x != nil { + return x.Nbytes + } + return 0 +} + +func (x *ShmHandle) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +type RemoteTensorHandle struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Examples: "nixl", "ucx", "object_store". + Transport string `protobuf:"bytes,1,opt,name=transport,proto3" json:"transport,omitempty"` + Descriptor_ []byte `protobuf:"bytes,2,opt,name=descriptor,proto3" json:"descriptor,omitempty"` + Nbytes uint64 `protobuf:"varint,3,opt,name=nbytes,proto3" json:"nbytes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoteTensorHandle) Reset() { + *x = RemoteTensorHandle{} + mi := &file_common_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoteTensorHandle) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoteTensorHandle) ProtoMessage() {} + +func (x *RemoteTensorHandle) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoteTensorHandle.ProtoReflect.Descriptor instead. +func (*RemoteTensorHandle) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{16} +} + +func (x *RemoteTensorHandle) GetTransport() string { + if x != nil { + return x.Transport + } + return "" +} + +func (x *RemoteTensorHandle) GetDescriptor_() []byte { + if x != nil { + return x.Descriptor_ + } + return nil +} + +func (x *RemoteTensorHandle) GetNbytes() uint64 { + if x != nil { + return x.Nbytes + } + return 0 +} + var File_common_proto protoreflect.FileDescriptor const file_common_proto_rawDesc = "" + @@ -836,14 +1201,33 @@ const file_common_proto_rawDesc = "" + "\x04data\x18\x01 \x01(\fR\x04data\x12\x16\n" + "\x06sha256\x18\x02 \x01(\tR\x06sha256\"N\n" + "\x18SubscribeKvEventsRequest\x122\n" + - "\x15start_sequence_number\x18\x01 \x01(\x04R\x13startSequenceNumber\"\xb6\x01\n" + + "\x15start_sequence_number\x18\x01 \x01(\x04R\x13startSequenceNumber\"\xaa\x02\n" + "\fKvEventBatch\x12'\n" + "\x0fsequence_number\x18\x01 \x01(\x04R\x0esequenceNumber\x12\x1c\n" + "\ttimestamp\x18\x02 \x01(\x01R\ttimestamp\x125\n" + "\x06events\x18\x03 \x03(\v2\x1d.smg.grpc.common.KvCacheEventR\x06events\x12\x1c\n" + - "\adp_rank\x18\x04 \x01(\x05H\x00R\x06dpRank\x88\x01\x01B\n" + + "\adp_rank\x18\x04 \x01(\x05H\x00R\x06dpRank\x88\x01\x01\x120\n" + + "\x14group_events_enabled\x18\x05 \x01(\bR\x12groupEventsEnabled\x12@\n" + + "\fgroup_events\x18\x06 \x03(\v2\x1d.smg.grpc.common.KvGroupEventR\vgroupEventsB\n" + + "\n" + + "\b_dp_rank\"\x9d\x03\n" + + "\fKvGroupEvent\x12E\n" + + "\toperation\x18\x01 \x01(\x0e2'.smg.grpc.common.KvGroupEvent.OperationR\toperation\x12\x19\n" + + "\bgroup_id\x18\x02 \x01(\rR\agroupId\x12!\n" + + "\fblock_hashes\x18\x03 \x03(\fR\vblockHashes\x12*\n" + + "\x11parent_block_hash\x18\x04 \x01(\fR\x0fparentBlockHash\x12\x1b\n" + + "\ttoken_ids\x18\x05 \x03(\rR\btokenIds\x12\x1d\n" + "\n" + - "\b_dp_rank\"\xe7\x01\n" + + "block_size\x18\x06 \x01(\rR\tblockSize\x12\x12\n" + + "\x04kind\x18\a \x01(\tR\x04kind\x12%\n" + + "\x0esliding_window\x18\b \x01(\rR\rslidingWindow\x12)\n" + + "\x10tokens_matchable\x18\t \x01(\bR\x0ftokensMatchable\":\n" + + "\tOperation\x12\v\n" + + "\aINVALID\x10\x00\x12\t\n" + + "\x05STORE\x10\x01\x12\n" + + "\n" + + "\x06REMOVE\x10\x02\x12\t\n" + + "\x05CLEAR\x10\x03\"\xe7\x01\n" + "\fKvCacheEvent\x12\x19\n" + "\bevent_id\x18\x01 \x01(\x04R\aeventId\x129\n" + "\x06stored\x18\x02 \x01(\v2\x1f.smg.grpc.common.KvBlocksStoredH\x00R\x06stored\x12<\n" + @@ -899,7 +1283,23 @@ const file_common_proto_rawDesc = "" + "\x12StopProfileRequest\"E\n" + "\x0fProfileResponse\x12\x18\n" + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x18\n" + - "\amessage\x18\x02 \x01(\tR\amessageb\x06proto3" + "\amessage\x18\x02 \x01(\tR\amessage\"j\n" + + "\tShmHandle\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06offset\x18\x02 \x01(\x04R\x06offset\x12\x16\n" + + "\x06nbytes\x18\x03 \x01(\x04R\x06nbytes\x12\x19\n" + + "\bowner_id\x18\x04 \x01(\tR\aownerId\"j\n" + + "\x12RemoteTensorHandle\x12\x1c\n" + + "\ttransport\x18\x01 \x01(\tR\ttransport\x12\x1e\n" + + "\n" + + "descriptor\x18\x02 \x01(\fR\n" + + "descriptor\x12\x16\n" + + "\x06nbytes\x18\x03 \x01(\x04R\x06nbytes*E\n" + + "\bModality\x12\x18\n" + + "\x14MODALITY_UNSPECIFIED\x10\x00\x12\t\n" + + "\x05IMAGE\x10\x01\x12\t\n" + + "\x05AUDIO\x10\x02\x12\t\n" + + "\x05VIDEO\x10\x03b\x06proto3" var ( file_common_proto_rawDescOnce sync.Once @@ -913,34 +1313,42 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_common_proto_goTypes = []any{ - (*GetTokenizerRequest)(nil), // 0: smg.grpc.common.GetTokenizerRequest - (*GetTokenizerChunk)(nil), // 1: smg.grpc.common.GetTokenizerChunk - (*SubscribeKvEventsRequest)(nil), // 2: smg.grpc.common.SubscribeKvEventsRequest - (*KvEventBatch)(nil), // 3: smg.grpc.common.KvEventBatch - (*KvCacheEvent)(nil), // 4: smg.grpc.common.KvCacheEvent - (*KvBlocksStored)(nil), // 5: smg.grpc.common.KvBlocksStored - (*KvBlock)(nil), // 6: smg.grpc.common.KvBlock - (*KvBlocksRemoved)(nil), // 7: smg.grpc.common.KvBlocksRemoved - (*KvCacheCleared)(nil), // 8: smg.grpc.common.KvCacheCleared - (*FlushCacheRequest)(nil), // 9: smg.grpc.common.FlushCacheRequest - (*FlushCacheResponse)(nil), // 10: smg.grpc.common.FlushCacheResponse - (*StartProfileRequest)(nil), // 11: smg.grpc.common.StartProfileRequest - (*StopProfileRequest)(nil), // 12: smg.grpc.common.StopProfileRequest - (*ProfileResponse)(nil), // 13: smg.grpc.common.ProfileResponse + (Modality)(0), // 0: smg.grpc.common.Modality + (KvGroupEvent_Operation)(0), // 1: smg.grpc.common.KvGroupEvent.Operation + (*GetTokenizerRequest)(nil), // 2: smg.grpc.common.GetTokenizerRequest + (*GetTokenizerChunk)(nil), // 3: smg.grpc.common.GetTokenizerChunk + (*SubscribeKvEventsRequest)(nil), // 4: smg.grpc.common.SubscribeKvEventsRequest + (*KvEventBatch)(nil), // 5: smg.grpc.common.KvEventBatch + (*KvGroupEvent)(nil), // 6: smg.grpc.common.KvGroupEvent + (*KvCacheEvent)(nil), // 7: smg.grpc.common.KvCacheEvent + (*KvBlocksStored)(nil), // 8: smg.grpc.common.KvBlocksStored + (*KvBlock)(nil), // 9: smg.grpc.common.KvBlock + (*KvBlocksRemoved)(nil), // 10: smg.grpc.common.KvBlocksRemoved + (*KvCacheCleared)(nil), // 11: smg.grpc.common.KvCacheCleared + (*FlushCacheRequest)(nil), // 12: smg.grpc.common.FlushCacheRequest + (*FlushCacheResponse)(nil), // 13: smg.grpc.common.FlushCacheResponse + (*StartProfileRequest)(nil), // 14: smg.grpc.common.StartProfileRequest + (*StopProfileRequest)(nil), // 15: smg.grpc.common.StopProfileRequest + (*ProfileResponse)(nil), // 16: smg.grpc.common.ProfileResponse + (*ShmHandle)(nil), // 17: smg.grpc.common.ShmHandle + (*RemoteTensorHandle)(nil), // 18: smg.grpc.common.RemoteTensorHandle } var file_common_proto_depIdxs = []int32{ - 4, // 0: smg.grpc.common.KvEventBatch.events:type_name -> smg.grpc.common.KvCacheEvent - 5, // 1: smg.grpc.common.KvCacheEvent.stored:type_name -> smg.grpc.common.KvBlocksStored - 7, // 2: smg.grpc.common.KvCacheEvent.removed:type_name -> smg.grpc.common.KvBlocksRemoved - 8, // 3: smg.grpc.common.KvCacheEvent.cleared:type_name -> smg.grpc.common.KvCacheCleared - 6, // 4: smg.grpc.common.KvBlocksStored.blocks:type_name -> smg.grpc.common.KvBlock - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 7, // 0: smg.grpc.common.KvEventBatch.events:type_name -> smg.grpc.common.KvCacheEvent + 6, // 1: smg.grpc.common.KvEventBatch.group_events:type_name -> smg.grpc.common.KvGroupEvent + 1, // 2: smg.grpc.common.KvGroupEvent.operation:type_name -> smg.grpc.common.KvGroupEvent.Operation + 8, // 3: smg.grpc.common.KvCacheEvent.stored:type_name -> smg.grpc.common.KvBlocksStored + 10, // 4: smg.grpc.common.KvCacheEvent.removed:type_name -> smg.grpc.common.KvBlocksRemoved + 11, // 5: smg.grpc.common.KvCacheEvent.cleared:type_name -> smg.grpc.common.KvCacheCleared + 9, // 6: smg.grpc.common.KvBlocksStored.blocks:type_name -> smg.grpc.common.KvBlock + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -949,27 +1357,28 @@ func file_common_proto_init() { return } file_common_proto_msgTypes[3].OneofWrappers = []any{} - file_common_proto_msgTypes[4].OneofWrappers = []any{ + file_common_proto_msgTypes[5].OneofWrappers = []any{ (*KvCacheEvent_Stored)(nil), (*KvCacheEvent_Removed)(nil), (*KvCacheEvent_Cleared)(nil), } - file_common_proto_msgTypes[5].OneofWrappers = []any{} file_common_proto_msgTypes[6].OneofWrappers = []any{} file_common_proto_msgTypes[7].OneofWrappers = []any{} - file_common_proto_msgTypes[11].OneofWrappers = []any{} + file_common_proto_msgTypes[8].OneofWrappers = []any{} + file_common_proto_msgTypes[12].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_common_proto_rawDesc), len(file_common_proto_rawDesc)), - NumEnums: 0, - NumMessages: 14, + NumEnums: 2, + NumMessages: 17, NumExtensions: 0, NumServices: 0, }, GoTypes: file_common_proto_goTypes, DependencyIndexes: file_common_proto_depIdxs, + EnumInfos: file_common_proto_enumTypes, MessageInfos: file_common_proto_msgTypes, }.Build() File_common_proto = out.File diff --git a/crates/grpc_client/proto/common.proto b/crates/grpc_client/proto/common.proto index 1c01886f05..f53183591f 100644 --- a/crates/grpc_client/proto/common.proto +++ b/crates/grpc_client/proto/common.proto @@ -26,6 +26,31 @@ message KvEventBatch { double timestamp = 2; repeated KvCacheEvent events = 3; optional int32 dp_rank = 4; + // Group metadata is learned from received events when the engine provides it. + // Legacy events remain unchanged when unset. + bool group_events_enabled = 5; + repeated KvGroupEvent group_events = 6; +} + +// GPU-local reports, retaining opaque native keys and the complete token span. +// Sparse stores need not contain one hash per token block; no offsets are guessed. +message KvGroupEvent { + enum Operation { + INVALID = 0; + STORE = 1; + REMOVE = 2; + CLEAR = 3; + } + Operation operation = 1; + uint32 group_id = 2; + repeated bytes block_hashes = 3; + bytes parent_block_hash = 4; + repeated uint32 token_ids = 5; + uint32 block_size = 6; + string kind = 7; + uint32 sliding_window = 8; + // False when LoRA or extra hash inputs prevent token-only matching. + bool tokens_matchable = 9; } message KvCacheEvent { diff --git a/crates/kv_index/Cargo.toml b/crates/kv_index/Cargo.toml index db4f9f332a..4b5d61a8c0 100644 --- a/crates/kv_index/Cargo.toml +++ b/crates/kv_index/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kv-index" -version = "1.4.0" +version = "1.5.0" edition = "2021" description = "Radix tree implementations for prefix matching and cache-aware routing" license = "Apache-2.0" @@ -14,6 +14,7 @@ keywords = ["radix-tree", "prefix-matching", "cache-routing", "llm"] categories = ["data-structures", "caching"] [dependencies] +smg-radix-tree = { workspace = true } bincode = "1.3" blake3 = { workspace = true } dashmap = { workspace = true } diff --git a/crates/kv_index/src/group_cache.rs b/crates/kv_index/src/group_cache.rs new file mode 100644 index 0000000000..ed605a7ec2 --- /dev/null +++ b/crates/kv_index/src/group_cache.rs @@ -0,0 +1,405 @@ +//! Cache evidence reconstructed from received group events, not an engine snapshot. + +use radix_tree::{Config, OverlapScratch, PrefixContext, RadixTree}; +use rustc_hash::FxHashMap; + +pub type CacheKey = Vec; + +#[derive(Clone, Debug)] +pub enum GroupEvent { + Store { + group_id: u32, + kind: String, + window: usize, + keys: Vec, + parent: Option, + tokens: Vec, + block_size: usize, + tokens_matchable: bool, + }, + Remove { + group_id: u32, + keys: Vec, + }, + Clear, + Invalid, +} + +#[derive(Default)] +struct Group { + metadata: Option<(String, usize)>, + reported: FxHashMap, +} + +/// One worker's observation session. Live descendants keep their ancestry; +/// wholly evicted histories may be forgotten. Discontinuity discards the view. +pub struct GroupCache { + index: RadixTree, + groups: FxHashMap, + positions: FxHashMap, + by_prefix: FxHashMap>, + pending: FxHashMap>>, + parents_by_child: FxHashMap>, + last_sequence: Option, +} + +impl Default for GroupCache { + fn default() -> Self { + Self { + index: RadixTree::new(Config { + // Token positions use u32; this is not a cache capacity policy. + max_chain_len: u32::MAX, + }), + groups: FxHashMap::default(), + positions: FxHashMap::default(), + by_prefix: FxHashMap::default(), + pending: FxHashMap::default(), + parents_by_child: FxHashMap::default(), + last_sequence: None, + } + } +} + +/// Token identities prepared once across workers, before cache read guards. +pub struct GroupRequest { + contents: Vec, +} + +impl GroupRequest { + pub fn new(tokens: &[u32]) -> Self { + Self { + contents: tokens.iter().map(|&token| u64::from(token)).collect(), + } + } +} + +impl GroupCache { + pub fn invalidate(&mut self) { + *self = Self::default(); + } + + pub fn apply_batch( + &mut self, + sequence: u64, + events: &[GroupEvent], + ) -> Result<(), &'static str> { + if let Some(previous) = self.last_sequence { + if sequence <= previous { + return Ok(()); + } + if previous.checked_add(1) != Some(sequence) { + self.invalidate(); + } + } + let mut changed = Vec::new(); + for event in events { + if let Err(reason) = self.apply(event, &mut changed) { + self.invalidate(); + return Err(reason); + } + } + self.reclaim(changed); + self.last_sequence = Some(sequence); + Ok(()) + } + + fn apply( + &mut self, + event: &GroupEvent, + changed: &mut Vec, + ) -> Result<(), &'static str> { + match event { + GroupEvent::Clear => { + // Clearing blocks does not retract the groups already reported. + for group in self.groups.values_mut() { + group.reported.clear(); + } + changed.extend(self.positions.keys().cloned()); + self.pending.clear(); + self.parents_by_child.clear(); + } + GroupEvent::Invalid => return Err("invalid group event"), + GroupEvent::Remove { group_id, keys } => { + let group = self.groups.entry(*group_id).or_default(); + for key in keys { + // A repeated STORE is not proof of another physical copy. + group.reported.remove(key); + changed.push(key.clone()); + } + } + GroupEvent::Store { + group_id, + kind, + window, + keys, + parent, + tokens, + block_size, + tokens_matchable, + } => { + if *block_size == 0 || keys.iter().any(Vec::is_empty) { + return Err("invalid group block identity or span"); + } + let group = self.groups.entry(*group_id).or_default(); + if let Some((old_kind, old_window)) = &group.metadata { + if old_kind != kind || old_window != window { + return Err("group metadata changed within one stream"); + } + } else { + group.metadata = Some((kind.clone(), *window)); + } + for key in keys { + group + .reported + .entry(key.clone()) + .and_modify(|span| *span = (*span).max(*block_size)) + .or_insert(*block_size); + changed.push(key.clone()); + } + // Sparse reports retain the entire token span but omit some + // hashes. Their positions can only come from other reports. + if *tokens_matchable && keys.len().checked_mul(*block_size) == Some(tokens.len()) { + let mut parent = parent.clone(); + for (key, chunk) in keys.iter().zip(tokens.chunks(*block_size)) { + self.learn(key.clone(), parent, chunk.to_vec(), changed)?; + parent = Some(key.clone()); + } + } + } + } + Ok(()) + } + + fn learn( + &mut self, + key: CacheKey, + parent: Option, + tokens: Vec, + changed: &mut Vec, + ) -> Result<(), &'static str> { + let mut ready = vec![(key, parent, tokens)]; + while let Some((key, parent, tokens)) = ready.pop() { + let base = match parent { + None => None, + Some(parent) => match self.positions.get(&parent).copied() { + Some(position) => Some(position), + None => { + if self.positions.contains_key(&key) { + continue; + } + // Different groups can describe the same endpoint via + // different parent/span pairs. Resolve either path. + let children = self.pending.entry(parent.clone()).or_default(); + if children.get(&key).is_some_and(|old| *old != tokens) { + return Err("conflicting tokens for one parent and child"); + } + if children.insert(key.clone(), tokens).is_none() { + self.parents_by_child.entry(key).or_default().push(parent); + } + continue; + } + }, + }; + let contents: Vec<_> = tokens.iter().map(|&token| u64::from(token)).collect(); + let position = self + .index + .learn_context(base, &contents) + .map_err(|_| "invalid group prefix context")?; + changed.push(key.clone()); + if let Some(old) = self.positions.get(&key) { + if *old != position { + return Err("conflicting native hash identity"); + } + continue; + } + self.positions.insert(key.clone(), position); + self.by_prefix + .entry(position) + .or_default() + .push(key.clone()); + // Once an identity is known, alternative unresolved descriptions + // are unnecessary. Dropping one can release its pending ancestors. + self.detach_pending_parents(&key, changed); + if let Some(children) = self.pending.remove(&key) { + for (child, tokens) in children { + if let Some(parents) = self.parents_by_child.get_mut(&child) { + parents.retain(|parent| parent != &key); + if parents.is_empty() { + self.parents_by_child.remove(&child); + } + } + ready.push((child, Some(key.clone()), tokens)); + } + } + } + Ok(()) + } + + fn needed(&self, key: &CacheKey) -> bool { + self.groups + .values() + .any(|group| group.reported.contains_key(key)) + || self.pending.contains_key(key) + } + + fn detach_pending_parents(&mut self, key: &CacheKey, changed: &mut Vec) { + if let Some(parents) = self.parents_by_child.remove(key) { + for parent in parents { + if let Some(children) = self.pending.get_mut(&parent) { + children.remove(key); + if children.is_empty() { + self.pending.remove(&parent); + } + } + changed.push(parent); + } + } + } + + fn reclaim(&mut self, mut changed: Vec) { + // Re-pin returning evidence before releasing anything: a sparse STORE + // can revive an old endpoint while its last child is removed in this batch. + for key in &changed { + if self.needed(key) { + if let Some(&context) = self.positions.get(key) { + self.index.retain_context(context); + } + } + } + while let Some(key) = changed.pop() { + if self.needed(&key) { + continue; + } + self.detach_pending_parents(&key, &mut changed); + if let Some(&context) = self.positions.get(&key) { + if !self.by_prefix[&context] + .iter() + .any(|alias| self.needed(alias)) + { + self.index.release_context(context); + } + } + } + // The core retains ancestors of live chains and collects whole chains. + // Forget native identities only when their backing chain is gone. + for context in self.index.drain_retired_contexts() { + if let Some(keys) = self.by_prefix.remove(&context) { + for key in keys { + self.positions.remove(&key); + } + } + } + } + + /// A common boundary supported by resolved reports for the observed groups. + /// Unresolved histories may hide additional matches. Native scheduling may + /// impose other constraints; this is neither a cache reservation nor its + /// exact current reusable-token count. + pub fn reusable_tokens(&self, request: &GroupRequest) -> Option { + if self.groups.is_empty() { + return None; + } + let mut limit = request.contents.len().saturating_sub(1); + let mut endpoints = Vec::new(); + self.index.matching_contexts( + &request.contents, + &mut OverlapScratch::default(), + &mut endpoints, + ); + let matching: Vec<_> = endpoints + .iter() + .flat_map(|endpoint| { + self.by_prefix[endpoint] + .iter() + .map(move |key| (key, endpoint.depth() as usize)) + }) + .collect(); + let mut views = Vec::new(); + let mut candidates = vec![0]; + for group in self.groups.values() { + let (kind, window) = group.metadata.as_ref()?; + if !matches!( + kind.as_str(), + "full_attention" | "mla_attention" | "sliding_window" | "mamba" + ) || (kind == "sliding_window" && *window == 0) + { + return None; + } + let mut intervals: Vec<_> = matching + .iter() + .filter_map(|(key, end)| { + let span = group.reported.get(*key)?; + end.checked_sub(*span).map(|start| (start, *end)) + }) + .collect(); + if kind == "sliding_window" { + intervals.sort_unstable(); + } + candidates.extend( + intervals + .iter() + .map(|&(_, end)| end) + .filter(|&end| end <= limit), + ); + if matches!(kind.as_str(), "full_attention" | "mla_attention") { + // Full attention needs continuous coverage from zero. Compute + // its bound once, rather than again for every candidate. + let mut covered = 0; + for &(start, end) in &intervals { + // Endpoints arrive in depth order. A later span may + // bridge a gap; earlier skipped spans cannot extend it. + if start <= covered { + covered = end; + } + } + limit = limit.min(covered); + } else { + views.push((kind.as_str(), *window, intervals)); + } + } + candidates.retain(|&end| end <= limit); + candidates.sort_unstable(); + candidates.dedup(); + // Each range/candidate cursor advances only once through its group. + for (kind, window, intervals) in views { + let mut ranges: Vec<(usize, usize)> = Vec::new(); + if kind == "mamba" { + ranges.extend(intervals.iter().map(|&(_, end)| (end, end))); + } else { + for (start, end) in intervals { + if let Some(last) = ranges.last_mut().filter(|last| start <= last.1) { + last.1 = last.1.max(end); + } else { + ranges.push((start, end)); + } + } + let lookback = window.saturating_sub(1).max(1); + ranges.retain_mut(|(start, end)| { + if *start == 0 { + return true; + } + if *end - *start < lookback { + return false; + } + *start += lookback; + true + }); + } + let mut cursor = 0; + candidates.retain(|&position| { + while cursor < ranges.len() && ranges[cursor].1 < position { + cursor += 1; + } + position == 0 + || ranges + .get(cursor) + .is_some_and(|&(start, _)| start <= position) + }); + } + candidates.last().copied() + } +} + +#[cfg(test)] +#[path = "group_cache_tests.rs"] +mod tests; diff --git a/crates/kv_index/src/group_cache_tests.rs b/crates/kv_index/src/group_cache_tests.rs new file mode 100644 index 0000000000..08244cb57b --- /dev/null +++ b/crates/kv_index/src/group_cache_tests.rs @@ -0,0 +1,783 @@ +use std::collections::BTreeSet; + +use serde_json::Value; + +use super::*; + +fn query(cache: &GroupCache, tokens: &[u32]) -> Option { + cache.reusable_tokens(&GroupRequest::new(tokens)) +} + +fn fixtures() -> Value { + serde_json::from_str(include_str!("../tests/fixtures/vllm-group-cache.json")).unwrap() +} + +fn number(value: &Value) -> usize { + value.as_u64().unwrap() as usize +} + +fn key(hex: &str) -> CacheKey { + assert!(hex.len().is_multiple_of(2)); + (0..hex.len()) + .step_by(2) + .map(|i| u8::from_str_radix(&hex[i..i + 2], 16).unwrap()) + .collect() +} + +fn opaque(end: usize) -> CacheKey { + (end as u64).to_be_bytes().to_vec() +} + +fn tokens(end: usize) -> Vec { + (1..=end as u32).collect() +} + +fn store( + group_id: u32, + kind: &str, + window: usize, + block_size: usize, + keys: Vec, + parent: Option, + tokens: Vec, +) -> GroupEvent { + GroupEvent::Store { + group_id, + kind: kind.to_owned(), + window, + keys, + parent, + tokens, + block_size, + tokens_matchable: true, + } +} + +fn root_report( + group_id: u32, + kind: &str, + window: usize, + span: usize, + ends: &[usize], + through: usize, +) -> GroupEvent { + store( + group_id, + kind, + window, + span, + ends.iter().map(|&end| opaque(end)).collect(), + None, + tokens(through), + ) +} + +fn apply(cache: &mut GroupCache, sequence: u64, events: &[GroupEvent]) { + cache.apply_batch(sequence, events).unwrap(); +} + +fn child_report(group_id: u32, kind: &str, window: usize, start: usize, end: usize) -> GroupEvent { + store( + group_id, + kind, + window, + end - start, + vec![opaque(end)], + (start > 0).then(|| opaque(start)), + ((start + 1) as u32..=end as u32).collect(), + ) +} + +fn remove(group_id: u32, ends: &[usize]) -> GroupEvent { + GroupEvent::Remove { + group_id, + keys: ends.iter().map(|&end| opaque(end)).collect(), + } +} + +// The snapshot adapter below explicitly seeds complete prefix history. Compute +// expectations from its declared cached endpoints using per-token coverage, +// independently of the SUT's hashes, interval sweep and event reconstruction. +fn fixture_expected(case: &Value) -> Option { + let request_len = number(&case["request_tokens"]); + let unit = number(&case["hash_block_size"]); + let mut candidates = BTreeSet::from([0]); + let mut requirements = Vec::new(); + for group in case["groups"].as_array().unwrap() { + let kind = group["kind"].as_str().unwrap(); + let window = group["window"].as_u64().unwrap_or(0) as usize; + if !matches!(kind, "full" | "swa" | "mamba") || (kind == "swa" && window == 0) { + return None; + } + let physical = number(&group["block_size"]); + let mut covered = vec![false; request_len]; + let mut checkpoints = BTreeSet::new(); + for end in group["cached"].as_array().unwrap().iter().map(number) { + let span = if end.is_multiple_of(physical) { + physical + } else { + unit + }; + if span > end || end > request_len { + continue; + } + covered[end - span..end].fill(true); + checkpoints.insert(end); + if end < request_len { + candidates.insert(end); + } + } + requirements.push((kind, window, covered, checkpoints)); + } + if requirements.is_empty() { + return None; + } + candidates.into_iter().rev().find(|&end| { + end == 0 + || requirements + .iter() + .all(|(kind, window, covered, checkpoints)| { + if *kind == "mamba" { + checkpoints.contains(&end) + } else { + let start = if *kind == "swa" { + end.saturating_sub(window.saturating_sub(1).max(1)) + } else { + 0 + }; + covered[start..end].iter().all(|&present| present) + } + }) + }) +} + +fn fixture_key(case: &Value, end: usize) -> CacheKey { + let unit = number(&case["hash_block_size"]); + assert_eq!(end % unit, 0); + if let Some(hash) = case["request_hashes"] + .as_array() + .unwrap() + .get(end / unit - 1) + { + key(hash.as_str().unwrap()) + } else { + // The fixture exports no native hash beyond its request. Preserve such + // history with a clearly synthetic opaque identity, not a forged digest. + let mut synthetic = b"fixture-history:".to_vec(); + synthetic.extend_from_slice(&(end as u64).to_be_bytes()); + synthetic + } +} + +// Old snapshots contain privileged endpoints. Make that context explicit in a +// synthetic received history: learn dense context, remove that membership, then +// report the desired entries. No endpoints, native alignment or spec equality +// are supplied directly to the SUT. This is not an original engine event trace. +fn fixture_events(case: &Value) -> Vec { + let unit = number(&case["hash_block_size"]); + let groups = case["groups"].as_array().unwrap(); + let through = groups + .iter() + .flat_map(|g| g["cached"].as_array().unwrap()) + .map(number) + .max() + .unwrap_or(0) + .max(number(&case["request_tokens"]) / unit * unit); + let context_keys: Vec<_> = (unit..=through) + .step_by(unit) + .map(|end| fixture_key(case, end)) + .collect(); + let mut events = Vec::new(); + for (id, group) in groups.iter().enumerate() { + let kind = match group["kind"].as_str().unwrap() { + "full" => "full_attention", + "swa" => "sliding_window", + other => other, + }; + let window = group["window"].as_u64().unwrap_or(0) as usize; + events.push(store( + id as u32, + kind, + window, + unit, + context_keys.clone(), + None, + tokens(through), + )); + events.push(GroupEvent::Remove { + group_id: id as u32, + keys: context_keys.clone(), + }); + let physical = number(&group["block_size"]); + for cached in group["cached"].as_array().unwrap() { + let end = number(cached); + let span = if end.is_multiple_of(physical) { + physical + } else { + unit + }; + let start = end - span; + events.push(store( + id as u32, + kind, + window, + span, + vec![fixture_key(case, end)], + (start > 0).then(|| fixture_key(case, start)), + ((start + 1) as u32..=end as u32).collect(), + )); + } + } + events +} + +fn classification(case: &Value) -> &'static str { + let groups = case["groups"].as_array().unwrap(); + if groups + .iter() + .any(|g| g["cacheable"] == false || g["kind"] == "noncacheable") + { + "unavailable prefix-cacheability and global alignment" + } else if case["partial_hash_hits"] == true { + "unavailable partial gate, physical extent, or exact spec equality" + } else if groups + .iter() + .map(|g| number(&g["block_size"])) + .collect::>() + .len() + > 1 + { + "unavailable native global alignment or partial gate" + } else { + "native expectation retained with explicit observed context" + } +} + +#[test] +fn received_state_fixture_scenarios_with_explicit_native_subset() { + let data = fixtures(); + let (mut total, mut native_subset) = (0, 0); + for collection in [ + "fixtures", + "randomized_fixtures", + "boundary_lookup_fixtures", + ] { + for case in data[collection].as_array().unwrap() { + let events = fixture_events(case); + let request = tokens(number(&case["request_tokens"])); + let expected = fixture_expected(case); + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &events); + assert_eq!( + query(&cache, &request), + expected, + "{}: {}", + case["name"], + classification(case) + ); + if classification(case) == "native expectation retained with explicit observed context" + { + assert_eq!( + expected, + Some(number(&case["expected_hit_tokens"])), + "native subset: {}", + case["name"] + ); + native_subset += 1; + } + total += 1; + } + } + assert_eq!((total, native_subset), (159, 63)); +} + +#[test] +fn newly_observed_group_joins_without_a_roster_or_contiguous_group_ids() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 17, + &[ + root_report(3, "full_attention", 0, 2, &[2, 4, 6, 8], 8), + root_report(9, "full_attention", 0, 2, &[2, 4, 6, 8], 8), + ], + ); + assert_eq!(query(&cache, &tokens(11)), Some(8)); + apply(&mut cache, 18, &[root_report(27, "mamba", 0, 2, &[6], 6)]); + assert_eq!(query(&cache, &tokens(11)), Some(6)); + apply(&mut cache, 19, &[remove(27, &[6])]); + assert_eq!(query(&cache, &tokens(11)), Some(0)); +} + +#[test] +fn sparse_joint_resume_is_24_even_though_independent_maxima_are_32_and_40() { + let mut cache = GroupCache::default(); + let all: Vec<_> = (4..=40).step_by(4).collect(); + apply( + &mut cache, + 0, + &[ + root_report(0, "full_attention", 0, 4, &all, 40), + remove(0, &[36, 40]), + ], + ); + assert_eq!(query(&cache, &tokens(41)), Some(32)); + apply( + &mut cache, + 1, + &[root_report(1, "mamba", 0, 4, &[24, 40], 40)], + ); + assert_eq!(query(&cache, &tokens(41)), Some(24)); +} + +#[test] +fn sparse_hashes_are_not_ordinal_zipped_and_cross_group_context_resolves_them() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[root_report(1, "mamba", 0, 2, &[4, 8, 10, 12], 12)], + ); + assert_eq!(query(&cache, &tokens(9)), Some(0)); + apply( + &mut cache, + 1, + &[root_report( + 0, + "full_attention", + 0, + 2, + &[2, 4, 6, 8, 10, 12], + 12, + )], + ); + assert_eq!(query(&cache, &tokens(7)), Some(4)); + assert_eq!(query(&cache, &tokens(9)), Some(8)); + assert_eq!(query(&cache, &tokens(13)), Some(12)); +} + +#[test] +fn wholly_evicted_history_requires_a_new_anchor() { + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[child_report(0, "mamba", 0, 2, 4)]); + assert_eq!(query(&cache, &[3, 4, 5]), Some(0)); + assert_eq!(query(&cache, &tokens(5)), Some(0)); + apply(&mut cache, 1, &[root_report(0, "mamba", 0, 2, &[2], 2)]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + apply(&mut cache, 2, &[remove(0, &[2, 4])]); + assert_eq!(query(&cache, &tokens(7)), Some(0)); + assert_eq!(cache.index.retained_contents(), 0); + assert!(cache.positions.is_empty()); + assert!(cache.by_prefix.is_empty()); + apply(&mut cache, 3, &[child_report(0, "mamba", 0, 4, 6)]); + assert_eq!(query(&cache, &tokens(7)), Some(0)); + assert_eq!(query(&cache, &[5, 6, 7]), Some(0)); + apply(&mut cache, 4, &[root_report(0, "mamba", 0, 4, &[4], 4)]); + assert_eq!(query(&cache, &tokens(7)), Some(6)); +} + +#[test] +fn pending_ancestry_lives_only_while_a_report_needs_it() { + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[child_report(0, "mamba", 0, 2, 4)]); + apply(&mut cache, 1, &[child_report(0, "mamba", 0, 4, 6)]); + apply(&mut cache, 2, &[remove(0, &[4])]); + assert_eq!(cache.pending.len(), 2); + apply(&mut cache, 3, &[root_report(0, "mamba", 0, 2, &[2], 2)]); + assert_eq!(query(&cache, &tokens(7)), Some(6)); + assert!(cache.pending.is_empty()); + assert!(cache.parents_by_child.is_empty()); + apply(&mut cache, 4, &[remove(0, &[2, 6])]); + assert_eq!(cache.index.retained_contents(), 0); + assert!(cache.positions.is_empty()); + + // The same dependency chain can disappear before its anchor arrives. + apply(&mut cache, 5, &[child_report(0, "mamba", 0, 2, 4)]); + apply(&mut cache, 6, &[child_report(0, "mamba", 0, 4, 6)]); + apply(&mut cache, 7, &[remove(0, &[4, 6])]); + assert!(cache.pending.is_empty()); + assert!(cache.parents_by_child.is_empty()); + assert_eq!(query(&cache, &tokens(7)), Some(0)); +} + +#[test] +fn one_batch_keeps_ancestry_until_new_reports_are_applied() { + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[root_report(0, "mamba", 0, 2, &[2], 2)]); + apply( + &mut cache, + 1, + &[remove(0, &[2]), child_report(0, "mamba", 0, 2, 4)], + ); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + assert!(cache.pending.is_empty()); +} + +#[test] +fn aliases_and_returning_sparse_reports_keep_their_shared_context() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[ + root_report(0, "mamba", 0, 2, &[2], 2), + store(0, "mamba", 0, 2, vec![opaque(99)], None, tokens(2)), + ], + ); + apply(&mut cache, 1, &[remove(0, &[2])]); + assert_eq!(query(&cache, &tokens(3)), Some(2)); + apply(&mut cache, 2, &[child_report(0, "mamba", 0, 2, 4)]); + apply(&mut cache, 3, &[remove(0, &[99])]); + // Endpoint 2 has been released, but its live descendant still holds the path. + let mut sparse = root_report(0, "mamba", 0, 2, &[2], 2); + if let GroupEvent::Store { + tokens_matchable, .. + } = &mut sparse + { + *tokens_matchable = false; + } + apply(&mut cache, 4, &[sparse, remove(0, &[4])]); + assert_eq!(query(&cache, &tokens(5)), Some(2)); + apply(&mut cache, 5, &[remove(0, &[2])]); + assert_eq!(cache.index.retained_contents(), 0); + assert!(cache.positions.is_empty()); + cache.index.audit().unwrap(); +} + +#[test] +fn repeated_reports_are_idempotent_and_one_remove_withdraws_the_key() { + let mut cache = GroupCache::default(); + let report = root_report(0, "full_attention", 0, 2, &[2, 4], 4); + apply(&mut cache, 0, std::slice::from_ref(&report)); + apply(&mut cache, 0, &[GroupEvent::Invalid]); + apply(&mut cache, 1, &[report]); + apply(&mut cache, 2, &[remove(0, &[4])]); + assert_eq!(query(&cache, &tokens(5)), Some(2)); + apply(&mut cache, 3, &[remove(0, &[4])]); + assert_eq!(query(&cache, &tokens(5)), Some(2)); + apply(&mut cache, 4, &[child_report(0, "full_attention", 0, 2, 4)]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); +} + +#[test] +fn clear_keeps_groups_but_gap_and_disconnect_start_new_observations() { + let mut cache = GroupCache::default(); + let a = root_report(0, "full_attention", 0, 2, &[2, 4], 4); + let b = root_report(1, "mamba", 0, 2, &[4], 4); + apply(&mut cache, 0, &[a.clone(), b.clone()]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + apply(&mut cache, 1, &[GroupEvent::Clear, a.clone()]); + assert_eq!(query(&cache, &tokens(5)), Some(0)); + apply(&mut cache, 2, &[b]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + apply(&mut cache, 4, std::slice::from_ref(&a)); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + apply(&mut cache, 3, &[GroupEvent::Invalid]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + cache.invalidate(); + assert_eq!(query(&cache, &tokens(5)), None); + apply(&mut cache, 31, &[a]); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + apply( + &mut cache, + 32, + &[child_report(0, "full_attention", 0, 8, 10)], + ); + assert!(!cache.pending.is_empty()); + apply(&mut cache, 33, &[GroupEvent::Clear]); + assert_eq!(query(&cache, &tokens(5)), Some(0)); + assert_eq!(cache.index.retained_contents(), 0); + assert!(cache.positions.is_empty()); + assert!(cache.by_prefix.is_empty()); + assert!(cache.pending.is_empty()); + assert!(cache.parents_by_child.is_empty()); +} + +#[test] +fn partial_report_span_is_not_physical_group_size_or_global_alignment() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[root_report(0, "full_attention", 0, 8, &[8], 8)], + ); + apply(&mut cache, 1, &[child_report(1, "mamba", 0, 4, 6)]); + assert_eq!(query(&cache, &tokens(9)), Some(0)); + apply( + &mut cache, + 2, + &[root_report(0, "full_attention", 0, 4, &[4], 4)], + ); + assert_eq!(query(&cache, &tokens(9)), Some(6)); + apply(&mut cache, 3, &[root_report(1, "mamba", 0, 8, &[8], 8)]); + assert_eq!(query(&cache, &tokens(9)), Some(8)); +} + +#[test] +fn raw_key_width_and_leading_bytes_are_identity() { + let keys = [vec![7], vec![0, 7], vec![7; 8], { + let mut wide = vec![0; 24]; + wide.extend_from_slice(&[7; 8]); + wide + }]; + let mut cache = GroupCache::default(); + for (i, key) in keys.iter().enumerate() { + let end = (i + 1) * 2; + apply( + &mut cache, + i as u64, + &[store( + 0, + "mamba", + 0, + end, + vec![key.clone()], + None, + tokens(end), + )], + ); + } + assert_eq!(query(&cache, &tokens(9)), Some(8)); + for (sequence, i) in (0..keys.len()).rev().enumerate() { + apply( + &mut cache, + (sequence + 4) as u64, + &[GroupEvent::Remove { + group_id: 0, + keys: vec![keys[i].clone()], + }], + ); + assert_eq!(query(&cache, &tokens(9)), Some(i * 2)); + } +} + +#[test] +fn removing_one_group_preserves_other_groups_using_the_same_key() { + let mut first = GroupCache::default(); + apply( + &mut first, + 0, + &[ + root_report(0, "full_attention", 0, 2, &[2], 2), + root_report(1, "mamba", 0, 2, &[2], 2), + ], + ); + apply(&mut first, 1, &[remove(0, &[2])]); + assert_eq!(query(&first, &tokens(3)), Some(0)); + apply( + &mut first, + 2, + &[root_report(0, "full_attention", 0, 2, &[2], 2)], + ); + assert_eq!(query(&first, &tokens(3)), Some(2)); +} + +#[test] +fn matching_tail_content_does_not_match_a_different_prefix() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[root_report(0, "mamba", 0, 2, &[2, 4], 4), remove(0, &[2])], + ); + assert_eq!(query(&cache, &tokens(5)), Some(4)); + assert_eq!(query(&cache, &[9, 9, 3, 4, 5]), Some(0)); +} + +#[test] +fn only_reported_endpoints_below_request_length_are_candidates() { + for kind in ["full_attention", "mla_attention"] { + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[root_report(0, kind, 0, 4, &[4, 8], 8)]); + assert_eq!(query(&cache, &tokens(10)), Some(8)); + assert_eq!(query(&cache, &tokens(8)), Some(4)); + assert_eq!(query(&cache, &tokens(7)), Some(4)); + assert_eq!(query(&cache, &[]), Some(0)); + } +} + +#[test] +fn unsupported_or_missing_group_metadata_is_unavailable() { + for kind in ["", "unknown", "chunked_local_attention"] { + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[root_report(0, kind, 0, 2, &[2], 2)]); + assert_eq!(query(&cache, &tokens(3)), None); + } + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[remove(7, &[2])]); + assert_eq!(query(&cache, &tokens(3)), None); + apply(&mut cache, 1, &[root_report(7, "mamba", 0, 2, &[2], 2)]); + assert_eq!(query(&cache, &tokens(3)), Some(2)); + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[root_report(0, "sliding_window", 0, 2, &[2], 2)], + ); + assert_eq!(query(&cache, &tokens(3)), None); +} + +#[test] +fn unmatchable_payload_does_not_invent_prefix_context() { + let mut report = root_report(0, "mamba", 0, 2, &[2], 2); + if let GroupEvent::Store { + tokens_matchable, .. + } = &mut report + { + *tokens_matchable = false; + } + let mut cache = GroupCache::default(); + apply(&mut cache, 0, &[report]); + assert_eq!(query(&cache, &tokens(3)), Some(0)); + assert!(cache.groups[&0].reported.contains_key(&opaque(2))); +} + +#[test] +fn malformed_or_conflicting_identity_discards_evidence() { + for invalid in [ + GroupEvent::Invalid, + store(0, "full_attention", 0, 0, vec![opaque(2)], None, tokens(2)), + store(0, "full_attention", 0, 2, vec![Vec::new()], None, tokens(2)), + ] { + let mut cache = GroupCache::default(); + assert!(cache.apply_batch(0, &[invalid]).is_err()); + assert_eq!(query(&cache, &tokens(3)), None); + } + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[root_report(0, "full_attention", 0, 2, &[2], 2)], + ); + assert!(cache + .apply_batch( + 1, + &[store( + 0, + "full_attention", + 0, + 2, + vec![opaque(2)], + None, + vec![9, 9] + )] + ) + .is_err()); + assert_eq!(query(&cache, &tokens(3)), None); + apply( + &mut cache, + 2, + &[root_report(0, "full_attention", 0, 2, &[2], 2)], + ); + assert!(cache + .apply_batch(3, &[root_report(0, "mamba", 0, 2, &[2], 2)]) + .is_err()); + assert_eq!(query(&cache, &tokens(3)), None); +} + +#[test] +fn same_known_endpoint_accepts_full_and_partial_reports_with_unknown_parents() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[ + root_report(0, "full_attention", 0, 16, &[16], 16), + child_report(1, "sliding_window", 9, 8, 16), + child_report(2, "mamba", 0, 14, 16), + ], + ); + assert_eq!(query(&cache, &tokens(17)), Some(16)); +} + +#[test] +fn either_unknown_parent_can_resolve_the_same_checkpoint() { + for first_parent in [8, 14] { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[ + child_report(0, "mamba", 0, 8, 16), + child_report(1, "mamba", 0, 14, 16), + ], + ); + assert_eq!(query(&cache, &tokens(17)), Some(0)); + apply( + &mut cache, + 1, + &[child_report(0, "mamba", 0, 0, first_parent)], + ); + assert_eq!(query(&cache, &tokens(17)), Some(16)); + + assert!(cache.pending.is_empty()); + assert!(cache.parents_by_child.is_empty()); + + let other_parent = if first_parent == 8 { 14 } else { 8 }; + apply( + &mut cache, + 2, + &[child_report(0, "mamba", 0, 0, other_parent)], + ); + assert_eq!(query(&cache, &tokens(17)), Some(16)); + } +} + +#[test] +fn reported_span_longer_than_resolved_prefix_cannot_supply_coverage() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[ + root_report(0, "mamba", 0, 2, &[2], 2), + root_report(1, "full_attention", 0, 8, &[2], 2), + ], + ); + assert_eq!(query(&cache, &tokens(3)), Some(0)); +} + +#[test] +fn later_full_report_can_bridge_an_earlier_gap() { + let mut cache = GroupCache::default(); + apply( + &mut cache, + 0, + &[ + root_report(0, "mamba", 0, 2, &[2, 4, 6, 8], 8), + child_report(1, "full_attention", 0, 2, 4), + child_report(1, "full_attention", 0, 0, 8), + ], + ); + assert_eq!(query(&cache, &tokens(9)), Some(8)); +} + +#[test] +fn multiple_million_token_prefixes_keep_affinity() { + let mut cache = GroupCache::default(); + let length = 1_048_576; + let block_size = 16; + let blocks = length / block_size; + // Two independent prompts on one worker exceed both former policy limits: + // 1.6M retained tokens and 100K native identities/live memberships. + for branch in 0..2 { + apply( + &mut cache, + branch as u64, + &[store( + 0, + "full_attention", + 0, + block_size, + (1..=blocks) + .map(|block| opaque(branch * blocks + block)) + .collect(), + None, + vec![branch as u32 + 1; length], + )], + ); + } + for token in [1, 2] { + assert_eq!(query(&cache, &vec![token; length + 1]), Some(length)); + } +} diff --git a/crates/kv_index/src/lib.rs b/crates/kv_index/src/lib.rs index fe62909c74..f8f0c781e3 100644 --- a/crates/kv_index/src/lib.rs +++ b/crates/kv_index/src/lib.rs @@ -13,6 +13,7 @@ mod common; mod event_tree; +pub mod group_cache; mod path_hash; pub mod snapshot; mod string_tree; diff --git a/crates/kv_index/tests/fixtures/vllm-group-cache.json b/crates/kv_index/tests/fixtures/vllm-group-cache.json new file mode 100644 index 0000000000..1959e59c3a --- /dev/null +++ b/crates/kv_index/tests/fixtures/vllm-group-cache.json @@ -0,0 +1 @@ +{"vllm_revision":"56d001faf0f53c72fcedbbdd77e5418f68fe7494","hash_algorithm":"sha256_cbor","none_hash_hex":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","none_hash_seed":"vllm-none-hash","source_provenance":[{"file":"vllm/utils/hashing.py","symbol":"sha256_cbor","line":43,"sha256":"1d39d867495a21a96402ff0fdec7c5b887742100d2f4a46b4e5772457c6af30a"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"make_block_hash_with_group_id","line":62,"sha256":"ecc4c9e962848582f7bf5e2eebe3fca28ec3339a99899002d1b9296e68000fc7"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"get_block_hash","line":74,"sha256":"fb7b6b524e3c44af2bee0c8a04cc42dff0e45ddcb330f76b4b3af0ee8d572479"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"get_group_id","line":79,"sha256":"b32c3b3ff8e736cafc9983411a2b2aac06eae3c92432024394a5fd96656d38da"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"maybe_convert_block_hash","line":84,"sha256":"6f3b4b938a71fe293eaa188a886de6cfaa3a257c7c57283d7e5ba8cf64b170e9"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"hash_block_tokens","line":622,"sha256":"df9adb42b0e989aab8bdb69cc489fbafe2318201dd040ce1eba991c0dbf3d6ef"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"KVCacheBlock","line":164,"sha256":"8512127d2bffb5af9d481df80bc23d077af6154bcd540f434aaf96a9c24bf4db"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"BlockHashListWithBlockSize","line":2677,"sha256":"ca62f828f1a69d7ffa0842ddf90ac8c24482e281edf63349072a65f72472900f"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"resolve_block_hashes","line":2753,"sha256":"2388374b3241a9d1b633780446234b2efd22b03f1d76ddb26a555d30e20ba74e"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockHashToBlockMap","line":33,"sha256":"fa14d01ccef50c0d8798a973031aff34dcd901fffc0115e53263ee79108a8341"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.get_cached_block","line":198,"sha256":"bd5a249a4470f28d324ba432d09eff0276e55e96d7a3142b9555a52a34d74eb1"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.cache_full_blocks","line":225,"sha256":"a79bd81bdf4430b4568cd63588c5026549b044fbd3d4fd2466c69fead52810d0"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._build_block_stored_event","line":344,"sha256":"16ce86ea94882d3755da116eebcf5e03a9582189a4722fe1fc149301a70986c3"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.emit_cached_block_events","line":374,"sha256":"25444882887cceb44ef70c93ca9222752af2fb2929953b3bad2e2de80a214ef8"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.cache_partial_block","line":446,"sha256":"8745e75cc082751a49578c403a2fcf5dae65030ef0c8012194ecee3e29f58d88"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._get_partial_block_hash","line":557,"sha256":"c34ca75eec3b2e508b0fe4bea037a1155cb5c168376f4b54d8dd5cda1eb90d32"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._get_partial_block_parent_hash_and_start","line":570,"sha256":"61192232eb034f584e87e7bfc99d565d6a234ef826f5ce4f4f83de6162cc9303"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._remove_cached_block_hashes","line":582,"sha256":"43f8931396e8bd144428603db00fbfdeb77c1efba7677c347fce256ae0028898"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._emit_block_removed_events","line":603,"sha256":"ca6089594c28c996521615fd332ad71d5fa603d312790918c2ce11ab762eeb12"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool._insert_block_hash","line":618,"sha256":"0689c203db7e7a00412983239ee035ff86a9e3cb0a4e924ac628d6b756c14f85"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.move_block_hashes","line":640,"sha256":"879b66d9fa63767570e3610aa73cfe8ee85480990fb26ce003cf149aa829534b"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"FullAttentionManager.capability_constant","line":715,"sha256":"13f4c39f6ff5f487f488c0dd466d58ada8b354be17158768e1f5965e2e1687e9"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"FullAttentionManager.find_longest_cache_hit","line":718,"sha256":"ef236ccf8ff85c5c8b6876f2ba70ecadf00115fb07ff4f0b5e1faac1266c7aaf"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"SlidingWindowManager._contiguous_blocks_for_hit","line":931,"sha256":"eed05ad43364a1701739d04a66d681dbafae2e88091b94785d029cae54c079df"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"SlidingWindowManager.find_longest_cache_hit","line":944,"sha256":"3bd5f6c12e3ba63e3ff611d30d0f1614fdc2ea7960389ccb661a76c81e5e1103"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"MambaManager.capability_constant","line":1422,"sha256":"13f4c39f6ff5f487f488c0dd466d58ada8b354be17158768e1f5965e2e1687e9"},{"file":"vllm/v1/core/single_type_kv_cache_manager.py","symbol":"MambaManager.find_longest_cache_hit","line":1457,"sha256":"447d591729cfb8fe8ece0dd613a54707be53903262fba52d0b3559b959cfe491"},{"file":"vllm/v1/kv_cache_interface.py","symbol":"iter_layer_specs","line":1158,"sha256":"447b540899bbbad2b1a52c18602d15cbb3001eb4afc2ce9d200befbe979ed7c9"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"resolve_dcp_kv_block_size","line":652,"sha256":"d88adc85072b472982ebb7047e19af2b710f87c0b86b64e399f3ee1a0727cbf6"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"dcp_world_size_for_kv_cache_spec","line":679,"sha256":"536377e705ceae50be9098ef3f0bb98f3fe5eabe3e69d38dc37c5b8e371f72f9"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"resolve_kv_cache_block_sizes","line":701,"sha256":"3bda1c63a816f5cec902c1d00640e4e92a6e0754852e54c2a56531c233c4de6f"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"_validate_prefix_cache_retention_interval","line":34,"sha256":"19dbca4dff3aab4dd6624663317206702531e5d8af22388809a737e9ce8ce3e6"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"KVCacheCoordinator.capability_constant","line":71,"sha256":"af4f05bee0088af8a1302ded6a467e4bfbc5d5754f5b95fdce97d1d14e12e700"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"KVCacheCoordinator.__init__","line":73,"sha256":"bb370c55c4d714b93ec33da2eb733786b86cce1865f1438f80474859e62eb9d0"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"UnitaryKVCacheCoordinator.__init__","line":510,"sha256":"bf21b7dccdbd53aaa05f400a5b2d8d3af5741e2cdb3635c31fe8734a8c71e081"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"UnitaryKVCacheCoordinator.find_longest_cache_hit","line":554,"sha256":"cffe1f266d6c60b9420eaf41b5150ceba9c26615cd318e65af657da468476ac1"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"get_kv_cache_coordinator","line":978,"sha256":"56a94d4eac9e998dcbbf5d9c73625a89e94d2e0f7b698dac6a622b768f70fd3a"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"HybridKVCacheCoordinator.__init__","line":595,"sha256":"8866a7790d96ba3066f13185c84c8bf04d5e6c4f6fb3af7d17cd26d5986f3847"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"HybridKVCacheCoordinator._cache_hit_alignment_tokens","line":697,"sha256":"637cc838e720698057d51a7812534dc3529610ba2aa0fa0a34f3211dfa87d3a0"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"HybridKVCacheCoordinator.verify_and_split_kv_cache_groups","line":706,"sha256":"232274fca8ddf9db78821eb1d45ad8efeee084733ce2de6f8379f88c367d52dc"},{"file":"vllm/v1/core/kv_cache_coordinator.py","symbol":"HybridKVCacheCoordinator.find_longest_cache_hit","line":808,"sha256":"886b951ad90e0d074c4aabcfaf4c5ed03aa86cdace443c0e166fad1a3f6a7821"},{"file":"vllm/v1/core/kv_cache_manager.py","symbol":"KVCacheManager.get_computed_blocks","line":245,"sha256":"1de846a305f6c57aafbcf100ffd0abd932331158e2bb382275231c6854e0e409"}],"fixtures":[{"name":"full_contiguous","request_tokens":17,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16],"id":0}],"hash_block_size":4,"expected_hit_tokens":16,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"full_leading_gap","request_tokens":17,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[8,12,16],"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"full_interior_gap","request_tokens":17,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,12,16],"id":0}],"hash_block_size":4,"expected_hit_tokens":4,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"request_minus_one","request_tokens":16,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16],"id":0}],"hash_block_size":4,"expected_hit_tokens":12,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"same_hash_two_groups_missing_required","request_tokens":17,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16],"id":0},{"kind":"full","block_size":4,"cached":[],"id":1}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0,1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"same_hash_two_groups_intersection","request_tokens":17,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16],"id":0},{"kind":"full","block_size":4,"cached":[4,8],"id":1}],"hash_block_size":4,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a"],"shared_prefix_boundary":0,"lookup_groups":[[0,1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_window_one_no_entries","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[],"window":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_window_one_one_entry","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[32],"window":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":32,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_old_prefix_absent","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[24,28,32],"window":9,"id":0}],"hash_block_size":4,"expected_hit_tokens":32,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_short_tail","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[32],"window":9,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_broken_tail","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[24,32],"window":9,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_short_initial_prefix","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[4,8],"window":17,"id":0}],"hash_block_size":4,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"swa_multiple_candidates","request_tokens":33,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[8,12,16,28],"window":9,"id":0}],"hash_block_size":4,"expected_hit_tokens":16,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"mamba_sparse","request_tokens":41,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[24,40],"id":0}],"hash_block_size":4,"expected_hit_tokens":40,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"mamba_later_cannot_restore_earlier","request_tokens":33,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[40],"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"joint_8k_6k_10k_scaled","request_tokens":41,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16,20,24,28,32],"id":0},{"kind":"mamba","block_size":4,"cached":[24,40],"id":1}],"hash_block_size":4,"expected_hit_tokens":24,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":32,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"mamba_request_boundary","request_tokens":40,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[24,40],"id":0}],"hash_block_size":4,"expected_hit_tokens":24,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"three_group_fixed_point","request_tokens":41,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16,20,24,28,32,36,40],"id":0},{"kind":"swa","block_size":4,"cached":[12,16,28,32],"window":9,"id":1},{"kind":"mamba","block_size":4,"cached":[16,24,40],"id":2}],"hash_block_size":4,"expected_hit_tokens":16,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":40,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"mixed_blocks_alignment","request_tokens":49,"hash_unit":4,"groups":[{"kind":"full","block_size":8,"cached":[8,16,24,32,40,48],"id":0},{"kind":"swa","block_size":12,"cached":[12,24,36],"window":13,"id":1}],"hash_block_size":4,"expected_hit_tokens":24,"alignment_tokens":24,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956"],"shared_prefix_boundary":48,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":24,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_full_extension","request_tokens":15,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,12],"id":0},{"kind":"mamba","block_size":8,"cached":[12],"id":1}],"hash_block_size":2,"expected_hit_tokens":12,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_sparse_mamba","request_tokens":15,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,12],"id":0},{"kind":"mamba","block_size":8,"cached":[6,10],"id":1}],"hash_block_size":2,"expected_hit_tokens":10,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":12,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"full_downward_closed_no_partial_alias","request_tokens":9,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8],"id":0},{"kind":"mamba","block_size":8,"cached":[6],"id":1}],"hash_block_size":2,"expected_hit_tokens":6,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"short_request_cannot_use_later_full_block","request_tokens":7,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8],"id":0},{"kind":"mamba","block_size":8,"cached":[6],"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_gate_swa_large_block","request_tokens":17,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,14],"id":0},{"kind":"swa","block_size":4,"cached":[4,8,12,16],"window":5,"id":1},{"kind":"mamba","block_size":8,"cached":[14],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_gate_swa_hash_block","request_tokens":17,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,14],"id":0},{"kind":"swa","block_size":2,"cached":[10,12,14],"window":5,"id":1},{"kind":"mamba","block_size":8,"cached":[14],"id":2}],"hash_block_size":2,"expected_hit_tokens":14,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"equal_full_specs_different_partial_aliases","request_tokens":9,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[6],"id":0},{"kind":"full","block_size":8,"cached":[4],"id":1},{"kind":"mamba","block_size":8,"cached":[4],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"shared_prefix_boundary":0,"lookup_groups":[[0,1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"different_full_specs_sequential_bound","request_tokens":9,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[6],"id":0},{"kind":"full","block_size":8,"cached":[8],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":8,"cached":[6],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"shared_prefix_boundary":6,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"different_full_specs_different_partial_aliases","request_tokens":9,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[6],"id":0},{"kind":"full","block_size":8,"cached":[4],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":8,"cached":[4],"id":2}],"hash_block_size":2,"expected_hit_tokens":4,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"shared_prefix_boundary":6,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_mamba_request_minus_one","request_tokens":14,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,12],"id":0},{"kind":"mamba","block_size":8,"cached":[12,14],"id":1}],"hash_block_size":2,"expected_hit_tokens":12,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"}],"randomized_fixtures":[{"name":"random_000","request_tokens":12,"hash_unit":8,"groups":[{"kind":"full","block_size":8,"cached":[8,16,48,64],"num_kv_heads":1,"id":0}],"hash_block_size":8,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_001","request_tokens":5,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[4,10,12,14,16,22,24,34,38,46,48,50,52,56,62],"num_kv_heads":1,"id":0},{"kind":"mamba","block_size":4,"cached":[2,10,14,18,22,26,30,32,34,42,44,64],"id":1}],"hash_block_size":2,"expected_hit_tokens":2,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286"],"shared_prefix_boundary":4,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_002","request_tokens":60,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[8,32,40,56,64],"window":9,"id":0},{"kind":"swa","block_size":2,"cached":[4,6,12,14,16,22,24,26,34,40,42,46,48,52,54,56,58,62,64],"window":3,"id":1}],"hash_block_size":2,"expected_hit_tokens":56,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_003","request_tokens":2,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[16,32,36,40,44,48,60],"window":5,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":[],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_004","request_tokens":14,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,8,12,16,20,36,40,48,56],"window":9,"id":0},{"kind":"swa","block_size":8,"cached":[24,32,40,48,64],"window":9,"id":1},{"kind":"mamba","block_size":8,"cached":[4,8,10,14,16,18,22,24,26,30,34,46,54,56,58,60],"id":2},{"kind":"full","block_size":2,"cached":[2,10,18,20,38,40,42,44,52,56,60,64],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[3],[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_005","request_tokens":63,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[2,6,12,18,20,22,24,28,32,34,40,46,50,52,56],"id":0},{"kind":"mamba","block_size":4,"cached":[4,6,8,10,24,32,38,40,46,48,54,56,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":56,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff"],"shared_prefix_boundary":0,"lookup_groups":[[0,1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_006","request_tokens":45,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,12,16,20,24,40,44,48,52,56],"num_kv_heads":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":4,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_007","request_tokens":4,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[4,10,12,20,22,26,28,30,34,38,46,48,50,56],"num_kv_heads":2,"id":0},{"kind":"swa","block_size":8,"cached":[16,24,48,56,64],"window":9,"id":1},{"kind":"full","block_size":2,"cached":[4,12,16,24,28,30,34,38,40,42,50,54,62,64],"num_kv_heads":2,"id":2},{"kind":"mamba","block_size":4,"cached":[8,10,20,22,24,28,40,44,54,56,58],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286"],"shared_prefix_boundary":0,"lookup_groups":[[0,2],[1],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_008","request_tokens":60,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[8,12,16,20,24,40,52,56,60,64],"id":0}],"hash_block_size":4,"expected_hit_tokens":56,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca","b114e930465d33ba5c6edc8c9da04fba1036925a7486beecfbf49767fb32fba1"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_009","request_tokens":32,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[2,4,6,8,10,26,30,36,38,44,50,56,60,64],"num_kv_heads":2,"id":0},{"kind":"swa","block_size":2,"cached":[4,8,16,18,20,22,24,26,28,32,36,38,42,44,46,48,50,58,62,64],"window":17,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_010","request_tokens":24,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[4,8,12,14,20,22,26,28,30,34,38,40,42,44,50,58,60,62],"window":1,"id":0},{"kind":"full","block_size":2,"cached":[2,6,14,16,20,30,32,34,42,46,48,50,52,54,62,64],"num_kv_heads":1,"id":1},{"kind":"swa","block_size":4,"cached":[12,16,20,28,32,40,48],"window":17,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_011","request_tokens":22,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[12,20,24,28,44,52,60,64],"id":0}],"hash_block_size":4,"expected_hit_tokens":20,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_012","request_tokens":2,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[12,20,48,60,64],"window":17,"id":0},{"kind":"full","block_size":8,"cached":[2,4,6,10,16,32,36,40,44,58,64],"num_kv_heads":1,"id":1},{"kind":"full","block_size":2,"cached":[6,8,12,16,18,32,40,44,46,62],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_013","request_tokens":64,"hash_unit":8,"groups":[{"kind":"mamba","block_size":8,"cached":[16,24,40,56,64],"id":0}],"hash_block_size":8,"expected_hit_tokens":56,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691","cbf7fca722f0af38adcaceb1b7ffa0c70454d6a7cffe42605e278b4e096eb168","4d4d615e6fa07a99264f288898152a1c1f0be17da909666cb5a6cebff68fbeb8","42ef76cddf654368f14661c018580d32791ae8fba354871ea191d32a7b155da4","b7768f8dca59a77cbffc240d4e054e6749299c980265849385700573f9a37364"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_014","request_tokens":25,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[4,10,14,16,18,20,26,36,42,46,50,52,54,56,58,62,64],"num_kv_heads":1,"id":0},{"kind":"swa","block_size":2,"cached":[6,8,12,14,16,20,28,30,34,38,40,44,46,48,52,54,60],"window":5,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_015","request_tokens":60,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[4,8,10,26,28,34,36,46,52,58,60,62,64],"num_kv_heads":1,"id":0},{"kind":"mamba","block_size":2,"cached":[2,4,6,14,16,22,28,30,32,36,38,40,42,44,46,48,50,58,60],"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_016","request_tokens":29,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[4,20,22,24,26,28,30,32,36,38,40,44,54],"id":0},{"kind":"full","block_size":8,"cached":[4,8,10,12,14,18,20,24,28,30,34,38,40,50,52,56,64],"num_kv_heads":2,"id":1},{"kind":"swa","block_size":4,"cached":[4,8,12,24,28,40,52,56,60,64],"window":5,"id":2},{"kind":"full","block_size":2,"cached":[4,12,26,28,30,32,34,44,56],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":8,"lookup_groups":[[1],[3],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_017","request_tokens":15,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[4,6,8,10,24,32,38,40,44,60,64],"id":0},{"kind":"full","block_size":2,"cached":[2,4,6,16,18,20,32,54,56,64],"num_kv_heads":2,"id":1},{"kind":"full","block_size":2,"cached":[2,6,8,12,14,16,18,20,22,24,26,28,38,52,56,58,62],"num_kv_heads":2,"id":2},{"kind":"swa","block_size":8,"cached":[16,56,64],"window":17,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[1,2],[0],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_018","request_tokens":45,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[4,8,12,20,24,26,28,34,36,46,48,54,60,62,64],"id":0},{"kind":"full","block_size":2,"cached":[4,6,8,14,18,20,24,26,30,36,38,40,44,50,54,56,58],"num_kv_heads":1,"id":1},{"kind":"full","block_size":8,"cached":[2,16,20,22,24,26,30,34,36,42,50,52,54,58,62,64],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_019","request_tokens":30,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[8,12,16,26,38,40,42,44,48,50,52,62,64],"num_kv_heads":1,"id":0},{"kind":"full","block_size":4,"cached":[2,4,6,8,10,14,16,20,22,36,42,44,50,52,54,56,58,62],"num_kv_heads":2,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_020","request_tokens":36,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[2,6,8,12,14,24,26,30,32,38,42,44,50,52,56,62,64],"id":0},{"kind":"mamba","block_size":2,"cached":[4,6,14,20,28,32,34,50,54,60,64],"id":1}],"hash_block_size":2,"expected_hit_tokens":32,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_021","request_tokens":58,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[4,24,32,64],"window":3,"id":0}],"hash_block_size":4,"expected_hit_tokens":32,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_022","request_tokens":7,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[8,16,24,56,64],"window":17,"id":0},{"kind":"full","block_size":4,"cached":[6,10,14,16,20,22,30,32,38,42,48,52,54,56,60,64],"num_kv_heads":1,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_023","request_tokens":38,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[4,10,14,18,20,22,26,28,38,46,50,58,64],"num_kv_heads":1,"id":0},{"kind":"full","block_size":4,"cached":[2,4,10,12,28,30,34,44,48,50,52,56,58,60,62],"num_kv_heads":2,"id":1},{"kind":"full","block_size":8,"cached":[2,6,8,10,14,24,30,32,42,46,50,56,60],"num_kv_heads":1,"id":2},{"kind":"full","block_size":8,"cached":[12,26,32,42,44,50,58,60],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2,3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_024","request_tokens":27,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[2,4,6,14,16,18,20,26,30,32,36,40,52,54,56],"id":0},{"kind":"full","block_size":4,"cached":[10,16,18,22,26,28,30,34,36,40,42,44,46,48,54,58,64],"num_kv_heads":1,"id":1},{"kind":"swa","block_size":4,"cached":[4,12,20,28,32,52,56,60,64],"window":17,"id":2},{"kind":"full","block_size":4,"cached":[2,6,10,18,24,26,32,36,38,40,44,52,54,56,60,64],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027"],"shared_prefix_boundary":0,"lookup_groups":[[1],[3],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_025","request_tokens":19,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[8,10,16,18,20,28,30,32,34,36,38,40,44,48,54,60],"id":0},{"kind":"swa","block_size":8,"cached":[16,32,40,64],"window":3,"id":1},{"kind":"mamba","block_size":8,"cached":[2,8,20,22,26,30,46,60,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9"],"shared_prefix_boundary":16,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_026","request_tokens":34,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[2,4,6,12,14,22,24,30,32,34,38,40,44,46,48,52,60],"num_kv_heads":2,"id":0}],"hash_block_size":2,"expected_hit_tokens":6,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_027","request_tokens":47,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[24,56],"window":9,"id":0},{"kind":"mamba","block_size":2,"cached":[4,8,20,30,32,38,42,52,54],"id":1},{"kind":"mamba","block_size":8,"cached":[4,6,14,16,22,28,30,42,44,46,48,52,60],"id":2},{"kind":"mamba","block_size":2,"cached":[2,6,12,20,24,26,28,30,40,42,44,46,50,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4"],"shared_prefix_boundary":24,"lookup_groups":[[0],[1,3],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_028","request_tokens":22,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[4,8,16,20,24,32,40,56,64],"window":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":20,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_029","request_tokens":42,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[4,12,32,36,44,52,60],"id":0}],"hash_block_size":4,"expected_hit_tokens":36,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_030","request_tokens":17,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[10,14,18,22,26,28,36,38,42,46,48,50,52,54,58,60,64],"window":1,"id":0},{"kind":"swa","block_size":4,"cached":[20,24,28,36,60],"window":9,"id":1},{"kind":"mamba","block_size":2,"cached":[6,8,14,18,24,30,38,46,50,52,54,60],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_031","request_tokens":49,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[2,10,12,16,18,20,24,26,28,34,38,40,44,48,50,54,60,64],"window":17,"id":0},{"kind":"full","block_size":4,"cached":[4,16,20,22,26,28,36,38,42,46,56,60],"num_kv_heads":1,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10"],"shared_prefix_boundary":4,"lookup_groups":[[1],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_032","request_tokens":11,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[2,10,16,18,20,24,36,38,42,44,50,64],"num_kv_heads":1,"id":0}],"hash_block_size":2,"expected_hit_tokens":2,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_033","request_tokens":39,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,8,10,24,26,32,34,36,42,52,56,60,62],"num_kv_heads":1,"id":0},{"kind":"full","block_size":8,"cached":[4,6,10,16,22,28,32,36,38,42,44,50,56,58,60,62],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":8,"cached":[4,16,18,20,22,28,40,42,46,50,60,62],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_034","request_tokens":28,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,10,26,28,32,34,44,46,56,62],"num_kv_heads":2,"id":0}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_035","request_tokens":21,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[12,16,20,24,26,32,34,36,38,42,50,52,54,56,58,60,62],"id":0},{"kind":"mamba","block_size":8,"cached":[4,6,12,14,20,24,30,32,36,40,42,46,48,50,52,54,58,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":20,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_036","request_tokens":45,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[2,8,12,16,28,30,34,56,60,62],"num_kv_heads":1,"id":0},{"kind":"swa","block_size":8,"cached":[8,24,40,56,64],"window":5,"id":1},{"kind":"swa","block_size":2,"cached":[2,6,8,18,20,22,28,32,44,48,50,52,62],"window":5,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_037","request_tokens":35,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[2,4,12,16,20,22,28,34,36,38,46,48,50,60,64],"num_kv_heads":1,"id":0},{"kind":"mamba","block_size":4,"cached":[8,12,18,26,32,34,38,42,44,48,50,52,54,60,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":4,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_038","request_tokens":5,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[6,12,24,30,32,36,38,42,46,48,58,62],"window":17,"id":0}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_039","request_tokens":32,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[6,10,12,20,30,34,36,42,44,54,58,60],"id":0}],"hash_block_size":2,"expected_hit_tokens":30,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_040","request_tokens":28,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[6,10,12,18,22,24,26,32,34,42,44,56,60],"num_kv_heads":2,"id":0},{"kind":"mamba","block_size":2,"cached":[6,10,12,14,16,18,20,22,26,28,30,34,36,38,40,44,50,54,56,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_041","request_tokens":30,"hash_unit":8,"groups":[{"kind":"full","block_size":8,"cached":[24,40,56],"num_kv_heads":1,"id":0}],"hash_block_size":8,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_042","request_tokens":60,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[6,8,12,14,26,32,40,46,48,50,58,60,62,64],"num_kv_heads":1,"id":0},{"kind":"full","block_size":2,"cached":[4,6,10,18,24,28,34,38,42,44,46,52,54,58],"num_kv_heads":1,"id":1},{"kind":"full","block_size":8,"cached":[6,8,12,16,18,24,28,30,32,36,40,46,48,52,54,58,62],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_043","request_tokens":13,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[2,4,6,16,18,24,28,36,38,40,42,44,46,48,62],"id":0},{"kind":"swa","block_size":2,"cached":[2,4,12,26,28,36,38,40,46,50,54,58,60],"window":3,"id":1}],"hash_block_size":2,"expected_hit_tokens":4,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0"],"shared_prefix_boundary":6,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_044","request_tokens":44,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[6,10,12,20,26,28,42,46,48,60,62],"id":0},{"kind":"swa","block_size":8,"cached":[8,24,56],"window":5,"id":1},{"kind":"full","block_size":8,"cached":[2,6,10,18,20,28,40,42,46,52,58,60,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":0,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_045","request_tokens":50,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[2,10,12,22,26,28,34,44,46,48,56,58],"id":0},{"kind":"mamba","block_size":4,"cached":[4,6,12,18,22,28,32,34,38,40,42,44,46,54,64],"id":1},{"kind":"full","block_size":4,"cached":[2,4,8,12,16,18,20,24,26,32,34,40,42,52,54,56,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":22,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92"],"shared_prefix_boundary":26,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_046","request_tokens":29,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[4,16,18,20,28,32,38,46,52,56,58,62],"id":0},{"kind":"full","block_size":4,"cached":[8,10,14,16,18,30,32,40,48,52,56,58,62,64],"num_kv_heads":1,"id":1},{"kind":"full","block_size":4,"cached":[8,10,14,24,26,28,32,34,36,40,42,48,50,62,64],"num_kv_heads":2,"id":2},{"kind":"full","block_size":8,"cached":[12,22,24,36,40,42,46,48,50,52,54,58],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[3],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_047","request_tokens":63,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[6,20,30,32,34,38,40,42,46,48,54,56,58,62,64],"num_kv_heads":1,"id":0},{"kind":"full","block_size":8,"cached":[4,12,16,26,28,34,38,40,42,46,50,56,64],"num_kv_heads":2,"id":1},{"kind":"swa","block_size":2,"cached":[4,6,8,16,18,24,26,30,32,34,38,40,44,46,48,56,62],"window":1,"id":2},{"kind":"full","block_size":2,"cached":[2,4,8,10,22,24,34,36,60,62,64],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[3],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_048","request_tokens":14,"hash_unit":8,"groups":[{"kind":"mamba","block_size":8,"cached":[8,32,40,56],"id":0}],"hash_block_size":8,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_049","request_tokens":28,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[2,12,14,18,20,24,26,28,32,34,44,48,64],"num_kv_heads":1,"id":0},{"kind":"mamba","block_size":2,"cached":[14,16,18,20,26,32,38,48,56,58],"id":1},{"kind":"full","block_size":2,"cached":[2,4,8,12,14,16,18,20,22,26,32,34,36,38,42,44,46,54,62,64],"num_kv_heads":1,"id":2},{"kind":"swa","block_size":4,"cached":[8,16,20,28,32,36,44,52,56,60],"window":5,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":0,"lookup_groups":[[0],[2],[1],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_050","request_tokens":7,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[16,24,40],"window":9,"id":0},{"kind":"full","block_size":4,"cached":[2,4,10,12,14,18,20,22,30,36,40,48,50,54,58,60,64],"num_kv_heads":1,"id":1},{"kind":"swa","block_size":8,"cached":[16,32],"window":9,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_051","request_tokens":45,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[2,8,16,20,24,26,28,36,48,50,54,58],"id":0},{"kind":"mamba","block_size":2,"cached":[2,14,16,18,20,24,26,28,30,34,46,48,50,58,60,64],"id":1},{"kind":"mamba","block_size":4,"cached":[4,10,12,22,24,26,32,34,38,42,50,52,54,58,60,64],"id":2},{"kind":"swa","block_size":2,"cached":[4,6,20,26,28,32,34,38,48,50,54,62],"window":3,"id":3}],"hash_block_size":2,"expected_hit_tokens":26,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":28,"lookup_groups":[[0,1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_052","request_tokens":7,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[8,14,16,20,22,24,28,30,34,36,40,44,48,56,64],"id":0},{"kind":"swa","block_size":2,"cached":[2,12,14,16,18,22,24,28,34,36,38,42,52,54,58,60],"window":9,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_053","request_tokens":51,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[6,16,20,28,38,44,50,54,56,58],"id":0},{"kind":"swa","block_size":8,"cached":[48,64],"window":17,"id":1},{"kind":"swa","block_size":2,"cached":[6,10,14,16,20,28,30,32,34,40,44,50,52,56,60],"window":17,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92"],"shared_prefix_boundary":16,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_054","request_tokens":34,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,20,24,28,36,40,44,48,56],"window":17,"id":0},{"kind":"mamba","block_size":2,"cached":[8,10,16,20,22,26,50,52,56,62,64],"id":1},{"kind":"full","block_size":2,"cached":[6,10,12,14,20,26,34,38,40,42,48,50,56,60,62,64],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":0,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_055","request_tokens":53,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[2,4,6,10,12,16,20,40,42,44,46,50,52,54],"num_kv_heads":2,"id":0},{"kind":"swa","block_size":8,"cached":[16,24,32,40,48,56,64],"window":9,"id":1},{"kind":"swa","block_size":8,"cached":[16,32,64],"window":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_056","request_tokens":29,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[4,10,20,22,28,34,38,40,44,48,56,58,60,62],"num_kv_heads":1,"id":0},{"kind":"swa","block_size":2,"cached":[6,8,12,14,16,20,22,30,32,34,36,38,40,42,52,54,56],"window":5,"id":1},{"kind":"full","block_size":4,"cached":[2,4,6,8,10,14,16,20,22,26,32,44,46,50,54,60,62,64],"num_kv_heads":2,"id":2},{"kind":"swa","block_size":8,"cached":[40,64],"window":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee"],"shared_prefix_boundary":0,"lookup_groups":[[0],[2],[1],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_057","request_tokens":52,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[6,8,18,34,36,38,40,44,48,52],"id":0},{"kind":"mamba","block_size":8,"cached":[6,18,22,26,28,30,34,36,38,42,46,48,54,56,60],"id":1},{"kind":"mamba","block_size":4,"cached":[4,6,8,12,20,22,32,36,40,44,46,48,50,52,54,62],"id":2},{"kind":"mamba","block_size":2,"cached":[2,8,10,12,14,16,18,24,28,32,34,36,38,50,52,62,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":36,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f"],"shared_prefix_boundary":38,"lookup_groups":[[0,3],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_058","request_tokens":43,"hash_unit":8,"groups":[{"kind":"swa","block_size":8,"cached":[8,16,24,40,48,56],"window":3,"id":0}],"hash_block_size":8,"expected_hit_tokens":40,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691","cbf7fca722f0af38adcaceb1b7ffa0c70454d6a7cffe42605e278b4e096eb168"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_059","request_tokens":20,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,12,24,32,40,44,52,56,64],"window":17,"id":0},{"kind":"swa","block_size":2,"cached":[2,6,8,10,12,14,18,22,26,30,32,34,36,38,42,50,52,62,64],"window":9,"id":1},{"kind":"swa","block_size":8,"cached":[48,56,64],"window":1,"id":2},{"kind":"full","block_size":4,"cached":[10,20,22,26,28,30,32,40,42,44,46,50,56,58,62],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc"],"shared_prefix_boundary":0,"lookup_groups":[[3],[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_060","request_tokens":41,"hash_unit":8,"groups":[{"kind":"full","block_size":8,"cached":[8,16,24,32,48,56],"num_kv_heads":1,"id":0}],"hash_block_size":8,"expected_hit_tokens":32,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691","cbf7fca722f0af38adcaceb1b7ffa0c70454d6a7cffe42605e278b4e096eb168"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_061","request_tokens":35,"hash_unit":8,"groups":[{"kind":"swa","block_size":8,"cached":[24,48,56],"window":5,"id":0}],"hash_block_size":8,"expected_hit_tokens":24,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_062","request_tokens":61,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[20,28,52,64],"id":0}],"hash_block_size":4,"expected_hit_tokens":52,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca","b114e930465d33ba5c6edc8c9da04fba1036925a7486beecfbf49767fb32fba1"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_063","request_tokens":16,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[12,22,38,40,42,48,50,56],"num_kv_heads":2,"id":0},{"kind":"full","block_size":2,"cached":[14,18,24,34,36,38,40,46,48,50,54,56,64],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":4,"cached":[10,16,18,22,34,38,44,50,60,64],"id":2},{"kind":"swa","block_size":4,"cached":[4,12,16,20,44,48,52,60],"window":9,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_064","request_tokens":56,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[8,12,32,40,44,48],"window":17,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_065","request_tokens":64,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[2,10,16,20,26,28,30,34,40,42,46,48,52,54,56,60,62,64],"id":0},{"kind":"full","block_size":4,"cached":[2,12,14,18,20,28,30,32,36,38,62,64],"num_kv_heads":1,"id":1},{"kind":"mamba","block_size":2,"cached":[4,10,14,18,20,28,30,34,36,38,40,48,52,58,60,62],"id":2},{"kind":"swa","block_size":8,"cached":[24,32,48],"window":9,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff","039893d6a1cd4d8e392b28dcb948b159b9907956c95c35c78347b15cef86b2e3"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0,2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_066","request_tokens":57,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[2,4,6,10,12,14,16,20,22,28,32,34,44,46,50,52,54,58,64],"window":9,"id":0},{"kind":"mamba","block_size":2,"cached":[4,6,8,10,12,16,18,24,26,28,32,34,36,48,52,54,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":16,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_067","request_tokens":44,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,24,40,44,52],"window":9,"id":0},{"kind":"mamba","block_size":8,"cached":[4,6,14,20,28,36,48,56,64],"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_068","request_tokens":50,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[10,12,16,20,22,24,26,28,30,32,36,42,52,58],"num_kv_heads":1,"id":0}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_069","request_tokens":62,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[10,14,18,22,24,30,34,36,38,46,50,56,60],"window":9,"id":0}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_070","request_tokens":52,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[14,16,18,22,30,32,34,36,38,42,44,48,52,58,60,62],"num_kv_heads":2,"id":0},{"kind":"swa","block_size":4,"cached":[4,8,20,24,32,36,44,56],"window":17,"id":1},{"kind":"mamba","block_size":4,"cached":[8,10,12,14,16,18,22,26,30,34,40,42,44,48,52],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_071","request_tokens":55,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[2,12,14,26,28,30,32,34,46,48,52,54,56,60,62,64],"window":17,"id":0}],"hash_block_size":2,"expected_hit_tokens":2,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_072","request_tokens":50,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[16,48,64],"window":5,"id":0},{"kind":"swa","block_size":8,"cached":[8,24,32,48,56],"window":9,"id":1},{"kind":"mamba","block_size":4,"cached":[4,8,14,18,20,24,28,34,42,46,50],"id":2},{"kind":"full","block_size":4,"cached":[2,4,10,14,16,36,46,48,52,56,58,60,62],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92"],"shared_prefix_boundary":0,"lookup_groups":[[3],[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_073","request_tokens":33,"hash_unit":8,"groups":[{"kind":"full","block_size":8,"cached":[8,16,48,56],"num_kv_heads":1,"id":0}],"hash_block_size":8,"expected_hit_tokens":16,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_074","request_tokens":4,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[24,56],"window":5,"id":0},{"kind":"swa","block_size":4,"cached":[4,28,32,48,56],"window":9,"id":1},{"kind":"swa","block_size":4,"cached":[28,36,40,48,52,56,60],"window":5,"id":2},{"kind":"mamba","block_size":8,"cached":[2,8,10,14,16,20,22,24,28,30,40,42,46,48,52,54,56,58,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_075","request_tokens":63,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[4,36,40,44,64],"window":9,"id":0}],"hash_block_size":4,"expected_hit_tokens":44,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca","b114e930465d33ba5c6edc8c9da04fba1036925a7486beecfbf49767fb32fba1"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_076","request_tokens":34,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[10,20,32,36,46,54,56,58,62,64],"id":0},{"kind":"mamba","block_size":2,"cached":[2,4,8,12,16,20,22,32,34,38,50,52,54],"id":1},{"kind":"full","block_size":2,"cached":[6,8,14,26,30,32,34,36,38,46,48,50,52,62],"num_kv_heads":1,"id":2},{"kind":"full","block_size":8,"cached":[2,12,18,22,30,38,40,42,44,46,48,56,58,62],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":0,"lookup_groups":[[2],[3],[0,1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_077","request_tokens":16,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[8,16,24,32,56,64],"window":5,"id":0},{"kind":"full","block_size":4,"cached":[2,6,12,28,30,32,34,42,48,50,58,60,62,64],"num_kv_heads":2,"id":1},{"kind":"swa","block_size":4,"cached":[4,12,16,24,32,60],"window":9,"id":2},{"kind":"full","block_size":8,"cached":[2,8,10,12,14,16,30,32,34,40,42,46,48,54,56,60,62,64],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[1],[3],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_078","request_tokens":57,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[4,6,8,10,16,18,20,24,30,34,38,40,44,48,52,54,56,60,64],"id":0},{"kind":"mamba","block_size":2,"cached":[2,4,8,14,24,26,28,42,52,54],"id":1},{"kind":"full","block_size":4,"cached":[6,8,10,16,20,24,26,32,36,38,40,44,46,48,50,52,54,56,60,62],"num_kv_heads":1,"id":2},{"kind":"mamba","block_size":8,"cached":[10,12,16,18,22,30,34,36,38,42,44,46,48,50,60],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42"],"shared_prefix_boundary":0,"lookup_groups":[[2],[0,3],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_079","request_tokens":31,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[4,6,10,12,14,18,30,32,34,38,40,42,44,48,50,52,56,60,62,64],"id":0},{"kind":"full","block_size":2,"cached":[6,12,14,18,26,28,32,34,40,46,48,50,52,54,60,62,64],"num_kv_heads":1,"id":1},{"kind":"full","block_size":4,"cached":[4,6,8,10,14,18,20,22,24,26,28,32,36,38,40,44,46,56,58,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_080","request_tokens":35,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[8,12,20,32,48,56,64],"window":3,"id":0},{"kind":"full","block_size":8,"cached":[2,4,6,12,14,18,20,22,24,30,32,44,46,52,62,64],"num_kv_heads":1,"id":1},{"kind":"mamba","block_size":4,"cached":[2,4,8,12,16,18,20,22,30,32,42,46,56,58,60],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_081","request_tokens":28,"hash_unit":8,"groups":[{"kind":"full","block_size":8,"cached":[8,32,40,56,64],"num_kv_heads":1,"id":0}],"hash_block_size":8,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_082","request_tokens":30,"hash_unit":4,"groups":[{"kind":"swa","block_size":4,"cached":[4,24,36,44,48,52],"window":3,"id":0}],"hash_block_size":4,"expected_hit_tokens":24,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_083","request_tokens":42,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,20,28,32,36,40,52,56,60,64],"num_kv_heads":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_084","request_tokens":10,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[2,4,6,8,16,28,38,40,52,54,60,62],"id":0},{"kind":"mamba","block_size":8,"cached":[2,10,12,14,20,22,26,28,30,32,38,46,48,50,56,64],"id":1},{"kind":"swa","block_size":8,"cached":[8,24,32,48,56,64],"window":17,"id":2},{"kind":"mamba","block_size":2,"cached":[2,8,10,16,18,20,24,28,32,34,36,38,42,44,48,56,58,60,62,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224"],"shared_prefix_boundary":8,"lookup_groups":[[0,3],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_085","request_tokens":39,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[4,6,10,16,20,24,28,30,32,36,40,50,52,54,56,58,64],"num_kv_heads":2,"id":0},{"kind":"mamba","block_size":4,"cached":[4,8,24,26,28,30,38,44,50,56,58,60],"id":1}],"hash_block_size":2,"expected_hit_tokens":4,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce"],"shared_prefix_boundary":6,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_086","request_tokens":26,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[4,16,22,24,26,32,34,38,42,46,48,50,52,54,56],"id":0},{"kind":"mamba","block_size":2,"cached":[2,4,6,12,14,32,36,38,42,48,54,62],"id":1},{"kind":"mamba","block_size":8,"cached":[2,6,8,16,18,22,26,28,30,32,38,40,44,48,50,52,56,60,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027"],"shared_prefix_boundary":24,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_087","request_tokens":56,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[2,6,8,10,14,18,24,26,30,32,34,40,44,46,48,50,54,56],"num_kv_heads":2,"id":0},{"kind":"full","block_size":4,"cached":[2,4,6,14,16,22,24,30,40,44,48,50,58,62,64],"num_kv_heads":1,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_088","request_tokens":28,"hash_unit":8,"groups":[{"kind":"swa","block_size":8,"cached":[8,24,32,48,64],"window":17,"id":0}],"hash_block_size":8,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_089","request_tokens":56,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,20,24,32,52],"window":17,"id":0},{"kind":"swa","block_size":2,"cached":[8,12,14,20,24,32,38,44,48,52,60],"window":3,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42"],"shared_prefix_boundary":4,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_090","request_tokens":31,"hash_unit":8,"groups":[{"kind":"mamba","block_size":8,"cached":[8,16,24,32,56,64],"id":0}],"hash_block_size":8,"expected_hit_tokens":24,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_091","request_tokens":59,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[4,6,8,24,26,30,34,36,40,42,44,46,50,54,60,62,64],"num_kv_heads":1,"id":0},{"kind":"swa","block_size":8,"cached":[8,16,24,32,40],"window":17,"id":1}],"hash_block_size":2,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_092","request_tokens":52,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[2,4,6,10,12,14,16,18,24,28,32,40,42,48,58,60],"window":9,"id":0},{"kind":"mamba","block_size":4,"cached":[12,18,28,30,32,46,54,62],"id":1}],"hash_block_size":2,"expected_hit_tokens":18,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_093","request_tokens":40,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[4,12,20,26,28,32,34,38,44,54,58],"num_kv_heads":2,"id":0},{"kind":"mamba","block_size":8,"cached":[4,8,12,18,22,24,26,28,30,38,44,48,50,54,64],"id":1},{"kind":"mamba","block_size":4,"cached":[8,20,26,28,32,42,56,58,62,64],"id":2},{"kind":"mamba","block_size":8,"cached":[2,4,6,12,14,24,30,36,44,46,48,54,56,58],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94"],"shared_prefix_boundary":4,"lookup_groups":[[0],[1,3],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_094","request_tokens":25,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,16,24,28,40,44,52,60,64],"window":3,"id":0},{"kind":"swa","block_size":8,"cached":[8,16,40,48,56,64],"window":5,"id":1},{"kind":"mamba","block_size":4,"cached":[2,8,10,12,16,20,24,28,30,32,34,38,42,58,60,62,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":16,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7"],"shared_prefix_boundary":24,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_095","request_tokens":2,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[40],"window":3,"id":0},{"kind":"swa","block_size":8,"cached":[32,64],"window":9,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_096","request_tokens":42,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[12,28,32,36,60,64],"window":5,"id":0},{"kind":"swa","block_size":8,"cached":[16,24,40,48,56,64],"window":1,"id":1},{"kind":"full","block_size":4,"cached":[4,18,28,30,38,44,48,60,62],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372"],"shared_prefix_boundary":0,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_097","request_tokens":62,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[10,20,22,38,42,44,52,54,62,64],"id":0}],"hash_block_size":2,"expected_hit_tokens":54,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_098","request_tokens":64,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[4,6,10,16,24,28,36,46,48,52,56,58,60,64],"window":1,"id":0},{"kind":"full","block_size":4,"cached":[2,6,8,12,14,22,30,32,34,38,40,44,54,58],"num_kv_heads":1,"id":1},{"kind":"full","block_size":2,"cached":[2,6,8,20,24,26,30,38,44,46,50,52,54,56,58,62,64],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289","4aa1aa34cad75c3560b3ddadd93266e695487dccb85c7e8296c290dc28592470","1cf05c84f2f3de1ad9ef078c593af4bc82889f63797b6109ac23bf393dea67ff","039893d6a1cd4d8e392b28dcb948b159b9907956c95c35c78347b15cef86b2e3"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_099","request_tokens":3,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[2,4,10,12,14,22,26,32,36,38,40,46,48,50,58,62],"num_kv_heads":2,"id":0}],"hash_block_size":2,"expected_hit_tokens":2,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_100","request_tokens":39,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[12,14,18,22,26,28,30,36,40,44,46,50,58,62],"id":0},{"kind":"swa","block_size":4,"cached":[8,20,24,28,40,52,56],"window":5,"id":1},{"kind":"full","block_size":8,"cached":[2,4,8,12,14,16,18,20,28,32,38,48,50,58],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce"],"shared_prefix_boundary":16,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_101","request_tokens":53,"hash_unit":8,"groups":[{"kind":"mamba","block_size":8,"cached":[32,48,64],"id":0}],"hash_block_size":8,"expected_hit_tokens":48,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691","cbf7fca722f0af38adcaceb1b7ffa0c70454d6a7cffe42605e278b4e096eb168","4d4d615e6fa07a99264f288898152a1c1f0be17da909666cb5a6cebff68fbeb8"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_102","request_tokens":31,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,12,20,22,24,28,32,36,40,42,44,52,56,58,60,62,64],"num_kv_heads":2,"id":0},{"kind":"full","block_size":4,"cached":[4,10,12,18,22,24,26,30,32,34,38,40,42,50,56],"num_kv_heads":1,"id":1},{"kind":"mamba","block_size":4,"cached":[14,18,20,22,26,28,32,38,40,46,48,50,52,54,56,64],"id":2},{"kind":"mamba","block_size":8,"cached":[2,4,10,12,14,36,44,48,50,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_103","request_tokens":51,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[12,16,20,32,40,44,52,60,64],"window":5,"id":0},{"kind":"mamba","block_size":4,"cached":[8,14,16,18,24,26,30,32,38,50,52,54,58,60,62,64],"id":1},{"kind":"mamba","block_size":2,"cached":[6,10,12,20,22,24,28,34,40,46,50,52,58,62],"id":2},{"kind":"full","block_size":8,"cached":[6,8,10,14,26,28,30,36,40,46,48,50,52,56,60],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92"],"shared_prefix_boundary":8,"lookup_groups":[[3],[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_104","request_tokens":45,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[4,14,24,26,30,36,40,48,50,60,62,64],"id":0},{"kind":"mamba","block_size":2,"cached":[6,14,16,20,30,34,38,40,44,64],"id":1},{"kind":"full","block_size":8,"cached":[2,4,6,12,16,18,20,26,30,34,36,38,44,46,48,54,60,62,64],"num_kv_heads":2,"id":2},{"kind":"mamba","block_size":4,"cached":[2,4,6,8,16,20,24,28,32,36,40,44,46,48,56,58,60,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6"],"shared_prefix_boundary":6,"lookup_groups":[[2],[0,1],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_105","request_tokens":14,"hash_unit":2,"groups":[{"kind":"mamba","block_size":2,"cached":[4,10,16,20,24,26,28,30,32,44,48,52,56,64],"id":0},{"kind":"swa","block_size":8,"cached":[16,32,40],"window":17,"id":1},{"kind":"mamba","block_size":8,"cached":[14,18,20,26,28,30,36,42,48,50,56,62,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_106","request_tokens":37,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[12,16,20,32,48,52],"num_kv_heads":2,"id":0},{"kind":"full","block_size":2,"cached":[2,4,8,10,20,22,30,32,34,36,40,44,46,48,58,62],"num_kv_heads":1,"id":1},{"kind":"swa","block_size":2,"cached":[4,12,14,16,22,24,30,40,44,48,50,56,64],"window":17,"id":2},{"kind":"mamba","block_size":2,"cached":[4,10,14,16,24,28,30,34,38,44,48,56,60,62],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_107","request_tokens":26,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[2,4,16,22,24,28,34,40,42,44,48,50,54,56,58,60,62],"id":0},{"kind":"mamba","block_size":2,"cached":[6,8,10,12,14,18,24,38,40,42,50,52,54,58],"id":1}],"hash_block_size":2,"expected_hit_tokens":24,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_108","request_tokens":20,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[2,4,6,8,10,24,26,28,32,34,38,44,48,52,54,58,60],"num_kv_heads":2,"id":0},{"kind":"full","block_size":4,"cached":[4,18,20,26,34,36,40,46,56],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":4,"cached":[8,30,32,34,40,46,50,54,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc"],"shared_prefix_boundary":10,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_109","request_tokens":61,"hash_unit":8,"groups":[{"kind":"mamba","block_size":8,"cached":[16,24,32,56],"id":0}],"hash_block_size":8,"expected_hit_tokens":56,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d760e0bccd65e846a7c1b8883a8cb8623abb5b7f38e43ba195a3e2d2823e61cf","f6b075eeb7f4f38758e5ab3f02841af9175f85f3b54867a9d50dcf6fc54f5972","2b80293b28fe553bfb295b11824f6b644410050499e3a9361f5f6248888ea88b","f9adab8b04f05701505a544b82af499c8e6c9bc104799a18f7bb91cb98764691","cbf7fca722f0af38adcaceb1b7ffa0c70454d6a7cffe42605e278b4e096eb168","4d4d615e6fa07a99264f288898152a1c1f0be17da909666cb5a6cebff68fbeb8","42ef76cddf654368f14661c018580d32791ae8fba354871ea191d32a7b155da4"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_110","request_tokens":34,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,10,14,18,24,38,60,62,64],"num_kv_heads":1,"id":0},{"kind":"full","block_size":4,"cached":[4,8,10,14,16,18,28,30,34,36,40,42,44,46,50,54,58,62],"num_kv_heads":2,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_111","request_tokens":17,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,14,24,30,34,38,44,46,48,58,62,64],"num_kv_heads":1,"id":0},{"kind":"mamba","block_size":8,"cached":[4,6,8,10,12,16,18,22,26,28,34,38,40,42,44,46,52,58,62,64],"id":1},{"kind":"full","block_size":8,"cached":[12,16,26,28,30,32,34,36,38,40,42,48,50,52,54,56,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[0],[2],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_112","request_tokens":5,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[8,24,48,64],"window":9,"id":0},{"kind":"swa","block_size":2,"cached":[4,8,20,24,32,34,46,48,52,58,60,62,64],"window":9,"id":1}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_113","request_tokens":58,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[4,8,12,28,32,36,44,52,56,64],"id":0}],"hash_block_size":4,"expected_hit_tokens":56,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311","5c08b2c1db45e3d681b23104f587f0e27f53b77e266ad2284c09a61a6fcaffe8","d8f28a87659d25d578880a1033ccb4f917645df3c06946a746415e06451eb107","d916dc2f4e07d4672d0e686ff0bb43a495663e996ad998ebcf98ccc2d3b7225f","0104e901540cfa3f5d7ed26e410505546aab4a6871fa45ef63aafb7cfd305956","06d8ef619df21f90575db42dfcf041b9a9a9fd16e011deff192f869ab3a274d1","341c17cf06cee09d1011898aedd917e82d1c7ee3b46e5802bd55567e057e0fca"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_114","request_tokens":21,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[8,16,20,24,32,44,48,52,64],"window":3,"id":0},{"kind":"full","block_size":4,"cached":[4,8,10,16,18,20,24,30,34,36,40,42,50,58,64],"num_kv_heads":1,"id":1}],"hash_block_size":2,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc"],"shared_prefix_boundary":0,"lookup_groups":[[1],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_115","request_tokens":16,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[16,18,20,24,26,34,38,40,44,50,54,64],"window":9,"id":0},{"kind":"full","block_size":2,"cached":[2,4,8,12,14,16,26,30,36,38,42,52,60,64],"num_kv_heads":2,"id":1},{"kind":"full","block_size":8,"cached":[4,6,10,18,26,30,40,42,44,50,58,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[1],[2],[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_116","request_tokens":10,"hash_unit":4,"groups":[{"kind":"mamba","block_size":4,"cached":[4,8,16,20,36,44,48,52,60],"id":0}],"hash_block_size":4,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_117","request_tokens":21,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[4,8,10,20,22,24,26,28,34,36,38,44,48,50,52,54,56,58,60,64],"id":0},{"kind":"swa","block_size":8,"cached":[8,16,24,32,64],"window":3,"id":1},{"kind":"swa","block_size":2,"cached":[2,4,10,12,14,16,20,28,32,34,38,40,44,46,48,50,52,56,58,60],"window":1,"id":2},{"kind":"mamba","block_size":4,"cached":[2,4,6,8,10,20,22,32,36,38,42,46,54,64],"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc"],"shared_prefix_boundary":8,"lookup_groups":[[0],[1],[2],[3]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_118","request_tokens":15,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[2,4,6,12,14,18,22,26,30,32,36,40,44,48,58,60,62,64],"num_kv_heads":2,"id":0},{"kind":"mamba","block_size":2,"cached":[2,4,6,10,16,18,22,28,32,34,38,40,46,52,54,60,62],"id":1},{"kind":"mamba","block_size":8,"cached":[6,8,10,12,14,16,18,20,24,28,32,38,42,46,48,52,56,62],"id":2}],"hash_block_size":2,"expected_hit_tokens":6,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_119","request_tokens":56,"hash_unit":2,"groups":[{"kind":"swa","block_size":2,"cached":[12,14,16,18,20,24,26,28,32,34,38,42,48,50,54,58,60,64],"window":3,"id":0}],"hash_block_size":2,"expected_hit_tokens":54,"alignment_tokens":2,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":2,"profile_reachability":"native_resolver_and_factory"},{"name":"random_120","request_tokens":41,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[4,6,10,12,14,18,20,24,28,30,32,36,38,44,46,48,52,58,60,64],"id":0},{"kind":"swa","block_size":2,"cached":[2,6,14,20,26,28,32,38,42,44,50,52,54,64],"window":1,"id":1},{"kind":"full","block_size":4,"cached":[2,8,24,30,34,36,38,40,46,48,50,52,54,56,60],"num_kv_heads":1,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94"],"shared_prefix_boundary":2,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_121","request_tokens":3,"hash_unit":2,"groups":[{"kind":"swa","block_size":4,"cached":[4,24,36,40,44,56],"window":5,"id":0},{"kind":"swa","block_size":8,"cached":[8,24,32,40,48],"window":9,"id":1},{"kind":"mamba","block_size":2,"cached":[6,8,12,14,16,20,26,30,36,44,46,48,52,56,60,64],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_122","request_tokens":19,"hash_unit":2,"groups":[{"kind":"mamba","block_size":4,"cached":[2,4,10,16,26,28,32,34,36,40,42,50,64],"id":0},{"kind":"mamba","block_size":8,"cached":[6,8,12,14,20,26,28,30,34,48,50,52,54,58,62],"id":1},{"kind":"full","block_size":8,"cached":[4,8,10,12,20,32,34,38,46,48,50,56,58,62,64],"num_kv_heads":2,"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9"],"shared_prefix_boundary":12,"lookup_groups":[[2],[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_123","request_tokens":41,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[6,8,12,20,24,28,32,34,40,42,46,50,52,60],"num_kv_heads":1,"id":0},{"kind":"full","block_size":4,"cached":[4,6,10,14,18,22,26,42,52],"num_kv_heads":2,"id":1},{"kind":"mamba","block_size":2,"cached":[6,8,12,24,26,28,30,38,48,52,54,56,58,62],"id":2}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_124","request_tokens":58,"hash_unit":2,"groups":[{"kind":"full","block_size":2,"cached":[2,6,10,16,20,22,24,26,28,30,42,46,48,50,52,58,60,62,64],"num_kv_heads":1,"id":0},{"kind":"swa","block_size":4,"cached":[16,32,36,48,60,64],"window":1,"id":1},{"kind":"swa","block_size":2,"cached":[8,10,18,22,28,32,34,36,38,46,50,54,60],"window":5,"id":2},{"kind":"full","block_size":4,"cached":[2,4,6,14,18,20,28,36,40,44,52],"num_kv_heads":2,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4","68cd7d3bc741827cca9cf6eab0363dacc9033ee1241e3ebf5ac1e03761e20f10","1d68dd832ab97cfe696554250f08a93a626c136db68281ce94834bc3649ddc92","9d4f2b86ad992a6ac7e450e00e6f5ac612ca982840a2b98ffc89ae8299f0b97f","6b26664ff78439e502e3ab39f39aae1ebf070be355f170575576f1582b3ed228","6431af56a24cdf67688f181585a0b27bb45914a539b885a557f016bd34b48d42","aa1cbac65d03db0a8f24410b1601c8a1a82edd30c536670137d858eb3abe1289"],"shared_prefix_boundary":0,"lookup_groups":[[0],[3],[1],[2]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_125","request_tokens":22,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[4,8,16,20,24,44,60,64],"num_kv_heads":2,"id":0}],"hash_block_size":4,"expected_hit_tokens":8,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"},{"name":"random_126","request_tokens":47,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[2,8,12,16,18,22,26,36,38,42,44,48,56,60],"id":0},{"kind":"swa","block_size":4,"cached":[4,24,44],"window":9,"id":1},{"kind":"mamba","block_size":8,"cached":[2,6,10,12,14,18,20,22,24,30,32,38,40,44,46,52,54,62,64],"id":2},{"kind":"full","block_size":2,"cached":[2,4,8,14,16,24,26,28,32,34,36,44,48,62],"num_kv_heads":1,"id":3}],"hash_block_size":2,"expected_hit_tokens":0,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b","5d88eaa22a3d2dd488484f6c16ea7fa6853f3f11e86a135a69bec281daba92a9","ba0ad6c0913e5bc94cbdcf4f9877d8cbd94a57e606e1502efe27479ebf2986bc","6d4a139f3297d5c78f81e3d73aa21e1682751603f2252716e0e69ba4a4955d98","8d725f89244a3b30025f075deb8363f1701e6874b7854e229b21e4c21c146dc7","1043bb1cd2cc83696a4dff90d6e02c47fbe0c595141854a22ca0658cdc90a027","369433f5128c3f1d5b7c12f1f841e9e628e6616ae2a3c9fe25f850c4799d27ee","3b23e97d9d25b2afbb415ca229a2952662a3a9999c391705275234aad7bfd218","74ccf46660d7f9b655ddcfcd57e5996515b81210ba06ac6b4c32d4db18a0e0f0","7e1b4590c79767117b038f191f09f6ba37534caf8997fdc1f16b1ca314723429","910b91d6330de9ea4407d1982e71e12b3bf1516e5745ca3f47eb1c68a486944b","87846b487d9ad4db7587c01112de2f657c14001bd58b240508e769761dc23dce","0eb40d27a7faa6f4608b9cf95037167bac340118eebe38beac8e9ed1728aeb94","8d32ff7ea3506725b9065f9d4c99b58651eb870d50457a1df34d62e612556372","233c521499fc58384aecc28cdecd67e67deda820c928b085e16b6229e21d9be6","eb7ec9bdc3b493975e2ab36fbbd3c886708f6966ea7c61ebd04354275c589df4"],"shared_prefix_boundary":0,"lookup_groups":[[3],[0,2],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"native_resolver_and_factory"},{"name":"random_127","request_tokens":33,"hash_unit":4,"groups":[{"kind":"full","block_size":4,"cached":[12,20,24,28,32,40,44,48,56,64],"num_kv_heads":1,"id":0}],"hash_block_size":4,"expected_hit_tokens":0,"alignment_tokens":4,"partial_hash_hits":false,"request_hashes":["58d0879dff3800f65f8c5fd449d73048c0f7699dd238a03b84b146b151d55111","e1bc29393a2da9fd798f35ff04d215f846aee6df4b803ce3d43b57df56b58fb1","321cf73a943519e37f9c8afa804132a5b9076e22b40b2d5fe6f7a2886960a68a","01dc4cca389391f8af911f65044fcfa1ab6371852fdf6b81dd13503db99baf5a","b9f465d27f7917a65fb5af05afab4ba1a06c8208c6ed5cc1a9a8d1716fb1c0a4","ce8b6bc79451ecbbd2c05af6e1f3c2d3e3f9fc9caedd982effaa207cebf2a9f9","76aa6a8694f8730d47a474bc94f2ee980813fd06dfb0335623c9f4e06cc693a8","64153719eebdecb0908d2a77a59ac3c652acdf4ee0d7b4b44c61f0fe41119311"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"UnitaryKVCacheCoordinator","scheduler_block_size":4,"profile_reachability":"native_resolver_and_factory"}],"lifecycle":[{"name":"partial_create","events":[{"type":"BlockStored","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0,"token_ids":[1,2],"parent_hash":null,"block_size":2}],"entries":{"d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a030400000000":1}},{"name":"repeat_same_alias_no_store","events":[],"entries":{"d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a030400000000":1}},{"name":"second_physical_copy","events":[{"type":"BlockStored","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0,"token_ids":[1,2],"parent_hash":null,"block_size":2}],"entries":{"d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a030400000000":2}},{"name":"one_remove_preserves_copy","events":[{"type":"BlockRemoved","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0}],"entries":{"d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a030400000000":1}},{"name":"longer_partial_replaces_old","events":[{"type":"BlockRemoved","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0},{"type":"BlockStored","hashes":["042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"group":0,"token_ids":[5,6],"parent_hash":"9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","block_size":2}],"entries":{"042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc00000000":1}},{"name":"cow_moves_without_events","events":[],"entries":{"042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc00000000":1}},{"name":"shorter_alias_on_longer_block","events":[{"type":"BlockStored","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0,"token_ids":[1,2],"parent_hash":null,"block_size":2}],"entries":{"042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc00000000":1,"d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a030400000000":1}},{"name":"promote_removes_all_aliases","events":[{"type":"BlockRemoved","hashes":["042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc"],"group":0},{"type":"BlockRemoved","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304"],"group":0},{"type":"BlockStored","hashes":["f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"group":0,"token_ids":[1,2,3,4,5,6,7,8],"parent_hash":null,"block_size":8}],"entries":{"f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a500000000":1}},{"name":"final_remove","events":[{"type":"BlockRemoved","hashes":["f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5"],"group":0}],"entries":{}},{"name":"sparse_leading_and_interior_holes","events":[{"type":"BlockStored","hashes":["9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0"],"group":1,"token_ids":[1,2,3,4,5,6,7,8,9,10,11,12],"parent_hash":null,"block_size":2}],"entries":{"9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f4028600000001":1,"f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a500000001":1,"f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac22400000001":1,"d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e000000001":1}},{"name":"full_report_invents_missing_sparse_prefix","events":[{"type":"BlockStored","hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0"],"group":1,"token_ids":[1,2,3,4,5,6,7,8,9,10,11,12],"parent_hash":null,"block_size":2}],"entries":{"9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f4028600000001":1,"f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a500000001":1,"f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac22400000001":1,"d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e000000001":1}}],"white_box_fixtures":[{"name":"unreachable_single_full_finer_hash","request_tokens":15,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,12],"id":0}],"white_box":true,"hash_block_size":2,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"white_box"},{"name":"unreachable_single_swa_finer_hash","request_tokens":15,"hash_unit":2,"groups":[{"kind":"swa","block_size":8,"cached":[8,12],"window":9,"id":0}],"white_box":true,"hash_block_size":2,"expected_hit_tokens":8,"alignment_tokens":8,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"white_box"},{"name":"unreachable_single_mamba_finer_hash","request_tokens":15,"hash_unit":2,"groups":[{"kind":"mamba","block_size":8,"cached":[8,12],"id":0}],"white_box":true,"hash_block_size":2,"expected_hit_tokens":12,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":8,"profile_reachability":"white_box"}],"configuration_boundaries":[{"name":"single_group_ignores_finer_override","rejected":false,"scheduler_block_size":8,"hash_block_size":8},{"name":"scheduler_includes_noncacheable","rejected":false,"scheduler_block_size":12,"hash_block_size":2},{"name":"noncacheable_omitted_from_hash_divisibility","rejected":false,"scheduler_block_size":24,"hash_block_size":4},{"name":"compressed_mamba_partial_alignment_rejected","rejected":true,"reason":"Invalid prefix_match_unit=2; prefix-cache boundaries must align with each spec's per-state compression. Got alignments=[4]."},{"name":"compressed_alignment_valid","rejected":false,"scheduler_block_size":8,"hash_block_size":4},{"name":"mamba_nonalign_forces_scheduler_hash","rejected":false,"scheduler_block_size":8,"hash_block_size":8},{"name":"hash_unit_divisibility_rejected","rejected":true,"reason":"Invalid prefix_match_unit=3; prefix-cacheable KV cache group block sizes must be divisible by prefix_match_unit. Got group block sizes=[4, 8], prefix-cacheable=[4, 8]."}],"hash_vectors":[{"token_ids":[0],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"493f37dcda994a276ed9f9f27341b870a0da995cb22a36dc0e43fbf55d0cd662","next_hash":"94d5174a883cd7cd03c88d586df47643ce4b36a956a1a950cf15d31d960f5af9"},{"token_ids":[23],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"dc77ababe65561a6c0288c7374a0f19ddd6a872c50d4a8a89056cb66933a3fa7","next_hash":"ffbd8d132df4b97b83bde7a90a1240cec24d5cb212b74449fe9d4b6f4c6c6db9"},{"token_ids":[24],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"0b931c79fe7c6729b94d763995a2a4e9b2b264e0064e1e19d998811e3187f17a","next_hash":"981e5763209683585ef63414b6ede9bfcd1f1a092bacbe1afb2ec7625467b057"},{"token_ids":[255],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"aaf641a7b375899586d2cdbe146d37ba4be80607d4ba1cfc54102bc06b20fb95","next_hash":"edbe809697519439fa63a22870050250b929da52b723d6c0a74ed2092ddf3246"},{"token_ids":[256],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"8f69281f22f004b8890430fe70c2747a55fe41b38fe848b648b3f9bd6ab47a3f","next_hash":"ad2d23bc5069e69ad791c23caab0718d4e50bcfc5421eef56be5a9af0f687e7e"},{"token_ids":[65535],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"64a75a03eeaa8e6110b7f50d927394de85d629a183f5028c473cb94317668e6e","next_hash":"3752c5b8beae484f859730ec25ccc8abbfcd54fd320c27a507e9ed54ec061474"},{"token_ids":[65536],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"4d42d7c1f5ff4ddefdef22bee86c0290160c23e7ec56359efc218679210b3119","next_hash":"cfcb9d260d4fd07fe582a07bf7f2ba8d9947549df1ccac3bddb183252d5c8ce2"},{"token_ids":[4294967295],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"defd6d435d77afed3e7461cf91535ffda30716c940298b8e7761cdab92f63685","next_hash":"52cad9e105f6a10eebc4aabc8df6ab6a6be7116bfabcfa46c94565e6fa3090f3"},{"token_ids":[0,23,24,255,256,65535,65536,4294967295],"parent_hash":"9bd96a485ad84efdafb72ee48a1d7a69bcead0f8f0433173941b276b9581eef0","hash":"deaa46fcabbf6b126d28ad1292550fb894177c76c7b8e270e04824cbf674d83f","next_hash":"a791027f84966e677072e3b7111313914d47507d346b80c33504d32b14ec4441"}],"boundary_lookup_fixtures":[{"name":"noncacheable_group_changes_scheduler_alignment","request_tokens":17,"hash_unit":2,"groups":[{"kind":"full","block_size":4,"cached":[4,8,12,16],"id":0},{"kind":"noncacheable","block_size":6,"cached":[],"id":1}],"hash_block_size":2,"expected_hit_tokens":12,"alignment_tokens":12,"partial_hash_hits":false,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0","a77061835d4d4de75435a6fa0c202910a1d44a2716e7cec6942e7392a9c1491b"],"shared_prefix_boundary":0,"lookup_groups":[[0]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":12,"profile_reachability":"native_resolver_and_factory"},{"name":"partial_alignment_ignores_noncacheable_divisibility","request_tokens":15,"hash_unit":2,"groups":[{"kind":"full","block_size":8,"cached":[8,14],"id":0},{"kind":"mamba","block_size":8,"cached":[14],"id":1},{"kind":"noncacheable","block_size":6,"cached":[],"id":2}],"hash_block_size":2,"expected_hit_tokens":14,"alignment_tokens":2,"partial_hash_hits":true,"request_hashes":["d448b117d4cbfc4c3f313a1e0494645014cb9c9b678618457bf09471121a0304","9ddf6cae9c4b53339646052ea592dabccb20f38eb4bb35a61b5caad749f40286","042265058f9eee7a697445f3807f8bcddbfdf905e8de22dd5b09d78a49dfdbfc","f9e81ce6df9cb0d1584cf01cb61353d592f9a86142deeb1597dbae99671c18a5","f1867b56bd355b14e70f888d9f2d8db48afa474a523367f1e396a2ea123ac224","d9b86a65c84357e07915cc5a66da48220da26399205a6509622649563c4f06e0","3568f1c8173b5e207f8f9da6fb5848d7f2af6205042f736b4c3f733f498e73a0"],"shared_prefix_boundary":0,"lookup_groups":[[0],[1]],"coordinator":"HybridKVCacheCoordinator","scheduler_block_size":24,"profile_reachability":"native_resolver_and_factory"}]} diff --git a/crates/mock_worker/src/engine.rs b/crates/mock_worker/src/engine.rs index 9da7cd2040..25f43c5c9f 100644 --- a/crates/mock_worker/src/engine.rs +++ b/crates/mock_worker/src/engine.rs @@ -593,6 +593,7 @@ impl SchedulerState { timestamp: 0.0, events: kv, dp_rank: Some(0), + ..Default::default() }) }; diff --git a/crates/radix_tree/Cargo.toml b/crates/radix_tree/Cargo.toml index a152886d79..050b662374 100644 --- a/crates/radix_tree/Cargo.toml +++ b/crates/radix_tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smg-radix-tree" -version = "0.1.0" +version = "0.1.1" edition = "2021" description = "Generic prefix-membership index: chain-native radix tree answering which holders share the longest prefix of a block chain, and how deep" license = "Apache-2.0" diff --git a/crates/radix_tree/README.md b/crates/radix_tree/README.md index f86429bf19..f2cbd7ea3f 100644 --- a/crates/radix_tree/README.md +++ b/crates/radix_tree/README.md @@ -39,6 +39,19 @@ The contract — exact matching semantics, convergence scope, and the §4 alias rules — is what `tests/differential.rs` enforces: every core must equal the reference model on every run. +Consumers that need ancestry after eviction can use `learn_context(parent, +contents)` to register a complete historical prefix. `matching_contexts` +returns fully matched registered endpoints in depth order without claiming +holder membership. Contexts belong to their originating tree. Learning or +retaining an endpoint pins its path until `release_context`; ownership is +idempotent, so consumers sharing an endpoint must release it only after their +last use. Released contexts remain usable while a holder, retained endpoint or +child keeps their chain alive. The existing whole-chain collector frees unused +chains; callers drain `drain_retired_contexts` to discard their native-identity +mappings. It does not compact dead tails of live chains. `retained_contents()` +reports retained content, not a total memory bound. `Config::max_chain_len` +bounds each path, independently of the total retained content. + ## Structure Prefixes form a trie of **chains**. A chain's contents are one diff --git a/crates/radix_tree/src/chain.rs b/crates/radix_tree/src/chain.rs index bb259f35a1..e857012813 100644 --- a/crates/radix_tree/src/chain.rs +++ b/crates/radix_tree/src/chain.rs @@ -3,8 +3,14 @@ //! public API and matching/convergence contract as the flat core; //! the differential referee proves equality. +use std::collections::BTreeMap; + use rustc_hash::FxHashMap; +#[path = "context.rs"] +mod context; +pub use context::{ContextError, PrefixContext}; + use crate::{ lineage_root, lineage_step, BlockKey, Config, ContentHash, HolderId, Overlap, OverlapScratch, SetInterner, SetRef, Stats, StoreError, StoreOutcome, @@ -31,6 +37,9 @@ struct ChainData { /// Child forks: (fork position ON THIS CHAIN, first child /// content, child chain), sorted. children: Vec<(u32, ContentHash, u32)>, + /// Historical endpoints: (lineage, retained by the caller). + contexts: BTreeMap, + context_pins: usize, } #[derive(Debug, Clone)] @@ -98,6 +107,8 @@ pub struct RadixTree { /// Distinct covered (position, content, lineage) = chain /// positions with a non-empty holder set. distinct_entries: u64, + retained_contents: usize, + retired_contexts: Vec, } impl RadixTree { @@ -113,6 +124,8 @@ impl RadixTree { interner: SetInterner::default(), holder_blocks_total: 0, distinct_entries: 0, + retained_contents: 0, + retired_contexts: Vec::new(), } } @@ -244,6 +257,42 @@ impl RadixTree { lineage: u64, cursor: &mut Option<(u32, u32)>, ) -> Result { + let (chain, pos) = self.place_content(content, lineage, cursor); + + // §4 semantics at the resolved position, PER HOLDER (chaos + // finding: chain-global key canonicity diverged from the + // model — aliasing is a per-holder concept, so the chain + // stores no keys at all; per-holder key maps carry them). + // Covered ⇒ this holder already holds the exact triple: a + // plain duplicate, an alias (their other key), or a refused + // move — all observably identical, all non-destructive. + if self.chains[chain as usize].covered(pos, holder) { + return Ok(Placed::Duplicate); + } + // Not covered: a move relocates the key first, then join. + // Key BEFORE membership: the invariant every key map entry is + // covered by a span (audit rule) must hold at every GC point, + // and the old key's coverage is what the removal below drops. + // The CURSOR chain is pinned against GC for the gap between + // this removal and the add just below: an in-batch move can + // otherwise free the chain the batch is standing on, and the + // next block would write into a freed slot (found by the + // chaos fuzz). + if let Some(old) = self.state_of(holder).keys.get(&key).copied() { + self.state_of_mut(holder).keys.remove(&key); + self.remove_membership_pinned(holder, old, Some(chain)); + } + self.add_membership(holder, chain, pos); + self.state_of_mut(holder).keys.insert(key, (chain, pos)); + Ok(Placed::Applied) + } + + fn place_content( + &mut self, + content: ContentHash, + lineage: u64, + cursor: &mut Option<(u32, u32)>, + ) -> (u32, u32) { // Resolve the target (chain, pos) for this block canonically. let target: (u32, u32) = match *cursor { None => { @@ -266,6 +315,8 @@ impl RadixTree { end_lineage: lineage, spans: Vec::new(), children: Vec::new(), + contexts: BTreeMap::new(), + context_pins: 0, }); self.roots.entry(lineage).or_default().push(c); (c, 0) @@ -313,6 +364,7 @@ impl RadixTree { } else { let cd = &mut self.chains[chain as usize]; cd.contents.push(content); + self.retained_contents += 1; cd.end_lineage = lineage; (chain, pos) } @@ -321,35 +373,8 @@ impl RadixTree { } } }; - let (chain, pos) = target; - *cursor = Some((chain, pos + 1)); - - // §4 semantics at the resolved position, PER HOLDER (chaos - // finding: chain-global key canonicity diverged from the - // model — aliasing is a per-holder concept, so the chain - // stores no keys at all; per-holder key maps carry them). - // Covered ⇒ this holder already holds the exact triple: a - // plain duplicate, an alias (their other key), or a refused - // move — all observably identical, all non-destructive. - if self.chains[chain as usize].covered(pos, holder) { - return Ok(Placed::Duplicate); - } - // Not covered: a move relocates the key first, then join. - // Key BEFORE membership: the invariant every key map entry is - // covered by a span (audit rule) must hold at every GC point, - // and the old key's coverage is what the removal below drops. - // The CURSOR chain is pinned against GC for the gap between - // this removal and the add just below: an in-batch move can - // otherwise free the chain the batch is standing on, and the - // next block would write into a freed slot (found by the - // chaos fuzz). - if let Some(old) = self.state_of(holder).keys.get(&key).copied() { - self.state_of_mut(holder).keys.remove(&key); - self.remove_membership_pinned(holder, old, Some(chain)); - } - self.add_membership(holder, chain, pos); - self.state_of_mut(holder).keys.insert(key, (chain, pos)); - Ok(Placed::Applied) + *cursor = Some((target.0, target.1 + 1)); + target } /// Read-only no-op predicate: true iff `store(id, parent, blocks)` @@ -549,13 +574,8 @@ impl RadixTree { // ---- reads ---- - pub fn overlap( - &self, - chain_query: &[ContentHash], - scratch: &mut OverlapScratch, - out: &mut Vec, - ) { - out.clear(); + fn match_path(&self, chain_query: &[ContentHash], segments: &mut Vec<(u32, u32, u32)>) { + segments.clear(); if chain_query.is_empty() { return; } @@ -570,8 +590,6 @@ impl RadixTree { // Walk the trie along the query, collecting the matched path // as (chain, from, to) segments into the caller-owned scratch // (no per-query heap once warm — the alloc gate holds this). - let segments = &mut scratch.segments; - segments.clear(); let mut chain = root; let mut pos = 0u32; let limit = chain_query.len().min(u32::MAX as usize) as u32; @@ -615,6 +633,17 @@ impl RadixTree { None => break, } } + } + + pub fn overlap( + &self, + chain_query: &[ContentHash], + scratch: &mut OverlapScratch, + out: &mut Vec, + ) { + out.clear(); + self.match_path(chain_query, &mut scratch.segments); + let segments = &scratch.segments; if segments.is_empty() { return; } @@ -729,6 +758,7 @@ impl RadixTree { 16 * c.contents.len() as u64 + 24 * c.spans.len() as u64 + 16 * c.children.len() as u64 + + 32 * c.contexts.len() as u64 }) .sum(); // Interned holder sets: the `Arc<[u32]>` data plus per-bucket @@ -778,6 +808,7 @@ impl RadixTree { } fn alloc_chain(&mut self, data: ChainData) -> u32 { + self.retained_contents += data.contents.len(); if let Some(c) = self.free_chains.pop() { self.chains[c as usize] = data; c @@ -796,6 +827,8 @@ impl RadixTree { end_lineage: lineage, spans: Vec::new(), children: Vec::new(), + contexts: BTreeMap::new(), + context_pins: 0, }); let pd = &mut self.chains[parent as usize]; let at = pd @@ -1010,7 +1043,7 @@ impl RadixTree { if cd.contents.is_empty() { return; } - if !cd.spans.is_empty() || !cd.children.is_empty() { + if !cd.spans.is_empty() || !cd.children.is_empty() || cd.context_pins > 0 { return; } // In-contract this chain has no key-map references either: @@ -1029,6 +1062,17 @@ impl RadixTree { let parent = cd.parent; let start_lineage = cd.start_lineage; let first_content = cd.contents.first().copied(); + self.retired_contexts + .extend( + cd.contexts + .iter() + .map(|(&position, &(lineage, _))| PrefixContext { + chain, + position, + lineage, + }), + ); + self.retained_contents -= cd.contents.len(); self.chains[chain as usize] = ChainData::default(); self.free_chains.push(chain); match parent { @@ -1102,6 +1146,9 @@ impl RadixTree { pub fn audit(&self) -> Result<(), String> { use std::collections::HashSet; + if self.chains.iter().map(|c| c.contents.len()).sum::() != self.retained_contents { + return Err("retained content count mismatch".into()); + } // Slot/name/free coherence (same rules as the flat core). let mut live = 0u64; for (idx, slot) in self.slots.iter().enumerate() { @@ -1145,6 +1192,9 @@ impl RadixTree { return Err(format!("live chain {ci} is empty")); } live_chains.insert(ci); + if cd.context_pins != cd.contexts.values().filter(|(_, pinned)| *pinned).count() { + return Err(format!("chain {ci} context pin count mismatch")); + } let mut prev_end = cd.base_pos; let mut prev_set: Option<&SetRef> = None; for s in &cd.spans { @@ -1213,8 +1263,22 @@ impl RadixTree { } // start/end lineage coherence. let mut l = cd.start_lineage; - for i in 1..cd.contents.len() { - l = lineage_step(l, cd.contents[i]); + let mut contexts = cd.contexts.iter().peekable(); + for (i, &content) in cd.contents.iter().enumerate() { + if i > 0 { + l = lineage_step(l, content); + } + if let Some(&(&position, &(lineage, _))) = contexts.peek() { + if position == cd.base_pos + i as u32 { + if lineage != l { + return Err(format!("chain {ci} context lineage mismatch")); + } + contexts.next(); + } + } + } + if contexts.next().is_some() { + return Err(format!("chain {ci} context outside contents")); } if l != cd.end_lineage { return Err(format!("chain {ci} end_lineage stale")); @@ -1307,7 +1371,7 @@ impl RadixTree { } } // GC coherence: a live chain must be referenced by spans, - // children, or at least one key map (otherwise the GC missed + // children, registered contexts, or a key map (otherwise the GC missed // it — the leak class the churn gate caught). let mut key_ref_chains: HashSet = HashSet::new(); for slot in &self.slots { @@ -1319,7 +1383,11 @@ impl RadixTree { } for &ci in &live_chains { let cd = &self.chains[ci as usize]; - if cd.spans.is_empty() && cd.children.is_empty() && !key_ref_chains.contains(&ci) { + if cd.spans.is_empty() + && cd.children.is_empty() + && cd.context_pins == 0 + && !key_ref_chains.contains(&ci) + { return Err(format!("live chain {ci} is orphaned (GC leak)")); } } diff --git a/crates/radix_tree/src/context.rs b/crates/radix_tree/src/context.rs new file mode 100644 index 0000000000..1a030af0b1 --- /dev/null +++ b/crates/radix_tree/src/context.rs @@ -0,0 +1,150 @@ +//! Historical prefix identity, independent of holder membership. + +use super::*; + +/// A complete learned prefix in its originating tree. Contexts and the paths +/// they reference survive membership removal until explicitly released or the +/// tree is dropped. Released history may remain while its chain is needed. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct PrefixContext { + pub(super) chain: u32, + pub(super) position: u32, + pub(super) lineage: u64, +} + +impl PrefixContext { + pub fn depth(self) -> u32 { + self.position + 1 + } +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum ContextError { + EmptyContext, + InvalidParent, + ChainTooLong, +} + +impl RadixTree { + /// Append from a previously learned parent, without claiming residency. + /// Only the final endpoint is registered; intermediate content is shared. + /// Learning or retaining the same endpoint is idempotent, not reference + /// counted. Callers sharing an endpoint must release it only after all of + /// their uses end. + pub fn learn_context( + &mut self, + parent: Option, + contents: &[ContentHash], + ) -> Result { + if contents.is_empty() { + return Err(ContextError::EmptyContext); + } + if parent.is_some_and(|context| { + self.chains + .get(context.chain as usize) + .and_then(|chain| chain.contexts.get(&context.position)) + .map(|(lineage, _)| lineage) + != Some(&context.lineage) + }) { + return Err(ContextError::InvalidParent); + } + let start = parent.map_or(0, PrefixContext::depth); + if contents.len() as u64 + u64::from(start) > u64::from(self.cfg.max_chain_len) { + return Err(ContextError::ChainTooLong); + } + let mut cursor = parent.map(|context| (context.chain, context.depth())); + let mut lineage = parent.map(|context| context.lineage); + for &content in contents { + let next = lineage.map_or_else( + || lineage_root(content), + |previous| lineage_step(previous, content), + ); + self.place_content(content, next, &mut cursor); + lineage = Some(next); + } + let (chain, end) = cursor.expect("nonempty contents"); + let endpoint = PrefixContext { + chain, + position: end - 1, + lineage: lineage.expect("nonempty contents"), + }; + let chain = &mut self.chains[chain as usize]; + if !chain + .contexts + .insert(endpoint.position, (endpoint.lineage, true)) + .is_some_and(|(_, pinned)| pinned) + { + chain.context_pins += 1; + } + Ok(endpoint) + } + + /// Retain an existing endpoint again, for example when its evidence returns. + pub fn retain_context(&mut self, context: PrefixContext) -> bool { + self.set_context_retained(context, true) + } + + /// Release an endpoint. Whole chains are reclaimed once no retained + /// endpoint, holder membership or child needs them. Drain retired contexts + /// after mutations to remove corresponding caller-owned identity records. + pub fn release_context(&mut self, context: PrefixContext) -> bool { + if !self.set_context_retained(context, false) { + return false; + } + self.maybe_gc_chain(context.chain); + true + } + + fn set_context_retained(&mut self, context: PrefixContext, retained: bool) -> bool { + let Some(chain) = self.chains.get_mut(context.chain as usize) else { + return false; + }; + let Some((lineage, pinned)) = chain.contexts.get_mut(&context.position) else { + return false; + }; + if *lineage != context.lineage { + return false; + } + if *pinned != retained { + if retained { + chain.context_pins += 1; + } else { + chain.context_pins -= 1; + } + *pinned = retained; + } + true + } + + /// Endpoints whose backing chains have been collected. These handles can no + /// longer anchor children; the caller must discard their identity mappings. + pub fn drain_retired_contexts(&mut self) -> impl Iterator + '_ { + self.retired_contexts.drain(..) + } + + /// Unique content units retained, including historical paths without holders. + pub fn retained_contents(&self) -> usize { + self.retained_contents + } + + /// Return registered endpoints whose entire prefix matches, in depth order. + /// Partial matches within a report do not establish that report's identity. + pub fn matching_contexts( + &self, + query: &[ContentHash], + scratch: &mut OverlapScratch, + out: &mut Vec, + ) { + out.clear(); + self.match_path(query, &mut scratch.segments); + for &(chain, from, to) in &scratch.segments { + for (&position, &(lineage, _)) in self.chains[chain as usize].contexts.range(from..to) { + out.push(PrefixContext { + chain, + position, + lineage, + }); + } + } + } +} diff --git a/crates/radix_tree/src/lib.rs b/crates/radix_tree/src/lib.rs index 3f5390fa0d..a333007593 100644 --- a/crates/radix_tree/src/lib.rs +++ b/crates/radix_tree/src/lib.rs @@ -20,7 +20,7 @@ mod chain; /// flat core remains as [`FlatTree`] — a second, independently /// verified implementation the dual-core harness keeps asserting /// against the model. -pub use chain::RadixTree; +pub use chain::{ContextError, PrefixContext, RadixTree}; use rustc_hash::FxHashMap; /// Position-independent content identity (the matching currency). diff --git a/crates/radix_tree/tests/contexts.rs b/crates/radix_tree/tests/contexts.rs new file mode 100644 index 0000000000..5e58e002af --- /dev/null +++ b/crates/radix_tree/tests/contexts.rs @@ -0,0 +1,84 @@ +use radix_tree::{Config, ContextError, OverlapScratch, RadixTree}; + +#[test] +fn contexts_share_paths_and_match_only_complete_endpoints() { + let mut tree = RadixTree::new(Config::default()); + let parent = tree.learn_context(None, &[1, 2]).unwrap(); + let tail = tree.learn_context(Some(parent), &[3, 4]).unwrap(); + let fork = tree.learn_context(Some(parent), &[8, 9]).unwrap(); + assert_eq!(tree.learn_context(None, &[1, 2, 3, 4]), Ok(tail)); + let middle = tree.learn_context(Some(parent), &[3]).unwrap(); + assert_eq!(tree.retained_contents(), 6); + + let mut scratch = OverlapScratch::default(); + let mut matched = Vec::new(); + tree.matching_contexts(&[1, 2, 3, 4, 5], &mut scratch, &mut matched); + assert_eq!(matched, [parent, middle, tail]); + tree.matching_contexts(&[1, 2, 8], &mut scratch, &mut matched); + assert_eq!(matched, [parent]); + tree.matching_contexts(&[1, 2, 8, 9], &mut scratch, &mut matched); + assert_eq!(matched, [parent, fork]); + tree.matching_contexts(&[1, 2, 3, 99], &mut scratch, &mut matched); + assert_eq!(matched, [parent, middle]); + tree.matching_contexts(&[], &mut scratch, &mut matched); + assert!(matched.is_empty()); + tree.matching_contexts(&[99], &mut scratch, &mut matched); + assert!(matched.is_empty()); + assert_eq!(tree.stats().holder_blocks, 0); + tree.audit().unwrap(); +} + +#[test] +fn historical_parent_survives_point_eviction_and_unrelated_chain_reuse() { + let mut tree = RadixTree::new(Config::default()); + let worker = tree.create_holder("worker"); + tree.store(worker, None, &[(10, 1), (20, 2)]).unwrap(); + let parent = tree.learn_context(None, &[1, 2]).unwrap(); + tree.remove(worker, &[10, 20]); + tree.store(worker, None, &[(30, 7)]).unwrap(); + tree.clear(worker); + assert_eq!(tree.retained_contents(), 2); + tree.store(worker, None, &[(40, 8)]).unwrap(); + tree.retire_holder(worker); + let tail = tree.learn_context(Some(parent), &[3, 4]).unwrap(); + + let mut scratch = OverlapScratch::default(); + let mut matched = Vec::new(); + tree.matching_contexts(&[1, 2, 3, 4], &mut scratch, &mut matched); + assert_eq!(matched, [parent, tail]); + let mut overlap = Vec::new(); + tree.overlap(&[1, 2, 3, 4], &mut scratch, &mut overlap); + assert!(overlap.is_empty()); + assert_eq!(tree.retained_contents(), 4); + tree.audit().unwrap(); +} + +#[test] +fn released_contexts_share_the_existing_whole_chain_lifecycle() { + let mut tree = RadixTree::new(Config::default()); + let parent = tree.learn_context(None, &[1, 2]).unwrap(); + let tail = tree.learn_context(Some(parent), &[3, 4]).unwrap(); + let fork = tree.learn_context(Some(parent), &[8, 9]).unwrap(); + assert!(tree.release_context(parent)); + assert!(tree.release_context(tail)); + assert_eq!(tree.retained_contents(), 6); // Existing GC keeps the parent chain's tail. + assert_eq!(tree.drain_retired_contexts().count(), 0); + assert!(tree.retain_context(parent)); + assert!(tree.release_context(fork)); + assert_eq!(tree.drain_retired_contexts().collect::>(), [fork]); + assert_eq!(tree.retained_contents(), 4); + assert!(tree.release_context(parent)); + let retired = tree.drain_retired_contexts().collect::>(); + assert_eq!(retired.len(), 2); + assert!(retired.contains(&parent) && retired.contains(&tail)); + assert_eq!(tree.retained_contents(), 0); + + // Slot reuse cannot turn an old handle into an unrelated prefix. + tree.learn_context(None, &[7, 8]).unwrap(); + assert!(!tree.retain_context(parent)); + assert_eq!( + tree.learn_context(Some(parent), &[3]), + Err(ContextError::InvalidParent) + ); + tree.audit().unwrap(); +} diff --git a/grpc_servicer/README.md b/grpc_servicer/README.md index 3f7f1c8838..dea43636e0 100644 --- a/grpc_servicer/README.md +++ b/grpc_servicer/README.md @@ -36,6 +36,8 @@ pip install smg-grpc-servicer[sglang] vllm serve meta-llama/Llama-2-7b-hf --grpc ``` +For the pinned, group-aware cache-event contract, see [Group-aware vLLM KV events](docs/vllm-group-events.md). + ### MLX ```bash diff --git a/grpc_servicer/docs/images/kv-cache-group-routing-scaling.png b/grpc_servicer/docs/images/kv-cache-group-routing-scaling.png new file mode 100644 index 0000000000..ff1e49a60f Binary files /dev/null and b/grpc_servicer/docs/images/kv-cache-group-routing-scaling.png differ diff --git a/grpc_servicer/docs/images/kv-cache-groups.png b/grpc_servicer/docs/images/kv-cache-groups.png new file mode 100644 index 0000000000..bb2f0893d3 Binary files /dev/null and b/grpc_servicer/docs/images/kv-cache-groups.png differ diff --git a/grpc_servicer/docs/vllm-group-events.md b/grpc_servicer/docs/vllm-group-events.md new file mode 100644 index 0000000000..4f13751e14 --- /dev/null +++ b/grpc_servicer/docs/vllm-group-events.md @@ -0,0 +1,27 @@ +# Group-aware vLLM KV events + +Cache-aware routing applies the events received from each worker and discovers cache groups as they appear. It finds a common reported token boundary: full attention needs a continuous prefix, sliding-window attention needs the retained tail, and Mamba/GDN needs a state checkpoint at that boundary. Independent group maxima cannot simply be minimized because checkpoints may be sparse. A group that has never been reported does not participate. + +The bridge automatically selects this path when the installed vLLM event schema supplies group metadata. There is no additional environment variable, manual group list or request restriction. Existing KV-event publisher and gateway cache-aware routing configuration still apply. Older vLLM event schemas keep the legacy converter. Updated protocol bindings, bridge and gateway are needed for group-aware scores; older gateways ignore the additive group fields and receive no legacy cache evidence from these batches. + +![KV cache groups: common prefix selection from retained SWA spans and Mamba states](images/kv-cache-groups.png) + +## Received-event contract + +Native hashes remain opaque byte identities, including unsigned 64-bit exports. Dense stores with a known parent connect token prefixes to those identities. Sparse stores preserve their entire token span and membership; the consumer never assigns omitted hashes ordinal token offsets. Another group's dense report can resolve their shared hash identities. An unresolved report waits for its parent while live evidence depends on it; an unknown parent is never treated as a root. Token prefixes match their received content without reproducing the engine's hash algorithm or requiring its seed. + +STORE supplies idempotent positive evidence; REMOVE withdraws that evidence in the named group. Neither operation proves a physical-copy count. CLEAR empties reported memberships while retaining the groups already observed. Known gaps, disconnects and malformed input discard the observation session; subsequent valid reports immediately begin a new view. No complete group roster or empty-cache baseline is required. At the end of each event batch, unused pending reports are discarded and prefix history is released to Radix's existing whole-chain collector. Live descendants keep their ancestry; dead tails within live chains may remain. There is no additional aggregate capacity limit or capacity-triggered reset, and this is not a total memory bound. If all supporting history has been collected, a later child cannot be matched until a usable parent is reported again. This can lose affinity, including for a Mamba checkpoint whose parent was removed in an earlier batch, without inventing a shorter rooted prefix. + +The recognized event kinds are `full_attention`, `mla_attention`, `sliding_window` and `mamba`. MLA uses the full-attention coverage condition; Mamba includes GDN models using vLLM's Mamba cache manager. This is a contract about advertised event semantics, not a claim that every concrete native cache-spec subclass or scheduler has identical lookup rules. Native global alignment, partial-hit eligibility and full spec equality are not present in these events and are not reconstructed. Unsupported kinds or insufficient metadata produce no cache-affinity score and use existing routing fallback. CPU, remote and owned-offload records are filtered; rank values other than zero are unsupported. LoRA and extra hash inputs cannot establish plain-token mappings; namespaced requests use load fallback. Inference requests themselves remain unchanged. + +## Producer and transport limits + +The result is a common boundary supported by resolved received reports. It is not a cache reservation or the engine's exact current reusable-token count. Unresolved histories can hide additional matches; unreported groups and stale/missing removals can make the reported view more optimistic than current engine state. These are separate from correctly applying the events that did arrive. + +Audited vLLM revision: [`56d001faf0f53c72fcedbbdd77e5418f68fe7494`](https://github.com/vllm-project/vllm/tree/56d001faf0f53c72fcedbbdd77e5418f68fe7494). Its publisher is asynchronous and offers optional finite replay. The current SMG vLLM subscriber uses live rank-zero ZMQ events and does not fetch that replay. A silent publisher restart without a stream disconnect has no epoch identifier; a missing final event may be undetectable until later traffic. This change does not claim to repair those transport limitations. + +The native `full` reporting helper can re-report existing blocks and can include hashes for missing sparse-prefix blocks. Consequently a reported-state score may disagree with native lookup even with caught-up transport. See the pinned [event schema](https://github.com/vllm-project/vllm/blob/56d001faf0f53c72fcedbbdd77e5418f68fe7494/vllm/distributed/kv_events.py), [block lifecycle](https://github.com/vllm-project/vllm/blob/56d001faf0f53c72fcedbbdd77e5418f68fe7494/vllm/v1/core/block_pool.py) and [native lookup](https://github.com/vllm-project/vllm/blob/56d001faf0f53c72fcedbbdd77e5418f68fe7494/vllm/v1/core/single_type_kv_cache_manager.py). + +## Validation + +Tests replay 159 snapshots and 11 lifecycle transitions, distinguishing received-event assertions from the 63 snapshots with comparable native expectations. Python conversion tests and frozen protobuf replay cover the bridge/consumer boundary, including a two-worker selection change after a Mamba checkpoint removal. Legacy converter and routing tests remain relevant compatibility checks. Use freshly generated protocol bindings when running the Python suite, `cargo test -p kv-index`, and the `smg` library tests. Fixture conformance alone does not establish GPU behavior or performance. diff --git a/grpc_servicer/smg_grpc_servicer/kv_events.py b/grpc_servicer/smg_grpc_servicer/kv_events.py index e3fdcc0154..c9f95fd6da 100644 --- a/grpc_servicer/smg_grpc_servicer/kv_events.py +++ b/grpc_servicer/smg_grpc_servicer/kv_events.py @@ -135,6 +135,8 @@ async def stream_kv_events( is_cancelled: Callable[[], bool], *, recv_timeout: float = 1.0, + convert: Callable[[object, int, int], tuple[common_pb2.KvEventBatch, int]] = convert_batch, + strict: bool = False, ) -> AsyncIterator[common_pb2.KvEventBatch]: """Core ZMQ→proto streaming loop, decoupled from any engine and gRPC types. @@ -147,6 +149,8 @@ async def stream_kv_events( gRPC client's ``subscribe_kv_events().await`` resolves promptly. is_cancelled: returns True when the RPC is cancelled; loop then exits. recv_timeout: poll timeout so cancellation is observed even when idle. + strict: abort on malformed/undecodable input so consumers invalidate + immediately, even if no later batch arrives to expose a gap. Yields proto KvEventBatch using the ZMQ publisher's native sequence numbers. """ @@ -160,14 +164,20 @@ async def stream_kv_events( frames = await sub_socket.recv_multipart() # ZMQ multipart: [topic, 8-byte big-endian seq, msgpack payload]. - if len(frames) < 3: + if len(frames) < 3 or (strict and len(frames) != 3): + if strict: + raise ValueError("Malformed KV event multipart frame") continue + if strict and len(frames[1]) != 8: + raise ValueError("Malformed KV event sequence number") zmq_seq = int.from_bytes(frames[1], "big") try: raw_batch = decode(frames[2]) - except Exception as e: # noqa: BLE001 - one bad frame must not kill the stream + except Exception as e: # noqa: BLE001 - legacy consumers tolerate bad frames + if strict: + raise logger.warning("Failed to decode KV event batch: %s", e) continue - proto_batch, event_id = convert_batch(raw_batch, zmq_seq, event_id) + proto_batch, event_id = convert(raw_batch, zmq_seq, event_id) yield proto_batch diff --git a/grpc_servicer/smg_grpc_servicer/vllm/kv_group_events.py b/grpc_servicer/smg_grpc_servicer/vllm/kv_group_events.py new file mode 100644 index 0000000000..45a5a4f25e --- /dev/null +++ b/grpc_servicer/smg_grpc_servicer/vllm/kv_group_events.py @@ -0,0 +1,102 @@ +"""Preserve received vLLM group reports without guessing sparse token offsets.""" + +from __future__ import annotations + +import logging + +from smg_grpc_proto.generated import common_pb2 + +logger = logging.getLogger(__name__) +_GROUP_FIELDS = {"group_idx", "kv_cache_spec_kind", "kv_cache_spec_sliding_window", "extra_keys"} + + +def _uint(value: object, *, positive: bool = False) -> int: + if type(value) is not int or not int(positive) <= value < 2**32: + raise ValueError("Invalid unsigned event field") + return value + + +def _hash(value: object) -> bytes: + if type(value) is bytes and value: + return value + if type(value) is int and 0 <= value < 2**64: + return value.to_bytes(8, "big") + raise ValueError("Invalid native block hash") + + +class GroupEventConverter: + """Convert GPU-local reports; repeated stores remain repeated reports.""" + + def _event(self, event: object) -> common_pb2.KvGroupEvent | None: + name = type(event).__name__ + if name == "AllBlocksCleared": + return common_pb2.KvGroupEvent(operation=common_pb2.KvGroupEvent.CLEAR) + if name not in ("BlockStored", "BlockRemoved"): + raise ValueError(f"Unknown KV event type: {name}") + if ( + event.medium != "GPU" + or getattr(event, "locality", None) not in (None, "LOCAL") + or getattr(event, "ownership", None) is not None + ): + return None + if not isinstance(event.block_hashes, list): + raise ValueError("Malformed block hashes") + converted = common_pb2.KvGroupEvent( + operation=( + common_pb2.KvGroupEvent.STORE + if name == "BlockStored" + else common_pb2.KvGroupEvent.REMOVE + ), + group_id=_uint(event.group_idx), + block_hashes=[_hash(h) for h in event.block_hashes], + ) + if name == "BlockStored": + if not isinstance(event.kv_cache_spec_kind, str) or not event.kv_cache_spec_kind: + raise ValueError("Missing cache-spec kind") + converted.kind = event.kv_cache_spec_kind + converted.sliding_window = ( + 0 + if event.kv_cache_spec_sliding_window is None + else _uint(event.kv_cache_spec_sliding_window) + ) + converted.parent_block_hash = ( + b"" if event.parent_block_hash is None else _hash(event.parent_block_hash) + ) + converted.block_size = _uint(event.block_size, positive=True) + converted.token_ids.extend(_uint(token) for token in event.token_ids) + extras = event.extra_keys + if extras is not None and ( + not isinstance(extras, list) + or len(extras) != len(event.block_hashes) + or any(key is not None and not isinstance(key, tuple) for key in extras) + ): + raise ValueError("Malformed extra hash inputs") + converted.tokens_matchable = ( + event.lora_id is None + and event.lora_name is None + and (extras is None or all(key is None for key in extras)) + ) + return converted + + def convert_batch(self, raw_batch: object, seq_num: int, event_id_start: int): + batch = common_pb2.KvEventBatch( + sequence_number=seq_num, timestamp=raw_batch.ts, group_events_enabled=True + ) + if raw_batch.data_parallel_rank is not None: + batch.dp_rank = raw_batch.data_parallel_rank + for event in raw_batch.events: + try: + converted = self._event(event) + except (ValueError, AttributeError, TypeError) as error: + logger.warning("Invalid group KV event: %s", error) + converted = common_pb2.KvGroupEvent(operation=common_pb2.KvGroupEvent.INVALID) + if converted is not None: + batch.group_events.append(converted) + return batch, event_id_start + len(raw_batch.events) + + +def resolve_group_event_converter(block_stored_type: type) -> GroupEventConverter | None: + """Select by installed event schema, without consulting engine configuration.""" + if _GROUP_FIELDS.issubset(getattr(block_stored_type, "__struct_fields__", ())): + return GroupEventConverter() + return None diff --git a/grpc_servicer/smg_grpc_servicer/vllm/servicer.py b/grpc_servicer/smg_grpc_servicer/vllm/servicer.py index 699ca50775..6329a4bd4a 100755 --- a/grpc_servicer/smg_grpc_servicer/vllm/servicer.py +++ b/grpc_servicer/smg_grpc_servicer/vllm/servicer.py @@ -23,7 +23,7 @@ from smg_grpc_proto.generated import common_pb2 from transformers import BatchFeature from vllm import PoolingParams, SamplingParams, TokensPrompt -from vllm.distributed.kv_events import KVEventBatch +from vllm.distributed.kv_events import BlockStored, KVEventBatch from vllm.engine.protocol import EngineClient from vllm.inputs.engine import MultiModalInput as VllmMultiModalInput from vllm.inputs.engine import mm_input, tokens_input @@ -44,6 +44,7 @@ resolve_kv_events_config, stream_kv_events, ) +from smg_grpc_servicer.vllm.kv_group_events import resolve_group_event_converter from smg_grpc_servicer.vllm.kv_transfer import ( pairing_fields, params_from_request, @@ -1107,6 +1108,7 @@ async def SubscribeKvEvents( logger.info("SubscribeKvEvents: connected to ZMQ endpoint %s", pub_endpoint) decoder = msgspec.msgpack.Decoder(KVEventBatch) + group_converter = resolve_group_event_converter(BlockStored) try: async for proto_batch in stream_kv_events( @@ -1114,6 +1116,11 @@ async def SubscribeKvEvents( decoder.decode, lambda: context.send_initial_metadata(()), context.cancelled, + **( + {"convert": group_converter.convert_batch, "strict": True} + if group_converter is not None + else {} + ), ): yield proto_batch except asyncio.CancelledError: diff --git a/grpc_servicer/tests/test_vllm_kv_group_events.py b/grpc_servicer/tests/test_vllm_kv_group_events.py new file mode 100644 index 0000000000..05578e0fb1 --- /dev/null +++ b/grpc_servicer/tests/test_vllm_kv_group_events.py @@ -0,0 +1,339 @@ +"""Received-event conversion and actual subscription wiring, without vLLM.""" + +import ast +import asyncio +import importlib.util +import logging +from pathlib import Path +from types import SimpleNamespace as NS +from unittest.mock import AsyncMock, Mock + +import grpc +import pytest +from smg_grpc_proto.generated import common_pb2 +from smg_grpc_servicer.kv_events import endpoint_for_rank, stream_kv_events + +_ROOT = Path(__file__).parents[1] / "smg_grpc_servicer" / "vllm" +_SPEC = importlib.util.spec_from_file_location("kv_group_events", _ROOT / "kv_group_events.py") +module = importlib.util.module_from_spec(_SPEC) +_SPEC.loader.exec_module(module) +_GROUP_SCHEMA_FIELDS = { + "group_idx", + "kv_cache_spec_kind", + "kv_cache_spec_sliding_window", + "extra_keys", +} + + +def event(name="BlockStored", **overrides): + # Start with the oldest group-event schema; add optional fields per test. + fields = dict( + block_hashes=[bytes(range(32))], + parent_block_hash=None, + group_idx=0, + block_size=4, + token_ids=[1, 2, 3, 4], + medium="GPU", + lora_id=None, + lora_name=None, + extra_keys=[None], + kv_cache_spec_kind="full_attention", + kv_cache_spec_sliding_window=None, + ) + fields.update(overrides) + return type(name, (), fields)() + + +def batch(events, **overrides): + raw = NS(ts=3.5, events=events, data_parallel_rank=None) + raw.__dict__.update(overrides) + return module.GroupEventConverter().convert_batch(raw, 7, 10) + + +def test_schema_selects_group_conversion_without_engine_config(): + supported = type("BlockStored", (), {"__struct_fields__": tuple(_GROUP_SCHEMA_FIELDS)}) + assert isinstance(module.resolve_group_event_converter(supported), module.GroupEventConverter) + assert module.resolve_group_event_converter(type("BlockStored", (), {})) is None + for missing in _GROUP_SCHEMA_FIELDS: + older = type( + "BlockStored", (), {"__struct_fields__": tuple(_GROUP_SCHEMA_FIELDS - {missing})} + ) + assert module.resolve_group_event_converter(older) is None + + +@pytest.mark.parametrize( + "name,operation", + [ + ("BlockStored", common_pb2.KvGroupEvent.STORE), + ("BlockRemoved", common_pb2.KvGroupEvent.REMOVE), + ], +) +@pytest.mark.parametrize( + "optional_fields", + [ + {}, + dict(locality="LOCAL"), + dict(locality=None, ownership=None), + ], +) +def test_local_events_preserve_group_across_optional_field_versions( + name, operation, optional_fields +): + raw = event(name, group_idx=73, **optional_fields) + converted, _ = batch([raw]) + assert [e.operation for e in converted.group_events] == [operation] + assert [e.group_id for e in converted.group_events] == [73] + + +@pytest.mark.parametrize("rank", [None, 0, 2]) +def test_batch_preserves_sequence_timestamp_rank_and_native_keys(rank): + hashes = [0, 2**63, 2**64 - 1, bytes(range(32)), b"x" * 16] + converted, event_id = batch( + [event(block_hashes=hashes, extra_keys=None)], data_parallel_rank=rank + ) + assert converted.sequence_number == 7 + assert converted.timestamp == 3.5 + assert event_id == 11 + assert converted.group_events_enabled + assert not converted.events + assert converted.HasField("dp_rank") == (rank is not None) + if rank is not None: + assert converted.dp_rank == rank + assert list(converted.group_events[0].block_hashes) == [ + (0).to_bytes(8, "big"), + (2**63).to_bytes(8, "big"), + (2**64 - 1).to_bytes(8, "big"), + bytes(range(32)), + b"x" * 16, + ] + + +def test_sparse_span_unknown_parent_and_partial_store_are_not_sliced(): + hashes = [b"a" * 32, b"b" * 32] + tokens = list(range(20)) + converted, _ = batch( + [ + event( + block_hashes=hashes, token_ids=tokens, extra_keys=[None, None], parent_block_hash=9 + ), + event(group_idx=8, kv_cache_spec_kind="mamba", block_size=2, token_ids=[20, 21]), + ] + ) + sparse, partial = converted.group_events + assert list(sparse.block_hashes) == hashes + assert list(sparse.token_ids) == tokens + assert sparse.parent_block_hash == (9).to_bytes(8, "big") + assert sparse.tokens_matchable + assert partial.group_id == 8 + assert partial.kind == "mamba" + assert partial.block_size == 2 + assert list(partial.token_ids) == [20, 21] + + +@pytest.mark.parametrize( + "kind,window", [("full_attention", None), ("sliding_window", 1024), ("future", 17)] +) +def test_received_group_metadata_is_preserved(kind, window): + converted, _ = batch( + [event(group_idx=73, kv_cache_spec_kind=kind, kv_cache_spec_sliding_window=window)] + ) + stored = converted.group_events[0] + assert stored.operation == common_pb2.KvGroupEvent.STORE + assert (stored.group_id, stored.kind, stored.sliding_window) == (73, kind, window or 0) + + +def test_empty_sparse_store_still_preserves_group_metadata(): + converted, _ = batch([event(block_hashes=[], extra_keys=[])]) + stored = converted.group_events[0] + assert stored.operation == common_pb2.KvGroupEvent.STORE + assert not stored.block_hashes + assert list(stored.token_ids) == [1, 2, 3, 4] + assert stored.kind == "full_attention" + + +def test_repeated_reports_and_remove_clear_preserve_order(): + events = [event(), event(), event("BlockRemoved"), event("AllBlocksCleared")] + converted, event_id = batch(events) + assert [e.operation for e in converted.group_events] == [1, 1, 2, 3] + assert converted.group_events[0] == converted.group_events[1] + assert event_id == 14 + + +@pytest.mark.parametrize( + "extra", + [ + dict(medium="CPU"), + dict(medium="STORAGE"), + dict(medium=None), + dict(locality="REMOTE"), + dict(ownership="offload"), + ], +) +def test_nonlocal_events_are_filtered_symmetrically(extra): + converted, event_id = batch([event(), event(**extra), event("BlockRemoved", **extra)]) + assert [e.operation for e in converted.group_events] == [common_pb2.KvGroupEvent.STORE] + assert event_id == 13 + filtered, _ = batch([event(**extra)]) + assert filtered.group_events_enabled and not filtered.group_events + + +@pytest.mark.parametrize( + "extra", + [ + dict(lora_id=0), + dict(lora_name="adapter"), + dict(extra_keys=[("image-hash",)]), + ], +) +def test_non_text_identity_is_retained_without_token_matching(extra): + converted, _ = batch([event(**extra)]) + stored = converted.group_events[0] + assert stored.operation == common_pb2.KvGroupEvent.STORE + assert not stored.tokens_matchable + assert list(stored.block_hashes) == [bytes(range(32))] + assert list(stored.token_ids) == [1, 2, 3, 4] + + +@pytest.mark.parametrize( + "extra", + [ + dict(group_idx=None), + dict(group_idx=-1), + dict(group_idx=2**32), + dict(block_hashes=[-1]), + dict(block_hashes=[2**64]), + dict(block_hashes=[True]), + dict(block_hashes=[b""]), + dict(block_hashes=b"bad"), + dict(parent_block_hash=b""), + dict(block_size=0), + dict(token_ids=[-1]), + dict(token_ids=[True]), + dict(extra_keys=[]), + dict(extra_keys=[1]), + dict(kv_cache_spec_kind=None), + dict(kv_cache_spec_sliding_window=-1), + ], +) +def test_malformed_event_invalidates_without_legacy_fallback(extra): + converted, _ = batch([event(**extra)]) + assert converted.group_events[0].operation == common_pb2.KvGroupEvent.INVALID + assert not converted.events + + +def test_unknown_event_and_missing_required_metadata_invalidate(): + for raw in (event("FutureEvent"), type("BlockStored", (), {})()): + converted, _ = batch([raw]) + assert converted.group_events[0].operation == common_pb2.KvGroupEvent.INVALID + + +def _servicer_method(name, **namespace): + """Execute the actual method with engine imports replaced by boundary fakes.""" + source = ast.parse((_ROOT / "servicer.py").read_text()) + cls = next( + node + for node in source.body + if isinstance(node, ast.ClassDef) and node.name == "VllmEngineServicer" + ) + method = next(node for node in cls.body if getattr(node, "name", None) == name) + parsed = ast.Module( + body=[ + ast.ImportFrom(module="__future__", names=[ast.alias(name="annotations")], level=0), + method, + ], + type_ignores=[], + ) + ast.fix_missing_locations(parsed) + namespace.update( + asyncio=asyncio, + grpc=grpc, + logger=logging.getLogger(__name__), + common_pb2=common_pb2, + ) + exec(compile(parsed, str(_ROOT / "servicer.py"), "exec"), namespace) + return namespace[name] + + +@pytest.mark.parametrize("group_schema,bad_final", [(False, False), (True, False), (True, True)]) +@pytest.mark.asyncio +async def test_actual_subscription_selects_schema_and_closes_socket(group_schema, bad_final): + fields = tuple(_GROUP_SCHEMA_FIELDS) if group_schema else () + stored_type = type("BlockStored", (), {"__struct_fields__": fields}) + socket = NS( + subscribe=Mock(), + connect=Mock(), + close=Mock(), + poll=AsyncMock(return_value=True), + recv_multipart=AsyncMock(side_effect=[[b"", (4).to_bytes(8, "big"), b"payload"], []]), + ) + context = NS( + send_initial_metadata=AsyncMock(), + cancelled=lambda: False, + abort=AsyncMock(side_effect=RuntimeError("stream aborted")), + ) + raw = NS(ts=1.0, events=[event()], data_parallel_rank=2) + method = _servicer_method( + "SubscribeKvEvents", + BlockStored=stored_type, + KVEventBatch=object, + endpoint_for_rank=endpoint_for_rank, + resolve_group_event_converter=module.resolve_group_event_converter, + stream_kv_events=stream_kv_events, + msgspec=NS(msgpack=NS(Decoder=lambda _: NS(decode=lambda _: raw))), + zmq=NS(SUB=1, asyncio=NS(Context=NS(instance=lambda: NS(socket=lambda _: socket)))), + ) + + stream = method( + NS(_kv_events_config=NS(endpoint="tcp://*:5557", topic="kv")), + common_pb2.SubscribeKvEventsRequest(), + context, + ) + converted = await anext(stream) + if bad_final: + with pytest.raises(RuntimeError, match="stream aborted"): + await anext(stream) + await stream.aclose() + assert converted.sequence_number == 4 + assert converted.dp_rank == 2 + assert converted.group_events_enabled == group_schema + assert bool(converted.group_events) == group_schema + assert bool(converted.events) != group_schema + socket.close.assert_called_once_with(linger=0) + context.send_initial_metadata.assert_awaited_once_with(()) + if bad_final: + context.abort.assert_awaited_once_with( + grpc.StatusCode.INTERNAL, "Malformed KV event multipart frame" + ) + else: + context.abort.assert_not_awaited() + + +@pytest.mark.parametrize( + "bad", + [[b"", b"short", b"good"], [b"", bytes(8), b"bad"], [b"", bytes(8), b"good", b"extra"]], +) +@pytest.mark.asyncio +async def test_group_stream_aborts_on_final_corrupt_frame(bad): + frames = iter([[b"", bytes(8), b"good"], bad]) + socket = NS( + poll=AsyncMock(return_value=True), + recv_multipart=AsyncMock(side_effect=lambda: next(frames)), + ) + + def decode(payload): + if payload != b"good": + raise ValueError("corrupt payload") + return NS(ts=0, events=[event()], data_parallel_rank=None) + + stream = stream_kv_events( + socket, + decode, + AsyncMock(), + lambda: False, + convert=module.GroupEventConverter().convert_batch, + strict=True, + ) + assert (await anext(stream)).group_events[0].operation == common_pb2.KvGroupEvent.STORE + with pytest.raises(ValueError): + await anext(stream) + await stream.aclose() diff --git a/model_gateway/src/policies/cache_aware.rs b/model_gateway/src/policies/cache_aware.rs index 38c097e3d1..9783254359 100644 --- a/model_gateway/src/policies/cache_aware.rs +++ b/model_gateway/src/policies/cache_aware.rs @@ -75,7 +75,10 @@ use std::{ }; use dashmap::DashMap; -use kv_index::{compute_request_content_hashes, PositionalIndexer, TenantId, TokenTree, Tree}; +use kv_index::{ + compute_request_content_hashes, group_cache::GroupRequest, PositionalIndexer, TenantId, + TokenTree, Tree, +}; use openai_protocol::worker::WorkerLoadResponse; use parking_lot::RwLock; use rand::RngExt; @@ -1144,7 +1147,12 @@ impl LoadBalancingPolicy for CacheAwarePolicy { // side alone would break every same-namespace match. It stays // unpartitioned here; the approximate and hash modes below key // under the request's cache namespace. - if self.has_event_indexer(model_id) { + let has_group_worker = self.kv_monitor.read().as_ref().is_some_and(|m| { + healthy_indices + .iter() + .any(|&idx| m.is_group_worker(workers[idx].url())) + }); + if self.has_event_indexer(model_id) || has_group_worker { self.select_worker_event_driven( workers, tokens, @@ -1436,6 +1444,13 @@ impl CacheAwarePolicy { ) -> Option { let guard = self.kv_monitor.read(); let monitor = guard.as_ref()?; + if info.cache_namespace.is_some() + && healthy_indices + .iter() + .any(|&idx| monitor.is_group_worker(workers[idx].url())) + { + return self.select_expected_wait(workers, healthy_indices, info); + } let indexer = monitor.get_indexer(model_id)?; // Per-model block_size: learned from events > config default @@ -1450,13 +1465,14 @@ impl CacheAwarePolicy { waiting_prefill_tokens: waiting_prefill_tokens.as_deref(), }; - let candidates = Self::overlap_candidates( + let candidates = Self::overlap_candidates_with_groups( workers, tokens, healthy_indices, &indexer, block_size, &tuning, + Some(monitor), ); let affinity_candidates = Self::affinity_score_group(&candidates, tuning.selection_temperature); @@ -1498,6 +1514,7 @@ impl CacheAwarePolicy { /// at temperature zero; a softmax-sampled group otherwise), and /// `select_final_from_affinity` uses LeastLoad to choose and credit one /// final worker from that group. An empty result means no full-block overlap. + #[cfg(test)] fn overlap_candidates( workers: &[Arc], tokens: &[u32], @@ -1505,32 +1522,64 @@ impl CacheAwarePolicy { indexer: &PositionalIndexer, block_size: usize, tuning: &OverlapTuning<'_>, + ) -> Vec { + Self::overlap_candidates_with_groups( + workers, + tokens, + healthy_indices, + indexer, + block_size, + tuning, + None, + ) + } + + fn overlap_candidates_with_groups( + workers: &[Arc], + tokens: &[u32], + healthy_indices: &[usize], + indexer: &PositionalIndexer, + block_size: usize, + tuning: &OverlapTuning<'_>, + monitor: Option<&KvEventMonitor>, ) -> Vec { let content_hashes = compute_request_content_hashes(tokens, block_size); - if content_hashes.is_empty() { + if content_hashes.is_empty() && monitor.is_none() { return Vec::new(); } let overlap = indexer.find_matches(&content_hashes, false); - if overlap.scores.is_empty() { - return Vec::new(); - } // Gather the positive-overlap candidates once; both selection modes // and the decay's fleet-floor computation need the full set. let mut candidates: Vec = Vec::new(); + let mut group_request = None; for &idx in healthy_indices { - let Some(score) = indexer - .worker_id(workers[idx].url()) - .and_then(|id| overlap.scores.get(&id)) - .copied() - .filter(|&s| s > 0) - else { + let group_hit = monitor + .filter(|m| m.is_group_worker(workers[idx].url())) + .and_then(|m| { + m.group_reusable_tokens( + workers[idx].url(), + group_request.get_or_insert_with(|| GroupRequest::new(tokens)), + ) + }); + let score = if let Some(hit) = group_hit { + // Normalize reported group boundaries to the legacy block + // scale so load decay remains comparable across the fleet. + hit.map(|tokens| tokens as f64 / block_size as f64) + } else { + indexer + .worker_id(workers[idx].url()) + .and_then(|id| overlap.scores.get(&id)) + .copied() + .map(f64::from) + }; + let Some(score) = score.filter(|&s| s > 0.0) else { continue; }; candidates.push(OverlapCandidate { idx, - effective_score: f64::from(score), + effective_score: score, }); } if candidates.is_empty() { @@ -1540,7 +1589,7 @@ impl CacheAwarePolicy { Self::apply_overlap_decay( workers, &mut candidates, - content_hashes.len(), + content_hashes.len().max(1), block_size, tuning, ); @@ -4303,6 +4352,43 @@ mod tests { // -- select_worker_event_driven integration tests -- + #[test] + fn group_events_select_common_resume_point_across_two_workers() { + use prost::Message; + use smg_grpc_client::common_proto::KvEventBatch; + let data: serde_json::Value = + serde_json::from_str(include_str!("../worker/fixtures/vllm-group-events.json")) + .unwrap(); + let policy = CacheAwarePolicy::with_config(test_config()); + let workers = make_workers(&["http://worker-a", "http://worker-b"]); + policy.init_workers(&workers); + update_expected_wait_loads(&policy, &workers, &[0, 0]); + let monitor = Arc::new(KvEventMonitor::new(Some(4))); + monitor + .indexers + .insert("unknown".into(), Arc::new(PositionalIndexer::new(4))); + let rows = data["workers"].as_array().unwrap(); + let apply = |row: &serde_json::Value| { + let bytes: Vec = serde_json::from_value(row["batch"].clone()).unwrap(); + let batch = KvEventBatch::decode(bytes.as_slice()).unwrap(); + monitor.test_group_batch( + &format!("http://{}", row["worker"].as_str().unwrap()), + &batch, + ); + }; + apply(&rows[0]); + apply(&rows[1]); + policy.set_kv_event_monitor(Some(Arc::clone(&monitor))); + let tokens: Vec = serde_json::from_value(data["request_tokens"].clone()).unwrap(); + let info = SelectWorkerInfo { + tokens: Some(&tokens), + ..Default::default() + }; + assert_eq!(policy.select_worker(&workers, &info), Some(0)); + apply(&rows[2]); // The full-attention block remains; Mamba checkpoint is gone. + assert_eq!(policy.select_worker(&workers, &info), Some(1)); + } + #[test] fn event_unique_hit_keeps_affinity_and_credits_expected_wait() { let policy = CacheAwarePolicy::with_config(test_config()); diff --git a/model_gateway/src/worker/fixtures/vllm-group-events.json b/model_gateway/src/worker/fixtures/vllm-group-events.json new file mode 100644 index 0000000000..9703050599 --- /dev/null +++ b/model_gateway/src/worker/fixtures/vllm-group-events.json @@ -0,0 +1 @@ +{"contract":"received GPU-local reports; observed groups only; no exact engine-reuse claim","vllm_revision":"56d001faf0f53c72fcedbbdd77e5418f68fe7494","hash_provenance":"Native SHA256-CBOR keys; native maybe_convert_block_hash for unsigned 64-bit reports. The consumer treats all keys as opaque.","lifecycle_provenance":"All 11 unmodified native BlockPool lifecycle steps from the retained CPU oracle; full_attention metadata is added for classification, not a scheduler group manifest.","request_tokens":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"workers":[{"worker":"worker-a","name":"initial","batch":[8,10,17,0,0,0,0,0,0,36,64,32,0,40,1,50,234,1,8,1,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,249,173,171,139,4,240,87,1,80,90,84,75,130,175,73,156,142,108,155,193,4,121,154,24,247,187,145,203,152,118,70,145,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1,50,36,8,2,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,50,125,8,1,16,7,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,5,109,97,109,98,97,72,1],"expected_hit_tokens":24,"expectation_note":"Full reports cover 0..32; Mamba reports checkpoints 24/40. The common boundary is 24, not min(32,40)=32. First observation need not have sequence 0."},{"worker":"worker-b","name":"initial","batch":[32,0,40,1,50,194,1,8,1,16,2,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,249,173,171,139,4,240,87,1,80,90,84,75,130,175,73,156,142,108,155,193,4,121,154,24,247,187,145,203,152,118,70,145,42,32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1,50,67,8,1,16,17,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,42,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,48,8,58,5,109,97,109,98,97,72,1],"expected_hit_tokens":16,"expectation_note":"Independent worker and group IDs: full coverage 32 intersects Mamba checkpoint 16."},{"worker":"worker-a","name":"remove_only_mamba_checkpoint","batch":[8,11,17,0,0,0,0,0,0,38,64,32,0,40,1,50,38,8,2,16,7,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139],"expected_hit_tokens":0,"expectation_note":"Removing checkpoint 24 leaves full 32 and Mamba 40, with no positive common boundary."},{"worker":"worker-a","name":"clear","batch":[8,12,17,0,0,0,0,0,0,40,64,32,0,40,1,50,2,8,3],"expected_hit_tokens":0,"expectation_note":"Clear empties reported membership while retaining the already observed full and Mamba groups."},{"worker":"worker-a","name":"restore","batch":[8,13,17,0,0,0,0,0,0,42,64,32,0,40,1,50,234,1,8,1,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,249,173,171,139,4,240,87,1,80,90,84,75,130,175,73,156,142,108,155,193,4,121,154,24,247,187,145,203,152,118,70,145,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1,50,36,8,2,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,50,125,8,1,16,7,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,5,109,97,109,98,97,72,1],"expected_hit_tokens":24,"expectation_note":"Subsequent received reports discover groups and restore a match without an epoch or baseline manifest."},{"worker":"worker-a","name":"cpu_remove_is_filtered","batch":[8,14,17,0,0,0,0,0,0,44,64,32,0,40,1],"expected_hit_tokens":24,"expectation_note":"A CPU removal does not remove the corresponding GPU report."},{"worker":"worker-a","name":"invalid_event","batch":[8,15,17,0,0,0,0,0,0,46,64,32,0,40,1,50,0],"expected_hit_tokens":null,"expectation_note":"An unknown event is INVALID and clears potentially stale evidence."},{"worker":"worker-a","name":"relearn_after_invalid","batch":[8,16,17,0,0,0,0,0,0,48,64,32,0,40,1,50,234,1,8,1,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,249,173,171,139,4,240,87,1,80,90,84,75,130,175,73,156,142,108,155,193,4,121,154,24,247,187,145,203,152,118,70,145,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1,50,36,8,2,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,50,125,8,1,16,7,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,5,109,97,109,98,97,72,1],"expected_hit_tokens":24,"expectation_note":"Valid subsequent reports can be learned immediately; a global clear is not required."},{"worker":"worker-a","name":"gap_discards_old_evidence","batch":[8,18,17,0,0,0,0,0,0,50,64,32,0,40,1],"expected_hit_tokens":null,"expectation_note":"Missing sequence 17 discards prior group and position evidence; an empty batch supplies none."},{"worker":"worker-a","name":"relearn_full_only_after_gap","batch":[8,19,17,0,0,0,0,0,0,51,64,32,0,40,1,50,192,1,8,1,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,249,173,171,139,4,240,87,1,80,90,84,75,130,175,73,156,142,108,155,193,4,121,154,24,247,187,145,203,152,118,70,145,42,32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":32,"expectation_note":"Only the newly observed full group participates; an unseen former Mamba group is not invented."},{"worker":"worker-a","name":"additional_group_after_gap","batch":[8,20,17,0,0,0,0,0,0,52,64,32,0,40,1,50,125,8,1,16,7,26,32,43,128,41,59,40,254,85,59,251,41,91,17,130,79,107,100,68,16,5,4,153,227,169,54,31,95,98,72,136,142,168,139,26,32,203,247,252,167,34,240,175,56,173,202,206,177,183,255,160,199,4,84,214,167,207,254,66,96,94,39,139,78,9,110,177,104,42,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,8,58,5,109,97,109,98,97,72,1],"expected_hit_tokens":24,"expectation_note":"The later Mamba report adds a participating group and reduces the common boundary to 24."},{"worker":"worker-a","name":"clear_again","batch":[8,21,17,0,0,0,0,0,0,53,64,32,0,40,1,50,2,8,3],"expected_hit_tokens":0,"expectation_note":"Clear empties membership; both already observed groups still participate."},{"worker":"worker-a","name":"relearn_after_clear","batch":[8,22,17,0,0,0,0,0,0,54,64,32,0,40,1,50,108,8,1,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,42,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":0,"expectation_note":"New full reports restore 16, but the already observed Mamba group remains empty after clear."},{"worker":"worker-int64","name":"full_only_unsigned_hashes","batch":[8,41,17,0,0,0,0,0,128,68,64,32,0,40,1,50,98,8,1,16,5,26,8,149,163,226,210,130,62,97,207,26,8,213,13,207,111,197,79,89,114,26,8,31,95,98,72,136,142,168,139,26,8,247,187,145,203,152,118,70,145,42,32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":32,"expectation_note":"Native unsigned external hashes become eight-byte keys, including values above signed int64 max."},{"worker":"worker-bytes","name":"full_only_byte_hashes","batch":[32,0,40,1,50,110,8,1,16,9,26,32,215,96,224,188,205,101,232,70,167,193,184,136,58,140,184,98,58,187,91,127,56,228,59,161,149,163,226,210,130,62,97,207,26,32,246,176,117,238,183,244,243,135,88,229,171,63,2,132,26,249,23,95,133,243,181,72,103,169,213,13,207,111,197,79,89,114,42,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":16,"expectation_note":"Thirty-two-byte hashes remain opaque and complete; this worker has an independent cache view."},{"worker":"worker-int64","name":"additional_full_group","batch":[8,42,17,0,0,0,0,0,0,69,64,32,0,40,1,50,44,8,1,16,99,26,8,149,163,226,210,130,62,97,207,42,8,1,2,3,4,5,6,7,8,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":8,"expectation_note":"A newly observed second full group covers only 8, reducing the previously full-only boundary 32."},{"worker":"worker-int64","name":"remove_additional_group_key","batch":[8,43,17,0,0,0,0,0,128,69,64,32,0,40,1,50,14,8,2,16,99,26,8,149,163,226,210,130,62,97,207],"expected_hit_tokens":0,"expectation_note":"The observed second group remains present after its last reported key is removed."}],"lifecycle":[{"worker":"native-partial","name":"partial_create","batch":[32,0,40,1,50,60,8,1,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,42,2,1,2,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":2,"expectation_note":"A rooted partial report resolves its two-token identity."},{"worker":"native-partial","name":"repeat_same_alias_no_store","batch":[8,1,17,0,0,0,0,0,0,240,63,32,0,40,1],"expected_hit_tokens":2,"expectation_note":"Native same-alias update emits no event; reported state is unchanged."},{"worker":"native-partial","name":"second_physical_copy","batch":[8,2,17,0,0,0,0,0,0,0,64,32,0,40,1,50,60,8,1,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,42,2,1,2,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":2,"expectation_note":"A second STORE repeats positive evidence; it does not establish a physical-copy counter."},{"worker":"native-partial","name":"one_remove_preserves_copy","batch":[8,3,17,0,0,0,0,0,0,8,64,32,0,40,1,50,36,8,2,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4],"expected_hit_tokens":0,"expectation_note":"REMOVE withdraws the positive report although the native pool still retains another physical copy."},{"worker":"native-partial","name":"longer_partial_replaces_old","batch":[8,4,17,0,0,0,0,0,0,16,64,32,0,40,1,50,36,8,2,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,50,94,8,1,26,32,4,34,101,5,143,158,238,122,105,116,69,243,128,127,139,205,219,253,249,5,232,222,34,221,91,9,215,138,73,223,219,252,34,32,157,223,108,174,156,75,83,51,150,70,5,46,165,146,218,188,203,32,243,142,180,187,53,166,27,92,170,215,73,244,2,134,42,2,5,6,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":0,"expectation_note":"The longer partial hash refers to unseen parent 4; it is retained unresolved rather than rooted or sliced."},{"worker":"native-partial","name":"cow_moves_without_events","batch":[8,5,17,0,0,0,0,0,0,20,64,32,0,40,1],"expected_hit_tokens":0,"expectation_note":"Native copy-on-write movement emits no event; unresolved reported state is unchanged."},{"worker":"native-partial","name":"shorter_alias_on_longer_block","batch":[8,6,17,0,0,0,0,0,0,24,64,32,0,40,1,50,60,8,1,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,42,2,1,2,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":2,"expectation_note":"The shorter rooted alias reports tokens 1..2 again and permits a two-token match."},{"worker":"native-partial","name":"promote_removes_all_aliases","batch":[8,7,17,0,0,0,0,0,0,28,64,32,0,40,1,50,36,8,2,26,32,4,34,101,5,143,158,238,122,105,116,69,243,128,127,139,205,219,253,249,5,232,222,34,221,91,9,215,138,73,223,219,252,50,36,8,2,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,50,66,8,1,26,32,249,232,28,230,223,156,176,209,88,76,240,28,182,19,83,213,146,249,168,97,66,222,235,21,151,219,174,153,103,28,24,165,42,8,1,2,3,4,5,6,7,8,48,8,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":8,"expectation_note":"Promotion removes both aliases and reports a rooted full block covering tokens 1..8."},{"worker":"native-partial","name":"final_remove","batch":[8,8,17,0,0,0,0,0,0,32,64,32,0,40,1,50,36,8,2,26,32,249,232,28,230,223,156,176,209,88,76,240,28,182,19,83,213,146,249,168,97,66,222,235,21,151,219,174,153,103,28,24,165],"expected_hit_tokens":0,"expectation_note":"Final removal withdraws the last reported full block."},{"worker":"native-sparse","name":"sparse_leading_and_interior_holes","batch":[32,0,40,1,50,174,1,8,1,16,1,26,32,157,223,108,174,156,75,83,51,150,70,5,46,165,146,218,188,203,32,243,142,180,187,53,166,27,92,170,215,73,244,2,134,26,32,249,232,28,230,223,156,176,209,88,76,240,28,182,19,83,213,146,249,168,97,66,222,235,21,151,219,174,153,103,28,24,165,26,32,241,134,123,86,189,53,91,20,231,15,136,141,159,45,141,180,138,250,71,74,82,51,103,241,227,150,162,234,18,58,194,36,26,32,217,184,106,101,200,67,87,224,121,21,204,90,102,218,72,34,13,162,99,153,32,90,101,9,98,38,73,86,60,79,6,224,42,12,1,2,3,4,5,6,7,8,9,10,11,12,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":0,"expectation_note":"A fresh sparse stream provides four hashes for six token blocks. No ordinal positions can be inferred."},{"worker":"native-sparse","name":"full_report_invents_missing_sparse_prefix","batch":[8,1,17,0,0,0,0,0,0,240,63,32,0,40,1,50,242,1,8,1,16,1,26,32,212,72,177,23,212,203,252,76,63,49,58,30,4,148,100,80,20,203,156,155,103,134,24,69,123,240,148,113,18,26,3,4,26,32,157,223,108,174,156,75,83,51,150,70,5,46,165,146,218,188,203,32,243,142,180,187,53,166,27,92,170,215,73,244,2,134,26,32,4,34,101,5,143,158,238,122,105,116,69,243,128,127,139,205,219,253,249,5,232,222,34,221,91,9,215,138,73,223,219,252,26,32,249,232,28,230,223,156,176,209,88,76,240,28,182,19,83,213,146,249,168,97,66,222,235,21,151,219,174,153,103,28,24,165,26,32,241,134,123,86,189,53,91,20,231,15,136,141,159,45,141,180,138,250,71,74,82,51,103,241,227,150,162,234,18,58,194,36,26,32,217,184,106,101,200,67,87,224,121,21,204,90,102,218,72,34,13,162,99,153,32,90,101,9,98,38,73,86,60,79,6,224,42,12,1,2,3,4,5,6,7,8,9,10,11,12,48,2,58,14,102,117,108,108,95,97,116,116,101,110,116,105,111,110,72,1],"expected_hit_tokens":12,"expectation_note":"A subsequent full report supplies all six identities, so reported coverage is 12 even though the native pool contains only four blocks."}],"provenance":[{"file":"vllm/utils/hashing.py","symbol":"sha256_cbor","line":43,"sha256":"1d39d867495a21a96402ff0fdec7c5b887742100d2f4a46b4e5772457c6af30a"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"maybe_convert_block_hash","line":84,"sha256":"6f3b4b938a71fe293eaa188a886de6cfaa3a257c7c57283d7e5ba8cf64b170e9"},{"file":"vllm/v1/core/kv_cache_utils.py","symbol":"hash_block_tokens","line":622,"sha256":"df9adb42b0e989aab8bdb69cc489fbafe2318201dd040ce1eba991c0dbf3d6ef"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.cache_full_blocks","line":225,"sha256":"a79bd81bdf4430b4568cd63588c5026549b044fbd3d4fd2466c69fead52810d0"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.emit_cached_block_events","line":374,"sha256":"25444882887cceb44ef70c93ca9222752af2fb2929953b3bad2e2de80a214ef8"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.cache_partial_block","line":446,"sha256":"8745e75cc082751a49578c403a2fcf5dae65030ef0c8012194ecee3e29f58d88"},{"file":"vllm/v1/core/block_pool.py","symbol":"BlockPool.move_block_hashes","line":640,"sha256":"879b66d9fa63767570e3610aa73cfe8ee85480990fb26ce003cf149aa829534b"}]} diff --git a/model_gateway/src/worker/kv_event_monitor.rs b/model_gateway/src/worker/kv_event_monitor.rs index b272ae4813..517cd54099 100644 --- a/model_gateway/src/worker/kv_event_monitor.rs +++ b/model_gateway/src/worker/kv_event_monitor.rs @@ -15,10 +15,13 @@ use std::{collections::HashMap, fmt, sync::Arc, time::Duration}; use dashmap::DashMap; use futures::FutureExt as _; use kv_index::{ - compute_content_hash, ApplyError, PositionalIndexer, SequenceHash, StoredBlock, WorkerBlockMap, + compute_content_hash, + group_cache::{GroupCache, GroupEvent, GroupRequest}, + ApplyError, PositionalIndexer, SequenceHash, StoredBlock, WorkerBlockMap, }; use smg_grpc_client::common_proto::{ - kv_cache_event, KvBlock, KvBlocksRemoved, KvBlocksStored, KvCacheEvent, KvEventBatch, + kv_cache_event, kv_group_event, KvBlock, KvBlocksRemoved, KvBlocksStored, KvCacheEvent, + KvEventBatch, }; use tokio::{ sync::{oneshot, Mutex, Semaphore}, @@ -62,6 +65,8 @@ pub struct KvEventMonitor { /// a task that could ever own the last monitor reference would run the /// monitor's drop — and thus its own join — on its own thread. pub(crate) indexers: Arc>>, + /// Presence selects the group path, including when its evidence is empty. + group_caches: Arc>, /// Per-model block sizes learned from KV events or set via WorkerSpec. /// Used by CacheAwarePolicy to chunk request tokens at query time. /// Arc-wrapped so subscription tasks can update it from events. @@ -105,6 +110,7 @@ impl KvEventMonitor { let jump_size = jump_size.unwrap_or(DEFAULT_JUMP_SIZE).max(1); Self { indexers: Arc::new(DashMap::new()), + group_caches: Arc::new(DashMap::new()), block_sizes: Arc::new(DashMap::new()), worker_handles: Mutex::new(HashMap::new()), jump_size, @@ -208,6 +214,8 @@ impl KvEventMonitor { let worker = Arc::clone(worker); let worker_url = url.clone(); let block_sizes = Arc::clone(&self.block_sizes); + let group_caches = Arc::clone(&self.group_caches); + let panic_group_caches = Arc::clone(&self.group_caches); info!( worker_url = %url, @@ -233,12 +241,16 @@ impl KvEventMonitor { worker_url, indexer, block_sizes, + group_caches, loop_model_id, shutdown_rx, )) .catch_unwind() .await; if let Err(payload) = result { + if let Some(mut cache) = panic_group_caches.get_mut(&task_url) { + cache.invalidate(); + } let msg = payload .downcast_ref::<&str>() .copied() @@ -293,6 +305,7 @@ impl KvEventMonitor { ); Metrics::record_kv_event_subscription_failure(worker_url, "join_error"); } + self.group_caches.remove(worker_url); // Re-check under lock whether this was the last worker for the model. // Must re-acquire lock after shutdown to avoid TOCTOU with concurrent @@ -336,6 +349,7 @@ impl KvEventMonitor { } self.indexers.clear(); + self.group_caches.clear(); self.block_sizes.clear(); } @@ -344,6 +358,79 @@ impl KvEventMonitor { self.indexers.get(model_id).map(|r| Arc::clone(&r)) } + /// Outer None is a legacy worker; inner None means the received group + /// reports cannot currently support a score. + pub(crate) fn group_reusable_tokens( + &self, + worker_url: &str, + request: &GroupRequest, + ) -> Option> { + self.group_caches + .get(worker_url) + .map(|cache| cache.reusable_tokens(request)) + } + + pub(crate) fn is_group_worker(&self, worker_url: &str) -> bool { + self.group_caches.contains_key(worker_url) + } + + #[cfg(test)] + pub(crate) fn test_group_batch(&self, worker_url: &str, batch: &KvEventBatch) { + Self::apply_group_batch(&self.group_caches, worker_url, batch); + } + + fn apply_group_batch( + caches: &DashMap, + worker_url: &str, + batch: &KvEventBatch, + ) { + let mut cache = caches.entry(worker_url.to_owned()).or_default(); + let result = if !batch.group_events_enabled + || !batch.events.is_empty() + || batch.dp_rank.is_some_and(|rank| rank != 0) + { + Err("missing group marker, mixed events or unsupported rank") + } else { + let events: Vec<_> = batch + .group_events + .iter() + .map( + |event| match kv_group_event::Operation::try_from(event.operation) { + Ok(kv_group_event::Operation::Store) => GroupEvent::Store { + group_id: event.group_id, + kind: event.kind.clone(), + window: event.sliding_window as usize, + keys: event.block_hashes.clone(), + parent: (!event.parent_block_hash.is_empty()) + .then(|| event.parent_block_hash.clone()), + tokens: event.token_ids.clone(), + block_size: event.block_size as usize, + tokens_matchable: event.tokens_matchable, + }, + Ok(kv_group_event::Operation::Remove) => GroupEvent::Remove { + group_id: event.group_id, + keys: event.block_hashes.clone(), + }, + Ok(kv_group_event::Operation::Clear) if event.block_hashes.is_empty() => { + GroupEvent::Clear + } + _ => GroupEvent::Invalid, + }, + ) + .collect(); + cache.apply_batch(batch.sequence_number, &events) + }; + if let Err(reason) = result { + // Keep the entry so invalid group data cannot fall through to a + // stale legacy positional tree. + cache.invalidate(); + warn!( + worker_url, + reason, "KV group evidence unavailable; using routing fallback" + ); + } + } + /// Get the block size for a model (learned from events or set via `set_block_size`). pub fn block_size(&self, model_id: &str) -> Option { self.block_sizes.get(model_id).map(|v| *v) @@ -441,6 +528,7 @@ impl KvEventMonitor { worker_url: String, indexer: Arc, block_sizes: Arc>, + group_caches: Arc>, model_id: String, mut shutdown_rx: oneshot::Receiver<()>, ) { @@ -569,6 +657,18 @@ impl KvEventMonitor { }; let on_batch = |batch: &KvEventBatch| { + if batch.group_events_enabled || !batch.group_events.is_empty() { + Self::apply_group_batch(&group_caches, &worker_url, batch); + return; + } + if group_caches.contains_key(&worker_url) { + group_caches.insert(worker_url.clone(), GroupCache::default()); + warn!( + worker_url, + "Group stream lost its marker; using routing fallback" + ); + return; + } Self::learn_block_size(&block_sizes, &model_id, &mut block_size_learned, batch); }; let stream_result = tokio::select! { @@ -587,6 +687,10 @@ impl KvEventMonitor { } }; + if let Some(mut cache) = group_caches.get_mut(&worker_url) { + cache.invalidate(); + } + match stream_result { StreamResult::Ended => { info!( @@ -672,6 +776,14 @@ impl KvEventMonitor { Err(e) => return StreamResult::Error(e), }; + // Group streams handle sequence zero and gaps in their own view. + // Legacy replay keeps its existing cursor semantics. + if batch.group_events_enabled || !batch.group_events.is_empty() { + on_batch(&batch); + *last_seq = batch.sequence_number; + continue; + } + // Skip stale/duplicate batches (can occur after reconnect replay). if *last_seq > 0 && batch.sequence_number <= *last_seq { debug!( @@ -803,6 +915,59 @@ impl fmt::Debug for KvEventMonitor { mod tests { use super::*; + #[test] + fn group_converter_proto_snapshots_and_lifecycle() { + use prost::Message; + let data: serde_json::Value = + serde_json::from_str(include_str!("fixtures/vllm-group-events.json")).unwrap(); + let tokens: Vec = serde_json::from_value(data["request_tokens"].clone()).unwrap(); + let monitor = KvEventMonitor::new(None); + for (collection, replays) in [("workers", 2), ("lifecycle", 1)] { + for row in data[collection].as_array().unwrap() { + let worker = row["worker"].as_str().unwrap(); + let bytes: Vec = serde_json::from_value(row["batch"].clone()).unwrap(); + let batch = KvEventBatch::decode(bytes.as_slice()).unwrap(); + let expected = row["expected_hit_tokens"].as_u64().map(|v| v as usize); + for replay in 0..replays { + monitor.test_group_batch(worker, &batch); + assert_eq!( + monitor.group_reusable_tokens(worker, &GroupRequest::new(&tokens)), + Some(expected), + "{} replay {replay}", + row["name"] + ); + } + } + } + } + + #[test] + fn invalid_group_wire_never_uses_legacy_confidence() { + use prost::Message; + let data: serde_json::Value = + serde_json::from_str(include_str!("fixtures/vllm-group-events.json")).unwrap(); + let bytes: Vec = serde_json::from_value(data["workers"][0]["batch"].clone()).unwrap(); + let batch = KvEventBatch::decode(bytes.as_slice()).unwrap(); + let monitor = KvEventMonitor::new(None); + for which in 0..4 { + let mut bad = batch.clone(); + match which { + 0 => bad.group_events_enabled = false, + 1 => bad.dp_rank = Some(1), + 2 => bad.events.push(KvCacheEvent::default()), + _ => bad.group_events[0].block_hashes[0].clear(), + } + monitor.test_group_batch("worker", &bad); + assert_eq!( + monitor.group_reusable_tokens( + "worker", + &GroupRequest::new(&[1, 2, 3, 4, 5, 6, 7, 8, 9]) + ), + Some(None) + ); + } + } + // ----------------------------------------------------------------------- // Proto → kv-index conversion // -----------------------------------------------------------------------