Skip to contents

Constructs an LLM-powered agent for generating, debugging, explaining, or optimizing R code. **Two calling patterns are supported**:

  • **Builder pattern** – omit `user_input`. The function returns a reusable coder-agent closure. Call that closure with different queries whenever you need code help.

  • **One-shot pattern** – provide `user_input`. The function executes immediately and returns the result once.

Arguments

llm

A function that accepts a character `prompt` and returns an LLM response (optionally accepts `verbose`).

system_prompt

Optional system-level instructions that override the built-in default prompt.

user_input

The coding task/query (e.g., `"Write function to filter NAs"`). **Default `NULL`** – omit to obtain a reusable agent.

max_tries

Maximum LLM retry attempts (default `3`).

backoff

Seconds to wait between retries (default `2`).

verbose

Logical flag to show progress messages (default `TRUE`).

Value

  • If `user_input` is `NULL`: a function (the coder-agent closure).

  • Otherwise: a list with the fields

    input

    The original user query.

    llm_response

    The LLM output (or error message).

    system_prompt

    Prompt actually sent.

    success

    Logical; did the call succeed?

    attempts

    Number of attempts made.

Details

The agent automatically retries failed LLM calls (with exponential back-off) and always returns a structured result.

Examples

if (FALSE) { # \dontrun{
## ------------------------------------------------------------------
## 1)  Builder pattern – create a reusable coder agent
## ------------------------------------------------------------------
coder <- build_code_agent(
  llm       = my_llm_wrapper,   # your own wrapper around the LLM API
  max_tries = 3,
  backoff   = 2,
  verbose   = FALSE
)

# Use the agent multiple times
res1 <- coder("Write an R function that z-score–standardises all numeric columns.")
res2 <- coder("Explain what `%>%` does in tidyverse pipelines.")

## ------------------------------------------------------------------
## 2)  One-shot pattern – run a single request immediately
## ------------------------------------------------------------------
one_shot <- build_code_agent(
  llm        = my_llm_wrapper,
  user_input = "Create a ggplot2 bar chart of mpg by cyl in mtcars.",
  max_tries  = 3,
  backoff    = 2,
  verbose    = FALSE
)
} # }