Changelog
Source:NEWS.md
pairwiseLLM 1.5.2
Warm-start prediction
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_v2extraction 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).
Documentation
- Added a complete offline v2 workflow using fabricated texts and outcomes, shared validation splits, three algorithms, and BTL/TrueSkill initialization. Updated warm-start and adaptive-pairing guidance for non-technical readers, distinguishing cross-task and same-task ensembles and user-chosen prior SD.
- Corrected model, reduction, and Python audit documentation; synchronized current package version references. R >= 4.4 and optional fitting dependencies are unchanged.
pairwiseLLM 1.5.1
Improvements
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
parallellypackage, required when sampling. Automatic concurrency retains the two-slot ceiling andcore_fractionheadroom. 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).
Documentation
- Reworked the README and Getting Started around a runnable offline example, score interpretation, and a sequential path to collecting new comparisons.
- Added practical reading guidance, prerequisites, output explanations, and recovery advice across the vignettes, while retaining formal statistical design content. Corrected pair-count, example-order, and CmdStan setup guidance.
- Organized pkgdown navigation and function reference by user task, separated practical guides from statistical design articles, and clarified introductory function help. Existing article URLs and package interfaces are preserved.
Bug fixes
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
storeon both endpoints andmax_output_tokenson Responses, including through the batch wrappers. Explicit storage values are preserved and omitted controls remain absent. The newopenai_download_batch_errors()helper downloads request failures separately from successful output for ID-based reconciliation (#249).Both OpenAI live endpoints now preserve explicit
service_tierrequests across model families."standard"and"default"send"default";"auto","flex", and"priority"are forwarded unchanged. Omitted orNULLtiers leave the field absent, preserving OpenAI’s project-configured auto behavior (#247).OpenAI live comparisons now validate and forward explicit
store = TRUEandstore = FALSEfor both Responses and Chat Completions, including row-wise wrappers (#245).Gemini Developer API live and batch comparisons now validate and forward
storeto control request logging. Omitted orNULLvalues preserve provider defaults (and Gemini project settings). These controls do not imply a general data-retention guarantee.
pairwiseLLM 1.5.0
Rubric calibration
- Added
fit_rubric_calibration(), S3predict(), andevaluate_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. - Added
percentilescoring 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. - Added default
ordinal_linearproportional-odds calibration and explicitordinal_monotonecalibration with a nondecreasing penalized spline. Ordinal predictions retain full probabilities, median-category scores by default, optional modal scores, expected internal level, and extrapolation flags. - Both ordinal methods support a labeled subset within one CJ fit (
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. - Added normalized ranked probability score, log loss, cumulative calibration summaries, hard-score metrics, and optional training-model diagnostics. Internal label-only cross-validation retains completed CJ evidence and fits scaling and calibration from training labels alone. No automatic method selection is provided.
- Each analytic trait requires its own CJ analysis and calibration. Missing intended calibration categories fail explicitly; orientation is never silently reversed. All methods condition on accepted CJ point locations: CJ uncertainty is retained where available but is not propagated. Joint CJ/rubric likelihood estimation is not implemented.
Requirements and documentation
- Raised the minimum supported R version to 4.4.
- Linear fitting uses optional
ordinal; monotone fitting and prediction use optionalmgcv (>= 1.9-4), with optionalwithrfor reproducible fitting. Missing backends give installation guidance without substituting methods. - Added a practical rubric-calibration guide and integrated reference help, README, and website navigation, including same-set validation and historical reference reuse through Phase B.
pairwiseLLM 1.4.0
Adaptive ranking
- Added predictive warm-start modes
cold,btl_only,trueskill_only, andboth. Omitted mode preserves historical behavior:coldwithout predictive input andbtl_onlywith it. Requestbothexplicitly to initialize both models. - TrueSkill-warm modes initialize item locations as
25 + (25/3) * prior_mean, with fixed scale 1 and unchanged sigma. Every mode retains the same seeded shuffled connected bootstrap ofN - 1valid comparisons. - Added post-bootstrap
random,trueskill_p50, andtrueskill_pollittstrategies throughadaptive_config$pairing_strategy;hybridremains the default. Direct strategies use a minimum-degree focal item and currently support only within-set runs. Pollitt-inspired targets use TrueSkill probabilities. - Within-set and Phase-A hybrid rolling anchors and the long-link probability gate now use TrueSkill throughout. Bayesian BTL still supplies item estimates, uncertainty, reliability, diagnostics, stopping, and the
global_identifiedsignal that can affect later hybrid routing. Phase B linking is unchanged. - Sessions persist effective mode, strategy, predictive provenance, and current TrueSkill state. Legacy sessions migrate to
coldor historicalbtl_onlyandhybrid, preserving saved bootstrap and round progress. Phase-A artifact identity distinguishes generation settings while preserving explicit imports. - Added
validate_adaptive_replay()andmake_adaptive_judge_replay()for offline replay of exact directed judgments, with strict reuse protection. Replay users can setadaptive_config$dup_max_obs_relaxed = 2L; the general hybrid default retains its conditional third observation.
Fixes and documentation
- Within-set continuation retains saved BTL settings when no override is supplied; round recovery uses the exact saved round field.
- Updated adaptive help, guides, design documentation, and replay examples to distinguish predictive initialization, connected bootstrap, and pairing strategy.
- Strengthened adaptive-session validation and resume handling, including preservation of named Phase-A evidence hashes, legacy pair-resume behavior, and improved detection of Ollama results.
- Made stratified cost estimation robust to singleton strata and expanded boundary validation for adaptive state, warm-start models, provider responses, batch payloads, optional dependencies, and sampler interfaces.
- Simplified linking internals around the anchored-joint refit path by removing obsolete transform-refit Stan support and unreachable legacy Phase-B branches, while preserving legacy state normalization, audit fields, persistence compatibility, and current linking behavior.
- Added regression coverage for fresh-process resume, refit diagnostics, selection and information updates, state reporting, schema validation, and runtime boundary behavior.
pairwiseLLM 1.3.2
New Features
Adaptive pairing warm start
- Added warm start model development workflow: task-specific
elastic-net training with nested cross-validation and out-of-fold calibration, and portable model storage. - Added user model registration, equal-weight task-model ensembles, and centered predictive priors for standalone and adaptive Bayesian BTL estimation. Adaptive sessions retain numeric priors for resume without the original model or Python.
- Added the adaptive warm start help family and a practical workflow guide. Python is optional for extraction; precomputed prediction needs neither Python nor glmnet. Real bundled predictors remain deferred; no default model ships.
- Added
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.
pairwiseLLM 1.3.1
CRAN release: 2026-09-07
New Features
Adaptive linking
- Added cross-set adaptive linking through
adaptive_rank(), with one-spoke and multi-spoke hub-and-spoke run modes for placing separately ranked sets on a shared scale. - Phase A can run canonical within-set ranking, import saved Phase A artifacts, or combine imported and newly run sets. Phase B uses anchored-joint estimation with hard-locked hub parameters, globally shared judge parameters, and concurrent spoke processing.
- Added D-optimal cross-set candidate selection, spoke-aware comparison budgets, and fixed per-refit held-out probes with explicit coverage, calibration, and stopping gates.
- Added persistent Phase A manifests and linking sessions, resume support,
link_stage_log, and explicit blocker and invalid-judgment reporting for auditable long-running workflows.
Model support & live API improvements
- Added a separate Vertex AI Gemini live backend via
backend = "vertex"withVERTEX_API_KEY.- Vertex remains live-only in this series; generic batch wrappers reject
backend = "vertex"explicitly rather than routing it through Gemini batch helpers.
- Vertex remains live-only in this series; generic batch wrappers reject
- Clarified provider-specific
service_tierbehavior for Gemini Developer API and Vertex AI Gemini API in the package docs, README, and vignettes. - Added request-shape handling for the OpenAI GPT-5.x and GPT-5.6 model families.
Bayesian BTL usability
- Added exported
build_btl_results_data()to convert conventionalID1/ID2/better_idoutcomes into the canonical input required byfit_bayes_btl_mcmc(). - Standalone Bayesian BTL fits now report reliability and sampler diagnostics through the same result and log surfaces used by adaptive workflows.
Improvements
- Reduced adaptive-linking refit, candidate-generation, logging, and checkpoint overhead for large runs, including bounded candidate construction and analytic anchored-joint derivatives.
- Hardened adaptive-linking resume behavior, Phase A stopping scope, spoke routing, probe scheduling, and Phase B pair accounting.
Documentation
- Updated the backend support matrix to distinguish Gemini Developer API from Vertex AI Gemini API and to document the live-only Vertex scope.
- Replaced the undated supported-model list with a dated, machine-readable compatibility registry that separates backend implementation, live/batch testing, and current provider availability.
- Corrected stale provider identifiers, API-key and CmdStan setup guidance, OpenAI Flex wording, cost-estimator summaries, and broken public examples.
Bug fixes
- Fixed Anthropic extended-thinking live requests when users explicitly set the required
temperature = 1. - OpenAI Responses live requests now forward and enforce an explicitly supplied
max_output_tokenslimit. - Changed omitted
temperatureandtop_pcontrols to use model/provider defaults instead of injecting deterministic sampling values. Provider-required reasoning constraints are still enforced. - Provider smoke runs now exit unsuccessfully when a selected API key is absent, unless missing-key skips were explicitly allowed.
pairwiseLLM 1.3.0
New Features
Adaptive pairing & ranking framework
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 state -
adaptive_rank_run_live()— execute live adaptive comparisons -
adaptive_rank_resume()— resume interrupted or long-running runs
These functions are intended for custom orchestration and fault-tolerant execution.
-
Adaptive 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 automatically tapered,
- comparison budget is reallocated toward local and boundary-refining pairs,
- exploration rates are reduced to focus on decision-relevant uncertainty.
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.
Bayesian Bradley–Terry–Luce (BTL) modeling
- Added a fully Bayesian Bradley–Terry–Luce (BTL) model implemented via CmdStan, providing posterior uncertainty estimates for item skill parameters.
- New entrypoint
fit_bayes_btl_mcmc()enables direct posterior inference from pairwise comparison data, independent of or integrated with adaptive workflows. - Supports multiple model variants (including error and positional bias extensions) and optional refitting on increasing subsets of comparisons.
- Bayesian BTL outputs integrate seamlessly with adaptive ranking utilities (
summarize_items(),summarize_refits()), serving as the statistical backbone for adaptive pairing decisions.
Model support & live API improvements
- Added support for the Gemini Flash model
gemini-3-flash-previewfor live pairwise comparisons. - Added support for OpenAI service tiers / priority routing via
service_tierfor applicable live models.- Enables tiers such as
"flex"and"priority"when supported by the selected model. - Integrated into the live submission path without requiring changes to calling code.
- Enables tiers such as
pairwiseLLM 1.2.0
New Features
- Parallel Processing:
-
submit_llm_pairs()and backend-specific live functions (OpenAI, Anthropic, Gemini, Together, Ollama) now support parallel execution viaparallel = TRUEandworkers = n(requires the future package).
-
- Incremental Saving & Resume:
- Added
save_pathargument to live submission functions. Results are saved to CSV incrementally, allowing interrupted jobs to resume automatically by skipping previously processed pairs.
- Added
- Robust Error Handling:
- Failed API calls no longer stop the entire process. Failures are captured and returned separately, allowing for easier inspection and re-submission.
- Added
estimate_llm_pairs_cost()to estimate costs in live and batch mode. - Introduced
llm_submit_pairs_multi_batch()andllm_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.
Bug fixes
- The prompt format for anthropic batch comparisons now match the anthropic live format.
- Reverse consistency functions can now handle duplicate pairs.
Breaking Changes
-
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.
pairwiseLLM 1.1.0
CRAN release: 2025-12-22
Models
- Added GPT-5.2
- Ensured models can be called with date format, e.g.
gpt-5.2-2025-12-11 - Default temperature setting is set to 0 for non-reasoning models, provider default for reasoning models (typically 1)
Documentation
- Changed pkgdown site layout
- Added codemeta.json
- Added repo logo
- Updated function examples
- Add references to Description
Miscellaneous
- No longer set global variables, now done in individual functions
- Added
verboseoption infit_bt_model()andsummarize_bt_fit() - Moved null coalescing helper to separate R file
- Changed validation of API keys in multiple functions