Modify prompt enhancements

There are a lot of parameters that need to be set or sent when communicating with the LLM. To reduce the complexity of every single request, chattr processes and stores those parameters in an R object. The object can be accessed via the function chattr_defaults():

library(chattr)

chattr_use("gpt4")
#> 
#> ── chattr
#> • Provider: OpenAI - Chat Completions
#> • Path/URL: https://api.openai.com/v1/chat/completions
#> • Model: gpt-4
#> • Label: GPT 4 (OpenAI)

chattr_defaults()
#> 
#> ── chattr ──────────────────────────────────────────────────────────────────────
#> 
#> ── Defaults for: Default ──
#> 
#> ── Prompt:
#> • {{readLines(system.file('prompt/base.txt', package = 'chattr'))}}
#> 
#> ── Model
#> • Provider: OpenAI - Chat Completions
#> • Path/URL: https://api.openai.com/v1/chat/completions
#> • Model: gpt-4
#> • Label: GPT 4 (OpenAI)
#> 
#> ── Model Arguments:
#> • temperature: 0.01
#> • max_tokens: 1000
#> • stream: TRUE
#> 
#> ── Context:
#> Max Data Files: 0
#> Max Data Frames: 0
#> ✔ Chat History
#> ✖ Document contents

NOTE: - For most users, this change will not work because accessing GPT 4 via the REST API endpoints is currently restricted to a few developers.

Support for glue

The prompt argument supports glue. This means that you can pass current values of variables, or current output from functions within your current R session. Make sure that such output, or value, is a character that is readable by the LLM.

Here is a simple example of a function that passes the variables currently in your R session that contain “x”:

my_list <- function() {
  return(ls(pattern = "x", envir = globalenv()))
}

The my_list() function is passed to the prompt argument enclosed in braces:

chattr_defaults(prompt = "{ my_list() }")
#> 
#> ── chattr ──────────────────────────────────────────────────────────────────────
#> 
#> ── Defaults for: Default ──
#> 
#> ── Prompt:
#> • {{ my_list() }}
#> 
#> ── Model
#> • Provider: OpenAI - Chat Completions
#> • Path/URL: https://api.openai.com/v1/chat/completions
#> • Model: gpt-4
#> • Label: GPT 4 (OpenAI)
#> 
#> ── Model Arguments:
#> • temperature: 0.01
#> • max_tokens: 1000
#> • stream: TRUE
#> 
#> ── Context:
#> Max Data Files: 0
#> Max Data Frames: 0
#> ✔ Chat History
#> ✖ Document contents

Now we can test it, by setting two variables that start with “x”

x1 <- 1
x2 <- 2

To see what will be sent to the LLM, you can use chattr(preview = TRUE). The two variables will be listed as part of the prompt:

chattr(preview = TRUE)
#> 
#> ── chattr ──────────────────────────────────────────────────────────────────────
#> 
#> ── Preview for: Console
#> • Provider: OpenAI - Chat Completions
#> • Path/URL: https://api.openai.com/v1/chat/completions
#> • Model: gpt-4
#> • Label: GPT 4 (OpenAI)
#> • temperature: 0.01
#> • max_tokens: 1000
#> • stream: TRUE
#> 
#> ── Prompt:
#> role: system
#> content: You are a helpful coding assistant
#> role: user
#> content:
#> * x1
#> * x2
#> [Your future prompt goes here]

We can see how the adding a new variable will modify the prompt with out us having to modify chattr_defaults():

x3 <- 3

chattr(preview = TRUE)
#> 
#> ── chattr ──────────────────────────────────────────────────────────────────────
#> 
#> ── Preview for: Console
#> • Provider: OpenAI - Chat Completions
#> • Path/URL: https://api.openai.com/v1/chat/completions
#> • Model: gpt-4
#> • Label: GPT 4 (OpenAI)
#> • temperature: 0.01
#> • max_tokens: 1000
#> • stream: TRUE
#> 
#> ── Prompt:
#> role: system
#> content: You are a helpful coding assistant
#> role: user
#> content:
#> * x1
#> * x2
#> * x3
#> [Your future prompt goes here]