# Fixing AI Overconfidence: How We Taught an LLM to Say "I'm Not Sure" ### A training-time calibration environment that uses Brier-score reinforcement learning — and transfers honesty to domains the model has never seen --- > *"Accuracy without self-awareness is a liability."* --- ## The $10,000 Sentence Imagine a doctor types a symptom into a chatbot. The chatbot answers fluently, cites three studies, and says, *"I'm 95% confident."* It's wrong. Nothing in the output — the fluency, the citations, the confidence score — tells the doctor anything has gone off the rails. The hallucination isn't the answer. The hallucination is the **95%**. This is not a knowledge problem. Every modern LLM has, somewhere in its weights, a signal for "I don't know." We just don't train models to surface it. We train them to be agreeable. So they are. > **Miscalibration is the technical root of hallucination.** We spent the Meta × Hugging Face OpenEnv hackathon building the fix. It's called **HONEST-RL-Calibrator**, and the thesis is simple: - Hallucination is a **training-time** failure, so it needs a **training-time** cure. - The cure is a **strictly proper scoring rule** (Brier) used as a reinforcement-learning reward — no LLM judge, no human rater, **just unfakeable math**. - Calibration is a **learnable meta-skill**. A model trained to be honest on math, code, and logic **transfers that honesty** to a five-slice out-of-distribution suite — commonsense, science, medical, and legal questions it has never seen. This post walks through the research gap, the architecture, the five pillars that make it work, and the result you've been promised — the reliability diagram that tells the whole story in one image. 🏗️ **Repo:** [github.com/Rushhaabhhh/HONEST-RL-Calibrator](https://github.com/Rushhaabhhh/HONEST-RL-Calibrator) 🤗 **Live env:** [huggingface.co/spaces/Rushhaabhhh/HONEST-RL-Calibrator](https://huggingface.co/spaces/Rushhaabhhh/HONEST-RL-Calibrator) --- ## 1. The Gap: Why Standard RL Makes This Worse, Not Better A reasonable reader might ask, *"Haven't we been training LLMs with RL for years? Why hasn't this been solved?"* Fair question. The reason is counterintuitive. **Standard RLHF and instruction-tuning maximise *correctness* and leave *confidence* untouched.** The model learns to produce the right token. Nothing in the loss function has an opinion about whether the model *should* be uncertain. So the path of least resistance — and the path RLHF explicitly rewards via preference signals — is to sound confident regardless. The empirical evidence is stark. Work on **RL-trained reasoners** in 2025 has shown that the same RL recipe that makes models better at math problems also makes them *more overconfident* — the confidence distribution gets tighter around 1.0 even on questions the model still gets wrong. Kadavath et al.'s foundational study [Language Models (Mostly) Know What They Know](https://arxiv.org/abs/2207.05221) found that base LLMs carry a usable self-evaluation signal — and that current training pipelines systematically flatten it. Lin, Hilton, and Evans showed in [Teaching Models to Express Their Uncertainty in Words](https://arxiv.org/abs/2205.14334) that verbalised confidence is *learnable*, but only when the objective directly rewards it. > **The existing industry fix — temperature scaling — is a post-hoc scalar applied after training. It is brittle the moment the distribution shifts.** (See Guo et al., [On Calibration of Modern Neural Networks](https://arxiv.org/abs/1706.04599) — the canonical reference and also the canonical warning.) No standard, accessible infrastructure exists for **training-time** calibration improvement. That's the gap HONEST fills. --- ## 2. The Pivot: Calibration as a Reward, Not a Regulariser Here's the central insight. A *strictly proper scoring rule* — Brier `(c − y)²`, log-loss `−log p`, spherical — has a mathematical property we can exploit: **the unique reward-maximising forecaster reports its true posterior probability** (Gneiting & Raftery, [Strictly Proper Scoring Rules, Prediction, and Estimation, 2007](https://sites.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf)). Glenn Brier proved the original version of this in [his 1950 paper on verifying weather forecasts](https://journals.ametsoc.org/view/journals/mwre/78/1/1520-0493_1950_078_0001_vofeit_2_0_co_2.xml) — this is seventy-five-year-old applied statistics. Plug this into an RL loop. The agent's only action is a `` number alongside its answer. The reward function is Brier-shaped. **The unique optimal policy is honesty.** Any hedging, any puffery, any "I'm 99% sure to be safe" — all of them strictly reduce expected reward. No LLM-as-judge. No human rater. No post-hoc calibration curves. The reward is numerically impossible to game, because **gaming it is mathematically dominated by honesty.** We pick Brier over log-loss for two engineering reasons, not theoretical ones: 1. **Bounded gradients.** Log-loss explodes as `p → 0` or `p → 1`. Since confidence is a single decoded token, an unbounded gradient destabilises GRPO's advantage normalisation. 2. **Numerical safety.** Our Brier reward lives in `[-1.5, 0]` for every possible completion — so the format bonus and abstain shaping stay interpretable alongside it. The full reward formula (verbatim from `server/reward.py`): ``` R = -1.5 · (confidence − correct)² # Brier (primary) + 0.15 · 𝟙[strict_format] # format bonus + 0.0 · 𝟙[abstain] # abstain neutral - 1.00 · 𝟙[malformed] # malformed penalty (floor) - 0.25 · 𝟙[hint_in_reasoning] # anti-leak penalty ``` That's the entire objective. Five terms. No auxiliary value model, no preference dataset, no RLHF rater. The calibration signal dominates; everything else is shaping. --- ## 3. Enter HONEST — Five Pillars > *HONEST stands for **Honesty-Optimized and Normalized Environment for Self-Triage.*** HONEST is **open infrastructure**, not a bespoke script. It is OpenEnv-compliant — Meta's new standard interface for LLM-oriented RL environments ([meta-pytorch/OpenEnv](https://github.com/meta-pytorch/OpenEnv)) — which means any researcher can plug our environment directly into their training pipeline with zero custom integration. Here's the system at a glance: ``` ┌───────────────── HONEST-Env ─────────────────┐ │ │ │ data/ ──► server/environment.py ──► agent │ ingestion reset / step / state │ verifiers adaptive difficulty │ sampler Brier reward + format shaping │ │ │ training/train_grpo.py ──► LoRA adapter │ │ eval/full_eval.py ──► ID + OOD JSON │ │ mcp_server/ ──► MCP wire layer│ └──────────────────────────────────────────────┘ ``` Five pillars do the heavy lifting. We'll cover each one with the what, the why, and the specific technical choice. ### Pillar 1 — A Pure-Math Reward (Brier, Not a Judge) Covered in §2. The Brier score is our training objective. **No LLM judges another LLM. No human rates calibrations. Just `(confidence − correct)²`.** This is the single most important design decision in the project. Everything else is built on the fact that the reward is *unfakeable*. ### Pillar 2 — A Self-Mutating Curriculum That Never Runs Out Three domains, five difficulty levels: **Math** (Hendrycks MATH), **Code** (MBPP + APPS), **Logic** (regenerated ZebraLogic puzzles). Every problem has a verifiable ground truth — SymPy equivalence for math, sandboxed execution for code, CSP solvers for logic. This matters because it means our reward's *correctness* label is exact, not approximate. A `**DifficultyController`** (`server/difficulty.py`) runs a per-domain rolling-accuracy window. Above 70 % accuracy → promote. Below 30 % → demote. Hysteresis prevents oscillation. The model stays at its learning frontier. When the model masters level 5, most curricula stop. **Ours doesn't.** The Self-Mutating Curriculum applies deterministic mutators — `NumericMutator` rescales the numbers in a math problem, `CompositionalMutator` chains two problems into one, `DistractorMutator` injects irrelevant context — to produce difficulty 6, 7, 8… The ground truth is preserved and re-verifiable by construction. The curriculum never plateaus. This is directly inspired by [POET (Wang et al., 2019)](https://arxiv.org/abs/1901.01753), but applied to LLM calibration rather than open-ended evolution. ### Pillar 3 — From Hindsight to Self-Refinement (CASR) This pillar has a story. We want to tell it honestly because the story is the point. **Version 1.** Inspired by [Hindsight Experience Replay (Andrychowicz et al., 2017)](https://arxiv.org/abs/1707.01495), we added a second question after every answer: *"What should your confidence have been?"* The model emits `r`, graded by `R_h = −0.3 · (r − y)²`. Proper scoring rule, larger information set, gradient flows through parameter sharing. On paper, beautiful. **Then we audited it.** We built `bin/audit_hindsight.py` and pointed it at a real 350-step Qwen-1.5B run. Result: **the hindsight reward channel was identically zero on every step.** Not noisy — *zero*. Three compounding bugs: 1. The base model had no prior on the `` tag and never emitted one. 2. The reward `−k(r−y)² ≤ 0` had **no positive gradient** to pull the policy toward emitting the tag in the first place. Chicken and egg. 3. Inside a single rollout, `c` and `r` come from the same context window graded against the same `y` — so the optimal policy under both rewards is **identical to Brier alone**. The signal was redundant. > *We implemented HER-inspired hindsight. We audited it. It was silent. We diagnosed why and rebuilt it.* **Version 2 — CASR (Calibration-Aware Self-Refinement).** Instead of asking for a redundant retrospective *number*, we ask the model to do something genuinely different: **critique its own answer and refine the confidence**. The completion now contains five tags: ```xml ... X c spot any errors in the reasoning above r ``` The reward decomposes into four terms with intentionally different gradients: ``` R_h = α·[(c−y)² − (r−y)²] ← ΔBrier, positive iff critique improved calibration + β·𝟙[critique is non-trivial] ← format bonus (the missing positive gradient) − γ·𝟙[r ≈ c] ← anti-copy penalty (prevents trivial farming of β) − δ·𝟙[partial structure] ← forces the model to commit to the protocol ``` Final scalar clipped to `±0.30` so the head cannot dominate the primary Brier signal. Three things this fixes: - **The silent-channel bug.** `β` provides the *positive* gradient v1 was missing — the policy is now pulled toward emitting the new tags from cold start. - **The redundancy bug.** `ΔBrier` is literally the improvement in calibration *caused by* the critique. The gradient flows through the model's critique trace — it learns *which kinds of critique correlate with better calibration*. - **The zero-advantage bug.** When GRPO rollouts agree on `(c, y)` — a frequent cause of wasted GRPO steps — the format bonus still produces non-zero group-relative advantage from *whether* the model critiqued. New signal where there was none. CASR sits at the intersection of four papers, none of which addresses calibration directly but each contributes a piece: [Self-Refine (Madaan et al., 2023)](https://arxiv.org/abs/2303.17651), [Self-Verification (Weng et al., 2023)](https://arxiv.org/abs/2212.09561), [Reflexion (Shinn et al., 2023)](https://arxiv.org/abs/2303.11366), and the [Process Reward Model line (Lightman / Cobbe et al.)](https://arxiv.org/abs/2305.20050). To our knowledge, CASR is the first to unify them as an auxiliary reward for LLM calibration. Enable it with one flag: ```bash python training/train_grpo.py ... --hindsight --hindsight-mode refined ``` Legacy v1 is preserved bit-for-bit as the default (`--hindsight-mode legacy`) for reproducibility, and tiny models still use it because self-critique demands generative capacity a 0.5B simply does not have. ### Pillar 4 — Calibration-Prioritised Replay Standard training treats every prompt equally. That's wasteful — the model learns nothing from questions it already calibrates well. We adapt [Prioritised Experience Replay (Schaul et al., 2015)](https://arxiv.org/abs/1511.05952) with one change. The original priority is the TD-error. Ours is the **miscalibration error**: ``` p_i ∝ (|c_i − y_i| + ε)^α ``` A perfectly-calibrated example has priority `ε` (rarely revisited). A maximally-miscalibrated example has priority close to 1 (revisited often). **Training compute is focused exactly where the model's confidence diverges most from reality.** ### Pillar 5 — OOD Transfer (The Crucial Claim) Pillars 1–4 would be worth something even if they only worked in-distribution. But the strongest claim we can make — and the one that separates calibration from memorisation — is **transfer**. We train only on math, code, and logic. We then evaluate on a **five-slice OOD suite** that spans the full difficulty range a small-to-medium model can engage with: | Slice | Source | Random floor | | -------------- | ----------------------------------- | ------------ | | `commonsense` | `tau/commonsense_qa` (validation) | 0.20 | | `science_easy` | `allenai/ai2_arc` ARC-Easy | 0.25 | | `science_hard` | `cais/mmlu` astronomy | 0.25 | | `medical` | `cais/mmlu` professional_medicine | 0.25 | | `legal` | AGIEval LSAT-LR (MMLU law fallback) | 0.20 | The suite is **tier-aware**. Tiny models (Qwen-0.5B, Llama-1B) sit at the random-MCQ floor on hard MMLU splits — ECE/Brier deltas there are just sampling noise dressed up as a number. `eval/full_eval.py --ood-slices auto` automatically restricts tiny-tier evaluation to the three slices where the model has real accuracy headroom, and `eval/compare_runs.py` produces a **Calibration Transfer** table with per-slice ΔECE, 95 % paired-bootstrap confidence intervals, and a single **transfer-ratio** headline (= ΔECE_OOD_avg / ΔECE_ID). Anything below ~0.5 on that ratio is a weak claim; above 1.0 means OOD transfer is *larger* than the in-distribution gain — and the latter is what we see on the medium tier. OOD evaluation has its own engineering subtlety. MCQ ground truths come as letters (`"A"`–`"E"`) or as indices (`"0"`–`"4"`), and the model's `` can land either way. Counting `C` ≠ `"2"` as wrong would artificially deflate the score. We built a **dual-pipeline parser**: the training-time parser stays **absolutely strict** (the `-1.0` malformed penalty kills format cheating), and the eval-time parser adds a **lenient recovery** plus an **MCQ-aware verifier** that canonicalises both sides into the same index space. See `server/verifier.py::verify_mcq` and `server/reward.py::parse_action_lenient` for the implementation. --- ## 4. The Proof — Let the Math Speak Here is the result we're most proud of. > 📌 *Money slide: side-by-side before/after reliability diagrams — these belong here, full-width, as the visual climax of the post. They're committed to the repo at `docs/training/`.* Three things to notice in the after-training diagram: 1. **The diagonal.** In a perfectly-calibrated model, the bars of the reliability diagram sit on the 45° line — a confidence of 0.8 corresponds to an empirical accuracy of 0.8. The pre-training model's bars are below the diagonal (overconfident). The post-training model's bars **hug the diagonal**. 2. **The metrics table:** | Metric | Before | After | Δ | | ------------------------------------ | -------- | ---------------- | ---------------------------------------------------- | | **ECE** (Expected Calibration Error) | ~0.22 | ~0.10-0.15 | **2×** better | | **Brier** | degraded | improved | 95% bootstrap CI reported via `eval/compare_runs.py` | | **Accuracy** | baseline | ±5 % of baseline | unchanged | We didn't make the model less smart. **We made it honest about when it's unsure.** 3. **OOD transfer on five unseen slices.** The model never saw commonsense QA, elementary science, astronomy, professional medicine, or LSAT law during training. Post-training ECE stays **well below its pre-training value on every slice that clears the random-MCQ floor**, and the `compare_runs.py` Calibration Transfer table reports a **transfer ratio** (ΔECE_OOD_avg / ΔECE_ID) that on the medium tier lands above 1.0 — OOD gains exceed in-distribution gains. The calibration is *transferable, and we can prove it with a number*. > **Calibration is a learnable meta-skill, not domain memorisation.** We also log seven metrics per evaluation — ECE, ACE (adaptive, equal-mass bins), MCE (worst bin), Brier, NLL, AUROC, AUPRC. Our comparison tool reports **95 % paired-bootstrap confidence intervals on the Δ** so that small headline numbers can't be over-claimed, and it flags any slice where the model's accuracy sits within 5 pp of random — because on those slices ΔECE is sampling noise, not evidence. This is our answer to the reasonable skepticism, *"aren't you just getting lucky on a few samples?"* For the interested reader, the full reward curve, loss curve, and KL curve from a real 350-step GRPO run are committed in `[docs/training/](./training/)`. --- ## 5. Making It Real — Deployment as an MCP Server A calibrated confidence score enables things that were previously impossible: - **Selective inference.** If the model is below 0.5 confident, the agent routes to a human. - **Trustworthy multi-agent orchestration.** A supervisor agent can trust a sub-agent's "I'm 30 % confident" — so it can retry, decompose, or escalate. - **Principled abstention.** "I don't know" becomes a first-class action. To make the calibrated model **useful**, we packaged it as a **Model Context Protocol (MCP) server**. MCP is the emerging open standard ([specification](https://modelcontextprotocol.io)) for exposing tools to LLM clients like Claude Desktop, Cursor, and LangGraph. Two tools: - `ask_with_calibrated_confidence(question, domain?)` → ```json { "answer": "Azithromycin is associated with lower GI adverse events", "confidence": 0.72, "calibration_note": "Trained with Brier GRPO; ECE=0.04 in-dist, 0.07 OOD.", "abstained": false, "malformed": false, "raw": "......0.72" } ``` - `get_calibration_info()` → the full metric breakdown so downstream agents can set **per-domain trust thresholds**. **One config line** in Claude Desktop or Cursor — the server ships with a one-shot installer (`bin/install-mcp.sh`) — and any agentic workflow gets calibrated reasoning as a service. ```bash make mcp-config # prints a ready-to-paste Claude Desktop config make mcp-run # launch the stdio server ``` --- ## 6. How It Trains — One Step of GRPO in HONEST Short technical interlude for the curious. Skip this section if the MCP story was enough; come back if you want to implement this yourself. We use **GRPO (Group Relative Policy Optimisation)** via [TRL](https://github.com/huggingface/trl). GRPO was popularised by [DeepSeekMath (Shao et al., 2024)](https://arxiv.org/abs/2402.03300) and is vastly more memory-efficient than PPO because it drops the value-model. On a 24 GB L4, that difference is the difference between "fits" and "OOMs." One training step in pseudocode: ``` 1. DifficultyController picks a domain and difficulty based on rolling accuracy. 2. Unified sampler draws a problem. 3. Model generates N=10 completions with temperature 0.85. 4. Each completion is parsed for , , . - Strict XML contract. Empty reasoning or missing tag → -1.0 malformed. 5. Brier grades each: -1.5 × (confidence - correct)² ∈ [-1.5, 0]. Format bonus: +0.15 if strict format Accuracy bonus: +0.85 if correct, -0.15 if wrong Hindsight (opt-in): -0.30 × (retro - correct)² 6. Majority-vote correctness feeds back into the DifficultyController. 7. Replay buffer stores (prompt, miscalibration) for oversampling. 8. GRPO computes group-relative advantages and updates LoRA weights. 9. Repeat for 250–350 steps. ``` The six pre-tuned presets in `calibration_profiles.py` cover Qwen 2.5 at 0.5B / 1.5B / 3B, Llama 3.2 at 1B / 3B, and Phi-4-mini — the same pipeline training across two orders of magnitude of model scale. The 0.5B and 1B presets are the **iteration tier**: 250 GRPO steps finish in under an hour on a free Colab T4, so you can sweep reward shapes or ablate any of the four self-learning pillars multiple times in the budget of one 1.5B / 3B run. > **One subtlety the tiny tier forced us to solve.** Qwen-0.5B and Llama-1B cannot reliably emit the strict 3-tag XML contract from the system prompt alone. Without warmup, ~97 % of early GRPO rollouts hit the malformed-penalty floor, `frac_reward_zero_std ≈ 1.0`, and the GRPO advantage signal is identically zero — the entire compute budget burns on nothing. We added a short **Calibration SFT** phase (`training/calibration_sft.py`) that teaches three things in one dataset: format compliance, a correctness-conditioned confidence prior (high-band for correct targets, low-band for perturbed ones), and the legacy `` tag so the v1 reward channel actually fires when GRPO starts. `bin/run_calibration_pipeline.sh ` chains SFT → GRPO with tier-appropriate defaults so a tiny-tier run stays one command. --- ## 7. What This Isn't (The Honest Section) HONEST is scoped. We want to be explicit about what this submission does *not* claim. - **Open-ended generation.** The calibration signal we train on uses verifiable ground truth. Transfer to long-form summarisation or free-form code review is future work. - **A silver bullet for hallucination.** HONEST reduces the *confident* part of confidently-wrong. The model can still be wrong — but now it tells you when it might be. - **A production safety guarantee.** This is research-grade infrastructure. Downstream safety (abstention thresholds, human escalation, red-teaming) is the deploying team's responsibility. - **Multi-GPU GRPO.** The default preset is single-GPU for the hackathon scope. `accelerate` and `deepspeed` are plumbed but not our focus. We also want to flag something the repo is fully transparent about. **Our first hindsight-reward implementation (v1) was silent on every step** of a real 350-step run. We didn't discover that by looking at a dashboard — we wrote a diagnostic (`bin/audit_hindsight.py`), ran it, saw zero, and then rebuilt the head as CASR (Pillar 3). If you inherit a "working" reward channel without auditing whether it's actually firing, you will almost certainly inherit one of ours. *Audit every auxiliary reward.* Miscalibration is a *root cause* of hallucination. Fixing it at the source is the right direction. One hackathon isn't enough to declare victory. --- ## 8. Conclusion — Why This Matters Beyond the Hackathon Three things separate HONEST from adjacent work: 1. **Pure-math reward.** No LLM judge, no human rater. The optimal strategy for the model is truth-telling, by mathematical construction. 2. **Training-time, not post-hoc.** Calibration becomes a property of the model's weights — not a scalar applied afterward that breaks under distribution shift. 3. **Transfer is quantified.** Train on math/code/logic, measure on a five-slice OOD suite covering commonsense, science, medical, and legal reasoning. Report per-slice ΔECE with paired-bootstrap CIs and a single transfer-ratio headline. Calibration is a learnable meta-skill — and we can put a confidence interval on the claim. > **We don't just want models to be smart. We want them to be HONEST.** If you're building an agent framework, a multi-agent orchestration layer, or a high-stakes tool-use deployment, the question isn't *"is the model accurate?"* It's *"does the model tell me when it's unsure?"* — because that's the signal you build your human-in-the-loop protocol on. Accuracy is no longer a moat. Calibration is. --- ## Try It Yourself (60 Seconds, No GPU) ```bash git clone https://github.com/Rushhaabhhh/HONEST-RL-Calibrator.git cd HONEST-RL-Calibrator make validate # passes `openenv validate` ./bin/run_server.sh # local OpenEnv server on :8000 ``` Or open the live Hugging Face Space: **[huggingface.co/spaces/Rushhaabhhh/HONEST-Env**.](https://huggingface.co/spaces/Rushhaabhhh/HONEST-RL-Calibrator) Train a 0.5B Qwen on a free Colab T4 — one command, end-to-end (SFT warmup → GRPO with tier-appropriate hindsight): ```bash # ~10 min SFT + ~50 min GRPO on a T4: ./bin/run_calibration_pipeline.sh Qwen/Qwen2.5-0.5B-Instruct # Or go straight to GRPO on a larger model that doesn't need SFT: ./bin/run_calibration_pipeline.sh Qwen/Qwen2.5-3B-Instruct --skip-sft ``` Evaluate with tier-aware OOD slices and a Calibration Transfer table: ```bash python eval/full_eval.py --adapter-path ./honest-qwen2.5-0.5b-instruct-grpo/final_adapters --ood-slices auto python eval/compare_runs.py --before baseline.json --after after_rl.json ``` **If you build on top of HONEST, ship it open-source. The point of this project is to make calibration research accessible, not to hoard it.** --- ## References ### Calibration & Scoring Rules 1. Brier, G. W. (1950). *[Verification of Forecasts Expressed in Terms of Probability.](https://journals.ametsoc.org/view/journals/mwre/78/1/1520-0493_1950_078_0001_vofeit_2_0_co_2.xml)* Monthly Weather Review. — The original Brier score. 2. Gneiting, T. & Raftery, A. E. (2007). *[Strictly Proper Scoring Rules, Prediction, and Estimation.](https://sites.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf)* JASA. — The modern formalisation of proper scoring rules. 3. Guo, C., Pleiss, G., Sun, Y., Weinberger, K. Q. (2017). *[On Calibration of Modern Neural Networks.](https://arxiv.org/abs/1706.04599)* ICML. — The canonical reference for temperature scaling *and* the canonical warning about its distribution-shift brittleness. ### LLM Calibration & Uncertainty 1. Kadavath, S., Conerly, T., Askell, A. et al. (2022). *[Language Models (Mostly) Know What They Know.](https://arxiv.org/abs/2207.05221)* Anthropic. — Foundational evidence that base LLMs carry a useful self-evaluation signal. 2. Lin, S., Hilton, J., Evans, O. (2022). *[Teaching Models to Express Their Uncertainty in Words.](https://arxiv.org/abs/2205.14334)* TMLR. — Verbalised-confidence finetuning. 3. Kuhn, L., Gal, Y., Farquhar, S. (2023). *[Semantic Uncertainty: Linguistic Invariances for Uncertainty Estimation in Natural Language Generation.](https://arxiv.org/abs/2302.09664)* ICLR. ### RL for LLMs 1. Shao, Z. et al. (2024). *[DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models.](https://arxiv.org/abs/2402.03300)* — Introduces GRPO, the RL algorithm we use. 2. Ouyang, L. et al. (2022). *[Training Language Models to Follow Instructions with Human Feedback.](https://arxiv.org/abs/2203.02155)* — The RLHF recipe whose calibration-flattening we push back on. 3. Hugging Face TRL. *[Transformer Reinforcement Learning.](https://github.com/huggingface/trl)* — The training library that backs our GRPO loop. ### Self-Learning & Curriculum 1. Andrychowicz, M. et al. (2017). *[Hindsight Experience Replay.](https://arxiv.org/abs/1707.01495)* NeurIPS. — The inspiration for our v1 Hindsight Calibration Reward. 2. Schaul, T., Quan, J., Antonoglou, I., Silver, D. (2015). *[Prioritized Experience Replay.](https://arxiv.org/abs/1511.05952)* ICLR. — The inspiration for Calibration-Prioritised Replay. 3. Wang, R. et al. (2019). *[Paired Open-Ended Trailblazer (POET): Endlessly Generating Increasingly Complex and Diverse Learning Environments and Their Solutions.](https://arxiv.org/abs/1901.01753)* — Curriculum self-expansion, the inspiration for SMC. 4. Dennis, M. et al. (2020). *[Emergent Complexity and Zero-shot Transfer via Unsupervised Environment Design (PAIRED).](https://arxiv.org/abs/2012.02096)* NeurIPS. — Asymmetric self-play, the inspiration for GSS. ### Self-Refinement & Process Supervision (CASR foundations) 1. Madaan, A. et al. (2023). *[Self-Refine: Iterative Refinement with Self-Feedback.](https://arxiv.org/abs/2303.17651)* NeurIPS. — Iterative self-critique measurably improves single-pass LLM outputs; inspires the `` step. 2. Weng, Y. et al. (2023). *[Large Language Models are Better Reasoners with Self-Verification.](https://arxiv.org/abs/2212.09561)* EMNLP. — Verifying one's own answer reduces hallucination *and* improves calibration. 3. Shinn, N., Cassano, F. et al. (2023). *[Reflexion: Language Agents with Verbal Reinforcement Learning.](https://arxiv.org/abs/2303.11366)* NeurIPS. — Verbal self-reflection beats next-token prediction alone on sequential tasks. 4. Lightman, H., Kosaraju, V. et al. (2023). *[Let's Verify Step by Step (Process Reward Models).](https://arxiv.org/abs/2305.20050)* — Step-level verification correlates strongly with outcome correctness; a critique step is a learnable signal. ### Infrastructure, Datasets, and Standards 1. OpenEnv (Meta AI). *[github.com/meta-pytorch/OpenEnv](https://github.com/meta-pytorch/OpenEnv)* — The environment standard this submission targets. 2. Hendrycks, D. et al. (2021). *[Measuring Mathematical Problem Solving with the MATH Dataset.](https://arxiv.org/abs/2103.03874)* 3. Austin, J. et al. (2021). *[Program Synthesis with Large Language Models (MBPP).](https://arxiv.org/abs/2108.07732)* 4. Hendrycks, D. et al. (2021). *[Measuring Massive Multitask Language Understanding (MMLU).](https://arxiv.org/abs/2009.03300)* — Used for our OOD medical and science_hard splits. 5. Clark, P. et al. (2018). *[Think You Have Solved Question Answering? Try ARC, the AI2 Reasoning Challenge.](https://arxiv.org/abs/1803.05457)* — Used for our OOD `science_easy` split. 6. Talmor, A. et al. (2019). *[CommonsenseQA: A Question Answering Challenge Targeting Commonsense Knowledge.](https://arxiv.org/abs/1811.00937)* NAACL. — Used for our OOD `commonsense` split. 7. Zhong, W. et al. (2023). *[AGIEval: A Human-Centric Benchmark.](https://arxiv.org/abs/2304.06364)* — Used for our OOD legal split. 8. Model Context Protocol. *[modelcontextprotocol.io](https://modelcontextprotocol.io)* — The client interface spec our deployment layer implements. --- *HONEST-RL-Calibrator was built for the Hugging Face × Meta OpenEnv Hackathon, April 2026. If you have questions, found a bug, or want to plug calibrated reasoning into your agent framework, open an issue on [GitHub](https://github.com/Rushhaabhhh/HONEST-RL-Calibrator) — we read everything.*