feat: add depth>1 recursive subcalls with limits and cost tracking #84
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds full depth>1 recursive subcall support for RLM, enabling nested RLM calls when code inside the REPL invokes
llm_query().Features
_subcall()spawns child RLM instances with incremented depth_subcall()returnsRLMChatCompletion(aligns with LM completion struct)max_budgetparameter withBudgetExceededError, OpenRouter cost extractionmax_timeout,max_tokens,max_errorswith corresponding exceptionson_subcall_start,on_subcall_complete,on_iteration_start,on_iteration_completeFiles Changed
rlm/core/rlm.py- Core subcall logic, limits, callbacksrlm/core/types.py- UsageSummary cost aggregationrlm/environments/local_repl.py- subcall_fn integrationrlm/clients/openai.py- OpenRouter cost extractionrlm/logger/verbose.py- Limit exceeded displaydocs/getting-started.md,docs/api/rlm.md- DocumentationTests
google/gemini-3-flash-previewvia OpenRouterBreaking Changes
None - all existing APIs remain compatible.
🤖 Generated with Claude Code