endless-learning
Generate your own RL training tasks — and verify they are worth training on.
endless-learning builds a concept graph by exploring the web, mines
verifiable tasks from it, and gates every task through execution: a task ships
only if something can actually check the answer. Two kinds of task are live —
deep-search questions grounded in a frozen document corpus, and executable
coding instances mined from real repositories.
It is an open reproduction of the knowledge-graph task synthesis described in the Kimi K3 technical report (arXiv 2607.24653).
Scope: this is the data engine — graph, mining, verification, and versioned datasets that ship with their reward functions and environments. There is no training loop; trainers own the rollout loop.
What you can do with it
| Grow a concept graph | Agents explore outward from a seed pack, expanding a deduplicated concept DAG. Three packs ship with the package; bring your own as a TOML file. |
| Mine deep-search questions | Questions grounded in a content-addressed corpus, gated V1–V5: grounded, unique, non-trivial, solvable, stable. |
| Mine executable coding tasks | SWE-bench-shaped instances from real repos, validated by running the tests: the oracle must fail on the broken state and pass on the fixed one. |
| Re-verify offline | Every dataset re-checks with no network and no model calls, against pinned images and hashed documents. |
| Export to trainers | verifiers tasksets, chorus TaskRecord registries, and Harbor task directories — each checked against the consumer's own code. |
Install
pip install 'endless-learning[all]'
Python 3.11+. Extras, if you would rather pick: [anthropic] [openai]
[litellm] [ddg] [mcp] [hub] [semantic] [verifiers].
Docker is required for the coding domain only. Everything else runs locally.
Quickstart
Nothing here downloads a prebuilt graph — the package is the engine, and every artifact is produced by your run, in your workspace.
mkdir my-graph && cd my-graph
endless init # endless.toml + .endless/
endless kg expand --seeds knowledge --budget-nodes 0 # plant a seed pack, no keys needed
endless kg stats
Seeding is local. Growing the graph calls a model and a search backend, so
set the credentials your endless.toml roles name, then raise the budget:
export ANTHROPIC_API_KEY=... # or whichever provider endless.toml selects
endless kg expand --budget-nodes 50 # agents explore outward from the seeds
Deep-search questions
Sample the graph, write questions against retrieved documents, and keep only what survives the gate. The corpus is content-addressed, so a question that passes today re-verifies tomorrow against the same bytes.
endless synth run --n 20 --workers 6 # sample → write → gate → tasks.jsonl
endless dataset verify # offline: no network, no model calls
endless dataset export-verifiers # verifiers-v1 taskset package
Coding tasks
Onboard a repository into a pinned image with a flake-screened test ledger, then mine instances from its history. Every instance is validated by execution against two states of the repo before it is allowed to exist.
endless coding select --n 10 # graph concepts → candidate repos
endless coding onboard --repo <url> # pinned image + test ledger
endless coding mine --since 2024-01-01 # mine instances → dual-state validation
endless coding verify-instances # replay every instance from its images
Three families are built, differing in what the model is asked to do:
| family | the job | where instances come from |
|---|---|---|
code-bugfix |
fix the code | a commit that touches source and tests together |
code-testgen |
write the test | inverts a bugfix instance — your test must fail before the fix and pass after |
code-evolution |
implement the change | a merged pull request, scoped so the task is a coherent unit of work |
endless coding mine-testgen # invert released bug fixes
endless coding mine-evolution # mine merged pull requests
Export to whichever harness you train against:
endless coding export-chorus # chorus TaskRecord registry
endless coding export-harbor # Harbor task directories
endless coding publish-images --registry <prefix> # retag; push only with --push
endless coding export-tree # one file per instance, for a git-backed corpus
What ships, and what does not
Datasets are outputs of your run, and are not distributed here. A
search-QA record cites document hashes; a coding instance names a pinned
image. Without the corpus and the images neither re-verifies, so shipping the
JSONL alone would be shipping a claim with its evidence removed. endless dataset verify re-verifies against your corpus, built by your runs.
What to expect
Measured results, including the ones that did not go our way — worth reading before you plan around this:
- Difficulty is expensive to measure and noisy. Per-task pass rate is ±0.24 at 5 rollouts, exactly binomial. Aggregate over 30+ tasks; never read a single task's label.
- The graph does not make tasks hard. Four independent levers each improved a question's shape and left the mean pass rate at 0.88. What the graph is actually for is coverage and checkable grounding.
- Onboarding is mechanical, and bounded. Roughly 83% success on curated mainstream Python, near 0% on the long tail the graph selects.
- A task's statement is the binding constraint, not its difficulty. In one 80-episode run every instance scored 0.000, not because the work was hard but because the statements under-specified what the tests check. Re-deriving each statement from what the pull request actually merged moved one instance from a flat 0.167 to a mean of 0.938.
- Offline re-verification holds. 25/25 on the search set, 8/9 on coding — the miss being a real catch, an oracle whose verdict depended on set ordering.
Docs
Design notes, decisions and measured results live in docs/ as a
numbered series — start at docs/000-overview.md.
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 endless_learning-0.0.2.tar.gz.
File metadata
- Download URL: endless_learning-0.0.2.tar.gz
- Upload date:
- Size: 501.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3da6f15556613538bca5777a2e2ac8568cb91c8d9dcdc3346324e4d98e9d526d
|
|
| MD5 |
28bd2045eca4d01160ab6658aaa56b0e
|
|
| BLAKE2b-256 |
a456a47054e8fad6b8af01569f801fb81afa32cb5436a7bce2300abc93ce250a
|
Provenance
The following attestation bundles were made for endless_learning-0.0.2.tar.gz:
Publisher:
release.yml on alexngai/endless-learning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
endless_learning-0.0.2.tar.gz -
Subject digest:
3da6f15556613538bca5777a2e2ac8568cb91c8d9dcdc3346324e4d98e9d526d - Sigstore transparency entry: 2536478994
- Sigstore integration time:
-
Permalink:
alexngai/endless-learning@40fe8b36f8afdec28c89f390c55c5a1971d25ef9 -
Branch / Tag:
refs/tags/v0.0.2 - Owner: https://github.com/alexngai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@40fe8b36f8afdec28c89f390c55c5a1971d25ef9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file endless_learning-0.0.2-py3-none-any.whl.
File metadata
- Download URL: endless_learning-0.0.2-py3-none-any.whl
- Upload date:
- Size: 282.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62e26d20188f8efc2dd694eb028d34cb7e4716bcbb41b2e28c480c38eca54f90
|
|
| MD5 |
f31dd3c04945955fb0a425a2e5bc3f77
|
|
| BLAKE2b-256 |
498708d5371fb3a229312bdf9edfb55c567becb8b792824172b61f221f4d36e3
|
Provenance
The following attestation bundles were made for endless_learning-0.0.2-py3-none-any.whl:
Publisher:
release.yml on alexngai/endless-learning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
endless_learning-0.0.2-py3-none-any.whl -
Subject digest:
62e26d20188f8efc2dd694eb028d34cb7e4716bcbb41b2e28c480c38eca54f90 - Sigstore transparency entry: 2536479188
- Sigstore integration time:
-
Permalink:
alexngai/endless-learning@40fe8b36f8afdec28c89f390c55c5a1971d25ef9 -
Branch / Tag:
refs/tags/v0.0.2 - Owner: https://github.com/alexngai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@40fe8b36f8afdec28c89f390c55c5a1971d25ef9 -
Trigger Event:
push
-
Statement type: