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

## -----------------------------------------------------------------------------
# library(LLMR)
# library(dplyr)
# cfg_openai <- llm_config("openai",   "gpt-5-nano")
# cfg_cld    <- llm_config("anthropic","claude-sonnet-4-20250514", max_tokens = 512)
# cfg_gem    <- llm_config("groq",     "openai/gpt-oss-20b")

## -----------------------------------------------------------------------------
# experiments <- build_factorial_experiments(
#   configs       = list(cfg_openai, cfg_cld, cfg_gem),
#   user_prompts  = c("Summarize in one sentence: The Apollo program.",
#                     "List two benefits of green tea."),
#   system_prompts = c("Be concise.")
# )
# experiments

## -----------------------------------------------------------------------------
# setup_llm_parallel(workers = 10)
# res_unstructured <- call_llm_par(experiments, progress = TRUE)
# reset_llm_parallel()
# res_unstructured |>
#   select(provider, model, user_prompt_label, response_text, finish_reason) |>
#   head()

## -----------------------------------------------------------------------------
# schema <- list(
#   type = "object",
#   properties = list(
#     answer = list(type="string"),
#     keywords = list(type="array", items = list(type="string"))
#   ),
#   required = list("answer","keywords"),
#   additionalProperties = FALSE
# )
# 
# experiments2 <- experiments
# experiments2$config <- lapply(experiments2$config, enable_structured_output, schema = schema)
# 
# setup_llm_parallel(workers = 10)
# res_structured <- call_llm_par_structured(experiments2 , .fields = c("answer","keywords") )
# reset_llm_parallel()
# 
# res_structured |>
#   select(provider, model, user_prompt_label, structured_ok, answer) |>
#   head()
# 
# 

