Skip to main content

Production-grade RLMs (Recursive Language Models) with tool use, built on DSPy

Project description

predict-rlm

Harness-less LM runtime built on top of DSPy. Define your inputs, outputs, and tools — the model handles its own control flow. Get fully interpretable trajectories and performance that scales directly with model improvements. Without context rot.

Based on the Recursive Language Models paper by Alex L. Zhang, Tim Kraska, and Omar Khattab from the Stanford NLP lab.


Tests codecov PyPI Python Discord GitHub stars
crafted with ♥ in MTL · NYC · FLP
by Trampoline AI

Installation

uv add predict-rlm

Why RLMs?

Bitter Lesson Spectrum — from hand-written prompts to RLMs

  • Avoid context rot — The root LM only interacts with its context programmatically through the REPL, staying well within its comfortable operating range — enabling complex, long-horizon tasks that would otherwise cause models to silently degrade.
  • Bitter lesson-proof: RLMs improve as LMs improve — Unlike harnesses, which can cap or constrain the base model's capabilities, the performance, speed, and cost of RLM calls correlate directly with improvements to base model capabilities. If the base model handles 10M tokens tomorrow, the RLM handles 100M.
  • Symbolic reasoning & recursion — like algebra, RLMs express the structure of computation rather than performing each operation individually; a single line can represent 1M sub-calls — in direct contrast to agents like Claude Code that must mechanically emit each sub-agent call one at a time.
  • Interpretability — RLM trajectories are fully readable: you can trace every peek, chunk, sub-call, and verification step the model takes. This not only reveals how the model decomposed a problem, but provides concrete optimization signals which tools like GEPA can ingest to evolve the RLM's strategies.
  • Ideal for improving performance per token — RLMs allow small models to punch way above their weight (RLM(GPT-5-mini) outperforms base GPT-5) providing great opportunities for reducing costs or stretching limited compute budgets without sacrificing quality.

Features

Classic harness vs RLM architecture

  • Multimodal — process images, documents, audio, and video through sub-LM calls using native provider multimodal APIs.
  • Async tool calling — native RLM async support in the WASM sandbox, enabling concurrent sub-LM invocations and tool calls
  • Prompt-optimized skills & tools — predic-rlm skills comes tested and optimized to ensure maximum LM interoperability and performance, bundling instructions, PyPI packages, and tools for domain-specific tasks
  • Simple file I/O — pass local or cloud files as typed inputs and outputs via File, keeping interop with your existing data pipelines straightforward. (S3 files support soon)
  • Structured sub-LM calls — native Pydantic and DSPy signature support for type-safe sub-LM invocations with structured outputs

Demos

Description Input / Output Preview
Document Analysis — Analyze documents and extract key dates, entities, and financial information into a structured report Input: PDFs
Output: Structured briefing report (example output)
Document Redaction — Redact PII from PDFs based on a policy, then verify the redactions visually Input: PDFs
Output: Redacted PDFs (example output)
Invoice Processing — Extract vendor info, line items, and totals from PDF invoices into a consolidated Excel spreadsheet Input: PDF invoices
Output: Excel spreadsheet (example output)
Contract Comparison — Compare two contract versions and produce a structured diff report with per-section analysis Input: 2 PDF contracts
Output: Structured diff report (example output)

Quick start

With your coding agent

Install the predict-rlm skill in Claude Code, Codex, Cursor, or any compatible coding agent:

npx skills add Trampoline-AI/predict-rlm

Then ask your agent to build an RLM:

❯ /rlm build an RLM that extracts line items from PDF invoices into a spreadsheet

Quick Example

import dspy
from predict_rlm import File, PredictRLM

class AnalyzeImages(dspy.Signature):
    """Analyze images and answer the query. Load each image as a base64 data
    URI and use predict() with dspy.Image to extract visual information."""
    images: list[File] = dspy.InputField()
    query: str = dspy.InputField()
    answer: str = dspy.OutputField()

rlm = PredictRLM(
    AnalyzeImages,
    lm="openai/gpt-5.4",
    sub_lm="openai/gpt-5.1",
)

result = rlm(
    images=[File(path="page.png")],
    query="Extract all visible text, then count each letter A-Z (case-insensitive).",
)

print(result.answer)

Next steps

  • How it works — understand the sandbox, REPL loop, signatures, and file I/O
  • API reference — constructor params for PredictRLM, File, and Skill
  • Skills — define, compose, and mount custom skills
  • Examples — end-to-end demos with setup instructions

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

predict_rlm-0.2.2.tar.gz (63.5 kB view details)

Uploaded Source

Built Distribution

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

predict_rlm-0.2.2-py3-none-any.whl (70.9 kB view details)

Uploaded Python 3

File details

Details for the file predict_rlm-0.2.2.tar.gz.

File metadata

  • Download URL: predict_rlm-0.2.2.tar.gz
  • Upload date:
  • Size: 63.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for predict_rlm-0.2.2.tar.gz
Algorithm Hash digest
SHA256 b06ec936155f3b363cfc3a73b3e364075c9f0d09ac0d301eadb8302c27d23622
MD5 653dceddae63b366200fb923214bbc9d
BLAKE2b-256 87e18cc5216dd9f9e01b7025fe7a34afe77a874af24c5764683206c353c3fa1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for predict_rlm-0.2.2.tar.gz:

Publisher: release.yml on Trampoline-AI/predict-rlm

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

File details

Details for the file predict_rlm-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: predict_rlm-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 70.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for predict_rlm-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5131fdbedf9e34d6b7fbf597219a86dc58ff31aaeff2174f2458d322693c6567
MD5 7e4887f2c119f16b934796a2bc430161
BLAKE2b-256 d6895f91f255ce764f85512b373c3310f75e87a8146cf6b9f940dde0a1fd51de

See more details on using hashes here.

Provenance

The following attestation bundles were made for predict_rlm-0.2.2-py3-none-any.whl:

Publisher: release.yml on Trampoline-AI/predict-rlm

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

Supported by

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