Nothing
# Test: Initialization of llm_provider with basic parameters
test_that("llm_provider initializes with parameters", {
parameters <- list(model = "my-llm-model", api_key = "my-api-key")
provider <- `llm_provider-class`$new(
complete_chat_function = function(chat_history) {
list(role = "assistant", content = "Hello")
},
parameters = parameters
)
expect_s3_class(provider, "LlmProvider")
expect_equal(provider$parameters, parameters)
})
# Test: Setting and updating parameters
test_that("llm_provider updates parameters correctly", {
parameters <- list(model = "my-llm-model", api_key = "my-api-key")
provider <- `llm_provider-class`$new(
complete_chat_function = function(chat_history) {
list(role = "assistant", content = "Hello")
},
parameters = parameters
)
# Update parameters
new_parameters <- list(api_key = "new-api-key", timeout = 10)
provider$set_parameters(new_parameters)
updated_params <- provider$parameters
expect_equal(updated_params$model, "my-llm-model")
expect_equal(updated_params$api_key, "new-api-key")
expect_equal(updated_params$timeout, 10)
})
# Test: complete_chat function with verbose on
test_that("llm_provider complete_chat prints message when verbose is TRUE", {
test_chat_function <- function(chat_history) {
return(
list(
completed = data.frame(
role = "assistant",
content = "Hello!"
)
)
)
}
provider <- `llm_provider-class`$new(
complete_chat_function = test_chat_function,
verbose = TRUE
)
# Test interaction with chat history
chat_history <- data.frame(role = "user", content = "Hello")
expect_message(
provider$complete_chat(list(chat_history = chat_history)),
"--- Receiving response from LLM provider: ---"
)
})
# Test: Fake LLM provider responses
test_that("llm_provider_fake returns expected response for known prompt", {
provider_fake <- llm_provider_fake(verbose = FALSE)
chat_history <- data.frame(role = "user", content = "Hi there!")
result <- provider_fake$complete_chat(list(chat_history = chat_history))
response <- result$completed |> utils::tail(1)
expect_equal(response$role, "assistant")
expect_match(response$content, "nice to meet you")
})
test_that("llm_provider normalizes sparse tool metadata in completed history", {
provider <- `llm_provider-class`$new(
complete_chat_function = function(chat_history) {
list(
completed = dplyr::bind_rows(
chat_history,
data.frame(
role = "assistant",
content = "Hello!",
stringsAsFactors = FALSE
)
),
http = list(request = NULL, response = NULL)
)
},
verbose = FALSE
)
result <- provider$complete_chat(list(
chat_history = data.frame(
role = "user",
content = "Hello",
tool_call = FALSE,
tool_call_id = NA_character_,
tool_result = FALSE,
stringsAsFactors = FALSE
)
))
expect_equal(result$completed$tool_call, c(FALSE, FALSE))
expect_true(all(is.na(result$completed$tool_call_id)))
expect_equal(result$completed$tool_result, c(FALSE, FALSE))
})
test_that("llm_provider excludes hidden rows from outgoing requests", {
state <- new.env(parent = emptyenv())
state$seen_chat_history <- NULL
provider <- `llm_provider-class`$new(
complete_chat_function = function(chat_history) {
self$parameters$.test_state$seen_chat_history <- chat_history
list(
completed = dplyr::bind_rows(
chat_history,
data.frame(
role = "assistant",
content = "Fixed answer",
stringsAsFactors = FALSE
)
),
http = list(request = NULL, response = NULL)
)
},
parameters = list(.test_state = state),
verbose = FALSE
)
input <- data.frame(
role = c("user", "assistant", "assistant", "user"),
content = c("Question", "Reasoning step", "Answer", "Follow-up"),
hidden_from_llm = c(FALSE, TRUE, FALSE, FALSE),
stringsAsFactors = FALSE
)
result <- provider$complete_chat(list(chat_history = input))
expect_equal(
state$seen_chat_history$content,
c("Question", "Answer", "Follow-up")
)
expect_false(any(state$seen_chat_history$hidden_from_llm))
expect_equal(
result$completed$content,
c("Question", "Reasoning step", "Answer", "Follow-up", "Fixed answer")
)
expect_equal(
result$completed$hidden_from_llm,
c(FALSE, TRUE, FALSE, FALSE, FALSE)
)
})
test_that("llm_provider excludes tool call rows from outgoing requests", {
state <- new.env(parent = emptyenv())
state$seen_chat_history <- NULL
provider <- `llm_provider-class`$new(
complete_chat_function = function(chat_history) {
self$parameters$.test_state$seen_chat_history <- chat_history
list(
completed = dplyr::bind_rows(
chat_history,
data.frame(
role = "assistant",
content = "Fixed answer",
stringsAsFactors = FALSE
)
),
http = list(request = NULL, response = NULL)
)
},
parameters = list(.test_state = state),
verbose = FALSE
)
input <- data.frame(
role = c("user", "assistant", "tool", "assistant", "user"),
content = c(
"Question",
"~>> Calling function 'tool' with arguments:\n{}",
"~>> Result:\n42",
"Answer",
"Follow-up"
),
tool_call = c(FALSE, TRUE, FALSE, FALSE, FALSE),
tool_call_id = c(
NA_character_,
"call-1",
"call-1",
NA_character_,
NA_character_
),
tool_result = c(FALSE, FALSE, TRUE, FALSE, FALSE),
stringsAsFactors = FALSE
)
result <- provider$complete_chat(list(chat_history = input))
expect_equal(
state$seen_chat_history$content,
c("Question", "~>> Result:\n42", "Answer", "Follow-up")
)
expect_false(any(state$seen_chat_history$tool_call))
expect_equal(
result$completed$hidden_from_llm,
c(FALSE, TRUE, FALSE, FALSE, FALSE, FALSE)
)
})
# Test: Invalid parameters handling
test_that("llm_provider errors on invalid parameters", {
expect_error(
`llm_provider-class`$new(
complete_chat_function = function(chat_history) {
list(role = "assistant", content = "Hello")
},
parameters = list("unnamed")
),
"parameters must be a named list"
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.