test_that("can expand all contents in a turn", {
req <- ContentToolRequest(id = "123", name = "my_tool")
image <- ContentImageInline("image/png", "abc")
turn <- UserTurn(list(
ContentText("abc"),
ContentToolResult(value = image, request = req),
ContentToolResult(value = "abc", request = req)
))
expect_length(turn_contents_expand(turn)@contents, 1 + 4 + 1)
turn <- UserTurn(list(
ContentText("abc"),
ContentToolResult(value = image, request = req),
ContentText("ghi"),
ContentToolResult(value = image, request = req)
))
expect_length(turn_contents_expand(turn)@contents, 1 + 4 + 1 + 4)
turn <- UserTurn(list(
ContentText("abc"),
ContentToolResult(value = list(image, image), request = req),
ContentText("ghi")
))
expect_length(
turn_contents_expand(turn)@contents,
1 + (1 + 1 + 3 + 3 + 1) + 1
)
})
test_that("expanding generates useful JSON", {
req <- ContentToolRequest(id = "123", name = "my_tool")
image <- ContentImageInline("image/png", "abc")
provider <- ProviderOpenAI("name", "model", "base_url")
expanded_simple <- expand_tool_value(req, image)
expect_snapshot(print_json(as_json(provider, UserTurn(expanded_simple))))
expanded_list <- expand_tool_values(req, list(image, image))
expect_snapshot(print_json(as_json(provider, UserTurn(expanded_list))))
})
test_that("can expand tool with single value", {
req <- ContentToolRequest(id = "123", name = "my_tool")
image <- ContentImageInline("image/png", "abc")
expanded <- expand_tool_value(req, image)
expect_s7_class(expanded[[1]], ContentToolResult)
expect_equal(expanded[[1]]@request, req)
expect_s7_class(expanded[[2]], ContentText) #
expect_equal(expanded[[3]], image)
expect_s7_class(expanded[[4]], ContentText) #
})
test_that("can expand tool with multiple values", {
req <- ContentToolRequest(id = "123", name = "my_tool")
image1 <- ContentImageInline("image/png", "abc")
image2 <- ContentImageInline("image/png", "def")
expanded <- expand_tool_values(req, list(image1, image2))
expect_s7_class(expanded[[1]], ContentToolResult)
expect_equal(expanded[[1]]@request, req)
expect_s7_class(expanded[[2]], ContentText) #
expect_s7_class(expanded[[3]], ContentText) #
expect_equal(expanded[[4]], image1)
expect_s7_class(expanded[[5]], ContentText) #
expect_s7_class(expanded[[6]], ContentText) #
expect_equal(expanded[[7]], image2)
expect_s7_class(expanded[[8]], ContentText) #
expect_s7_class(expanded[[9]], ContentText) #
})