Skip to content
dspy-rlm-module logo

dspy.RLM — Recursive Language Model

dspy-rlm-module

Use dspy.RLM (Recursive Language Model) for reasoning over contexts too large to fit in an LLM's working window — entire codebases, long logs, massive documents, or multi-step data exploration that needs a sandboxed Python REPL. Use when the input is >100k tokens, needs recursive chunking, or benefits from the LLM writing and running code to probe data.

SKILL.md

Full skill instructions

dspy.RLM — Recursive Language Model

dspy.RLM runs the LLM in a sandboxed Python REPL (Pyodide/​WASM via Deno) with access to the full context as variables. The LLM writes code to slice, grep, summarize, and recursively sub-query the data, iterating until it can answer. Use it when the context is too large to cram into a single prompt.

Prerequisites

  • Deno installed (for the default PythonInterpreter): brew install deno or see https://deno.land. The interpreter is a Pyodide-in-WASM sandbox spawned by Deno.
  • A sub-LM for inner calls — usually a cheaper model than the outer LM. Defaults to dspy.settings.lm.

Canonical usage

import dspy

dspy.configure(lm=dspy.LM("openai/​gpt-4o"))
sub_lm = dspy.LM("openai/​gpt-4o-mini")    # cheap inner model

rlm = dspy.RLM(
    "context, query -> answer",
    max_iterations=20,
    max_llm_calls=50,
    max_output_chars=10_000,
    sub_lm=sub_lm,
    tools=[],
    verbose=False,
)

result = rlm(
    context=open("huge_log.txt").read(),   # can be 500k+ tokens
    query="Summarize every unique error class and how many times each appeared.",
)
print(result.answer)

Full constructor

dspy.RLM(
    signature: type[Signature] | str,
    max_iterations: int = 20,       # REPL loop cap
    max_llm_calls: int = 50,        # sub-LM call cap (stops runaway recursion)
    max_output_chars: int = 10_000, # truncate REPL stdout per step
    verbose: bool = False,          # print the REPL trace
    tools: list[Callable] | None = None,
    sub_lm: dspy.LM | None = None,
    interpreter: CodeInterpreter | None = None,  # custom sandbox
)

When to reach for RLM vs. alternatives

SituationUse
Context <100k, answer fits one LM calldspy.Predict / dspy.ChainOfThought
Need external tools (web, db)dspy.ReAct(tools=[...])
Math/​code that must rundspy.ProgramOfThought
Huge context, recursive chunking, or data-exploration loopdspy.RLM
Entire-codebase reasoning where the LM should grep/​read filesdspy.RLM with file-reading tools=[...]

Composition — RLM as a module inside a larger program

Wrap the RLM in your own dspy.Module and optimize the enclosing program with GEPA. GEPA can tune both the RLM's outer signature instruction and the surrounding predictors.

class RepoAuditor(dspy.Module):
    def __init__(self):
        super().__init__()
        self.explore = dspy.RLM("repo_tree, question -> findings",
                                max_iterations=30, sub_lm=dspy.LM("openai/​gpt-4o-mini"))
        self.synth = dspy.ChainOfThought("findings, question -> report")

    def forward(self, repo_tree, question):
        f = self.explore(repo_tree=repo_tree, question=question).findings
        return self.synth(findings=f, question=question)

Then: dspy.GEPA(metric=..., ...).compile(student=RepoAuditor(), trainset=..., valset=...).

Practical tips

  • Budget carefully. A single RLM call can issue dozens of sub-LM calls. Keep max_llm_calls tight (20–50) in production; raise for research.
  • The default stdout cap is smaller in DSPy 3.2.x. max_output_chars now defaults to 10_000; raise it deliberately if your REPL tools print large tables or document slices.
  • Use a cheap sub_lm. The outer LM orchestrates; inner calls (summarize, filter, score) don't need the flagship model.
  • Pass data as kwargs, not in the instruction. rlm(context=huge_string, query="...") lets the REPL treat context as a Python variable. Avoid concatenating it into the prompt.
  • verbose=True while debugging. Prints every REPL step — invaluable when the RLM appears to hang or loop.
  • Custom tools are regular Python callables passed via tools=[...]; they are exposed inside the sandbox. Useful for read_file, grep, vector_search, etc. In DSPy 3.2.x they are invoked by keyword, so give them named, typed parameters rather than positional-only signatures.
  • Deno install is required. Missing Deno is the #1 RLM error. Check which deno before reporting bugs.

Security note

The default interpreter is a Deno-sandboxed Pyodide WASM runtime — no filesystem, network, or subprocess access by default. If you pass custom tools that do I/​O, your tools' security posture is yours. Never hand raw subprocess.run to the RLM.

Anti-patterns

  • Using RLM when a 32k-token prompt would fit — overhead is not worth it.
  • Missing Deno → hard-to-diagnose failures. Install it.
  • max_llm_calls left at default in a production path — runaway cost.
  • Passing secrets in the context string — they get echoed into REPL state.

Next

  • Wrap-and-optimize with GEPA → dspy-gepa-optimizer.
  • Full reference → reference.md.

More Documentation skills

lark-wiki logo
Documentation

lark-wiki

Manage Lark Wiki spaces, members, nodes, and document organization hierarchies.

17.5K 457.5K
View

Discover and call native Lark OpenAPI endpoints from official documentation when existing skills fall short.

17.5K 451K
View

Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations.

2.7K 431.1K
View
writing-plans logo
Documentation

writing-plans

Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.

295.4K 268K
View
writing-skills logo
Documentation

writing-skills

Test-driven documentation for creating reusable agent techniques, patterns, and reference guides.

295.4K 205.7K
View

Guide for setting up and using Firebase Authentication. Use this skill when the user's app requires user sign-in, user management, or secure data access using auth rules.

462 163.8K
View

Builds and deploys Firebase SQL Connect (aka Firebase Data Connect) backends with PostgreSQL securely. Use when designing schemas with tables and relations, writing authorized queries and mutations, configuring real-time data updates, or generating type-safe SDKs. Use when you need a relational database with Firebase, or when the user mentions SQL Connect or Data Connect.

462 158.3K
View

Guide for implementing smooth, native-feeling animations using React's View Transition API (`<ViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.

31.9K 143K
View

README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.

497 139.6K
View

Content & writing AI tools

Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View
Easy Peasy AI logo
Content & writing

Easy Peasy AI

Streamline Your Content Creation with Easy Peasy AI.

Paid
View
L
Content & writing

LensGo

social creators, marketers and small teams producing visual assets

Freemium
View
L
Content & writing

Leonardo AI

Create AI art, images, and videos with prompts

Freemium
View
L
Content & writing

Luma Dream Machine

Creative teams producing multi-asset campaigns

Freemium
View
xpression camera logo
Content & writing

xpression camera

Instantly transform into anyone on video chats and streams.

Freemium
View
C
Content & writing

Caption My Photos

A tool to automate personalized captions generation for photos.

Paid
View
TextFX logo
Content & writing

TextFX

AI-powered tools to spark creative writing.

Free
View