A sub-100ms, zero-dependency CLI to inspect ML models (.safetensors, .gguf) locally or via Hugging Face, calculate exact VRAM footprints, and determine hardware fit.
Project description
ModelInfo CLI
ModelInfo is a CLI tool that inspects machine learning model checkpoints (.safetensors, .gguf, .pt) and calculates hardware requirements completely offline.
It reads binary headers directly using the Python standard library. By bypassing full tensor payload loading and strictly excluding heavy ecosystems like PyTorch or HuggingFace, the tool executes in under 100 milliseconds.
Features
- Zero-Dependency Parsing: Reads
.safetensors8-byte JSON prefixes and.ggufbinary key-value metadata directly viastructandjson(falling back toconfig.jsonif needed). - Remote Hugging Face Hub Inspection: Pass a repo ID (e.g.,
meta-llama/Llama-2-7b-hf) and it uses concurrent byte-range requests to read the headers off the CDN in under 2 seconds. No need to download the checkpoint. - Parses
model.safetensors.index.jsonto support sharded models without crashing on partial downloads. - Dynamic VRAM & Subtractive vLLM Math: Calculates exact VRAM limits based on the model's architecture and your target context length. If you use the
--vllmflag, it switches to a subtractive "Serving Capacity" engine that calculates exactly how many tokens fit in the PagedAttention pool based on your--gpu-utilratio. - Hardware Fit Diagnostics: Check if a model fits your cluster with
--gpu(e.g.--gpu RTX4090or--gpu auto). It enforces Apple Silicon's 75% unified memory wire limit, and you can explicitly model multi-GPU NCCL communication penalties with--topologyand--strategy. - Side-by-Side Comparison: Pass multiple models to trigger a comparison table (parameters, data types, context lengths, VRAM footprints).
- Uses exact
ggml_typemappings for GGUF formats to calculate byte-scaling coefficients, preventing VRAM under-reporting. - Secure Pickling: Inspects legacy
.ptfiles safely using a restrictedpickle.Unpickler. - The UI (built with
rich) groups repetitive layers and color-codes VRAM heatmaps.
[!NOTE] A Note on Performance & Remote Fetching Local
.ggufand.safetensorsfiles are parsed in under 100ms. However, querying remote Hugging Face repositories takes 1 to 10 seconds. To remain zero-dependency,modelinfoopens connections via Pythonurllibinstead of loading PyTorch. For massive sharded models (e.g., 100+ shards), it must fetch every header individually, capped at an 8-worker thread pool to prevent Cloudflare IP bans. Waiting ~8 seconds to map a model is faster than downloading 400GB just to see if it fits your hardware.
Installation
Install directly from PyPI:
pip install modelinfo-cli
Development
To install from source and run the test suite:
git clone https://github.com/pipe1os/modelinfo-cli.git
cd modelinfo-cli
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Testing
The testing suite enforces cross-platform structural integrity and guards the zero-dependency latency constraint. Tests are isolated against custom binary mocks in tests/fixtures/.
Run the test suite using pytest:
pytest tests/ -v
Usage
Inspect a local model checkpoint:
modelinfo mistral-7b.safetensors
Inspect a remote model directly from the Hugging Face Hub:
modelinfo meta-llama/Llama-2-7b-hf
For gated models (e.g., Llama 2), you must provide authentication by setting the HF_TOKEN environment variable. You can create a token in your Hugging Face settings.
export HF_TOKEN="hf_your_token_here"
modelinfo meta-llama/Llama-2-7b-hf
Alternatively, the tool will automatically read tokens stored by the hf auth login command (located in ~/.cache/huggingface/token).
Calculate the memory footprint with a specific KV cache context window:
modelinfo mistral-7b.safetensors --context 8192
Adjust the VRAM heat-mapping thresholds for your specific hardware (e.g., an 80GB card):
modelinfo meta-llama/Llama-2-7b-hf --max-vram 80
Determine if a model fits your specific hardware:
modelinfo mistralai/Mistral-7B-v0.1 --gpu "RTX 4090"
modelinfo mistralai/Mistral-7B-v0.1 --gpu auto
Compare multiple models side-by-side against a hardware target:
modelinfo mistralai/Mistral-7B-v0.1 Qwen/Qwen2.5-0.5B --gpu 12
Simulate exactly how many tokens you can serve using vLLM on a specific multi-GPU topology:
modelinfo mistralai/Mistral-7B-v0.1 --vllm --gpu 4xRTX4090 --topology pcie4 --strategy tp
Example Output (Single Model)
Format: SafeTensors
Architecture: MistralForCausalLM (32 layers)
Tensors: 291
Parameters: 7.2B
Dtype: BF16
Disk size: 13.49 GB
VRAM (est): ~15.07 GB Total Minimum Required
├─ Weights: 13.49 GB
├─ KV Cache: 1.0 GB (Default 8192 tokens. Native limit: 32,768)
└─ Overhead: 600.0 MB (CUDA Context + Activations)
Hardware Fit: ✗ No (Requires 15.07 GB, Hardware has 12.0 GB)
Top Tensors by Size:
model.embed_tokens.weight [32000 x 4096] bf16 131.1M params
32x model.layers.[N].self_attn.q_proj.weight [4096 x 4096] bf16 16.8M params
Example Output (Comparison)
Model Params Dtype Context VRAM Fits
Mistral-7B-v0.1 7.2B BF16 8K 15.07 GB ✗
Qwen2.5-0.5B 494.0M BF16 8K 1.6 GB ✓
Command Reference
| Argument | Example | Description |
|---|---|---|
[files...] |
modelinfo model.safetensors |
Inspect a single model (local path or Hugging Face repo ID). |
[files...] |
modelinfo modelA modelB |
Pass multiple files/repos to automatically render a side-by-side comparison table instead of a deep-dive summary. |
--gpu |
--gpu rtx4090 |
Check if the model fits. Accepts GPU names (rtx4090, b200, rx7900xtx), explicit VRAM limits in GB (--gpu 24), or local hardware auto-discovery (--gpu auto). |
--context |
--context 32768 |
Adjust the target KV cache length. Essential for calculating the dynamic memory footprint of long-context models. Defaults to 8192. |
--max-vram |
--max-vram 80 |
Adjusts the color-coded heat mapping thresholds (Green/Yellow/Red) in the terminal output to match a specific hardware ceiling. |
--vllm |
--vllm --gpu auto |
Switches from additive memory checking to a subtractive serving capacity estimation. Shows exactly how many tokens fit in the PagedAttention pool. |
--gpu-util |
--gpu-util 0.9 |
Sets the vLLM gpu_memory_utilization ratio. Defaults to 0.9 (reserves 10% for PyTorch context). |
--topology |
--topology nvlink |
Set interconnect topology to calculate exact communication overhead penalties (nvlink, pcie4, pcie3). Defaults to pcie4. |
--strategy |
--strategy tp |
Selects the parallelization strategy for multi-GPU setups (tp for Tensor Parallelism, pp for Pipeline Parallelism). Defaults to tp. |
--tensors |
--tensors |
Bypasses the algorithmic speed estimation and forces the tool to fetch all remote shards, displaying an exact size breakdown of every tensor. |
Architecture
Three modules:
- Presentation (
cli.py,ui.py): Parses arguments and formats tables viarich. - Parsing Engine (
parsers/): Specialized binary readers (safetensors.py,gguf.py,pytorch.py) that use only the standard library. - Math Engine (
calculator.py): Determines total parameter counts, maps data types to byte coefficients, and calculates dynamic memory allocations based on tensor shape heuristics.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file modelinfo_cli-1.4.0.tar.gz.
File metadata
- Download URL: modelinfo_cli-1.4.0.tar.gz
- Upload date:
- Size: 25.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99c46ebdd2f979448c619c9d3e6cc801f25a4edf4e45f712afc1f307bab98e10
|
|
| MD5 |
9a30e4773b8cb0db0405001d372cf2a1
|
|
| BLAKE2b-256 |
61c27f27ac79f2c4a8177852b67ef15bb6c5f9ec7bc9dd33675fe907a06323c4
|
Provenance
The following attestation bundles were made for modelinfo_cli-1.4.0.tar.gz:
Publisher:
publish.yml on pipe1os/modelinfo-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
modelinfo_cli-1.4.0.tar.gz -
Subject digest:
99c46ebdd2f979448c619c9d3e6cc801f25a4edf4e45f712afc1f307bab98e10 - Sigstore transparency entry: 1750534486
- Sigstore integration time:
-
Permalink:
pipe1os/modelinfo-cli@f5a402deffd937a43e403a9c747d40895f0f0527 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/pipe1os
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f5a402deffd937a43e403a9c747d40895f0f0527 -
Trigger Event:
release
-
Statement type:
File details
Details for the file modelinfo_cli-1.4.0-py3-none-any.whl.
File metadata
- Download URL: modelinfo_cli-1.4.0-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e83e78cec5c4d83442007e3693e1205be97ed09724beef1fb2103f13c3fd40e
|
|
| MD5 |
744180bcb58c9485b5de9dc5d83d1eb7
|
|
| BLAKE2b-256 |
e279ad9cbc8d0884b6751c5958b1fb09fde5be3581a72f97a124850dcf0f8219
|
Provenance
The following attestation bundles were made for modelinfo_cli-1.4.0-py3-none-any.whl:
Publisher:
publish.yml on pipe1os/modelinfo-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
modelinfo_cli-1.4.0-py3-none-any.whl -
Subject digest:
5e83e78cec5c4d83442007e3693e1205be97ed09724beef1fb2103f13c3fd40e - Sigstore transparency entry: 1750534583
- Sigstore integration time:
-
Permalink:
pipe1os/modelinfo-cli@f5a402deffd937a43e403a9c747d40895f0f0527 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/pipe1os
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f5a402deffd937a43e403a9c747d40895f0f0527 -
Trigger Event:
release
-
Statement type: