Skip to content

Commit

Permalink
Add create_messages function
Browse files Browse the repository at this point in the history
  • Loading branch information
hauselin committed Aug 17, 2024
1 parent 68e90ef commit cf74656
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 0 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export(check_options)
export(copy)
export(create)
export(create_message)
export(create_messages)
export(create_request)
export(delete)
export(delete_message)
Expand Down
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- `generate()` and `chat()` accept multiple images as prompts/messages.
- Add functions to validate messages for `chat()` function: `validate_message()`, `validate_messages()`.
- Add `encode_images_in_messages()` to encode images in messages for `chat()` function.
- Add `create_messages()` to create messages easily.

# ollamar 1.2.0

Expand Down
55 changes: 55 additions & 0 deletions R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,8 @@ image_encode_base64 <- function(image_path) {





#' Create a message
#'
#' @param content The content of the message.
Expand Down Expand Up @@ -545,6 +547,59 @@ validate_message <- function(message) {







#' Create a list of messages
#'
#' Create messages for `chat()` function.
#'
#' @param ... A list of messages, each of list class.
#'
#' @return A list of messages, each of list class.
#' @export
#'
#' @examples
#' messages <- create_messages(
#' create_message("be nice", "system"),
#' create_message("tell me a 3-word joke")
#' )
#'
#' messages <- create_messages(
#' list(role = "system", content = "be nice"),
#' list(role = "user", content = "tell me a 3-word joke")
#' )
create_messages <- function(...) {
messages <- list(...)
for (i in 1:length(messages)) {
message <- messages[[i]]
# in case message is in a nested list created by create_message()
if (is.null(names(message))) {
if (validate_message(message[[1]])) {
message <- message[[1]]
messages[[i]] <- message
}
}
if (validate_message(message)) {
next
}
}
return(messages)
}













#' Validate a list of messages
#'
#' Validate a list of messages to ensure they have the required fields and the correct data types for the `chat()` function.
Expand Down
1 change: 1 addition & 0 deletions _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ reference:
- subtitle: Manipulate chat/conversation history
desc: Functions to manipulate messages and chat history for `chat()` function.
contents:
- create_messages
- create_message
- append_message
- prepend_message
Expand Down
28 changes: 28 additions & 0 deletions man/create_messages.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions tests/testthat/test-utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,21 @@ test_that("copy function works with basic input", {
expect_true(msg5[[1]]$content == "hello2" & msg5[[2]]$content == "hello2.1" & msg5[[3]]$content == "hello4")


messages1 <- create_messages(
list(role = "system", content = "be nice"),
list(role = "user", content = "hello")
)
messages2 <- create_messages(
create_message("be nice", "system"),
create_message("hello")
)
messages3 <- create_message("be nice", "system")
messages3 <- append_message("hello", "user", messages3)
expect_identical(messages1, messages3)
expect_identical(messages1, messages2)
expect_identical(messages2, messages3)


expect_true(validate_message(list(role = "user", content = "hello")))
expect_error(validate_message(""))
expect_error(validate_message(list(role = "user")))
Expand Down

0 comments on commit cf74656

Please sign in to comment.