From 696904a6d3873484f0289451d0231c0c4f15dc21 Mon Sep 17 00:00:00 2001 From: Iman Tabrizian <10105175+Tabrizian@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:19:58 -0700 Subject: [PATCH 01/21] [None][fix] Fix indexer-k-cache transfer for disagg (#16197) Signed-off-by: Iman Tabrizian <10105175+tabrizian@users.noreply.github.com> --- tensorrt_llm/_torch/pyexecutor/resource_manager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tensorrt_llm/_torch/pyexecutor/resource_manager.py b/tensorrt_llm/_torch/pyexecutor/resource_manager.py index 486c43e8e269..2735622f6204 100644 --- a/tensorrt_llm/_torch/pyexecutor/resource_manager.py +++ b/tensorrt_llm/_torch/pyexecutor/resource_manager.py @@ -566,6 +566,8 @@ def append_to_kv_heads_per_layer(num_kv_heads_per_layer: List[int], for pc in self.pool_configurations ] + self.enable_indexer_k_cache = enable_indexer_k_cache + kwargs = { 'num_kv_heads_per_layer': self.num_kv_heads_per_layer, 'size_per_head': head_dim, From 5a5cba0743eca4850826f97ec8b35ca6792e6042 Mon Sep 17 00:00:00 2001 From: "Yueh-Ting (eop) Chen" Date: Mon, 13 Jul 2026 09:08:30 +0800 Subject: [PATCH 02/21] [None][fix] Correct RocketKV KT cache byte accounting for FP8 KV cache (#16225) Signed-off-by: Yueh-Ting Chen --- .../_torch/attention_backend/sparse/rocket.py | 52 +++++++++++++------ .../sparse/rocketkv/test_rocketkv.py | 45 ++++++++++++++++ 2 files changed, 80 insertions(+), 17 deletions(-) diff --git a/tensorrt_llm/_torch/attention_backend/sparse/rocket.py b/tensorrt_llm/_torch/attention_backend/sparse/rocket.py index 400dff2a5259..325cc431dc34 100644 --- a/tensorrt_llm/_torch/attention_backend/sparse/rocket.py +++ b/tensorrt_llm/_torch/attention_backend/sparse/rocket.py @@ -1098,12 +1098,12 @@ def get_cache_size_per_token(model_config: ModelConfig, mapping: Mapping, num_layers: Optional[int] = None, **kwargs): - # get kv cache dtype bytes - mem_per_token = 2 + # main KV cache dtype bytes (one each for K and V) + kv_dtype_bytes = 2 quant_config = model_config.quant_config if quant_config is not None and quant_config.quant_mode.has_fp8_kv_cache( ): - mem_per_token = 1 + kv_dtype_bytes = 1 # get num key value heads config = model_config.pretrained_config @@ -1122,10 +1122,10 @@ def get_cache_size_per_token(model_config: ModelConfig, num_attention_layers = KVCacheManager._resolve_num_attention_layers( model_config, mapping, num_layers) - mem_per_token *= num_attention_layers * head_dim - # K and V - # 2 for K and V, 2 * kt_tokens_per_block / tokens_per_block for KT cache + # K and V: two tensors stored at the main KV cache dtype. + mem_per_token = kv_dtype_bytes * 2 * num_attention_layers * head_dim + tokens_per_block = kwargs['tokens_per_block'] sparse_attention_config = model_config.sparse_attention_config if sparse_attention_config is None: @@ -1138,21 +1138,23 @@ def get_cache_size_per_token(model_config: ModelConfig, "RocketKV cache requires RocketKV sparse parameters") kt_tokens_per_block = next_power_of_2( math.ceil(tokens_per_block / sparse_params.page_size)) - kt_factor = 2 - if sparse_params.kt_cache_dtype == "float8_e5m2": - kt_factor = 1 - kv_factor = 2 + kt_factor * kt_tokens_per_block / tokens_per_block - mem_per_token *= kv_factor + # KT (key-landmark) cache: a separate pool stored at kt_cache_dtype, + # NOT the main KV dtype. Per real token it holds + # kt_tokens_per_block / tokens_per_block landmark slots, each storing + # the concatenated (min, max) landmark -- a factor of 2 over head_dim. + # Size it at its own dtype's byte width (1 for float8_e5m2, else 2) so + # the estimate is independent of the main KV dtype and matches both + # get_cache_bytes_per_token and the physical pool allocated in + # RocketKVCacheManager.__init__. + kt_dtype_bytes = 1 if sparse_params.kt_cache_dtype == "float8_e5m2" else 2 + mem_per_token += (kt_dtype_bytes * 2 * kt_tokens_per_block / + tokens_per_block * num_attention_layers * head_dim) return mem_per_token def get_cache_bytes_per_token(self): - # 2 for K and V, 2 * kt_tokens_per_block / tokens_per_block for KT cache - kt_factor = 2 - if self.kt_cache_dtype == torch.float8_e5m2: - kt_factor = 1 - kv_factor = self.kv_factor + kt_factor * self.kt_tokens_per_block / self.tokens_per_block + # Main K/V cache: stored at the main KV cache dtype (self.dtype). cache_size_per_token = math.ceil( - kv_factor * sum(self.num_kv_heads_per_layer) * self.head_dim) + self.kv_factor * sum(self.num_kv_heads_per_layer) * self.head_dim) if self.dtype not in (DataType.FP8, DataType.HALF, DataType.BF16, DataType.FLOAT, DataType.NVFP4): @@ -1165,4 +1167,20 @@ def get_cache_bytes_per_token(self): cache_size_per_token, quant_vector_size=16, scaling_factor_dtype=DataType.FP8) + + # KT (key-landmark) cache: a separate pool physically allocated at + # kt_cache_dtype, NOT the main KV dtype -- see __init__: + # torch.empty((num_blocks, kt_tokens_per_block, num_kv_heads, + # head_dim * 2), dtype=kt_cache_dtype). + # The trailing factor of 2 is the concatenated (min, max) landmark per + # head_dim. Per real token the pool holds + # kt_tokens_per_block / tokens_per_block landmark slots. Size it at its + # own dtype's byte width (1 for float8_e5m2, else 2) so the estimate + # matches the allocation regardless of self.dtype. + kt_dtype_bytes = 1 if self.kt_cache_dtype == torch.float8_e5m2 else 2 + kt_elements_per_token = math.ceil( + 2 * self.kt_tokens_per_block / self.tokens_per_block * + sum(self.num_kv_heads_per_layer) * self.head_dim) + cache_size_bytes_per_token += kt_elements_per_token * kt_dtype_bytes + return cache_size_bytes_per_token diff --git a/tests/unittest/_torch/attention/sparse/rocketkv/test_rocketkv.py b/tests/unittest/_torch/attention/sparse/rocketkv/test_rocketkv.py index d63044b0d565..2efe84988c27 100644 --- a/tests/unittest/_torch/attention/sparse/rocketkv/test_rocketkv.py +++ b/tests/unittest/_torch/attention/sparse/rocketkv/test_rocketkv.py @@ -1,4 +1,5 @@ import json +import math import os import pytest @@ -17,6 +18,8 @@ RocketVanillaAttentionMetadata, ) from tensorrt_llm._torch.metadata import KVCacheParams +from tensorrt_llm._utils import get_size_in_bytes +from tensorrt_llm.bindings import DataType from tensorrt_llm.llmapi import CudaGraphConfig, KvCacheConfig, RocketSparseAttentionConfig from tensorrt_llm.mapping import Mapping @@ -704,6 +707,48 @@ def test_sparse_attn_predict(batch_size, num_contexts): ) +@pytest.mark.skipif(getSMVersion() < 100, reason="RocketKV requires SM100 (Blackwell)") +def test_rocketkv_kt_cache_sized_by_kt_dtype_not_kv_dtype(): + """get_cache_bytes_per_token() must size the KT (key-landmark) cache from the KT + pool's own dtype, matching the pool physically allocated in __init__ -- not the + main KV cache dtype. The old code scaled the KT term by the main KV dtype byte + width, under-counting the KT pool by 2x when the main KV cache was FP8. Using + FP8 main KV + bfloat16 KT makes the two dtypes differ, so this fails without the + fix and passes with it. + """ + sparse_attn_config = RocketSparseAttentionConfig( + prompt_budget=2048, page_size=4, kt_cache_dtype="bfloat16" + ) + kv_cache_manager = create_rocket_kv_cache_manager( + num_layers=4, + num_kv_heads=8, + head_dim=128, + tokens_per_block=64, + max_seq_len=4096, + max_batch_size=8, + dtype=DataType.FP8, + sparse_attn_config=sparse_attn_config, + ) + try: + # KT contribution: ground truth from the physically allocated KT pool. + kt_pool_bytes = sum( + t.numel() * t.element_size() for t in kv_cache_manager.kt_cache_pool_per_layer + ) + tokens = kv_cache_manager.num_blocks * kv_cache_manager.tokens_per_block + # Main K/V contribution is unchanged (sized at the main KV dtype). + main_bytes = get_size_in_bytes( + math.ceil( + kv_cache_manager.kv_factor + * sum(kv_cache_manager.num_kv_heads_per_layer) + * kv_cache_manager.head_dim + ), + kv_cache_manager.dtype, + ) + assert kv_cache_manager.get_cache_bytes_per_token() == main_bytes + kt_pool_bytes // tokens + finally: + kv_cache_manager.shutdown() + + if __name__ == "__main__": # RocketKV e2e tests print("=== Testing RocketKV E2E tests ===") From c7d2498bda9e83d409d8f52aad057b1cff3abd00 Mon Sep 17 00:00:00 2001 From: Iman Tabrizian <10105175+Tabrizian@users.noreply.github.com> Date: Sun, 12 Jul 2026 18:47:51 -0700 Subject: [PATCH 03/21] [None][perf] serve: opt-in msgspec msgpack transport for disagg orchestrator->worker request body (#16126) Signed-off-by: Iman Tabrizian <10105175+tabrizian@users.noreply.github.com> --- requirements.txt | 1 + tensorrt_llm/serve/openai_client.py | 36 ++++++++++++++++---- tensorrt_llm/serve/openai_server.py | 52 +++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0b0d123d4ced..f387028c0429 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,6 +36,7 @@ prometheus_client prometheus_fastapi_instrumentator pydantic>=2.9.1 pydantic-settings[yaml] +msgspec omegaconf pillow optimum diff --git a/tensorrt_llm/serve/openai_client.py b/tensorrt_llm/serve/openai_client.py index 265a771daf6c..6acbefe103d7 100644 --- a/tensorrt_llm/serve/openai_client.py +++ b/tensorrt_llm/serve/openai_client.py @@ -14,6 +14,7 @@ # yapf: disable import asyncio +import os import traceback from abc import ABC, abstractmethod from typing import Any, AsyncGenerator, Callable, Dict, List, Optional, Tuple, Type @@ -40,6 +41,22 @@ # yapf: enable +# msgspec msgpack is an opt-in transport for the orchestrator->worker request +# body (alternative to the JSON path). Enable with TRTLLM_SERVE_ENABLE_MSGSPEC=1; +# the orchestrator encodes the forwarded body as msgpack and flags it with the +# X-TRTLLM-Msgpack header (Content-Type stays application/json so FastAPI still +# routes it through Request.json()). Fails loudly at import if msgspec is missing. +_MSGSPEC_ENABLED = os.getenv("TRTLLM_SERVE_ENABLE_MSGSPEC", "0") == "1" +if _MSGSPEC_ENABLED: + try: + import msgspec + except ImportError as exc: + raise ImportError( + "TRTLLM_SERVE_ENABLE_MSGSPEC=1 requires the msgspec package " + "(listed in requirements.txt)." + ) from exc + _msgpack_encoder = msgspec.msgpack.Encoder() + class OpenAIClient(ABC): async def send_request( @@ -181,18 +198,25 @@ async def _post_with_retry( dp = getattr(request, "disaggregated_params", None) if dp is not None and getattr(dp, "disagg_request_id", None) is not None: dp.disagg_request_id = self._disagg_id_generator() - # Serialize once on the orchestrator's single event-loop thread: - # model_dump_json (pydantic-core) is ~2.3x faster than - # model_dump(mode="json") + aiohttp json= (json.dumps). Decodes to - # identical JSON (pydantic just emits compact UTF-8 vs spaced ASCII). - body = request.model_dump_json(exclude_unset=True) + # Serialize once on the orchestrator's single event-loop thread. + if _MSGSPEC_ENABLED: + # msgspec msgpack: encode the request dict to msgpack bytes. Keep + # Content-Type application/json so FastAPI still routes the body + # through Request.json() (it only does that for json/+json content + # subtypes); the X-TRTLLM-Msgpack header tells the worker's + # Request.json() to decode with msgspec instead of stdlib json. + body = _msgpack_encoder.encode(request.model_dump(mode="json", exclude_unset=True)) + req_headers = {"Content-Type": "application/json", "X-TRTLLM-Msgpack": "1"} + else: + body = request.model_dump_json(exclude_unset=True) + req_headers = {"Content-Type": "application/json"} try: lines_yielded = 0 start_time = get_steady_clock_now_in_seconds() async with self._session.post( url, data=body, - headers={"Content-Type": "application/json"}, + headers=req_headers, ) as http_response: content_type = http_response.headers.get("Content-Type", "") if not is_stream and "text/event-stream" in content_type: diff --git a/tensorrt_llm/serve/openai_server.py b/tensorrt_llm/serve/openai_server.py index fa2073d17c01..d03dbab494da 100644 --- a/tensorrt_llm/serve/openai_server.py +++ b/tensorrt_llm/serve/openai_server.py @@ -25,6 +25,7 @@ from fastapi.exceptions import RequestValidationError from fastapi.responses import (FileResponse, JSONResponse, Response, StreamingResponse) +from fastapi.routing import APIRoute from pydantic import ValidationError from starlette.routing import Mount from transformers import AutoProcessor @@ -102,6 +103,55 @@ maybe_transform_reasoning_effort) # yapf: enable + +# msgspec msgpack is an opt-in transport for the disagg orchestrator->worker +# request body: the large agentic chat body otherwise blocks the serving event +# loop on stdlib json.loads. Enable with TRTLLM_SERVE_ENABLE_MSGSPEC=1 (must be +# set on both orchestrator and worker). The worker decodes bodies flagged with +# the X-TRTLLM-Msgpack header via msgspec and falls back to stdlib json for +# everything else, so the JSON path is byte-for-byte unchanged when the flag is off. +_MSGSPEC_ENABLED = os.getenv("TRTLLM_SERVE_ENABLE_MSGSPEC", "0") == "1" +if _MSGSPEC_ENABLED: + try: + import msgspec + except ImportError as exc: + raise ImportError( + "TRTLLM_SERVE_ENABLE_MSGSPEC=1 requires the msgspec package " + "(listed in requirements.txt).") from exc + _msgpack_decoder = msgspec.msgpack.Decoder() + + class _MsgspecRequest(Request): + """Request that decodes msgpack bodies (X-TRTLLM-Msgpack: 1) with msgspec. + + The orchestrator sends Content-Type application/json (so FastAPI still + routes the body through Request.json()) with the X-TRTLLM-Msgpack header + flagging a msgspec-msgpack payload; everything else is stdlib json. + """ + + async def json(self): + if not hasattr(self, "_json_body"): + body = await self.body() + if not body: + self._json_body = {} + elif self.headers.get("x-trtllm-msgpack") == "1": + self._json_body = _msgpack_decoder.decode(body) + else: + self._json_body = json.loads(body) + return self._json_body + + class _MsgspecRoute(APIRoute): + """APIRoute that parses request bodies via :class:`_MsgspecRequest`.""" + + def get_route_handler(self): + original_route_handler = super().get_route_handler() + + async def route_handler(request: Request): + return await original_route_handler( + _MsgspecRequest(request.scope, request.receive)) + + return route_handler + + TIMEOUT_KEEP_ALIVE = 5 # seconds. @@ -384,6 +434,8 @@ async def lifespan(app: FastAPI): self.generator.shutdown() self.app = FastAPI(lifespan=lifespan) + if _MSGSPEC_ENABLED: + self.app.router.route_class = _MsgspecRoute @self.app.exception_handler(RequestValidationError) async def validation_exception_handler(_, exc): From e9b8e91dba20840f43183d5534f112429a960667 Mon Sep 17 00:00:00 2001 From: sunnyqgg <159101675+sunnyqgg@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:04:07 +0800 Subject: [PATCH 04/21] [None][feat] Add an opt-in raw-weight cache to the HF weight loader (#16054) Signed-off-by: qgai --- .../models/checkpoints/hf/weight_loader.py | 226 +++++++++++++++--- .../checkpoints/hf/test_weight_loader.py | 183 ++++++++++++++ 2 files changed, 382 insertions(+), 27 deletions(-) diff --git a/tensorrt_llm/_torch/models/checkpoints/hf/weight_loader.py b/tensorrt_llm/_torch/models/checkpoints/hf/weight_loader.py index 264104c6f2e1..a4e8f898548b 100644 --- a/tensorrt_llm/_torch/models/checkpoints/hf/weight_loader.py +++ b/tensorrt_llm/_torch/models/checkpoints/hf/weight_loader.py @@ -15,6 +15,8 @@ import glob import multiprocessing import os +import threading +from collections import OrderedDict from concurrent.futures import ThreadPoolExecutor from typing import Any, List @@ -33,6 +35,15 @@ from tensorrt_llm.logger import logger from tensorrt_llm.mapping import Mapping +_WEIGHT_CACHE_ENV = "TRTLLM_HF_WEIGHT_CACHE" +_WEIGHT_CACHE_MAX_ENTRIES_ENV = "TRTLLM_HF_WEIGHT_CACHE_MAX_ENTRIES" +# Default to a single cached checkpoint: each entry pins a full copy of the +# raw weights in CPU RAM, so callers wanting cross-model caching must opt in +# via TRTLLM_HF_WEIGHT_CACHE_MAX_ENTRIES. +_DEFAULT_WEIGHT_CACHE_MAX_ENTRIES = 1 +_WEIGHT_CACHE_LOCK = threading.Lock() +_WEIGHT_CACHE: OrderedDict[tuple, dict[str, Any]] = OrderedDict() + @register_checkpoint_weight_loader("MX") @register_checkpoint_weight_loader("mistral") @@ -43,6 +54,122 @@ class HfWeightLoader(BaseWeightLoader): Loads weights from SafeTensors/bin/pth files. """ + @staticmethod + def _is_weight_cache_enabled() -> bool: + return os.environ.get(_WEIGHT_CACHE_ENV, + "0").lower() in ("1", "true", "yes", "on") + + @staticmethod + def _weight_cache_max_entries() -> int: + try: + return max( + 0, + int( + os.environ.get(_WEIGHT_CACHE_MAX_ENTRIES_ENV, + _DEFAULT_WEIGHT_CACHE_MAX_ENTRIES))) + except ValueError: + logger.warning( + f"Invalid {_WEIGHT_CACHE_MAX_ENTRIES_ENV} value; disabling HF weight cache." + ) + return 0 + + @staticmethod + def _weight_files_cache_key(weight_files: List[str], + use_consolidated: bool) -> tuple: + file_fingerprint = [] + for file_name in sorted(weight_files): + stat = os.stat(file_name) + file_fingerprint.append( + (os.path.abspath(file_name), stat.st_size, stat.st_mtime_ns)) + return (tuple(file_fingerprint), use_consolidated) + + @staticmethod + def _clear_weight_cache() -> None: + with _WEIGHT_CACHE_LOCK: + _WEIGHT_CACHE.clear() + + @staticmethod + def _evict_to_make_room() -> None: + """Evict LRU entries on a miss BEFORE the new load, so CPU never holds + the old (cached) and new (loading) weights at once (a ~2x peak).""" + max_entries = HfWeightLoader._weight_cache_max_entries() + if max_entries <= 0: + return + with _WEIGHT_CACHE_LOCK: + while len(_WEIGHT_CACHE) >= max_entries: + _WEIGHT_CACHE.popitem(last=False) + + @staticmethod + def _tensor_sig(t: torch.Tensor) -> tuple: + """A cheap integrity fingerprint: shape, dtype and a sampled sum. + + Recomputing the same sum over the same (unmutated) memory is exactly + deterministic, so plain equality detects in-place mutation. Sampling + up to 1024 strided elements keeps this at microseconds per tensor. + """ + flat = t.detach().reshape(-1) + stride = max(1, flat.numel() // 1024) + sample = flat[::stride][:1024] + return (tuple(t.shape), str(t.dtype), + float(torch.nan_to_num(sample.float()).sum())) + + @staticmethod + def _fingerprint(weights: dict[str, Any]) -> dict[str, tuple]: + return { + key: HfWeightLoader._tensor_sig(value) + for key, value in weights.items() if torch.is_tensor(value) + } + + @staticmethod + def _cache_loaded_weights(cache_key: tuple, + loaded_weights: dict[str, Any]) -> None: + max_entries = HfWeightLoader._weight_cache_max_entries() + if max_entries <= 0: + return + + weights = dict(loaded_weights) + # Fingerprint outside the lock; the cache shares tensors across loads + # (read-only by contract), and the fingerprint turns a violation of + # that contract into a detected, self-healing miss instead of + # silently corrupted weights (see _get_cached_weights). + sigs = HfWeightLoader._fingerprint(weights) + # Room was already made by the caller-side evict-before-load in + # _with_weight_cache (the load-bearing one for the memory peak). + with _WEIGHT_CACHE_LOCK: + _WEIGHT_CACHE[cache_key] = (weights, sigs) + + @staticmethod + def _get_cached_weights(cache_key: tuple) -> ConsumableWeightsDict | None: + with _WEIGHT_CACHE_LOCK: + entry = _WEIGHT_CACHE.get(cache_key) + if entry is None: + return None + weights, sigs = entry + _WEIGHT_CACHE.move_to_end(cache_key) + # Integrity check: cached tensors are shared, so an earlier consumer + # mutating them in place (e.g. an in-place transform in a weight + # mapper) would poison every later load. Detect it, name the culprit + # keys, drop the entry and let the caller reload from disk. + mutated = [ + key for key, sig in sigs.items() + if HfWeightLoader._tensor_sig(weights[key]) != sig + ] + if mutated: + logger.warning( + "HF weight cache entry was mutated in place since it was " + f"stored (keys: {mutated[:5]}{'...' if len(mutated) > 5 else ''}); " + "dropping it and reloading from disk. Weight preprocessing " + "must not mutate raw checkpoint tensors.") + with _WEIGHT_CACHE_LOCK: + if _WEIGHT_CACHE.get(cache_key) is entry: + del _WEIGHT_CACHE[cache_key] + return None + # Return a fresh dict wrapper because model loaders call + # mark_consumed(). Tensor values are intentionally shared: this + # cache targets read-only raw checkpoint tensors, not per-config + # materialized module weights. + return ConsumableWeightsDict(dict(weights)) + @staticmethod def _get_local_available_host_memory() -> int: """Determine the minimum available memory observed on the local node @@ -61,6 +188,39 @@ def _get_local_available_host_memory() -> int: op=_MPI.MIN) return available_host_memory + def _with_weight_cache(self, weight_files: List[str], + use_consolidated: bool, + mirror_load_collectives: bool, + load_fn) -> ConsumableWeightsDict: + """Wrap ``load_fn`` with the optional raw-weight cache. + + Key -> hit (optionally joining the local barrier the miss path is + about to enter) -> evict-before-load (so CPU never holds the old + cached and the new loading weights at once) -> load -> store. + """ + cache_key = self._weight_files_cache_key( + weight_files, + use_consolidated) if self._is_weight_cache_enabled() else None + if cache_key is not None: + cached_weights = self._get_cached_weights(cache_key) + if cached_weights is not None: + logger.info("Reusing cached HF checkpoint weights.") + if mirror_load_collectives: + # Rank-local caches can diverge, so a hit on one rank must + # enqueue EXACTLY the collectives a miss on another rank + # enqueues, in the same order, or the job deadlocks. The + # safetensors miss path performs an Allreduce (inside + # _get_local_available_host_memory) and then a Barrier; + # mirror both here (the allreduce result is unused). + self._get_local_available_host_memory() + local_mpi_barrier() + return cached_weights + self._evict_to_make_room() + weights = load_fn() + if cache_key is not None: + self._cache_loaded_weights(cache_key, weights) + return weights + def load_weights(self, checkpoint_dir: str, mapping: Mapping, @@ -77,42 +237,54 @@ def load_weights(self, if len(filtered_weight_files) > 0: weight_files = filtered_weight_files if weight_files: - # Prefetch the weight files to CPU memory if the size is less than 90% of the available memory. - # This is a heuristic to avoid prefetching files that are too large and causing file cache thrashing. - prefetch_size = sum(os.path.getsize(file) for file in weight_files) - # If the layer number is overridden, it indicates that only a subset of layers are loaded. - # Prefetching all layers is unnecessary. - num_layers = int(os.environ.get("TLLM_OVERRIDE_LAYER_NUM", "0")) - enable_prefetch = (prefetch_size - < self._get_local_available_host_memory() * 0.9 - and num_layers == 0) - if enable_prefetch: - logger.info( - f"Prefetching {prefetch_size / (1024**3):.2f}GB checkpoint files." - ) - self.prefetch_files(weight_files) - # Sync all local ranks unconditionally. `enable_prefetch` depends on - # `psutil.virtual_memory().available`, a per-rank volatile value, so - # different ranks may take different branches; gating the barrier on - # it would deadlock between ranks that prefetched and ranks that - # skipped. Ranks that didn't prefetch reach the barrier immediately. - local_mpi_barrier() - - return self._load_weights_in_parallel( - weight_files, self._load_safetensors_file, - "Loading safetensors weights in parallel") + return self._with_weight_cache( + weight_files, + use_consolidated, + mirror_load_collectives=True, + load_fn=lambda: self._prefetch_and_load(weight_files)) weight_files = glob.glob(f"{checkpoint_dir}/*.bin") if not weight_files: weight_files = glob.glob(f"{checkpoint_dir}/*.pth") if weight_files: - return self._load_weights_in_parallel( - weight_files, self._load_bin_or_path_file, - "Loading bin weights in parallel") + return self._with_weight_cache( + weight_files, + use_consolidated, + mirror_load_collectives=False, + load_fn=lambda: self._load_weights_in_parallel( + weight_files, self._load_bin_or_path_file, + "Loading bin weights in parallel")) raise RuntimeError(f"No weight files found in {checkpoint_dir}.") + def _prefetch_and_load(self, + weight_files: List[str]) -> ConsumableWeightsDict: + # Prefetch the weight files to CPU memory if the size is less than 90% of the available memory. + # This is a heuristic to avoid prefetching files that are too large and causing file cache thrashing. + prefetch_size = sum(os.path.getsize(file) for file in weight_files) + # If the layer number is overridden, it indicates that only a subset of layers are loaded. + # Prefetching all layers is unnecessary. + num_layers = int(os.environ.get("TLLM_OVERRIDE_LAYER_NUM", "0")) + enable_prefetch = (prefetch_size + < self._get_local_available_host_memory() * 0.9 + and num_layers == 0) + if enable_prefetch: + logger.info( + f"Prefetching {prefetch_size / (1024**3):.2f}GB checkpoint files." + ) + self.prefetch_files(weight_files) + # Sync all local ranks unconditionally. `enable_prefetch` depends on + # `psutil.virtual_memory().available`, a per-rank volatile value, so + # different ranks may take different branches; gating the barrier on + # it would deadlock between ranks that prefetched and ranks that + # skipped. Ranks that didn't prefetch reach the barrier immediately. + local_mpi_barrier() + + return self._load_weights_in_parallel( + weight_files, self._load_safetensors_file, + "Loading safetensors weights in parallel") + def _load_weights_in_parallel(self, weight_files: List[str], load_func, description: str) -> ConsumableWeightsDict: """ diff --git a/tests/unittest/_torch/models/checkpoints/hf/test_weight_loader.py b/tests/unittest/_torch/models/checkpoints/hf/test_weight_loader.py index fbe8a3dbf481..08ebaa09c2f8 100644 --- a/tests/unittest/_torch/models/checkpoints/hf/test_weight_loader.py +++ b/tests/unittest/_torch/models/checkpoints/hf/test_weight_loader.py @@ -3,6 +3,7 @@ import pytest from tensorrt_llm._torch.models.checkpoints import HfWeightLoader +from tensorrt_llm._torch.models.checkpoints.base_weight_loader import ConsumableWeightsDict from tensorrt_llm.mapping import Mapping @@ -10,6 +11,13 @@ class MyError(Exception): pass +@pytest.fixture(autouse=True) +def clean_weight_cache(): + HfWeightLoader._clear_weight_cache() + yield + HfWeightLoader._clear_weight_cache() + + @pytest.mark.parametrize( "dir_name, safetensor_filenames, expected_safetensor_filenames, use_consolidated", [ @@ -97,3 +105,178 @@ def test_load_weights_ignores_consolidated_ckpt_when_sharded_ckpt_exists( load_weights_in_parallel.assert_called_once() loaded_weight_files = load_weights_in_parallel.call_args[0][0] assert set(loaded_weight_files) == expected_safetensor_filenames + + +def test_weight_cache_reuses_raw_weights_with_fresh_consumable_wrapper(tmp_path, monkeypatch): + monkeypatch.setenv("TRTLLM_HF_WEIGHT_CACHE", "1") + + checkpoint_dir = tmp_path / "foo" + checkpoint_dir.mkdir() + (checkpoint_dir / "model.safetensors").touch() + + raw_weight = object() + loader = HfWeightLoader() + + with ( + mock.patch.object( + loader, + "_load_weights_in_parallel", + return_value=ConsumableWeightsDict({"foo.weight": raw_weight}), + ) as load_weights_in_parallel, + mock.patch.object(loader, "prefetch_files"), + ): + first = loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + assert first["foo.weight"] is raw_weight + assert first.mark_consumed("foo") == 1 + assert len(first) == 0 + + second = loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + + load_weights_in_parallel.assert_called_once() + assert second["foo.weight"] is raw_weight + + +def test_weight_cache_evicts_before_load_on_miss(tmp_path, monkeypatch): + # On a cross-model miss with a full cache (max_entries=1), the old entry + # must be evicted BEFORE the new weights load, so CPU never holds both the + # old (cached) and new (loading) weights at once (no transient 2x peak). + from tensorrt_llm._torch.models.checkpoints.hf import weight_loader as wl + + monkeypatch.setenv("TRTLLM_HF_WEIGHT_CACHE", "1") + monkeypatch.setenv("TRTLLM_HF_WEIGHT_CACHE_MAX_ENTRIES", "1") + + dir_a = tmp_path / "a" + dir_a.mkdir() + (dir_a / "model.safetensors").touch() + dir_b = tmp_path / "b" + dir_b.mkdir() + (dir_b / "model.safetensors").touch() + + loader = HfWeightLoader() + with mock.patch.object(loader, "prefetch_files"): + with mock.patch.object( + loader, + "_load_weights_in_parallel", + return_value=ConsumableWeightsDict({"foo.weight": object()}), + ): + loader.load_weights(str(dir_a), mapping=Mapping()) + assert len(wl._WEIGHT_CACHE) == 1 + + def assert_room_freed_before_load(*args, **kwargs): + # The old (A) entry must already be gone by the time B loads. + assert len(wl._WEIGHT_CACHE) == 0 + return ConsumableWeightsDict({"foo.weight": object()}) + + with mock.patch.object( + loader, + "_load_weights_in_parallel", + side_effect=assert_room_freed_before_load, + ): + loader.load_weights(str(dir_b), mapping=Mapping()) + + assert len(wl._WEIGHT_CACHE) == 1 + + +def test_weight_cache_disabled_by_default(tmp_path, monkeypatch): + monkeypatch.delenv("TRTLLM_HF_WEIGHT_CACHE", raising=False) + + checkpoint_dir = tmp_path / "foo" + checkpoint_dir.mkdir() + (checkpoint_dir / "model.safetensors").touch() + + loader = HfWeightLoader() + + with ( + mock.patch.object( + loader, + "_load_weights_in_parallel", + side_effect=[ + ConsumableWeightsDict({"foo.weight": object()}), + ConsumableWeightsDict({"foo.weight": object()}), + ], + ) as load_weights_in_parallel, + mock.patch.object(loader, "prefetch_files"), + ): + loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + + assert load_weights_in_parallel.call_count == 2 + + +def test_weight_cache_detects_inplace_mutation_and_reloads(tmp_path, monkeypatch): + # The cache shares raw tensors across loads (read-only by contract). A + # consumer mutating one in place (e.g. an in-place transform in a weight + # mapper) must be detected on the next hit: the poisoned entry is dropped + # and the weights are reloaded from disk instead of silently corrupted. + import torch + + monkeypatch.setenv("TRTLLM_HF_WEIGHT_CACHE", "1") + + checkpoint_dir = tmp_path / "foo" + checkpoint_dir.mkdir() + (checkpoint_dir / "model.safetensors").touch() + + loader = HfWeightLoader() + + def fresh_weights(*args, **kwargs): + return ConsumableWeightsDict({"a.weight": torch.ones(64)}) + + with ( + mock.patch.object( + loader, "_load_weights_in_parallel", side_effect=fresh_weights + ) as load_weights_in_parallel, + mock.patch.object(loader, "prefetch_files"), + ): + first = loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + first["a.weight"].neg_() # in-place mutation through the shared tensor + + second = loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + + assert load_weights_in_parallel.call_count == 2 # poisoned hit -> reload + assert torch.equal(second["a.weight"], torch.ones(64)) # clean weights + + +def test_cache_hit_and_miss_issue_identical_collectives(tmp_path, monkeypatch): + # Rank-local caches can diverge, so a hit on one rank and a miss on + # another must enqueue the SAME collectives in the same order (Allreduce + # from _get_local_available_host_memory, then Barrier) or the job + # deadlocks. Record the sequence each path produces and compare. + monkeypatch.setenv("TRTLLM_HF_WEIGHT_CACHE", "1") + + checkpoint_dir = tmp_path / "foo" + checkpoint_dir.mkdir() + (checkpoint_dir / "model.safetensors").touch() + + loader = HfWeightLoader() + sequences = {"miss": [], "hit": []} + current: list = [] + + monkeypatch.setattr( + "tensorrt_llm._torch.models.checkpoints.hf.weight_loader.local_mpi_barrier", + lambda: current.append("barrier"), + ) + + def record_allreduce(): + current.append("allreduce") + return 1 << 60 # plenty of host memory + + with ( + mock.patch.object( + loader, + "_load_weights_in_parallel", + return_value=ConsumableWeightsDict({"foo.weight": object()}), + ), + mock.patch.object(loader, "prefetch_files"), + mock.patch.object( + HfWeightLoader, + "_get_local_available_host_memory", + side_effect=record_allreduce, + ), + ): + current = sequences["miss"] + loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + current = sequences["hit"] + loader.load_weights(str(checkpoint_dir), mapping=Mapping()) + + assert sequences["miss"] == ["allreduce", "barrier"] + assert sequences["hit"] == sequences["miss"] # divergence-safe ordering From 9fe5d0f735a4a08f4d63f2248ec88c082a528bd4 Mon Sep 17 00:00:00 2001 From: chenfeiz0326 Date: Mon, 13 Jul 2026 10:18:26 +0800 Subject: [PATCH 05/21] =?UTF-8?q?[https://nvbugs/6430674][fix]=20Surgical?= =?UTF-8?q?=20revert=20of=20PR=20#15838's=20dispatch=20guard=20removal:=20?= =?UTF-8?q?re-add=E2=80=A6=20(#16167)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Chenfei Zhang Signed-off-by: chenfeiz0326 --- .../attention_backend/fmha/flashinfer_trtllm_gen.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tensorrt_llm/_torch/attention_backend/fmha/flashinfer_trtllm_gen.py b/tensorrt_llm/_torch/attention_backend/fmha/flashinfer_trtllm_gen.py index 569accf21a9b..21e67006fc95 100644 --- a/tensorrt_llm/_torch/attention_backend/fmha/flashinfer_trtllm_gen.py +++ b/tensorrt_llm/_torch/attention_backend/fmha/flashinfer_trtllm_gen.py @@ -408,6 +408,9 @@ class FlashInferTrtllmGenFmha(PhasedFmha): (320, 256), (576, 512), } + SLOWER_MLA_GENERATION_KERNELS = { + (576, 512, 32), + } def __init__(self, attn: "TrtllmAttention"): super().__init__(attn) @@ -526,6 +529,7 @@ def _get_attention_chunk_size(attn: "TrtllmAttention") -> int: def _check_mla_generation_support( cls, head_size: int, + tokens_per_block: int, kv_lora_rank: Optional[int], qk_rope_head_dim: Optional[int], ) -> Tuple[bool, str]: @@ -563,6 +567,14 @@ def _check_mla_generation_support( f"headDimQk={head_dim_qk}, headDimV={head_dim_v}. Supported: {supported}.", ) + if (head_dim_qk, head_dim_v, tokens_per_block) in cls.SLOWER_MLA_GENERATION_KERNELS: + return ( + False, + f"[Generation][MLA] slower TRTLLM-GEN decode kernel for " + f"headDimQk={head_dim_qk}, headDimV={head_dim_v}, " + f"tokens_per_block={tokens_per_block}.", + ) + return True, "" def is_supported( @@ -729,6 +741,7 @@ def _is_supported_with_reason( if is_mla_enable: supported, reason = self._check_mla_generation_support( head_size=attn.head_dim, + tokens_per_block=tokens_per_block, kv_lora_rank=attn.kv_lora_rank, qk_rope_head_dim=attn.qk_rope_head_dim, ) From c47715a2b26a49e27d058d402c3a77cc12c1fcca Mon Sep 17 00:00:00 2001 From: Jin Li <59594262+liji-nv@users.noreply.github.com> Date: Sun, 12 Jul 2026 19:33:48 -0700 Subject: [PATCH 06/21] [None][fix] source DSA metadata from sparse params (#16236) Signed-off-by: Jin Li <59594262+liji-nv@users.noreply.github.com> --- .../sparse/deepseek_v4/deepseek_v4.py | 18 +++++----- .../_torch/attention_backend/sparse/dsa.py | 11 +++--- tensorrt_llm/llmapi/llm_args.py | 2 ++ .../attention/sparse/dsa/test_dsa_indexer.py | 35 ++++++++++++++++++- 4 files changed, 49 insertions(+), 17 deletions(-) diff --git a/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py b/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py index 1c514223b968..7bf02288fff2 100644 --- a/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py +++ b/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py @@ -245,6 +245,9 @@ def make_deepseek_v4_sparse_metadata_params( max_sparse_topk=_sparse_config_value( sparse_attention_config, pretrained_config, "index_topk" ), + index_head_dim=_sparse_config_value( + sparse_attention_config, pretrained_config, "index_head_dim", 128 + ), enable_indexer_skip=sparse_attention_config.skip_indexer_for_short_seqs, enable_heuristic_topk=sparse_attention_config.enable_heuristic_topk, use_cute_dsl_paged_mqa_logits=(sparse_attention_config.use_cute_dsl_paged_mqa_logits), @@ -271,16 +274,11 @@ def __post_init__(self): super().__post_init__() self.num_total_compressed_tokens = {} self.max_ctx_compressed_tokens = {} - window_size = getattr(self.sparse_metadata_params, "window_size", None) - if window_size is None and self.sparse_attention_config is not None: - window_size = self.sparse_attention_config.window_size - compress_ratios = getattr(self.sparse_metadata_params, "compress_ratios", None) - if not compress_ratios and self.sparse_attention_config is not None: - compress_ratios = self.sparse_attention_config.compress_ratios - if compress_ratios: - self.compress_ratios = compress_ratios - - self.window_size = window_size + sparse_metadata_params = self.sparse_metadata_params + if not isinstance(sparse_metadata_params, DeepSeekV4MetadataParams): + raise ValueError("DeepSeek-V4 sparse attention metadata params are not set") + self.window_size = sparse_metadata_params.window_size + window_size = self.window_size assert window_size == 128, ( f"Dual-pool sparse MLA requires window_size == 128, which equals to the" f"TileSizeKV of the FMHA kernel. (got {window_size})." diff --git a/tensorrt_llm/_torch/attention_backend/sparse/dsa.py b/tensorrt_llm/_torch/attention_backend/sparse/dsa.py index 66e05ba43468..db593c969d1f 100644 --- a/tensorrt_llm/_torch/attention_backend/sparse/dsa.py +++ b/tensorrt_llm/_torch/attention_backend/sparse/dsa.py @@ -87,6 +87,7 @@ class DSAMetadataParams(SparseMetadataParams): indexer_max_chunk_size: int max_sparse_topk: Optional[int] + index_head_dim: int enable_indexer_skip: bool enable_heuristic_topk: bool use_cute_dsl_paged_mqa_logits: bool @@ -626,7 +627,6 @@ class DSAtrtllmAttentionMetadata(TrtllmAttentionMetadata): def __init__(self, *args, **kwargs): """Initialize DSA metadata with SM count and indexer chunk size.""" sparse_attention_config = kwargs.pop("sparse_attention_config", None) - self.sparse_attention_config = sparse_attention_config if (kwargs.get("sparse_metadata_params") is None and sparse_attention_config is not None and hasattr( sparse_attention_config, "to_sparse_metadata_params")): @@ -670,14 +670,13 @@ def __post_init__(self): raise ValueError("DSA sparse attention metadata params are not set") self.num_sparse_topk = sparse_metadata_params.max_sparse_topk self.sparse_mla_topk = self.num_sparse_topk - self.indexer_head_dim = getattr(self.sparse_attention_config, - "index_head_dim", 128) + self.indexer_head_dim = sparse_metadata_params.index_head_dim self.indexer_quant_block_size = 128 self.enable_indexer_skip = (sparse_metadata_params.enable_indexer_skip) capture_graph = self.is_cuda_graph - # Get compression ratio from sparse attention config. Plain DSA has no - # compression and uses the default [1]; DeepSeek-V4 overrides this. - self.compress_ratios = getattr(self.sparse_attention_config, + # Plain DSA has no compression and uses the default [1]. DeepSeek-V4's + # metadata params carry the model-specific compression ratios. + self.compress_ratios = getattr(sparse_metadata_params, 'compress_ratios', [1]) # Effective tokens-per-block for the indexer k-cache slot mapping. diff --git a/tensorrt_llm/llmapi/llm_args.py b/tensorrt_llm/llmapi/llm_args.py index 6a63ad9c8c49..529535f8adf1 100644 --- a/tensorrt_llm/llmapi/llm_args.py +++ b/tensorrt_llm/llmapi/llm_args.py @@ -955,6 +955,7 @@ def _value(name: str, default=None): return DSAMetadataParams( indexer_max_chunk_size=self.indexer_max_chunk_size or 32768, max_sparse_topk=_value("index_topk"), + index_head_dim=_value("index_head_dim", 128), enable_indexer_skip=self.skip_indexer_for_short_seqs, enable_heuristic_topk=self.enable_heuristic_topk, use_cute_dsl_paged_mqa_logits=(self.use_cute_dsl_paged_mqa_logits), @@ -1062,6 +1063,7 @@ def _value(name: str, default=None): return DeepSeekV4MetadataParams( indexer_max_chunk_size=self.indexer_max_chunk_size or 32768, max_sparse_topk=_value("index_topk"), + index_head_dim=_value("index_head_dim", 128), enable_indexer_skip=self.skip_indexer_for_short_seqs, enable_heuristic_topk=self.enable_heuristic_topk, use_cute_dsl_paged_mqa_logits=(self.use_cute_dsl_paged_mqa_logits), diff --git a/tests/unittest/_torch/attention/sparse/dsa/test_dsa_indexer.py b/tests/unittest/_torch/attention/sparse/dsa/test_dsa_indexer.py index 29fa557884f4..2cdea0985e4a 100644 --- a/tests/unittest/_torch/attention/sparse/dsa/test_dsa_indexer.py +++ b/tests/unittest/_torch/attention/sparse/dsa/test_dsa_indexer.py @@ -26,6 +26,7 @@ import random import sys from pathlib import Path +from types import SimpleNamespace from unittest.mock import Mock, patch import pytest @@ -53,7 +54,10 @@ from tensorrt_llm.bindings.internal.batch_manager import CacheType as CacheTypeCpp from tensorrt_llm.deep_gemm import fp8_paged_mqa_logits from tensorrt_llm.functional import PositionEmbeddingType -from tensorrt_llm.llmapi.llm_args import DeepSeekSparseAttentionConfig +from tensorrt_llm.llmapi.llm_args import ( + DeepSeekSparseAttentionConfig, + DeepSeekV4SparseAttentionConfig, +) from tensorrt_llm.mapping import Mapping from tensorrt_llm.quantization.utils import fp8_utils @@ -66,6 +70,35 @@ def has_deep_gemm(): return False +def test_metadata_cache_geometry_comes_from_sparse_metadata_params(): + sparse_config = DeepSeekV4SparseAttentionConfig( + compress_ratios=[1, 4, 128], + index_head_dim=96, + indexer_k_dtype="fp8", + ) + sparse_metadata_params = sparse_config.to_sparse_metadata_params() + metadata = object.__new__(DSAtrtllmAttentionMetadata) + metadata.sparse_metadata_params = sparse_metadata_params + metadata.kv_cache_manager = SimpleNamespace( + tokens_per_block=256, + compressed_block_sizes={}, + get_cache_indices=Mock(), + ) + metadata.is_cuda_graph = False + metadata.create_buffers_for_mla_rope_append = Mock() + metadata.create_buffers_for_indexer = Mock() + + with patch( + "tensorrt_llm._torch.attention_backend.sparse.dsa.TrtllmAttentionMetadata.__post_init__" + ): + DSAtrtllmAttentionMetadata.__post_init__(metadata) + + assert metadata.indexer_head_dim == 96 + assert metadata.compress_ratios == [1, 4, 128] + assert metadata._indexer_compress_ratio == 4 + assert metadata._tokens_per_block == 64 + + def test_indexer_post_load_weights_caches_fused_weight(): indexer = Indexer.__new__(Indexer) torch.nn.Module.__init__(indexer) From 770ebc5db5c9c1486b8792928fdebf35de73eff3 Mon Sep 17 00:00:00 2001 From: TensorRT LLM AI Agent <296075020+trtllm-agent@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:35:53 +0800 Subject: [PATCH 07/21] [None][infra] Waive 7 failed cases for main in post-merge 2835 (#16292) Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> --- tests/integration/test_lists/waives.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index d67988ac1721..6e4ddea6a57a 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -23,6 +23,7 @@ accuracy/test_disaggregated_serving.py::TestQwen3_30B_A3B::test_mixed_ctx_gen_mo accuracy/test_epd_disagg_multimodal.py::TestVideoMMEEPD::test_disaggregated_videomme[nemotron_nano_v3_omni_nvfp4] SKIP (https://nvbugs/6336747) accuracy/test_epd_disagg_multimodal.py::TestVideoMMEEPD::test_disaggregated_videomme[qwen3vl_2b_instruct] SKIP (https://nvbugs/6422294) accuracy/test_llm_api.py::TestLlama3_1_8BInstruct::test_guided_decoding_4gpus[xgrammar] SKIP (https://nvbugs/5346443) +accuracy/test_llm_api_autodeploy.py::TestGemma4MoE::test_bf16 SKIP (https://nvbugs/6445322) accuracy/test_llm_api_autodeploy.py::TestMiniMaxM2::test_finegrained_fp8 SKIP (https://nvbugs/6396422) accuracy/test_llm_api_autodeploy.py::TestNemotronNanoV3::test_accuracy[bf16-4-attn_dp_off-trtllm] SKIP (https://nvbugs/6367792) accuracy/test_llm_api_autodeploy.py::TestNemotronNanoV3::test_accuracy[fp8-4-attn_dp_off-trtllm] SKIP (https://nvbugs/6367792) @@ -96,6 +97,7 @@ accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_bfloat16[attn_ba accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_bfloat16[attn_backend=TRTLLM-torch_compile=True] SKIP (https://nvbugs/6305318) accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_bfloat16_4gpus[tp2pp2-attn_backend=FLASHINFER-torch_compile=True] SKIP (https://nvbugs/6422337) accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_bfloat16_4gpus[tp4-attn_backend=TRTLLM-torch_compile=False] SKIP (https://nvbugs/5616182) +accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_fp8_4gpus[pp4-fp8kv=False-attn_backend=TRTLLM-torch_compile=False] SKIP (https://nvbugs/6437412) accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_fp8_4gpus[pp4-fp8kv=True-attn_backend=TRTLLM-torch_compile=False] SKIP (https://nvbugs/6278337) accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_fp8_4gpus[tp2pp2-fp8kv=False-attn_backend=TRTLLM-torch_compile=False] SKIP (https://nvbugs/6427411) accuracy/test_llm_api_pytorch.py::TestLlama3_1_8BInstruct::test_fp8_4gpus[tp2pp2-fp8kv=True-attn_backend=TRTLLM-torch_compile=False] SKIP (https://nvbugs/6427411) @@ -188,6 +190,7 @@ examples/test_ray.py::test_llm_inference_distributed_ray[tp2pp2] SKIP (https://n examples/test_ray.py::test_ray_disaggregated_serving[tp2] SKIP (https://nvbugs/5612502) examples/test_whisper.py::test_llm_whisper_general[large-v3-disable_gemm_plugin-disable_attention_plugin-disable_weight_only-float16-nb:1-use_python_runtime] SKIP (https://nvbugs/5244570) examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2i_lpips_against_golden SKIP (https://nvbugs/6418815) +examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2v_lpips_against_golden SKIP (https://nvbugs/6437341) examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_golden_multi_gpu[attn2d_2x2] SKIP (https://nvbugs/6272644) examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_golden_multi_gpu[cfg2_ulysses2] SKIP (https://nvbugs/6272644) examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_golden_multi_gpu[cfg2_ulysses2_attn2d_2x1] SKIP (https://nvbugs/6272644) @@ -364,6 +367,7 @@ perf/test_perf.py::test_perf[t5-bench-float16-maxbs:1-input_output_len:128,20-gp perf/test_perf.py::test_perf[t5_base-plugin-float16-bs:8-input_output_len:60,20] SKIP # (https://nvidia.slack.com/archives/C059LSY62BT/p1704525727177449) perf/test_perf.py::test_perf[whisper_large_v3-bench-float16-input_output_len:128,20] SKIP perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_dep4_mtp1_1k8k] SKIP (https://nvbugs/6422339) +perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_mtp3_1k1k] SKIP (https://nvbugs/6445332) perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_mtp3_8k1k] SKIP (https://nvbugs/6432948) perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_dep4_mtp1_1k1k] SKIP (https://nvbugs/6374910) perf/test_perf_sanity.py::test_e2e[aggr_upload-dynamo_gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tep4_adp_cutlass_8k1k] SKIP (https://nvbugs/6374910) @@ -372,6 +376,7 @@ perf/test_perf_sanity.py::test_e2e[aggr_upload-k25_thinking_fp4_2_nodes_grace_bl perf/test_perf_sanity.py::test_e2e[aggr_upload-super_ad_blackwell-super_ad_ws1_1k1k] SKIP (https://nvbugs/6153575) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-r1-fp4_128k8k_con128_ctx1_pp8_gen1_dep16_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6426890) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_qwen3-235b-fp4_8k1k_con1024_ctx1_tp1_gen1_dep8_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6422339) +perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con1536_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6445332) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_128k8k_con64_ctx1_pp8_gen1_dep32_eplb0_mtp3_ccb-NIXL] SKIP (https://nvbugs/6422339) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] SKIP (https://nvbugs/6422339) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6422339) @@ -392,6 +397,8 @@ perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_c perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_con4096_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] SKIP (https://nvbugs/6422339) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6402069) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6323074) +perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] SKIP (https://nvbugs/6445332) +perf/test_visual_gen_perf_sanity.py::test_visual_gen_e2e[vg_upload-flux2_blackwell-flux2_fp8_cfg1_ulysses4_teacache_on] SKIP (https://nvbugs/6445332) perf/test_visual_gen_perf_sanity.py::test_visual_gen_e2e[vg_upload-wan22_i2v_a14b_blackwell-wan22_i2v_a14b_nvfp4_trtllm_cfg2_ulysses4] SKIP (https://nvbugs/6422339) test_doc.py::test_url_validity SKIP (https://nvbugs/6215684) test_e2e.py::test_draft_token_tree_quickstart_advanced_eagle3[Llama-3.1-8b-Instruct-llama-3.1-model/Llama-3.1-8B-Instruct-EAGLE3-LLaMA3.1-Instruct-8B] SKIP (https://nvbugs/6368053) From 3bff181f8a90b161901acb94239a73507e7be647 Mon Sep 17 00:00:00 2001 From: Bo Deng Date: Mon, 13 Jul 2026 10:49:46 +0800 Subject: [PATCH 08/21] =?UTF-8?q?[https://nvbugs/6323074][fix]=20fix=20fla?= =?UTF-8?q?ky=20hang=20issue=20for=20disagg=20gen-onl=E2=80=A6=20(#16172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bo Deng From 29bda273bf529efb9f0819b3fed430d509c69522 Mon Sep 17 00:00:00 2001 From: TensorRT LLM AI Agent <296075020+trtllm-agent@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:55:00 +0800 Subject: [PATCH 09/21] [None][test] Waive 9 failed cases for main in QA CI (#16271) Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> --- tests/integration/test_lists/waives.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index 6e4ddea6a57a..f07884c0ffe7 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -265,6 +265,15 @@ full:GH200/examples/test_nemotron.py::test_llm_nemotron_3_8b_1gpu[bfloat16-fp8] full:GH200/examples/test_qwen2audio.py::test_llm_qwen2audio_single_gpu[qwen2_audio_7b_instruct] SKIP (arm is not supported) full:H100/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype[mtp_nextn=2-overlap_scheduler=False] SKIP (https://nvbugs/6313072) full:H100/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype[mtp_nextn=2-overlap_scheduler=True] SKIP (https://nvbugs/6313072) +full:H100/accuracy/test_disaggregated_serving.py::TestLlama3_1_8BInstruct::test_guided_decoding_with_eagle3[llguidance-eagle3_one_model=False] SKIP (https://nvbugs/6422334) +full:H100/accuracy/test_disaggregated_serving.py::TestLlama3_1_8BInstruct::test_guided_decoding_with_eagle3[xgrammar-eagle3_one_model=False] SKIP (https://nvbugs/6422334) +full:H100/accuracy/test_llm_api_pytorch.py::TestGPTOSS::test_eagle3_vswa_reuse_4gpus[v2_kv_cache-one_model] SKIP (https://nvbugs/6442074) +full:H100/accuracy/test_llm_api_pytorch.py::TestQwen3_5_35B_A3B::test_bf16[tp1-CUTLASS] SKIP (https://nvbugs/6273850) +full:H100/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[forced_chunked_prefill] SKIP (https://nvbugs/6422318) +full:H100/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[full_budget] SKIP (https://nvbugs/6422318) +full:H100/accuracy/test_llm_api_pytorch_multimodal.py::TestQwen3_5_27B_VL::test_auto_dtype SKIP (https://nvbugs/6442075) +full:H100/accuracy/test_llm_api_pytorch_multimodal.py::TestQwen3_5_35B_A3B_VL::test_auto_dtype SKIP (https://nvbugs/6442073) +full:H100/disaggregated/test_disaggregated.py::test_disaggregated_deepseek_v3_lite_bf16_tllm_gen_helix[DeepSeek-V3-Lite-bf16-short_prompt] SKIP (https://nvbugs/6414762) full:H100/disaggregated/test_disaggregated.py::test_disaggregated_logprobs_serving[llama-3.1-8b-instruct] SKIP (https://nvbugs/6275959) full:H100/disaggregated/test_disaggregated.py::test_disaggregated_overlap_gen_first[ctx_pp4-TinyLlama-1.1B-Chat-v1.0] SKIP (https://nvbugs/6344107) full:H100/disaggregated/test_disaggregated.py::test_disaggregated_stress_test[input8k-output1k-conc512-qwen3_32b_fp8_stress] SKIP (https://nvbugs/6312828) From 9a2f5389e7196576488b5b186fe054f5923e17b2 Mon Sep 17 00:00:00 2001 From: TensorRT LLM <90828364+tensorrt-cicd@users.noreply.github.com> Date: Mon, 13 Jul 2026 03:06:10 +0000 Subject: [PATCH 10/21] [None][infra] Check in most recent lock file from nightly pipeline Signed-off-by: TensorRT LLM <90828364+tensorrt-cicd@users.noreply.github.com> --- security_scanning/examples/apps/poetry.lock | 6 +- .../examples/auto_deploy/poetry.lock | 12 +- .../llm-eval/lm-eval-harness/poetry.lock | 6 +- .../models/contrib/chatglm-6b/poetry.lock | 137 ++++++------ .../models/contrib/chatglm-6b/pyproject.toml | 2 +- .../models/contrib/chatglm2-6b/poetry.lock | 137 ++++++------ .../models/contrib/chatglm2-6b/pyproject.toml | 2 +- .../contrib/chatglm3-6b-32k/poetry.lock | 137 ++++++------ .../contrib/chatglm3-6b-32k/pyproject.toml | 2 +- .../models/contrib/hyperclovax/poetry.lock | 6 +- .../models/contrib/internlm/poetry.lock | 135 ++++++------ .../examples/models/contrib/jais/poetry.lock | 135 ++++++------ .../models/contrib/skywork/poetry.lock | 135 ++++++------ .../examples/models/contrib/smaug/poetry.lock | 135 ++++++------ .../examples/models/core/nemotron/poetry.lock | 6 +- .../models/core/qwen2audio/poetry.lock | 135 ++++++------ .../examples/models/core/qwenvl/poetry.lock | 135 ++++++------ security_scanning/examples/ngram/poetry.lock | 6 +- .../examples/quantization/poetry.lock | 6 +- security_scanning/examples/serve/poetry.lock | 135 ++++++------ .../examples/trtllm-eval/poetry.lock | 6 +- security_scanning/metadata.json | 4 +- security_scanning/poetry.lock | 200 +++++++++++------- security_scanning/pyproject.toml | 1 + security_scanning/triton_backend/poetry.lock | 6 +- 25 files changed, 807 insertions(+), 820 deletions(-) diff --git a/security_scanning/examples/apps/poetry.lock b/security_scanning/examples/apps/poetry.lock index 1620c24f251a..cbf25147aac4 100644 --- a/security_scanning/examples/apps/poetry.lock +++ b/security_scanning/examples/apps/poetry.lock @@ -14,14 +14,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/auto_deploy/poetry.lock b/security_scanning/examples/auto_deploy/poetry.lock index b7b499eedcd0..7e304e863bfb 100644 --- a/security_scanning/examples/auto_deploy/poetry.lock +++ b/security_scanning/examples/auto_deploy/poetry.lock @@ -281,14 +281,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -301,14 +301,14 @@ trio = ["trio (>=0.32.0)"] [[package]] name = "asttokens" -version = "3.0.1" +version = "3.0.2" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a"}, - {file = "asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7"}, + {file = "asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933"}, + {file = "asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2"}, ] [package.extras] diff --git a/security_scanning/examples/llm-eval/lm-eval-harness/poetry.lock b/security_scanning/examples/llm-eval/lm-eval-harness/poetry.lock index 704f0196a6ea..632ee222e37d 100644 --- a/security_scanning/examples/llm-eval/lm-eval-harness/poetry.lock +++ b/security_scanning/examples/llm-eval/lm-eval-harness/poetry.lock @@ -230,14 +230,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/models/contrib/chatglm-6b/poetry.lock b/security_scanning/examples/models/contrib/chatglm-6b/poetry.lock index fe14480551fc..0871b91e2b22 100644 --- a/security_scanning/examples/models/contrib/chatglm-6b/poetry.lock +++ b/security_scanning/examples/models/contrib/chatglm-6b/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1945,82 +1945,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" @@ -2491,4 +2484,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "6666f1ecad6cd224011f5accf95bcb559089287dda8c5a39f6860dd2410b628c" +content-hash = "70a344e7439e1e5bb7c72d8e7a0c914a17731571bd09853de3da5a8b5d14251b" diff --git a/security_scanning/examples/models/contrib/chatglm-6b/pyproject.toml b/security_scanning/examples/models/contrib/chatglm-6b/pyproject.toml index 25e510dcf974..6350395dec0e 100644 --- a/security_scanning/examples/models/contrib/chatglm-6b/pyproject.toml +++ b/security_scanning/examples/models/contrib/chatglm-6b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "evaluate (>=0.4.6,<0.5.0)", "protobuf (>=7.35.1,<8.0.0)", "rouge-score (>=0.1.2,<0.2.0)", - "sentencepiece (>=0.2.1,<0.3.0)", + "sentencepiece (>=0.2.2,<0.3.0)", "tiktoken (>=0.13.0,<0.14.0)" ] diff --git a/security_scanning/examples/models/contrib/chatglm2-6b/poetry.lock b/security_scanning/examples/models/contrib/chatglm2-6b/poetry.lock index fe14480551fc..0871b91e2b22 100644 --- a/security_scanning/examples/models/contrib/chatglm2-6b/poetry.lock +++ b/security_scanning/examples/models/contrib/chatglm2-6b/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1945,82 +1945,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" @@ -2491,4 +2484,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "6666f1ecad6cd224011f5accf95bcb559089287dda8c5a39f6860dd2410b628c" +content-hash = "70a344e7439e1e5bb7c72d8e7a0c914a17731571bd09853de3da5a8b5d14251b" diff --git a/security_scanning/examples/models/contrib/chatglm2-6b/pyproject.toml b/security_scanning/examples/models/contrib/chatglm2-6b/pyproject.toml index 25e510dcf974..6350395dec0e 100644 --- a/security_scanning/examples/models/contrib/chatglm2-6b/pyproject.toml +++ b/security_scanning/examples/models/contrib/chatglm2-6b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "evaluate (>=0.4.6,<0.5.0)", "protobuf (>=7.35.1,<8.0.0)", "rouge-score (>=0.1.2,<0.2.0)", - "sentencepiece (>=0.2.1,<0.3.0)", + "sentencepiece (>=0.2.2,<0.3.0)", "tiktoken (>=0.13.0,<0.14.0)" ] diff --git a/security_scanning/examples/models/contrib/chatglm3-6b-32k/poetry.lock b/security_scanning/examples/models/contrib/chatglm3-6b-32k/poetry.lock index fe14480551fc..0871b91e2b22 100644 --- a/security_scanning/examples/models/contrib/chatglm3-6b-32k/poetry.lock +++ b/security_scanning/examples/models/contrib/chatglm3-6b-32k/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1945,82 +1945,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" @@ -2491,4 +2484,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "6666f1ecad6cd224011f5accf95bcb559089287dda8c5a39f6860dd2410b628c" +content-hash = "70a344e7439e1e5bb7c72d8e7a0c914a17731571bd09853de3da5a8b5d14251b" diff --git a/security_scanning/examples/models/contrib/chatglm3-6b-32k/pyproject.toml b/security_scanning/examples/models/contrib/chatglm3-6b-32k/pyproject.toml index 25e510dcf974..6350395dec0e 100644 --- a/security_scanning/examples/models/contrib/chatglm3-6b-32k/pyproject.toml +++ b/security_scanning/examples/models/contrib/chatglm3-6b-32k/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "evaluate (>=0.4.6,<0.5.0)", "protobuf (>=7.35.1,<8.0.0)", "rouge-score (>=0.1.2,<0.2.0)", - "sentencepiece (>=0.2.1,<0.3.0)", + "sentencepiece (>=0.2.2,<0.3.0)", "tiktoken (>=0.13.0,<0.14.0)" ] diff --git a/security_scanning/examples/models/contrib/hyperclovax/poetry.lock b/security_scanning/examples/models/contrib/hyperclovax/poetry.lock index 83c2cc6fb6f7..ba30259eb5f4 100644 --- a/security_scanning/examples/models/contrib/hyperclovax/poetry.lock +++ b/security_scanning/examples/models/contrib/hyperclovax/poetry.lock @@ -2,14 +2,14 @@ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/models/contrib/internlm/poetry.lock b/security_scanning/examples/models/contrib/internlm/poetry.lock index 7ed18cc13cf2..66374311f86f 100644 --- a/security_scanning/examples/models/contrib/internlm/poetry.lock +++ b/security_scanning/examples/models/contrib/internlm/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1927,82 +1927,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" diff --git a/security_scanning/examples/models/contrib/jais/poetry.lock b/security_scanning/examples/models/contrib/jais/poetry.lock index 6e85c854ac10..0f548f4c56af 100644 --- a/security_scanning/examples/models/contrib/jais/poetry.lock +++ b/security_scanning/examples/models/contrib/jais/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1927,82 +1927,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" diff --git a/security_scanning/examples/models/contrib/skywork/poetry.lock b/security_scanning/examples/models/contrib/skywork/poetry.lock index 6e85c854ac10..0f548f4c56af 100644 --- a/security_scanning/examples/models/contrib/skywork/poetry.lock +++ b/security_scanning/examples/models/contrib/skywork/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1927,82 +1927,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" diff --git a/security_scanning/examples/models/contrib/smaug/poetry.lock b/security_scanning/examples/models/contrib/smaug/poetry.lock index 6e85c854ac10..0f548f4c56af 100644 --- a/security_scanning/examples/models/contrib/smaug/poetry.lock +++ b/security_scanning/examples/models/contrib/smaug/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -1927,82 +1927,75 @@ six = ">=1.14.0" [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "six" diff --git a/security_scanning/examples/models/core/nemotron/poetry.lock b/security_scanning/examples/models/core/nemotron/poetry.lock index edc59d10c0bb..6b9f6e06bcde 100644 --- a/security_scanning/examples/models/core/nemotron/poetry.lock +++ b/security_scanning/examples/models/core/nemotron/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/models/core/qwen2audio/poetry.lock b/security_scanning/examples/models/core/qwen2audio/poetry.lock index a9261ddea9e3..ca13c5686007 100644 --- a/security_scanning/examples/models/core/qwen2audio/poetry.lock +++ b/security_scanning/examples/models/core/qwen2audio/poetry.lock @@ -197,14 +197,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -2063,82 +2063,75 @@ torch = ["safetensors[numpy]", "torch (>=2.4)"] [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "shellingham" diff --git a/security_scanning/examples/models/core/qwenvl/poetry.lock b/security_scanning/examples/models/core/qwenvl/poetry.lock index 5c1229cdf7a9..e639fd0c6925 100644 --- a/security_scanning/examples/models/core/qwenvl/poetry.lock +++ b/security_scanning/examples/models/core/qwenvl/poetry.lock @@ -197,14 +197,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -2720,82 +2720,75 @@ torch = ["safetensors[numpy]", "torch (>=2.4)"] [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "setuptools" diff --git a/security_scanning/examples/ngram/poetry.lock b/security_scanning/examples/ngram/poetry.lock index 01fb15bf8595..53e70e9e8011 100644 --- a/security_scanning/examples/ngram/poetry.lock +++ b/security_scanning/examples/ngram/poetry.lock @@ -185,14 +185,14 @@ typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/quantization/poetry.lock b/security_scanning/examples/quantization/poetry.lock index 2a0450eab17c..8a057abb99d1 100644 --- a/security_scanning/examples/quantization/poetry.lock +++ b/security_scanning/examples/quantization/poetry.lock @@ -197,14 +197,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/examples/serve/poetry.lock b/security_scanning/examples/serve/poetry.lock index 25b530dfbbea..e500b96552b3 100644 --- a/security_scanning/examples/serve/poetry.lock +++ b/security_scanning/examples/serve/poetry.lock @@ -298,14 +298,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -4598,82 +4598,75 @@ stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "setproctitle" diff --git a/security_scanning/examples/trtllm-eval/poetry.lock b/security_scanning/examples/trtllm-eval/poetry.lock index f5231f01dd49..30ab9deab026 100644 --- a/security_scanning/examples/trtllm-eval/poetry.lock +++ b/security_scanning/examples/trtllm-eval/poetry.lock @@ -230,14 +230,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] diff --git a/security_scanning/metadata.json b/security_scanning/metadata.json index e56d0dd25967..af546b51479f 100644 --- a/security_scanning/metadata.json +++ b/security_scanning/metadata.json @@ -1,4 +1,4 @@ { - "commit_hash": "33a45450102d42bca2feb495246d59e3df40d578", - "timestamp": "2026-07-12T02:48:40Z" + "commit_hash": "770ebc5db5c9c1486b8792928fdebf35de73eff3", + "timestamp": "2026-07-13T02:48:18Z" } diff --git a/security_scanning/poetry.lock b/security_scanning/poetry.lock index 30639efc780e..f61067a96476 100644 --- a/security_scanning/poetry.lock +++ b/security_scanning/poetry.lock @@ -254,14 +254,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -2801,6 +2801,69 @@ files = [ {file = "msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647"}, ] +[[package]] +name = "msgspec" +version = "0.21.1" +description = "A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "msgspec-0.21.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72d9cd03241b8b2edb2e12dcc66c500fa480d8cbd71a8bac105809d468882064"}, + {file = "msgspec-0.21.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed2ab278200e743a1d2610a4e0c8fc74f6cecb8548544cdec43f927bd9265238"}, + {file = "msgspec-0.21.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd677e3001fdfed9186de72eab434da2976303cd5eb9550921d3d0c3e3e168ce"}, + {file = "msgspec-0.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f667b90b37fad734a91671abd68e0d7f4d066862771b87e91c53996dcb7a9027"}, + {file = "msgspec-0.21.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:49880fd20fdbcfe1b793f07dd83f12572bab679c9800352c8b2240289aa46a06"}, + {file = "msgspec-0.21.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae0162e22849a5e91eaad907766525107523b0daea3df267a9fcb5ba4e0936ae"}, + {file = "msgspec-0.21.1-cp310-cp310-win_amd64.whl", hash = "sha256:f041a2279f31e3a53319005e4d60ba77c085cfcbe394cdc7ce803c2d01fe9449"}, + {file = "msgspec-0.21.1-cp310-cp310-win_arm64.whl", hash = "sha256:1bf17cbd7b28a5dffc7e764c654eed8ccde5e0f1de7970628608304640d4ce4e"}, + {file = "msgspec-0.21.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b504b6e7f7a22a24b27232b73034421692147865162daaec9f3bf62439007c87"}, + {file = "msgspec-0.21.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4692b7c1609155708c4418f88e92f63c13fdf08aa095c84bae82bad75b53389b"}, + {file = "msgspec-0.21.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3124010b3815451494c85ff345e693cb9fe5889cfcbbef39ed8622e0e72319c"}, + {file = "msgspec-0.21.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6badc03b9725352219cca017bfe71c61f2fbd0fb5982b410ac17c97c213deb30"}, + {file = "msgspec-0.21.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5d2d4116ebe3035a78d9ec76e99a9d64e5fa6d44fe61a9c5de7fd1acf54bcc69"}, + {file = "msgspec-0.21.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0d1009f6715f5bff3b54d4ff5c7428ad96197e0534e1645b8e9b955890c84664"}, + {file = "msgspec-0.21.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6faffe5bb644ec884052679af4dfd776d4b5ca90e4a7ec7e7e319e4e6b93a6e"}, + {file = "msgspec-0.21.1-cp311-cp311-win_arm64.whl", hash = "sha256:ee9e3f11fa94603f7d673bf795cfa31b549c4a2c723bc39b45beb1e7f5a3fb99"}, + {file = "msgspec-0.21.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4248cf0b6129b7d230eacd493c17cc2d4f3989f3bb7f633a928a85b7dcfa251"}, + {file = "msgspec-0.21.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5102c7e9b3acff82178449b85006d96310e690291bb1ea0142f1b24bcb8aabcb"}, + {file = "msgspec-0.21.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:846758412e9518252b2ac9bffd6f0e54d9ff614f5f9488df7749f81ff5c80920"}, + {file = "msgspec-0.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21995e74b5c598c2e004110ad66ec7f1b8c20bf2bcf3b2de8fd9a3094422d3ff"}, + {file = "msgspec-0.21.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6129f0cca52992e898fd5344187f7c8127b63d810b2fd73e36fca73b4c6475ee"}, + {file = "msgspec-0.21.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ef3ec2296248d1f8b9231acb051b6d471dfde8f21819e86c9adaaa9f42918521"}, + {file = "msgspec-0.21.1-cp312-cp312-win_amd64.whl", hash = "sha256:d4ab834a054c6f0cbeef6df9e7e1b33d5f1bc7b86dea1d2fd7cad003873e783d"}, + {file = "msgspec-0.21.1-cp312-cp312-win_arm64.whl", hash = "sha256:628aaa35c74950a8c59da330d7e98917e1c7188f983745782027748ee4ca573e"}, + {file = "msgspec-0.21.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:764173717a01743f007e9f74520ed281f24672c604514f7d76c1c3a10e8edb66"}, + {file = "msgspec-0.21.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:344c7cd0eaed1fb81d7959f99100ef71ec9b536881a376f11b9a6c4803365697"}, + {file = "msgspec-0.21.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48943e278b3854c2f89f955ddc6f9f430d3f0784b16e47d10604ee0463cd21f5"}, + {file = "msgspec-0.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9aa659ebb0101b1cbc31461212b87e341d961f0ab0772aaf068a99e001ec4aa"}, + {file = "msgspec-0.21.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7b27d1a8ead2b6f5b0c4f2d07b8be1ccfcc041c8a0e704781edebe3ae13c484"}, + {file = "msgspec-0.21.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:38fe93e86b61328fe544cb7fd871fad5a27c8734bfda90f65e5dbe288ae50f61"}, + {file = "msgspec-0.21.1-cp313-cp313-win_amd64.whl", hash = "sha256:8bc666331c35fcce05a7cd2d6221adbe0f6058f8e750711413d22793c080ac6a"}, + {file = "msgspec-0.21.1-cp313-cp313-win_arm64.whl", hash = "sha256:42bb1241e0750c1a4346f2aa84db26c5ffd99a4eb3a954927d9f149ff2f42898"}, + {file = "msgspec-0.21.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fab48eb45fdbfbdb2c0edfec00ffc53b6b6085beefc6b50b61e01659f9f8757f"}, + {file = "msgspec-0.21.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3cb779ea0c35bc807ff941d415875c1f69ca0be91a2e907ab99a171811d86a9a"}, + {file = "msgspec-0.21.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68604db36b3b4dd9bf160e436e12798a4738848144cea1aca1cb984011eb160f"}, + {file = "msgspec-0.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d6b9dc50948eaf65df54d2fd0ff66e6d8c32f116037209ee861810eb9b676cb"}, + {file = "msgspec-0.21.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:52c5e21930942302394429c5a582ce7e6b62c7f983b3760834c2ce107e0dd6df"}, + {file = "msgspec-0.21.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:abbb39d65681fa24ed394e01af3d59d869068324f900c61d06062b7fb9980f2f"}, + {file = "msgspec-0.21.1-cp314-cp314-win_amd64.whl", hash = "sha256:5666b1b560b97b6ec2eb3fca8a502298ebac56e13bbca1f88523538ce83d01ea"}, + {file = "msgspec-0.21.1-cp314-cp314-win_arm64.whl", hash = "sha256:d8b8578e4c83b14ceea4cef0d0b747e31d9330fe4b03b2b2ad4063866a178f93"}, + {file = "msgspec-0.21.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:15f523d51c00ebad412213bfe9f06f0a50ec2b93e0c19e824a2d267cabb48ea2"}, + {file = "msgspec-0.21.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e47390360583ba3d5c6cb44cf0a9f61b0a06a899d3c2c00627cedebb2e2884b"}, + {file = "msgspec-0.21.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f60800e6299b798142dc40b0644da77ceac5ea0568be58228417eae14135c847"}, + {file = "msgspec-0.21.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f8e9dfcd98419cf7568808470c4317a3fb30bef0e3715b568730a2b272a20d7"}, + {file = "msgspec-0.21.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:92d89dfad13bd1ea640dc3e37e724ed380da1030b272bdf5ecafb983c3ad7c75"}, + {file = "msgspec-0.21.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0d03867786e5d7ba25d666df4b11320c27170f4aeafcb8e3a8b0a50a4fb742ca"}, + {file = "msgspec-0.21.1-cp314-cp314t-win_amd64.whl", hash = "sha256:740fbf1c9d59992ca3537d6fbe9ebbf9eaf726a65fbf31448e0ecbc710697a63"}, + {file = "msgspec-0.21.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0d2cc73df6058d811a126ac3a8ad63a4dfa210c82f9cf5a004802eaf4712de90"}, + {file = "msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c"}, +] + +[package.extras] +toml = ["tomli ; python_version < \"3.11\"", "tomli_w"] +yaml = ["pyyaml"] + [[package]] name = "multidict" version = "6.7.1" @@ -6010,82 +6073,75 @@ test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6 [[package]] name = "sentencepiece" -version = "0.2.1" +version = "0.2.2" description = "Unsupervised text tokenizer and detokenizer." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e10fa50bdbaa5e2445dbd387979980d391760faf0ec99a09bd7780ff37eaec44"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f27ae6deea72efdb6f361750c92f6c21fd0ad087445082770cc34015213c526"}, - {file = "sentencepiece-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60937c959e6f44159fdd9f56fbdd302501f96114a5ba436829496d5f32d8de3f"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8b1d91545578852f128650b8cce4ec20f93d39b378ff554ebe66290f2dabb92"}, - {file = "sentencepiece-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27e38eee653abc3d387862e67bc5c8b6f428cd604e688b85d29170b7e725c26c"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win32.whl", hash = "sha256:251874d720ac7f28024a168501f3c7bb15d1802245f6e66de565f18bbb9b5eaa"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e52144670738b4b477fade6c2a9b6af71a8d0094514c9853ac9f6fc1fcfabae7"}, - {file = "sentencepiece-0.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:9076430ac25dfa7147d9d05751dbc66a04bc1aaac371c07f84952979ea59f0d0"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6356d0986b8b8dc351b943150fcd81a1c6e6e4d439772e8584c64230e58ca987"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f8ba89a3acb3dc1ae90f65ec1894b0b9596fdb98ab003ff38e058f898b39bc7"}, - {file = "sentencepiece-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02593eca45440ef39247cee8c47322a34bdcc1d8ae83ad28ba5a899a2cf8d79a"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a0d15781a171d188b661ae4bde1d998c303f6bd8621498c50c671bd45a4798e"}, - {file = "sentencepiece-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f5a3e0d9f445ed9d66c0fec47d4b23d12cfc858b407a03c194c1b26c2ac2a63"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win32.whl", hash = "sha256:6d297a1748d429ba8534eebe5535448d78b8acc32d00a29b49acf28102eeb094"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:82d9ead6591015f009cb1be1cb1c015d5e6f04046dbb8c9588b931e869a29728"}, - {file = "sentencepiece-0.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:39f8651bd10974eafb9834ce30d9bcf5b73e1fc798a7f7d2528f9820ca86e119"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:57cae326c8727de58c85977b175af132a7138d84c764635d7e71bbee7e774133"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56dd39a3c4d6493db3cdca7e8cc68c6b633f0d4195495cbadfcf5af8a22d05a6"}, - {file = "sentencepiece-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9381351182ff9888cc80e41c632e7e274b106f450de33d67a9e8f6043da6f76"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167"}, - {file = "sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win32.whl", hash = "sha256:a483fd29a34c3e34c39ac5556b0a90942bec253d260235729e50976f5dba1068"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4cdc7c36234fda305e85c32949c5211faaf8dd886096c7cea289ddc12a2d02de"}, - {file = "sentencepiece-0.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:daeb5e9e9fcad012324807856113708614d534f596d5008638eb9b40112cd9e4"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dcd8161eee7b41aae57ded06272905dbd680a0a04b91edd0f64790c796b2f706"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c6c8f42949f419ff8c7e9960dbadcfbc982d7b5efc2f6748210d3dd53a7de062"}, - {file = "sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:097f3394e99456e9e4efba1737c3749d7e23563dd1588ce71a3d007f25475fff"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820"}, - {file = "sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win32.whl", hash = "sha256:92b3816aa2339355fda2c8c4e021a5de92180b00aaccaf5e2808972e77a4b22f"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:10ed3dab2044c47f7a2e7b4969b0c430420cdd45735d78c8f853191fa0e3148b"}, - {file = "sentencepiece-0.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac650534e2251083c5f75dde4ff28896ce7c8904133dc8fef42780f4d5588fcd"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8dd4b477a7b069648d19363aad0cab9bad2f4e83b2d179be668efa672500dc94"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0c0f672da370cc490e4c59d89e12289778310a0e71d176c541e4834759e1ae07"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad8493bea8432dae8d6830365352350f3b4144415a1d09c4c8cb8d30cf3b6c3c"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win32.whl", hash = "sha256:89a3ea015517c42c0341d0d962f3e6aaf2cf10d71b1932d475c44ba48d00aa2b"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:33f068c9382dc2e7c228eedfd8163b52baa86bb92f50d0488bf2b7da7032e484"}, - {file = "sentencepiece-0.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:b3616ad246f360e52c85781e47682d31abfb6554c779e42b65333d4b5f44ecc0"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5d0350b686c320068702116276cfb26c066dc7e65cfef173980b11bb4d606719"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c7f54a31cde6fa5cb030370566f68152a742f433f8d2be458463d06c208aef33"}, - {file = "sentencepiece-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c83b85ab2d6576607f31df77ff86f28182be4a8de6d175d2c33ca609925f5da1"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1855f57db07b51fb51ed6c9c452f570624d2b169b36f0f79ef71a6e6c618cd8b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01e6912125cb45d3792f530a4d38f8e21bf884d6b4d4ade1b2de5cf7a8d2a52b"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win32.whl", hash = "sha256:c415c9de1447e0a74ae3fdb2e52f967cb544113a3a5ce3a194df185cbc1f962f"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:881b2e44b14fc19feade3cbed314be37de639fc415375cefaa5bc81a4be137fd"}, - {file = "sentencepiece-0.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:2005242a16d2dc3ac5fe18aa7667549134d37854823df4c4db244752453b78a8"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a19adcec27c524cb7069a1c741060add95f942d1cbf7ad0d104dffa0a7d28a2b"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e37e4b4c4a11662b5db521def4e44d4d30ae69a1743241412a93ae40fdcab4bb"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:477c81505db072b3ab627e7eab972ea1025331bd3a92bacbf798df2b75ea86ec"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:010f025a544ef770bb395091d57cb94deb9652d8972e0d09f71d85d5a0816c8c"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:733e59ff1794d26db706cd41fc2d7ca5f6c64a820709cb801dc0ea31780d64ab"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win32.whl", hash = "sha256:d3233770f78e637dc8b1fda2cd7c3b99ec77e7505041934188a4e7fe751de3b0"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e4366c97b68218fd30ea72d70c525e6e78a6c0a88650f57ac4c43c63b234a9d"}, - {file = "sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:afefe50a0cdcb4f2fd9733cb52001a2c164181ee2d82c32d38f5b1b326a8528c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:891ade6503dd93d418c03993f7d6a8aa20260c422cefff5096b9068185e67642"}, - {file = "sentencepiece-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:814978ac05130dd5812b4b03215c766bc6abaef13e7bd72bc534e4d1e12e9a4c"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:017f97b274d4b0baa84b2dc743bf4517be81156f413bb24f12aacacde378e5ab"}, - {file = "sentencepiece-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c4ebcb3c6ab1496ab1c37c79ef7bb563b8726f29548c30773b7a4cb152df1a"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win32.whl", hash = "sha256:caa4e560c72c151da80036aecc2159e51a7fd8ae9efebefd96860460ce6bd025"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:2af5a1fb05013332ad94343b8b5f3973e006a2dde2dfba55a819549e054e2f0f"}, - {file = "sentencepiece-0.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:3d165fbb9bf8fba35f1946ba2617c3f9995679f07438325f07c026d53f33e746"}, - {file = "sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc7b0b1da20f856bfac5f84b2673fe534b167e41980b27442ca8f78c2b7eb77e"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b2db2056c97224e122054fd794543cde5d24b7cae28424f6e3eb79bbe08e42b"}, + {file = "sentencepiece-0.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f1f61592e7cabd45d49ce8cc0ef42ca655c091e037153754fb3fa59725b5914"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c798f0b327bac10dc95cdac77b9a197ab2bd7dd1e60ebd7586a12d918d4be711"}, + {file = "sentencepiece-0.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44284adc6fbe9d5bdd480541431a3d93f674fa44736714d3ad4bcee8283ace7d"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:1120e0791540615e650b2e9bea835bf38a7362455d8ab62dee7968219c2d79a0"}, + {file = "sentencepiece-0.2.2-cp310-cp310-win_arm64.whl", hash = "sha256:524e2a85c028a0d2f9935191fa751e5ef9d9bcc39616f70ab14b28d0369c9936"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:69e9dc8078e128286ed3b975e37c837ba96e215a50c3ef9f3f8b7ab9e5a832a0"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6dd76f3e5c8b2eb8a3a3efee787bbf5b9a66e52a048fe09cab85eca33fec6790"}, + {file = "sentencepiece-0.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:443ac618c7a2a1377cf5c82581fbb849591d14e656d5e5a3e4682d4e36a34e4e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2aae42960392d6dcb9a72d8e1e65a97294c965071b43c7b3429a42f350250e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1416b92f2f010333786fe6306ed2631121d5ea492219b0841e967b6765e64107"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:70d4ca6f4d06df7f0ccab6fe4f49c8a712c8c8b6847b4f0af9a0e1dbb0e0337e"}, + {file = "sentencepiece-0.2.2-cp311-cp311-win_arm64.whl", hash = "sha256:252908153eeec06c3ca3a32077e64a49d572e3d89881475b4e0f02d99d9fcc7c"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1edb10e520e4bddf74d85b0f5ae74cc2d60c2b448885080bfb618bc2b3a49f6b"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7c06c751c19d923435a54bff4f7e66e728fad160e8da28254f133abc9725820"}, + {file = "sentencepiece-0.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38111ed1f79268f399c505028023d5eaaf0ab4e5eafceb709468b0d3323e7838"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbce24284f51f71d10a42b7b9c964dcb9048b28f1c8e5db40bcbcb6f428cba6a"}, + {file = "sentencepiece-0.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8a168b040bc61681293f79a949b5d911c8e25086f4260285b8d97ab5f1195da"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6e7bf684dc12145bfa685d3060beaea55139134ba848289bee514ed42e7383"}, + {file = "sentencepiece-0.2.2-cp312-cp312-win_arm64.whl", hash = "sha256:76ff5814db72e7462dece042d7593cdf102b8ec82c2b1cc201a2add34ee3050d"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77c3ce990b23441e5ecfa5bce181fd6f408b564aeb6d7e1d1e7de9c5612501c8"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fd523c4992041faa5c2b3cde62253d11a96c30d73a34afe48a486e8e2254cd1c"}, + {file = "sentencepiece-0.2.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:201a8e0f55501a76e08dbf2c54bc45f4642b379271e89c667d517bfbc2191f2a"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8eed98514bffe5ecac37f493f91869c351fbb05629328bfdbc08502c6c094dc0"}, + {file = "sentencepiece-0.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64b656f025355cf8c51abe9fbe3848540756c6d7ca5e6791b1afa664bc24c7cb"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:74f0ee601047c0c12a783088b51be4e6214a62ecd9e02278c477433cd16e0ed9"}, + {file = "sentencepiece-0.2.2-cp313-cp313-win_arm64.whl", hash = "sha256:b23fe17779834d3c27aaf2edac9486d04cca1a7deb8f5facda35150ac6263a91"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:72b7825b331b1b7e7c45be2e674b3e3c65af608fa376bad2d851b20aaf0cdc78"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d795c4ac689a57f9d4ba2288126ec7901d389ad5827d2f8b8533c883974fe563"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ab3f1ae98970b5590e2209341522718900ba19bcc2c207ffaa6bd417ad960c5"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec27c152a1f1b24bc9168b55a5880f3c16e2334e697da6f55a1046a22405a3d"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d6588712101ccfcae9b03692be3aaae1514c2078666d7b05f15ba3a702e41b"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:89625fb43765cccaa1443b9adb61f283e5fe4cb1536728205d06bada730caa53"}, + {file = "sentencepiece-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:4f0603267cd15b92b68c2c0e852a441507614b70dc7773659baa6b8c214a91fd"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c62bd361cec1f5b556eb8210264ecfff37486cd990c3386cc00310f26c54090a"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:46ba07b543add034de0ff47ac5f907e9a06682f91d85121a972764628933be6b"}, + {file = "sentencepiece-0.2.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79bac5a251f23a7341e28fda9ce0d5319edf45328239ce037c0682936f137906"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1402d8ee36f0d851cea8eee4dbb85fea14643b7503cf4d00d102eec0fe3ca719"}, + {file = "sentencepiece-0.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d44b20234905ff022b7d535f79d1f823ad7670c9851cc4f03cdc34787cdb3ab"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_amd64.whl", hash = "sha256:63250cfab8b80a1ef82a614eb2b3cadfec2c405f870cedc139d08e2f063eb708"}, + {file = "sentencepiece-0.2.2-cp314-cp314-win_arm64.whl", hash = "sha256:65d84ec36888de4a848eee5f910e67fbc79b064685ef1e10a502e14520ead9c9"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d254c98ca6387655400b3959c33c83efd807f5edeb608e3aca45800ceaa77151"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3fd9ce2ab4460c713cfdeb4aca693ca6732a11538e05fb332d5af42e3d7fde25"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7fc14c1585139fa6b68775e616a6b90cf622ebf219f9558c0aeaf5d253ee6c9b"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df88b0c34f2fa909d322f7b06b1398e1e81af4b2f42a7b8e3556f928b25d1811"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f5851441ab1ef8634963a5100b733a8bbeefe623e0c5c005b1f1f3880e574cf"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:046b15ea22d8042e2e173561d464ec3b64a9c2081324df70ebce7bf7ebb3e497"}, + {file = "sentencepiece-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fa9f5ef0e2a82233dd0b8b32ea3f5710e0c44afbc07ed3620219f32601e56090"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c84ddef8d3084a8af37208acd365b08092ca089080f1a71fbfdd911adda9b3"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c76c9b3324efd79029eeb0fd2ced1964bdbeca7d45e030b46fa3ef3cf74f8032"}, + {file = "sentencepiece-0.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54a83df9260a89c1734256e620fe1f1a6bfedd7547139d4dc1384efac11a3a85"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:741b4b367140e9b5c36b5a14c72179f2c946d991ea9a7c031a2a1ee6ad097b99"}, + {file = "sentencepiece-0.2.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb8da9d9a9b418422c21a07fd19b9d9228692b7a7468a45eec6b11642d3c808b"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:caad9566e2ef0e5640d36032c69b0edc7ac6028277b93d93815898804fac450c"}, + {file = "sentencepiece-0.2.2-cp39-cp39-win_arm64.whl", hash = "sha256:cd810878180a52950e5a61f25ada5248a453bbdbafe474f89514135fbc1f633d"}, + {file = "sentencepiece-0.2.2.tar.gz", hash = "sha256:3d2b5e824b5622038dc7b490897efe05ebbbb9e7350fc142f3ecc8789ef9bdf6"}, ] [package.extras] -test = ["pytest"] -testpaths = ["test"] +numpy = ["numpy"] +protobuf = ["protobuf"] +test = ["numpy", "protobuf", "pytest"] [[package]] name = "setuptools" @@ -7405,4 +7461,4 @@ type = ["pytest-mypy (>=1.0.1) ; platform_python_implementation != \"PyPy\""] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "cd33f0f3c015a9d5e4f0f0ce2930551a992894758de30b93f0ce8b436c51d0c8" +content-hash = "a174d9a387dfc1bff0d82e796d3d0887a7ac50390600b6d7dd77594494fd0cdd" diff --git a/security_scanning/pyproject.toml b/security_scanning/pyproject.toml index 17f7e08a5024..7bb0d1e674c8 100644 --- a/security_scanning/pyproject.toml +++ b/security_scanning/pyproject.toml @@ -38,6 +38,7 @@ dependencies = [ "prometheus-fastapi-instrumentator (>=8.0.2,<9.0.0)", "pydantic (>=2.9.1)", "pydantic-settings[yaml] (>=2.14.2,<3.0.0)", + "msgspec (>=0.21.1,<0.22.0)", "omegaconf (>=2.3.1,<3.0.0)", "pillow (>=12.3.0,<13.0.0)", "optimum (>=2.2.0,<3.0.0)", diff --git a/security_scanning/triton_backend/poetry.lock b/security_scanning/triton_backend/poetry.lock index a2bd72a65905..0dcbd7dcf144 100644 --- a/security_scanning/triton_backend/poetry.lock +++ b/security_scanning/triton_backend/poetry.lock @@ -185,14 +185,14 @@ files = [ [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] From ffe313d5c3b2f542d1b97320f9d663d183798471 Mon Sep 17 00:00:00 2001 From: TensorRT LLM AI Agent <296075020+trtllm-agent@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:09:36 +0800 Subject: [PATCH 11/21] [None][test] Waive 6 failed cases for main in QA CI (#16295) Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> --- tests/integration/test_lists/waives.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index f07884c0ffe7..76dff7065db9 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -210,13 +210,19 @@ full:B200/perf/test_perf.py::test_perf[quant:w4a8_awq] SKIP (https://nvbugs/5161 full:B200/test_e2e.py::test_multi_nodes_eval[Qwen3/Qwen3-235B-A22B-tp16-mmlu] SKIP (https://nvbugs/6424188) full:B200/test_e2e.py::test_multi_nodes_eval[Qwen3/saved_models_Qwen3-235B-A22B_nvfp4_hf-tp16-mmlu] SKIP (https://nvbugs/6424188) full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v1-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) +full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v1-cudagraph:with_padding-pp1tp2cp2] SKIP (https://nvbugs/6410881) full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v2-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v2-cudagraph:with_padding-pp1tp2cp2] SKIP (https://nvbugs/6410881) full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[nccl-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) full:B300/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[nccl-cudagraph:with_padding-pp1tp2cp2] SKIP (https://nvbugs/6410881) full:B300/accuracy/test_llm_api_pytorch.py::TestDeepSeekV32::test_nvfp4_multi_gpus[baseline_pp4_mtp1] SKIP (https://nvbugs/6423845) full:B300/accuracy/test_llm_api_pytorch.py::TestDeepSeekV32::test_nvfp4_multi_gpus[latency] SKIP (https://nvbugs/6423866) +full:B300/accuracy/test_llm_api_pytorch.py::TestDeepSeekV32::test_nvfp4_multi_gpus_chunked_prefill[latency_qsplit] SKIP (https://nvbugs/6423866) full:B300/accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_bfloat16[mtp_nextn=2-attention_dp=True-cuda_graph=True-overlap_scheduler=True-torch_compile=True-enable_chunked_prefill=True-v2_kv_cache=True] SKIP (https://nvbugs/6422343) +full:B300/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_auto_dtype[tp_size=8-ep_size=8] SKIP (https://nvbugs/6445375) +full:B300/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_mxfp8[tp_size=4-ep_size=4] SKIP (https://nvbugs/6424188) +full:B300/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_mxfp8_piecewise_cuda_graph[tp_size=8-ep_size=8] SKIP (https://nvbugs/6442594) +full:B300/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_nvfp4[tp_size=4-ep_size=4] SKIP (https://nvbugs/6445375) full:B300/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[forced_chunked_prefill] SKIP (https://nvbugs/6422318) full:B300/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[full_budget] SKIP (https://nvbugs/6422318) full:B300/accuracy/test_llm_api_pytorch_multimodal.py::TestQwen2_5_VL_7B::test_auto_dtype SKIP (https://nvbugs/6316983) From 75e80082d3b16af137b5b2ea1e830fb64b68aa89 Mon Sep 17 00:00:00 2001 From: TensorRT LLM AI Agent <296075020+trtllm-agent@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:16:45 +0800 Subject: [PATCH 12/21] [None][test] Waive 4 failed cases for main in QA CI (#16296) Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> --- tests/integration/test_lists/waives.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index 76dff7065db9..d8fe6ee28dd2 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -201,7 +201,11 @@ examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_g full:A100/disaggregated/test_workers.py::test_workers_conditional_disaggregation_deepseek_v3_lite_bf16[DeepSeek-V3-Lite-bf16] SKIP (https://nvbugs/6329052) full:A100X/llmapi/test_llm_examples.py::test_llmapi_speculative_decoding_mtp SKIP (https://nvbugs/6287561) full:A100X/unittest/llmapi/test_llm_pytorch.py -m "part0" SKIP (https://nvbugs/6416249) +full:B200/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v1-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) +full:B200/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[nccl-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) full:B200/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_auto_dtype[tp_size=8-ep_size=8] SKIP (https://nvbugs/6384747) +full:B200/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_mxfp8[tp_size=4-ep_size=4] SKIP (https://nvbugs/6424188) +full:B200/accuracy/test_llm_api_pytorch.py::TestMiniMaxM3::test_nvfp4[tp_size=4-ep_size=4] SKIP (https://nvbugs/6424188) full:B200/disaggregated/test_disaggregated.py::test_disaggregated_overlap_gen_first[ctx_pp4-TinyLlama-1.1B-Chat-v1.0] SKIP (https://nvbugs/6344107) full:B200/disaggregated/test_disaggregated.py::test_disaggregated_stress_test[input8k-output1k-conc512-gpt_oss_120b_eagle_trtllm_stress] SKIP (https://nvbugs/6413724) full:B200/perf/test_perf.py::test_perf[quant:int8_sq_per_tensor] SKIP (https://nvbugs/5161074) From 6bd6bb888d876f5f1bd0640e53dd92a886b29b53 Mon Sep 17 00:00:00 2001 From: TensorRT LLM AI Agent <296075020+trtllm-agent@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:23:53 +0800 Subject: [PATCH 13/21] [None][test] Waive 1 failed cases for main in QA CI (#16283) Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> Co-authored-by: Jie Li <76780849+jieli-matrix@users.noreply.github.com> --- tests/integration/test_lists/waives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index d8fe6ee28dd2..fe1d1f9c294d 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -301,6 +301,7 @@ full:H20/accuracy/test_llm_api_pytorch.py::TestGPTOSS::test_eagle3_2gpus[triton- full:H20/accuracy/test_llm_api_pytorch.py::TestGPTOSS::test_w4_chunked_prefill[triton-auto] SKIP (https://nvbugs/6026676) full:H20/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[forced_chunked_prefill] SKIP (https://nvbugs/6422318) full:H20/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[full_budget] SKIP (https://nvbugs/6422318) +full:H20/accuracy/test_llm_api_pytorch_multimodal.py::TestQwen3_5_35B_A3B_VL::test_auto_dtype SKIP (https://nvbugs/6442073) full:H20/disaggregated/test_disaggregated.py::test_disaggregated_deepseek_v3_lite_bf16_tllm_gen_helix[DeepSeek-V3-Lite-bf16-short_prompt] SKIP (https://nvbugs/6414762) full:H20/disaggregated/test_disaggregated.py::test_disaggregated_overlap_gen_first[ctx_pp4-TinyLlama-1.1B-Chat-v1.0] SKIP (https://nvbugs/6344107) full:H20/test_e2e.py::test_qwen_e2e_cpprunner_large_new_tokens[DeepSeek-R1-Distill-Qwen-1.5B-DeepSeek-R1-Distill-Qwen-1.5B] SKIP (https://nvbugs/6414760) From d6e9bf3355ad8b6e2d3500c90509b94084926669 Mon Sep 17 00:00:00 2001 From: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com> Date: Sun, 12 Jul 2026 20:36:54 -0700 Subject: [PATCH 14/21] [https://nvbugs/6438658][fix] Avoid false disagg benchmark KV exhaustion (#16248) Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com> --- tensorrt_llm/_torch/pyexecutor/py_executor.py | 135 ++++++++--- .../_torch/executor/test_benchmark_disagg.py | 228 ++++++++++++++++-- 2 files changed, 303 insertions(+), 60 deletions(-) diff --git a/tensorrt_llm/_torch/pyexecutor/py_executor.py b/tensorrt_llm/_torch/pyexecutor/py_executor.py index f03feff26193..f69041fa7ab8 100644 --- a/tensorrt_llm/_torch/pyexecutor/py_executor.py +++ b/tensorrt_llm/_torch/pyexecutor/py_executor.py @@ -3325,6 +3325,27 @@ def _dist_size(dist, name: str) -> int: except (AttributeError, TypeError, ValueError): return 1 + def _allgather_model_parallel_status( + self, local_status: Tuple[int, bool]) -> List[Tuple[int, bool]]: + """Gather a status over the TP+CP scheduling group. + + Args: + local_status: Caller-defined ``(state, flag)`` pair from this rank. + The fill gate uses ``(ready, synchronous_progress)`` and the + fail-fast path uses ``(all_fetched, terminal_no_fit)``. + + Returns: + One status pair per TP+CP rank in the current pipeline-parallel + slice. A singleton group returns ``[local_status]``. + """ + # CP may coexist with TP; tp_cp_allgather covers both CP-only and + # TP+CP configurations. + if self._dist_size(self.dist, "cp_size") > 1: + return self.dist.tp_cp_allgather(local_status) + if self._dist_size(self.dist, "tp_size") > 1: + return self.dist.tp_allgather(local_status) + return [local_status] + def _sync_disagg_gen_status_entry(self, local_need_check: bool) -> int: if self._dist_size(self.dist, "world_size") > 1: return self.dist.allreduce(int(local_need_check), op=ReduceOp.MAX) @@ -3383,6 +3404,49 @@ def _check_disagg_transfer_progress_when_idle( # blocking on un-finished ones. self._check_disagg_ctx_cache_transfer_status(0) + def _sync_gen_only_benchmark_has_insufficient_kv( + self, scheduler_fitting_disagg_gen_init_requests: List[LlmRequest], + wait_for_disagg_gen_transfer_progress: bool) -> bool: + """Return whether benchmark fill has terminal KV exhaustion. + + Model-parallel ranks can make different local scheduling decisions. + Every rank must therefore vote before entering the collective error- + handling path. One terminal rank prevents the global benchmark fill + gate from opening. The vote is fill-only to avoid adding a collective + to every decode iteration after the gate opens. + + Args: + scheduler_fitting_disagg_gen_init_requests: Generation INIT + requests that fit KV capacity before transfer admission. A + nonempty list means KV capacity exists even if transfer + admission temporarily defers every request. + wait_for_disagg_gen_transfer_progress: Whether active generation + transfers are consuming the admission budget and transfer + progress can unblock a deferred request. + + Returns: + True when every TP+CP rank has fetched its full benchmark queue and + at least one rank has an INIT request that cannot fit KV capacity + and has no transfer progress that can unblock it; otherwise False. + """ + if (self.benchmark_req_queues_size <= 0 or self.is_warmup + or not self._benchmark_fill_phase_active): + return False + + local_has_stuck = any(req.is_disagg_generation_init_state + for req in self.active_requests) + local_all_fetched = (self.num_fetch_requests + >= self.benchmark_req_queues_size) + local_terminal_no_fit = (local_has_stuck and + not scheduler_fitting_disagg_gen_init_requests + and not wait_for_disagg_gen_transfer_progress) + local_status = (local_all_fetched, local_terminal_no_fit) + + all_rank_status = self._allgather_model_parallel_status(local_status) + all_ranks_fetched = all(status[0] for status in all_rank_status) + any_rank_terminal_no_fit = any(status[1] for status in all_rank_status) + return all_ranks_fetched and any_rank_terminal_no_fit + def _prepare_and_schedule_batch(self): self._sync_disagg_transfer_made_progress = False new_requests = self._fetch_and_activate_new_requests() @@ -3467,7 +3531,7 @@ def _prepare_and_schedule_batch(self): continue request.draft_tokens = [0] * self.max_total_draft_tokens - scheduled_batch, fitting_disagg_gen_init_requests, num_fitting_reqs = self._schedule( + scheduled_batch, scheduler_fitting_disagg_gen_init_requests, num_fitting_reqs = self._schedule( ) if self.drafter is not None and not self.use_spec_decode: @@ -3476,18 +3540,19 @@ def _prepare_and_schedule_batch(self): if self.kv_cache_transceiver: wait_for_disagg_gen_transfer_progress = False - fitting_disagg_gen_init_requests, wait_for_disagg_gen_transfer_progress = ( + admitted_disagg_gen_init_requests, wait_for_disagg_gen_transfer_progress = ( self._apply_disagg_transfer_admission( - fitting_disagg_gen_init_requests)) - # For requests that are fitting disagg gen init, also prepare resources for KV cache manager - self._prepare_disagg_gen_init(fitting_disagg_gen_init_requests) + scheduler_fitting_disagg_gen_init_requests)) + # Prepare KV cache manager resources only for requests admitted + # into the transfer window this iteration. + self._prepare_disagg_gen_init(admitted_disagg_gen_init_requests) all_gen_first = self.active_requests and all( req.py_disaggregated_params and req.py_disaggregated_params. schedule_style == DisaggScheduleStyle.GENERATION_FIRST for req in self.active_requests) self._check_disagg_transfer_progress_when_idle( - num_fitting_reqs, fitting_disagg_gen_init_requests, + num_fitting_reqs, admitted_disagg_gen_init_requests, wait_for_disagg_gen_transfer_progress, all_gen_first) # In gen-only benchmark mode, all requests must fit in KV cache @@ -3495,30 +3560,25 @@ def _prepare_and_schedule_batch(self): # scheduler could not allocate KV for any of them, the benchmark # will hang forever because in-progress generation requests won't # release their KV cache. - if (self.benchmark_req_queues_size > 0 and not self.is_warmup - and not fitting_disagg_gen_init_requests): - stuck_init_requests = [ - req for req in self.active_requests - if req.is_disagg_generation_init_state - ] - # Only fail once all benchmark requests have been fetched - # so that _handle_errors covers every request and every - # client receives an error response. - if (stuck_init_requests and self.num_fetch_requests - >= self.benchmark_req_queues_size): - error_msg = ( - f"Insufficient KV cache for gen-only benchmark mode: " - f"{len(stuck_init_requests)} request(s) are waiting for " - f"KV cache allocation but the scheduler could not fit " - f"any of them. Increase free_gpu_memory_fraction or " - f"reduce TLLM_BENCHMARK_REQ_QUEUES_SIZE (currently " - f"{self.benchmark_req_queues_size}).") - logger.error(error_msg) - # Fail all active and waiting requests so every - # client receives an error instead of hanging. - self._handle_errors(error_msg, - requests=self.active_requests) - return None, None + # Check the scheduler result from before transfer admission. An + # empty admitted list can mean that active transfers are + # temporarily consuming the transfer budget. + has_insufficient_kv = self._sync_gen_only_benchmark_has_insufficient_kv( + scheduler_fitting_disagg_gen_init_requests, + wait_for_disagg_gen_transfer_progress) + if has_insufficient_kv: + error_msg = ( + f"Insufficient KV cache for gen-only benchmark mode: " + f"one or more requests are waiting for KV cache allocation " + f"on a model-parallel rank whose scheduler could not fit " + f"any of them. Increase free_gpu_memory_fraction or reduce " + f"TLLM_BENCHMARK_REQ_QUEUES_SIZE (currently " + f"{self.benchmark_req_queues_size}).") + logger.error(error_msg) + # Fail all active and waiting requests on every rank so every + # client receives an error instead of hanging. + self._handle_errors(error_msg, requests=self.active_requests) + return None, None self.num_scheduled_requests = scheduled_batch.batch_size logger.debug( @@ -3561,9 +3621,9 @@ def _is_benchmark_disagg_fill_complete( KV-transfer phase (not in INIT, TRANS_IN_PROGRESS, or ERROR). (C) The KV cache transceiver has no pending receive sessions. - For ADP, the conditions and synchronous-progress signal are gathered - together across TP ranks so every rank makes the same gate and sleep - decision. + The conditions and synchronous-progress signal are gathered across the + TP+CP scheduling group so every model-parallel rank makes the same gate + and sleep decision. This method must only be called when ``is_benchmark_disagg`` is True. @@ -3583,8 +3643,8 @@ def _is_benchmark_disagg_fill_complete( "outside benchmark disagg mode.") # (A) All benchmark requests have been fetched from the queue. Keep - # going to the shared allgather even when this rank is not done so TP - # ranks cannot diverge in collective order. + # going to the shared allgather even when this rank is not done so + # model-parallel ranks cannot diverge in collective order. local_all_fetched = (self.num_fetch_requests >= self.benchmark_req_queues_size) if not local_all_fetched: @@ -3611,10 +3671,7 @@ def _is_benchmark_disagg_fill_complete( and local_no_inflight) local_status = (local_ok, bool(local_sync_progress)) - if self.enable_attention_dp: - all_rank_status = self.dist.tp_allgather(local_status) - else: - all_rank_status = [local_status] + all_rank_status = self._allgather_model_parallel_status(local_status) all_ranks_ok = [status[0] for status in all_rank_status] global_ok = min(all_ranks_ok) == 1 self._benchmark_sync_progress_global = any( diff --git a/tests/unittest/_torch/executor/test_benchmark_disagg.py b/tests/unittest/_torch/executor/test_benchmark_disagg.py index b1f94f130bd6..dabb2b910d55 100644 --- a/tests/unittest/_torch/executor/test_benchmark_disagg.py +++ b/tests/unittest/_torch/executor/test_benchmark_disagg.py @@ -22,6 +22,7 @@ - ADP dummy suppression during fill vs taper-down - ADP router imbalance regression (nvbug 6071070) - Non-blocking behaviour of `_prepare_and_schedule_batch` +- Insufficient-KV fail-fast vs transfer-admission backpressure """ from unittest.mock import Mock, patch @@ -100,6 +101,8 @@ def __init__( from tensorrt_llm._torch.pyexecutor.py_executor import PyExecutor + _dist_size = staticmethod(PyExecutor._dist_size) + _allgather_model_parallel_status = PyExecutor._allgather_model_parallel_status _is_benchmark_disagg_fill_complete = PyExecutor._is_benchmark_disagg_fill_complete _check_benchmark_disagg_gate = PyExecutor._check_benchmark_disagg_gate @@ -227,7 +230,8 @@ def test_allgather_sends_local_ok_int(self): ex._is_benchmark_disagg_fill_complete(ScheduledRequests()) ex.dist.tp_allgather.assert_called_once_with((1, False)) - def test_no_allgather_without_adp(self): + def test_single_rank_skips_model_parallel_allgather(self): + """A singleton group returns local status without a collective.""" reqs = [_make_active_request() for _ in range(4)] ex = MockBenchmarkExecutor( benchmark_req_queues_size=4, @@ -236,8 +240,12 @@ def test_no_allgather_without_adp(self): num_fetch_requests=4, active_requests=reqs, ) + ex.dist.tp_size = 1 + ex.dist.cp_size = 1 + ex.dist.world_size = 1 ex._is_benchmark_disagg_fill_complete(ScheduledRequests()) ex.dist.tp_allgather.assert_not_called() + ex.dist.tp_cp_allgather.assert_not_called() class TestFillCompleteADPRouterImbalance: @@ -391,6 +399,52 @@ def test_gate_skips_sleep_on_all_adp_ranks_when_peer_makes_progress(self, mock_t ex.dist.tp_allgather.assert_called_once_with((0, False)) mock_time.sleep.assert_not_called() + @pytest.mark.parametrize( + "enable_attention_dp, tp_size, cp_size, gather_name", + [ + pytest.param(False, 2, 1, "tp_allgather", id="tensor_parallel"), + pytest.param(False, 1, 2, "tp_cp_allgather", id="context_parallel"), + pytest.param(True, 2, 2, "tp_cp_allgather", id="attention_dp_with_cp"), + ], + ) + def test_gate_waits_for_blocked_model_parallel_peer( + self, enable_attention_dp, tp_size, cp_size, gather_name + ): + """A ready local slice cannot open the gate ahead of a peer. + + Args: + enable_attention_dp: Whether to simulate attention data parallelism. + tp_size: Tensor-parallel group size. + cp_size: Context-parallel group size. + gather_name: Expected model-parallel allgather method. + """ + reqs = [_make_active_request() for _ in range(4)] + ex = MockBenchmarkExecutor( + benchmark_req_queues_size=4, + kv_cache_transceiver=_make_transceiver(transfer_complete=True), + enable_attention_dp=enable_attention_dp, + tp_size=tp_size, + num_fetch_requests=4, + active_requests=reqs, + ) + ex.dist.cp_size = cp_size + ex.dist.world_size = tp_size * cp_size + all_rank_status = [(1, False)] * (tp_size * cp_size) + all_rank_status[-1] = (0, False) + gather = getattr(ex.dist, gather_name) + gather.return_value = all_rank_status + + with patch("tensorrt_llm._torch.pyexecutor.py_executor.time") as mock_time: + can_forward, should_retry = ex._check_benchmark_disagg_gate(ScheduledRequests(), False) + + assert can_forward is False + assert should_retry is True + assert ex._benchmark_fill_phase_active is True + gather.assert_called_once_with((1, False)) + if gather_name == "tp_cp_allgather": + ex.dist.tp_allgather.assert_not_called() + mock_time.sleep.assert_called_once_with(0.1) + @pytest.mark.parametrize( "is_warmup, can_forward_in", [ @@ -957,7 +1011,7 @@ def _make_executor( ex._fill_admit_cap = 0 ex.enable_attention_dp = False ex.num_fetch_requests = num_fetch_requests - ex.dist = Mock(rank=0, tp_size=1) + ex.dist = Mock(rank=0, tp_size=1, cp_size=1, world_size=1) ex.dist.allreduce.return_value = 0 ex.is_shutdown = False ex._is_warmup = False @@ -976,6 +1030,7 @@ def _make_executor( ex._fetch_and_activate_new_requests = Mock(return_value=[]) ex._check_disagg_ctx_schedulable_status = Mock() ex._check_disagg_gen_transfer_status = Mock() + ex._check_disagg_gen_cache_transfer_status = Mock() ex._check_kv_transfer_timeout = Mock() ex._check_disagg_ctx_cache_transfer_status = Mock() ex._pad_attention_dp_dummy_request = Mock() @@ -1014,6 +1069,137 @@ def test_healthy_fill_phase_does_not_kill(self): ) ex._handle_errors.assert_not_called() + def test_partial_transfer_admission_uses_only_admitted_requests(self): + """The admitted subset is prepared and passed to the idle check.""" + admitted_req = _make_active_request(in_init=True) + deferred_req = _make_active_request(in_init=True) + candidates = [admitted_req, deferred_req] + ex = self._make_executor(fill_phase_active=True, fitting_init_requests=candidates) + ex._apply_disagg_transfer_admission = Mock(return_value=([admitted_req], False)) + ex._check_disagg_transfer_progress_when_idle = Mock() + + result, _ = ex._prepare_and_schedule_batch() + + assert result is not None + ex._apply_disagg_transfer_admission.assert_called_once_with(candidates) + ex._prepare_disagg_gen_init.assert_called_once_with([admitted_req]) + ex._check_disagg_transfer_progress_when_idle.assert_called_once_with( + 0, [admitted_req], False, False + ) + ex._handle_errors.assert_not_called() + + def test_fill_with_no_init_requests_does_not_kill(self): + """The final fill iteration is ready for the gate, not terminal.""" + ex = self._make_executor(fill_phase_active=True, num_init_requests=0) + + result, _ = ex._prepare_and_schedule_batch() + + assert result is not None + ex._handle_errors.assert_not_called() + + def test_transfer_admission_backpressure_does_not_kill(self, monkeypatch): + """NVBug 6438658: admission backpressure is not KV exhaustion. + + Args: + monkeypatch: Pytest fixture used to select asynchronous transfer + behavior. + """ + monkeypatch.delenv("TRTLLM_DISAGG_BENCHMARK_GEN_ONLY", raising=False) + monkeypatch.delenv("TRTLLM_DISABLE_KV_CACHE_TRANSFER_OVERLAP", raising=False) + fitting_req = _make_active_request(in_init=True) + ex = self._make_executor(fill_phase_active=True, fitting_init_requests=[fitting_req]) + ex._apply_disagg_transfer_admission = Mock(return_value=([], True)) + + result, _ = ex._prepare_and_schedule_batch() + + assert result is not None, ( + "Fail-fast should NOT fire when the scheduler fit an INIT request " + "that transfer admission temporarily deferred" + ) + ex._apply_disagg_transfer_admission.assert_called_once_with([fitting_req]) + ex._prepare_disagg_gen_init.assert_called_once_with([]) + ex._check_disagg_gen_cache_transfer_status.assert_called_once_with(1) + ex._check_disagg_ctx_cache_transfer_status.assert_not_called() + ex._handle_errors.assert_not_called() + + @pytest.mark.parametrize( + "enable_attention_dp, tp_size, cp_size, gather_name", + [ + pytest.param(False, 2, 1, "tp_allgather", id="tensor_parallel"), + pytest.param(False, 1, 2, "tp_cp_allgather", id="context_parallel"), + pytest.param(True, 2, 2, "tp_cp_allgather", id="attention_dp_with_cp"), + ], + ) + def test_model_parallel_peer_terminal_no_fit_kills_all_ranks( + self, enable_attention_dp, tp_size, cp_size, gather_name + ): + """A terminal peer makes every model-parallel rank fail together. + + Args: + enable_attention_dp: Whether to simulate attention data parallelism. + tp_size: Tensor-parallel group size. + cp_size: Context-parallel group size. + gather_name: Expected model-parallel allgather method. + """ + fitting_req = _make_active_request(in_init=True) + ex = self._make_executor(fill_phase_active=True, fitting_init_requests=[fitting_req]) + ex.enable_attention_dp = enable_attention_dp + ex.dist.tp_size = tp_size + ex.dist.cp_size = cp_size + ex.dist.world_size = tp_size * cp_size + all_rank_status = [(True, False)] * (tp_size * cp_size) + all_rank_status[-1] = (True, True) + gather = getattr(ex.dist, gather_name) + gather.return_value = all_rank_status + ex._apply_disagg_transfer_admission = Mock(return_value=([], True)) + ex._check_disagg_transfer_progress_when_idle = Mock() + + result, _ = ex._prepare_and_schedule_batch() + + assert result is None + gather.assert_called_once_with((True, False)) + if gather_name == "tp_cp_allgather": + ex.dist.tp_allgather.assert_not_called() + ex._handle_errors.assert_called_once() + assert "one or more requests" in ex._handle_errors.call_args.args[0] + + def test_attention_dp_backpressure_without_terminal_peer_does_not_kill(self): + """Admission backpressure stays non-terminal on every rank.""" + fitting_req = _make_active_request(in_init=True) + ex = self._make_executor(fill_phase_active=True, fitting_init_requests=[fitting_req]) + ex.enable_attention_dp = True + ex.dist.tp_size = 2 + ex.dist.world_size = 2 + ex.dist.tp_allgather.return_value = [ + (True, False), + (True, False), + ] + ex._apply_disagg_transfer_admission = Mock(return_value=([], True)) + ex._check_disagg_transfer_progress_when_idle = Mock() + + result, _ = ex._prepare_and_schedule_batch() + + assert result is not None + ex.dist.tp_allgather.assert_called_once_with((True, False)) + ex._handle_errors.assert_not_called() + + def test_model_parallel_waits_until_all_ranks_have_fetched(self): + """A terminal rank cannot fail peers that are still fetching.""" + ex = self._make_executor(fill_phase_active=True) + ex.dist.tp_size = 2 + ex.dist.world_size = 2 + ex.dist.tp_allgather.return_value = [ + (True, True), + (False, False), + ] + ex._check_disagg_transfer_progress_when_idle = Mock() + + result, _ = ex._prepare_and_schedule_batch() + + assert result is not None + ex.dist.tp_allgather.assert_called_once_with((True, True)) + ex._handle_errors.assert_not_called() + def test_mid_fetch_does_not_kill(self): """Before all benchmark requests are fetched, keep filling.""" ex = self._make_executor(fill_phase_active=True, num_fetch_requests=4) @@ -1025,23 +1211,25 @@ def test_mid_fetch_does_not_kill(self): ) ex._handle_errors.assert_not_called() - def test_kills_after_fill_phase(self): - """After fill phase completes, stuck INIT requests trigger fail-fast.""" + def test_post_fill_skips_fail_fast_vote(self): + """Decode iterations must not pay for the fill-only collective.""" ex = self._make_executor(fill_phase_active=False) + ex.enable_attention_dp = True + ex.dist.tp_size = 2 + ex.dist.world_size = 2 + ex._check_disagg_transfer_progress_when_idle = Mock() result, _ = ex._prepare_and_schedule_batch() - assert result is None, ( - "Fail-fast SHOULD fire after fill phase — " - "stuck INIT requests indicate genuine KV insufficiency" - ) - ex._handle_errors.assert_called_once() + assert result is not None + ex.dist.tp_allgather.assert_not_called() + ex._handle_errors.assert_not_called() @pytest.mark.parametrize( "fill_active, is_warmup, expected_alive", [ pytest.param(True, False, False, id="stalled_fill_kills"), - pytest.param(False, False, False, id="post_fill_kills"), + pytest.param(False, False, True, id="post_fill_suppresses"), pytest.param(False, True, True, id="warmup_suppresses"), pytest.param(True, True, True, id="both_suppress"), ], @@ -1080,7 +1268,7 @@ class TestFillPhaseEndToEnd: 3. Scheduler can't fit INIT requests 4. Verify: fail-fast does NOT fire while scheduler fits INIT requests 5. Transfers complete, gate opens, fill phase clears - 6. Verify: fail-fast DOES fire if INIT requests remain after fill + 6. Verify: the fill-only fail-fast vote stops after the gate opens This test catches all three bugs we found iteratively: - Bug 1: Count-based gate unsatisfiable under ADP router skew @@ -1172,6 +1360,7 @@ def test_full_lifecycle(self): # Phase 2b: Healthy fill keeps making progress, so fail-fast must not # fire even though some active requests remain in INIT. ex._schedule = Mock(return_value=(ScheduledRequests(), [init_reqs[0]], 0)) + ex.dist.tp_allgather = Mock(return_value=[(True, False), (True, False)]) result, _ = ex._prepare_and_schedule_batch() assert result is not None, ( "Fail-fast must not kill requests while the scheduler can still fit INIT requests" @@ -1190,16 +1379,13 @@ def test_full_lifecycle(self): # Phase 4: Gate opens, fill phase clears ex._benchmark_fill_phase_active = False - # Phase 5: After fill, if new INIT requests appear and the scheduler - # cannot fit any of them, fail-fast fires. Reset _schedule from - # Phase 2b's healthy-fill mock so it once again returns no fitting - # INIT requests, mirroring genuine insufficient-KV conditions. + # Phase 5: Decode iterations do not re-enter the fill-only vote. ex._schedule = Mock(return_value=(ScheduledRequests(), [], 0)) - stuck_req = _make_active_request(in_init=True) - ex.active_requests = [stuck_req] + ready_reqs + ex.active_requests = ready_reqs + ex.dist.tp_allgather = Mock() + ex._check_disagg_transfer_progress_when_idle = Mock() result, _ = ex._prepare_and_schedule_batch() - assert result is None, ( - "Fail-fast SHOULD fire after fill phase completes — " - "stuck INIT requests now indicate genuine KV insufficiency" - ) + assert result is not None + ex.dist.tp_allgather.assert_not_called() + ex._handle_errors.assert_not_called() From 52fc8f465bc428a48a851bc71757dee7dc54b3fa Mon Sep 17 00:00:00 2001 From: Yao Yao Date: Mon, 13 Jul 2026 11:44:45 +0800 Subject: [PATCH 15/21] [https://nvbugs/6330273][fix] Reserve worst-case SWA slots to avoid single-request deadlock (#15588) Signed-off-by: Yao Yao Co-authored-by: Claude Opus 4.8 --- .../_life_cycle_registry.py | 3 + .../kv_cache_manager_v2/_storage_manager.py | 34 +++++++-- .../test_kv_cache_event_manager.py | 71 ++++++++++++------- .../test_kv_cache_manager_v2.py | 25 +++++-- 4 files changed, 95 insertions(+), 38 deletions(-) diff --git a/tensorrt_llm/runtime/kv_cache_manager_v2/_life_cycle_registry.py b/tensorrt_llm/runtime/kv_cache_manager_v2/_life_cycle_registry.py index 551f5cec0217..d0da6b057678 100644 --- a/tensorrt_llm/runtime/kv_cache_manager_v2/_life_cycle_registry.py +++ b/tensorrt_llm/runtime/kv_cache_manager_v2/_life_cycle_registry.py @@ -42,6 +42,9 @@ def get_stale_range( start = BlockOrdinal(min(num_blocks, self.num_sink_blocks)) if self.window_size is None: return HalfOpenRange(start, start) + # `+ 1` is intentional: attention always runs for >= 1 in-flight input + # token at position `history_length`, so the live window is + # [history_length + 1 - window_size, history_length]. Do not drop it. return HalfOpenRange( start, BlockOrdinal(max(start, (history_length + 1 - self.window_size) // tokens_per_block)), diff --git a/tensorrt_llm/runtime/kv_cache_manager_v2/_storage_manager.py b/tensorrt_llm/runtime/kv_cache_manager_v2/_storage_manager.py index eb32717f8324..540c8bd76df3 100644 --- a/tensorrt_llm/runtime/kv_cache_manager_v2/_storage_manager.py +++ b/tensorrt_llm/runtime/kv_cache_manager_v2/_storage_manager.py @@ -45,7 +45,12 @@ from ._event_manager import KVCacheEventDiff from ._eviction_controller import EvictablePage, PerLevelEvictionController from ._exceptions import OutOfPagesError -from ._life_cycle_registry import LifeCycleId, LifeCycleRegistry, compute_scratch_range +from ._life_cycle_registry import ( + AttnLifeCycle, + LifeCycleId, + LifeCycleRegistry, + compute_scratch_range, +) from ._page import CommittedPage, Page from ._storage import CacheLevelStorage from ._storage._config import BufferAttr, BufferId, LayerAttr, SlotDesc, StorageConfig @@ -79,6 +84,7 @@ typed_len, typed_map, typed_range, + unwrap_optional, ) if TYPE_CHECKING: @@ -898,12 +904,30 @@ def _compute_min_slots_from_constraints( ) -> TypedIndexList[PoolGroupIndex, int]: """Compute the minimum slots per pool group across all constraints (element-wise max). - Always returns at least 1 slot per life cycle in each pool group. + All returned elements are positive. """ - # Default floor: 1 slot per life cycle in each pool group. max_slots = filled_list(0, self.num_pool_groups) - for pg_idx in self._life_cycle_grouping: - max_slots[pg_idx] += 1 + + def swa_floor_blocks(lc: AttnLifeCycle) -> int: + window = unwrap_optional(lc.window_size) + # Handle oscillation of slot count required by SWA while the window slides. + return lc.num_sink_blocks + (window + tokens_per_block - 2) // tokens_per_block + 1 + + # Full-attention lifecycles share the largest SWA floor: all attention + # lifecycles see the same seq_len, so this is a valid lower bound. + floor_num_blocks = 1 + for _, lc in self.life_cycles.attention_life_cycles(): + if lc.window_size is not None: + floor_num_blocks = max(floor_num_blocks, swa_floor_blocks(lc)) + for lc_idx, lc in self.life_cycles.items(): + pg_idx = self.get_pool_group_index(lc_idx) + if not isinstance(lc, AttnLifeCycle): + # SSM / non-attention: 1 slot floor per life cycle. + max_slots[pg_idx] += 1 + elif lc.window_size is not None: + max_slots[pg_idx] += swa_floor_blocks(lc) + else: + max_slots[pg_idx] += floor_num_blocks for batch in constraints: slots = self._compute_slots_for_batch(batch, tokens_per_block, swa_scratch_reuse) for pg_idx in typed_range(self.num_pool_groups): diff --git a/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_event_manager.py b/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_event_manager.py index 807eb8fa69ea..db5921867760 100644 --- a/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_event_manager.py +++ b/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_event_manager.py @@ -1067,23 +1067,30 @@ def test_v2_removed_event_emitted_when_last_level_page_is_dropped(): gc.collect() gc.disable() - event_manager = KVCacheEventManager(max_kv_event_entries=16, window_size=4096) + # A small sliding window keeps the SWA worst-case min_slots floor at a few + # blocks per pool group so the GPU level can be shrunk below the committed + # block count. (The deadlock-safety floor reserves the whole window, so a + # large window would make the resize-down infeasible.) With more committed + # blocks than fit after the shrink, the surplus reusable pages are dropped. + tokens_per_block = 8 + window_size = 8 + num_blocks = 4 + event_manager = KVCacheEventManager(max_kv_event_entries=16, window_size=window_size) manager = None try: - tokens_per_block = 8 manager = _create_test_manager( event_manager, tokens_per_block=tokens_per_block, - gpu_quota=8 << 20, - window_size=4096, + gpu_quota=16 << 20, + window_size=window_size, kv_buf_size=1 << 20, ) stream_holder = CachedCudaStream() stream = cast(CudaStream, stream_holder.handle) kv_cache = manager.create_kv_cache() assert kv_cache.resume(stream) - kv_cache.capacity = tokens_per_block * 2 - kv_cache.commit(_token_ids(0, tokens_per_block * 2)) + kv_cache.capacity = tokens_per_block * num_blocks + kv_cache.commit(_token_ids(0, tokens_per_block * num_blocks)) stored_events = _flush_serialized_events(event_manager) stored_hashes_by_layer_group = _stored_block_hashes_by_layer_group(stored_events) @@ -1094,19 +1101,22 @@ def test_v2_removed_event_emitted_when_last_level_page_is_dropped(): del kv_cache gc.collect() - assert manager.resize(CacheLevel(0), 4 << 20) + assert manager.resize(CacheLevel(0), 8 << 20) removal_events = _flush_serialized_events(event_manager) - removed_hashes_by_layer_group = { - event["layer_group_id"]: event["data"]["block_hashes"] - for event in removal_events - if event["data"]["type"] == "removed" - } - + removed_hashes_by_layer_group: dict[int, list] = {} + for event in removal_events: + if event["data"]["type"] == "removed": + removed_hashes_by_layer_group.setdefault(event["layer_group_id"], []).extend( + event["data"]["block_hashes"] + ) + + # Both layer groups drop last-level pages, and every removed hash must + # have been stored earlier for that layer group. assert set(removed_hashes_by_layer_group) == {0, 1} - assert removed_hashes_by_layer_group[0] == removed_hashes_by_layer_group[1] for layer_group_id, removed_hashes in removed_hashes_by_layer_group.items(): - assert len(removed_hashes) == 1 - assert removed_hashes[0] in stored_hashes_by_layer_group[layer_group_id] + assert removed_hashes + for removed_hash in removed_hashes: + assert removed_hash in stored_hashes_by_layer_group[layer_group_id] finally: gc.enable() if manager is not None: @@ -1119,24 +1129,30 @@ def test_v2_kv_cache_event_manager_emits_updated_on_level_migration(): gc.collect() gc.disable() - event_manager = KVCacheEventManager(max_kv_event_entries=16, window_size=4096) + # See test_v2_removed_event_emitted_when_last_level_page_is_dropped for why + # a small window is used: it keeps the min_slots floor low enough that the + # GPU level can be shrunk below the committed block count, forcing surplus + # reusable pages to migrate to host. + tokens_per_block = 8 + window_size = 8 + num_blocks = 4 + event_manager = KVCacheEventManager(max_kv_event_entries=16, window_size=window_size) manager = None try: - tokens_per_block = 8 manager = _create_test_manager( event_manager, tokens_per_block=tokens_per_block, - gpu_quota=8 << 20, + gpu_quota=16 << 20, host_quota=8 << 20, - window_size=4096, + window_size=window_size, kv_buf_size=1 << 20, ) stream_holder = CachedCudaStream() stream = cast(CudaStream, stream_holder.handle) kv_cache = manager.create_kv_cache() assert kv_cache.resume(stream) - kv_cache.capacity = tokens_per_block * 2 - kv_cache.commit([TokenId(token_id) for token_id in range(tokens_per_block * 2)]) + kv_cache.capacity = tokens_per_block * num_blocks + kv_cache.commit([TokenId(token_id) for token_id in range(tokens_per_block * num_blocks)]) stored_events = _flush_serialized_events(event_manager) stored_hashes_by_layer_group = _stored_block_hashes_by_layer_group(stored_events) @@ -1147,16 +1163,16 @@ def test_v2_kv_cache_event_manager_emits_updated_on_level_migration(): del kv_cache gc.collect() - assert manager.resize(CacheLevel(0), 4 << 20) + assert manager.resize(CacheLevel(0), 8 << 20) event_manager.flush_iteration_events() events = KVCacheEventSerializer.serialize(event_manager.get_latest_events()) updated_events = [event for event in events if event["data"]["type"] == "updated"] - assert len(updated_events) == 2 + # Pages evicted from GPU under memory pressure migrate to host, emitting + # an "updated" event (cache_level 0 -> 1) for each affected layer group. + assert updated_events assert {event["layer_group_id"] for event in updated_events} == {0, 1} - assert len({event["data"]["block_hash"] for event in updated_events}) == 1 - assert updated_events[0]["data"]["block_hash"] in stored_hashes_by_layer_group[0] for event in updated_events: assert event["data"]["cache_level"] == { "type": "event_diff", @@ -1164,6 +1180,9 @@ def test_v2_kv_cache_event_manager_emits_updated_on_level_migration(): "new_value": 1, } assert event["data"]["priority"] is None + assert ( + event["data"]["block_hash"] in stored_hashes_by_layer_group[event["layer_group_id"]] + ) finally: gc.enable() if manager is not None: diff --git a/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_manager_v2.py b/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_manager_v2.py index 9fc966dcdb2d..a808e7f1c292 100755 --- a/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_manager_v2.py +++ b/tests/unittest/kv_cache_manager_v2_tests/test_kv_cache_manager_v2.py @@ -1360,9 +1360,11 @@ def assert_prefetched_pages_are_evictable(kv_cache: _KVCache) -> None: # Shrink the gpu quota success = self.manager.resize(GPU_LEVEL, 32 << 20) assert success and self.manager.get_quota(GPU_LEVEL) <= 32 << 20 - # also shrink the host quota, this would evict some pages to disk - success = self.manager.resize(HOST_LEVEL, 4 << 20) - assert success and self.manager.get_quota(HOST_LEVEL) <= 4 << 20 + # also shrink the host quota, this would evict some pages to disk. + # 16MB is the smallest shrink that still satisfies the SWA worst-case + # min_slots floor (sink + window blocks across all pool groups). + success = self.manager.resize(HOST_LEVEL, 16 << 20) + assert success and self.manager.get_quota(HOST_LEVEL) <= 16 << 20 # also shrink the disk quota, this would drop some old pages success = self.manager.resize(DISK_LEVEL, 32 << 20) assert success and self.manager.get_quota(DISK_LEVEL) <= 32 << 20 @@ -2070,16 +2072,25 @@ def test_typical_step_scratch_reduces_windowed_ratio(self): """With scratch reuse, windowed PG needs fewer slots during prefill. 16 SWA layers (frac_max=1/16) + 16 full layers. - Typical step: 4 prefill requests (history=0, capacity=4096). + Typical step: 8 prefill requests (history=0, capacity=16384). Without scratch: both PGs need the same block count; ratio reflects the buffer-size difference only. With scratch: PG0 needs far fewer slots -> ratio shifts toward PG1. + + The quota is deliberately large and the sequences long so the SWA + worst-case min_slots floor (sink + window blocks) is a negligible + fraction and does not clamp the scratch-reduced windowed ratio. """ - step = BatchDesc(kv_caches=[KVCacheDesc(capacity=4096, history_length=0)] * 4) + step = BatchDesc(kv_caches=[KVCacheDesc(capacity=16384, history_length=0)] * 8) multi = dict(num_windowed_layers=16, num_full_layers=16) - cfg_no = self._make_config(typical_step=step, enable_swa_scratch_reuse=False, **multi) - cfg_yes = self._make_config(typical_step=step, enable_swa_scratch_reuse=True, **multi) + big_quota = 8 << 30 + cfg_no = self._make_config( + gpu_quota=big_quota, typical_step=step, enable_swa_scratch_reuse=False, **multi + ) + cfg_yes = self._make_config( + gpu_quota=big_quota, typical_step=step, enable_swa_scratch_reuse=True, **multi + ) mgr_no = KVCacheManager(cfg_no) mgr_yes = KVCacheManager(cfg_yes) ratio_no = mgr_no._current_gpu_ratio From c883622b6be7852d0fd2e89da51c1bfcb747bd0b Mon Sep 17 00:00:00 2001 From: Yi Zhang <187001205+yizhang-nv@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:49:19 +0800 Subject: [PATCH 16/21] [None][feat] add per-model KV cache manager v2 auto selection (#15823) Signed-off-by: Yi Zhang <187001205+yizhang-nv@users.noreply.github.com> --- examples/llm-api/quickstart_advanced.py | 34 ++++++++++-- tensorrt_llm/_torch/pyexecutor/_util.py | 8 +-- .../_torch/pyexecutor/model_loader.py | 15 +++++- tensorrt_llm/llmapi/llm_args.py | 9 ++-- tensorrt_llm/llmapi/llm_utils.py | 21 ++++++++ .../usage/llm_args_golden_manifest.json | 12 +++-- tests/unittest/llmapi/test_llm_args.py | 47 ++++++++++++++++- .../llmapi/test_quickstart_advanced.py | 52 +++++++++++++++++++ 8 files changed, 181 insertions(+), 17 deletions(-) create mode 100644 tests/unittest/llmapi/test_quickstart_advanced.py diff --git a/examples/llm-api/quickstart_advanced.py b/examples/llm-api/quickstart_advanced.py index 8c449283aa2e..718d4a410e2c 100644 --- a/examples/llm-api/quickstart_advanced.py +++ b/examples/llm-api/quickstart_advanced.py @@ -1,6 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import argparse import json import time +from typing import Literal from tensorrt_llm import LLM, SamplingParams from tensorrt_llm.llmapi import (AttentionDpConfig, AutoDecodingConfig, @@ -17,6 +33,16 @@ ] +def _parse_kv_cache_manager_v2(value: str) -> bool | Literal["auto"]: + if value == "auto": + return "auto" + if value == "true": + return True + if value == "false": + return False + raise argparse.ArgumentTypeError("expected one of: auto, true, false") + + def add_llm_args(parser): parser.add_argument('--model_dir', type=str, @@ -131,9 +157,11 @@ def add_llm_args(parser): action='store_true') parser.add_argument( '--use_kv_cache_manager_v2', - default=False, - action='store_true', - help='Use KVCacheManagerV2 for KV cache management (PyTorch backend).', + default='auto', + type=_parse_kv_cache_manager_v2, + metavar='{auto,true,false}', + help= + 'Whether to use KVCacheManagerV2 for KV cache management (PyTorch backend). Defaults to model-specific auto selection.', ) # Runtime diff --git a/tensorrt_llm/_torch/pyexecutor/_util.py b/tensorrt_llm/_torch/pyexecutor/_util.py index cda3d9a44136..97b2ca3a82f1 100644 --- a/tensorrt_llm/_torch/pyexecutor/_util.py +++ b/tensorrt_llm/_torch/pyexecutor/_util.py @@ -82,7 +82,7 @@ def ceil_div(a: int, b: int) -> int: def _non_hybrid_kv_cache_manager_cls(config, kv_cache_config: KvCacheConfig): # Models with per-layer head_dim (e.g., Gemma4 hybrid attention) # require KVCacheManagerV2 for per-layer buffer sizes. - needs_v2 = (kv_cache_config.use_kv_cache_manager_v2 + needs_v2 = (kv_cache_config.use_kv_cache_manager_v2 is True or is_gemma4_hybrid(config)) return KVCacheManagerV2 if needs_v2 else KVCacheManager @@ -417,9 +417,9 @@ def _fallback_if_unsupported_kv_cache_manager_v2( f"Gemma4 hybrid attention requires KVCacheManagerV2, " f"which is not yet supported with {incompat_str}. " f"Disable these features to run Gemma4 hybrid models.") - # Plain V2 (user opt-in via ``use_kv_cache_manager_v2=True``): - # V2 was a preference, not a structural requirement, so we - # can safely fall back to V1. + # Plain V2 (explicitly enabled or selected by a model default): + # V2 was a preference, not a structural requirement, so we can + # safely fall back to V1. logger.warning( "KVCacheManagerV2 is not supported with %s. " "Falling back to KVCacheManager.", incompat_str) diff --git a/tensorrt_llm/_torch/pyexecutor/model_loader.py b/tensorrt_llm/_torch/pyexecutor/model_loader.py index 4aa8ce703d4c..7596c2a68291 100644 --- a/tensorrt_llm/_torch/pyexecutor/model_loader.py +++ b/tensorrt_llm/_torch/pyexecutor/model_loader.py @@ -19,7 +19,8 @@ ExecutorMemoryType, ModelExpressConfig, SparseAttentionConfig, TorchLlmArgs) -from tensorrt_llm.llmapi.llm_utils import apply_model_defaults_to_llm_args +from tensorrt_llm.llmapi.llm_utils import (_resolve_kv_cache_manager_v2_auto, + apply_model_defaults_to_llm_args) from tensorrt_llm.logger import logger from tensorrt_llm.lora_helper import LoraConfig from tensorrt_llm.mapping import Mapping @@ -369,8 +370,9 @@ def load_config_and_apply_defaults( model_cls = AutoModelForCausalLM._resolve_class(config) # model_cls is None when the architecture is unknown/unsupported. + model_defaults = {} if model_cls and hasattr(model_cls, 'get_model_defaults'): - model_defaults = model_cls.get_model_defaults(llm_args) + model_defaults = model_cls.get_model_defaults(llm_args) or {} if model_defaults: applied_defaults = apply_model_defaults_to_llm_args( llm_args, model_defaults) @@ -379,6 +381,15 @@ def load_config_and_apply_defaults( f"Applied model defaults for {model_cls.__name__}: {applied_defaults}" ) + use_kv_cache_manager_v2 = llm_args.kv_cache_config.use_kv_cache_manager_v2 + _resolve_kv_cache_manager_v2_auto(llm_args, model_defaults) + if use_kv_cache_manager_v2 == "auto": + logger.info( + "Resolved use_kv_cache_manager_v2='auto' to %s for %s", + llm_args.kv_cache_config.use_kv_cache_manager_v2, + model_cls.__name__ + if model_cls is not None else "unknown model") + return llm_args @staticmethod diff --git a/tensorrt_llm/llmapi/llm_args.py b/tensorrt_llm/llmapi/llm_args.py index 529535f8adf1..5c6c89e88b3c 100644 --- a/tensorrt_llm/llmapi/llm_args.py +++ b/tensorrt_llm/llmapi/llm_args.py @@ -3447,10 +3447,13 @@ class KvCacheConfig(StrictBaseModel, PybindMirror): description= "The number of tokens between cache steps in the Mamba prefix cache.") - use_kv_cache_manager_v2: bool = Field( - default=False, + use_kv_cache_manager_v2: bool | Literal["auto"] = Field( + default="auto", status="prototype", - description="Whether to use the KV cache manager v2 (experimental).") + description= + "Whether to use the KV cache manager v2 (experimental). 'auto' uses " + "the model-specific default and falls back to False when the model " + "does not specify one.") # This is a pure python field, not a pybind field. It is only for the Pytorch backend. enable_swa_scratch_reuse: bool = Field( diff --git a/tensorrt_llm/llmapi/llm_utils.py b/tensorrt_llm/llmapi/llm_utils.py index 154f60a4b8ef..b162d0bd4443 100644 --- a/tensorrt_llm/llmapi/llm_utils.py +++ b/tensorrt_llm/llmapi/llm_utils.py @@ -1130,3 +1130,24 @@ def _compute_applied(defaults: Dict[str, Any], return applied return _compute_applied(model_defaults_dict, user_overrides) + + +def _resolve_kv_cache_manager_v2_auto( + llm_args: 'TorchLlmArgs', model_defaults_dict: Dict[str, Any]) -> bool: + """Resolve the KV cache manager auto setting after model defaults are applied.""" + setting = llm_args.kv_cache_config.use_kv_cache_manager_v2 + if setting != "auto": + return setting + + kv_cache_defaults = model_defaults_dict.get("kv_cache_config", {}) + model_default = (kv_cache_defaults.get("use_kv_cache_manager_v2", False) + if isinstance(kv_cache_defaults, dict) else False) + if model_default == "auto": + model_default = False + if not isinstance(model_default, bool): + raise ValueError( + "Model default kv_cache_config.use_kv_cache_manager_v2 must be " + f"True, False, or 'auto', got {model_default!r}.") + + llm_args.kv_cache_config.use_kv_cache_manager_v2 = model_default + return model_default diff --git a/tensorrt_llm/usage/llm_args_golden_manifest.json b/tensorrt_llm/usage/llm_args_golden_manifest.json index 023d4f07f4c1..1362f671ccfb 100644 --- a/tensorrt_llm/usage/llm_args_golden_manifest.json +++ b/tensorrt_llm/usage/llm_args_golden_manifest.json @@ -760,8 +760,10 @@ "path": "kv_cache_config.tokens_per_block" }, { - "allowed_values": [], - "annotation": "", + "allowed_values": [ + "auto" + ], + "annotation": "Union[bool, Literal['auto']]", "converter": "", "kind": "value", "path": "kv_cache_config.use_kv_cache_manager_v2" @@ -3178,8 +3180,10 @@ "path": "kv_cache_config.tokens_per_block" }, { - "allowed_values": [], - "annotation": "", + "allowed_values": [ + "auto" + ], + "annotation": "Union[bool, Literal['auto']]", "converter": "", "kind": "value", "path": "kv_cache_config.use_kv_cache_manager_v2" diff --git a/tests/unittest/llmapi/test_llm_args.py b/tests/unittest/llmapi/test_llm_args.py index 0b8d5bc94f7d..7b6dafb97bce 100644 --- a/tests/unittest/llmapi/test_llm_args.py +++ b/tests/unittest/llmapi/test_llm_args.py @@ -53,7 +53,8 @@ UserProvidedDecodingConfig, update_llm_args_with_extra_dict) # fmt: on -from tensorrt_llm.llmapi.llm_utils import apply_model_defaults_to_llm_args +from tensorrt_llm.llmapi.llm_utils import (_resolve_kv_cache_manager_v2_auto, + apply_model_defaults_to_llm_args) from tensorrt_llm.llmapi.mm_encoder import MultimodalEncoder from tensorrt_llm.llmapi.utils import print_traceback_on_error from tensorrt_llm.models.modeling_utils import LayerQuantConfig, QuantConfig @@ -310,6 +311,43 @@ def test_compute_applied_llm_defaults_simple_field(self): applied = apply_model_defaults_to_llm_args(llm_args, model_defaults) assert applied == model_defaults + @pytest.mark.parametrize("explicit_auto", [False, True]) + def test_kv_cache_manager_v2_auto_uses_model_default(self, explicit_auto): + kv_cache_config = (KvCacheConfig(use_kv_cache_manager_v2="auto") + if explicit_auto else KvCacheConfig()) + llm_args = TorchLlmArgs(model="/tmp/dummy_model", + kv_cache_config=kv_cache_config) + model_defaults = {"kv_cache_config": {"use_kv_cache_manager_v2": True}} + + apply_model_defaults_to_llm_args(llm_args, model_defaults) + _resolve_kv_cache_manager_v2_auto(llm_args, model_defaults) + + assert llm_args.kv_cache_config.use_kv_cache_manager_v2 is True + + def test_kv_cache_manager_v2_auto_falls_back_to_false(self): + llm_args = TorchLlmArgs(model="/tmp/dummy_model") + + _resolve_kv_cache_manager_v2_auto(llm_args, {}) + + assert llm_args.kv_cache_config.use_kv_cache_manager_v2 is False + + @pytest.mark.parametrize("user_setting", [False, True]) + def test_kv_cache_manager_v2_explicit_value_overrides_model_default( + self, user_setting): + llm_args = TorchLlmArgs( + model="/tmp/dummy_model", + kv_cache_config=KvCacheConfig(use_kv_cache_manager_v2=user_setting)) + model_defaults = { + "kv_cache_config": { + "use_kv_cache_manager_v2": not user_setting + } + } + + apply_model_defaults_to_llm_args(llm_args, model_defaults) + _resolve_kv_cache_manager_v2_auto(llm_args, model_defaults) + + assert llm_args.kv_cache_config.use_kv_cache_manager_v2 is user_setting + @pytest.mark.parametrize( "defaults_dict,should_raise,error_contains", [ @@ -411,6 +449,13 @@ def test_KvCacheConfig_declaration(): assert KvCacheConfig().kv_cache_event_hash_algo == "auto" assert KvCacheConfig().block_reuse_policy == "all_reusable" assert KvCacheConfig().enable_swa_scratch_reuse is False + assert KvCacheConfig().use_kv_cache_manager_v2 == "auto" + assert KvCacheConfig( + use_kv_cache_manager_v2=True).use_kv_cache_manager_v2 is True + assert KvCacheConfig( + use_kv_cache_manager_v2=False).use_kv_cache_manager_v2 is False + with pytest.raises(ValidationError, match="use_kv_cache_manager_v2"): + KvCacheConfig(use_kv_cache_manager_v2="invalid") config = KvCacheConfig(enable_block_reuse=True, max_tokens=1024, diff --git a/tests/unittest/llmapi/test_quickstart_advanced.py b/tests/unittest/llmapi/test_quickstart_advanced.py new file mode 100644 index 000000000000..d9e9212721c2 --- /dev/null +++ b/tests/unittest/llmapi/test_quickstart_advanced.py @@ -0,0 +1,52 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import importlib.util +from pathlib import Path + +import pytest + +_REPO_ROOT = Path(__file__).resolve().parents[3] +_MODULE_PATH = _REPO_ROOT / "examples" / "llm-api" / "quickstart_advanced.py" +_SPEC = importlib.util.spec_from_file_location("quickstart_advanced", _MODULE_PATH) +if _SPEC is None or _SPEC.loader is None: + raise ImportError(f"Unable to load {_MODULE_PATH}") +_MODULE = importlib.util.module_from_spec(_SPEC) +_SPEC.loader.exec_module(_MODULE) + + +@pytest.mark.parametrize( + ("cli_value", "expected"), + [ + ("auto", "auto"), + ("true", True), + ("false", False), + ], +) +def test_use_kv_cache_manager_v2_cli_values(cli_value: str, expected: str | bool) -> None: + parser = _MODULE.add_llm_args(argparse.ArgumentParser()) + + args = parser.parse_args(["--model_dir", "dummy-model", "--use_kv_cache_manager_v2", cli_value]) + + assert args.use_kv_cache_manager_v2 == expected + + +def test_use_kv_cache_manager_v2_cli_default_is_auto() -> None: + parser = _MODULE.add_llm_args(argparse.ArgumentParser()) + + args = parser.parse_args(["--model_dir", "dummy-model"]) + + assert args.use_kv_cache_manager_v2 == "auto" From 4a86ff538d21c086f4ceb99845d1dd3cc6d014b4 Mon Sep 17 00:00:00 2001 From: Kaiyu Xie <26294424+kaiyux@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:54:02 +0800 Subject: [PATCH 17/21] [TRTLLM-14138][perf] Make FlashInfer decode plans sync-free with host-built page tables (#16073) Signed-off-by: Kaiyu Xie <26294424+kaiyux@users.noreply.github.com> --- .../_torch/attention_backend/flashinfer.py | 405 ++++++++++++------ .../_torch/pyexecutor/kv_cache_manager_v2.py | 48 +++ .../_torch/pyexecutor/resource_manager.py | 20 + 3 files changed, 348 insertions(+), 125 deletions(-) diff --git a/tensorrt_llm/_torch/attention_backend/flashinfer.py b/tensorrt_llm/_torch/attention_backend/flashinfer.py index 26fed0bf12bd..61e490516b28 100644 --- a/tensorrt_llm/_torch/attention_backend/flashinfer.py +++ b/tensorrt_llm/_torch/attention_backend/flashinfer.py @@ -13,6 +13,7 @@ from typing_extensions import override import flashinfer +import numpy as np import torch from flashinfer.jit.core import check_cuda_arch from typing_extensions import Self @@ -41,7 +42,7 @@ arch_list = f"{capability[0]}.{capability[1]}" os.environ["TORCH_CUDA_ARCH_LIST"] = arch_list -from tensorrt_llm._utils import prefer_pinned +from tensorrt_llm._utils import maybe_pin_memory, prefer_pinned _FORCE_RAGGED_FA2 = False """Used for testing.""" @@ -198,6 +199,14 @@ class FlashInferWrappers: prefill_wrapper: Optional[ flashinfer.BatchPrefillWithPagedKVCacheWrapper] = None ragged_prefill_wrapper: Optional[_RaggedPrefillWrapper] = None + # Persistent trtllm-gen decode block tables, built on the host by + # _build_decode_block_tables(). The device buffer must keep a stable + # address across steps so graph-captured decode kernels keep reading + # valid memory; the pinned host buffer feeds the async H2D. + decode_block_tables: Optional[torch.Tensor] = field(default=None, + repr=False) + host_decode_block_tables: Optional[torch.Tensor] = field(default=None, + repr=False) @dataclass(kw_only=True) @@ -521,6 +530,9 @@ def swap_paged_kv_indices_for_layer(self, layer_idx: int) -> None: src = self._vswa_pool_indices_cache[pool_id][:n] self._paged_kv_indices[:n].copy_(src, non_blocking=True) self._vswa_active_pool_id = pool_id + # Keep the host mirror in lockstep with the device buffer so decode + # plans build their block tables from the active pool's indices. + self._host_paged_kv_indices = self._host_pool_indices[pool_id] @property def paged_kv_last_page_len(self) -> torch.Tensor: @@ -610,6 +622,16 @@ def _post_init_with_buffers(self, buffers) -> None: device='cuda') self._plan_params_to_wrappers = {} + # Host-side state for sync-free trtllm-gen decode plans, retained by + # prepare(): a host mirror of _paged_kv_indices (kept in lockstep + # with the device buffer, with per-pool copies for VSWA swaps) and a + # host copy of the decode indptr. The per-plan_params persistent + # block-table buffers live on FlashInferWrappers. + self._host_pool_indices: Dict[int, torch.Tensor] = {} + self._host_paged_kv_indices: Optional[torch.Tensor] = None + self._host_paged_kv_indptr_decode: Optional[torch.Tensor] = None + self._max_num_blocks = 0 + # VSWA (Variable Sliding Window Attention): models with per-layer # max_attention_window create separate V2 pool groups with independent # page numbering. We need per-pool paged_kv_indices so each layer can @@ -618,15 +640,29 @@ def _post_init_with_buffers(self, buffers) -> None: self._vswa_pool_indices_cache: Optional[Dict[int, torch.Tensor]] = None if self.kv_cache_manager is not None: - max_num_pages = self.kv_cache_manager.blocks_in_primary_pool + blocks_in_primary_pool = self.kv_cache_manager.blocks_in_primary_pool self._paged_kv_indices = self.get_empty( buffers, - (max_num_pages, ), + (blocks_in_primary_pool, ), dtype=torch.int, cache_name="_paged_kv_indices", capture_graph=capture_graph, ) + # Maximum block count across ALL pools: sizes the VSWA pool + # buffers below and bounds the per-request width of the + # persistent trtllm-gen decode block tables (a request can + # never reference more blocks than its pool holds). Computed + # for every model, not just VSWA — non-VSWA managers have a + # single pool, so this stays blocks_in_primary_pool for them. + max_num_blocks = blocks_in_primary_pool + if hasattr(self.kv_cache_manager, 'layer_offsets'): + for lid in self.kv_cache_manager.layer_offsets: + lbuf = self.kv_cache_manager.get_buffers(lid) + if lbuf is not None: + max_num_blocks = max(max_num_blocks, lbuf.shape[0]) + self._max_num_blocks = max_num_blocks + # Detect VSWA: check if the manager has multiple pools. # Guard on layer_to_pool_mapping_dict which is V2-specific — V1 # managers also expose is_vswa but lack the per-pool infrastructure. @@ -653,20 +689,14 @@ def _post_init_with_buffers(self, buffers) -> None: # Pre-allocate VSWA pool cache buffers. These must be # stable (never reallocated) so that CUDA-graph-recorded # copies reference valid addresses across replays. - # Use the maximum page count across ALL pools (not just the - # primary) so that secondary pool buffers are large enough. - all_pool_pages = max_num_pages - if hasattr(self.kv_cache_manager, 'layer_offsets'): - for lid in self.kv_cache_manager.layer_offsets: - lbuf = self.kv_cache_manager.get_buffers(lid) - if lbuf is not None: - all_pool_pages = max(all_pool_pages, lbuf.shape[0]) + # max_num_blocks (computed above) covers ALL pools so that + # secondary pool buffers are large enough. for pool_id in set(self._vswa_layer_to_pool.values()): buf_key = f'_vswa_pool_buf_{pool_id}' if getattr(self, buf_key, None) is None: setattr( self, buf_key, - torch.empty(all_pool_pages, + torch.empty(max_num_blocks, dtype=torch.int, device='cuda')) # Stable buffers for FlashInfer MLA decode; required for CUDA graphs. @@ -910,6 +940,96 @@ def _process_multi_item_part_lens( token_pos_in_items_len=token_pos_in_items_len, ) + def _build_decode_block_tables( + self, plan_params: PlanParams, + wrappers: FlashInferWrappers) -> Optional[torch.Tensor]: + """Build the trtllm-gen decode block table on the host. + + When ``block_tables`` is not passed to + ``BatchDecodeWithPagedKVCacheWrapper.plan()``, flashinfer rebuilds + it with a per-request loop whose slice bounds are GPU scalars — + one cudaStreamSynchronize + one scalar D2H read per generation + request per plan. Instead, build the ``[num_gens, max_n]`` table + here with one vectorized pass over the host mirror of the active + pool's flat page indices (no GPU reads) and push it with a single + async H2D into a persistent device buffer held by ``wrappers``. + Under CUDA-graph metadata the buffer is allocated once at full + capacity width and never moves, so captured decode kernels keep + reading valid memory while prepare() refreshes the contents in + place; the eager path re-plans every step and may grow its buffer + geometrically. + + Returns None when the host data (or memory for the buffer) is + unavailable; the caller then falls back to flashinfer's own + rebuild — itself sync-free now that the plan indptr is a host + tensor. + """ + if plan_params.attention_mask_data is not None: + # Masked plans are flushed every step, taking their wrappers + # (and any buffers on them) along; don't churn per-step + # block-table allocations for them. + return None + num_gens = self.num_generations + if num_gens == 0: + return None + host_paged_kv_indices = self._host_paged_kv_indices + if host_paged_kv_indices is None: + return None + gen_num_blocks = np.asarray(self.num_blocks[self.num_contexts:], + dtype=np.int64) + max_n = int(gen_num_blocks.max()) + if max_n > self._max_num_blocks: + # A request can never reference more blocks than any pool + # holds; defensive guard for inconsistent metadata. + return None + block_tables = wrappers.decode_block_tables + if (self.is_cuda_graph and block_tables is not None + and block_tables.size(1) < max_n): + # Never reallocate under CUDA graphs: captured decode kernels + # hold the buffer address. + return None + if block_tables is None or block_tables.size(1) < max_n: + if self.is_cuda_graph: + # Allocated once at capture warmup; full capacity width so + # replays never need a wider table. + width = self._max_num_blocks + else: + # Eager path replans (and re-reads the table) every step, + # so the buffer may grow geometrically as sequences do. + width = min(max(64, 1 << (max_n - 1).bit_length()), + self._max_num_blocks) + try: + block_tables = torch.zeros((self.max_num_requests, width), + dtype=torch.int32, + device='cuda') + except torch.OutOfMemoryError: + # E.g. the KV-estimation warmup forwards run with device + # memory deliberately exhausted; fall back to flashinfer's + # rebuild rather than failing the forward. + return None + wrappers.decode_block_tables = block_tables + host_block_tables = wrappers.host_decode_block_tables + if host_block_tables is None or host_block_tables.size(1) < max_n: + host_width = min(max(64, 1 << (max_n - 1).bit_length()), + block_tables.size(1)) + host_block_tables = torch.zeros((self.max_num_requests, host_width), + dtype=torch.int32, + pin_memory=prefer_pinned()) + wrappers.host_decode_block_tables = host_block_tables + start = self.num_context_blocks + decode_flat = host_paged_kv_indices.numpy()[start:start + + int(gen_num_blocks.sum())] + table = host_block_tables.numpy()[:num_gens, :max_n] + table[:] = 0 + table[np.arange(max_n)[None, :] < gen_num_blocks[:, None]] = \ + decode_flat + # Rewriting the host buffer is safe: _plan_with_params synchronizes + # the stream before planning, so the previous plan's H2D has + # completed. + block_tables[:num_gens, :max_n].copy_( + host_block_tables[:num_gens, :max_n], non_blocking=True) + return block_tables[:num_gens] + def _clean_cached_plans(self, *, defer_plan: bool): for plan_params in list(self._plan_params_to_wrappers.keys()): # Generally, plan_params with non-trivial attention masking are relevant only the @@ -923,6 +1043,17 @@ def _clean_cached_plans(self, *, defer_plan: bool): del self._plan_params_to_wrappers[plan_params] def prepare(self) -> None: + + def _to_int32_tensor(arr: np.ndarray) -> torch.Tensor: + """Host int32 staging tensor for async H2D copies; pinned when + beneficial. + + torch.tensor(..., pin_memory=True) rejects numpy sources, hence + from_numpy + pin. + """ + return maybe_pin_memory( + torch.from_numpy(arr.astype(np.int32, copy=False))) + super().prepare() extra_attrs = get_model_extra_attrs() if extra_attrs is None: @@ -961,31 +1092,27 @@ def prepare(self) -> None: "multi_item_part_lens with KV cache is not supported") # number of tokens in the kv cache for each sequence in the batch - cached_token_lens = torch.tensor( - self.kv_cache_params.num_cached_tokens_per_seq, dtype=torch.int) + num_cached_tokens_per_seq = self.kv_cache_params.num_cached_tokens_per_seq + cached_token_lens = torch.tensor(num_cached_tokens_per_seq, + dtype=torch.int, + pin_memory=prefer_pinned()) self._cached_token_lens[:cached_token_lens.size(0)].copy_( cached_token_lens, non_blocking=True) if self.num_contexts > 0: self.num_ctx_cached_tokens = sum( - self.kv_cache_params.num_cached_tokens_per_seq[:self. - num_contexts]) + num_cached_tokens_per_seq[:self.num_contexts]) else: self.num_ctx_cached_tokens = 0 - # Number of tokens needed in the KV cache after the next pass. Compute - # block counts on the host so page-table preparation does not wait for - # a GPU round trip before converting host-resident cache indices. - kv_lens_host = cached_token_lens + self.seq_lens_kv - self.num_blocks = ((kv_lens_host + self.page_size - 1) // - self.page_size).tolist() + # Number of tokens needed in the KV cache for each sequence after the + # next pass. Kept on the host: every consumer below needs host values, + # so a device-side computation would force a sync per step. + kv_lens_host = np.asarray(num_cached_tokens_per_seq, + dtype=np.int64) + self.seq_lens_kv.numpy() + num_blocks = (kv_lens_host + self.page_size - 1) // self.page_size + self.num_blocks = num_blocks.tolist() - # indices of used cache blocks for each sequence assert self.request_ids is not None - block_ids_per_seq = self.kv_cache_manager.get_batch_cache_indices( - self.request_ids, num_blocks_per_seq=self.num_blocks) - - # GPU copy used by the attention wrappers and last-page metadata. - kv_lens = self.cached_token_lens + self.seq_lens_kv_cuda # start and end indices of each sequence in the ragged key and value # for self attention it's the same as qo_indptr so avoid computing twice. @@ -1004,16 +1131,19 @@ def prepare(self) -> None: self.num_context_blocks = sum(self.num_blocks[:self.num_contexts]) self.num_generation_blocks = sum(self.num_blocks[self.num_contexts:]) - paged_kv_indices_list = [] - for i, block_ids in enumerate(block_ids_per_seq): - paged_kv_indices_list.extend(block_ids[:self.num_blocks[i]]) - - paged_kv_indices = torch.tensor(paged_kv_indices_list, - dtype=torch.int32) + # indices of used cache blocks for each sequence + paged_kv_indices = self.kv_cache_manager.get_batch_cache_indices_flat( + self.request_ids, self.num_blocks) self._paged_kv_indices[:paged_kv_indices.size(0)].copy_( paged_kv_indices, non_blocking=True) + # Retain a host mirror of _paged_kv_indices: decode plans build the + # trtllm-gen block tables from host data, with no GPU round trips. + # The VSWA block below re-points the mirror at the active pool's + # copy whenever the device buffer is swapped. + self._host_paged_kv_indices = paged_kv_indices + # VSWA: build per-pool page index CUDA tensors so each layer can use # the indices that match its own pool's buffer. Tensors live on CUDA # so that forward_impl swap via copy_() is device-to-device (CUDA-graph @@ -1031,48 +1161,42 @@ def prepare(self) -> None: self._vswa_pool_indices_cache = { primary_pool_id: primary_buf, } + self._host_pool_indices = {primary_pool_id: paged_kv_indices} for pool_id in unique_pools: if pool_id == primary_pool_id: continue rep_layer = self._vswa_pool_to_rep_layer[pool_id] - pool_block_ids = self.kv_cache_manager.get_batch_cache_indices( - self.request_ids, - layer_idx=rep_layer, - num_blocks_per_seq=self.num_blocks) - pool_idx_list = [] - for i, blk_ids in enumerate(pool_block_ids): - pool_idx_list.extend(blk_ids[:self.num_blocks[i]]) - pool_indices = torch.tensor(pool_idx_list, dtype=torch.int32) + pool_indices = \ + self.kv_cache_manager.get_batch_cache_indices_flat( + self.request_ids, self.num_blocks, layer_idx=rep_layer) buf = getattr(self, f'_vswa_pool_buf_{pool_id}') buf[:pool_indices.size(0)].copy_(pool_indices, non_blocking=True) self._vswa_pool_indices_cache[pool_id] = buf + self._host_pool_indices[pool_id] = pool_indices self._vswa_active_pool_id = primary_pool_id - # number of tokens in the last cache block used by each sequence - num_blocks_cuda = ((kv_lens + self.page_size - 1) // self.page_size) - paged_kv_last_page_len = kv_lens - (num_blocks_cuda - - 1) * self.page_size + # number of tokens in the last cache block used by each sequence, + # derived on the host so no GPU arithmetic or sync is needed. + paged_kv_last_page_len = _to_int32_tensor(kv_lens_host - + (num_blocks - 1) * + self.page_size) self._paged_kv_last_page_len[:paged_kv_last_page_len.size(0)].copy_( paged_kv_last_page_len, non_blocking=True) # Ragged page table, see https://docs.flashinfer.ai/tutorials/kv_layout.html#page-table-layout # For decoding, this MUST be allocated ahead of time (for CUDA graphs). # Prefill is prepared here as well just for the sake of consistency. - paged_kv_indptr_decode = torch.cumsum( - torch.Tensor([0] + self.num_blocks[self.num_contexts:]).int(), - dtype=torch.int32, - dim=0, - ) + paged_kv_indptr_decode = _to_int32_tensor( + np.concatenate([[0], np.cumsum(num_blocks[self.num_contexts:])])) self.paged_kv_indptr_decode[:paged_kv_indptr_decode.size(0)].copy_( paged_kv_indptr_decode, non_blocking=True) + # Retain the host copy: decode plans hand it to flashinfer so that + # its indptr.cpu()/get_seq_lens calls do no D2H work. + self._host_paged_kv_indptr_decode = paged_kv_indptr_decode - paged_kv_indptr_prefill = torch.cumsum( - torch.tensor([0] + self.num_blocks[:self.num_contexts], - dtype=torch.int32), - dtype=torch.int32, - dim=0, - ) + paged_kv_indptr_prefill = _to_int32_tensor( + np.concatenate([[0], np.cumsum(num_blocks[:self.num_contexts])])) self.paged_kv_indptr_prefill[:paged_kv_indptr_prefill.size(0)].copy_( paged_kv_indptr_prefill, non_blocking=True) @@ -1088,11 +1212,13 @@ def prepare(self) -> None: .size(0)] else: assert not self.is_cuda_graph, "Cannot mix decode/prefill with CUDA graphs" - self.paged_kv_indptr = torch.cumsum( - torch.tensor([0] + self.num_blocks, dtype=torch.int32), - dtype=torch.int32, - dim=0, - ).cuda() + # Accumulate on the host and stage through pinned memory: .cuda() + # on an unpinned tensor is a synchronous H2D that stalls the + # executor thread behind in-flight kernels on every mixed step. + self.paged_kv_indptr = _to_int32_tensor( + np.concatenate([[0], + np.cumsum(num_blocks)])).to(device='cuda', + non_blocking=True) # For cross attention, num_tokens is 0 during decode, and we don't need to update kv cache. if self.num_tokens > 0: @@ -1165,6 +1291,8 @@ def prepare(self) -> None: src = self._vswa_pool_indices_cache[primary_pool_id][:total_blocks] self._paged_kv_indices[:total_blocks].copy_(src, non_blocking=True) self._vswa_active_pool_id = primary_pool_id + self._host_paged_kv_indices = \ + self._host_pool_indices[primary_pool_id] # CUDA graph + trtllm-gen: update _block_tables and _kv_lens_buffer # so the trtllm-gen decode kernel uses current page indices. @@ -1176,34 +1304,51 @@ def prepare(self) -> None: for plan_params, wrappers in self._plan_params_to_wrappers.items(): if plan_params.attention_mask_data is not None: continue - dw = wrappers.decode_wrapper - bt = getattr(dw, '_block_tables', None) - if bt is None: + decode_wrapper = wrappers.decode_wrapper + block_tables = getattr(decode_wrapper, '_block_tables', None) + if block_tables is None: continue pool_id = (head_dim_to_pool.get(plan_params.head_dim) if head_dim_to_pool else None) if pool_id is None: continue pool_buf = self._vswa_pool_indices_cache[pool_id] - bs, max_blk = bt.shape - new_bt = torch.zeros_like(bt) - offset = self.num_context_blocks - flat_offset = 0 - for i in range(min(bs, self.num_generations)): - n = decode_blocks[i] - ncopy = min(n, max_blk) - new_bt[i, :ncopy] = pool_buf[offset + flat_offset:offset + - flat_offset + ncopy] - flat_offset += n - bt.copy_(new_bt) - kv_lens_buf = getattr(dw, '_kv_lens_buffer', None) + batch_size, table_width = block_tables.shape + rows = min(batch_size, self.num_generations) + # Vectorized equivalent of a per-request copy loop: row i + # gets pool_buf[offset + row_starts[i] :] for its first + # min(num_blocks_per_row[i], table_width) columns, zero- + # padded — one gather + where instead of ~batch slice + # copies per pool per step. + num_blocks_per_row = torch.tensor( + decode_blocks[:rows], + dtype=torch.int64).to(device=block_tables.device, + non_blocking=True) + row_starts = torch.cumsum(num_blocks_per_row, + dim=0) - num_blocks_per_row + columns = torch.arange(table_width, + dtype=torch.int64, + device=block_tables.device) + mask = columns.unsqueeze(0) < num_blocks_per_row.clamp( + max=table_width).unsqueeze(1) + source_indices = (self.num_context_blocks + + row_starts.unsqueeze(1) + + columns.unsqueeze(0)).clamp( + max=pool_buf.numel() - 1) + new_block_tables = torch.zeros_like(block_tables) + new_block_tables[:rows] = torch.where( + mask, pool_buf[source_indices.reshape(-1)].view( + rows, table_width), new_block_tables[:rows]) + block_tables.copy_(new_block_tables) + kv_lens_buf = getattr(decode_wrapper, '_kv_lens_buffer', None) if kv_lens_buf is not None: - decode_kv_lens = kv_lens[self.num_contexts:] - kv_lens_buf[:self.num_generations].copy_( - decode_kv_lens[:self.num_generations], - non_blocking=True) - if self.num_generations < bs: - kv_lens_buf[self.num_generations:bs].zero_() + decode_kv_lens = _to_int32_tensor( + kv_lens_host[self.num_contexts:self.num_contexts + + self.num_generations]) + kv_lens_buf[:self.num_generations].copy_(decode_kv_lens, + non_blocking=True) + if self.num_generations < batch_size: + kv_lens_buf[self.num_generations:batch_size].zero_() if self.cross is not None and self.cross is not self: self.cross.prepare() @@ -1317,19 +1462,26 @@ def _plan_with_params(self, raise ValueError( "Multi-item masking not implemented for paged KV cache.") - if plan_params in self._plan_params_to_wrappers: - prefill_wrapper = self._plan_params_to_wrappers[ - plan_params].prefill_wrapper - else: - prefill_wrapper = flashinfer.BatchPrefillWithPagedKVCacheWrapper( - self.workspace_buffer, - self.kv_layout, - backend=flashinfer_backend, - qo_indptr_buf=self.qo_indptr, - paged_kv_indptr_buf=self.paged_kv_indptr_prefill, - paged_kv_indices_buf=self._paged_kv_indices, - paged_kv_last_page_len_buf=self._paged_kv_last_page_len, - use_cuda_graph=self.is_cuda_graph) + # One FlashInferWrappers per plan_params, mutated in place across + # replans: it carries the persistent decode block tables, whose + # device buffer address must survive replans for CUDA graphs. + wrappers = self._plan_params_to_wrappers.get(plan_params) + if wrappers is None: + wrappers = FlashInferWrappers(is_planned=False) + self._plan_params_to_wrappers[plan_params] = wrappers + + if wrappers.prefill_wrapper is None: + wrappers.prefill_wrapper = \ + flashinfer.BatchPrefillWithPagedKVCacheWrapper( + self.workspace_buffer, + self.kv_layout, + backend=flashinfer_backend, + qo_indptr_buf=self.qo_indptr, + paged_kv_indptr_buf=self.paged_kv_indptr_prefill, + paged_kv_indices_buf=self._paged_kv_indices, + paged_kv_last_page_len_buf=self._paged_kv_last_page_len, + use_cuda_graph=self.is_cuda_graph) + prefill_wrapper = wrappers.prefill_wrapper is_causal = plan_params.attention_mask_type == AttentionMaskType.causal @@ -1364,36 +1516,42 @@ def prefill_plan(): custom_mask=plan_params.attention_mask_data, ) - if plan_params in self._plan_params_to_wrappers: - decode_wrapper = self._plan_params_to_wrappers[ - plan_params].decode_wrapper - else: + if wrappers.decode_wrapper is None: use_tensor_cores = self._use_tensor_cores(plan_params) - decode_wrapper = flashinfer.BatchDecodeWithPagedKVCacheWrapper( - self.workspace_buffer, - self.kv_layout, - use_cuda_graph=self.is_cuda_graph, - paged_kv_indptr_buffer=self.paged_kv_indptr_decode, - paged_kv_indices_buffer=self._paged_kv_indices, - paged_kv_last_page_len_buffer=self._paged_kv_last_page_len, - use_tensor_cores=use_tensor_cores - or flashinfer_backend == "trtllm-gen", - backend=flashinfer_backend if flashinfer_backend != "fa2" else - ("fa2" if torch.cuda.get_device_capability(0) == ( - 9, 0) else "auto"), - ) + wrappers.decode_wrapper = \ + flashinfer.BatchDecodeWithPagedKVCacheWrapper( + self.workspace_buffer, + self.kv_layout, + use_cuda_graph=self.is_cuda_graph, + paged_kv_indptr_buffer=self.paged_kv_indptr_decode, + paged_kv_indices_buffer=self._paged_kv_indices, + paged_kv_last_page_len_buffer=self._paged_kv_last_page_len, + use_tensor_cores=use_tensor_cores + or flashinfer_backend == "trtllm-gen", + backend=flashinfer_backend + if flashinfer_backend != "fa2" else + ("fa2" if torch.cuda.get_device_capability(0) == ( + 9, 0) else "auto"), + ) + decode_wrapper = wrappers.decode_wrapper def decode_plan(): - paged_kv_indptr = torch.cumsum( - torch.Tensor([0] + - self.num_blocks[self.num_contexts:]).int().cuda(), - dtype=torch.int32, - dim=0, - ) assert decode_wrapper is not None + # Host int32 indptr (retained by prepare, which always runs + # before plans): flashinfer moves it to the device itself, and + # its indptr.cpu()/get_seq_lens calls stay free of D2H syncs. + paged_kv_indptr = self._host_paged_kv_indptr_decode + assert paged_kv_indptr is not None + # Persistent, host-built block table: skips flashinfer's + # per-request rebuild loop, whose GPU-scalar slice bounds cost + # one sync + one scalar D2H per generation request per plan. + block_tables = None + if decode_wrapper._backend == 'trtllm-gen': + block_tables = self._build_decode_block_tables( + plan_params, wrappers) decode_wrapper.plan( - paged_kv_indptr, + paged_kv_indptr[:self.num_generations + 1], self.paged_kv_indices[self.num_context_blocks:], self.paged_kv_last_page_len[self.num_contexts:], plan_params.num_heads, @@ -1405,6 +1563,7 @@ def decode_plan(): q_data_type=plan_params.q_dtype, kv_data_type=plan_params.kv_dtype, o_data_type=o_dtype, + block_tables=block_tables, ) # Must sync after append_paged_kv_cache and before plan. @@ -1416,11 +1575,7 @@ def decode_plan(): if self.num_generations > 0: decode_plan() - self._plan_params_to_wrappers[plan_params] = FlashInferWrappers( - prefill_wrapper=prefill_wrapper, - decode_wrapper=decode_wrapper, - is_planned=True, - ) + wrappers.is_planned = True return plan_params diff --git a/tensorrt_llm/_torch/pyexecutor/kv_cache_manager_v2.py b/tensorrt_llm/_torch/pyexecutor/kv_cache_manager_v2.py index 5d22a2d395f2..2f93f0fb028f 100644 --- a/tensorrt_llm/_torch/pyexecutor/kv_cache_manager_v2.py +++ b/tensorrt_llm/_torch/pyexecutor/kv_cache_manager_v2.py @@ -19,6 +19,7 @@ from dataclasses import fields from typing import TYPE_CHECKING, Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, Union +import numpy as np import torch from strenum import StrEnum @@ -1127,6 +1128,9 @@ def _prepare_page_table_tensor(self, index_mapper_capacity: int) -> None: ) else: self.kv_offset[pool_id] = 0 + # Plain-int mirror of index_scales so the per-step block-table build + # does not index a tensor per request (see get_batch_cache_indices*). + self._index_scale_ints: List[int] = self.index_scales.tolist() # Keep unused block offsets as safe block index 0. self.host_kv_cache_block_offsets = torch.zeros( @@ -2834,6 +2838,50 @@ def _get_batch_cache_indices_by_pool_id( return res + def get_batch_cache_indices_flat( + self, + request_ids: List[int], + num_blocks: List[int], + layer_idx: Optional[int] = None, + ) -> torch.Tensor: + """Concatenated per-request block tables, trimmed to real widths. + + Equivalent to concatenating + ``get_batch_cache_indices(request_ids, layer_idx)[i][:num_blocks[i]]`` + over all requests, but never materializes the padded-to-capacity + per-request lists: the page indices are host data maintained in place + by the KV cache, so only ``num_blocks[i]`` entries per request are + gathered and a single vectorized transform runs over the result. + + Returns a CPU int32 tensor (pinned when supported) ready for an + async H2D copy. + """ + if layer_idx is None: + pool_id = 0 + else: + pool_id = self.layer_to_pool_mapping_dict[self.layer_offsets[layer_idx]] + + scale = self._index_scale_ints[pool_id] + div_factor = self.kv_factor + + out_tensor = torch.empty(sum(num_blocks), dtype=torch.int32, pin_memory=prefer_pinned()) + out = out_tensor.numpy() + offset = 0 + for req_id, n in zip(request_ids, num_blocks): + out[offset : offset + n] = np.frombuffer( + self.kv_cache_map[req_id].get_base_page_indices(pool_id), + dtype=np.int32, + count=n, + ) + offset += n + + # One batched transform over the real widths; BAD_PAGE_INDEX entries + # (e.g. evicted out-of-window SWA blocks) stay untouched, matching + # get_batch_cache_indices. + valid = out != BAD_PAGE_INDEX + np.copyto(out, out * scale // div_factor, where=valid) + return out_tensor + def get_cache_bytes_per_token(self) -> int: data_roles = [Role.KEY] if self.kv_cache_type != CacheTypeCpp.SELFKONLY: diff --git a/tensorrt_llm/_torch/pyexecutor/resource_manager.py b/tensorrt_llm/_torch/pyexecutor/resource_manager.py index 2735622f6204..7ef8d802878b 100644 --- a/tensorrt_llm/_torch/pyexecutor/resource_manager.py +++ b/tensorrt_llm/_torch/pyexecutor/resource_manager.py @@ -1371,6 +1371,26 @@ def get_batch_cache_indices( result[i] = result[i][:num_blocks_per_seq[i]] return result + def get_batch_cache_indices_flat( + self, + request_ids: List[int], + num_blocks: List[int], + layer_idx: Optional[int] = None, + ) -> torch.Tensor: + """Concatenated per-request block tables, trimmed to real widths. + + Equivalent to concatenating + ``get_batch_cache_indices(request_ids, layer_idx)[i][:num_blocks[i]]`` + over all requests into one CPU int32 tensor; matches the interface + of ``KVCacheManagerV2.get_batch_cache_indices_flat``. + """ + block_ids_per_seq = self.get_batch_cache_indices( + request_ids, layer_idx=layer_idx, num_blocks_per_seq=num_blocks) + indices_list = [] + for block_ids, n in zip(block_ids_per_seq, num_blocks): + indices_list.extend(block_ids[:n]) + return torch.tensor(indices_list, dtype=torch.int32) + @staticmethod def _pack_beam_cache_indices(beams: List[List[int]]) -> List[int]: """Pack beam-search blocks into a flat beam-0 layout. From e4a8dda776eebe21021261c7b10dab8bcc2ca460 Mon Sep 17 00:00:00 2001 From: Yuhang He <58161490+heyuhhh@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:48:50 +0800 Subject: [PATCH 18/21] [None][fix] Fix fused mHC output reuse and extend compressor next_n (#16221) Signed-off-by: yuhangh <58161490+heyuhhh@users.noreply.github.com> --- .../compressorKernels/compressorKernels.cu | 70 ++++---- .../kernels/mhcKernels/mhcFusedHcKernel.cu | 8 +- cpp/tensorrt_llm/thop/compressorOp.cpp | 4 + .../sparse/deepseek_v4/deepseek_v4.py | 21 ++- tensorrt_llm/_torch/modules/mhc/mhc_cuda.py | 151 +++++----------- .../deepseek_v4/test_compressor_kernel.py | 53 ++++++ .../deepseek_v4/test_compressor_module.py | 88 +++++++++ tests/unittest/_torch/modules/test_mhc.py | 167 +++++++++++++++++- 8 files changed, 410 insertions(+), 152 deletions(-) diff --git a/cpp/tensorrt_llm/kernels/compressorKernels/compressorKernels.cu b/cpp/tensorrt_llm/kernels/compressorKernels/compressorKernels.cu index 66eabae9394c..1457efeb3138 100644 --- a/cpp/tensorrt_llm/kernels/compressorKernels/compressorKernels.cu +++ b/cpp/tensorrt_llm/kernels/compressorKernels/compressorKernels.cu @@ -64,7 +64,6 @@ #include "tensorrt_llm/kernels/compressorKernels/compressorKernels.h" #include "tensorrt_llm/common/assert.h" -#include #include #include #include @@ -213,8 +212,8 @@ enum class CacheScaleType // ============================================================================ // Decode Kernel: pagedKvCompressKernel // -// Template: -// NEXT_N: number of new tokens per sequence in this decode step (1-4) +// Template: +// NEXT_N: number of new tokens per sequence in this decode step (1-8) // // Grid: (batch_size) — one block per batch element // Block: (NTHRD) where NTHRD = HEAD_DIM / VEC (>= 32 threads) @@ -623,9 +622,10 @@ __global__ void pagedKvCompressKernel(void const* __restrict__ kv_score_raw, flo // KV_EB — kv_score element bytes in {2 (bf16), 4 (fp32)} // STATE_EB — paged state element bytes in {2 (bf16), 4 (fp32)} // CR — COMPRESS_RATIO in {4, 128} -// NN — NEXT_N (new tokens / decode step) in {1..4} -// NRW — NUM_RED_WARPS — 4 only when CR=128 (multi-warp Phase 3 reduce -// hides DRAM latency for the heavier R=128 chunk); 1 otherwise. +// NN — NEXT_N (new tokens / decode step) in {1..8} +// NRW — NUM_RED_WARPS — 4 when CR=128 and NN<=4 (multi-warp Phase 3 +// reduction hides DRAM latency for the heavier R=128 chunk); +// 1 when CR=4 or when CR=128 and NN>=5. // // Multi-warp SMEM budget (per block): 3 * NRW * ELEM_PER_BLOCK * sizeof(float). // HD=128: ELEM_PER_BLOCK=128 → 6 KB @@ -634,22 +634,30 @@ __global__ void pagedKvCompressKernel(void const* __restrict__ kv_score_raw, flo // ============================================================================ // Per-axis fan-outs (used to keep the master list compact). -#define FOREACH_DECODE_NN(F, HD, KV, ST, CR, NRW) \ +#define FOREACH_DECODE_NN_1_4(F, HD, KV, ST, CR, NRW) \ F(HD, KV, ST, CR, 1, NRW) F(HD, KV, ST, CR, 2, NRW) F(HD, KV, ST, CR, 3, NRW) F(HD, KV, ST, CR, 4, NRW) -#define FOREACH_DECODE_DTYPE(F, HD, CR, NRW) \ - FOREACH_DECODE_NN(F, HD, 2, 2, CR, NRW) \ - FOREACH_DECODE_NN(F, HD, 2, 4, CR, NRW) \ - FOREACH_DECODE_NN(F, HD, 4, 2, CR, NRW) FOREACH_DECODE_NN(F, HD, 4, 4, CR, NRW) +#define FOREACH_DECODE_NN_5_8(F, HD, KV, ST, CR, NRW) \ + F(HD, KV, ST, CR, 5, NRW) F(HD, KV, ST, CR, 6, NRW) F(HD, KV, ST, CR, 7, NRW) F(HD, KV, ST, CR, 8, NRW) +#define FOREACH_DECODE_DTYPE_1_4(F, HD, CR, NRW) \ + FOREACH_DECODE_NN_1_4(F, HD, 2, 2, CR, NRW) \ + FOREACH_DECODE_NN_1_4(F, HD, 2, 4, CR, NRW) \ + FOREACH_DECODE_NN_1_4(F, HD, 4, 2, CR, NRW) FOREACH_DECODE_NN_1_4(F, HD, 4, 4, CR, NRW) +#define FOREACH_DECODE_DTYPE_5_8(F, HD, CR, NRW) \ + FOREACH_DECODE_NN_5_8(F, HD, 2, 2, CR, NRW) \ + FOREACH_DECODE_NN_5_8(F, HD, 2, 4, CR, NRW) \ + FOREACH_DECODE_NN_5_8(F, HD, 4, 2, CR, NRW) FOREACH_DECODE_NN_5_8(F, HD, 4, 4, CR, NRW) +#define FOREACH_DECODE_DTYPE_1_8(F, HD, CR, NRW) \ + FOREACH_DECODE_DTYPE_1_4(F, HD, CR, NRW) FOREACH_DECODE_DTYPE_5_8(F, HD, CR, NRW) // Master list. Order does not matter; the dispatcher walks linearly. // clang-format off #define FOREACH_DECODE_CONFIG(F) \ - /* CR=4: single-warp only (small reduction; multi-warp would over-subscribe). */ \ - FOREACH_DECODE_DTYPE(F, 128, 4, 1) FOREACH_DECODE_DTYPE(F, 512, 4, 1) \ - /* CR=128: single-warp fallback (covers next_n>4 path which currently isn't reached). */ \ - FOREACH_DECODE_DTYPE(F, 128, 128, 1) FOREACH_DECODE_DTYPE(F, 512, 128, 1) \ - /* CR=128: multi-warp fast path. Used whenever next_n <= 4 (i.e. MTP-3 and below). */ \ - FOREACH_DECODE_DTYPE(F, 128, 128, 4) FOREACH_DECODE_DTYPE(F, 512, 128, 4) + /* CR=4: single-warp for next_n 1..8 (small reduction; multi-warp would over-subscribe). */ \ + FOREACH_DECODE_DTYPE_1_8(F, 128, 4, 1) FOREACH_DECODE_DTYPE_1_8(F, 512, 4, 1) \ + /* CR=128: single-warp fallback for next_n 5..8. */ \ + FOREACH_DECODE_DTYPE_5_8(F, 128, 128, 1) FOREACH_DECODE_DTYPE_5_8(F, 512, 128, 1) \ + /* CR=128: multi-warp fast path for next_n 1..4. */ \ + FOREACH_DECODE_DTYPE_1_4(F, 128, 128, 4) FOREACH_DECODE_DTYPE_1_4(F, 512, 128, 4) // clang-format on // Generate explicit template instantiations. @@ -663,7 +671,7 @@ FOREACH_DECODE_CONFIG(INST_DECODE) // Decode Launch Wrapper // // Dispatches to the correct template instantiation based on head_dim, elem_bytes, -// and next_n (number of new tokens per decode step, capped at 4). +// and next_n (number of new tokens per decode step, in the range 1..8). // Grid is 2D: (batch_size, head_blocks) where head_blocks = NTHRD_BASE / 32. // For HD=512 bf16: head_blocks=2; for HD=128 bf16: head_blocks=1. // ============================================================================ @@ -679,6 +687,10 @@ void pagedKvCompressLaunch(void const* kv_score, float const* ape, void* paged_k TLLM_CHECK_WITH_INFO( (kv_score_elem_bytes == 2 || kv_score_elem_bytes == 4) && (state_elem_bytes == 2 || state_elem_bytes == 4), "pagedKvCompressLaunch only supports bf16/fp32 kv_score and paged state"); + constexpr int kMinNextN = 1; + constexpr int kMaxNextN = 8; + TLLM_CHECK_WITH_INFO(next_n >= kMinNextN && next_n <= kMaxNextN, + "pagedKvCompressLaunch only supports next_n in [1, 8], got %d", next_n); // Compute HEAD_BLOCKS: mirrors the compile-time constant in the kernel. // VEC = max_vec if HEAD_DIM/max_vec >= 32, else HEAD_DIM/32. @@ -693,10 +705,9 @@ void pagedKvCompressLaunch(void const* kv_score, float const* ape, void* paged_k // For large compress_ratio, use 4-warp parallel reduction to cut the serial // softmax loop from COMPRESS_RATIO iterations to COMPRESS_RATIO/4 per warp. - // Supported configs: CR=128, (HD=128 or HD=512), NEXT_N in 1..4. NEXT_N>2 - // is required for MTP-3 decode (each step accepts up to 4 tokens per request); - // without multi-warp the slow path is a single warp doing 128 serial paged - // loads, which is DRAM-latency-bound (no other warps to hide it). + // The multi-warp path supports CR=128, (HD=128 or HD=512), and NEXT_N in + // 1..4. Larger NEXT_N values use a single reduction warp to limit block + // size while still processing every new token exactly. // // smem per block = 3 * MULTI_WARP * ELEM_PER_BLOCK * sizeof(float) // where ELEM_PER_BLOCK = nthreads_inner * vec = HEAD_DIM / HEAD_BLOCKS. @@ -712,15 +723,11 @@ void pagedKvCompressLaunch(void const* kv_score, float const* ape, void* paged_k dim3 grid(batch_size, head_blocks); - // Clamp the runtime next_n into the supported range; configs above 4 fall - // back to the NN=4 instantiation (matches the prior `default:` arm). - int const next_n_dispatch = std::min(next_n, 4); - // Walk FOREACH_DECODE_CONFIG until we find a matching (HD, KV, ST, CR, NN, NRW) // tuple, then launch that instantiation. Any unsupported tuple bails via TLLM_THROW. #define TRY_LAUNCH(HD, KV_EB, STATE_EB, CR, NN, NRW) \ if (head_dim == HD && kv_score_elem_bytes == KV_EB && state_elem_bytes == STATE_EB && compress_ratio == CR \ - && next_n_dispatch == NN && num_red_warps == NRW) \ + && next_n == NN && num_red_warps == NRW) \ { \ pagedKvCompressKernel<<>>(kv_score, ape, \ paged_kv, paged_score, block_table_kv, block_table_score, output, kv_lens, cu_seq_lens, cu_kv_comp, \ @@ -732,12 +739,15 @@ void pagedKvCompressLaunch(void const* kv_score, float const* ape, void* paged_k TLLM_THROW( "pagedKvCompressLaunch: no matching instantiation for HD=%d, kv_eb=%d, state_eb=%d, CR=%d, NN=%d, NRW=%d", - head_dim, kv_score_elem_bytes, state_elem_bytes, compress_ratio, next_n_dispatch, num_red_warps); + head_dim, kv_score_elem_bytes, state_elem_bytes, compress_ratio, next_n, num_red_warps); } #undef FOREACH_DECODE_CONFIG -#undef FOREACH_DECODE_DTYPE -#undef FOREACH_DECODE_NN +#undef FOREACH_DECODE_DTYPE_1_8 +#undef FOREACH_DECODE_DTYPE_5_8 +#undef FOREACH_DECODE_DTYPE_1_4 +#undef FOREACH_DECODE_NN_5_8 +#undef FOREACH_DECODE_NN_1_4 // ============================================================================ // Prefill Kernel: prefillReductionKernel diff --git a/cpp/tensorrt_llm/kernels/mhcKernels/mhcFusedHcKernel.cu b/cpp/tensorrt_llm/kernels/mhcKernels/mhcFusedHcKernel.cu index 3be14448766b..234318b769f8 100644 --- a/cpp/tensorrt_llm/kernels/mhcKernels/mhcFusedHcKernel.cu +++ b/cpp/tensorrt_llm/kernels/mhcKernels/mhcFusedHcKernel.cu @@ -187,13 +187,13 @@ static CUtensorMap makeTma2D(void* base, CUtensorMapDataType dtype, uint64_t gme // CUDA-graph capture: cuTensorMapEncodeTiled is a pure host function that does // not record any stream operation, so cache miss inside capture is safe. The // descriptor is passed by value as __grid_constant__; the recorded graph node -// holds those bytes and replays correctly under workspace-stable replay -// (already enforced by _FusedHcWorkspaceCache in mhc_cuda.py). +// holds those bytes and replays correctly while captured tensor addresses +// remain stable for the lifetime of the graph. // // Eviction: LRU bounded to kTmaDescCacheCap entries per thread. Eager mode // without CUDA-graph capture sees the PyTorch caching allocator hand out -// fresh `base` pointers when the workspace cache misses, so the unbounded -// version would grow on every shape transition. 128 entries × ~256 B = ~32 KB +// fresh `base` pointers as public outputs are allocated, so the unbounded +// version would grow across shape transitions. 128 entries × ~256 B = ~32 KB // per host thread — fits in L1, sized to cover the working set of any single // model (~4-8 distinct shapes × 4 descriptors each = O(20) live, with // headroom for shape transitions). diff --git a/cpp/tensorrt_llm/thop/compressorOp.cpp b/cpp/tensorrt_llm/thop/compressorOp.cpp index 42083eb7aab3..5fdfb5a85806 100644 --- a/cpp/tensorrt_llm/thop/compressorOp.cpp +++ b/cpp/tensorrt_llm/thop/compressorOp.cpp @@ -38,6 +38,10 @@ void compressorPagedKvCompressOp(torch::Tensor kv_score, // [m, 2*state_dim] bf1 torch::Tensor cu_kv_comp, // [bsz+1] int32 int64_t batch_size, int64_t page_size, int64_t head_dim, int64_t compress_ratio, int64_t next_n) { + constexpr int64_t kMinNextN = 1; + constexpr int64_t kMaxNextN = 8; + TORCH_CHECK(next_n >= kMinNextN && next_n <= kMaxNextN, "next_n must be in [1, 8], got ", next_n); + auto stream = at::cuda::getCurrentCUDAStream(); int kv_score_eb = static_cast(kv_score.element_size()); int state_eb = static_cast(paged_kv.element_size()); diff --git a/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py b/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py index 7bf02288fff2..52f16c84ffe9 100644 --- a/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py +++ b/tensorrt_llm/_torch/attention_backend/sparse/deepseek_v4/deepseek_v4.py @@ -819,6 +819,7 @@ def prepare_compressed_kv_metadata( } self._compute_gen_compressed_position_ids( self.past_kv_lens_cuda, + self.cu_new_comp_kv_cuda, self.compressed_position_ids_cuda, num_contexts, num_generations, @@ -925,6 +926,7 @@ def _compute_token_positions( @maybe_compile(dynamic=True, options={"max-autotune": True}) def _compute_gen_compressed_position_ids( past_kv_lens_bufs: Dict[int, torch.Tensor], + cu_new_comp_kv_bufs: Dict[int, torch.Tensor], compressed_position_ids_bufs: Dict[int, torch.Tensor], num_contexts: int, num_generations: int, @@ -932,7 +934,12 @@ def _compute_gen_compressed_position_ids( compress_ratios: list, gen_output_offsets: Dict[int, int], ): - """Generation compressed position IDs. + """Generation position IDs in exact compact compressor output order. + + The decode kernel packs valid outputs according to ``cu_new_comp_kv``. + The corresponding request and local offset are recovered for every + compact output index. Reserved slots after the compact prefix are masked + during postprocess, so their position IDs are irrelevant. gen_output_offsets: dict mapping compress_ratio -> Python int offset, pre-extracted by the caller to avoid tensor-scalar .item() inside @@ -940,13 +947,17 @@ def _compute_gen_compressed_position_ids( device = past_kv_lens_bufs[compress_ratios[0]].device batch_size = num_contexts + num_generations for compress_ratio in compress_ratios: - gen_past = past_kv_lens_bufs[compress_ratio][num_contexts:batch_size] new_gen_comp = (num_gen_tokens_per_seq + compress_ratio - 1) // compress_ratio - gen_offsets = torch.arange(new_gen_comp, dtype=torch.int32, device=device) - gen_pos = gen_past.unsqueeze(1) + gen_offsets.unsqueeze(0) gen_comp = num_generations * new_gen_comp - result = (gen_pos.reshape(-1) * compress_ratio).to(torch.int) output_offset = gen_output_offsets[compress_ratio] + cu_new_comp = cu_new_comp_kv_bufs[compress_ratio] + output_idx = torch.arange(gen_comp, dtype=torch.int32, device=device) + output_offset + # Search the zero-offset prefix: Inductor miscompiles searchsorted on cu_new_comp[1:]. + req_idx = torch.searchsorted(cu_new_comp[: batch_size + 1], output_idx, right=True) - 1 + req_idx = req_idx.clamp(min=num_contexts, max=batch_size - 1) + offset_in_req = output_idx - cu_new_comp[req_idx] + past_kv_lens = past_kv_lens_bufs[compress_ratio] + result = ((past_kv_lens[req_idx] + offset_in_req) * compress_ratio).to(torch.int) compressed_position_ids_bufs[compress_ratio][ output_offset : output_offset + gen_comp ] = result diff --git a/tensorrt_llm/_torch/modules/mhc/mhc_cuda.py b/tensorrt_llm/_torch/modules/mhc/mhc_cuda.py index 6f048f1aa2a4..d40dce91c3db 100644 --- a/tensorrt_llm/_torch/modules/mhc/mhc_cuda.py +++ b/tensorrt_llm/_torch/modules/mhc/mhc_cuda.py @@ -525,6 +525,7 @@ def mhc_post_mapping_cuda( "fused_all_mma": 2, # 1-kernel tf32 tcgen05 all-in-one (Path D) "fused_all_fma": 3, # 1-kernel fp32 FMA all-in-one (Path F) } +_FUSED_HC_MMA_BLOCK_M = 64 # The SM100/tcgen05 MMA fused-HC C++ kernels are statically instantiated. # FMA fused-HC paths use runtime hidden_size, but MMA paths must be explicitly @@ -697,101 +698,34 @@ def _fused_hc_call( ) -class _FusedHcWorkspaceCache: - """Size-keyed bounded LRU for the 4 outputs + 3 workspaces of mhc_fused_hc. - - The 4 outputs are consumed by the caller (so they can't alias across - calls at different B), but repeatedly calling ``torch.empty`` for each - call inside a CUDA-graph-captured inference loop is wasteful. Keyed on - ``(B, ws_ks, tile_m, device)``: same-shape calls reuse the previously - allocated buffers; tensors are stable across graph captures (same ptr - under the torch allocator's retained block). - - Two bounds keep this from ballooning: - - 1. ``_CACHE_MAX_B``: a per-call threshold. Only cache when the request's - residual_cur footprint is modest (B * n * hidden * 2 bytes; e.g. at - n=4 hidden=4096 that's 32 KB/token, so a 256-token cap = 8 MB/entry). - Prefill shapes (B in the tens of thousands) flow straight through to - ``torch.empty``, which the torch caching allocator already keeps - cheap on repeated calls. - 2. ``_maxsize``: LRU cap on the number of cached entries. Covers the - discrete CUDA-graph decode batch sizes plus a few stragglers; decode - is the only regime that actually benefits from the cache. - - Without these bounds every distinct prefill B leaks ~B * n * hidden * 2 - bytes (≈1.3 GB at B=32768, n=4, hidden=4096). Under a prefill ramp-up - admitting one new ctx request per iter, the leak reaches tens of GB per - rank within a dozen iters and blows past HBM. - """ - - __slots__ = ("n", "hidden_size", "_cache", "_maxsize") - - # Up to 48 distinct entries — covers the 35 CUDA-graph decode buckets - # plus headroom. Each entry at B<=256 is under ~10 MB. - DEFAULT_MAXSIZE = 48 - # Skip the cache above this B; prefill rides the torch allocator. - _CACHE_MAX_B = 256 - - def __init__(self, n: int, hidden_size: int, maxsize: int = DEFAULT_MAXSIZE): - self.n = n - self.hidden_size = hidden_size - self._maxsize = maxsize - from collections import OrderedDict - - self._cache: "OrderedDict" = OrderedDict() - - def get(self, B: int, num_k_splits: int, tile_m: int, device): - n = self.n - hidden_size = self.hidden_size - ws_ks = max(1, num_k_splits) - tm = max(1, tile_m) - m_batches = (B + tm - 1) // tm - n2 = n * n - shape_n = n * (2 + n) - - def _alloc(): - residual_cur = torch.empty((B, n, hidden_size), dtype=torch.bfloat16, device=device) - post_mix_cur = torch.empty((B, n), dtype=torch.float32, device=device) - comb_mix_cur = torch.empty((B, n2), dtype=torch.float32, device=device) - layer_input_cur = torch.empty((B, hidden_size), dtype=torch.bfloat16, device=device) - if ws_ks == 1: - y_acc_ws = torch.empty((B, shape_n), dtype=torch.float32, device=device) - r_acc_ws = torch.empty((B,), dtype=torch.float32, device=device) - else: - y_acc_ws = torch.empty((ws_ks, B, shape_n), dtype=torch.float32, device=device) - r_acc_ws = torch.empty((ws_ks, B), dtype=torch.float32, device=device) - done_counter_ws = torch.empty((m_batches,), dtype=torch.int32, device=device) - return ( - residual_cur, - post_mix_cur, - comb_mix_cur, - layer_input_cur, - y_acc_ws, - r_acc_ws, - done_counter_ws, - ) - - if B > self._CACHE_MAX_B: - return _alloc() - - key = (B, ws_ks, m_batches, device) - hit = self._cache.get(key) - if hit is not None: - self._cache.move_to_end(key) - return hit - entry = _alloc() - self._cache[key] = entry - if len(self._cache) > self._maxsize: - self._cache.popitem(last=False) - return entry - - -def _alloc_fused_hc_outputs( - B: int, n: int, hidden_size: int, num_k_splits: int, tile_m: int, device -): - """Uncached fallback (kept for API compatibility).""" - return _FusedHcWorkspaceCache(n=n, hidden_size=hidden_size).get(B, num_k_splits, tile_m, device) +def _alloc_fused_hc_scratch( + backend: str, + B: int, + n: int, + num_k_splits: int, + tile_m: int, + device: torch.device, +) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + """Allocate backend-specific scratch for one fused-HC invocation.""" + shape_n = n * (2 + n) + + if backend == "fused_half_fma" and num_k_splits > 1: + y_acc_ws = torch.empty((num_k_splits, B, shape_n), dtype=torch.float32, device=device) + r_acc_ws = torch.empty((num_k_splits, B), dtype=torch.float32, device=device) + else: + y_acc_ws = torch.empty((B, shape_n), dtype=torch.float32, device=device) + r_acc_ws = torch.empty((B,), dtype=torch.float32, device=device) + + if backend == "fused_all_mma": + num_done_counters = (B + _FUSED_HC_MMA_BLOCK_M - 1) // _FUSED_HC_MMA_BLOCK_M + elif backend == "fused_all_fma": + tokens_per_cta = max(1, tile_m) + num_done_counters = (B + tokens_per_cta - 1) // tokens_per_cta + else: + # The half-fused backends do not consume this argument. + num_done_counters = 1 + done_counter_ws = torch.empty((num_done_counters,), dtype=torch.int32, device=device) + return y_acc_ws, r_acc_ws, done_counter_ws # Fallback tactic: backend, tile_n, num_k_splits, bigfuse_bs, tile_m. @@ -851,8 +785,6 @@ class MhcFusedHcRunner(TunableRunner): # comb_mix_prev (input[3]) dim 0 = M ConstraintSpec(input_idx=3, dim_idx=0, infer_shape=lambda shapes: shapes[0][0]), ), - # TODO: re-enable distributed_tuning_strategy=PARALLEL once - # _FusedHcWorkspaceCache no longer keys on chosen-tactic fields. ) def __init__( @@ -872,7 +804,6 @@ def __init__( self.hc_sinkhorn_eps = hc_sinkhorn_eps self.hc_post_mult_value = hc_post_mult_value self.sinkhorn_repeat = sinkhorn_repeat - self._ws_cache = _FusedHcWorkspaceCache(n=n, hidden_size=hidden_size) def unique_id(self): return (self.n, self.hidden_size) @@ -963,15 +894,18 @@ def forward(self, inputs, *, tactic=-1, **kwargs): norm_weight = norm_weight.contiguous() B = residual_prev.shape[0] - ( - residual_cur, - post_mix_cur, - comb_mix_cur, - layer_input_cur, - y_acc_ws, - r_acc_ws, - done_counter_ws, - ) = self._ws_cache.get(B, num_k_splits, tile_m, x_prev.device) + residual_cur = torch.empty_like(residual_prev) + post_mix_cur = torch.empty((B, self.n), dtype=torch.float32, device=x_prev.device) + comb_mix_cur = torch.empty((B, self.n * self.n), dtype=torch.float32, device=x_prev.device) + layer_input_cur = torch.empty_like(x_prev) + y_acc_ws, r_acc_ws, done_counter_ws = _alloc_fused_hc_scratch( + backend=backend, + B=B, + n=self.n, + num_k_splits=num_k_splits, + tile_m=tile_m, + device=x_prev.device, + ) _fused_hc_call( backend_code, @@ -1008,8 +942,7 @@ def forward(self, inputs, *, tactic=-1, **kwargs): # Process-wide runner cache keyed on the mHC configuration. Avoids recreating -# a MhcFusedHcRunner (and its workspace cache) on every call, which would also -# defeat the workspace cache inside the runner. +# a MhcFusedHcRunner on every call. _fused_hc_runner_cache: dict = {} diff --git a/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_kernel.py b/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_kernel.py index 9f0c6e0b349d..de285d9abc0f 100644 --- a/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_kernel.py +++ b/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_kernel.py @@ -1407,8 +1407,13 @@ def test_prefill_then_decode( MTP_CONFIGS = [ pytest.param(1, 4, 128, True, 4, id="overlap_hd128_next4"), pytest.param(1, 4, 512, True, 3, id="overlap_hd512_next3"), + pytest.param(1, 4, 512, True, 8, id="overlap_hd512_next8"), pytest.param(2, 128, 128, False, 4, id="basic_hd128_multi_batch_next4"), pytest.param(1, 128, 512, False, 4, id="basic_hd512_next4"), + pytest.param(1, 128, 512, False, 5, id="basic_hd512_next5"), + pytest.param(1, 128, 512, False, 6, id="basic_hd512_next6"), + pytest.param(1, 128, 512, False, 7, id="basic_hd512_next7"), + pytest.param(1, 128, 512, False, 8, id="basic_hd512_next8"), ] @@ -1526,6 +1531,54 @@ def test_decode_mtp(batch_size, compress_ratio, head_dim, overlap, next_n): step += actual_n +@pytest.mark.parametrize( + "next_n,storage_next_n", + [ + pytest.param(0, 1, id="zero"), + pytest.param(9, 9, id="above_max"), + pytest.param((1 << 32) + 1, 1, id="large_int64"), + ], +) +def test_decode_rejects_unsupported_next_n(next_n, storage_next_n): + """Decode rejects next_n outside the supported range before narrowing.""" + batch_size, compress_ratio, head_dim = 1, 4, 128 + state_dim = 2 * head_dim + page_size = 8 + max_blocks = (storage_next_n + page_size - 1) // page_size + num_outputs = max(1, (storage_next_n + compress_ratio - 1) // compress_ratio) + + kv_score = torch.zeros(storage_next_n, 2 * state_dim, device="cuda") + ape = torch.zeros(compress_ratio, state_dim, device="cuda") + paged_kv = torch.zeros(max_blocks, page_size, state_dim, device="cuda") + paged_score = torch.zeros_like(paged_kv) + block_table = torch.arange(max_blocks, device="cuda", dtype=torch.int32).unsqueeze(0) + output = torch.empty(num_outputs, head_dim, device="cuda", dtype=torch.bfloat16) + kv_lens = torch.tensor([storage_next_n], device="cuda", dtype=torch.int32) + start_pos = torch.zeros(batch_size, device="cuda", dtype=torch.int32) + cu_seq_lens = torch.tensor([0, storage_next_n], device="cuda", dtype=torch.int32) + cu_outputs = torch.tensor([0, num_outputs], device="cuda", dtype=torch.int32) + + with pytest.raises(RuntimeError, match=r"next_n.*\[1, 8\]"): + decode_kernel( + kv_score, + ape, + kv_lens, + start_pos, + cu_seq_lens, + cu_outputs, + output, + paged_kv, + paged_score, + block_table, + block_table, + compress_ratio, + head_dim, + page_size, + next_n=next_n, + ) + torch.cuda.synchronize() + + CHUNKED_PREFILL_CONFIGS = [ # (compress_ratio, head_dim, overlap, batch_size, start_pos, new_seqlen) # overlap=True, aligned start_pos diff --git a/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_module.py b/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_module.py index 6a005060ee18..0784d7256264 100644 --- a/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_module.py +++ b/tests/unittest/_torch/attention/sparse/deepseek_v4/test_compressor_module.py @@ -39,6 +39,7 @@ DEEPSEEK_V4_SLIDING_ATTENTION, DeepseekV4AttentionType, DeepseekV4Indexer, + DeepseekV4TrtllmAttentionMetadata, ) from tensorrt_llm._torch.modules.rotary_embedding import RopeParams from tensorrt_llm._torch.pyexecutor.llm_request import LlmRequest, LlmRequestState @@ -361,6 +362,93 @@ def forward(self, x: torch.Tensor, start_pos: int, freqs_cis: torch.Tensor): ROPE_THETA, ROPE_FACTOR, BETA_FAST, BETA_SLOW = 40000.0, 4, 32, 1 +def _active_compressed_position_ids( + compress_ratio, num_contexts, num_gen_tokens_per_seq, cached_tokens, kv_lens +): + """Run the real metadata helpers and return IDs consumed by postprocess.""" + batch_size = len(cached_tokens) + num_generations = batch_size - num_contexts + cached_tokens = torch.tensor(cached_tokens, dtype=torch.int32, device=DEVICE) + kv_lens = torch.tensor(kv_lens, dtype=torch.int32, device=DEVICE) + + metadata = object.__new__(DeepseekV4TrtllmAttentionMetadata) + metadata.num_contexts = num_contexts + metadata.num_generations = num_generations + metadata.num_gen_tokens_per_seq = num_gen_tokens_per_seq + metadata._compress_ratios_sorted = [compress_ratio] + metadata.compressed_kv_lens_cuda = { + compress_ratio: torch.empty(batch_size, dtype=torch.int32, device=DEVICE) + } + metadata.past_kv_lens_cuda = { + compress_ratio: torch.empty(batch_size, dtype=torch.int32, device=DEVICE) + } + metadata.new_comp_kv_lens_cuda = { + compress_ratio: torch.empty(batch_size, dtype=torch.int32, device=DEVICE) + } + metadata.cu_new_comp_kv_cuda = { + compress_ratio: torch.empty(batch_size + 1, dtype=torch.int32, device=DEVICE) + } + + ctx_comp = ( + (kv_lens[:num_contexts] // compress_ratio) + - (cached_tokens[:num_contexts] // compress_ratio) + ).sum() + gen_slots = num_generations * ((num_gen_tokens_per_seq + compress_ratio - 1) // compress_ratio) + total_slots = int(ctx_comp.item()) + gen_slots + metadata.compressed_position_ids_cuda = { + compress_ratio: torch.full((total_slots,), -1, dtype=torch.int32, device=DEVICE) + } + compressed_mask = {compress_ratio: torch.empty(total_slots, dtype=torch.bool, device=DEVICE)} + + metadata.prepare_compressed_kv_metadata(kv_lens, cached_tokens) + metadata._compute_compressed_mask( + metadata.new_comp_kv_lens_cuda, + metadata.cu_new_comp_kv_cuda, + compressed_mask, + batch_size, + {compress_ratio: total_slots}, + [compress_ratio], + ) + + position_ids = metadata.compressed_position_ids_cuda[compress_ratio] + return position_ids[compressed_mask[compress_ratio]].cpu().tolist() + + +@pytest.mark.parametrize( + "compress_ratio,next_n,cached_tokens,expected_position_ids", + [ + pytest.param(4, 5, [4, 4], [4, 4], id="cr4_next5"), + pytest.param(4, 6, [4, 7], [4, 4, 8], id="cr4_next6_mixed"), + pytest.param(4, 7, [4, 6, 7], [4, 4, 8, 4, 8], id="cr4_next7_mixed"), + pytest.param(128, 8, [120, 128, 383], [0, 256], id="cr128_boundary_mixed"), + ], +) +def test_generation_position_ids_follow_compact_compressor_output( + compress_ratio, next_n, cached_tokens, expected_position_ids +): + """Active postprocess rows use IDs in exact cu_new_comp ownership order.""" + kv_lens = [cached + next_n for cached in cached_tokens] + + actual_position_ids = _active_compressed_position_ids( + compress_ratio, 0, next_n, cached_tokens, kv_lens + ) + + assert actual_position_ids == expected_position_ids + + +def test_mixed_context_generation_position_ids_follow_compact_output(): + """Generation IDs remain compact after an exact context output prefix.""" + actual_position_ids = _active_compressed_position_ids( + compress_ratio=4, + num_contexts=1, + num_gen_tokens_per_seq=5, + cached_tokens=[0, 4, 4], + kv_lens=[8, 9, 9], + ) + + assert actual_position_ids == [0, 4, 4, 4] + + def precompute_freqs_cis( dim, seqlen, original_seq_len, base, factor, beta_fast, beta_slow ) -> torch.Tensor: diff --git a/tests/unittest/_torch/modules/test_mhc.py b/tests/unittest/_torch/modules/test_mhc.py index 15b33cfdaa84..66387c59accd 100644 --- a/tests/unittest/_torch/modules/test_mhc.py +++ b/tests/unittest/_torch/modules/test_mhc.py @@ -954,10 +954,8 @@ def _inputs(): cur_module.base, ] - # Eager reference — runner's workspace cache reuses output tensors across - # calls with matching shape, so eager_out and graph_out alias the same - # storage. Clone eager_out so we can compare after the graph replay - # overwrites the workspace. + # Clone the eager result into an immutable golden before warmup and graph + # capture exercise additional allocations. eager_raw = runner(inputs=_inputs(), tactic=tactic) eager_out = tuple(t.clone() for t in eager_raw) @@ -1055,6 +1053,167 @@ def _make_fused_hc_runner_case(n: int, hidden_size: int, hc_mult: int, seed: int return runner, inputs +@pytest.mark.parametrize( + "backend,num_k_splits,tile_m,expected_shapes", + [ + ("fused_half_mma", 56, 1, ((129, 24), (129,), (1,))), + ("fused_half_fma", 4, 1, ((4, 129, 24), (4, 129), (1,))), + ("fused_all_mma", 56, 1, ((129, 24), (129,), (3,))), + ("fused_all_fma", 2, 4, ((129, 24), (129,), (33,))), + ], +) +def test_mhc_fused_hc_allocates_minimal_scratch( + backend: str, + num_k_splits: int, + tile_m: int, + expected_shapes: tuple[tuple[int, ...], ...], +) -> None: + from tensorrt_llm._torch.modules.mhc import mhc_cuda + + alloc_scratch = mhc_cuda._alloc_fused_hc_scratch + + scratch = alloc_scratch( + backend=backend, + B=129, + n=4, + num_k_splits=num_k_splits, + tile_m=tile_m, + device=torch.device("cpu"), + ) + + assert tuple(tuple(tensor.shape) for tensor in scratch) == expected_shapes + + +def test_mhc_fused_hc_preserves_chained_inputs(): + """A fused-HC call must not overwrite state returned by the previous call.""" + runner, inputs = _make_fused_hc_runner_case(n=6, hidden_size=7168, hc_mult=4, seed=61) + tactic = ("fused_half_fma", 2, 4, 512, 1) + + first_outputs = runner(inputs=inputs, tactic=tactic) + chained_inputs = [ + inputs[0], + first_outputs[0], + first_outputs[1], + first_outputs[2], + *inputs[4:], + ] + saved_inputs = tuple(tensor.clone() for tensor in chained_inputs[1:4]) + + second_outputs = runner(inputs=chained_inputs, tactic=tactic) + + for actual, expected, name in zip( + chained_inputs[1:4], + saved_inputs, + ("residual", "post_mix", "comb_mix"), + ): + torch.testing.assert_close( + actual, + expected, + rtol=0, + atol=0, + msg=f"fused_hc mutated its {name} input", + ) + + reference_inputs = [inputs[0].clone(), *saved_inputs, *inputs[4:]] + reference_outputs = runner(inputs=reference_inputs, tactic=tactic) + for actual, expected, name, tolerance in zip( + second_outputs, + reference_outputs, + ("residual", "post_mix", "comb_mix", "layer_input"), + (1e-2, 5e-3, 5e-3, 1e-2), + ): + torch.testing.assert_close( + actual, + expected, + rtol=tolerance, + atol=tolerance, + msg=f"chained fused_hc produced an incorrect {name}", + ) + + +def test_mhc_fused_hc_three_call_cuda_graph_replay(): + """An odd-length fused-HC chain must remain stable across graph replays.""" + runner, inputs = _make_fused_hc_runner_case(n=6, hidden_size=4096, hc_mult=4, seed=73) + tactic = ("fused_half_fma", 2, 1, 512, 1) + + def run_chain(): + first = runner(inputs=inputs, tactic=tactic) + second = runner( + inputs=[inputs[0], first[0], first[1], first[2], *inputs[4:]], + tactic=tactic, + ) + return runner( + inputs=[inputs[0], second[0], second[1], second[2], *inputs[4:]], + tactic=tactic, + ) + + warmup_stream = torch.cuda.Stream() + warmup_stream.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(warmup_stream): + for _ in range(3): + run_chain() + torch.cuda.current_stream().wait_stream(warmup_stream) + torch.cuda.synchronize() + + graph = torch.cuda.CUDAGraph() + with torch.cuda.graph(graph): + graph_outputs = run_chain() + + for scale in (1.0003, 1.0005, 1.0007): + for tensor in inputs[:4]: + tensor.mul_(scale) + expected = tuple(tensor.clone() for tensor in run_chain()) + graph.replay() + torch.cuda.synchronize() + for actual, reference, name in zip( + graph_outputs, + expected, + ("residual", "post_mix", "comb_mix", "layer_input"), + ): + torch.testing.assert_close( + actual, + reference, + rtol=0, + atol=0, + msg=f"three-call CUDA graph replay mismatch in {name}", + ) + + +def test_mhc_fused_hc_concurrent_streams() -> None: + """Concurrent fused-HC calls on separate streams must remain independent.""" + runner, first_inputs = _make_fused_hc_runner_case(n=6, hidden_size=4096, hc_mult=4, seed=79) + second_inputs = [tensor.clone() for tensor in first_inputs] + for tensor in second_inputs[:4]: + tensor.mul_(1.01) + tactic = ("fused_half_fma", 2, 1, 512, 1) + + current_stream = torch.cuda.current_stream() + first_stream = torch.cuda.Stream() + second_stream = torch.cuda.Stream() + first_stream.wait_stream(current_stream) + second_stream.wait_stream(current_stream) + + with torch.cuda.stream(first_stream): + first_outputs = runner(inputs=first_inputs, tactic=tactic) + with torch.cuda.stream(second_stream): + second_outputs = runner(inputs=second_inputs, tactic=tactic) + + current_stream.wait_stream(first_stream) + current_stream.wait_stream(second_stream) + torch.cuda.synchronize() + + first_reference = tuple(tensor.clone() for tensor in runner(inputs=first_inputs, tactic=tactic)) + second_reference = tuple( + tensor.clone() for tensor in runner(inputs=second_inputs, tactic=tactic) + ) + for actual_outputs, reference_outputs in ( + (first_outputs, first_reference), + (second_outputs, second_reference), + ): + for actual, reference in zip(actual_outputs, reference_outputs): + torch.testing.assert_close(actual, reference, rtol=0, atol=0) + + def _assert_graph_replay_matches_eager(runner, inputs, tactic): runner(inputs=inputs, tactic=tactic) torch.cuda.synchronize() From 44c3adf9e6399c0b9785553ec351eaa9573c57b4 Mon Sep 17 00:00:00 2001 From: Qiqi Gu <29116997+guqiqi@users.noreply.github.com> Date: Mon, 13 Jul 2026 13:17:40 +0800 Subject: [PATCH 19/21] [https://nvbugs/6428113][fix] Fix TEP token-count handling in MoE Test (#16293) Signed-off-by: guqiqi <29116997+guqiqi@users.noreply.github.com> --- tests/unittest/_torch/modules/test_moe_routing.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/unittest/_torch/modules/test_moe_routing.py b/tests/unittest/_torch/modules/test_moe_routing.py index e5458a191762..1dfcb96e7756 100644 --- a/tests/unittest/_torch/modules/test_moe_routing.py +++ b/tests/unittest/_torch/modules/test_moe_routing.py @@ -794,15 +794,17 @@ def _perfect_router_worker(parallel_mode, routing_name, num_tokens, dtype, # Simulate per-rank token-count skew so each rank exercises a # different cache key (num_tokens, routing_method, dtype, ep_size). - # DEP processes its own share of tokens per rank; TEP replicates - # input across ranks so keep a uniform list there. - if parallel_mode == "DEP": + # When attention uses DP (parallel_mode starts with "D"), each rank + # processes its own token share; otherwise all ranks see the same + # token count so pass a single-element list. + if parallel_mode[0] == "D": all_rank_num_tokens = [ num_tokens + i for i in range(mapping.world_size) ] + my_num_tokens = all_rank_num_tokens[mapping.rank] else: - all_rank_num_tokens = [num_tokens] * mapping.world_size - my_num_tokens = all_rank_num_tokens[mapping.rank] + all_rank_num_tokens = [num_tokens] + my_num_tokens = num_tokens model_config = ModelConfig(pretrained_config=pretrained_config, mapping=mapping, From 6c43b3eddccad1b82b5ce47ee3a2db4eada3c223 Mon Sep 17 00:00:00 2001 From: sunnyqgg <159101675+sunnyqgg@users.noreply.github.com> Date: Mon, 13 Jul 2026 13:23:24 +0800 Subject: [PATCH 20/21] [None][feat] Support externally provided MPI sessions with explicit ownership (#16053) Signed-off-by: qgai --- .../_torch/distributed/communicator.py | 21 +++++++ tensorrt_llm/executor/executor.py | 8 ++- tensorrt_llm/executor/proxy.py | 20 ++++-- tensorrt_llm/executor/rpc_proxy.py | 58 +++++++++++------ tensorrt_llm/llmapi/llm.py | 13 +++- tensorrt_llm/llmapi/mpi_session.py | 62 +++++++++++-------- 6 files changed, 130 insertions(+), 52 deletions(-) diff --git a/tensorrt_llm/_torch/distributed/communicator.py b/tensorrt_llm/_torch/distributed/communicator.py index 545ffd2de075..34acfc741947 100644 --- a/tensorrt_llm/_torch/distributed/communicator.py +++ b/tensorrt_llm/_torch/distributed/communicator.py @@ -1240,7 +1240,28 @@ def init_pp_comm(mapping): global _pp_comm if mpi_disabled(): _pp_comm = PPCommTorch(mapping) + elif isinstance(_pp_comm, PPCommNCCL) and \ + _pp_comm.mapping.world_size == mapping.world_size: + # Reuse the existing world NCCL communicator across LLM instances that + # share the same worker processes (e.g. a reused MpiPoolSession). The + # underlying comm depends only on (world_size, rank) -- it is a world + # communicator, independent of the pp/tp/ep layout -- so only the + # routing mapping needs refreshing. Recreating it would drop the old + # comm and trigger a collective ncclCommDestroy at an unsynchronized + # point during the next model build, which can deadlock on reused + # workers. Single-LLM (production) runs are unaffected: _pp_comm starts + # as None, so the first call still constructs a fresh PPCommNCCL. + _pp_comm.mapping = mapping else: + if _pp_comm is not None: + # Rebinding drops the old comm; its ncclCommDestroy runs at an + # unsynchronized point and can deadlock on reused worker processes + # (see the reuse branch above). Surface it instead of hanging + # silently -- pools sharing workers must keep one world_size. + logger.warning( + "init_pp_comm: replacing existing PP comm (world_size " + f"{_pp_comm.mapping.world_size} -> {mapping.world_size}) on a " + "live process; this can deadlock on reused MPI workers.") _pp_comm = PPCommNCCL(mapping) init_helix_cp_comm(mapping) diff --git a/tensorrt_llm/executor/executor.py b/tensorrt_llm/executor/executor.py index 82f5aed52110..ea698342a7ae 100644 --- a/tensorrt_llm/executor/executor.py +++ b/tensorrt_llm/executor/executor.py @@ -652,7 +652,7 @@ def create( return GenerationExecutor._create_ipc_executor( worker_kwargs, model_world_size=model_world_size, - mpi_session=None, # use mpi4py + mpi_session=mpi_session, postproc_worker_config=postproc_worker_config, is_llm_executor=is_llm_executor, use_worker=False) @@ -662,13 +662,17 @@ def create( mpi_session = ProcessPoolExecutorSession(n_workers=1, mp_context=ctx) # TODO: add rpc worker here - return GenerationExecutor._create_ipc_executor( + executor = GenerationExecutor._create_ipc_executor( worker_kwargs, model_world_size=model_world_size, mpi_session=mpi_session, postproc_worker_config=postproc_worker_config, is_llm_executor=is_llm_executor, use_worker=False) + # The session was created right here with no outer owner, so the + # proxy must shut it down despite it arriving as "external". + executor._owns_mpi_session = True + return executor def wait_first_completed( self, futures: List[GenerationResult] diff --git a/tensorrt_llm/executor/proxy.py b/tensorrt_llm/executor/proxy.py index 9f518369a0e6..5599cc8df2a8 100644 --- a/tensorrt_llm/executor/proxy.py +++ b/tensorrt_llm/executor/proxy.py @@ -29,7 +29,8 @@ from .._utils import customized_gc_thresholds, mpi_rank, nvtx_range_debug from ..llmapi.mpi_session import (MpiCommSession, MpiPoolSession, MpiSession, - RemoteMpiCommSessionClient) + RemoteMpiCommSessionClient, + validate_session_world_size) from ..llmapi.tracer import enable_llm_tracer, get_tracer, global_tracer from ..llmapi.utils import (AsyncQueue, ManagedThread, _SyncQueue, enable_llm_debug, logger_debug, print_colored) @@ -117,6 +118,7 @@ def __init__( self.worker_cls = worker_cls mpi_process_pre_spawned: bool = get_spawn_proxy_process_env() + self._owns_mpi_session = mpi_session is None if mpi_session is None: if mpi_process_pre_spawned: @@ -126,6 +128,10 @@ def __init__( logger_debug('create pool session ...\n', "yellow") self.mpi_session = MpiPoolSession(n_workers=model_world_size) else: + # submit() launches one worker task per pool worker, so an + # external session must match the model's world size exactly; + # fail loudly instead of starting the wrong number of executors. + validate_session_world_size(mpi_session, model_world_size) logger_debug('using external mpi session ...\n', "yellow") self.mpi_session = mpi_session @@ -406,11 +412,11 @@ def resource_governor_queue(self): return self._resource_governor_queue def abort_request(self, request_id: int) -> None: - ''' Abort a request by sending a cancelling request to the request queue. + """Abort a request by sending a cancelling request to the request queue. Args: request_id (int): The id of the request to abort. - ''' + """ # NOTE, it just sends a cancelling request to the request queue, but it # may take a while for the request to be cancelled in the worker and # send back a finished result. @@ -543,7 +549,10 @@ def mpi_done_callback(future: concurrent.futures.Future): if ready_signal != GenerationExecutorProxy.READY_SIGNAL: logger.error(f"Executor worker initialization error: {error_trace}") - self.mpi_session.shutdown_abort(reason=ready_signal) + # Only abort a session this proxy created; an externally owned + # (shared) session must stay alive for its owner to tear down. + if self._owns_mpi_session: + self.mpi_session.shutdown_abort(reason=ready_signal) raise RuntimeError( "Executor worker returned error") from ready_signal @@ -630,7 +639,8 @@ def shutdown(self): self._resource_governor_queue.close() self.workers_started = False - self.mpi_session.shutdown() + if self._owns_mpi_session: + self.mpi_session.shutdown() # Process the errors in-case error during shutting down the threads self._handle_background_error() diff --git a/tensorrt_llm/executor/rpc_proxy.py b/tensorrt_llm/executor/rpc_proxy.py index 951a24526747..680b8d5c84e4 100644 --- a/tensorrt_llm/executor/rpc_proxy.py +++ b/tensorrt_llm/executor/rpc_proxy.py @@ -16,7 +16,8 @@ import threading from typing import List, Optional, Union -from ..llmapi.mpi_session import MpiPoolSession, MpiSession +from ..llmapi.mpi_session import (MpiPoolSession, MpiSession, + validate_session_world_size) from ..llmapi.utils import logger_debug, print_colored from ..logger import logger from .executor import GenerationExecutor @@ -42,13 +43,12 @@ def __init__( postproc_worker_config: Optional[PostprocWorkerConfig] = None, is_llm_executor: Optional[bool] = None, ): - """ - Args: - worker_kwargs: kwargs for the rpc worker - model_world_size: the world size of the model - mpi_session: the mpi session to use - postproc_worker_config: the postproc worker config - is_llm_executor: whether this is an llm executor + """Args: + worker_kwargs: kwargs for the rpc worker + model_world_size: the world size of the model + mpi_session: the mpi session to use + postproc_worker_config: the postproc worker config + is_llm_executor: whether this is an llm executor """ GenerationExecutorRpcProxy.INSTANCE_COUNTER += 1 self.init_rpc_executor() @@ -81,11 +81,13 @@ def __init__( self._setup_mainloop_with_tasks() def launch_workers(self): - logger.debug(f"Launching workers") + logger.debug("Launching workers") assert self.mpi_session is not None - self.mpi_session.submit(RpcWorker.main_task, - rpc_addr=self.rpc_addr, - **self.worker_kwargs) + # Keep the futures: on an externally owned (shared) session, shutdown + # waits on them so worker teardown finishes before the pool is reused. + self.worker_futures = self.mpi_session.submit(RpcWorker.main_task, + rpc_addr=self.rpc_addr, + **self.worker_kwargs) def _setup_mainloop_with_tasks(self): """Setup mainloop with tasks needed for RpcProxy. @@ -256,7 +258,7 @@ def setup_engine_remote(self): return self.rpc_client.setup_engine().remote(need_response=True) def shutdown_remote(self): - logger_debug(f"Shutting down rpc remote", color="yellow") + logger_debug("Shutting down rpc remote", color="yellow") self.rpc_client.shutdown().remote(need_response=False) def abort_request(self, request_id: int) -> None: @@ -266,8 +268,7 @@ def shutdown(self): if self._shutdown_event.is_set(): return self._shutdown_event.set() - logger_debug(f"Shutting down GenerationExecutorRpcProxy", - color="yellow") + logger_debug("Shutting down GenerationExecutorRpcProxy", color="yellow") # 1. shutdown the rpc server (PyExecutor Rank 0 + RPC server) self.shutdown_remote() @@ -294,9 +295,24 @@ def shutdown(self): # 3. shutdown the mpi session, this should wait until all the PyExecutor # processes are shutdown if self.mpi_session is not None: - logger_debug(f"Shutting down mpi session", color="yellow") - self.mpi_session.shutdown() - logger_debug(f"Mpi session shutdown", color="yellow") + if self._owns_mpi_session: + logger_debug("Shutting down mpi session", color="yellow") + self.mpi_session.shutdown() + else: + # Externally owned (shared) session: leave the pool alive, but + # wait for this executor's worker tasks to finish so the next + # LLM on the pool doesn't race with PyExecutor teardown. Block + # without a timeout, mirroring the owned path above + # (mpi_session.shutdown() also waits indefinitely); a timeout + # that expires would just reintroduce the race it prevents. + for future in getattr(self, "worker_futures", []): + try: + future.result() + except Exception as e: + logger.warning( + f"RPC worker task raised during shutdown on " + f"shared MPI session: {e}") + logger_debug("Mpi session shutdown", color="yellow") self.mpi_session = None self.rpc_client.close() @@ -309,8 +325,12 @@ def __exit__(self, exc_type, exc_value, traceback): def _create_mpi_session(self, model_world_size: int, mpi_session: Optional[MpiSession]): + # Ownership is decided here, next to the create-vs-adopt branch: a + # session this proxy created is shut down by it; an external one is + # owned (and shut down) by the caller. mpi_process_pre_spawned: bool = get_spawn_proxy_process_env() if mpi_session is None: + self._owns_mpi_session = True if mpi_process_pre_spawned: logger_debug('[proxy] create comm session ...\n', "yellow") self.mpi_session = create_mpi_comm_session(model_world_size) @@ -318,5 +338,7 @@ def _create_mpi_session(self, model_world_size: int, logger_debug('[proxy] create pool session ...\n', "yellow") self.mpi_session = MpiPoolSession(n_workers=model_world_size) else: + validate_session_world_size(mpi_session, model_world_size) + self._owns_mpi_session = False logger_debug('[proxy] using external mpi session ...\n', "yellow") self.mpi_session = mpi_session diff --git a/tensorrt_llm/llmapi/llm.py b/tensorrt_llm/llmapi/llm.py index cd19e015308a..a8d4b5b3eada 100644 --- a/tensorrt_llm/llmapi/llm.py +++ b/tensorrt_llm/llmapi/llm.py @@ -314,6 +314,10 @@ def __init__(self, logger_debug(f"LLM.args.mpi_session: {self.args.mpi_session}\n", "yellow") self.mpi_session = self.args.mpi_session + # Keep the live session on LLM only. LLM args are passed to model-build + # tasks and executor workers, and MpiSession objects are not pickleable. + self.args.mpi_session = None + self._owns_mpi_session = self.mpi_session is None # Build this LLM's post-processing hook for the in-proxy detok path (each # postproc worker builds its own). Resolving here fails fast on a bad @@ -333,6 +337,8 @@ def __init__(self, logger.info( f'start MpiSession with {self.args.parallel_config.world_size} workers' ) + # _owns_mpi_session is already True here: this branch only runs + # when no external session was supplied. if not self.mpi_session: mpi_process_pre_spawned: bool = get_spawn_proxy_process_env() if not mpi_process_pre_spawned: @@ -365,7 +371,9 @@ def __init__(self, self._build_model() except Exception: - if self.mpi_session is not None: + # _owns_mpi_session is assigned before this try block, so it is + # always present here. + if self.mpi_session is not None and self._owns_mpi_session: self.mpi_session.shutdown() raise @@ -1500,7 +1508,8 @@ def shutdown(self) -> None: self._encoder_executor.shutdown() self._encoder_executor = None - if hasattr(self, 'mpi_session') and self.mpi_session is not None: + if (hasattr(self, 'mpi_session') and self.mpi_session is not None + and getattr(self, "_owns_mpi_session", True)): self.mpi_session.shutdown() self.mpi_session = None diff --git a/tensorrt_llm/llmapi/mpi_session.py b/tensorrt_llm/llmapi/mpi_session.py index f178a34ebc16..0fa5271f8acf 100644 --- a/tensorrt_llm/llmapi/mpi_session.py +++ b/tensorrt_llm/llmapi/mpi_session.py @@ -28,7 +28,7 @@ class MPINodeState: - ''' MPINodeState acts as a central global state shares between tasks on MPI node. + """MPINodeState acts as a central global state shares between tasks on MPI node. An example: def task(): @@ -45,7 +45,7 @@ def task(): This should produce the following output: - [1, 1, 1, 1] - [2, 2, 2, 2] - ''' + """ state = None # Global MPICommExecutor instance to be reused across multiple MpiCommSession instances @@ -59,9 +59,9 @@ def is_initialized() -> bool: def external_mpi_comm_available(model_world_size: int) -> bool: - ''' Check if the current process is launched by mpirun and does not use MPIPoolExecutor to spawn processes. + """Check if the current process is launched by mpirun and does not use MPIPoolExecutor to spawn processes. e.g. mpirun -np 4 python script.py - ''' + """ if ENABLE_MULTI_DEVICE: return (get_mpi_world_size() == model_world_size and model_world_size > 1) or (global_mpi_size() @@ -71,7 +71,7 @@ def external_mpi_comm_available(model_world_size: int) -> bool: def need_spawn_mpi_workers(model_world_size: int) -> bool: - ''' Check if the current process needs to spawn MPI workers. ''' + """Check if the current process needs to spawn MPI workers.""" if ENABLE_MULTI_DEVICE: return get_mpi_world_size() == 1 and model_world_size > 1 else: @@ -85,6 +85,20 @@ def set_mpi_session_cpp(comm): MpiComm.set_raw_mpi_session_by_fortran_handle(comm_fortran) +def validate_session_world_size(mpi_session, model_world_size: int) -> None: + """Fail loudly when an external session cannot serve ``model_world_size``. + + ``submit()`` launches one worker task per pool worker, so an externally + provided session must match the model's world size exactly; otherwise the + wrong number of executors would start. + """ + external_workers = getattr(mpi_session, "n_workers", None) + if external_workers is not None and external_workers != model_world_size: + raise ValueError( + f"External MPI session has {external_workers} workers but " + f"the model needs world_size={model_world_size}.") + + class MpiSession(abc.ABC): @abc.abstractmethod @@ -220,13 +234,13 @@ def get_comm(self): def submit(self, task: Callable[..., T], *args, **kwargs) -> List[Future[T]]: - ''' Submit a task to MPI workers. + """Submit a task to MPI workers. Args: task: The task to be submitted. args: Positional arguments for the task. kwargs: Keyword arguments for the task. - ''' + """ assert self.mpi_pool is not None, 'MPI session not started' worker_futures = [ self.mpi_pool.submit(task, *args, **kwargs) @@ -281,7 +295,7 @@ def _start_mpi_pool(self): self.owns_mpi_pool = False else: logger_debug( - f"_start_mpi_pool: Creating new MPICommExecutor (not COMM_WORLD or ENABLE_MULTI_DEVICE=False)\n", + "_start_mpi_pool: Creating new MPICommExecutor (not COMM_WORLD or ENABLE_MULTI_DEVICE=False)\n", "grey") # For non-COMM_WORLD communicators, create a new executor comm_executor = MPICommExecutor(self.comm) @@ -323,12 +337,11 @@ def to_exception(self) -> RuntimeError: class RemoteMpiCommSessionClient(MpiSession): - ''' - RemoteMpiCommSessionClient is a variant of MpiCommSession that is used to connect to a remote MPI pool. + """RemoteMpiCommSessionClient is a variant of MpiCommSession that is used to connect to a remote MPI pool. Note: This class uses a global singleton pattern because ZeroMQ PAIR sockets only support one connection at a time. Multiple LLM instances will reuse the same client connection. - ''' + """ _global_instance = None _global_instance_lock = threading.Lock() @@ -374,7 +387,7 @@ def submit(self, *args, sync: bool = False, **kwargs) -> list: - ''' Submit a task to the remote MPI pool. ''' + """Submit a task to the remote MPI pool.""" if self._is_shutdown: logger_debug("RemoteMpiCommSessionClient is already shut down\n", "yellow") @@ -388,7 +401,7 @@ def submit(self, SYNC_IDLE_INTERVAL = 8 def submit_sync(self, task, *args, **kwargs) -> List[T]: - ''' Submit a task to the remote MPI pool and wait for task completion. ''' + """Submit a task to the remote MPI pool and wait for task completion.""" self.submit(task, *args, sync=True, **kwargs) while not ((res := self.poll()) or self._is_shutdown): @@ -405,10 +418,11 @@ def submit_sync(self, task, *args, **kwargs) -> List[T]: return res def poll(self) -> bool: - ''' Poll the queue for a response. + """Poll the queue for a response. + Returns: True if a response is received, False otherwise. - ''' + """ if self._is_shutdown: return False if self._pending_responses: @@ -447,7 +461,7 @@ def shutdown(self, wait=True): # LLM instances. Marking it as shutdown would prevent subsequent LLM instances from # using it. The connection stays open for the entire lifetime of the mgmn setup. logger_debug( - f"RemoteMpiCommSessionClient.shutdown() called (no-op for singleton)\n", + "RemoteMpiCommSessionClient.shutdown() called (no-op for singleton)\n", "grey") def shutdown_abort(self, grace: float = 60, reason=None): @@ -455,14 +469,13 @@ def shutdown_abort(self, grace: float = 60, reason=None): class RemoteMpiCommSessionServer(): - ''' - RemoteMpiCommSessionServer is a variant of MpiCommSession that is used to create a remote MPI pool. - ''' + """RemoteMpiCommSessionServer is a variant of MpiCommSession that is used to create a remote MPI pool. + """ def __init__(self, hmac_key: bytes, n_workers: int = 0, - addr: str = f'tcp://127.0.0.1:*', + addr: str = 'tcp://127.0.0.1:*', comm=None, is_comm: bool = False): # FIXME: this is a hack to avoid circular import, resolve later @@ -612,7 +625,7 @@ def mpi_future_callback(self, future): "grey") if len(self.results) == self.num_results: logger_debug( - f"RemoteMpiCommSessionServer received all results, sending to client\n", + "RemoteMpiCommSessionServer received all results, sending to client\n", "green") try: self.queue.put_noblock(self.results, retry=2) @@ -623,7 +636,7 @@ def mpi_future_callback(self, future): else: raise e - logger_debug(f"RemoteMpiCommSessionServer sent results to client\n", + logger_debug("RemoteMpiCommSessionServer sent results to client\n", "green") self.results.clear() @@ -653,8 +666,7 @@ def get_mpi_world_size() -> int: def split_mpi_env(mpi_env_keys: List[str] | None = None) -> Tuple[dict, dict]: - ''' - Splits the environment variables into MPI-related and non-MPI-related dictionaries. + """Splits the environment variables into MPI-related and non-MPI-related dictionaries. Args: mpi_env_keys: Additional environment variables to be considered as MPI-related. @@ -663,7 +675,7 @@ def split_mpi_env(mpi_env_keys: List[str] | None = None) -> Tuple[dict, dict]: Tuple[dict, dict]: (non_mpi_env, mpi_env) - non_mpi_env: Environment dictionary without MPI-related variables - mpi_env: Environment dictionary containing only MPI-related variables - ''' + """ current_env = os.environ.copy() # Identify MPI-related variables From a201a43a1628f3f63203e7e5ddd2cc0c5579f692 Mon Sep 17 00:00:00 2001 From: Yechan Kim <161688079+yechank-nvidia@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:47:51 +0900 Subject: [PATCH 21/21] [None][perf] offload chat template rendering into async (#15284) Signed-off-by: yechank <161688079+yechank-nvidia@users.noreply.github.com> --- tensorrt_llm/inputs/utils.py | 31 +++++ tensorrt_llm/serve/openai_server.py | 17 ++- tensorrt_llm/serve/resource_governor.py | 26 ++-- tensorrt_llm/serve/responses_utils.py | 9 +- .../inputs/test_chat_template_dispatch.py | 131 ++++++++++++++++++ 5 files changed, 196 insertions(+), 18 deletions(-) diff --git a/tensorrt_llm/inputs/utils.py b/tensorrt_llm/inputs/utils.py index 5dc8c3a343bb..7624256b223d 100644 --- a/tensorrt_llm/inputs/utils.py +++ b/tensorrt_llm/inputs/utils.py @@ -707,6 +707,37 @@ def apply_chat_template( return result +async def async_apply_chat_template( + *, + model_type: str, + tokenizer: Union[TransformersTokenizer, TokenizerBase], + processor: ProcessorMixin, + conversation: list[ConversationMessage], + add_generation_prompt: bool, + mm_placeholder_counts: list[dict[str, int]], + tools: Optional[list[dict[str, Any]]] = None, + documents: Optional[list[dict[str, str]]] = None, + chat_template: Optional[str] = None, + chat_template_kwargs: Optional[dict[str, Any]] = None, + enable_tokenize: bool = False, +) -> (str | List[str]): + """Apply chat template without blocking the event loop.""" + return await asyncio.to_thread( + apply_chat_template, + model_type=model_type, + tokenizer=tokenizer, + processor=processor, + conversation=conversation, + add_generation_prompt=add_generation_prompt, + mm_placeholder_counts=mm_placeholder_counts, + tools=tools, + documents=documents, + chat_template=chat_template, + chat_template_kwargs=chat_template_kwargs, + enable_tokenize=enable_tokenize, + ) + + def default_multimodal_input_loader( *, tokenizer: Optional[Union[TransformersTokenizer, TokenizerBase]], diff --git a/tensorrt_llm/serve/openai_server.py b/tensorrt_llm/serve/openai_server.py index d03dbab494da..fd5fb55c25c0 100644 --- a/tensorrt_llm/serve/openai_server.py +++ b/tensorrt_llm/serve/openai_server.py @@ -41,7 +41,8 @@ from tensorrt_llm.inputs.media_io import BaseMediaIO from tensorrt_llm.inputs.multimodal import MultimodalServerConfig from tensorrt_llm.inputs.registry import BaseMultimodalInputProcessor -from tensorrt_llm.inputs.utils import ConversationMessage, apply_chat_template +from tensorrt_llm.inputs.utils import (ConversationMessage, + async_apply_chat_template) from tensorrt_llm.llmapi import DisaggregatedParams as LlmDisaggregatedParams from tensorrt_llm.llmapi import MultimodalEncoder, SchedulingParams, tracing from tensorrt_llm.llmapi.disagg_utils import (DisaggClusterConfig, @@ -1547,7 +1548,7 @@ async def chat_stream_generator( if request.prompt_token_ids is not None: prompt = request.prompt_token_ids else: - prompt: str = apply_chat_template( + prompt_task = async_apply_chat_template( model_type=resolve_top_level_model_type(self.model_config), tokenizer=self.tokenizer, processor=self.processor, @@ -1559,9 +1560,12 @@ async def chat_stream_generator( chat_template=request.chat_template or self.chat_template, chat_template_kwargs=request.chat_template_kwargs or {}, ) + prompt, (mm_data, mm_embeddings) = await asyncio.gather( + prompt_task, mm_coroutines) prompt = prompt_inputs(prompt) - mm_data, mm_embeddings = await mm_coroutines + if request.prompt_token_ids is not None: + mm_data, mm_embeddings = await mm_coroutines if mm_data: prompt["multi_modal_data"] = mm_data if mm_embeddings: @@ -1723,7 +1727,7 @@ async def create_mm_embedding_response(promise: RequestOutput): if request.prompt_token_ids is not None: prompt = request.prompt_token_ids else: - prompt: str = apply_chat_template( + prompt_task = async_apply_chat_template( model_type=resolve_top_level_model_type(self.model_config), tokenizer=self.tokenizer, processor=self.processor, @@ -1735,9 +1739,12 @@ async def create_mm_embedding_response(promise: RequestOutput): chat_template=request.chat_template, chat_template_kwargs=request.chat_template_kwargs or {}, ) + prompt, (mm_data, mm_embeddings) = await asyncio.gather( + prompt_task, mm_coroutines) prompt = prompt_inputs(prompt) - mm_data, mm_embeddings = await mm_coroutines + if request.prompt_token_ids is not None: + mm_data, mm_embeddings = await mm_coroutines if mm_embeddings: raise ValueError("Cannot use multimodal embeddings as input") if mm_data is not None: diff --git a/tensorrt_llm/serve/resource_governor.py b/tensorrt_llm/serve/resource_governor.py index 7b658056422f..30c9379d99b0 100644 --- a/tensorrt_llm/serve/resource_governor.py +++ b/tensorrt_llm/serve/resource_governor.py @@ -19,6 +19,7 @@ LLM/Proxy/Worker chain. """ +import asyncio import traceback from http import HTTPStatus from typing import Callable, List, Optional @@ -27,9 +28,12 @@ from starlette.responses import JSONResponse, Response from tensorrt_llm.executor.request import TruncateKVCacheRequest -from tensorrt_llm.inputs.utils import ConversationMessage, apply_chat_template +from tensorrt_llm.inputs.utils import ConversationMessage, async_apply_chat_template from tensorrt_llm.logger import logger -from tensorrt_llm.serve.chat_utils import parse_chat_messages_coroutines +from tensorrt_llm.serve.chat_utils import ( + parse_chat_messages_coroutines, + resolve_top_level_model_type, +) from tensorrt_llm.serve.openai_protocol import ( KVCacheTruncateRequest, ensure_request_chat_template_allowed, @@ -91,7 +95,7 @@ def _put_or_unavailable(self, request: TruncateKVCacheRequest) -> Optional[Respo queue.put(request) return None - def _convert_messages( + async def _convert_messages( self, messages, tool_dicts, @@ -102,20 +106,24 @@ def _convert_messages( ) -> List[int]: """Convert chat messages to token IDs via chat template + tokenization.""" conversation: List[ConversationMessage] = [] - conversation, _, __ = parse_chat_messages_coroutines(messages, self.model_config, None) - return apply_chat_template( - model_type=self.model_config.model_type, + conversation, mm_coroutines, mm_placeholder_counts = parse_chat_messages_coroutines( + messages, self.model_config, None + ) + token_task = async_apply_chat_template( + model_type=resolve_top_level_model_type(self.model_config), tokenizer=self.tokenizer, processor=self.processor, conversation=conversation, add_generation_prompt=add_generation_prompt, - mm_placeholder_counts=[], + mm_placeholder_counts=mm_placeholder_counts, tools=tool_dicts, documents=documents, chat_template=chat_template, chat_template_kwargs=chat_template_kwargs or {}, enable_tokenize=True, ) + token_ids, _ = await asyncio.gather(token_task, mm_coroutines) + return token_ids async def _truncate_kv_cache(self, request: KVCacheTruncateRequest) -> Response: try: @@ -126,7 +134,7 @@ async def _truncate_kv_cache(self, request: KVCacheTruncateRequest) -> Response: chat_template_kwargs = request.chat_template_kwargs or {} messages_to_retain = ( - self._convert_messages( + await self._convert_messages( request.messages_to_retain, tool_dicts, request.add_generation_prompt, @@ -139,7 +147,7 @@ async def _truncate_kv_cache(self, request: KVCacheTruncateRequest) -> Response: ) messages = ( - self._convert_messages( + await self._convert_messages( request.messages, tool_dicts, request.add_generation_prompt, diff --git a/tensorrt_llm/serve/responses_utils.py b/tensorrt_llm/serve/responses_utils.py index 9aaa4e6e764b..cfd363d71616 100644 --- a/tensorrt_llm/serve/responses_utils.py +++ b/tensorrt_llm/serve/responses_utils.py @@ -42,7 +42,7 @@ from tensorrt_llm.bindings import steady_clock_now from tensorrt_llm.executor import GenerationResult -from tensorrt_llm.inputs.utils import apply_chat_template +from tensorrt_llm.inputs.utils import async_apply_chat_template from tensorrt_llm.llmapi import SamplingParams from tensorrt_llm.llmapi.llm import RequestOutput from tensorrt_llm.llmapi.reasoning_parser import (BaseReasoningParser, @@ -822,13 +822,11 @@ async def _create_input_tokens( conversation, mm_coroutines, mm_placeholder_counts = parse_chat_messages_coroutines( messages, model_config) - mm_data = await mm_coroutines - tools_dict = [ tool.model_dump() for tool in _get_chat_completion_function_tools(request.tools) ] - token_ids = apply_chat_template( + token_task = async_apply_chat_template( model_type=resolve_top_level_model_type(model_config), tokenizer=tokenizer, processor=processor, @@ -838,6 +836,9 @@ async def _create_input_tokens( mm_placeholder_counts=mm_placeholder_counts, enable_tokenize=True, ) + token_ids, (mm_data, + _mm_embeddings) = await asyncio.gather(token_task, + mm_coroutines) return token_ids, mm_data diff --git a/tests/unittest/inputs/test_chat_template_dispatch.py b/tests/unittest/inputs/test_chat_template_dispatch.py index 6b38af5ffdbc..47627d27da4e 100644 --- a/tests/unittest/inputs/test_chat_template_dispatch.py +++ b/tests/unittest/inputs/test_chat_template_dispatch.py @@ -2,6 +2,8 @@ # Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. """Tests for content-format-driven chat template dispatch and placeholder handling.""" +import threading + import pytest from tensorrt_llm.inputs.content_format import ContentFormat @@ -15,6 +17,7 @@ _build_openai_content, _resolve_content_format, add_multimodal_placeholders, + async_apply_chat_template, interleave_mm_placeholders, ) @@ -324,3 +327,131 @@ def test_excess_existing_placeholders_preserved(self): ) assert result == text assert result.count("") == 3 + + +class TestAsyncApplyChatTemplate: + @pytest.mark.asyncio + async def test_runs_in_worker_thread(self): + event_loop_thread_id = threading.current_thread().ident + + class TrackingTokenizer: + def __init__(self): + self.worker_thread_id = None + + def apply_chat_template(self, **_): + self.worker_thread_id = threading.current_thread().ident + return "rendered" + + tokenizer = TrackingTokenizer() + + result = await async_apply_chat_template( + model_type="test_string_model", + tokenizer=tokenizer, + processor=None, + conversation=[ConversationMessage(role="user", content="hello", media=[])], + add_generation_prompt=True, + mm_placeholder_counts=[{}], + chat_template="{{ messages }}", + ) + + assert result == "rendered" + assert tokenizer.worker_thread_id is not None + assert tokenizer.worker_thread_id != event_loop_thread_id + + +class TestServingChatTemplateGather: + """Cover the asyncio.gather integration in the serving chat-template paths.""" + + @pytest.mark.asyncio + async def test_resource_governor_convert_messages(self, monkeypatch): + from unittest.mock import Mock + + import tensorrt_llm.serve.resource_governor as rg + + governor = object.__new__(rg.ResourceGovernor) + governor.model_config = Mock() + governor.tokenizer = Mock() + governor.processor = None + + async def fake_mm_coroutine(): + # parse_chat_messages_coroutines' coroutine yields + # (mm_data, mm_embeddings). + return ({"image": ["data"]}, None) + + monkeypatch.setattr( + rg, + "parse_chat_messages_coroutines", + lambda messages, model_config, _: ([], fake_mm_coroutine(), [{}]), + ) + # Must resolve the top-level model type, matching the serving call + # sites (not the raw model_config.model_type). + monkeypatch.setattr(rg, "resolve_top_level_model_type", lambda cfg: "resolved-model-type") + + captured = {} + + async def fake_async_apply(**kwargs): + captured.update(kwargs) + return [1, 2, 3] + + monkeypatch.setattr(rg, "async_apply_chat_template", fake_async_apply) + + token_ids = await governor._convert_messages( + messages=[{"role": "user", "content": "hi"}], + tool_dicts=None, + add_generation_prompt=True, + documents=None, + chat_template=None, + chat_template_kwargs=None, + ) + + # Returns only token_ids, not the (mm_data, mm_embeddings) tuple. + assert token_ids == [1, 2, 3] + # Uses the top-level resolver and forwards the real placeholder counts. + assert captured["model_type"] == "resolved-model-type" + assert captured["mm_placeholder_counts"] == [{}] + + @pytest.mark.asyncio + async def test_responses_create_input_tokens_unpacks_mm_tuple(self, monkeypatch): + """_create_input_tokens must return mm_data, not the whole gather tuple.""" + from unittest.mock import Mock + + import tensorrt_llm.serve.responses_utils as ru + + async def fake_create_input_messages(request, prev_msgs): + return [{"role": "user", "content": "hi"}] + + async def fake_mm_coroutine(): + return ({"image": ["data"]}, {"image": ["embed"]}) + + monkeypatch.setattr(ru, "_create_input_messages", fake_create_input_messages) + monkeypatch.setattr( + ru, + "parse_chat_messages_coroutines", + lambda messages, model_config: ([], fake_mm_coroutine(), [{}]), + ) + monkeypatch.setattr(ru, "resolve_top_level_model_type", lambda cfg: "resolved-model-type") + monkeypatch.setattr(ru, "_get_chat_completion_function_tools", lambda tools: []) + + async def fake_async_apply(**kwargs): + return [1, 2, 3] + + monkeypatch.setattr(ru, "async_apply_chat_template", fake_async_apply) + + request = Mock() + request.tools = None + request.store = False + + token_ids, mm_data = await ru._create_input_tokens( + request=request, + prev_response=None, + prev_msgs=None, + conversation_store=None, + enable_store=False, + tokenizer=Mock(), + model_config=Mock(), + processor=None, + ) + + assert token_ids == [1, 2, 3] + # mm_data is the data dict, not the (mm_data, mm_embeddings) tuple. + assert mm_data == {"image": ["data"]}