An advanced evaluation framework and CLI runner for LiteRT LM and native models.
ai-edge-eval is a powerful evaluation framework and CLI runner designed for LiteRT LM models and standard native models (e.g., HuggingFace). Built for POSIX-compliant systems, it officially supports Linux, macOS, and Windows (via WSL2), providing robust support for both single-modality (text) and multi-modality (vision + text) use cases.
- π Installation
- β‘ Running Evaluations
- π οΈ Custom Task CUJ
- π Discovery Commands
- βοΈ Dataset Licensing and Terms of Use
ai-edge-eval requires a POSIX-compliant Unix-like environment. The following platforms are officially supported:
- Linux: Standard distributions (e.g., Ubuntu, Debian).
- macOS: Both Intel and Apple Silicon (M-series) architectures.
- Windows: Supported exclusively via the Windows Subsystem for Linux (WSL2). (Note: Native Windows execution via CMD or PowerShell is not supported.)
We support installation using either uv (recommended for ultra-fast dependency resolution) or standard pip within a virtual environment (Python 3.10+).
Tip
uv is an extremely fast Python package manager written in Rust. Using it significantly speeds up environment creation and dependency installation.
# Create a virtual environment with Python 3.13 in the current directory.
uv venv --clear --python=3.13 --seed
source .venv/bin/activateOption A: Install from PyPI
# Install the package into the active virtual environment
uv pip install -q ai-edge-evalOption B: Install from Local Clone (Recommended for Development)
git clone https://github.com/google-ai-edge/eval.git
cd eval
# Install in editable mode inside the active virtual environment
uv pip install -e .# Create and activate a Python virtual environment
python3 -m venv .venv
source .venv/bin/activateOption A: Install from PyPI
pip install -q ai-edge-evalOption B: Install from Local Clone
git clone https://github.com/google-ai-edge/eval.git
cd eval
# Install in editable mode
pip install -e .The base installation bundles full support for LiteRT-LM evaluation out-of-the-box. To install support for running native PyTorch/HuggingFace models, specify the optional dependency groups:
# Install HuggingFace native runner support (includes PyTorch)
uv pip install "ai-edge-eval[hf]"
# Install HuggingFace multimodal runner support (includes TorchVision)
uv pip install "ai-edge-eval[hf-multimodal]"
# Install everything for local evaluation
uv pip install "ai-edge-eval[all]"# Install HuggingFace native runner support (includes PyTorch)
pip install "ai-edge-eval[hf]"
# Install HuggingFace multimodal runner support (includes TorchVision)
pip install "ai-edge-eval[hf-multimodal]"
# Install everything for local evaluation
pip install "ai-edge-eval[all]"Note
Quotes around package names with brackets (e.g., "ai-edge-eval[hf]") prevent shell globbing issues in Zsh and Bash.
ai-edge-eval provides high-performance runners for both LiteRT models and native HuggingFace models.
Run evaluation on standard text benchmarks like ifeval and bbh:
ai-edge-eval \
--runner litert-lm \
--model-path /path/to/model.litertlm \
--device cpu \
--tasks ifeval \
--tasks bbh \
--framework lm-eval \
--limit 10 \
--output-dir your_result_directoryRun evaluation on standard multiple-choice scoring benchmarks like piqa:
ai-edge-eval \
--runner litert-lm \
--model-path /path/to/model.litertlm \
--device cpu \
--tasks piqa \
--framework lm-eval \
--limit 10 \
--output-dir your_result_directoryRun multimodal sampling using vision capabilities (e.g., on mmmu_val):
ai-edge-eval \
--runner litert-lm \
--model-path /path/to/model.litertlm \
--device cpu \
--runner-args "vision_backend=cpu" \
--tasks mmmu_val \
--framework lm-eval \
--limit 10 \
--output-dir your_result_directoryRun evaluation natively using direct library wrappers via lm-eval:
ai-edge-eval \
--runner hf \
--model-path huggingface/repo \
--device cpu \
--tasks mmlu \
--framework lm-eval \
--limit 10 \
--output-dir your_result_directoryRun multimodal evaluation natively using direct library wrappers via lm-eval:
ai-edge-eval \
--runner hf-multimodal \
--model-path huggingface/repo \
--device cpu \
--tasks mmmu_val \
--framework lm-eval \
--limit 10 \
--batch-size 1 \
--output-dir your_result_directoryImportant
For HuggingFace runners, huggingface/repo refers to the HuggingFace model ID, such as Qwen/Qwen2.5-7B-Instruct or google/gemma-3-270m.
ai-edge-eval makes it seamless to define and run custom evaluation benchmarks tailored to your specific datasets and metrics.
Prepare your evaluation dataset in JSON Lines (.jsonl) format, where each entry separates the input context (messages) and the expected output (ground_truth), along with optional metadata.
Note
The messages field strictly follows the canonical OpenAI Chat Completion format (a list of dictionaries specifying role and content).
{
"messages": [{"role": "user", "content": "What is the capital of France?"}],
"ground_truth": "Paris"
}
{
"messages": [{"role": "user", "content": "Calculate 5 + 7"}],
"ground_truth": "12"
}To run custom evaluation benchmarks, register your generation parameters and evaluation hooks via a Python file (e.g., register_custom_tasks.py):
# File: register_custom_tasks.py
from typing import Iterator
from model_eval.config.generation_config import GenerationConfig
from model_eval.custom_tasks.base import CustomTask, DatasetRow
from model_eval.custom_tasks.registry import TaskRegistry
def exact_match(
preds: Iterator[str], gts: Iterator[str], rows: Iterator[DatasetRow[str]]
) -> dict[str, float]:
# Retrieve generated text and ground truth text.
p = [text.strip().lower() for text in preds]
g = [text.strip().lower() for text in gts]
accuracy = sum(pi == gi for pi, gi in zip(p, g)) / len(p)
return {"exact_match": accuracy}
qa_task = CustomTask(
name="my_custom_qa",
dataset="path/to/dataset.jsonl",
metric_fn=exact_match,
generation_config=GenerationConfig(
temperature=0.5, max_new_tokens=64, stop_sequences=["\n"]
)
)
TaskRegistry.global_registry().register(qa_task)Point the CLI to your custom registration file authored in Step 2 using the --custom-tasks-file flag:
ai-edge-eval \
--runner litert-lm \
--runner-args "model_path=/path/to/model.litertlm,backend=cpu" \
--tasks my_custom_qa \
--framework custom \
--custom-tasks-file register_custom_tasks.py \
--eval-args "limit=10" \
--output-dir your_result_directoryai-edge-eval includes built-in discovery utilities to help you explore supported configurations, tasks, and runners.
Use the list-args subcommand to inspect the available configurations and parameters exposed by a given runner or evaluation framework:
# Discover runner arguments
ai-edge-eval list-args --runner litert-lm
# Discover evaluation framework arguments
ai-edge-eval list-args --framework lm-evalUse the list-tasks and list-runners subcommands to view the allowlist of supported tasks and runners for a given framework:
# List supported tasks for a framework
ai-edge-eval list-tasks --framework lm-eval
# List supported runners for a framework
ai-edge-eval list-runners --framework lm-evalai-edge-eval is an evaluation runner and command-line toolkit licensed under the Apache 2.0 License.
Warning
When executing benchmark evaluations, ai-edge-eval relies on upstream execution frameworks (such as EleutherAI's lm-eval harness) to dynamically download and cache evaluation datasets from external sources (e.g., HuggingFace Hub).
ai-edge-eval does not host, redistribute, or sublicense these external datasets.
Every evaluation dataset maintains its own licensing terms, ownership rights, and permitted usage policies (including potential non-commercial restrictions).
Important
By executing evaluations using ai-edge-eval, you are responsible for:
- Reviewing and consenting to the specific terms of service and license agreement associated with each evaluated benchmark.
- Adhering to any commercial or distribution constraints associated with the underlying data.
For detailed licensing information regarding specific datasets, refer to their respective model and dataset cards on the HuggingFace Hub or official repository pages.