tests/testthat/test-prompt_wrap.R

test_that("can create prompt_wrap", {
  prompt <- prompt_wrap("aaa", modify_fn = \(x) "bbb")
  expect_s3_class(prompt, "Tidyprompt")
})

test_that("can add prompt wraps of all types and they are ordered correctly", {
  prompt <- "Test prompt" |>
    prompt_wrap(extraction_fn = \(x) x, type = "unspecified") |>
    prompt_wrap(extraction_fn = \(x) x, type = "mode") |>
    prompt_wrap(modify_fn =     \(x) x, type = "tool") |>
    prompt_wrap(modify_fn =     \(x) x, type = "break") |>
    prompt_wrap(validation_fn = \(x) x, type = "check")

  wraps_mod <- prompt$get_prompt_wraps(order = "modification")
  types_in_order_mod <- sapply(wraps_mod, function(x) x$type)
  expect_equal(types_in_order_mod, c("check", "unspecified", "break", "mode", "tool"))

  wraps_eval <- prompt$get_prompt_wraps(order = "evaluation")
  types_in_order_eval <- sapply(wraps_eval, function(x) x$type)
  expect_equal(types_in_order_eval, c("tool", "mode", "break", "unspecified", "check"))
})

test_that("handler fn works", {
  fake <- llm_provider_fake()

  result <- "Hi" |>
    prompt_wrap(
      handler_fn = function(response, llm_provider) {
        if (!inherits(llm_provider, "LlmProvider")) {
          stop("llm_provider passed by handler_fn is not an LlmProvider")
        }

        response$completed$content[nrow(response$completed)] <- "beepido boop ba"
        return(response)
      }
    ) |>
    send_prompt(fake)

  expect_identical(result, "beepido boop ba")
})

test_that("parameter_fn throws no error", {
  fake <- llm_provider_fake()

  expect_no_error("Hi" |>
    prompt_wrap(
      parameter_fn = function(llm_provider) {
        if (!inherits(llm_provider, "LlmProvider")) {
          stop("llm_provider passed by parameter_fn is not an LlmProvider")
        }

        return(list(
          beep = "boop"
        ))
      }
    ) |>
    send_prompt(fake)
  )
})

Try the tidyprompt package in your browser

Any scripts or data that you put into this service are public.

tidyprompt documentation built on April 4, 2025, 12:24 a.m.