Skip to main content

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

endless_learning-0.0.2.tar.gz (501.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

endless_learning-0.0.2-py3-none-any.whl (282.8 kB view details)

Uploaded Python 3

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

Hashes for endless_learning-0.0.2.tar.gz
Algorithm Hash digest
SHA256 3da6f15556613538bca5777a2e2ac8568cb91c8d9dcdc3346324e4d98e9d526d
MD5 28bd2045eca4d01160ab6658aaa56b0e
BLAKE2b-256 a456a47054e8fad6b8af01569f801fb81afa32cb5436a7bce2300abc93ce250a

See more details on using hashes here.

Provenance

The following attestation bundles were made for endless_learning-0.0.2.tar.gz:

Publisher: release.yml on alexngai/endless-learning

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file endless_learning-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for endless_learning-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 62e26d20188f8efc2dd694eb028d34cb7e4716bcbb41b2e28c480c38eca54f90
MD5 f31dd3c04945955fb0a425a2e5bc3f77
BLAKE2b-256 498708d5371fb3a229312bdf9edfb55c567becb8b792824172b61f221f4d36e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for endless_learning-0.0.2-py3-none-any.whl:

Publisher: release.yml on alexngai/endless-learning

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page