"benchmarks/vscode:/vscode.git/clone" did not exist on "2f54045508930a741f3638cc3c1174fdd672087f"
Unverified Commit 4f7cde72 authored by Adit Chawdhary's avatar Adit Chawdhary Committed by GitHub
Browse files

Adds `json_count_leaves` utility function (#23899)


Signed-off-by: default avataraditchawdhary <aditxy@hotmail.com>
parent 67c14906
...@@ -948,6 +948,36 @@ def test_join_host_port(): ...@@ -948,6 +948,36 @@ def test_join_host_port():
assert join_host_port("::1", 5555) == "[::1]:5555" assert join_host_port("::1", 5555) == "[::1]:5555"
def test_json_count_leaves():
"""Test json_count_leaves function from jsontree utility."""
from vllm.utils.jsontree import json_count_leaves
# Single leaf values
assert json_count_leaves(42) == 1
assert json_count_leaves("hello") == 1
assert json_count_leaves(None) == 1
# Empty containers
assert json_count_leaves([]) == 0
assert json_count_leaves({}) == 0
assert json_count_leaves(()) == 0
# Flat structures
assert json_count_leaves([1, 2, 3]) == 3
assert json_count_leaves({"a": 1, "b": 2}) == 2
assert json_count_leaves((1, 2, 3)) == 3
# Nested structures
nested_dict = {"a": 1, "b": {"c": 2, "d": 3}}
assert json_count_leaves(nested_dict) == 3
nested_list = [1, [2, 3], 4]
assert json_count_leaves(nested_list) == 4
mixed_nested = {"list": [1, 2], "dict": {"x": 3}, "value": 4}
assert json_count_leaves(mixed_nested) == 4
def test_convert_ids_list_to_tokens(): def test_convert_ids_list_to_tokens():
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct") tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B-Instruct")
token_ids = tokenizer.encode("Hello, world!") token_ids = tokenizer.encode("Hello, world!")
......
...@@ -10,7 +10,8 @@ from typing_extensions import TypeAlias, override ...@@ -10,7 +10,8 @@ from typing_extensions import TypeAlias, override
from vllm.logger import init_logger from vllm.logger import init_logger
from vllm.utils import GiB_bytes, LRUCache from vllm.utils import GiB_bytes, LRUCache
from vllm.utils.jsontree import json_map_leaves, json_reduce_leaves from vllm.utils.jsontree import (json_count_leaves, json_map_leaves,
json_reduce_leaves)
from .inputs import (MultiModalFeatureSpec, MultiModalFieldElem, from .inputs import (MultiModalFeatureSpec, MultiModalFieldElem,
MultiModalKwargs, MultiModalKwargsItem, MultiModalKwargs, MultiModalKwargsItem,
...@@ -127,11 +128,32 @@ class MultiModalCache: ...@@ -127,11 +128,32 @@ class MultiModalCache:
) )
if debug: if debug:
logger.debug("Calculated size of %s to be %.2f GiB", type(value), leaf_count = json_count_leaves(value)
size / GiB_bytes) logger.debug(
"Calculated size of %s to be %.2f GiB (%d leaves)",
type(value),
size / GiB_bytes,
leaf_count,
)
return size return size
@classmethod
def get_item_complexity(cls, value: MultiModalCacheValue) -> int:
"""
Get the number of leaf elements in a multi-modal cache value.
This provides a measure of structural complexity that can be useful
for debugging cache performance and understanding data patterns.
Args:
value: The multi-modal cache value to analyze.
Returns:
The number of leaf elements in the nested structure.
"""
return json_count_leaves(value)
@classmethod @classmethod
def get_lru_cache( def get_lru_cache(
cls, cls,
......
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Helper functions to work with nested JSON structures.""" """Helper functions to work with nested JSON structures."""
from collections.abc import Iterable from collections.abc import Iterable
from functools import reduce from functools import reduce
from typing import Callable, TypeVar, Union, overload from typing import Callable, TypeVar, Union, overload
...@@ -8,8 +9,12 @@ from typing import Callable, TypeVar, Union, overload ...@@ -8,8 +9,12 @@ from typing import Callable, TypeVar, Union, overload
_T = TypeVar("_T") _T = TypeVar("_T")
_U = TypeVar("_U") _U = TypeVar("_U")
JSONTree = Union[dict[str, "JSONTree[_T]"], list["JSONTree[_T]"], JSONTree = Union[
tuple["JSONTree[_T]", ...], _T] dict[str, "JSONTree[_T]"],
list["JSONTree[_T]"],
tuple["JSONTree[_T]", ...],
_T,
]
"""A nested JSON structure where the leaves need not be JSON-serializable.""" """A nested JSON structure where the leaves need not be JSON-serializable."""
...@@ -78,3 +83,8 @@ def json_reduce_leaves( ...@@ -78,3 +83,8 @@ def json_reduce_leaves(
json_iter_leaves(value), json_iter_leaves(value),
initial, initial,
) )
def json_count_leaves(value: JSONTree[_T]) -> int:
"""Count the number of leaves in a nested JSON structure."""
return sum(1 for _ in json_iter_leaves(value))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment