diff --git a/docker/Dockerfile b/docker/Dockerfile index 3478054ef4..a6eccedc0a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -68,11 +68,6 @@ COPY docker/common/install_etcd_nats.sh . RUN bash install_etcd_nats.sh && \ rm install_etcd_nats.sh -# Use the ray-haproxy wheel so Ray Serve's HAProxy ingress mode can discover -# the packaged binary without compiling HAProxy in the image. -ENV RAY_SERVE_EXPERIMENTAL_PIP_HAPROXY=1 - - FROM nemo_curator_dep AS nemo_curator ARG CURATOR_EXTRA=all @@ -90,13 +85,6 @@ RUN if [ -n "${CURATOR_EXTRA}" ]; then \ uv sync --link-mode copy --locked ${CURATOR_GROUPS} --no-cache; \ fi && \ find /opt/venv -type d -path "*ray/_private/runtime_env/agent/thirdparty_files/aiohttp*" -exec rm -rf {} + && \ - # Address GHSA-72hv-8253-57qq: jackson-core bundled in ray_dist.jar (jackson-core 2.16.1 < 2.18.6) - # Ray's Java support is not used; deleting the JAR removes the vulnerable jackson-core classes. - # TODO: Remove once Ray upgrades bundled jackson-core to >=2.18.6 (https://github.com/ray-project/ray/issues/35949) - find /opt/venv -name "ray_dist.jar" -delete && \ - if find /opt/venv -name "ray_dist.jar" | grep -q .; then \ - echo "ERROR: GHSA-72hv-8253-57qq not fixed — ray_dist.jar still present after deletion" && exit 1; \ - fi && \ # Strip opencv-python-headless (ffmpeg CVE carrier); tolerate arm64 where vllm doesn't pull it. (uv pip uninstall opencv-python-headless || true) diff --git a/fern/versions/main/pages/curate-text/synthetic/inference-server.mdx b/fern/versions/main/pages/curate-text/synthetic/inference-server.mdx index ba8bade0a2..fc273d956a 100644 --- a/fern/versions/main/pages/curate-text/synthetic/inference-server.mdx +++ b/fern/versions/main/pages/curate-text/synthetic/inference-server.mdx @@ -52,9 +52,9 @@ The stack uses: - CUDA 12.9.1 in the NeMo Curator container. - PyTorch 2.11. -- Ray Serve 2.56.1 or later. +- Ray Serve 2.57.0 or later. - vLLM 0.22.0 with CUDA 12.9. -- A public ai-dynamo release 1.3.0 or later and NIXL 0.10.0 or later for the +- A public ai-dynamo release 1.3.1 or later and NIXL 0.10.0 or later for the Dynamo backend. Start or connect to a Ray cluster before creating the server. The examples below use `RayClient`; an externally managed Ray cluster works as well. @@ -375,9 +375,9 @@ Dynamo creates detached, named placement groups and actors. On startup, it remov ## HAProxy Ingress -The NeMo Curator container includes HAProxy and `socat`. When both binaries are available, local Ray cluster initialization enables Ray Serve's HAProxy ingress and assigns a free metrics port. If either binary is unavailable, Ray Serve uses its default Python proxy. +Ray Serve's Linux dependencies include the bundled `ray-haproxy` binary. Local Ray cluster initialization enables HAProxy ingress when that package or an explicit `RAY_SERVE_HAPROXY_BINARY_PATH` is available and assigns free metrics and statistics ports. Otherwise, Ray Serve uses its default Python proxy. -No HAProxy configuration is required in `InferenceServer`. To confirm the optimized path, check startup logs for `Ray Serve HAProxy ingress enabled`. +No additional proxy package installation or HAProxy configuration is required for `InferenceServer`, which enables HAProxy when starting Ray Serve. To confirm that a local cluster discovered the packaged binary, check startup logs for `Ray Serve HAProxy ingress enabled`. ## Use with NeMo Curator Clients diff --git a/fern/versions/main/pages/reference/infrastructure/container-environments.mdx b/fern/versions/main/pages/reference/infrastructure/container-environments.mdx index b1bd8232e5..5ba9efa808 100644 --- a/fern/versions/main/pages/reference/infrastructure/container-environments.mdx +++ b/fern/versions/main/pages/reference/infrastructure/container-environments.mdx @@ -49,8 +49,8 @@ The primary container includes comprehensive support for all curation modalities **Pre-installed components:** - NeMo Curator with all optional dependencies (`[all]` extras) -- CUDA 12.8.1 with cuDNN -- Python 3.12 with uv package manager +- CUDA 12.9.1 with cuDNN +- Python 3.13 with uv package manager - FFmpeg 8+ with NVENC support (for video processing) - Ray and its distributed computing libraries - NVIDIA optimized Python packages @@ -63,8 +63,8 @@ Ray is the execution framework for all NeMo Curator pipelines. Dask is no longer | Property | Value | | --- | --- | -| Python Version | 3.12 | -| CUDA Version | 12.8.1 (configurable) | +| Python Version | 3.13 | +| CUDA Version | 12.9.1 (configurable) | | Operating System | Ubuntu 24.04 (configurable) | | Base Image | `nvidia/cuda:${CUDA_VER}-cudnn-devel-${LINUX_VER}` | | Package Manager | uv (Ultrafast Python package installer) | @@ -73,21 +73,13 @@ Ray is the execution framework for all NeMo Curator pipelines. Dask is no longer --- -## Security Hardening - -The container build includes the following security measures: - -- **`ray_dist.jar` removal**: Ray's Java support JAR is deleted during the build to remove a bundled jackson-core library affected by [GHSA-72hv-8253-57qq](https://github.com/advisories/GHSA-72hv-8253-57qq) (DoS via async JSON parser). NeMo Curator does not use Ray's Java support, so this has no functional impact. A build-time verification guard fails the build if the JAR is not successfully removed. - ---- - ## Container Build Arguments The main container accepts these build-time arguments for environment customization: | Argument | Default | Description | |----------|---------|-------------| -| `CUDA_VER` | `12.8.1` | CUDA version | +| `CUDA_VER` | `12.9.1` | CUDA version | | `LINUX_VER` | `ubuntu24.04` | Base OS version | | `CURATOR_ENV` | `ci` | Curator environment type | | `NVIDIA_BUILD_ID` | `` | NVIDIA build identifier | diff --git a/nemo_curator/backends/ray_data/diagnostics.py b/nemo_curator/backends/ray_data/diagnostics.py index cfa5868273..61371824be 100644 --- a/nemo_curator/backends/ray_data/diagnostics.py +++ b/nemo_curator/backends/ray_data/diagnostics.py @@ -30,6 +30,7 @@ import logging import os import threading +import time from dataclasses import dataclass from enum import StrEnum from typing import Any @@ -38,7 +39,7 @@ # private, untyped implementation modules. # ruff: noqa: ANN401 -_SUPPORTED_RAY_VERSION = "2.56.1" +_SUPPORTED_RAY_VERSION = "2.57.0" _INSTALL_MARKER = "_nemo_curator_ray_data_diagnostics_installed" _INSTALL_LOCK = threading.Lock() RAY_DATA_DIAGNOSTICS_ENV_VAR = "NEMO_CURATOR_RAY_DATA_DIAGNOSTICS" @@ -66,6 +67,10 @@ class _TaskAdmissionDecision: allocation: Any = None +def _milliseconds(seconds: float) -> float: + return round(seconds * 1000, 3) + + def format_logfmt_event(event: str, fields: dict[str, object]) -> str: """Format an event as stable, parseable logfmt-like tokens.""" @@ -94,6 +99,13 @@ def execution_resource_fields(prefix: str, resources: Any) -> dict[str, object]: } +def _object_store_memory_fields(resource_manager: Any, op: Any) -> dict[str, object]: + return { + "object_store_internal_bytes": resource_manager.get_mem_op_internal(op), + "object_store_output_bytes": resource_manager.get_mem_op_outputs(op), + } + + def install_ray_data_diagnostics() -> DiagnosticsInstallStatus: """Install driver-side diagnostics without modifying the Ray installation. @@ -154,7 +166,7 @@ def _has_native_diagnostics(autoscaler_module: Any, resource_manager_module: Any ) -def _install_resource_admission_diagnostics( # noqa: C901 +def _install_resource_admission_diagnostics( # noqa: C901, PLR0915 resource_manager_module: Any, resource_policy_module: Any ) -> None: allocator_cls = resource_manager_module.OpResourceAllocator @@ -201,6 +213,7 @@ def get_reservation_decision(self: Any, op: Any) -> _TaskAdmissionDecision: def policy_init(self: Any, data_context: Any, topology: Any, resource_manager: Any) -> None: original_init(self, data_context, topology, resource_manager) self._nemo_curator_previous_decisions = {} + self._nemo_curator_resource_blocked_since = {} def can_add_input(self: Any, op: Any) -> bool: allocator = self._resource_manager._op_resource_allocator @@ -213,6 +226,13 @@ def can_add_input(self: Any, op: Any) -> bool: signature = (decision.allowed, decision.reason) previous = self._nemo_curator_previous_decisions if previous.get(op) != signature: + blocked_since = self._nemo_curator_resource_blocked_since + if decision.allowed: + started_at = blocked_since.pop(op, None) + blocked_duration_ms = None if started_at is None else _milliseconds(time.perf_counter() - started_at) + else: + blocked_since.setdefault(op, time.perf_counter()) + blocked_duration_ms = None usage = None allocation = None if decision.remaining_budget is not None: @@ -227,6 +247,8 @@ def can_add_input(self: Any, op: Any) -> bool: "pending_output_estimate": decision.pending_output_estimate, **execution_resource_fields("usage", usage), **execution_resource_fields("allocation", allocation), + **_object_store_memory_fields(self._resource_manager, op), + "blocked_duration_ms": blocked_duration_ms, } resource_policy_module.logger.debug(format_logfmt_event("ray_data_resource_budget_admission", fields)) previous[op] = signature @@ -238,6 +260,11 @@ def can_add_input(self: Any, op: Any) -> bool: def _install_downstream_capacity_diagnostics(downstream_policy_module: Any) -> None: policy_cls = downstream_policy_module.DownstreamCapacityBackpressurePolicy + original_init = policy_cls.__init__ + + def policy_init(self: Any, *args: Any, **kwargs: Any) -> None: + original_init(self, *args, **kwargs) + self._nemo_curator_downstream_blocked_since = {} def should_apply_backpressure(self: Any, op: Any) -> bool: if self._should_skip_backpressure(op): @@ -256,6 +283,13 @@ def should_apply_backpressure(self: Any, op: Any) -> bool: previous = self._prev_should_backpressure.get(op) if previous != result: + blocked_since = self._nemo_curator_downstream_blocked_since + if result: + blocked_since.setdefault(op, time.perf_counter()) + blocked_duration_ms = None + else: + started_at = blocked_since.pop(op, None) + blocked_duration_ms = None if started_at is None else _milliseconds(time.perf_counter() - started_at) queue_bytes = self._get_queue_size_bytes(op) downstream_capacity_bytes = self._get_downstream_capacity_size_bytes(op) downstream_policy_module.logger.debug( @@ -269,12 +303,15 @@ def should_apply_backpressure(self: Any, op: Any) -> bool: "queue_ratio": f"{queue_ratio:.2f}", "configured_ratio": self._backpressure_capacity_ratio, "utilized_object_store_budget_fraction": utilized_fraction, + **_object_store_memory_fields(self._resource_manager, op), + "blocked_duration_ms": blocked_duration_ms, }, ) ) self._prev_should_backpressure[op] = result return result + policy_cls.__init__ = policy_init policy_cls._should_apply_backpressure = should_apply_backpressure @@ -377,6 +414,7 @@ def log_scaling_decision( # noqa: PLR0913 **execution_resource_fields("allocation", allocation), **execution_resource_fields("usage", usage), **execution_resource_fields("remaining_budget", remaining_budget), + **_object_store_memory_fields(self._resource_manager, op), }, ) ) diff --git a/nemo_curator/core/serve/ray_serve/backend.py b/nemo_curator/core/serve/ray_serve/backend.py index 3069e035a2..649dfd222b 100644 --- a/nemo_curator/core/serve/ray_serve/backend.py +++ b/nemo_curator/core/serve/ray_serve/backend.py @@ -49,13 +49,10 @@ def stop(self) -> None: import ray from ray import serve - self._clear_ray_serve_client_cache() with ray.init(ignore_reinit_error=True): serve.shutdown() except Exception: # noqa: BLE001 logger.debug("serve.shutdown() failed (cluster may already be gone)") - finally: - self._clear_ray_serve_client_cache() logger.info("Ray Serve stopped") @@ -114,21 +111,6 @@ def _quiet_runtime_env() -> dict[str, Any]: def _configure_ray_serve_haproxy() -> None: """Set Ray Serve HAProxy defaults before importing Ray Serve.""" os.environ.setdefault("RAY_SERVE_ENABLE_HA_PROXY", "1") - if not os.environ.get("RAY_SERVE_HAPROXY_BINARY_PATH"): - os.environ.setdefault("RAY_SERVE_EXPERIMENTAL_PIP_HAPROXY", "1") - - @staticmethod - def _clear_ray_serve_client_cache() -> None: - """Clear Ray Serve's cached controller client before reconnecting for shutdown. - - TODO: Remove this workaround once https://github.com/ray-project/ray/issues/64647 is fixed. - """ - try: - from ray.serve.context import _set_global_client - except (ImportError, AttributeError): - return - - _set_global_client(None) @staticmethod def _to_llm_config(model: RayServeModelConfig, quiet_runtime_env: dict[str, Any] | None = None) -> "LLMConfig": diff --git a/nemo_curator/core/utils.py b/nemo_curator/core/utils.py index 033631715e..81d2465283 100644 --- a/nemo_curator/core/utils.py +++ b/nemo_curator/core/utils.py @@ -201,7 +201,6 @@ def init_cluster( # noqa: PLR0913 bind_host="0.0.0.0", # noqa: S104 ) os.environ["RAY_SERVE_ENABLE_HA_PROXY"] = "1" - os.environ["RAY_SERVE_EXPERIMENTAL_PIP_HAPROXY"] = "1" os.environ["RAY_SERVE_HAPROXY_METRICS_PORT"] = str(haproxy_metrics_port) os.environ["RAY_SERVE_HAPROXY_STATS_PORT"] = str(haproxy_stats_port) logger.info( diff --git a/pyproject.toml b/pyproject.toml index 4f56d5a010..e15276db1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,7 +68,7 @@ dependencies = [ "openai>=1.0.0", "pandas>=2.1.0", "pyarrow", - "ray[default,data]>=2.56.1", + "ray[default,data]>=2.57.0", "torch", "transformers", ] @@ -90,10 +90,9 @@ vllm = [ inference_server = [ "nemo_curator[cuda12]", "nemo_curator[vllm]", - "ai-dynamo>=1.3.0; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", + "ai-dynamo>=1.3.1; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", "nixl-cu12>=0.10.0; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", - "ray[serve]>=2.56.1", - "ray-haproxy==2.8.20; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", + "ray[serve]>=2.57.0", ] # Installs CPU + GPU text curation modules @@ -341,7 +340,7 @@ constraint-dependencies = [ "cryptography>=46.0.6", # Address CVE GHSA-m959-cc7f-wv43 "nbconvert>=7.17.0", # Address CVE GHSA-xm59-rqc7-hhvf "pillow>=12.1.1", # Address CVE GHSA-cfh3-3jmp-rvhc - "protobuf>=5.29.6,<7.0", # Address CVE GHSA-8qvm-5x2c-j2w7; <7.0 due to ray serve FieldDescriptor API breakage + "protobuf>=5.29.6", # Address CVE GHSA-8qvm-5x2c-j2w7 "pyasn1>=0.6.2", # Address CVE GHSA-63vm-454h-vhhq "pyopenssl>=26.0.0", # Address CVE GHSA-5pwr-322w-8jr4 "python-multipart>=0.0.22", # Address CVE GHSA-wp53-j4wj-2cfg @@ -360,7 +359,7 @@ override-dependencies = [ "levenshtein; sys_platform == 'never'", "numpy>=2.0.0,<=2.2.0", # Override nemo-toolkits constraint of <2.0.0, upperbounds for Numba compatibility "numba==0.65.0", # Override RAPIDS/legacy caps for the inference image; vLLM 0.22 requires numba 0.65.0 - "protobuf>=5.29.5,<7.0", # Override nemo-toolkits constraint of ~=5.29.5; <7.0 due to ray serve FieldDescriptor API breakage + "protobuf>=5.29.5", # Override nemo-toolkits constraint of ~=5.29.5 "setuptools>=80.10.1", # Override setuptools range in other dependencies to address CVE GHSA-58pv-8j8x-9vj2 "torch==2.11.0; sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", # Match vLLM's CUDA requirements; Linux resolves to cu129 via tool.uv.sources "torchaudio==2.11.0; sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", # Match torch==2.11.0 diff --git a/requirements/text_cuda12-overrides.txt b/requirements/text_cuda12-overrides.txt index 7f8433998a..edeb7ff226 100644 --- a/requirements/text_cuda12-overrides.txt +++ b/requirements/text_cuda12-overrides.txt @@ -3,7 +3,7 @@ huggingface-hub>=0.34,<1.0 numba==0.65.0 numpy>=2.0.0,<=2.2.0 -protobuf>=5.29.5,<7.0 +protobuf>=5.29.5 setuptools>=80.10.1,<81.0.0 torch==2.11.0 torchaudio==2.11.0 diff --git a/tests/backends/ray_data/test_diagnostics.py b/tests/backends/ray_data/test_diagnostics.py index dc8a749681..b95d25dc68 100644 --- a/tests/backends/ray_data/test_diagnostics.py +++ b/tests/backends/ray_data/test_diagnostics.py @@ -89,9 +89,20 @@ def test_scheduler_diagnostics_are_written_to_ray_session_log( ray_data_log = session_dir / "logs" / "ray-data" / "ray-data.log" assert ray_data_log.exists() - log_contents = ray_data_log.read_text() - assert { - "ray_data_resource_budget_admission", - "ray_data_downstream_capacity_admission", - "ray_data_actor_autoscaling_decision", - } <= set(log_contents.split()) + event_lines = { + event: next(line for line in ray_data_log.read_text().splitlines() if event in line) + for event in ( + "ray_data_resource_budget_admission", + "ray_data_downstream_capacity_admission", + "ray_data_actor_autoscaling_decision", + ) + } + + for event in ("ray_data_resource_budget_admission", "ray_data_downstream_capacity_admission"): + assert "blocked_duration_ms=" in event_lines[event] + assert "object_store_internal_bytes=" in event_lines[event] + assert "object_store_output_bytes=" in event_lines[event] + + actor_event = event_lines["ray_data_actor_autoscaling_decision"] + assert "object_store_internal_bytes=" in actor_event + assert "object_store_output_bytes=" in actor_event diff --git a/uv.lock b/uv.lock index 6301764627..92e5d89843 100644 --- a/uv.lock +++ b/uv.lock @@ -34,7 +34,7 @@ constraints = [ { name = "cryptography", specifier = ">=46.0.6" }, { name = "nbconvert", specifier = ">=7.17.0" }, { name = "pillow", specifier = ">=12.1.1" }, - { name = "protobuf", specifier = ">=5.29.6,<7.0" }, + { name = "protobuf", specifier = ">=5.29.6" }, { name = "pyasn1", specifier = ">=0.6.2" }, { name = "pyopenssl", specifier = ">=26.0.0" }, { name = "python-multipart", specifier = ">=0.0.22" }, @@ -54,7 +54,7 @@ overrides = [ { name = "nixl-cu12", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')", specifier = ">=0.10.0", index = "https://pypi.org/simple" }, { name = "numba", specifier = "==0.65.0" }, { name = "numpy", specifier = ">=2.0.0,<=2.2.0" }, - { name = "protobuf", specifier = ">=5.29.5,<7.0" }, + { name = "protobuf", specifier = ">=5.29.5" }, { name = "setuptools", specifier = ">=80.10.1" }, { name = "sqlfluff", specifier = ">=4.2.0" }, { name = "torch", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')", specifier = "==2.11.0", index = "https://download.pytorch.org/whl/cu129" }, @@ -93,7 +93,7 @@ wheels = [ [[package]] name = "ai-dynamo" -version = "1.3.0.post1" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ai-dynamo-runtime" }, @@ -107,20 +107,20 @@ dependencies = [ { name = "zstandard" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/18/ef/8c0d3bef0f555f375a18a968d607be4af40dcf51144866db5cb5f70c51fd/ai_dynamo-1.3.0.post1-py3-none-any.whl", hash = "sha256:cd855d8e567752ebac92a8a6746963efcdc90bce02d944580ef8d0f6f9739847", size = 2681107, upload-time = "2026-07-22T04:11:48.476Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/a0bcd88fd898d08f84857184c98249668e5d8d67b22f640f70005be17c06/ai_dynamo-1.3.1-py3-none-any.whl", hash = "sha256:49ba9eba3d08eb22c2ebf8a5fd21b6a1f516775b839058d0120cc0cf66968d1d", size = 2680972, upload-time = "2026-08-05T23:11:06.169Z" }, ] [[package]] name = "ai-dynamo-runtime" -version = "1.3.0.post1" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "uvloop" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/f1/6b468ac39afdb0292d69c9c3b99ca165c9ed97493b9f0fd66b325e1255d4/ai_dynamo_runtime-1.3.0.post1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:45ca602fe4afca166c66150f2eccf2161dc39c1d0055914bef2a66c9bc0844dc", size = 46554625, upload-time = "2026-07-22T04:36:11.066Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2a/a3f4247b4b36ba0414ca8a06bcecddc5913d267bfb9c2a79464bf195fcfe/ai_dynamo_runtime-1.3.0.post1-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c6da59d250da41f2bde33641649edbca800186e2cec0aede8763c6c6de35b877", size = 47106907, upload-time = "2026-07-22T04:35:26.366Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d6/87b74be5572fc161e1ec0f4f6d74effea57ecf5661c73cb8cceb0b2f4114/ai_dynamo_runtime-1.3.1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4d5c0a25b4d0bcaf2a88f9fd0fb5c9ea27261b6b0fcba94c15195bf208e4be00", size = 46571190, upload-time = "2026-08-05T23:08:20.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/b6/cafb913e991359448c62c106aac71cf17c68d58a56dbb74620123e3e9363/ai_dynamo_runtime-1.3.1-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:75ff5632372ad3278bcc3da6e2320e12f29fd663f93aba0db0127fac446e2a7b", size = 47082292, upload-time = "2026-08-05T23:04:34.808Z" }, ] [[package]] @@ -2205,8 +2205,8 @@ name = "dynet38" version = "2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "numpy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "cython" }, + { name = "numpy" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fd/c3/46f879632262817aced0889c15c694d327173b3f75467994201d9ddc1f38/dyNET38-2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8963383d935e802941c8f9d778403798452e172150c3b4b5dee288d50b62ecc8", size = 6961879, upload-time = "2024-01-23T10:31:51.197Z" }, @@ -2555,12 +2555,12 @@ name = "flask" version = "3.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blinker", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "click", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "itsdangerous", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "markupsafe", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "werkzeug", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, ] sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } wheels = [ @@ -2941,34 +2941,34 @@ name = "gradio" version = "6.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "audioop-lts", marker = "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "brotli", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "fastapi", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "gradio-client", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "groovy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "hf-gradio", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "huggingface-hub", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "jinja2", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "markupsafe", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "numpy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "orjson", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pandas", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pillow", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pydantic", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pydub", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "python-multipart", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pytz", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pyyaml", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "safehttpx", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "semantic-version", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "starlette", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "tomlkit", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "uvicorn", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "anyio" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "brotli" }, + { name = "fastapi" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "hf-gradio" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "safehttpx" }, + { name = "semantic-version" }, + { name = "starlette" }, + { name = "tomlkit" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/96/3618f8a189180ab3d4e5f8b258fd92e419eda9f49b6ab4dd50c6782cda33/gradio-6.20.0.tar.gz", hash = "sha256:8672866e9225a1f8297325a6742bb525a3a0ddc8aa4d75d99beb10a27ea2915f", size = 44844340, upload-time = "2026-07-07T18:53:57.402Z" } wheels = [ @@ -2980,11 +2980,11 @@ name = "gradio-client" version = "2.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fsspec", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "huggingface-hub", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "typing-extensions", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "fsspec" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "packaging" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e8/e6/6b6029f5fe2ad7f1211105d530e34d991014c2cae463f9223033031cfc4f/gradio_client-2.5.0.tar.gz", hash = "sha256:4cde99bad62149595c30c90876ca2e405e3a13687ecf895474f3412cb476673d", size = 59013, upload-time = "2026-04-20T23:16:21.518Z" } wheels = [ @@ -3109,8 +3109,8 @@ name = "hf-gradio" version = "0.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "gradio-client", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "typer", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "gradio-client" }, + { name = "typer" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/86/c9694b7cfada5780e75769e60dc161a161f4dd7fc91b61db5e3a3338bef9/hf_gradio-0.4.1.tar.gz", hash = "sha256:a017d942618f0d495a58ee4563047fa04bef614c00e0cb789a9a6d0633cffa7b", size = 6560, upload-time = "2026-04-22T14:01:32.334Z" } wheels = [ @@ -5264,9 +5264,9 @@ name = "nagisa" version = "0.2.11" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dynet38", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "numpy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "six", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "dynet38" }, + { name = "numpy" }, + { name = "six" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e1/71/1cc63f4fde1c1ca491ea69b46c3c5bd6bb06f3efa8262f34b227fe25dbf5/nagisa-0.2.11.tar.gz", hash = "sha256:213e8f837c6f7391ea1f56f4fa6047612d117e3f0e9c4f6b93a3a77f78ba6e6f", size = 20930765, upload-time = "2024-01-28T17:32:49.924Z" } wheels = [ @@ -5413,7 +5413,6 @@ all = [ { name = "raft-dask-cu12" }, { name = "rapidsmpf-cu12" }, { name = "ray", extra = ["serve"] }, - { name = "ray-haproxy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "requests" }, { name = "resiliparse" }, { name = "s3fs" }, @@ -5539,7 +5538,6 @@ inference-server = [ { name = "nixl-cu12", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nvidia-ml-py" }, { name = "ray", extra = ["serve"] }, - { name = "ray-haproxy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "vllm", version = "0.22.0+cu129", source = { registry = "https://wheels.vllm.ai/0.22.0/cu129" }, extra = ["otel", "runai"], marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] interleaved-cpu = [ @@ -5622,7 +5620,6 @@ sdg-cuda12 = [ { name = "nixl-cu12", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nvidia-ml-py" }, { name = "ray", extra = ["serve"] }, - { name = "ray-haproxy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "vllm", version = "0.22.0+cu129", source = { registry = "https://wheels.vllm.ai/0.22.0/cu129" }, extra = ["otel", "runai"], marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] text-cpu = [ @@ -5773,7 +5770,7 @@ test = [ requires-dist = [ { name = "absl-py", specifier = ">=2.0.0,<3.0.0" }, { name = "accelerate", marker = "extra == 'audio-common'", specifier = ">=1.12.0" }, - { name = "ai-dynamo", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'inference-server') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'inference-server')", specifier = ">=1.3.0" }, + { name = "ai-dynamo", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'inference-server') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'inference-server')", specifier = ">=1.3.1" }, { name = "aiohttp", marker = "extra == 'translation-nmt'", specifier = ">=3.13.3" }, { name = "av", marker = "extra == 'video-cpu'", specifier = "==17.1.0" }, { name = "beautifulsoup4", marker = "extra == 'text-cpu'" }, @@ -5885,9 +5882,8 @@ requires-dist = [ { name = "qwen-omni-utils", marker = "extra == 'audio-cuda12'", specifier = ">=0.0.9" }, { name = "raft-dask-cu12", marker = "extra == 'deduplication-cuda12'", specifier = "==25.10.*" }, { name = "rapidsmpf-cu12", marker = "extra == 'deduplication-cuda12'", specifier = "==25.10.*" }, - { name = "ray", extras = ["data", "default"], specifier = ">=2.56.1" }, - { name = "ray", extras = ["serve"], marker = "extra == 'inference-server'", specifier = ">=2.56.1" }, - { name = "ray-haproxy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'inference-server') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'inference-server')", specifier = "==2.8.20" }, + { name = "ray", extras = ["data", "default"], specifier = ">=2.57.0" }, + { name = "ray", extras = ["serve"], marker = "extra == 'inference-server'", specifier = ">=2.57.0" }, { name = "requests", marker = "extra == 'translation-nmt'" }, { name = "resiliparse", marker = "extra == 'text-cpu'" }, { name = "s3fs", marker = "extra == 'interleaved-cpu'", specifier = ">=2024.12.0" }, @@ -9037,17 +9033,17 @@ name = "qwen-asr" version = "0.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "accelerate", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "flask", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "gradio", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "librosa", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "nagisa", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "pytz", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "qwen-omni-utils", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "soundfile", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "sox", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "soynlp", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "transformers", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "accelerate" }, + { name = "flask" }, + { name = "gradio" }, + { name = "librosa" }, + { name = "nagisa" }, + { name = "pytz" }, + { name = "qwen-omni-utils" }, + { name = "soundfile" }, + { name = "sox" }, + { name = "soynlp" }, + { name = "transformers" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7f/5b/56c5175d1a4d6ed8602003385570304305e4ae9c40b999d12d75a70c0561/qwen_asr-0.0.6.tar.gz", hash = "sha256:294893f2340dc2d58d1f1d1cb8ce26ac0a79f254805ab432dda2892bd5c8d13c", size = 146666, upload-time = "2026-01-30T03:24:02.697Z" } wheels = [ @@ -9159,7 +9155,7 @@ wheels = [ [[package]] name = "ray" -version = "2.56.1" +version = "2.57.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -9172,17 +9168,17 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/60/61/4374f94492dd5927f30bb0f4c2ef8419faefbd85636b7d991f83056d2c02/ray-2.56.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5eebd776cd461edebc5874d2dfba3005147b6b45645d8a16a6549311c5efffea", size = 66356353, upload-time = "2026-07-17T21:28:19.148Z" }, - { url = "https://files.pythonhosted.org/packages/79/3c/787e104f7b167e99e8283fac59b37938999ce44cd7312aab7e327bbec071/ray-2.56.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:4df45f33cc176b11c69191efdcfb4aceaeea22fecfa784f6485b6504ef8c8b26", size = 73301425, upload-time = "2026-07-17T21:28:24.269Z" }, - { url = "https://files.pythonhosted.org/packages/6e/bd/4a704cfe4321d732c363093bb03798b027982f3828495b27bfbbb86c0fc5/ray-2.56.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:e7003a47a42ef2ad33ec0b34dc5b6afb03f63fe59465e6f4c8f6d05492d9e4a6", size = 74145394, upload-time = "2026-07-17T21:28:29.532Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7b/6d61abe6d7b6ef1a4846bcf5eb381d6c8c4ffe827cd583f72fa9a64cd772/ray-2.56.1-cp311-cp311-win_amd64.whl", hash = "sha256:c102fb09e82c2e10828d5c21cfb744e27bca690b287c7d0a77d0d883c0c86907", size = 28392678, upload-time = "2026-07-17T21:28:34.279Z" }, - { url = "https://files.pythonhosted.org/packages/50/d9/a17feef16a123f5d32d4c5fa7de853c59ba702f8404cf452a7ce20faca13/ray-2.56.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:44bc0000c5bfad85b2ff6e0ef91e95f901d1a2d2fdd72f94f08a046eb494cd61", size = 66346989, upload-time = "2026-07-17T21:28:39.4Z" }, - { url = "https://files.pythonhosted.org/packages/05/19/c3b1bcccd09decaf2a2e3370041ae67070bb1a8638f2665d36edfbb0261d/ray-2.56.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:8fdd6b096215906cf1f9acdc7898c9d6140606f2d27245778b8385a9f19e6cb0", size = 73319289, upload-time = "2026-07-17T21:28:44.502Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7f/577a61bf2c8eff26e942afe53a6b03f4dbf5b4f233b832c228417d0c954e/ray-2.56.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:e5d3173696831134c76bd09451dfe95c32d72c271253b0d6b09d2df9994aa660", size = 74194147, upload-time = "2026-07-17T21:28:50.567Z" }, - { url = "https://files.pythonhosted.org/packages/00/e9/0fd1223597f9ca98ec496ec726043918a5301547789b1be95a635ec82649/ray-2.56.1-cp312-cp312-win_amd64.whl", hash = "sha256:8052573ee5ef8c4fdd7aeb6a257c80542e69c48f3f6d117101f95c970ffdc7e2", size = 28373294, upload-time = "2026-07-17T21:28:55.122Z" }, - { url = "https://files.pythonhosted.org/packages/dd/58/fab4cf69ec9be22210a6634f9310acf0b40c1c5a0f65d380f8cd11aa661e/ray-2.56.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:93dedab658334af81877b6ed840c4e5f85e2e0b1b3641b20eaaee37cad835cc6", size = 66291122, upload-time = "2026-07-17T21:28:59.906Z" }, - { url = "https://files.pythonhosted.org/packages/68/9b/622d4f77fc65e9e2ee1a9d2480a1bde4b244edf65eda1f0c488dc8818e57/ray-2.56.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:7fdc47de4e230f0db7c6c668a9e161f864dac548bd32230986e0b0c36e386eb5", size = 73253432, upload-time = "2026-07-17T21:29:05.445Z" }, - { url = "https://files.pythonhosted.org/packages/43/ab/649395a3b286c4be86cfe4e8072a746f4d6b6dc68d78396f462d8b94795e/ray-2.56.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:81f2db202cc31bc3f5c4acf9ef154d10f1f39ece602d9d2d3108875c49bf01c3", size = 74131273, upload-time = "2026-07-17T21:29:10.547Z" }, + { url = "https://files.pythonhosted.org/packages/aa/de/46be4f29a6019887b9475fd02182cb5866f7cbefc29bb8fae2a918e533d2/ray-2.57.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:a016d6258b53571952f2a8251571b2d73d8f6b0981be6c61e160cc901b711871", size = 66760925, upload-time = "2026-08-11T00:20:58.097Z" }, + { url = "https://files.pythonhosted.org/packages/d8/31/57cb492f26e5c6ec364b695b2e95a2f5fdd31fd7cecbc7b035c340b39eed/ray-2.57.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:7a9826e33bfaf465219ab329e05f03e3f6a919fce5d21692f5ac566a44277cb3", size = 76867063, upload-time = "2026-08-11T00:21:03.51Z" }, + { url = "https://files.pythonhosted.org/packages/c6/87/e26df6649b3143100f1ea3ad797bb1c1c7e2a922503229ff6889d563f9e4/ray-2.57.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:b0cc3d435bef6e7ffe848816e7369d30ee297e88c4c1abc6323cc9383ff3826f", size = 77837420, upload-time = "2026-08-11T00:21:08.907Z" }, + { url = "https://files.pythonhosted.org/packages/1c/aa/497593f7a0cd83b2ce84512124bf3b499aa531b85ce4650d345e04f45993/ray-2.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aea302a3f6bcb74cc6e1e458256ce6a2770632b0c0f39540e7bb4111fc3af85", size = 28705314, upload-time = "2026-08-11T00:21:13.174Z" }, + { url = "https://files.pythonhosted.org/packages/29/95/1350323300f88673d8d53f825d482834daddab9614c600855dc1a0189b33/ray-2.57.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8ef591575c531793feb7f77744c52c34509ff58b48b30d0a3bcb6a1666256b02", size = 66747412, upload-time = "2026-08-11T00:21:19.219Z" }, + { url = "https://files.pythonhosted.org/packages/80/bf/63da261f0424039171745ae62f9804fb6e55b7aa61a50e886d2069e0d77f/ray-2.57.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:eeb1d1adb61bd1d8affdc5fb555af0494fed8fec53b83576d4c60f811e06be94", size = 76886725, upload-time = "2026-08-11T00:21:24.801Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3f/a580c1a8d9574372f83d4b97cd11ae64fdfa1c099c4728ec5197470cf094/ray-2.57.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:595d088b1fd1add64654c6cebe203e25903787b650d35c4a3dc008d451e48a41", size = 77891434, upload-time = "2026-08-11T00:21:29.991Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8d/85c3a1ad54f6fa9cc1d1261cc5087435d03761fd50980cabe15a8ccd6f71/ray-2.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:b9f26334a862fac660f70b125474d5c7b72d16e23b3ebfefeacd72659aa36af6", size = 28684792, upload-time = "2026-08-11T00:21:34.788Z" }, + { url = "https://files.pythonhosted.org/packages/a5/c0/f67121caa9685b10d207dec33cd29ab8eaf81338a989edbcb8a87a28271b/ray-2.57.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:21b67eddc751ba8c65deee8654075c2b42851104c936ce42ca7944c4b6ec4799", size = 66692716, upload-time = "2026-08-11T00:21:40.072Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6c/bd35db22279a8697fc6bfdfb62447bbb0d0f14243e57cb298cf8d80fec85/ray-2.57.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:5e2d9258f751676f7581dc0ad307c2d91290825442366128c9ed0ccd0f60b845", size = 76825638, upload-time = "2026-08-11T00:21:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/fc/29/3022974371111b3641fbddb4cf9344cb514b7bb45ca5cf0806c5a427b087/ray-2.57.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:71aa1c52fe7800cd217b601bf9ff557c2a3ffe5fad5b00f6792da9a678b2c914", size = 77832409, upload-time = "2026-08-11T00:21:50.988Z" }, ] [package.optional-dependencies] @@ -9222,6 +9218,7 @@ serve = [ { name = "prometheus-client" }, { name = "py-spy" }, { name = "pydantic" }, + { name = "ray-haproxy", marker = "sys_platform == 'linux'" }, { name = "requests" }, { name = "smart-open" }, { name = "starlette" }, @@ -9232,11 +9229,11 @@ serve = [ [[package]] name = "ray-haproxy" -version = "2.8.20" +version = "2.8.25" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/6a/8c85971673090b0ea5786ca32f1bf4e276fa25b00685e5eb442e336dbc4a/ray_haproxy-2.8.20-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:a955cbb370c9b9a4dadecd265ddff3ac6d007ad70eae293f05ef753a22b5e1f2", size = 3956874, upload-time = "2026-04-14T01:03:49.431Z" }, - { url = "https://files.pythonhosted.org/packages/cc/47/a5e789edb188ae1fc456e13f7cc4ab2c62109462772f3003306730561ee7/ray_haproxy-2.8.20-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:da23d7d28c39247826466ddfe3c166db7cef5dcd44d8a64b8f9eb91e7089076c", size = 4108876, upload-time = "2026-04-14T01:03:51.481Z" }, + { url = "https://files.pythonhosted.org/packages/31/78/4cdca49514f94ced71525c5662e0b62fc64d625f4536910304dc71c680e9/ray_haproxy-2.8.25-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:a63902c2fe7eb51fbcb502980228d743b79da6cecab230c4c24674517b1ac3ac", size = 3962434, upload-time = "2026-06-29T21:49:54.611Z" }, + { url = "https://files.pythonhosted.org/packages/b7/48/bef71a3bd4fa4b467299a9b859fac0a7660eefbc56d47b4b0f2b7c34491a/ray_haproxy-2.8.25-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:51671f11afb571ed5b37042f9287daf48de235f2d32ad18b732ee9587e9ad076", size = 4115278, upload-time = "2026-06-29T21:49:56.244Z" }, ] [[package]] @@ -9780,7 +9777,7 @@ name = "safehttpx" version = "0.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "httpx", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "httpx" }, ] sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } wheels = [ @@ -10198,10 +10195,10 @@ name = "soynlp" version = "0.0.493" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "psutil", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "scikit-learn", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, - { name = "scipy", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" }, + { name = "numpy" }, + { name = "psutil" }, + { name = "scikit-learn" }, + { name = "scipy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/05/fb3f0c9248e60a0224e77198c31517b93b92d6060873b641caf474d42993/soynlp-0.0.493.tar.gz", hash = "sha256:4b20b825edbcadb9ebd494de54d8ca50b0ee317fe58d090e8b509d733422136a", size = 405393, upload-time = "2019-08-25T05:28:00.755Z" } wheels = [