Install any skill in seconds. Free to start, no credit card required.
Get Started Free →All-in-one LLM evaluation toolkit (HuggingFace LightEval). 1000+ tasks with multi-backend support: Accelerate, vLLM, SGLang, Nanotron, TGI, LiteLLM, inference providers, and custom models. Sample-by-sample result exploration, custom task/metric creation. Used by HuggingFace's Leaderboard and Evals team. For pure GPT-style model eval, also consider lm-evaluation-harness.
.claude/skills/mkurman-lighteval/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 56% | 0% |
---|---------|----------| | inspect-ai | lighteval eval | Preferred, modern backend | | Accelerate | lighteval accelerate | Single/multi-GPU local models | | vLLM | lighteval vllm | Fast batched inference | | SGLang | lighteval sglang | Structured generation evals | | Nanotron | lighteval nanotron | Distributed training evaluation | | TGI | lighteval endpoint tgi | Locally served models | | LiteLLM | lighteval endpoint litellm | Any API (OpenAI, Anthropic, etc.) | | HF Providers | lighteval endpoint inference-providers | HuggingFace's hosted API | | Inference Endpoints | lighteval endpoint inference-endpoint | HF Dedicated Endpoints | | Custom | lighteval custom | Anything with a Python API |
Knowledge Tasks:
bashlighteval accelerate "model-name" mmlu # 57-subject knowledge lighteval accelerate "model-name" mmlu-pro # Harder MMLU lighteval accelerate "model-name" gpqa # Graduate-level science lighteval accelerate "model-name" triviaqa # Trivia QA lighteval accelerate "model-name" humanitys_last_exam # Very hard questions
Math and Code:
bashlighteval accelerate "model-name" gsm8k # Grade school math lighteval accelerate "model-name" math # Competition math lighteval accelerate "model-name" aime24 # AIME 2024 lighteval accelerate "model-name" lcb # LiveCodeBench
Chat Model Evaluation:
bashlighteval accelerate "model-name" ifeval # Instruction following lighteval accelerate "model-name" mt_bench # Multi-turn dialogue lighteval accelerate "model-name" musr # Multi-step reasoning lighteval accelerate "model-name" ruler # Long context
Multilingual:
bashlighteval accelerate "model-name" mgsm # Math in 10+ languages lighteval accelerate "model-name" flores200 # 200-language translation lighteval accelerate "model-name" mmlu_arabic # Arabic MMLU lighteval accelerate "model-name" cmmlu # Chinese MMLU lighteval accelerate "model-name" russian_squad # Russian QA
pythonfrom lighteval.tasks.lighteval_task import LightevalTask from lighteval.metrics.metrics import SampleLevelMetric class MyCustomTask(LightevalTask): def __init__(self, *args, **kwargs): super().__init__( name="my_custom_task", version=0, metrics=["my_metric"], *args, **kwargs ) def get_prompt(self, sample): return f"Question: {sample['question']}\nAnswer:" def process_output(self, output, sample): # Extract answer from model output return output.strip() def get_gold(self, sample): return sample["answer"]
pythonfrom lighteval.metrics.metrics import SampleLevelMetric import numpy as np class F1Metric(SampleLevelMetric): def __init__(self, *args, **kwargs): super().__init__(metric_name="f1", *args, **kwargs) def compute(self, golds, predictions, **kwargs): # golds and predictions are lists scores = [] for gold, pred in zip(golds, predictions): # Compute per-sample F1 gold_tokens = set(gold.lower().split()) pred_tokens = set(pred.lower().split()) tp = len(gold_tokens & pred_tokens) fp = len(pred_tokens - gold_tokens) fn = len(gold_tokens - pred_tokens) precision = tp / (tp + fp + 1e-10) recall = tp / (tp + fn + 1e-10) f1 = 2 * precision * recall / (precision + recall + 1e-10) scores.append(f1) return np.mean(scores)
python# Evaluate same tasks across backends backends = { "vllm": "lighteval vllm", "sglang": "lighteval sglang", "accelerate": "lighteval accelerate", } for backend, cmd in backends.items(): print(f"Running {backend}...") subprocess.run(f"{cmd} meta-llama/Meta-Llama-3-8B-Instruct mmlu gsm8k", shell=True)
bashlighteval accelerate "model-name" mmlu \ --push-to-hub \ --push-results-dir my-org/eval-results \ --results-org my-org # Results appear at: https://huggingface.co/my-org/eval-results
bash# List all tasks lighteval list-tasks # Filter by domain lighteval list-tasks --domain math lighteval list-tasks --domain multilingual # Search lighteval list-tasks --query mmlu
Open Benchmark Index (web UI):
pythonfrom lighteval.logging.evaluation_tracker import EvaluationTracker tracker = EvaluationTracker(output_dir="./results") # After evaluation: for task_name, task_results in tracker.results.items(): print(f"\n=== {task_name} ===") print(f" Score: {task_results['score']:.3f}") print(f" Samples: {len(task_results['samples'])}") # Inspect failures failures = [s for s in task_results['samples'] if not s['correct']] for f in failures[:5]: print(f" Q: {f['input']}") print(f" Predicted: {f['prediction']}") print(f" Expected: {f['gold']}\n")
lighteval eval as preferred entrypoint — inspect-ai backend is most modern| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,791 | 4,976 | -54% | 1 | 1 | 0% | 2,136 | 2,781 | +30% | 0 | 0 | — |
case-02 | fail→pass | 18,871 | 12,838 | -32% | 1 | 1 | 0% | 3,783 | 4,454 | +18% | 0 | 0 | — |
case-03 | fail→fail | 18,737 | 12,602 | -33% | 1 | 1 | 0% | 4,193 | 4,359 | +4% | 0 | 0 | — |
case-04 | pass→pass | 19,691 | 17,361 | -12% | 1 | 1 | 0% | 3,660 | 5,040 | +38% | 0 | 0 | — |
case-05 | pass→pass | 16,942 | 14,548 | -14% | 1 | 1 | 0% | 3,508 | 4,720 | +35% | 0 | 0 | — |
case-06 | pass→pass | 12,629 | 12,566 | -0% | 1 | 1 | 0% | 2,510 | 4,201 | +67% | 0 | 0 | — |
case-11 | fail→pass | 7,683 | 2,185 | -72% | 1 | 1 | 0% | 1,261 | 2,176 | +73% | 0 | 0 | — |
case-07 | fail→pass | 23,779 | 5,261 | -78% | 1 | 1 | 0% | 1,562 | 2,731 | +75% | 0 | 0 | — |
case-08 | fail→pass | 6,673 | 2,232 | -67% | 1 | 1 | 0% | 1,097 | 2,087 | +90% | 0 | 0 | — |
case-09 | pass→pass | 22,146 | 6,119 | -72% | 1 | 1 | 0% | 2,022 | 2,889 | +43% | 0 | 0 | — |
case-10 | fail→pass | 7,724 | 2,792 | -64% | 1 | 1 | 0% | 1,435 | 2,235 | +56% | 0 | 0 | — |
case-12 | pass→pass | 4,204 | 2,086 | -50% | 1 | 1 | 0% | 618 | 2,012 | +226% | 0 | 0 | — |
case-13 | fail→pass | 19,978 | 3,023 | -85% | 1 | 1 | 0% | 1,950 | 2,237 | +15% | 0 | 0 | — |
case-14 | fail→pass | 11,933 | 1,996 | -83% | 1 | 1 | 0% | 2,102 | 2,060 | -2% | 0 | 0 | — |
case-15 | fail→pass | 9,281 | 2,420 | -74% | 1 | 1 | 0% | 1,584 | 2,104 | +33% | 0 | 0 | — |
case-16 | pass→pass | 13,378 | 3,686 | -72% | 1 | 1 | 0% | 2,215 | 2,375 | +7% | 0 | 0 | — |
case-17 | fail→pass | 11,461 | 3,583 | -69% | 1 | 1 | 0% | 2,060 | 2,334 | +13% | 0 | 0 | — |
case-18 | fail→pass | 14,466 | 6,556 | -55% | 1 | 1 | 0% | 2,628 | 2,896 | +10% | 0 | 0 | — |
case-19 | pass→pass | 11,719 | 5,515 | -53% | 1 | 1 | 0% | 2,228 | 2,784 | +25% | 0 | 0 | — |
case-20 | pass→pass | 10,943 | 7,456 | -32% | 1 | 1 | 0% | 1,724 | 2,956 | +71% | 0 | 0 | — |
case-21 | pass→pass | 29,546 | 12,966 | -56% | 1 | 1 | 0% | 2,936 | 4,399 | +50% | 0 | 0 | — |
case-22 | fail→pass | 11,683 | 2,611 | -78% | 1 | 1 | 0% | 1,932 | 2,159 | +12% | 0 | 0 | — |
case-23 | fail→pass | 14,325 | 5,344 | -63% | 1 | 1 | 0% | 2,402 | 2,466 | +3% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.