Document OpenAI Decisions and TypeSafe Jev setup, probability interpretation,
live collection, caching and recovery (#337). The dated October 16 synthetic
pilot confirms compatibility for gpt-6-luna/decisions and
jev-1.13.0/systemone, with differing reversal consistency; it does not
establish probability calibration or educational validity. Offline qualification
extends bulk request integrity, modeling compatibility and privacy regressions.
Default saved runs omit raw responses; in-memory failure objects can still
contain sensitive provider content when serialized by callers.
OpenAI Decisions and TypeSafe Jev support bounded concurrent live collection
through submit_llm_pairs() and provider wrappers (#336). Shared integrity
validation binds every transmission and saved result to its scientific request.
Locked atomic RDS journals preserve full probabilities, valid results and attempt
history; CSV exports can be rebuilt safely. Retry budgets survive restarts,
including at most one automatic reissue of ambiguous interrupted work. Optional
promises/later enable concurrency; filelock is required for saved decision runs.
See ?decision_bulk for controls, recovery guarantees and privacy limitations.
Single-pair comparisons support opt-in backend = "typesafe" and the direct
typesafe_compare_pair_live() helper (#335). The default is versioned
jev-1.13.0; explicit Jev versions and documented moving aliases are supported
without availability guarantees or fallback. TYPESAFE_API_KEY is included in
credential checks. Jev reuses the shared decision prompt, request-to-wire
integrity checks, response parser, and probability-preserving normalization.
TypeSafe overload/rate-limit retries preserve validated bytes; existing
OpenAI Decisions, generative endpoints, and binary modeling are unchanged.
Resumable live bulk execution is available; managed Batch remains unsupported.
Single-pair OpenAI comparisons now support opt-in endpoint = "decisions"
with gpt-6-luna (#334). The frozen decision instructions, selected winner,
both probabilities, independent confidence, usage and provenance are retained.
Scientific request bodies and final serialized bytes are checked before HTTP,
including retries. Unsupported controls fail early; existing generative
endpoints are unchanged. Resumable live bulk Decisions is available; managed
Batch remains unsupported.
Internal decision-model foundations freeze the approved decision_cj_v1
instructions and construct equivalent offline OpenAI Decisions/TypeSafe Jev
requests (#333). Parsers retain both probabilities, the selected winner,
independent confidence, and sample-free request provenance. Strict identity and
completeness checks exclude malformed, refused, or choice/probability-mismatched
decisions from model evidence. Existing generative defaults and binary BT inputs
are preserved; live integration and resumable execution use these contracts.
Require rlang >= 1.3.0 for stable linked-input and runtime hashing, and
optional withr >= 3.0.3 for correct local RNG restoration. glmnet remains
optional without a new minimum version. macOS CI updates its dependencies
through the existing installer without installing recursive optional packages.
Failed verification of linking hashes with recorded pre-1.3.0 rlang provenance
now reports a distinct pairwiseLLM_link_hash_incompatibility error, including
stored/current versions and explicit recovery guidance. New standalone rubric
references record hash-engine provenance. Existing hashes and artifacts are
never migrated; mismatches without an established version incompatibility
remain integrity errors.
Frequentist BT bootstrap refits reuse item contrasts and pair designs within each call (#324). Indexed counts replace repeated aggregation, and alpha information matrices use the equivalent weighted graph Laplacian. Original Firth mean bias reduction, all-pairs alpha pseudo-counts, solver controls, uncertainty checks and public interfaces are preserved. Frozen-source oracles and offline benchmarks cover numerical equivalence and worker scaling.
Direct trueskill_p50 and trueskill_pollitt candidate scoring validates and
aligns the TrueSkill state once per candidate vector (#326). Frozen scalar
references check exact probabilities, pair selection, presentation order,
diagnostics and RNG behavior. An offline benchmark measures scoring, complete
selection and synthetic trajectories; fitting and stopping rules are unchanged.
OpenAI Batch disables implicit prompt caching by default for verified GPT-5.6
and later model IDs (#318). prompt_caching = "implicit" restores provider
caching; recognized earlier models keep their defaults and cannot explicitly
disable caching. Unknown IDs require the explicit opt-in. Validation occurs
before IO, and segmented submissions/retries preserve the policy. Parsed
results now include prompt_cache_write_tokens alongside cached reads from
both endpoints, with NA for missing usage. The advanced batch guide explains
model-specific cache rates and Batch pricing. Live APIs, frozen requests and
study libraries are unchanged; savings depend on observed usage.
Five-arm synthetic qualification (#317) checks matched initialization,
outcome-leakage boundaries, Pollitt selection, evidence budgets and continuation
across the connected-bootstrap boundary. The warm-start guide now executes
all five arms with B defined as mean exposures per item: floor(B * N / 2)
total committed pairs, including bootstrap. The tree benchmark separately
reports unprofiled wall time, fresh-process peak RSS and cumulative allocations.
These are package engineering checks, not estimates of study effects.
An internal frozen predictive spanning-tree builder (#315) ranks allowed edges
using initial TrueSkill probabilities near one third or two thirds. Degree
caps start at two and double only when stalled; exact ties are seeded, recorded
orientations are retained, and diagnostics describe relaxation and exposure.
Construction uses only permitted endpoints and frozen predictions. Public
bootstrap_policy = "predictive_connected" integration (#316) requires a
selectable replay reservoir, coherent predictive TrueSkill uncertainty and
Pollitt subsequent pairing. Existing bootstrap defaults are unchanged.
Adaptive ranking can opt into warm_start_trueskill = "predictive_distribution"
to initialize item-specific TrueSkill uncertainty from saved predictive prior SD
(#314). Model input requires explicit SD; prebuilt priors retain their stored SD.
Versioned mapping and SD provenance survive validated resume without remapping.
Legacy initialization, BTL prior rules, and bootstrap behavior are unchanged.
A new integrated CJ workflow guide connects pair selection, frequentist and Bayesian estimation, SSR and EAP reliability, empirical score recovery, scale dispersion, schedule-aware bootstrap, and held-out predictive evaluation (#306). Seeded offline examples include experimental lapse-model interior and boundary fits. Topic guides and reference help link to the shared conceptual entry point; statistical implementations, defaults, dependencies, and version are unchanged.
fit_bt_model(engine = "lapse") adds an experimental unpenalized frequentist
prototype matching the Bayesian btl_e_b likelihood (#305). Bounded optimization
estimates centered item strengths, positional bias and lapse probability.
Valid epsilon-zero boundary fits retain point estimates and predictions with
explicit nonregular uncertainty status; ordinary joint SEs and covariance are
unavailable. Interior fits retain validated joint uncertainty. Genuine numerical
and identification failures still fail closed. Conventional SSR and simple-BT
bootstrap integration remain unavailable. The unchanged frozen qualification
recovered all 450 cases: 352 interior and 98 boundary fits, with no numerical
or recovery failures. Numerical tolerances and the original evidence are preserved.
Existing defaults, dependencies and package version are unchanged.
bootstrap_bt_model() adds provider-free, schedule-aware parametric BT bias
correction (#304). Fixed schedules retain their pairs; adaptive replicates
rerun canonical selection, state updates and scheduled refits from frozen
initialization. Results include centered corrections, Monte Carlo summaries,
explicit failed-replicate diagnostics and reproducible seeds, with optional
parallel execution and artifact retention. See the new bootstrap guide.
fit_bt_model(engine = "alpha", alpha = ...) adds Hamilton-style alpha-adjusted
Bradley-Terry estimation for adaptive schedules (#303), including explicit
penalty settings, centered covariance/SEs, numerical diagnostics and pairwise
prediction. SEs are model-based conditional on the realized comparison graph;
schedule-aware uncertainty remains separate from these model-based SEs.
Numerical failures retain auditable diagnostics without changing estimators.
Existing engine defaults and optional dependencies are unchanged.
fit_bt_model(engine = "brglm2") adds genuine Firth mean bias reduction for
random/nonadaptive schedules (#307), using optional brglm2. Fits include
centered covariance/SEs, estimator provenance, SSR, and pairwise predict().
Connected separated data are supported. Valid equal-strength fits retain
predictions and uncertainty with explicitly unavailable SSR. Existing engine
defaults and fallback behavior are unchanged.
Frequentist BT fits now expose independently checked scale-separation reliability
(SSR), its variance components, and engine/settings provenance (#302).
scale_separation_reliability() provides the calculation directly, and
fit_bt_model(sirt_eps = ...) makes sirt's epsilon adjustment explicit while
retaining legacy calls. Disconnected comparisons and invalid/nonfinite
reliability inputs now error, including fixed-theta sirt fits with missing SEs.
Explicit engines never fall back; negative SSR remains unmodified.
Hybrid starvation reports now distinguish unused arithmetic pair capacity from
the restrictions encountered in each attempted candidate pool (#298). Use
summarize_adaptive(state, include_starvation = TRUE) for the optional report.
Fixed-budget guidance explains why repeat rules can stop a run early; selection
rules, default summaries and existing log formats are unchanged.
Hybrid pairing no longer stops when exploration misses pairs that are still eligible (#296). After trying every fallback, it uses the usual exploitation rule to choose from the last eligible pool. Existing successful selections, pairing limits and saved-session formats are unchanged.
E2/E3 Gaussian prediction uses deterministic, error-budgeted quadrature refinement to resolve global-tolerance failures on valid saved fits (#294). The prediction target and requested global tolerances are unchanged; old serialized fits remain usable without refitting or changing their hashes.
Sampler draws are now stored as plain numeric matrices in BTL fit contracts, preserving values and item alignment. This fixes standalone linked-reference preparation for real CmdStan fits without relaxing serialization checks or requiring new sampling to canonicalize existing draws (#292).
prepare_linked_rubric_reference() saves a completed standalone Bayesian
ranking as a reusable reference for linked_anchors rubric calibration. This
includes rankings based on pooled historical comparisons. E1, E2, and E3 can
use the same saved reference with their respective inputs (#290).
New standalone fits record the comparisons used in each refit so reference preparation can verify them. Older standalone fits must be refitted from their original comparisons before becoming reusable linked references; their existing same-set uses and adaptive Phase A reference support are unchanged.
fixed_shape_offset (E1),
gaussian_posterior_bridge (E2), or joint_offset (E3). There is no default
until the downstream study applies its frozen selection rule (#273).prepare_link_input(), fit_link() and predict_link() to separate
link estimation from pair selection. Inputs identify hub/spoke samples, compatible
Phase A information, explicit ordered cross-set judgments and fixed shared judge
settings. Each method uses an explicit offset and enforces single-use evidence.engine = "mcmc" supplies a matching optional Stan audit
model, sampler diagnostics and retained serializable draws.start_link_session(), resume_link_session(), save_link_session() and
load_link_session() for exact save/load and append-only continuation. Unchanged
resume reuses the saved result. Multi-spoke sessions preserve separate hub/spoke
fits, and statuses describe the caller's workflow without enabling automatic stopping.theta_link_eap aliases theta_link_mean: posterior averages for E1/E3-MCMC,
MAP locations for E2/E3 Laplace. Unknown source provenance remains missing.Added ensemble_warm_start_algorithms() for equal-weight same-task predictions
with honest aligned outer-CV validation. Full/reduced portable artifacts work
with storage, registries, bundles and BTL/TrueSkill warm starts. Component
disagreement remains diagnostic; cross-task ensemble semantics are unchanged
(#259).
Added optional RBF-SVR warm starts with the fixed epsilon/grid conventions,
split-specific gamma, weighted nested-CV tuning and deterministic 1-SE selection.
Complete format-3 audits and portable numeric support vectors support full/reduced
deployment without e1071; nonlinear coefficient requests fail explicitly
(#259).
Added optional PLS warm-start models using explicit kernel PLS, legal common
component grids, weighted nested-CV tuning and fewer-component 1-SE selection.
Full format-3 audits retain candidate OOF evidence; portable full/reduced
models predict and supply warm priors without pls (#259).
Added explicit writing_features_v2 extraction with 46 source-audited features,
schema-specific hashes/decoding, and pinned readability/missingness behavior.
The default 20-feature v1 schema and Python environment remain unchanged
(#259).
Added reusable task/outcome-bound warm-start CV plans and portable format-3 glmnet models, including full/reduced storage, registries, bundles, and warm priors. Legacy formats 1/2 and frozen v1/glmnet numerical behavior remain supported (#259).
Added sparse adaptive replay reservoirs with one frozen observation per unordered edge. All four within-set pairing strategies respect unused allowed edges and recorded presentation orientation. Reservoir runs use a common seeded spanning-tree bootstrap, validate identity on resume, and distinguish exhaustion from a temporarily unavailable preferred candidate (#257).
MCMC scheduling now respects available CPU allocations through the suggested
parallelly package, required when sampling. Automatic concurrency retains
the two-slot ceiling and core_fraction headroom. Explicit parallel-chain
requests remain supported, with joint chain/thread budget validation and
clear errors for excessive requests. Fits and logs record requested and
effective resource settings without changing total chains or sampling
settings (#255).
Batch polling and result downloads now retry transient HTTP and network
failures consistently across OpenAI, Anthropic, and Gemini, honoring
Retry-After. Multi-batch resume defers exhausted transient retrievals while
surfacing permanent errors immediately. Retrieval retries reuse existing
batch IDs without adding scientific attempts; polling timeouts remain checked
between status requests. Requires httr2 >= 1.1.0 (#251).
OpenAI Batch requests now accept store on both endpoints and
max_output_tokens on Responses, including through the batch wrappers.
Explicit storage values are preserved and omitted controls remain absent.
The new openai_download_batch_errors() helper downloads request failures
separately from successful output for ID-based reconciliation (#249).
Both OpenAI live endpoints now preserve explicit service_tier requests
across model families. "standard" and "default" send "default";
"auto", "flex", and "priority" are forwarded unchanged. Omitted or
NULL tiers leave the field absent, preserving OpenAI's project-configured
auto behavior (#247).
OpenAI live comparisons now validate and forward explicit store = TRUE and
store = FALSE for both Responses and Chat Completions, including row-wise
wrappers (#245).
Gemini Developer API live and batch comparisons now validate and forward
store to control request logging. Omitted or NULL values preserve provider
defaults (and Gemini project settings). These controls do not imply a general
data-retention guarantee.
fit_rubric_calibration(), S3 predict(), and
evaluate_rubric_predictions() for completed Bayesian comparative judgments.
All four variants (btl, btl_e, btl_b, btl_e_b) and completed fixed or
adaptive results share the downstream interface. Fixed live/batch collection
remains provenance only.percentile scoring with type-8 quantiles, preserved ties, and requested
versus achieved proportions. These are norm-referenced, distribution-matched
performance levels; human rubric labels are not fitted.ordinal_linear proportional-odds calibration and explicit
ordinal_monotone calibration with a nondecreasing penalized spline. Ordinal
predictions retain full probabilities, median-category scores by default,
optional modal scores, expected internal level, and extrapolation flags.same_set)
and a reusable Phase A rubric reference (linked_anchors). Linked target
prediction requires completed existing Phase B outputs and reuses the stored
reference transformation after identity and fit-contract checks. Phase B
estimation, selection, probes, and stopping are unchanged.ordinal; monotone fitting and prediction use
optional mgcv (>= 1.9-4), with optional withr for reproducible fitting.
Missing backends give installation guidance without substituting methods.cold, btl_only, trueskill_only, and
both. Omitted mode preserves historical behavior: cold without predictive
input and btl_only with it. Request both explicitly to initialize both models.25 + (25/3) * prior_mean,
with fixed scale 1 and unchanged sigma. Every mode retains the same seeded
shuffled connected bootstrap of N - 1 valid comparisons.random, trueskill_p50, and trueskill_pollitt strategies
through adaptive_config$pairing_strategy; hybrid remains the default.
Direct strategies use a minimum-degree focal item and currently support only
within-set runs. Pollitt-inspired targets use TrueSkill probabilities.global_identified
signal that can affect later hybrid routing. Phase B linking is unchanged.cold or historical btl_only
and hybrid, preserving saved bootstrap and round progress. Phase-A artifact
identity distinguishes generation settings while preserving explicit imports.validate_adaptive_replay() and make_adaptive_judge_replay() for offline
replay of exact directed judgments, with strict reuse protection. Replay users
can set adaptive_config$dup_max_obs_relaxed = 2L; the general hybrid default
retains its conditional third observation.warm_start_coefficients() for inspecting calibrated standardized
elastic-net coefficients from individual models and ensemble components,
preserving the distinction between preprocessing removal and shrinkage to zero.adaptive_rank(), with one-spoke and
multi-spoke hub-and-spoke run modes for placing separately ranked sets on a
shared scale.link_stage_log, and explicit blocker and invalid-judgment reporting for
auditable long-running workflows.backend = "vertex" with
VERTEX_API_KEY.
backend = "vertex" explicitly rather than routing it through Gemini
batch helpers.service_tier behavior for Gemini Developer API
and Vertex AI Gemini API in the package docs, README, and vignettes.build_btl_results_data() to convert conventional
ID1/ID2/better_id outcomes into the canonical input required by
fit_bayes_btl_mcmc().temperature = 1.max_output_tokens limit.temperature and top_p controls to use model/provider
defaults instead of injecting deterministic sampling values. Provider-required
reasoning constraints are still enforced.Introduced an adaptive pairing / adaptive ranking framework designed to reduce unnecessary comparisons through uncertainty-aware pair selection and Bayesian inference.
Added adaptive_rank(), the primary user-facing wrapper that runs the complete adaptive workflow end-to-end, including warm start, adaptive pairing rounds, Bayesian BTL refits, diagnostics, and stopping.
Advanced control is available via:
adaptive_rank_start() — initialize an adaptive run and stateadaptive_rank_run_live() — execute live adaptive comparisonsadaptive_rank_resume() — resume interrupted or long-running runsAdaptive pairing is organized into rounds that balance global scale identification and local refinement using a mixture of anchor, long-range, mid-range, and local comparisons.
The adaptive controller tracks a global identifiability state based on Bayesian diagnostics and agreement between online (TrueSkill) and global (BTL) rankings. Once the global scale is identified:
Long-range comparisons are additionally posterior-gated in later stages, preventing wasted comparisons on pairs that are already decisively ordered.
Late-stage local pairing prioritizes near-tie pairs, with limited, auditable overrides to degree caps when especially informative comparisons are blocked.
Adaptive runs produce fully auditable step-, round-, and refit-level logs, recording candidate generation, fallbacks, gating decisions, quota reallocations, and stopping criteria.
All adaptive workflows use standardized configuration, state, and logging contracts to ensure reproducibility and future extensibility.
fit_bayes_btl_mcmc() enables direct posterior inference from pairwise comparison data, independent of or integrated with adaptive workflows.summarize_items(), summarize_refits()), serving as the statistical backbone for adaptive pairing decisions.gemini-3-flash-preview for live pairwise comparisons.service_tier for applicable live models.
"flex" and "priority" when supported by the selected model.submit_llm_pairs() and backend-specific live functions (OpenAI, Anthropic, Gemini, Together, Ollama) now support parallel execution via parallel = TRUE and workers = n (requires the {future} package).save_path argument to live submission functions. Results are saved to CSV incrementally, allowing interrupted jobs to resume automatically by skipping previously processed pairs.estimate_llm_pairs_cost() to estimate costs in live and batch mode.llm_submit_pairs_multi_batch() and llm_resume_multi_batches() to split large comparison sets across multiple batches and resume polling later.
These helpers support writing per‑batch and combined results, along with an optional jobs registry.submit_llm_pairs() and its backend-specific counterparts now return a list containing two elements: $results (a tibble of successful comparisons) and $failed_pairs (a tibble of inputs that failed). Previous versions returned a single tibble.gpt-5.2-2025-12-11verbose option in fit_bt_model() and summarize_bt_fit()