## -----------------------------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE, comment = "#>",
  eval = identical(tolower(Sys.getenv("LLMR_RUN_VIGNETTES", "false")), "true")
)

## ----setup--------------------------------------------------------------------
# library(LLMR)
# cfg <- llm_config("groq", "openai/gpt-oss-20b", temperature = 0, seed = 110)

## ----audit--------------------------------------------------------------------
# log_path <- tempfile(fileext = ".jsonl")
# llm_log_enable(log_path)
# 
# r <- call_llm(cfg, "In one word, the capital of Senegal?")
# 
# llm_log_disable()
# jsonlite::stream_in(file(log_path), verbose = FALSE)[
#   , c("provider", "model", "model_version", "finish_reason", "status")]

## ----replicate----------------------------------------------------------------
# reviews <- tibble::tibble(text = c(
#   "The course changed how I think.",
#   "Lectures were fine, assignments tedious.",
#   "A complete waste of an afternoon."
# ))
# 
# cfg_warm <- llm_config("groq", "openai/gpt-oss-20b", temperature = 1)
# 
# reps <- llm_replicate(
#   reviews, sentiment,
#   prompt  = "Sentiment of '{text}'. Answer with exactly one word: positive, negative, or neutral.",
#   .config = cfg_warm, .times = 5
# )
# 
# ag <- llm_agreement(reps, prefix = "sentiment")
# ag
# ag$by_row

## ----methods------------------------------------------------------------------
# res <- call_llm_par(
#   build_factorial_experiments(
#     configs = cfg,
#     user_prompts = c("Classify: 'great work'", "Classify: 'do better'")
#   )
# )
# cat(report(res, task = "to classify short feedback messages"))

## ----usage--------------------------------------------------------------------
# llm_usage(res)
# 
# my_prices <- data.frame(
#   model  = "openai/gpt-oss-20b",
#   input  = 0.10,   # $ per million input tokens; check your provider's page
#   output = 0.50,
#   cached = 0.05
# )
# llm_usage(res, price_table = my_prices)$cost_estimate

## ----batch, eval = FALSE------------------------------------------------------
# job <- llm_batch_submit(
#   cfg,
#   c("Classify: 'superb'", "Classify: 'awful'", "Classify: 'fine, I guess'"),
#   state_path = "sentiment_batch.rds"
# )
# llm_batch_status(job)
# 
# # hours later, in a fresh session:
# res_batch <- llm_batch_fetch("sentiment_batch.rds")
# llm_usage(res_batch)

