A bug-fix release; all changes are backward compatible.
llm_hash() no longer depends on the collation locale,
so the same object hashes identically on every machine; hashes recorded
under the C locale are unchanged.{column} reference) now fill every
row; previously rows 2..n were sent with NA content and
rejected by providers.llm_mutate() appends its generated columns again
(instead of moving them to the front), and
.before/.after now work on the embedding,
structured, tag, and row-batched paths.llm_usage() and llm_failures() work on
llm_mutate_structured() and llm_mutate_tags()
results; config-side and log-side request hashes agree after provider
parameter renames.req_builder hook and the request
timeout. Assorted smaller fixes; see the commit log.call_llm_par(.request_hash =),
llm_add_request_hash(), llm_log_active(),
llm_tool_signature(), and llm_uuid().llm_agreement() gains ordinal and interval
Krippendorff’s alpha (metric =); the nominal default is
unchanged.anes_2024_personas: 100
participant profiles derived from the ANES 2024 public release, the
shared persona dataset of the LLMR family.llm_persona_split(),
llm_persona_overview(),
llm_persona_dictionary(),
llm_persona_demographic_fields(),
llm_validate_persona_frame().transcript_as_messages() and
ensure_alternating_messages(): build a provider-safe,
role-flipped message array from a multi-speaker transcript (own turns
become assistant, others become labeled user
turns)..batch_size ->
.rows_per_prompt, and kin); the word “batch” is now
reserved for the asynchronous provider Batch API.llm_log_read(): parse a JSONL audit log into records
plus a per-record manifest with record and request hashes.llm_request_hash() canonicalizes message shape and keys
on all generation parameters, so a logged call and its config hash
identically.reset() generic.llm_response_record() (one-row
response contract; a failed call is a row, never a dropped call) and
llm_request_hash() (stable identity for a call).diagnostics() and
report(), implemented by the LLMR method packages.llm_batch_submit(), llm_batch_status(),
llm_batch_fetch(), llm_batch_cancel() (OpenAI,
Groq, Anthropic, Gemini).llm_log_enable()),
a draft methods paragraph (llm_methods_text()), and
replication with agreement statistics (llm_replicate(),
llm_agreement()).llm_tool(),
call_llm_tools()) and streaming
(call_llm_stream()).llm_logprobs()), canonical
seed, model_version and thinking
on every response, prompt caching, and cost estimates from a
user-supplied price_table.llm_preview(): render exactly what a call would send,
and flag problems, without any API call.llm_usage() and llm_failures(): outcome
counts, token totals, and per-row failure listings for any result
frame.NA, not
0; a bare environment-variable name passed as
api_key is always treated as a reference.llm_par_resume() re-runs only the failed rows; JSON
array recovery and embedding-dimension fixes..tags on
llm_mutate(), plus llm_mutate_tags(),
llm_fn_tags(), and the tag parsers.llm_mutate() shorthand
(answer = "{question}") and
.structured = TRUE.call_llm() returns an llmr_response
object; as.character(x) extracts the text.llm_mutate().