Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ModelExpress Python Client

Python client for ModelExpress -- high-performance GPU-to-GPU model weight transfers using NVIDIA NIXL over RDMA/InfiniBand.

Instead of each inference engine instance loading model weights from storage, one instance loads the model and transfers weights directly to later instances via GPUDirect RDMA, bypassing the CPU entirely.

Installation

# From PyPI (coming soon)
pip install modelexpress

# Editable install from source
pip install -e .

# With test dependencies
pip install -e ".[dev]"

# Additionally install the pinned protobuf code generator when changing protobuf APIs
pip install -e ".[codegen]"

NIXL is expected to be supplied by the runtime environment (TRT-LLM, SGLang, Dynamo, and NemoRL runtime images all ship nixl-cu12 or nixl-cu13). For a bare-environment install, run pip install nixl-cu12 or pip install nixl-cu13 separately, matching your host CUDA toolkit.

Requirements

  • Python >= 3.10
  • protobuf >= 5.27.2 and < 7
  • NVIDIA GPUs with RDMA/InfiniBand support
  • NIXL (NVIDIA Interconnect eXchange Library)
  • A running ModelExpress server (Rust gRPC service backed by Redis)

Quick Start with vLLM

vLLM 0.23.0 and newer recognize --load-format modelexpress natively. Install the ModelExpress Python package in the vLLM image; no VLLM_PLUGINS setting or manual loader registration is required. For older vLLM versions, set VLLM_PLUGINS=modelexpress or call register_modelexpress_loaders() manually.

export MX_SERVER_ADDRESS="modelexpress-server:8001"

vllm serve deepseek-ai/DeepSeek-V4-Pro \
    --load-format modelexpress \
    --tensor-parallel-size 8 \
    --trust-remote-code

Starting the vLLM engine with the modelexpress load format on the source worker will load the weights from disk and register/publish the NIXL and tensor metadata to the MX server. The mx load format is kept as a backward-compatible alias. On the target worker, it retrieves metadata from the MX server and streams weights over RDMA from GPU to GPU. Set MX_ARTIFACT_TRANSFER=1 to also reuse compatible vLLM JIT caches from a ready source.

Quick Start with SGLang

SGLang integrates through its remote_instance loader with the modelexpress backend. Use an SGLang image that includes upstream sgl-project/sglang#24723, such as the known-good release image lmsysorg/sglang:v0.5.13.post1, and install the ModelExpress package into that image.

export MX_SERVER_ADDRESS="modelexpress-server:8001"

python -m sglang.launch_server \
    --model-path deepseek-ai/DeepSeek-V3 \
    --tp 8 \
    --load-format remote_instance \
    --remote-instance-weight-loader-backend modelexpress \
    --modelexpress-config '{"transport": "nixl"}'

Quick Start with TensorRT-LLM

TensorRT-LLM integrates through its native checkpoint_format="MX" interface. Install ModelExpress in a qualified TensorRT-LLM image, then construct the PyTorch backend with the ModelExpress server configuration:

from tensorrt_llm.llmapi import LLM

llm = LLM(
    model="/model",
    checkpoint_format="MX",
    mx_config={
        "server_url": "modelexpress-server:8001",
    },
    tensor_parallel_size=4,
    backend="pytorch",
)

The first replica falls back to the Hugging Face checkpoint and publishes its post-transform weights; later compatible replicas receive them through ModelExpress. The current qualified scope is the LlamaForCausalLM family. See the TensorRT-LLM P2P example for the qualified-image requirement and production-style Kubernetes deployment.

Programmatic Usage

RL trainer publication

An RL framework creates a weight version through the external Refit API. Each trainer actor then invokes its rank-local client to stage and publish one shard. Worker registration, manifest serving, and internal shard CRUD remain hidden behind the client.

When creating a WeightVersion, the orchestrator may supply its UID or let MX generate one. A caller-supplied UID already assigned to another request returns ALREADY_EXISTS; an identical request retried with the same idempotency key returns the existing version.

from modelexpress_rl import (
    MegatronTrainerContext,
    ModelExpressTrainerClient,
    ModelExpressTrainerConfig,
    WeightVersionRef,
)

trainer = ModelExpressTrainerClient.initialize(
    ModelExpressTrainerConfig(engine_context=MegatronTrainerContext())
)
trainer.bind_tensors(megatron_tensor_specs)
trainer.publish_version(version=WeightVersionRef(version.uid))

The deployment supplies MX_MODEL_NAME_OVERRIDE, MX_TRAINER_STAGING_MODE, MX_WEIGHT_PAYLOAD_FORMAT, MX_WORKER_HOST, and the normal ModelExpress server configuration. The Megatron adapter derives its source slot from logical tensor names and shard geometry. DP replicas of the same partition therefore publish redundant workers for one slot, while distinct TP partitions remain separate required slots. The NIXL metadata endpoint is derived from MX_WORKER_HOST and the client-owned NIXL manager's listen port. LOCAL_RANK selects the device unless device_id is passed to initialize().

Canonical S3 staging consumes Hugging Face tensor buckets produced by the training framework. Framework-native bucket settings remain the default. The public trainer API accepts ModelExpressTrainerConfig(object_storage=ObjectStorageConfig(...)); its storage_type selects the provider. Weight versions use the corresponding typed ObjectStorageSource envelope. Generator clients likewise accept ModelExpressGeneratorConfig(object_storage=ObjectStorageGeneratorConfig(...)). The current trainer and generator clients support only ObjectStorageType.S3. Integrations may use MX_REFIT_DELTA_BUCKET_BYTES as an explicit override, or its 512 MiB default when they have no native setting. CPU workers are configured by MX_REFIT_DELTA_WORKERS (default min(32, CPU count)), while MX_S3_UPLOAD_WORKERS controls concurrent full-checkpoint batch uploads. MX_REFIT_CHECKSUM_FORMAT selects the checksum algorithm and defaults to adler32. The framework integration reads the bucket-size setting while constructing the stream; ModelExpress processes each supplied bucket without splitting or merging it. Before training begins, the framework calls prepare_delta_base() with one bucket stream. ModelExpress submits each framework bucket directly for concurrent rank-local seed-checkpoint reads. Real delta staging therefore performs no seed-checkpoint reads. A FULL_HF_CHECKPOINT version serializes the current buckets as native HF safetensor shards, omits base_version_id, and replaces the retained snapshot so the next XOR_DELTA uses it as its exact base. A bounded worker pool updates the rank-local snapshot with immutable CPU tensors. Each publishing rank groups its snapshot into concurrently uploaded safetensors objects with at most MX_REFIT_FULL_CHECKPOINT_BATCH_BYTES tensor bytes (4 GiB by default); an oversized tensor occupies its own object. The objects are sent directly to S3 without a trainer-side temporary checkpoint. Framework integrations own the optional full-checkpoint period; it is disabled by default. Generators use the ModelExpress S3 client to download full-checkpoint batches concurrently. Each worker validates one downloaded batch and copies its tensors into their existing local mmap destinations, without materializing a second full checkpoint. ModelStreamer integration remains a future optimization. The local checkpoint state changes from READY to UPDATING before mutation and returns to READY only after success. An interrupted update must be reseeded from seed_checkpoint_path during initialization. The framework supplies each version's exact object_storage.uri under the configured uri_prefix. That URI names the global safetensors index; its objects are stored beside it. A delta index records the target WeightVersion.uid and its base_version_id as metadata.version and metadata.base_version. After upload, the orchestrator changes the version from STAGING to READY. S3 versions remain READY for rollout recovery; their immutable objects are governed by the bucket's external lifecycle policy.

Generators use registered MX IDs and base relationships to replay S3 deltas. The manifest's metadata.version and metadata.base_version may differ from those IDs or be absent, allowing existing artifacts to be registered without rewriting their indexes. The caller must register the correct S3 URI and base version; MX's exact-base checks and payload validation remain enabled.

The client owns the NIXL manager and trainer-side manifest service. server_url selects the central ModelExpress control-plane service and defaults to the normal ModelExpress server configuration. A Megatron worker may initialize the client before its distributed process group is ready; the explicitly selected engine_context is constructed lazily on the first tensor operation. Deployment environment variables do not select Python implementations.

For synchronous trainers, prefer IN_PLACE when storage remains stable and no trainer-side conversion is needed. FSDP also supports COPY_TO_HOST, the first choice when in-place publication is unavailable. Reserve COPY_TO_DEVICE for cases where measured latency justifies a persistent extra copy in VRAM. See staging mode selection for conversion, lifetime, host-memory, and compatibility requirements.

Initialization fixes the staging mode. NIXL also fixes its payload format; canonical S3 publication follows each target WeightVersion. On NIXL, publish() hides manifest publication and the internal CreateWeightVersionShard RPC. The current Megatron adapter registers and exposes its live buffers through IN_PLACE, so callers must keep those tensors immutable while the version is published. The required lifecycle is synchronous: create and publish the version, update every generator, retire and release the version, and only then resume training or begin the next optimizer step.

Version creation and expected-source-slot declaration remain framework-orchestrator responsibilities. Each trainer adapter derives its own source slot from the engine's native topology; the orchestrator declares the expected slots using the same adapter-defined convention. initialize() constructs the adapter selected by engine_context internally. Megatron and FSDP implementations are available. Megatron-specific APIs live under modelexpress_rl; modelexpress.refit.reshard remains the shared, engine-neutral transfer core.

MxClient

MxClient is a lightweight gRPC client for communicating with the ModelExpress server:

from modelexpress import MxClient

client = MxClient(server_url="modelexpress-server:8001")

# Query for a source model
response = client.get_metadata("deepseek-ai/DeepSeek-V4-Pro")
if response.found:
    for worker in response.workers:
        print(f"Worker rank {worker.worker_rank}: {len(worker.tensors)} tensors")

# Wait for source readiness (blocks until ready or timeout)
success, session_id, metadata_hash = client.wait_for_ready(
    model_name="deepseek-ai/DeepSeek-V4-Pro",
    worker_id=0,
    timeout_seconds=7200,
)

client.close()

Registering Loaders Manually

Manual registration is only needed for integrations that construct vLLM loaders outside vLLM 0.23.0's native load-format path.

from modelexpress import register_modelexpress_loaders

register_modelexpress_loaders()
# Now vLLM recognizes --load-format modelexpress and mx

Environment Variables

Variable Default Description
MX_SERVER_ADDRESS localhost:8001 ModelExpress gRPC server address (recommended)
MODEL_EXPRESS_URL localhost:8001 Deprecated in favor of MX_SERVER_ADDRESS. Still read by all client paths and still takes precedence when both are set, because the TRT-LLM live-transfer integration reads only this name. It is removed once that path reads MX_SERVER_ADDRESS; until then set both to the same value.
MX_DISABLE_PATCHES 0 Emergency escape hatch that skips all runtime compatibility patches. Set to 1, true, yes, or on if a patch is incompatible with the installed engine.
MX_EXPECTED_WORKERS Auto-detected from TP size Number of GPU workers to coordinate
MX_SYNC_PUBLISH 0 Source: wait for all workers before publishing metadata
MX_SYNC_START 1 Target: wait for all source workers before transferring
MX_POOL_REG 0 Allocation-level NIXL registration (registers cudaMalloc blocks instead of individual tensors)
MX_P2P_METADATA 1 Serve tensor and artifact manifests directly from source workers; set to 0 to route full tensor metadata through the central server
MX_LOAD_STRATEGY_CHAIN INFERENCE Select the engine-neutral initial-load policy. With RL, a configured desired UID permits only desired-version P2P and S3 replay; without one, loading falls back through MX_MODEL_URI and then the engine default. vLLM speculative draft models are rejected in RL mode.
MX_REFIT_DESIRED_VERSION_UID (unset) Exact version required when MX_LOAD_STRATEGY_CHAIN=RL; startup fails rather than using a version-agnostic fallback when neither P2P nor S3 can load it
MX_GENERATOR_SOURCE_ORDER Auto-detected Ordered RL weight sources. Desired-version cold start defaults to GENERATOR,OBJECT_STORAGE; OBJECT_STORAGE disables P2P for both cold start and active refit. TRAINER applies only to active refit and is rejected for desired-version cold start.
MX_REFIT_CHECKPOINT_DIR (unset) Host-local cache for RL S3 full checkpoints, deltas, and materialized checkpoints; the S3 strategy skips when it is unset
MX_REFIT_METADATA_PORT 7555 Base NIXL metadata-listener port for RL generator refit; each rank adds its local device ID. Kept separate from MX_METADATA_PORT, which may remain owned by the boot-time loader
MX_ARTIFACT_TRANSFER 0 Transfer compatible vLLM TorchInductor, Triton, DeepGEMM, TileLang, CuTe DSL, and FlashInfer JIT caches, including persistent autotune files when supported by vLLM
MX_ARTIFACT_BUNDLE_ROOT $TMPDIR/modelexpress-artifacts Staging root for tarred cache artifact bundles
MX_ARTIFACT_COMPILE_CONFIG_DIGEST empty Optional compile-configuration compatibility digest for cache discovery
MX_ARTIFACT_READY_URL Framework default Readiness endpoint checked before a source publishes weights or JIT cache artifacts (http://127.0.0.1:8000/health for vLLM; http://127.0.0.1:30000/health for SGLang). On the non-head nodes of a multi-node engine, a loopback host is rewritten onto the head's address (the engine's own distributed-init address, else LWS_LEADER_ADDRESS), preserving the configured port and path. A non-loopback host is used verbatim
MX_ARTIFACT_READY_TIMEOUT_SECS 1800 Maximum time to wait for readiness and successful artifact publication
MX_HEARTBEAT_INTERVAL_SECS 30 Seconds between READY status heartbeats for published sources, including reshard rendezvous sources; keep below the server heartbeat timeout
MX_RESHARD_MAX_SEGMENTS_PER_COPY 64 Maximum exact descriptors for one no-gather refit copy before a compatible dim-0-sharded source is pulled once into contiguous staging and sliced locally
MX_RESHARD_FUSED_WIRE 1 Issue a refit's exact-segment, full-pull, and convert reads as one transport batch instead of draining each phase in turn. Set to 0 to restore the phased reads for an A/B comparison
MX_RESHARD_BATCH_INSTALL 1 Re-slice a refit's full-pulled sources with one batched torch._foreach_copy_ instead of one copy_() per captured view. Issues the same copies; a per-view loop costs thousands of kernel launches whose overhead can rival the RDMA. Set to 0 to restore the per-view loop for an A/B comparison
MX_RESHARD_CACHE_DESCRIPTORS 1 Build NIXL read descriptors once per stable transfer plan and reuse them across refits. Set to 0 to rebuild the descriptor lists on every step for an A/B comparison
MX_RESHARD_REQUIRE_FULL_COVERAGE 0 Fail a refit that installs less than MX_RESHARD_COVERAGE_FLOOR of the engine's parameter bytes. Off by default because partial and subset refit are intended; set to 1 for benchmark runs, where an incomplete refit produces timings that are the wrong magnitude
MX_RESHARD_COVERAGE_FLOOR 0.995 Fraction of engine parameter bytes a gated refit must install. Not 1.0: a few engine parameters, such as rotary inv_freq, are legitimately not refit material. Values outside [0.0, 1.0] are rejected
MX_RESHARD_HANDSHAKE_TIMEOUT_S 900 Budget for the whole P2P metadata handshake, across every trainer peer and every retry. Bounds the handshake independently of the refit timeout, so one unreachable publisher cannot consume the entire refit
MX_RESHARD_HANDSHAKE_ATTEMPT_S 20 Ceiling on a single peer dial. A reachable peer answers in well under a second, so a short attempt frees the budget to try a different peer rather than block on one
MX_RESHARD_HANDSHAKE_BACKOFF_S 2 Pause after a full pass over the pending peers makes no progress, so a transient stall is waited out rather than hammered
MX_REFIT_STAGE_RECORD 1 Emit one refit-stage-v2 JSON record per refit, giving a benchmark harness the per-stage timings without parsing logs. Set to 0 to silence it
MX_REFIT_PACK_MODULES 0 Coalesce consecutive owning-module batches in a bounded refit up to the same max_staging_bytes, trading a larger arena residency for fewer of them. The packed batch reads exactly the bytes its modules read — same copies, planned bytes and READ descriptors — and modules pulling the same complete source are never packed together. Off by default because one module per batch is the smallest arena a model can refit through
MX_RESHARD_MAX_GBPS 0 Per-rank fabric ceiling in Gbps. A measured wire rate above it means the timing is wrong rather than the transfer being fast, so the refit is rejected. 0 disables the check, since only the operator knows the real per-rank limit
MX_RESHARD_MIN_GBPS 0 Per-rank floor in Gbps. Below it, the refit emits a refit-slow-throughput-v1 JSON warning naming the rate, the bound and the shortfall. Applies to both receivers — the Megatron slice-reshard receiver and the staged receiver the FSDP trainers pull over, including its peer-to-peer pull — so one setting covers a job whichever path it refits on. Warns rather than aborting, unlike the ceiling: an impossible rate means the payload never moved, but a slow one is still correct, so enforcement belongs in a CI gate reading the record rather than in a running job. 0 disables it. Worth setting for any throughput run — a 20x collapse has been observed with byte counts exact, descriptor counts exact, coverage 100%, fallback 0 and no error anywhere, and without a lower bound there is nothing in the telemetry that dissents. When choosing a value, note that it is compared per rank against the rate one receiver sees while its siblings are also receiving, which is well below the rate a single receiver reaches alone; sizing it against the solo number puts the floor above the healthy concurrent rate and it will fire on good runs. Aim between the two — roughly the geometric mean of the collapsed rate and the healthy concurrent rate leaves both verdicts off a tight margin
MX_RESHARD_PUBLISH_DIGEST 0 Publish position-sensitive whole-shard digests and verify received source bytes. Ordered replay keeps its normal transfer plan and rejects verification before transfer unless its reads already stage each complete source; whole-shard digests cannot verify arbitrary source views or final installed tensors. Off by default because publishing and verification each cost a pass over the covered tensors

Canonical S3 Transfer Tuning

Objects below the configured thresholds use one PUT or GET. Larger uploads use multipart parts, and larger downloads use ranged GETs through one persistent s3transfer.TransferManager per S3Client. The receiver's file-level pool and the manager's global request concurrency use the same worker setting, so all whole-object and ranged data GETs share one 16-request budget. HEAD requests use the manager's separate submission executor. Downloads target a seekable BytesIO, so the complete downloaded object remains resident; the I/O settings below bound queued chunks, not the final object size.

Variable Default Description
MX_S3_MULTIPART_THRESHOLD_BYTES 104857600 (100 MiB) Minimum object size for multipart upload
MX_S3_UPLOAD_PART_BYTES 16777216 (16 MiB) Multipart upload part size
MX_S3_UPLOAD_WORKERS 8 Maximum concurrent multipart part uploads
MX_S3_DOWNLOAD_RANGE_THRESHOLD_BYTES 104857600 (100 MiB) Minimum object size for parallel ranged download
MX_S3_DOWNLOAD_RANGE_BYTES 8388608 (8 MiB) Byte-range size for parallel downloads
MX_S3_DOWNLOAD_WORKERS 16 Receiver file-worker limit and shared whole/ranged data GET concurrency budget
MX_S3_DOWNLOAD_IO_CHUNK_BYTES 1048576 (1 MiB) TransferManager I/O queue chunk size
MX_S3_DOWNLOAD_MAX_IN_MEMORY_CHUNKS 16 Sets max_io_queue_size and the non-seekable-output chunk limit. For the seekable BytesIO target, the default bounds queued I/O to about 16 MiB but does not cap the full downloaded object
MX_S3_MAX_POOL_CONNECTIONS 32 Botocore HTTP connection-pool size
MX_S3_MAX_ATTEMPTS 5 Botocore total request attempts and TransferManager post-200 streaming-download attempts
MX_S3_TCP_KEEPALIVE true Enable TCP keepalive for S3 connections

UCX/NIXL Tuning

Variable Recommended Description
UCX_RNDV_SCHEME get_zcopy Zero-copy RDMA reads
UCX_RNDV_THRESH 0 Force rendezvous for all transfers
NIXL_LOG_LEVEL INFO NIXL logging level

Package Structure

Module Description
modelexpress.client MxClient -- gRPC client for the ModelExpress server
modelexpress.metadata Metadata clients, source identity, publishing, and worker manifest serving
modelexpress.refit Experimental RL weight-refit timing, receiver-driven resharding, and engine adapter contracts
modelexpress.engines.vllm.loader MxModelLoader -- vLLM integration
modelexpress.refit.reshard Engine-agnostic loader-geometry capture and bounded no-gather transfer planning
modelexpress.engines.sglang.loader MxModelLoader -- SGLang remote_instance integration
modelexpress.engines.trtllm.loader MxModelLoader -- TensorRT-LLM shared-strategy integration
modelexpress.vllm_loader Compatibility shim for the vLLM loader
modelexpress.nixl_transfer NixlTransferManager -- NIXL agent lifecycle and RDMA transfers
modelexpress.types TensorDescriptor, WorkerMetadata -- core data types
modelexpress.vllm_worker Compatibility worker extension for older manual-registration workflows

How It Works

  1. Source loads weights from disk, registers raw tensors with NIXL before FP8 processing, and publishes metadata to the ModelExpress server.
  2. Target creates dummy weights, waits for the source ready flag, then pulls raw tensors via RDMA read.
  3. Both source and target run process_weights_after_loading() independently, producing identical FP8-transformed weights.
  4. When artifact transfer is enabled, a healthy source publishes its pod-scoped JIT caches and later pods install compatible caches before model initialization.

This pre-processing transfer strategy is critical for FP8 models (e.g., DeepSeek-V4-Pro) where tensors are renamed and transformed during processing.

License

Apache-2.0

Metadata

Release files for modelexpress 0.8.0.dev20261021

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for modelexpress 0.8.0.dev20261021
File Actions
modelexpress-0.8.0.dev20261021-py3-none-any.whl Python 3 none any Details for modelexpress-0.8.0.dev20261021-py3-none-any.whl
modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details for modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details for modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details for modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details for modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Total release size: 6.0 MB

Release files / modelexpress-0.8.0.dev20261021-py3-none-any.whl

Download URL modelexpress-0.8.0.dev20261021-py3-none-any.whl
Size 587.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
035e1801fcb412437e0a11d77ee0a5ebbdade1b4446eebebe55d48ffc485df22
BLAKE2b-256 checksum
How to use checksums
743aca2b5f9bc8e7f1cce6dd36bb5cf1d5fe0012c6ee940d0822431b3c8eee59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 673.4 kB
Tags CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c6c3480b3dfed6f0213d8addddbb20bf07e76c906d12f250d5790720f1742a10
BLAKE2b-256 checksum
How to use checksums
40a30945c6354bc65ccc52ae0f1b6a38a876fac4b519ec3ccad04de3f7acd9cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL modelexpress-0.8.0.dev20261021-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 673.8 kB
Tags CPython 3.13 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ba55c24e7d12c798b0f82c5be7768a5a9eb38f29e608084ab1d481cc64e5fc01
BLAKE2b-256 checksum
How to use checksums
5e6d7a00249151a4ac92c6e72a24dd7ce76ae142c0bd2d77e42e916b1017f527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 673.3 kB
Tags CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
514e2cee601cc680671eb46a7f495ba99e0ea044f8570beb96302908dd095099
BLAKE2b-256 checksum
How to use checksums
d7a58dea051192186d3bfe53d79fc270a8538dc544f934a7c672facccbbb0cf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL modelexpress-0.8.0.dev20261021-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 673.7 kB
Tags CPython 3.12 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c0c1687a05412ac08786a0ab0555672a1733348f73e4d5dcd3fa5213b8faeaf5
BLAKE2b-256 checksum
How to use checksums
f566c11cd17d828344b933e47c884371ed668d1e6c0adefff822db6ddcb6976b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 673.3 kB
Tags CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1fc2bdb8ec911c5042395ddd48439fa19ee03549b294843392774284f6f99e80
BLAKE2b-256 checksum
How to use checksums
5cc468c012f3d91bc3f7ac9cc46dd6647dd73aec39b98185c8a1856c80230d52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL modelexpress-0.8.0.dev20261021-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 673.9 kB
Tags CPython 3.11 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
4642f7c9f6832d867abd1187926267bc5fc387b24ded78db86a44db9ba877b0f
BLAKE2b-256 checksum
How to use checksums
71377ca369f9a5c9daffee34daf4e4c650dbd9ab06e43a9bdd25baac8fa70e61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 672.4 kB
Tags CPython 3.10 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2333be217d3a26377a785e7795b3151e2ccd88f5922c2bb4dc79db3b490a7ec5
BLAKE2b-256 checksum
How to use checksums
3a5cb39e398d4980b8893118a3f7646db5b449a482e9eb44b583bf2f9e19bbd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL modelexpress-0.8.0.dev20261021-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 673.0 kB
Tags CPython 3.10 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
51f9d6d746dbcad682ba4c398077e6cf5c0da0613fe746138b50c4670dc8dbee
BLAKE2b-256 checksum
How to use checksums
def1c8b3ceb77d1f09156ddbee20c54b1e9018027f25f5b9a9e08c19579fcc22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Security for modelexpress 0.8.0.dev20261021

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page