Model or dataset
modelscope/evalscope avatar
modelscope/evalscope

EvalScope: One Command to Evaluate LLMs, VLMs, and Agent Traces

A streamlined and customizable framework for efficient large model (LLM, VLM, AIGC) evaluation and performance benchmarking.

3,423 stars486 forksPythonApache-2.0

At a glance

What is it?
EvalScope is a Python framework from the ModelScope community that wraps multiple evaluation backends, stress-testing tools, and a web dashboard behind a single CLI. It targets teams that need reproducible model comparison across text, vision, and agentic workloads.
Who is it for?
Adopt EvalScope if you need a single command to run established benchmarks like MMLU or GSM8K against an OpenAI-compatible API, or if you want to compare models across text, vision, and agentic tasks without gluing multiple tools together. Avoid it if your evaluation pipeline depends on a single niche backend or you require deep customization of the underlying evaluation logic, because EvalScope's abstraction layer may obscure backend-specific details.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: evaluation is fragmented across too many tools

Evaluating a large model is rarely one task. You might want a standard accuracy score on GSM8K, a vision-language check on a chart dataset, a retrieval quality score for a RAG pipeline, and a latency figure for your serving endpoint. Each of those usually lives in a different tool with a different config format. EvalScope tries to collapse that into one framework with a single command. The README shows the core use case: `evalscope eval --model your-model-name --api-url $OPENAI_API_BASE_URL --api-key $OPENAI_API_KEY --eval-type openai_api --datasets gsm8k --limit 5`. That one line covers model capability evaluation, inference performance stress testing, and result visualization. The intended user is an engineer or researcher who needs to compare models quickly, not someone building a bespoke evaluation harness from scratch.

How EvalScope routes work through multiple backends

EvalScope does not reimplement every benchmark from scratch. The README lists OpenCompass, VLMEvalKit, and RAGEval as integrated backends, plus its own evaluation modes. That is a significant architectural choice: the framework acts as a coordinator and a uniform interface, not a single evaluation engine. For agent evaluation, there is a separate mode called AgentLoop that drives benchmarks like GSM8K, AIME, and SWE-bench inside a controlled multi-turn loop with pluggable strategies, tools, and a Docker sandbox. The README claims full per-sample Agent Trace is recorded and visualizable. For inference performance, the framework provides stress testing tools that report metrics such as TTFT and TPOT. The design means you get one CLI and one report format, but the actual evaluation logic may come from different upstream projects, each with its own release cycle and quirks.

Getting started: installation and the eval command

Installation is a standard `pip install evalscope`. The README's primary example points at an OpenAI-compatible API endpoint via environment variables, which suggests the common path is to evaluate a hosted model rather than a locally loaded one. The `--eval-type openai_api` flag selects the backend, `--datasets gsm8k` picks the benchmark, and `--limit 5` caps the sample count for a quick smoke test. That is useful for CI or a first sanity check. The README also mentions task-config validation and multimodal media loading in the v1.11.0 release notes, so configs are checked before a run. There is no mention of a local model loading path in the visible material, but the existence of an `openai_api` eval type implies you can point it at any server that speaks the OpenAI protocol, including a locally hosted one.

The web dashboard is where comparison becomes practical

A benchmark score alone tells you little. EvalScope ships a Web Dashboard that the README describes as providing multi-dimensional model comparison, report overview, and detailed inspection. Screenshots show tabs for dashboard overview, model comparison, report overview, and prediction details. That last tab matters: seeing individual predictions helps you diagnose why a model failed, not just that it did. The dashboard is not a separate product; it is part of the framework, so after a run you can inspect results without exporting to another tool. The README points to a visualization guide on ReadTheDocs for setup details, which are not in the provided material. The dashboard appears to be the main payoff for using EvalScope instead of running raw backend commands yourself.

Agent evaluation is a different beast from standard benchmarks

Standard benchmarks give a model a prompt and score the answer. Agent benchmarks require multi-turn interaction, tool calls, and sometimes a sandbox. EvalScope's AgentLoop mode is a separate path, with pluggable strategies and tools, and a Docker sandbox for safety. The release notes mention a public `run_agent_loop` API and a refactored adapter architecture with a unified `FunctionCallAdapter`. That is a sign the agent support is maturing, but it also adds complexity. You need to manage Docker, define tool schemas, and handle trace recording. The README also lists vendor verifier benchmarks (`k2_verifier`, `kimi_verifier`, `minimax_verifier`) for checking whether a third-party API deployment faithfully reproduces official model behavior. That is a niche but useful feature: it treats an API endpoint as the subject under test, not just the model.

Where EvalScope may be the wrong fit

The main limitation is the abstraction layer. If you need to tweak the prompt template or the scoring logic inside a specific benchmark, you may find yourself fighting the framework or waiting for upstream backend changes. The README does not document how to override backend internals; it only says developers can add custom datasets, models, and metrics. That extensibility is likely enough for adding a new dataset, but not for changing how MMLU is scored. Another limitation is the pace of change. The release notes show a steady stream of new benchmarks, sometimes dozens at once. That is good for coverage but bad for stability: a benchmark you used in v1.10 may behave differently in v1.11 due to 'unified metric semantics' or 'incomplete-run handling' changes. The README also mentions 'published evaluation versions for reproducible benchmark results' in v1.11.0, which is a response to that problem, but reproducibility across framework versions is still a question you must verify yourself.

Alternatives: the direct backend approach

The obvious alternative is to skip the abstraction and use the backends directly. If you only need OpenCompass, you can install it and run its own commands. If you only need RAG evaluation, you can use RAGAS directly. The difference is in workflow: direct backends give you full control and fewer layers to debug, but you lose the unified CLI, the cross-backend report format, and the dashboard. EvalScope's value is only real when you need to compare results across different model types or backends in one place. For a single-task evaluation, the direct tool is likely simpler and more transparent. The README does not claim to replace the backends; it integrates them, which is a honest framing but also a reminder that you are always one version mismatch away from a broken integration.

Maintenance, licensing, and what to check before you commit

EvalScope is licensed under Apache-2.0, which is permissive for commercial use, and is actively maintained with releases roughly every two weeks in the visible window. The project is not archived, and the last push is recent relative to the latest release. That activity is a double-edged sword: you get new benchmarks and fixes, but you also get breaking changes. The README's 'What's New' section shows refactors to the RAG module (upgraded to MTEB 2.x and RAGAS 0.4.x) and adapter architecture changes, which likely require config updates if you upgrade. Before adopting, check the changelog for the version you plan to use and pin it in your dependencies. The documentation is hosted on ReadTheDocs and includes guides for each backend, so start there. Do not assume that a benchmark listed in the release notes is available in the version you install; verify the specific release tag.

Editorial conclusion

Adopt EvalScope if you need a single command to run established benchmarks like MMLU or GSM8K against an OpenAI-compatible API, or if you want to compare models across text, vision, and agentic tasks without gluing multiple tools together. Avoid it if your evaluation pipeline depends on a single niche backend or you require deep customization of the underlying evaluation logic, because EvalScope's abstraction layer may obscure backend-specific details. Before adopting, verify the exact version of each integrated backend (OpenCompass, VLMEvalKit, RAGEval) and confirm that the benchmark set you need is present in the release notes, since the project adds benchmarks frequently and older versions may lack them.

Official sources

  1. License: Apache-2.0
  2. modelscope/evalscope on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes