This repo benchmarks Basque-capable local LLMs served through a private OpenAI-compatible endpoint and publishes a static comparison website.
The operational interface is one CLI:
uv run evaleu.py <command> [options]uv run evaleu.py eval --model latxa-qwen3-vl-4bRuns the default benchmarks (EusTrivia, XNLIeu, BasqueGLUE_qnli) for seeds 42,123,777, writes per-seed JSONs into eval/, refreshes eval/summary.json, and rebuilds site/data.json.
Select specific benchmarks with --benchmark:
# Run only EusTrivia
uv run evaleu.py eval --model latxa-qwen3-vl-4b --benchmark EusTrivia
# Custom limits per benchmark (comma-separated)
uv run evaleu.py eval --model latxa-qwen3-vl-4b --benchmark EusTrivia/200,BasqueGLUE_bec/50
# Repeat the flag for multiple benchmarks
uv run evaleu.py eval --model latxa-qwen3-vl-4b --benchmark EusTrivia --benchmark LatxaEval_eusexams/30Available benchmarks: EusTrivia, XNLIeu, BasqueGLUE_qnli, BasqueGLUE_bec, BasqueGLUE_wic, BasqueGLUE_intent, LatxaEval_eusexams, LatxaEval_eusproficiency, LatxaEval_eusreading, BertaQA_eu, MGSM_eu, MMLU_eu, Belebele_eu, FloresTranslation_eu_en, FloresTranslation_en_eu, FloresTranslation_eu_es, FloresTranslation_es_eu.
uv run evaleu.py eval --model latxa-qwen3-vl-4b --force --benchmark Belebele_euWhen --force is used, existing per-seed files are merged (new benchmarks appended) rather than overwritten — previous benchmark results are preserved.
Back-compat shortcut also works:
uv run evaleu.py --model latxa-qwen3-vl-4buv run evaleu.py eval --alluv run evaleu.py summarizeuv run evaleu.py builduv run evaleu.py model \
--id my-model \
--display-name "My Model" \
--family "Llama" \
--params "8B" \
--upstream-model-id org/model \
--release-date-utc 2026-01-01T00:00:00Z \
--release-source-url https://huggingface.co/org/modeluv run evaleu.py statusuv run evaleu.py clean --apply- Core: EusTrivia, XNLIeu
- BasqueGLUE: QNLI, BEC, WiC, Intent
- LatxaEvalSuite: EusExams, EusProficiency, EusReading
temperature=0- Multi-seed robust view (
42,123,777by default) - Equal sampling budget per benchmark (
80default) - Ranking by mean overall accuracy
- UI shows rounded values, with
mean ± stdon hover - Best value per benchmark highlighted in bold
For qwen3.5-27b, eval uses no-thinking mode (--max-tokens 4096 --timeout 300).
evaleu.py— single operational CLIeval/run_eval.py— evaluator engine (benchmark registry + scoring)eval/summarize_multiseed.py— summary builder (eval/summary.json)site/model_cards.json— model registry + metadatasite/build_site_data.py— buildssite/data.jsonsite/index.html— static report UI
Commit + push to main. GitHub Actions auto-deploys site/ to gh-pages.
- Keep endpoint in local
.env(OPENAI_API_BASE=...) - Keep auth token in local
.env(OPENAI_API_KEY=; empty for local/no-auth endpoints) - Never commit private endpoint URLs
- Tracked artifacts must use placeholders where needed