Skip to content

Commit

Permalink
Increment version number to 0.0.0.9001
Browse files Browse the repository at this point in the history
  • Loading branch information
CorradoLanera committed Apr 19, 2024
1 parent 5391cda commit 69701c1
Show file tree
Hide file tree
Showing 26 changed files with 1,494 additions and 25 deletions.
1 change: 1 addition & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
^CODE_OF_CONDUCT\.md$
^\.github$
^codecov\.yml$
^dev$
1 change: 0 additions & 1 deletion .Renviron

This file was deleted.

15 changes: 15 additions & 0 deletions .Rprofile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
if (interactive()) {
if (as.logical(Sys.getenv("ATTACH_STARTUP_PKGS", FALSE))) {
usethis::ui_todo("Attaching development supporting packages...")
suppressPackageStartupMessages(suppressWarnings({
library(devtools)
ui_done("Library {ui_value('devtools')} attached.")
library(usethis)
ui_done("Library {ui_value('usethis')} attached.")
library(testthat)
ui_done("Library {ui_value('testthat')} attached.")
library(checkmate)
ui_done("Library {ui_value('checkmate')} attached.")
}))
}
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
.httr-oauth
.DS_Store
.quarto
.Renviron
17 changes: 12 additions & 5 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
Package: ubep.gpt
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Version: 0.0.0.9001
Authors@R:
person("First", "Last", , "[email protected]", role = c("aut", "cre"),
comment = c(ORCID = "YOUR-ORCID-ID"))
Description: What the package does (one paragraph).
License: MIT + file LICENSE
URL: https://github.com/UBESP-DCTV/ubep.gpt
BugReports: https://github.com/UBESP-DCTV/ubep.gpt/issues
Imports:
glue,
lifecycle,
tibble
openai,
purrr,
rlang,
tibble,
usethis
Suggests:
checkmate,
lintr,
spelling,
testthat (>= 3.0.0)
Config/testthat/edition: 3
Encoding: UTF-8
Language: en-US
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.1
Language: en-US
URL: https://github.com/UBESP-DCTV/ubep.gpt
BugReports: https://github.com/UBESP-DCTV/ubep.gpt/issues
10 changes: 10 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# Generated by roxygen2: do not edit by hand

export(compose_prompt)
export(compose_prompt_api)
export(compose_prompt_system)
export(compose_prompt_user)
export(get_completion_from_messages)
export(get_content)
export(get_tokens)
export(query_gpt)
export(query_gpt_on_column)
importFrom(lifecycle,deprecated)
importFrom(rlang,":=")
importFrom(tibble,tibble)
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# ubep.gpt (development version)

* Setup development environment.
* Initial setup from CorradoLanera/gpt-template.
128 changes: 128 additions & 0 deletions R/compose_prompt.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#' Create a prompt to ChatGPT
#'
#' Questa funzione è un semplice wrapper per comporre un buon prompt per
#' ChatGPT. L'output non è altro che la giustapposizione su righe separate delle
#' varie componenti (con il testo addizionale racchiuso tra i delimitatori in
#' fondo al prompt). Dunque il suo utilizzo è più che altro focalizzato è utile
#' per ricordare e prendere l'abitudine di inserire le componenti utili per un
#' buon prompt.
#'
#' @param role (chr) The role that ChatGPT should play
#' @param context (chr) The context behind the task required
#' @param task (chr) The tasks ChatGPT should assess
#' @param instructions (chr) Description of steps ChatGPT should follow
#' @param output (chr) The type/kind of output required
#' @param style (chr) The style ChatGPT should use in the output
#' @param examples (chr) Some examples of correct output
#' @param text (chr) Additional text to embed in the prompt
#' @param delimiter (chr) delimiters for the `text` to embed, a sequence of
#' three identical symbols is suggested
#'
#' @return (chr) the glue of all the prompts components
#' @export
#'
#' @examples
#' if (FALSE) {
#' compose_prompt(
#' role = "Sei l'assistente di un docente universitario.",
#' context = "
#' Tu e lui state preparando un workshop sull'utilizzo di ChatGPT
#' per biostatisitci ed epidemiologi.",
#' task = "
#' Il tuo compito è trovare cosa dire per spiegare cosa sia una
#' chat di ChatGPT agli studenti, considerando che potrebbe
#' esserci qualcuno che non ne ha mai sentito parlare (e segue
#' il worksho incuriosito dal titolo o dagli amici).",
#' output = "
#' Riporta un potenziale dialogo tra il docente e gli studenti
#' che assolva ed esemplifichi lo scopo descritto.",
#' style = "Usa un tono amichevole, colloquiale, ma preciso."
#' )
#' }
compose_prompt <- function(
role = "", context = "", task = "", instructions = "", output = "",
style = "", examples = "", text = "",
delimiter = if (text == "") "" else '""""'
) {
msg_sys <- compose_prompt_system(role, context)
msg_usr <- compose_prompt_user(
task, instructions, output, style, examples, text, delimiter
)
glue::glue(
"
{msg_sys}
{msg_usr}
"
)
}

#' Compose the ChatGPT System prompt
#'
#' @describeIn compose_prompt
#'
#' @return (chr) The complete system prompt
#' @export
#' @examples
#' if (FALSE) {
#' msg_sys <- compose_prompt_system(
#' role = "Sei l'assistente di un docente universitario.",
#' context = "
#' Tu e lui state preparando un workshop sull'utilizzo di ChatGPT
#' per biostatisitci ed epidemiologi."
#' )
#' }
compose_prompt_system <- function(role = "", context = "") {
glue::glue("
{role}
{context}
")
}

#' Compose the ChatGPT User prompt
#'
#' @describeIn compose_prompt
#'
#' @return (chr) The complete user prompt
#' @export
#' @examples
#' if (FALSE) {
#' msg_usr <- compose_prompt_user(
#' task = "
#' Il tuo compito è trovare cosa dire per spiegare cosa sia una
#' chat di ChatGPT agli studenti, considerando che potrebbe
#' esserci qualcuno che non ne ha mai sentito parlare (e segue
#' il worksho incuriosito dal titolo o dagli amici).",
#' output = "
#' Riporta un potenziale dialogo tra il docente e gli studenti
#' che assolva ed esemplifichi lo scopo descritto.",
#' style = "Usa un tono amichevole, colloquiale, ma preciso."
#' )
#' }
compose_prompt_user <- function(
task = "", instructions = "", output = "", style = "", examples = "",
text = "", delimiter = if (text == "") "" else '""""'
) {
glue::glue("
{task}
{instructions}
{output}
{style}
{examples}
{delimiter}
{text}
{delimiter}
")
}


create_usr_data_prompter <- function(
task = "", instructions = "", output = "", style = "", examples = ""
) {
function(text) {
compose_prompt_user(
task = task, instructions = instructions, output = output,
style = style, examples = examples, text = text
)
}
}
69 changes: 69 additions & 0 deletions R/compose_prompt_api.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#' Create a prompt to OpenAI API
#'
#' Questa funzione è un semplice wrapper per comporre un prompt per le
#' API OpenAI a ChatGPT. Per la sua semplicità, per lo più didattica,
#' non considera alternanze successive di prompt nella chat ma solo
#' l'impostazione iniziale del sistema e il primo messaggio dell'utente.
#'
#' @details In genere, una conversazione è formattata con un messaggio
#' di sistema, seguito da messaggi alternati dell'utente e
#' dell'assistente.
#'
#' Il messaggio di sistema consente di impostare il comportamento
#' dell'assistente. Ad esempio, è possibile modificare la personalità
#' dell'assistente o fornire istruzioni specifiche sul comportamento da
#' tenere durante la conversazione. Tuttavia, il messaggio di sistema è
#' facoltativo e il comportamento del modello senza un messaggio di
#' sistema sarà probabilmente simile a quello di un messaggio generico
#' come "Sei un assistente utile".
#'
#' I messaggi dell'utente forniscono richieste o commenti a cui
#' l'assistente deve rispondere. I messaggi dell'assistente memorizzano
#' le risposte precedenti dell'assistente, ma possono anche essere
#' scritti dall'utente per fornire esempi del comportamento desiderato.
#'
#'
#' @param sys_msg (chr) messaggio da usare per impostare il sistema
#' @param usr_msg (chr) messaggio da usare come richiesta al sistema
#' passata dall'utente
#'
#' @return (chr) una lista di due lista, la prima con il messaggio da
#' usare per il prompt di impostazione del sistema di assistenza delle
#' API, la seconda con il prompt di richiesta dell'utente.
#' @export
#'
#' @examples
#' msg_sys <- compose_prompt_system(
#' role = "Sei l'assistente di un docente universitario.",
#' context = "
#' Tu e lui state preparando un workshop sull'utilizzo di ChatGPT
#' per biostatisitci ed epidemiologi."
#' )
#'
#' msg_usr <- compose_prompt_user(
#' task = "
#' Il tuo compito è trovare cosa dire per spiegare cosa sia una
#' chat di ChatGPT agli studenti, considerando che potrebbe
#' esserci qualcuno che non ne ha mai sentito parlare (e segue
#' il worksho incuriosito dal titolo o dagli amici).",
#' output = "
#' Riporta un potenziale dialogo tra il docente e gli studenti
#' che assolva ed esemplifichi lo scopo descritto.",
#' style = "Usa un tono amichevole, colloquiale, ma preciso."
#' )
#'
#' compose_prompt_api(msg_sys, msg_usr)
#'
#'
compose_prompt_api <- function(sys_msg, usr_msg) {
list(
list(
role = "system",
content = sys_msg
),
list(
role = "user",
content = usr_msg
)
)
}
Loading

0 comments on commit 69701c1

Please sign in to comment.