Memory-benchmark harness (LoCoMo, LongMemEval, BEAM 1M) for InfoLang, built on the infolang Python SDK.
Project description
infolang-bench
Memory-benchmark harness for InfoLang. Runs LoCoMo,
LongMemEval, and BEAM 1M through the official
infolang SDK — same ingest, same
questions, same optional LLM judge (see docs/JUDGING.md).
Competitor lanes (Mem0 / Zep) share that harness
(docs/FAIRNESS.md).
Public claim formulas: docs/METHODOLOGY.md.
Claims registry: docs/CLAIMS.md.
Publishing / wandb: docs/PUBLISHING.md.
Corrections: docs/CORRECTIONS.md.
Reproduce a published number (one command)
Published figures come from frozen recipes (il-bench repro). Knobs
(top_k, candidate_pool, max_per_session, judge models, strict mode) are
byte-identical to summary.meta.provenance.repro.
Hosted (public path)
The runtime Docker image is not public (it embeds core-IP packages and a
private model checkpoint). Anyone can still reproduce recall quality,
judged accuracy, and hosted-path latency against api.infolang.ai:
# Free API key (no credit card) from https://infolang.ai
export INFOLANG_API_KEY=il_live_...
# Option A — Docker (only Docker + git clone required)
docker compose run --rm bench repro locomo
# Option B — local pip (from source; not on PyPI yet)
git clone https://github.com/InfoLang-Inc/infolang-bench.git && cd infolang-bench
pip install -e .
il-bench repro locomo
Optional judged phase: also set OPENAI_API_KEY (or ANTHROPIC_API_KEY).
Without those keys, repro still writes retrieval *.summary.json / *.per_q.json
and prints why judging was skipped.
Hosted mode cannot reproduce self-hosted / on-box runtime latency.
Local runtime (evaluation / private image holders)
export IL_RUNTIME_IMAGE=your-registry/infolang-runtime:tag
export INFOLANG_BASE_URL=http://il-runtime:8766
export INFOLANG_DEV_KEY=devsecret:default
docker compose --profile local up -d il-runtime
docker compose --profile local run --rm \
-e INFOLANG_BASE_URL=http://il-runtime:8766 \
-e INFOLANG_DEV_KEY=devsecret:default \
bench repro locomo --local
Smoke
il-bench repro locomo --limit 1
# or
docker compose run --rm bench repro locomo --limit 1
Artifacts land in results/repro_<benchmark>_<ts>.infolang.{summary,per_q,judged}.json.
Expected cost / wall-time / ranges
| Benchmark | Recipe | Wall (full, hosted, approx.) | Judge tokens (if keys set) | Notes |
|---|---|---|---|---|
| LoCoMo | top_k=50, pool=500, max_per_session=6, judge gpt-4o-mini |
tens of minutes | ~answer+judge calls × questions | Report both overall_excl_adversarial and overall_incl_adversarial |
| LongMemEval (s) | same pool / session caps, top_k=50 |
tens of minutes–hours | same | Abstention types (*_abs) use abstain-is-correct |
| BEAM 1M | top_k=100, pool=500 |
hours (all chats) | same | Prefer --limit / --chats for smoke |
Exact expected metric bands for a given recipe version are those printed in the
matching published *.summary.json / *.judged.json under results/ (never
hand-entered). provenance.repro.recipe_sha256 must match.
Install
infolang-bench isn't on PyPI yet — install from source:
git clone https://github.com/InfoLang-Inc/infolang-bench.git
cd infolang-bench
pip install -e . # pulls infolang>=0.2.0 (on PyPI)
pip install -e ".[tracking]" # optional W&B
pip install -e ".[backends]" -c constraints-backends.txt # Mem0/Zep
For development:
pip install -e ".[dev]"
Connect to a runtime
| Scenario | Configuration |
|---|---|
| Hosted repro (recommended) | INFOLANG_API_KEY=il_live_... |
| Local self-hosted | INFOLANG_DEV_KEY + runtime on :8766 (or INFOLANG_BASE_URL) |
| Custom host | INFOLANG_BASE_URL=... |
il-bench health
Download datasets
Data is downloaded on demand (il-bench repro auto-downloads if missing).
Checksums are verified before every run.
il-bench download locomo
il-bench download longmemeval --variant s
il-bench download beam --data-dir data/beam-1m
Advanced: il-bench run
For ad-hoc sweeps (non-published knobs), backends, or WandB streaming:
il-bench run locomo --limit 1 --backend infolang
il-bench run locomo --backend mem0 --judge --answer-model … --judge-model …
il-bench judge results/….per_q.json --answer-model … --judge-model …
il-bench compare results/*.judged.json --out compare.md
See docs/JUDGING.md, docs/FAIRNESS.md.
run options
| Flag | Meaning |
|---|---|
--backend |
infolang | mem0 | zep |
--limit N |
Limit units / sample size |
--top-k K |
Recall depth (default: max K) |
--pool N |
Hybrid candidate pool (default 500) |
--judge |
Chain the answerer + judge |
--no-strict |
Allow hybrid→plain fallback (published runs stay strict) |
--wandb |
Stream to W&B (tracking extra); WANDB_MODE=offline for CI |
Development
pip install -e ".[dev]"
ruff check .
mypy
pytest
Nightly compose smoke: .github/workflows/repro-nightly.yml.
Where we lose
Public honesty: categories where a competitor or alternative beats InfoLang. Same table style as the wins. Extend this section from same-harness artifacts when full judged runs land (CLAIMS.md).
| Category | Who wins | Evidence | Why |
|---|---|---|---|
| LoCoMo multi-hop | Mem0 (published LLM-judge; same-harness pending) | Legacy internal signal: retrieval finds evidence turns, but we lack a chain-synthesis step | Closing the gap needs an LLM chain-synthesis pass on top of recall — not a bigger top_k |
| STS-B @ 192-byte budget | PCA-96 | METHODOLOGY.md#size: 0.815 PCA vs 0.708 IL cosine | IL record is a memory primitive (reconstruct + structured query), not an STS-B embedding competitor — publish the trade, don't hide it |
Do not cite quarantined workspace benchmarks/ proxy tables in public copy.
License
Apache-2.0.
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 infolang_bench-0.1.0.tar.gz.
File metadata
- Download URL: infolang_bench-0.1.0.tar.gz
- Upload date:
- Size: 179.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19d99e75226bc73244d012656fdd71d24674f77cd3afc0d19d67b2e2b3b3753d
|
|
| MD5 |
1c414ac49ce1ef850116895e0ee735c3
|
|
| BLAKE2b-256 |
0f7e35b4152d33869c2ffafae0c943ec440254d7d93436fd5db64f4007e81942
|
File details
Details for the file infolang_bench-0.1.0-py3-none-any.whl.
File metadata
- Download URL: infolang_bench-0.1.0-py3-none-any.whl
- Upload date:
- Size: 70.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdc18d27b17b9870620bb06b9d95ccd4fb39e32d5a2f4cdd338adb31fd758542
|
|
| MD5 |
e4c91869a498e9eea6cfc00cb98f22f0
|
|
| BLAKE2b-256 |
96a3fb421eebcb365e8c6b4beba5feb87fc5a5633df8268295f392028467e9d4
|