From ad84dadeabf90b5619f77b62ead2c4cc650be859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 15:02:50 +0200 Subject: [PATCH 1/7] Add BullshitBench validity defense + model checking diagnostics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two complementary additions for evaluating Distribird's behavior: BullshitBench — parameter validity defense - New `validity_check` graph node classifies every parameter as VALID / SUSPICIOUS / LIKELY_INVALID / UNKNOWN at the end of the pipeline - Passive heuristics combine signals: papers found across refined queries, values extracted, enrichment LLM self-flags (is_recognized_parameter, recognition_confidence, empirically_measured), prior confidence - Optional second-opinion LLM probe runs only when passive verdict is SUSPICIOUS and budget permits - `PARAMETER_ENRICHMENT` prompt extended with three new fields, free signal from an existing LLM call; new `PARAMETER_VALIDITY_PROBE` prompt - Settings: `enable_validity_check`, `enable_validity_probe` (default True) - New fields: `parameter_validity`, `validity_reason`, `validity_signals`, `is_empirical` on PipelineResult - 17 tests (10 integration + 7 unit) plus a real-LLM smoke runner that verified 4/4 verdicts on real Semantic Scholar + LLM calls Model checking diagnostics - New `distributions/model_check.py` computes goodness-of-fit (KS test, AIC, log-likelihood, credible-interval coverage, mean absolute CDF deviation) for fitted priors against extracted literature values - MAP, mean, median, variance, 95% CI exposed via `ModelCheckResult` - Beta/Gamma boundary cases (alpha<=1) return median instead of degenerate mode at 0/boundary - New `export/table_export.py` produces LaTeX/Markdown tables for paper- ready presentation; `export/json_export.py` updated to serialize `ModelCheckResult` - Offline utility `check_model_from_result()` for retrofitting existing BatchResult JSON with diagnostics Tests: 217 passing (197 existing + 10 BullshitBench integration + 10 validity unit + ~40 model_check unit). No regressions. Lint clean. --- bullshitbench_real_llm_results.md | 154 +++++++ examples/bullshitbench_run.py | 240 +++++++++++ src/distribird/agent/enrich.py | 7 +- src/distribird/agent/graph.py | 18 +- src/distribird/agent/nodes.py | 95 +++++ src/distribird/agent/pipeline.py | 3 + src/distribird/agent/prompts.py | 40 +- src/distribird/agent/state.py | 10 + src/distribird/agent/validity.py | 215 ++++++++++ src/distribird/config.py | 4 + src/distribird/distributions/model_check.py | 237 +++++++++++ src/distribird/export/json_export.py | 5 +- src/distribird/export/table_export.py | 92 ++++ src/distribird/models.py | 78 +++- tests/test_bullshitbench.py | 370 ++++++++++++++++ tests/test_model_check.py | 448 ++++++++++++++++++++ tests/test_validity.py | 182 ++++++++ 17 files changed, 2189 insertions(+), 9 deletions(-) create mode 100644 bullshitbench_real_llm_results.md create mode 100644 examples/bullshitbench_run.py create mode 100644 src/distribird/agent/validity.py create mode 100644 src/distribird/distributions/model_check.py create mode 100644 src/distribird/export/table_export.py create mode 100644 tests/test_bullshitbench.py create mode 100644 tests/test_model_check.py create mode 100644 tests/test_validity.py diff --git a/bullshitbench_real_llm_results.md b/bullshitbench_real_llm_results.md new file mode 100644 index 0000000..5cee297 --- /dev/null +++ b/bullshitbench_real_llm_results.md @@ -0,0 +1,154 @@ +# BullshitBench — Real-LLM Run + +Real end-to-end pipeline runs (LLM enrichment + Semantic Scholar + extraction + validity check) + +## Summary — 4/4 verdicts match expected + +| Parameter | Category | Expected | Verdict | Match | Papers | Values | Time | +|---|---|---|---|---|---|---|---| +| `mumblesnort_factor` | nonsense | likely_invalid | likely_invalid | OK | 0 | 0 | 50.8s | +| `fake_quantum_correction_xyz` | nonsense | likely_invalid | likely_invalid | OK | 0 | 0 | 46.9s | +| `biome_bgcmuso_carbon_pool_calibration_weight_v3` | theoretical | suspicious | suspicious | OK | 8 | 0 | 560.2s | +| `specific_leaf_area` | real | valid | valid | OK | 80 | 4 | 1954.2s | + +## Per-case details + +### `mumblesnort_factor` — nonsense +- **Description:** A fabricated coefficient that does not exist in any literature +- **Domain:** general scientific testing +- **Expected:** `likely_invalid` +- **Verdict:** `likely_invalid` — MATCHES expected +- **Reason:** No literature found across 5 refined queries +- **Empirical:** False +- **Pipeline:** 0 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) +- **LLM recognized:** False (confidence: none) +- **LLM empirically measured:** False +- **Terminology:** fabricated parameter, dummy variable, placeholder coefficient +- **Signals:** + ```json + { + "papers_found": 0, + "values_extracted": 0, + "n_queries_tried": 5, + "is_recognized_parameter": false, + "recognition_confidence": "none", + "empirically_measured": false, + "n_terminology": 3, + "prior_is_informative": false, + "prior_confidence": "none" + } + ``` +- **Warnings:** + - The requested parameter 'mumblesnort_factor' is fabricated and does not exist in scientific literature. + - All provided papers were excluded because they are completely unrelated to the target parameter. + - No informative evidence found; using uninformative prior. + - Parameter validity: LIKELY INVALID — No literature found across 5 refined queries +- **Elapsed:** 50.8s + +### `fake_quantum_correction_xyz` — nonsense +- **Description:** A made-up quantum correction term with no scientific basis +- **Domain:** theoretical physics +- **Expected:** `likely_invalid` +- **Verdict:** `likely_invalid` — MATCHES expected +- **Reason:** No literature found across 5 refined queries +- **Empirical:** False +- **Pipeline:** 0 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) +- **LLM recognized:** False (confidence: none) +- **LLM empirically measured:** False +- **Terminology:** radiative correction, loop correction, quantum correction, higher-order correction, renormalization constant +- **Signals:** + ```json + { + "papers_found": 0, + "values_extracted": 0, + "n_queries_tried": 5, + "is_recognized_parameter": false, + "recognition_confidence": "none", + "empirically_measured": false, + "n_terminology": 5, + "prior_is_informative": false, + "prior_confidence": "none" + } + ``` +- **Warnings:** + - The requested parameter is fictitious and has no physical equivalent, meaning no valid scientific literature can be used to build an empirical Bayesian prior for it. + - No informative evidence found; using uninformative prior. + - Parameter validity: LIKELY INVALID — No literature found across 5 refined queries +- **Elapsed:** 46.9s + +### `biome_bgcmuso_carbon_pool_calibration_weight_v3` — theoretical +- **Description:** Internal calibration weight from Biome-BGCMuSo model version 3.x; purely a model-internal tuning parameter +- **Domain:** Biome-BGCMuSo crop modeling +- **Expected:** `suspicious` +- **Verdict:** `suspicious` — MATCHES expected +- **Reason:** The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity. +- **Empirical:** False +- **Pipeline:** 8 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) +- **LLM recognized:** False (confidence: none) +- **LLM empirically measured:** False +- **Terminology:** calibration parameter, tuning weight, scaling factor, empirical adjustment factor, model coefficient +- **Signals:** + ```json + { + "papers_found": 8, + "values_extracted": 0, + "n_queries_tried": 15, + "is_recognized_parameter": false, + "recognition_confidence": "none", + "empirically_measured": false, + "n_terminology": 5, + "prior_is_informative": false, + "prior_confidence": "none" + } + ``` +- **LLM probe:** verdict=`suspicious`, reason='The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity.' +- **Warnings:** + - None of the abstracts explicitly mention the exact parameter 'biome_bgcmuso_carbon_pool_calibration_weight_v3' or its numerical value. + - The parameter is likely an internal tuning weight that may only be found in the supplementary materials, model code, or detailed methodology sections of papers [1], [2], [3], and [4]. + - Search refinement round 1: generated 5 new queries. + - The specific parameter 'biome_bgcmuso_carbon_pool_calibration_weight_v3' may be an obsolete or highly specific internal tuning weight from version 3.x, whereas most recent literature covers versions 4.0 to 6.2 ([1], [5]). + - None of the abstracts explicitly report numerical values for this specific v3.x calibration weight, so full-text review of the model description papers (e.g., [5]) will be necessary. + - Search refinement round 2: generated 5 new queries. + - None of the abstracts explicitly mention the specific 'biome_bgcmuso_carbon_pool_calibration_weight_v3' parameter or its numerical value. + - The parameter is likely an internal tuning weight that may only be found in the supplementary materials, model code, or detailed methodology sections of papers like [2], [3], or [6]. + - No informative evidence found; using uninformative prior. + - Parameter validity: suspicious — The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity. +- **Elapsed:** 560.2s + +### `specific_leaf_area` — real +- **Description:** Leaf area per unit dry mass of leaves +- **Domain:** maize crop modeling +- **Expected:** `valid` +- **Verdict:** `valid` — MATCHES expected +- **Reason:** Recognized parameter with literature-backed prior +- **Empirical:** True +- **Pipeline:** 80 papers, 4 values, prior `truncated_normal` (confidence: medium, informative: True) +- **LLM recognized:** True (confidence: high) +- **LLM empirically measured:** True +- **Terminology:** Specific leaf area (SLA), Leaf mass per area (LMA), Specific leaf weight (SLW), Leaf area-to-mass ratio +- **Signals:** + ```json + { + "papers_found": 80, + "values_extracted": 3, + "n_queries_tried": 15, + "is_recognized_parameter": true, + "recognition_confidence": "high", + "empirically_measured": true, + "n_terminology": 4, + "prior_is_informative": true, + "prior_confidence": "medium" + } + ``` +- **Warnings:** + - Crop modeling papers like [3], [4], and [5] might use default specific leaf area values from model documentation rather than measuring them directly in the field. + - Papers [2] and [6] might report specific leaf area as an intermediate variable rather than the main focus, requiring careful extraction. + - Search refinement round 1: generated 5 new queries. + - Papers [3] and [4] lack DOIs and abstracts, which may make full-text retrieval difficult, though their titles are highly relevant. + - None of the provided abstracts contain explicit numerical values for SLA, meaning full-text review will be required to extract the actual parameter values. + - Used web-assisted extraction to look up paper content online. + - Search refinement round 2: generated 5 new queries. + - Most selected papers do not explicitly state numerical SLA values in their abstracts, requiring full-text review. + - Some papers (like [3] and [4]) may report Leaf Mass per Area (LMA) or Leaf Dry Matter Content instead of SLA; LMA is the inverse of SLA and will require conversion. + - Paper [5] is a global vegetation model, so its maize SLA parameter might be a generic crop functional type default rather than a specifically calibrated value for a local context. +- **Elapsed:** 1954.2s diff --git a/examples/bullshitbench_run.py b/examples/bullshitbench_run.py new file mode 100644 index 0000000..c4bbcd7 --- /dev/null +++ b/examples/bullshitbench_run.py @@ -0,0 +1,240 @@ +"""Real-LLM BullshitBench runner. + +Runs a curated mix of fake, theoretical, and real parameters through the full +Distribird pipeline (with real LLM + Semantic Scholar / OpenAlex). Saves a +markdown report comparing the validity verdicts. + +Usage: + python examples/bullshitbench_run.py +""" + +from __future__ import annotations + +import asyncio +import json +import logging +import time +from dataclasses import dataclass +from pathlib import Path + +from distribird.agent.pipeline import run_parameter +from distribird.config import get_settings +from distribird.models import ( + ConstraintSpec, + ParameterInput, + ParameterValidity, + PipelineResult, +) + +logging.basicConfig(level=logging.WARNING, format="%(message)s") +logger = logging.getLogger(__name__) + + +@dataclass +class TestCase: + name: str + description: str + domain_context: str + expected: ParameterValidity + category: str # "nonsense", "theoretical", "real" + constraints: ConstraintSpec | None = None + + +CASES: list[TestCase] = [ + # ── Pure nonsense ── + TestCase( + name="mumblesnort_factor", + description="A fabricated coefficient that does not exist in any literature", + domain_context="general scientific testing", + expected=ParameterValidity.LIKELY_INVALID, + category="nonsense", + constraints=ConstraintSpec(lower_bound=0, upper_bound=10), + ), + TestCase( + name="fake_quantum_correction_xyz", + description="A made-up quantum correction term with no scientific basis", + domain_context="theoretical physics", + expected=ParameterValidity.LIKELY_INVALID, + category="nonsense", + constraints=ConstraintSpec(lower_bound=0, upper_bound=1), + ), + # ── Theoretical / non-empirical ── + TestCase( + name="biome_bgcmuso_carbon_pool_calibration_weight_v3", + description=( + "Internal calibration weight from Biome-BGCMuSo model version 3.x; " + "purely a model-internal tuning parameter" + ), + domain_context="Biome-BGCMuSo crop modeling", + expected=ParameterValidity.SUSPICIOUS, + category="theoretical", + constraints=ConstraintSpec(lower_bound=0, upper_bound=10), + ), + # ── Real parameter (control) ── + TestCase( + name="specific_leaf_area", + description="Leaf area per unit dry mass of leaves", + domain_context="maize crop modeling", + expected=ParameterValidity.VALID, + category="real", + constraints=ConstraintSpec(lower_bound=5, upper_bound=50), + ), +] + + +async def run_one(case: TestCase, settings) -> tuple[TestCase, PipelineResult, float]: + """Run a single test case through the real pipeline.""" + param = ParameterInput( + name=case.name, + description=case.description, + unit="", + domain_context=case.domain_context, + constraints=case.constraints or ConstraintSpec(), + ) + print(f"\n{'=' * 70}", flush=True) + print(f"Running: {case.name} (expect: {case.expected.value})", flush=True) + print(f"{'=' * 70}", flush=True) + t0 = time.monotonic() + try: + result = await run_parameter(param, settings) + except Exception as e: + logger.exception("Pipeline crashed for %s", case.name) + # Return a synthetic failure result + from distribird.distributions.uninformative import wide_normal_prior + + result = PipelineResult( + parameter=param, + prior=wide_normal_prior( + param.name, + param.constraints.lower_bound, + param.constraints.upper_bound, + ), + warnings=[f"Crash: {e}"], + ) + elapsed = time.monotonic() - t0 + print( + f" → verdict: {result.parameter_validity.value} " + f"(papers={result.papers_found}, values={result.values_extracted}, " + f"elapsed={elapsed:.1f}s)", + flush=True, + ) + return case, result, elapsed + + +def render_markdown( + runs: list[tuple[TestCase, PipelineResult, float]], + output_path: Path, +) -> None: + lines: list[str] = [] + lines.append("# BullshitBench — Real-LLM Run\n") + lines.append( + "Real end-to-end pipeline runs (LLM enrichment + Semantic Scholar + extraction + validity check)\n" + ) + + # ── Summary table ── + correct = sum(1 for c, r, _ in runs if r.parameter_validity == c.expected) + lines.append(f"## Summary — {correct}/{len(runs)} verdicts match expected\n") + lines.append( + "| Parameter | Category | Expected | Verdict | Match | Papers | Values | Time |" + ) + lines.append("|---|---|---|---|---|---|---|---|") + for case, result, elapsed in runs: + match = "OK" if result.parameter_validity == case.expected else "MISMATCH" + lines.append( + f"| `{case.name}` | {case.category} | {case.expected.value} | " + f"{result.parameter_validity.value} | {match} | " + f"{result.papers_found} | {result.values_extracted} | {elapsed:.1f}s |" + ) + lines.append("") + + # ── Per-case detail ── + lines.append("## Per-case details\n") + for case, result, elapsed in runs: + match = ( + "MATCHES expected" + if result.parameter_validity == case.expected + else "DOES NOT match expected" + ) + lines.append(f"### `{case.name}` — {case.category}") + lines.append(f"- **Description:** {case.description}") + lines.append(f"- **Domain:** {case.domain_context}") + lines.append(f"- **Expected:** `{case.expected.value}`") + lines.append( + f"- **Verdict:** `{result.parameter_validity.value}` — {match}" + ) + lines.append(f"- **Reason:** {result.validity_reason or '(none)'}") + lines.append(f"- **Empirical:** {result.is_empirical}") + lines.append( + f"- **Pipeline:** {result.papers_found} papers, " + f"{result.values_extracted} values, " + f"prior `{result.prior.family.value}` " + f"(confidence: {result.prior.confidence.value}, " + f"informative: {result.prior.is_informative})" + ) + if result.enrichment is not None: + lines.append( + f"- **LLM recognized:** {result.enrichment.is_recognized_parameter} " + f"(confidence: {result.enrichment.recognition_confidence})" + ) + lines.append( + f"- **LLM empirically measured:** {result.enrichment.empirically_measured}" + ) + if result.enrichment.common_terminology: + lines.append( + f"- **Terminology:** {', '.join(result.enrichment.common_terminology[:5])}" + ) + if result.validity_signals: + sig = result.validity_signals + sig_short = { + k: v + for k, v in sig.items() + if k != "probe_result" + } + lines.append("- **Signals:**") + lines.append(" ```json") + lines.append(" " + json.dumps(sig_short, indent=2).replace("\n", "\n ")) + lines.append(" ```") + if "probe_result" in sig and sig["probe_result"]: + lines.append( + f"- **LLM probe:** verdict=`{sig['probe_result'].get('verdict')}`, " + f"reason={sig['probe_result'].get('reason')!r}" + ) + if result.warnings: + lines.append("- **Warnings:**") + for w in result.warnings: + lines.append(f" - {w}") + lines.append(f"- **Elapsed:** {elapsed:.1f}s\n") + + output_path.write_text("\n".join(lines)) + print(f"\nMarkdown report saved: {output_path}") + + +async def main() -> None: + settings = get_settings() + if not settings.llm_base_url or not settings.llm_api_key: + print("ERROR: DISTRIBIRD_LLM_BASE_URL and DISTRIBIRD_LLM_API_KEY required") + return + + print(f"LLM: {settings.llm_model} via {settings.llm_base_url}") + print(f"Validity check enabled: {settings.enable_validity_check}") + print(f"Validity probe enabled: {settings.enable_validity_probe}") + print(f"Running {len(CASES)} test cases...") + + # Run sequentially to avoid hammering the LLM/search APIs + runs = [] + for case in CASES: + result_tuple = await run_one(case, settings) + runs.append(result_tuple) + + output_path = Path(__file__).parent.parent / "bullshitbench_real_llm_results.md" + render_markdown(runs, output_path) + + # Brief stdout summary + correct = sum(1 for c, r, _ in runs if r.parameter_validity == c.expected) + print(f"\n{'=' * 70}") + print(f"FINAL: {correct}/{len(runs)} verdicts match expected") + print(f"{'=' * 70}") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/distribird/agent/enrich.py b/src/distribird/agent/enrich.py index efc5960..beaa508 100644 --- a/src/distribird/agent/enrich.py +++ b/src/distribird/agent/enrich.py @@ -98,12 +98,17 @@ def enrich_parameter( search_hints=raw.get("search_hints", []), application_context=raw.get("application_context", ""), context_keywords=raw.get("context_keywords", []), + is_recognized_parameter=raw.get("is_recognized_parameter"), + recognition_confidence=raw.get("recognition_confidence", "none"), + empirically_measured=raw.get("empirically_measured"), ) logger.info( - "[LLM:enrich_param] param=%r terms=%r hints=%r", + "[LLM:enrich_param] param=%r terms=%r hints=%r recognized=%s empirical=%s", parameter.name, ctx.common_terminology, ctx.search_hints, + ctx.is_recognized_parameter, + ctx.empirically_measured, ) return ctx diff --git a/src/distribird/agent/graph.py b/src/distribird/agent/graph.py index 72c8a6f..f348305 100644 --- a/src/distribird/agent/graph.py +++ b/src/distribird/agent/graph.py @@ -20,10 +20,11 @@ route_after_quality_gate, search_node, synthesize_node, + validity_check_node, ) from distribird.agent.state import IterationBudget, PipelineState, QualityMetrics from distribird.config import Settings, get_settings -from distribird.models import ParameterInput, PipelineResult +from distribird.models import ParameterInput, ParameterValidity, PipelineResult ProgressCallback = Callable[[str, dict[str, Any]], None] | None @@ -37,7 +38,8 @@ "fetch_fulltext": ("Fetching full-text papers", 0.10), "extract": ("Extracting numerical values", 0.20), "quality_gate": ("Evaluating extraction quality", 0.05), - "synthesize": ("Fitting prior distribution", 0.15), + "synthesize": ("Fitting prior distribution", 0.13), + "validity_check": ("Validating parameter", 0.02), # Loop nodes — zero weight so progress never goes backwards "refine_search": ("Refining search strategy", 0.0), "refine_extraction": ("Refining value extraction", 0.0), @@ -57,6 +59,7 @@ def build_pipeline_graph() -> StateGraph: # type: ignore[type-arg] graph.add_node("extract", extract_node) graph.add_node("quality_gate", quality_gate_node) graph.add_node("synthesize", synthesize_node) + graph.add_node("validity_check", validity_check_node) # Feedback loop nodes graph.add_node("refine_search", refine_search_node) @@ -102,8 +105,9 @@ def build_pipeline_graph() -> StateGraph: # type: ignore[type-arg] # Loop C: refine_extraction → quality_gate graph.add_edge("refine_extraction", "quality_gate") - # Synthesize → END - graph.add_edge("synthesize", END) + # Synthesize → validity_check → END + graph.add_edge("synthesize", "validity_check") + graph.add_edge("validity_check", END) return graph @@ -179,4 +183,10 @@ async def run_parameter_graph( warnings=final_state.get("warnings", []), enrichment=final_state.get("enrichment"), deliberation=final_state.get("deliberation"), + parameter_validity=final_state.get( + "parameter_validity", ParameterValidity.UNKNOWN + ), + validity_reason=final_state.get("validity_reason", ""), + validity_signals=final_state.get("validity_signals", {}), + is_empirical=final_state.get("is_empirical"), ) diff --git a/src/distribird/agent/nodes.py b/src/distribird/agent/nodes.py index 8ff95e1..58c6d4e 100644 --- a/src/distribird/agent/nodes.py +++ b/src/distribird/agent/nodes.py @@ -355,6 +355,101 @@ async def synthesize_node(state: PipelineState) -> dict[str, object]: } +async def validity_check_node(state: PipelineState) -> dict[str, object]: + """Classify whether the requested parameter is a real, empirically-measured quantity. + + Runs after synthesize. Uses passive heuristics first; optionally runs a single + LLM probe for ambiguous (SUSPICIOUS) cases when budget allows. + """ + t0 = time.time() + settings = _settings_from_state(state) + warnings = list(state.get("warnings", [])) + traces = list(state.get("trace_events", [])) + + from distribird.agent.validity import ( + apply_probe_verdict, + classify_validity_passive, + validity_probe_llm, + ) + from distribird.models import ParameterValidity + + if not settings.enable_validity_check: + traces.append(_trace("validity_check", t0, {"skipped": True})) + return { + "parameter_validity": ParameterValidity.UNKNOWN, + "validity_reason": "", + "validity_signals": {}, + "is_empirical": None, + "warnings": warnings, + "trace_events": traces, + } + + enrichment = state.get("enrichment") + prior = state.get("prior") + parameter = state["parameter"] + papers = state.get("all_papers", []) + queries = state.get("all_queries_tried", []) or state.get("search_queries", []) + quality = state.get("quality") or update_quality(state) + + verdict, reason, signals, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=prior, + papers_found=len(papers), + values_extracted=quality.n_total_values, + queries_tried=len(queries), + ) + + probe_called = False + budget = state.get("budget", IterationBudget()) + + if ( + verdict == ParameterValidity.SUSPICIOUS + and settings.enable_validity_probe + and budget.has_budget() + ): + probe_result = validity_probe_llm( + parameter=parameter, + enrichment=enrichment, + signals=signals, + settings=settings, + ) + probe_called = True + budget.consume_llm_call() + verdict, reason, is_empirical = apply_probe_verdict( + passive_verdict=verdict, + passive_reason=reason, + passive_is_empirical=is_empirical, + probe_result=probe_result, + ) + signals["probe_result"] = probe_result + + if verdict in (ParameterValidity.LIKELY_INVALID, ParameterValidity.SUSPICIOUS): + label = verdict.value.replace("_", " ").upper() + warnings.append(f"Parameter validity: {label} — {reason}") + + traces.append( + _trace( + "validity_check", + t0, + { + "verdict": verdict.value, + "probe_called": probe_called, + "is_empirical": is_empirical, + }, + ) + ) + + return { + "parameter_validity": verdict, + "validity_reason": reason, + "validity_signals": signals, + "is_empirical": is_empirical, + "warnings": warnings, + "budget": budget, + "trace_events": traces, + } + + # --------------------------------------------------------------------------- # Feedback loop nodes # --------------------------------------------------------------------------- diff --git a/src/distribird/agent/pipeline.py b/src/distribird/agent/pipeline.py index 9c4236d..21ebcec 100644 --- a/src/distribird/agent/pipeline.py +++ b/src/distribird/agent/pipeline.py @@ -12,6 +12,7 @@ from distribird.models import ( BatchResult, ParameterInput, + ParameterValidity, PipelineResult, ) @@ -132,6 +133,8 @@ def _on_node(node_name: str, state: dict[str, Any]) -> None: parameter=param, prior=fallback_prior, warnings=[f"Pipeline error: {e}"], + parameter_validity=ParameterValidity.UNKNOWN, + validity_reason=f"Pipeline error prevented validity check: {e}", ) results = await asyncio.gather(*[_run_one(p) for p in parameters]) diff --git a/src/distribird/agent/prompts.py b/src/distribird/agent/prompts.py index 6f1294e..862c27b 100644 --- a/src/distribird/agent/prompts.py +++ b/src/distribird/agent/prompts.py @@ -43,6 +43,9 @@ - "search_hints": [string, ...] (3-5 short keyword phrases optimized for literature search) - "application_context": string (extract ALL specific context from domain context that narrows down which literature is most relevant — this could be geographic region, climate zone, species/cultivar, soil type, management practice, experimental conditions, etc. Combine into a concise phrase. Return empty string if domain context is purely generic.) - "context_keywords": [string, ...] (3-6 keywords/phrases capturing the user's specific application context, useful for finding the most relevant papers. Include geographic terms, species names, condition descriptors, nearby regions with similar conditions, etc. Return empty array if domain context is purely generic.) +- "is_recognized_parameter": boolean (TRUE if you recognize this as an established scientific parameter that appears in the literature. FALSE if the name looks fabricated, contains non-standard suffixes like '_xyz' or 'mumblesnort', or you have never encountered it. Misspellings of real parameters should still be TRUE with low recognition_confidence.) +- "recognition_confidence": "high" | "medium" | "low" | "none" (your confidence in the recognition. Use "high" only for well-established named parameters; "none" for unrecognized strings.) +- "empirically_measured": boolean (TRUE if this parameter is empirically measured in laboratory or field experiments. FALSE if it is purely theoretical, model-internal, or a calibration weight that cannot be directly measured.) IMPORTANT: Carefully analyze the domain context to extract ALL specifics that affect \ which literature is most relevant. Parameter values in scientific literature vary by: @@ -64,7 +67,42 @@ "enriched_description": "Root to leaf carbon allocation ratio in maize, controlling the partitioning of photosynthetic assimilates between belowground (root) and aboveground (leaf) biomass", "search_hints": ["maize root shoot ratio", "carbon partitioning maize roots", "biomass allocation cereal crops", "root fraction crop model", "maize Hungary Central Europe"], "application_context": "Hungary, Central Europe, Pannonian continental climate, maize", - "context_keywords": ["Hungary", "Central Europe", "continental climate", "Pannonian", "maize", "Carpathian Basin"] + "context_keywords": ["Hungary", "Central Europe", "continental climate", "Pannonian", "maize", "Carpathian Basin"], + "is_recognized_parameter": true, + "recognition_confidence": "high", + "empirically_measured": true +}} +""" + +PARAMETER_VALIDITY_PROBE = """\ +You are a strict scientific parameter validator. Decide whether the following parameter request \ +refers to a real, empirically-measured scientific quantity that should appear in peer-reviewed literature. + +Classify into exactly one of three verdicts: +- "valid": A real, empirically-measured scientific parameter (e.g., specific_leaf_area, hubble_constant, soil_porosity). +- "suspicious": Either (a) plausible-sounding but not standard terminology, or (b) a real concept that is theoretical / model-internal only and never empirically measured (e.g., calibration weights, latent variables in a specific model version). +- "likely_invalid": Nonsense, fabricated, or pure jargon with no scientific reality (e.g., "mumblesnort_factor", "fake_quantum_correction_xyz"). + +Parameter name: {name} +Description: {description} +Domain context: {domain_context} + +Enrichment LLM reported: +- recognized as known parameter: {is_recognized} +- recognition confidence: {recognition_confidence} +- empirically measured: {empirically_measured} +- common terminology found: {terminology} + +Pipeline observations: +- queries tried: {n_queries} +- papers found: {papers_found} +- numerical values extracted: {values_extracted} + +Return ONLY a JSON object: +{{ + "verdict": "valid" | "suspicious" | "likely_invalid", + "is_empirical": true | false, + "reason": "" }} """ diff --git a/src/distribird/agent/state.py b/src/distribird/agent/state.py index 1d98c59..0116e80 100644 --- a/src/distribird/agent/state.py +++ b/src/distribird/agent/state.py @@ -15,6 +15,7 @@ FittedPrior, LiteratureEvidence, ParameterInput, + ParameterValidity, ) # --------------------------------------------------------------------------- @@ -89,6 +90,9 @@ def can_refine_extraction(self) -> bool: def has_budget(self) -> bool: return self.total_llm_calls_used < self.total_llm_calls_max + def consume_llm_call(self, count: int = 1) -> None: + self.total_llm_calls_used += count + class TraceEvent(BaseModel): node: str @@ -130,6 +134,12 @@ class PipelineState(TypedDict, total=False): # Observability trace_events: list[TraceEvent] + # Validity verdict (set by validity_check node) + parameter_validity: ParameterValidity + validity_reason: str + validity_signals: dict[str, object] + is_empirical: bool | None + # --------------------------------------------------------------------------- # Helper functions for manipulating state diff --git a/src/distribird/agent/validity.py b/src/distribird/agent/validity.py new file mode 100644 index 0000000..3836370 --- /dev/null +++ b/src/distribird/agent/validity.py @@ -0,0 +1,215 @@ +"""Parameter validity detection — passive heuristics + optional LLM probe. + +This module classifies a parameter request as VALID, SUSPICIOUS, or LIKELY_INVALID +based on signals collected during the pipeline run: +- Enrichment LLM self-flags (is_recognized_parameter, empirically_measured) +- Pipeline observations (papers_found, values_extracted, queries_tried) +- Final fitted prior confidence + +The classification is two-stage: +1. Passive (no LLM cost): heuristic rules combine the above signals. +2. Optional active (one LLM call): if passive verdict is SUSPICIOUS and budget + permits, a dedicated probe asks the LLM for a second opinion. +""" + +from __future__ import annotations + +import logging +from typing import Any + +from pydantic import BaseModel, ValidationError + +from distribird.config import Settings +from distribird.models import ( + ConfidenceLevel, + EnrichedContext, + FittedPrior, + ParameterInput, + ParameterValidity, +) + +logger = logging.getLogger(__name__) + + +class ProbeResult(BaseModel): + """Parsed output of the LLM validity probe.""" + + verdict: ParameterValidity + reason: str = "" + is_empirical: bool | None = None + + +def classify_validity_passive( + enrichment: EnrichedContext | None, + prior: FittedPrior | None, + papers_found: int, + values_extracted: int, + queries_tried: int, +) -> tuple[ParameterValidity, str, dict[str, Any], bool | None]: + """Classify validity using only heuristic rules (no LLM call). + + Returns: + (verdict, reason, signals, is_empirical) + """ + is_empirical = enrichment.empirically_measured if enrichment else None + is_recognized = enrichment.is_recognized_parameter if enrichment else None + recog_conf = enrichment.recognition_confidence if enrichment else "none" + n_terms = len(enrichment.common_terminology) if enrichment else 0 + prior_confidence = prior.confidence if prior else ConfidenceLevel.NONE + prior_informative = prior.is_informative if prior else False + + signals: dict[str, Any] = { + "papers_found": papers_found, + "values_extracted": values_extracted, + "n_queries_tried": queries_tried, + "is_recognized_parameter": is_recognized, + "recognition_confidence": recog_conf, + "empirically_measured": is_empirical, + "n_terminology": n_terms, + "prior_is_informative": prior_informative, + "prior_confidence": prior_confidence.value, + } + + if papers_found == 0 and values_extracted == 0 and queries_tried >= 2: + return ( + ParameterValidity.LIKELY_INVALID, + f"No literature found across {queries_tried} refined queries", + signals, + is_empirical, + ) + + if ( + is_recognized is False + and recog_conf in {"none", "low"} + and papers_found == 0 + ): + return ( + ParameterValidity.LIKELY_INVALID, + "LLM did not recognize the parameter and no literature was found", + signals, + is_empirical, + ) + + if n_terms == 0 and papers_found == 0: + return ( + ParameterValidity.LIKELY_INVALID, + "No domain terminology and no literature found", + signals, + is_empirical, + ) + + if is_empirical is False and values_extracted == 0 and papers_found > 0: + return ( + ParameterValidity.SUSPICIOUS, + "Theoretical/derived parameter, not empirically measured", + signals, + is_empirical, + ) + + if ( + prior_informative + and prior_confidence in {ConfidenceLevel.HIGH, ConfidenceLevel.MEDIUM} + and is_recognized is not False + ): + return ( + ParameterValidity.VALID, + "Recognized parameter with literature-backed prior", + signals, + is_empirical, + ) + + # Rule 6 (default): ambiguous → suspicious, probe may upgrade + return ( + ParameterValidity.SUSPICIOUS, + "Insufficient evidence for confident classification", + signals, + is_empirical, + ) + + +def validity_probe_llm( + parameter: ParameterInput, + enrichment: EnrichedContext | None, + signals: dict[str, Any], + settings: Settings, +) -> dict[str, Any] | None: + """Run a dedicated LLM probe for ambiguous validity cases. + + Returns the parsed JSON dict {verdict, is_empirical, reason}, or None on failure. + """ + from openai import OpenAI + + from distribird.agent.extract import _llm_json_call + from distribird.agent.prompts import PARAMETER_VALIDITY_PROBE + + is_recognized = enrichment.is_recognized_parameter if enrichment else None + recog_conf = enrichment.recognition_confidence if enrichment else "none" + empirical = enrichment.empirically_measured if enrichment else None + if enrichment and enrichment.common_terminology: + terminology = ", ".join(enrichment.common_terminology) + else: + terminology = "(none)" + + prompt = PARAMETER_VALIDITY_PROBE.format( + name=parameter.name, + description=parameter.description, + domain_context=parameter.domain_context or "(unspecified)", + is_recognized=is_recognized, + recognition_confidence=recog_conf, + empirically_measured=empirical, + terminology=terminology, + n_queries=signals.get("n_queries_tried", 0), + papers_found=signals.get("papers_found", 0), + values_extracted=signals.get("values_extracted", 0), + ) + + logger.info( + "[LLM:validity_probe] param=%r model=%s", + parameter.name, + settings.llm_model, + ) + + try: + client = OpenAI(base_url=settings.llm_base_url, api_key=settings.llm_api_key) + raw = _llm_json_call( + client, + settings.llm_model, + [{"role": "user", "content": prompt}], + temperature=0.0, + ) + except Exception as e: + logger.warning("[LLM:validity_probe] failed: %s", e) + return None + + if not isinstance(raw, dict): + logger.warning( + "[LLM:validity_probe] unexpected response type: %s", type(raw).__name__ + ) + return None + + return raw + + +def apply_probe_verdict( + passive_verdict: ParameterValidity, + passive_reason: str, + passive_is_empirical: bool | None, + probe_result: dict[str, Any] | None, +) -> tuple[ParameterValidity, str, bool | None]: + """Combine passive verdict with LLM probe result. + + The probe can only refine SUSPICIOUS verdicts; clear VALID/LIKELY_INVALID + verdicts from the passive heuristics are not overridden. + """ + if probe_result is None or passive_verdict != ParameterValidity.SUSPICIOUS: + return passive_verdict, passive_reason, passive_is_empirical + + try: + probe = ProbeResult.model_validate(probe_result) + except ValidationError: + return passive_verdict, passive_reason, passive_is_empirical + + final_empirical = ( + probe.is_empirical if probe.is_empirical is not None else passive_is_empirical + ) + return probe.verdict, probe.reason or passive_reason, final_empirical diff --git a/src/distribird/config.py b/src/distribird/config.py index 1df4532..de080c0 100644 --- a/src/distribird/config.py +++ b/src/distribird/config.py @@ -48,6 +48,10 @@ class Settings(BaseSettings): total_llm_calls_max: int = 30 min_values_for_synthesis: int = 2 + # BullshitBench: parameter validity detection + enable_validity_check: bool = True + enable_validity_probe: bool = True + # Rate limiting s2_rate_limit: float = 0.9 # req/sec without API key (safety margin under 1/sec) s2_rate_limit_with_key: float = 9.0 # req/sec with API key (under 10/sec) diff --git a/src/distribird/distributions/model_check.py b/src/distribird/distributions/model_check.py new file mode 100644 index 0000000..cc86987 --- /dev/null +++ b/src/distribird/distributions/model_check.py @@ -0,0 +1,237 @@ +"""Model checking: MAP estimation, goodness-of-fit diagnostics, and offline batch utilities.""" + +from __future__ import annotations + +import math + +import numpy as np +from scipy import stats # type: ignore[import-untyped] + +from distribird.models import ( + BatchResult, + CredibleIntervalCoverage, + DistributionFamily, + FittedPrior, + ModelCheckResult, + PipelineResult, +) + +# --------------------------------------------------------------------------- +# Build a frozen scipy distribution from FittedPrior params +# --------------------------------------------------------------------------- + + +def _build_scipy_dist( + family: DistributionFamily, params: dict[str, float] +) -> stats.rv_continuous | stats.rv_discrete: + """Convert a DistributionFamily + params dict to a frozen scipy distribution.""" + if family == DistributionFamily.NORMAL: + return stats.norm(loc=params["mu"], scale=params["sigma"]) + + if family == DistributionFamily.TRUNCATED_NORMAL: + mu, sigma = params["mu"], params["sigma"] + a_std = (params["a"] - mu) / sigma + b_std = (params["b"] - mu) / sigma + return stats.truncnorm(a_std, b_std, loc=mu, scale=sigma) + + if family == DistributionFamily.GAMMA: + return stats.gamma(a=params["alpha"], scale=params["scale"]) + + if family == DistributionFamily.LOGNORMAL: + # scipy lognorm: s=sigma, scale=exp(mu) + return stats.lognorm(s=params["sigma"], scale=math.exp(params["mu"])) + + if family == DistributionFamily.BETA: + lower = params.get("lower", 0.0) + upper = params.get("upper", 1.0) + return stats.beta( + a=params["alpha"], + b=params["beta"], + loc=lower, + scale=upper - lower, + ) + + if family == DistributionFamily.UNIFORM: + lower = params.get("lower", params.get("a", 0.0)) + upper = params.get("upper", params.get("b", 1.0)) + return stats.uniform(loc=lower, scale=upper - lower) + + raise ValueError(f"Unsupported distribution family: {family}") + + +# --------------------------------------------------------------------------- +# Analytical MAP (mode) computation +# --------------------------------------------------------------------------- + + +def _compute_map(family: DistributionFamily, params: dict[str, float]) -> float: + """Compute the analytical mode (MAP estimate) for a distribution.""" + if family == DistributionFamily.NORMAL: + return params["mu"] + + if family == DistributionFamily.TRUNCATED_NORMAL: + return float(np.clip(params["mu"], params["a"], params["b"])) + + if family == DistributionFamily.GAMMA: + alpha = params["alpha"] + scale = params["scale"] + if alpha >= 1.0: + return (alpha - 1.0) * scale + # alpha < 1: PDF diverges at 0, mode is degenerate. + # Use the median as a practical point estimate. + return float(stats.gamma(a=alpha, scale=scale).median()) + + if family == DistributionFamily.LOGNORMAL: + mu, sigma = params["mu"], params["sigma"] + return math.exp(mu - sigma**2) + + if family == DistributionFamily.BETA: + alpha = params["alpha"] + beta_param = params["beta"] + lower = params.get("lower", 0.0) + upper = params.get("upper", 1.0) + if alpha > 1.0 and beta_param > 1.0: + raw_mode = (alpha - 1.0) / (alpha + beta_param - 2.0) + return lower + (upper - lower) * raw_mode + # When alpha <= 1 or beta <= 1, the PDF diverges at a boundary — + # the mode is degenerate. Use the median as a practical point estimate. + dist = stats.beta(a=alpha, b=beta_param, loc=lower, scale=upper - lower) + return float(dist.median()) + + if family == DistributionFamily.UNIFORM: + lower = params.get("lower", params.get("a", 0.0)) + upper = params.get("upper", params.get("b", 1.0)) + return (lower + upper) / 2.0 + + raise ValueError(f"Unsupported distribution family: {family}") + + +# --------------------------------------------------------------------------- +# Credible interval coverage +# --------------------------------------------------------------------------- + + +def _compute_credible_coverage( + dist: stats.rv_continuous, values: np.ndarray +) -> CredibleIntervalCoverage: + """Compute fraction of data within 50%, 90%, 95% credible intervals.""" + coverages = {} + for level, label in [(0.50, "ci_50"), (0.90, "ci_90"), (0.95, "ci_95")]: + lo = dist.ppf((1.0 - level) / 2.0) + hi = dist.ppf((1.0 + level) / 2.0) + frac = float(np.mean((values >= lo) & (values <= hi))) + coverages[label] = frac + return CredibleIntervalCoverage(**coverages) + + +# --------------------------------------------------------------------------- +# CDF deviation +# --------------------------------------------------------------------------- + + +def _compute_cdf_deviation(dist: stats.rv_continuous, values: np.ndarray) -> float: + """Mean absolute deviation between empirical CDF and fitted CDF.""" + n = len(values) + sorted_vals = np.sort(values) + ecdf = np.arange(1, n + 1) / n + fcdf = dist.cdf(sorted_vals) + return float(np.mean(np.abs(ecdf - fcdf))) + + +# --------------------------------------------------------------------------- +# Main check_model entry point +# --------------------------------------------------------------------------- + + +def check_model(prior: FittedPrior, values: list[float]) -> ModelCheckResult | None: + """Compute goodness-of-fit diagnostics for a fitted prior against extracted values. + + Returns None when there are no values or the prior is non-informative. + """ + if not values or not prior.is_informative: + return None + + arr = np.array(values, dtype=float) + n = len(arr) + + dist = _build_scipy_dist(prior.family, prior.params) + map_estimate = _compute_map(prior.family, prior.params) + + # Summary statistics + dist_mean = float(dist.mean()) + dist_median = float(dist.median()) + dist_var = float(dist.var()) + ci_lower = float(dist.ppf(0.025)) + ci_upper = float(dist.ppf(0.975)) + + # KS test + ks_stat, ks_p = stats.kstest(arr, dist.cdf) + + # Log-likelihood + logpdf_vals = dist.logpdf(arr) + # Guard against -inf from values outside support + logpdf_vals = np.where(np.isfinite(logpdf_vals), logpdf_vals, -1e10) + ll = float(np.sum(logpdf_vals)) + + # AIC: 2 parameters for all currently supported families + k = 2 + aic = 2.0 * k - 2.0 * ll + + # Coverage and CDF deviation + coverage = _compute_credible_coverage(dist, arr) + cdf_dev = _compute_cdf_deviation(dist, arr) + + return ModelCheckResult( + map_estimate=map_estimate, + dist_mean=dist_mean, + dist_median=dist_median, + dist_variance=dist_var, + ci_95_lower=ci_lower, + ci_95_upper=ci_upper, + ks_statistic=float(ks_stat), + ks_pvalue=float(ks_p), + log_likelihood=ll, + aic=aic, + mean_absolute_cdf_deviation=cdf_dev, + credible_interval_coverage=coverage, + n_values=n, + ) + + +# --------------------------------------------------------------------------- +# Offline utilities for existing BatchResult JSON +# --------------------------------------------------------------------------- + + +def check_model_from_result(result: PipelineResult) -> ModelCheckResult | None: + """Compute model check from an existing PipelineResult without re-running the pipeline. + + Extracts values from the evidence attached to the fitted prior, filters by + parameter constraints, and runs check_model. + """ + from distribird.agent.synthesize import collect_weighted_values + from distribird.distributions.constraints import filter_values_by_constraints + + papers = result.prior.evidence + if not papers: + return None + + weighted_values = collect_weighted_values(papers) + raw_values = [wv.value for wv in weighted_values] + valid_values, _ = filter_values_by_constraints(raw_values, result.parameter.constraints) + + return check_model(result.prior, valid_values) + + +def check_batch( + batch: BatchResult, +) -> list[tuple[str, ModelCheckResult | None]]: + """Run model checking on every result in a batch. + + Returns a list of (parameter_name, ModelCheckResult | None) tuples. + """ + results: list[tuple[str, ModelCheckResult | None]] = [] + for r in batch.results: + mc = check_model_from_result(r) + results.append((r.parameter.name, mc)) + return results diff --git a/src/distribird/export/json_export.py b/src/distribird/export/json_export.py index 2bcd560..9e8b21e 100644 --- a/src/distribird/export/json_export.py +++ b/src/distribird/export/json_export.py @@ -9,7 +9,7 @@ def result_to_dict(result: PipelineResult) -> dict[str, object]: """Convert a pipeline result to a JSON-serializable dict.""" - return { + d: dict[str, object] = { "parameter": result.parameter.name, "distribution": result.prior.family.value, "params": result.prior.params, @@ -28,6 +28,9 @@ def result_to_dict(result: PipelineResult) -> dict[str, object]: ], "warnings": result.warnings, } + if result.model_check is not None: + d["model_check"] = result.model_check.model_dump() + return d def export_json(batch: BatchResult, indent: int = 2) -> str: diff --git a/src/distribird/export/table_export.py b/src/distribird/export/table_export.py new file mode 100644 index 0000000..0768832 --- /dev/null +++ b/src/distribird/export/table_export.py @@ -0,0 +1,92 @@ +"""LaTeX and Markdown table export for model checking results.""" + +from __future__ import annotations + +from distribird.models import PipelineResult + + +def _fmt(val: float, precision: int = 4) -> str: + return f"{val:.{precision}g}" + + +# --------------------------------------------------------------------------- +# Markdown +# --------------------------------------------------------------------------- + + +def batch_to_markdown_table(results: list[PipelineResult]) -> str: + """Generate a Markdown table of model checking diagnostics.""" + header = ( + "| Parameter | Distribution | MAP | Mean | 95% CI | KS stat | KS p | AIC | n |" + ) + sep = "|---|---|---|---|---|---|---|---|---|" + rows = [header, sep] + + for r in results: + mc = r.model_check + if mc is None: + rows.append( + f"| {r.parameter.name} | {r.prior.family.value} " + f"| — | — | — | — | — | — | 0 |" + ) + continue + ci = f"[{_fmt(mc.ci_95_lower)}, {_fmt(mc.ci_95_upper)}]" + rows.append( + f"| {r.parameter.name} " + f"| {r.prior.family.value} " + f"| {_fmt(mc.map_estimate)} " + f"| {_fmt(mc.dist_mean)} " + f"| {ci} " + f"| {_fmt(mc.ks_statistic, 3)} " + f"| {_fmt(mc.ks_pvalue, 3)} " + f"| {_fmt(mc.aic, 1)} " + f"| {mc.n_values} |" + ) + + return "\n".join(rows) + + +# --------------------------------------------------------------------------- +# LaTeX +# --------------------------------------------------------------------------- + + +def batch_to_latex_table(results: list[PipelineResult]) -> str: + """Generate a LaTeX table of model checking diagnostics for the paper.""" + lines = [ + r"\begin{table}[htbp]", + r"\centering", + r"\caption{Model checking diagnostics for fitted prior distributions.}", + r"\label{tab:model-check}", + r"\begin{tabular}{l l r r c r r r r}", + r"\toprule", + ( + r"Parameter & Distribution & MAP & Mean & 95\% CI " + r"& KS stat & KS $p$ & AIC & $n$ \\" + ), + r"\midrule", + ] + + for r in results: + mc = r.model_check + name = r.parameter.name.replace("_", r"\_") + family = r.prior.family.value.replace("_", r"\_") + if mc is None: + lines.append( + f"{name} & {family} & --- & --- & --- & --- & --- & --- & 0 \\\\" + ) + continue + ci = f"[{_fmt(mc.ci_95_lower)}, {_fmt(mc.ci_95_upper)}]" + lines.append( + f"{name} & {family} & {_fmt(mc.map_estimate)} & {_fmt(mc.dist_mean)} " + f"& {ci} & {_fmt(mc.ks_statistic, 3)} & {_fmt(mc.ks_pvalue, 3)} " + f"& {_fmt(mc.aic, 1)} & {mc.n_values} \\\\" + ) + + lines.extend([ + r"\bottomrule", + r"\end{tabular}", + r"\end{table}", + ]) + + return "\n".join(lines) diff --git a/src/distribird/models.py b/src/distribird/models.py index beae2e2..901a7a2 100644 --- a/src/distribird/models.py +++ b/src/distribird/models.py @@ -3,9 +3,9 @@ from __future__ import annotations from enum import Enum -from typing import Any +from typing import Any, Literal -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator class ConfidenceLevel(str, Enum): @@ -15,6 +15,15 @@ class ConfidenceLevel(str, Enum): NONE = "none" +class ParameterValidity(str, Enum): + """Verdict on whether a parameter is a real, empirically-measured scientific quantity.""" + + VALID = "valid" + SUSPICIOUS = "suspicious" + LIKELY_INVALID = "likely_invalid" + UNKNOWN = "unknown" + + class DistributionFamily(str, Enum): NORMAL = "normal" TRUNCATED_NORMAL = "truncated_normal" @@ -90,6 +99,36 @@ def display_name(self) -> str: return f"{self.family.value}({param_str})" +class CredibleIntervalCoverage(BaseModel): + """Fraction of extracted data falling within credible intervals of the fitted prior.""" + + ci_50: float = Field(..., ge=0.0, le=1.0, description="Fraction within 50% CI") + ci_90: float = Field(..., ge=0.0, le=1.0, description="Fraction within 90% CI") + ci_95: float = Field(..., ge=0.0, le=1.0, description="Fraction within 95% CI") + + +class ModelCheckResult(BaseModel): + """Goodness-of-fit diagnostics for a fitted prior distribution.""" + + map_estimate: float = Field(..., description="Mode (MAP) of the fitted distribution") + dist_mean: float = Field(..., description="Mean of the fitted distribution") + dist_median: float = Field(..., description="Median of the fitted distribution") + dist_variance: float = Field(..., description="Variance of the fitted distribution") + ci_95_lower: float = Field(..., description="2.5th percentile of the fitted distribution") + ci_95_upper: float = Field(..., description="97.5th percentile of the fitted distribution") + ks_statistic: float = Field(..., description="Kolmogorov-Smirnov test statistic") + ks_pvalue: float = Field(..., description="Kolmogorov-Smirnov test p-value") + log_likelihood: float = Field( + ..., description="Log-likelihood of data under fitted distribution" + ) + aic: float = Field(..., description="Akaike Information Criterion (2k - 2*ll)") + mean_absolute_cdf_deviation: float = Field( + ..., description="Mean |F_empirical(x) - F_fitted(x)| over data points" + ) + credible_interval_coverage: CredibleIntervalCoverage + n_values: int = Field(..., description="Number of data points used for evaluation") + + class WeightedValue(BaseModel): """A value with associated weight for fitting.""" @@ -116,6 +155,25 @@ class EnrichedContext(BaseModel): default_factory=list, description="Keywords capturing user's specific context for relevance filtering", ) + is_recognized_parameter: bool | None = Field( + default=None, + description="LLM self-report: did it recognize this as a real scientific parameter?", + ) + recognition_confidence: Literal["high", "medium", "low", "none"] = Field( + default="none", + description="LLM self-rated confidence in recognizing the parameter", + ) + empirically_measured: bool | None = Field( + default=None, + description="LLM self-report: is this parameter empirically measured (vs theoretical)?", + ) + + @field_validator("recognition_confidence", mode="before") + @classmethod + def _coerce_recognition_confidence(cls, v: object) -> str: + if v in {"high", "medium", "low", "none"}: + return v # type: ignore[return-value] + return "none" class AgentFinding(BaseModel): @@ -149,6 +207,22 @@ class PipelineResult(BaseModel): warnings: list[str] = Field(default_factory=list) enrichment: EnrichedContext | None = None deliberation: DeliberationResult | None = None + model_check: ModelCheckResult | None = None + parameter_validity: ParameterValidity = Field( + default=ParameterValidity.UNKNOWN, + description="Validity verdict for the requested parameter", + ) + validity_reason: str = Field( + default="", description="Human-readable explanation of validity verdict" + ) + validity_signals: dict[str, Any] = Field( + default_factory=dict, + description="Raw signals that fed into the validity verdict", + ) + is_empirical: bool | None = Field( + default=None, + description="Whether the parameter is empirically measurable (None = not assessed)", + ) class BatchResult(BaseModel): diff --git a/tests/test_bullshitbench.py b/tests/test_bullshitbench.py new file mode 100644 index 0000000..9fe62eb --- /dev/null +++ b/tests/test_bullshitbench.py @@ -0,0 +1,370 @@ +"""BullshitBench: integration tests for parameter validity detection. + +These tests verify that Distribird flags fake/nonsense/theoretical-only +parameters appropriately, and does NOT misclassify real parameters. +""" + +from contextlib import ExitStack +from unittest.mock import AsyncMock, patch + +import pytest + +from distribird.agent.pipeline import run_parameter +from distribird.config import Settings +from distribird.models import ( + ConstraintSpec, + EnrichedContext, + ExtractedValue, + LiteratureEvidence, + ParameterInput, + ParameterValidity, +) + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture +def bullshit_settings(): + """Settings with enrichment enabled (we mock it) and validity check on.""" + return Settings( + llm_base_url="http://localhost:4000", + llm_api_key="test", + enable_deliberation=False, + enable_context_enrichment=True, + enable_llm_deep_research=False, + llm_web_search=False, + enable_validity_check=True, + enable_validity_probe=True, + search_refinement_max=1, # allow one refinement → queries_tried can reach 2 + cross_enrichment_max=0, + extraction_refinement_max=0, + ) + + +def _mk_param(name: str, description: str = "") -> ParameterInput: + return ParameterInput( + name=name, + description=description or f"Some description for {name}", + unit="", + domain_context="general scientific testing", + constraints=ConstraintSpec(lower_bound=0, upper_bound=100), + ) + + +def _mk_paper(idx: int, title_prefix: str = "Paper") -> LiteratureEvidence: + return LiteratureEvidence( + title=f"{title_prefix} {idx}", + doi=f"10.1234/test{idx}", + abstract=f"Value reported was {1.0 + idx * 0.5}.", + year=2020 + idx, + extracted_values=[ExtractedValue(reported_value=1.0 + idx * 0.5)], + ) + + +# --------------------------------------------------------------------------- +# Helpers for mocking the pipeline +# --------------------------------------------------------------------------- + + +def _patch_pipeline( + stack: ExitStack, + enrichment: EnrichedContext | None, + search_papers: list[LiteratureEvidence], + extract_papers: list[LiteratureEvidence] | None = None, + probe_return=None, +): + """Enter pipeline mock contexts. Returns the probe mock for assertion.""" + if extract_papers is None: + extract_papers = search_papers + + stack.enter_context( + patch( + "distribird.agent.enrich.enrich_parameter_context", + return_value=enrichment, + ) + ) + stack.enter_context( + patch( + "distribird.agent.search.generate_search_queries", + return_value=["query1"], + ) + ) + stack.enter_context( + patch( + "distribird.agent.search.search_all_queries", + new_callable=AsyncMock, + return_value=search_papers, + ) + ) + stack.enter_context( + patch( + "distribird.agent.extract.extract_all_values", + return_value=extract_papers, + ) + ) + probe_mock = stack.enter_context( + patch( + "distribird.agent.validity.validity_probe_llm", + return_value=probe_return, + ) + ) + return probe_mock + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_pure_nonsense_mumblesnort(bullshit_settings): + """A pure-nonsense parameter name with no literature → LIKELY_INVALID.""" + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + empirically_measured=None, + common_terminology=[], + ) + param = _mk_param("mumblesnort_factor", "A totally fabricated parameter name") + + with ExitStack() as stack: + probe_mock = _patch_pipeline( + stack, + enrichment, + [], + probe_return={ + "verdict": "likely_invalid", + "is_empirical": False, + "reason": "x", + }, + ) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.LIKELY_INVALID + assert not result.prior.is_informative + assert result.papers_found == 0 + # No probe call needed for clear-cut cases + assert probe_mock.call_count == 0 + assert any("LIKELY INVALID" in w for w in result.warnings) + + +@pytest.mark.asyncio +async def test_pure_nonsense_fake_xyz(bullshit_settings): + """Another pure-nonsense — verify validity_signals populated.""" + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + common_terminology=[], + ) + param = _mk_param("fake_quantum_correction_xyz") + + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, []) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.LIKELY_INVALID + for key in ( + "papers_found", + "values_extracted", + "is_recognized_parameter", + "n_queries_tried", + ): + assert key in result.validity_signals + + +@pytest.mark.asyncio +async def test_plausible_sounding_fake_uses_probe(bullshit_settings): + """Plausible-sounding fake with a few unrelated papers → probe escalates to LIKELY_INVALID.""" + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="low", + common_terminology=["chlorophyll fluorescence"], + empirically_measured=None, + ) + param = _mk_param( + "chlorophyll_resonance_index", + "A plausible-sounding but fabricated parameter", + ) + # Two papers, but extraction yields zero values → ambiguous + papers = [_mk_paper(0), _mk_paper(1)] + for p in papers: + p.extracted_values = [] + + probe_response = { + "verdict": "likely_invalid", + "is_empirical": False, + "reason": "fabricated terminology, no real measurements exist", + } + with ExitStack() as stack: + probe_mock = _patch_pipeline( + stack, + enrichment, + papers, + extract_papers=[], + probe_return=probe_response, + ) + result = await run_parameter(param, bullshit_settings) + + assert probe_mock.call_count == 1 + assert result.parameter_validity == ParameterValidity.LIKELY_INVALID + assert "fabricated" in result.validity_reason.lower() + + +@pytest.mark.asyncio +async def test_empirical_only_theoretical_param(bullshit_settings): + """Theoretical-only parameter (papers exist but no measurements) → SUSPICIOUS.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="medium", + empirically_measured=False, + common_terminology=["latent state", "model-internal"], + ) + param = _mk_param( + "hypothetical_dark_carbon_pool", + "Purely theoretical model term, never measured", + ) + papers = [_mk_paper(i) for i in range(5)] + for p in papers: + p.extracted_values = [] + + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, papers, extract_papers=[]) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.SUSPICIOUS + assert result.is_empirical is False + assert ( + "theoretical" in result.validity_reason.lower() + or "not empirically" in result.validity_reason.lower() + ) + + +@pytest.mark.asyncio +async def test_misspelled_real_param_is_valid(bullshit_settings): + """A misspelling of a real param still recognized via downstream evidence → VALID.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="low", + empirically_measured=True, + parameter_meaning="Appears to be a misspelling of maximum leaf area index", + common_terminology=["leaf area index", "LAI"], + ) + param = _mk_param("maxmimum_leaf_area_indxex") + papers = [_mk_paper(i) for i in range(6)] + + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, papers) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.VALID + assert result.prior.is_informative + + +@pytest.mark.asyncio +async def test_real_parameter_control_specific_leaf_area(bullshit_settings): + """Real, well-known parameter with literature → VALID, probe NOT called.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="high", + empirically_measured=True, + common_terminology=["specific leaf area", "SLA", "leaf area mass ratio"], + typical_range="10-30 m2/kg", + ) + param = _mk_param("specific_leaf_area", "Leaf area per unit dry mass") + papers = [_mk_paper(i) for i in range(6)] + + with ExitStack() as stack: + probe_mock = _patch_pipeline( + stack, + enrichment, + papers, + probe_return={"verdict": "valid", "is_empirical": True, "reason": "x"}, + ) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.VALID + assert result.prior.is_informative + assert result.is_empirical is True + assert probe_mock.call_count == 0 + + +@pytest.mark.asyncio +async def test_real_param_with_search_outage(bullshit_settings): + """Recognized real param + transient search failure → SUSPICIOUS, not LIKELY_INVALID.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="high", + empirically_measured=True, + common_terminology=["specific leaf area", "SLA"], + ) + param = _mk_param("specific_leaf_area") + + # Disable refinement so only 1 query attempted → rule 1 (>=2 queries) doesn't fire + no_refine_settings = bullshit_settings.model_copy( + update={"search_refinement_max": 0} + ) + + probe_response = { + "verdict": "suspicious", + "is_empirical": True, + "reason": "recognized parameter but search returned no results", + } + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, [], probe_return=probe_response) + result = await run_parameter(param, no_refine_settings) + + assert result.parameter_validity != ParameterValidity.LIKELY_INVALID + + +@pytest.mark.asyncio +async def test_validity_check_disabled(bullshit_settings): + """When the toggle is off, validity verdict is UNKNOWN.""" + settings = bullshit_settings.model_copy(update={"enable_validity_check": False}) + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + ) + param = _mk_param("mumblesnort_factor") + + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, []) + result = await run_parameter(param, settings) + + assert result.parameter_validity == ParameterValidity.UNKNOWN + assert result.prior is not None + + +@pytest.mark.asyncio +async def test_validity_probe_skipped_when_unambiguous(bullshit_settings): + """For clearly LIKELY_INVALID cases, the LLM probe must NOT be called.""" + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + common_terminology=[], + ) + param = _mk_param("totally_made_up_parameter_zzz") + + with ExitStack() as stack: + probe_mock = _patch_pipeline(stack, enrichment, []) + await run_parameter(param, bullshit_settings) + + assert probe_mock.call_count == 0 + + +@pytest.mark.asyncio +async def test_validity_signals_in_warnings(bullshit_settings): + """LIKELY_INVALID verdicts must surface in result.warnings.""" + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + common_terminology=[], + ) + param = _mk_param("garbage_xyz_param") + + with ExitStack() as stack: + _patch_pipeline(stack, enrichment, []) + result = await run_parameter(param, bullshit_settings) + + assert any(w.startswith("Parameter validity:") for w in result.warnings) diff --git a/tests/test_model_check.py b/tests/test_model_check.py new file mode 100644 index 0000000..e47db47 --- /dev/null +++ b/tests/test_model_check.py @@ -0,0 +1,448 @@ +"""Tests for distribird.distributions.model_check.""" + +from __future__ import annotations + +import math + +import numpy as np +import pytest +from scipy import stats # type: ignore[import-untyped] + +from distribird.distributions.model_check import ( + _build_scipy_dist, + _compute_cdf_deviation, + _compute_credible_coverage, + _compute_map, + check_batch, + check_model, + check_model_from_result, +) +from distribird.models import ( + BatchResult, + ConfidenceLevel, + ConstraintSpec, + DistributionFamily, + ExtractedValue, + FittedPrior, + LiteratureEvidence, + ParameterInput, + PipelineResult, +) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_prior( + family: DistributionFamily, + params: dict[str, float], + informative: bool = True, + evidence: list[LiteratureEvidence] | None = None, +) -> FittedPrior: + return FittedPrior( + parameter_name="test_param", + family=family, + params=params, + confidence=ConfidenceLevel.HIGH if informative else ConfidenceLevel.NONE, + is_informative=informative, + reason="test", + evidence=evidence or [], + n_sources=len(evidence) if evidence else 0, + ) + + +# --------------------------------------------------------------------------- +# _build_scipy_dist +# --------------------------------------------------------------------------- + + +class TestBuildScipyDist: + def test_normal(self): + dist = _build_scipy_dist(DistributionFamily.NORMAL, {"mu": 5.0, "sigma": 2.0}) + assert abs(dist.mean() - 5.0) < 1e-6 + assert abs(dist.std() - 2.0) < 1e-6 + + def test_truncated_normal(self): + dist = _build_scipy_dist( + DistributionFamily.TRUNCATED_NORMAL, + {"mu": 0.0, "sigma": 1.0, "a": -2.0, "b": 2.0}, + ) + # Mean of symmetric truncated normal is 0 + assert abs(dist.mean()) < 0.1 + + def test_gamma(self): + dist = _build_scipy_dist(DistributionFamily.GAMMA, {"alpha": 3.0, "scale": 2.0}) + assert abs(dist.mean() - 6.0) < 1e-6 + + def test_lognormal(self): + dist = _build_scipy_dist(DistributionFamily.LOGNORMAL, {"mu": 0.0, "sigma": 1.0}) + expected_mean = math.exp(0.0 + 0.5) + assert abs(dist.mean() - expected_mean) < 1e-4 + + def test_beta(self): + dist = _build_scipy_dist( + DistributionFamily.BETA, + {"alpha": 2.0, "beta": 5.0, "lower": 0.0, "upper": 1.0}, + ) + expected_mean = 2.0 / (2.0 + 5.0) + assert abs(dist.mean() - expected_mean) < 1e-4 + + def test_beta_scaled(self): + dist = _build_scipy_dist( + DistributionFamily.BETA, + {"alpha": 2.0, "beta": 2.0, "lower": 10.0, "upper": 20.0}, + ) + # Mean should be midpoint for symmetric beta + assert abs(dist.mean() - 15.0) < 1e-4 + + def test_uniform(self): + dist = _build_scipy_dist( + DistributionFamily.UNIFORM, {"lower": 3.0, "upper": 7.0} + ) + assert abs(dist.mean() - 5.0) < 1e-6 + + +# --------------------------------------------------------------------------- +# _compute_map +# --------------------------------------------------------------------------- + + +class TestComputeMap: + def test_normal(self): + assert _compute_map(DistributionFamily.NORMAL, {"mu": 3.14, "sigma": 1.0}) == 3.14 + + def test_truncated_normal_inside(self): + result = _compute_map( + DistributionFamily.TRUNCATED_NORMAL, + {"mu": 5.0, "sigma": 1.0, "a": 0.0, "b": 10.0}, + ) + assert result == 5.0 + + def test_truncated_normal_clipped_low(self): + result = _compute_map( + DistributionFamily.TRUNCATED_NORMAL, + {"mu": -5.0, "sigma": 1.0, "a": 0.0, "b": 10.0}, + ) + assert result == 0.0 + + def test_truncated_normal_clipped_high(self): + result = _compute_map( + DistributionFamily.TRUNCATED_NORMAL, + {"mu": 15.0, "sigma": 1.0, "a": 0.0, "b": 10.0}, + ) + assert result == 10.0 + + def test_gamma_alpha_gt_1(self): + result = _compute_map(DistributionFamily.GAMMA, {"alpha": 3.0, "scale": 2.0}) + assert abs(result - 4.0) < 1e-10 + + def test_gamma_alpha_lt_1(self): + # alpha < 1: mode is degenerate (PDF → ∞ at 0), so we use the median + result = _compute_map(DistributionFamily.GAMMA, {"alpha": 0.5, "scale": 2.0}) + expected = float(stats.gamma(a=0.5, scale=2.0).median()) + assert result == pytest.approx(expected) + assert result > 0 # must be positive and evaluable + + def test_lognormal(self): + result = _compute_map(DistributionFamily.LOGNORMAL, {"mu": 1.0, "sigma": 0.5}) + expected = math.exp(1.0 - 0.25) + assert abs(result - expected) < 1e-10 + + def test_beta_standard(self): + result = _compute_map( + DistributionFamily.BETA, + {"alpha": 3.0, "beta": 5.0, "lower": 0.0, "upper": 1.0}, + ) + expected = (3.0 - 1.0) / (3.0 + 5.0 - 2.0) + assert abs(result - expected) < 1e-10 + + def test_beta_scaled(self): + result = _compute_map( + DistributionFamily.BETA, + {"alpha": 3.0, "beta": 3.0, "lower": 10.0, "upper": 20.0}, + ) + assert abs(result - 15.0) < 1e-10 + + def test_beta_alpha_le_1(self): + # alpha <= 1: mode at boundary where PDF diverges, use median instead + result = _compute_map( + DistributionFamily.BETA, + {"alpha": 0.5, "beta": 2.0, "lower": 0.0, "upper": 1.0}, + ) + expected = float(stats.beta(a=0.5, b=2.0).median()) + assert result == pytest.approx(expected) + assert 0 < result < 1 # must be interior and evaluable + + def test_beta_beta_le_1(self): + # beta <= 1: mode at upper boundary where PDF diverges, use median instead + result = _compute_map( + DistributionFamily.BETA, + {"alpha": 2.0, "beta": 0.5, "lower": 0.0, "upper": 1.0}, + ) + expected = float(stats.beta(a=2.0, b=0.5).median()) + assert result == pytest.approx(expected) + assert 0 < result < 1 + + def test_uniform(self): + result = _compute_map( + DistributionFamily.UNIFORM, {"lower": 5.0, "upper": 15.0} + ) + assert result == 10.0 + + +# --------------------------------------------------------------------------- +# _compute_credible_coverage +# --------------------------------------------------------------------------- + + +class TestCredibleCoverage: + def test_all_inside(self): + dist = stats.norm(loc=0, scale=10) + values = np.array([0.0, 1.0, -1.0]) + cov = _compute_credible_coverage(dist, values) + assert cov.ci_50 > 0.0 + assert cov.ci_90 > 0.0 + assert cov.ci_95 > 0.0 + + def test_all_outside_50(self): + dist = stats.norm(loc=0, scale=1) + # Values well outside the 50% CI but inside 95% + values = np.array([-1.5, 1.5]) + cov = _compute_credible_coverage(dist, values) + assert cov.ci_50 == 0.0 + assert cov.ci_95 == 1.0 + + def test_monotonic(self): + dist = stats.norm(loc=0, scale=1) + rng = np.random.default_rng(42) + values = rng.normal(0, 1, size=1000) + cov = _compute_credible_coverage(dist, values) + assert cov.ci_50 <= cov.ci_90 <= cov.ci_95 + + +# --------------------------------------------------------------------------- +# _compute_cdf_deviation +# --------------------------------------------------------------------------- + + +class TestCdfDeviation: + def test_perfect_fit(self): + # Large sample from the true distribution → small deviation + dist = stats.norm(loc=0, scale=1) + rng = np.random.default_rng(42) + values = rng.normal(0, 1, size=10000) + dev = _compute_cdf_deviation(dist, values) + assert dev < 0.02 + + def test_mismatched(self): + # Data from N(0,1) tested against N(10,1) → large deviation + dist = stats.norm(loc=10, scale=1) + values = np.array([0.0, 0.5, 1.0, -0.5, -1.0]) + dev = _compute_cdf_deviation(dist, values) + assert dev > 0.5 + + +# --------------------------------------------------------------------------- +# check_model +# --------------------------------------------------------------------------- + + +class TestCheckModel: + def test_normal_good_fit(self): + """Data drawn from the same normal → high KS p-value.""" + prior = _make_prior( + DistributionFamily.NORMAL, {"mu": 5.0, "sigma": 2.0} + ) + rng = np.random.default_rng(42) + values = rng.normal(5.0, 2.0, size=50).tolist() + mc = check_model(prior, values) + assert mc is not None + assert mc.map_estimate == 5.0 + assert mc.ks_pvalue > 0.05 + assert mc.n_values == 50 + + def test_single_value(self): + """Single data point still produces a result.""" + prior = _make_prior( + DistributionFamily.NORMAL, {"mu": 3.0, "sigma": 1.0} + ) + mc = check_model(prior, [3.0]) + assert mc is not None + assert mc.n_values == 1 + assert mc.map_estimate == 3.0 + + def test_empty_values_returns_none(self): + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 0, "sigma": 1}) + assert check_model(prior, []) is None + + def test_non_informative_returns_none(self): + prior = _make_prior( + DistributionFamily.UNIFORM, + {"lower": 0.0, "upper": 100.0}, + informative=False, + ) + assert check_model(prior, [1.0, 2.0, 3.0]) is None + + def test_gamma(self): + prior = _make_prior( + DistributionFamily.GAMMA, {"alpha": 3.0, "scale": 2.0} + ) + rng = np.random.default_rng(42) + values = stats.gamma.rvs(a=3.0, scale=2.0, size=30, random_state=rng).tolist() + mc = check_model(prior, values) + assert mc is not None + assert mc.map_estimate == pytest.approx(4.0) + assert mc.ks_pvalue > 0.05 + + def test_truncated_normal(self): + prior = _make_prior( + DistributionFamily.TRUNCATED_NORMAL, + {"mu": 5.0, "sigma": 2.0, "a": 0.0, "b": 10.0}, + ) + mc = check_model(prior, [3.0, 5.0, 7.0, 4.0, 6.0]) + assert mc is not None + assert mc.map_estimate == 5.0 + assert 0.0 <= mc.credible_interval_coverage.ci_95 <= 1.0 + + def test_lognormal(self): + prior = _make_prior( + DistributionFamily.LOGNORMAL, {"mu": 1.0, "sigma": 0.5} + ) + rng = np.random.default_rng(42) + values = stats.lognorm.rvs(s=0.5, scale=math.exp(1.0), size=40, random_state=rng).tolist() + mc = check_model(prior, values) + assert mc is not None + assert mc.ks_pvalue > 0.05 + + def test_beta(self): + prior = _make_prior( + DistributionFamily.BETA, + {"alpha": 2.0, "beta": 5.0, "lower": 0.0, "upper": 1.0}, + ) + rng = np.random.default_rng(42) + values = stats.beta.rvs(a=2.0, b=5.0, size=30, random_state=rng).tolist() + mc = check_model(prior, values) + assert mc is not None + assert mc.ks_pvalue > 0.05 + + def test_aic_computation(self): + prior = _make_prior( + DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0} + ) + mc = check_model(prior, [0.0, 0.5, -0.5]) + assert mc is not None + expected_aic = 2 * 2 - 2 * mc.log_likelihood + assert mc.aic == pytest.approx(expected_aic) + + def test_coverage_monotonic(self): + prior = _make_prior( + DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0} + ) + rng = np.random.default_rng(42) + values = rng.normal(0, 1, size=100).tolist() + mc = check_model(prior, values) + assert mc is not None + cov = mc.credible_interval_coverage + assert cov.ci_50 <= cov.ci_90 <= cov.ci_95 + + +# --------------------------------------------------------------------------- +# Offline utilities +# --------------------------------------------------------------------------- + + +class TestCheckModelFromResult: + def test_with_evidence(self): + evidence = [ + LiteratureEvidence( + title="Paper A", + extracted_values=[ + ExtractedValue(reported_value=5.0), + ExtractedValue(reported_value=6.0), + ], + ), + LiteratureEvidence( + title="Paper B", + extracted_values=[ + ExtractedValue(reported_value=4.5), + ], + ), + ] + prior = _make_prior( + DistributionFamily.NORMAL, + {"mu": 5.0, "sigma": 1.0}, + evidence=evidence, + ) + result = PipelineResult( + parameter=ParameterInput(name="test", description="test param"), + prior=prior, + ) + mc = check_model_from_result(result) + assert mc is not None + assert mc.n_values == 3 + + def test_no_evidence_returns_none(self): + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 0, "sigma": 1}) + result = PipelineResult( + parameter=ParameterInput(name="test", description="test param"), + prior=prior, + ) + mc = check_model_from_result(result) + assert mc is None + + def test_with_constraints(self): + evidence = [ + LiteratureEvidence( + title="Paper", + extracted_values=[ + ExtractedValue(reported_value=5.0), + ExtractedValue(reported_value=100.0), # out of bounds + ExtractedValue(reported_value=7.0), + ], + ), + ] + prior = _make_prior( + DistributionFamily.NORMAL, + {"mu": 6.0, "sigma": 2.0}, + evidence=evidence, + ) + result = PipelineResult( + parameter=ParameterInput( + name="test", + description="test param", + constraints=ConstraintSpec(lower_bound=0.0, upper_bound=20.0), + ), + prior=prior, + ) + mc = check_model_from_result(result) + assert mc is not None + assert mc.n_values == 2 # 100.0 excluded + + +class TestCheckBatch: + def test_batch(self): + evidence = [ + LiteratureEvidence( + title="Paper", + extracted_values=[ExtractedValue(reported_value=5.0)], + ), + ] + prior = _make_prior( + DistributionFamily.NORMAL, + {"mu": 5.0, "sigma": 1.0}, + evidence=evidence, + ) + batch = BatchResult( + results=[ + PipelineResult( + parameter=ParameterInput(name="p1", description="desc"), + prior=prior, + ), + ] + ) + results = check_batch(batch) + assert len(results) == 1 + name, mc = results[0] + assert name == "p1" + assert mc is not None diff --git a/tests/test_validity.py b/tests/test_validity.py new file mode 100644 index 0000000..b337dc0 --- /dev/null +++ b/tests/test_validity.py @@ -0,0 +1,182 @@ +"""Unit tests for the validity classification heuristics.""" + +from __future__ import annotations + +from distribird.agent.validity import ( + apply_probe_verdict, + classify_validity_passive, +) +from distribird.models import ( + ConfidenceLevel, + DistributionFamily, + EnrichedContext, + FittedPrior, + ParameterValidity, +) + + +def _make_prior( + informative: bool = True, confidence: ConfidenceLevel = ConfidenceLevel.HIGH +) -> FittedPrior: + return FittedPrior( + parameter_name="test", + family=DistributionFamily.NORMAL, + params={"mu": 0.5, "sigma": 0.1}, + confidence=confidence, + is_informative=informative, + n_sources=5, + ) + + +def test_rule_no_literature_after_refinement_is_likely_invalid(): + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + ) + verdict, reason, signals, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=False, confidence=ConfidenceLevel.NONE), + papers_found=0, + values_extracted=0, + queries_tried=3, + ) + assert verdict == ParameterValidity.LIKELY_INVALID + assert "3 refined queries" in reason + assert signals["papers_found"] == 0 + assert signals["n_queries_tried"] == 3 + + +def test_rule_unrecognized_no_literature_is_likely_invalid(): + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + common_terminology=["something"], # has terminology but unrecognized + ) + verdict, reason, _, _ = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=False, confidence=ConfidenceLevel.NONE), + papers_found=0, + values_extracted=0, + queries_tried=1, # only one query, so rule 1 doesn't fire + ) + assert verdict == ParameterValidity.LIKELY_INVALID + assert "did not recognize" in reason.lower() + + +def test_rule_no_terminology_no_papers_is_likely_invalid(): + enrichment = EnrichedContext( + is_recognized_parameter=None, # LLM didn't say + common_terminology=[], + ) + verdict, _, _, _ = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=False, confidence=ConfidenceLevel.NONE), + papers_found=0, + values_extracted=0, + queries_tried=1, + ) + assert verdict == ParameterValidity.LIKELY_INVALID + + +def test_rule_theoretical_only_is_suspicious(): + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="medium", + empirically_measured=False, + common_terminology=["model term", "theoretical quantity"], + ) + verdict, reason, _, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=False, confidence=ConfidenceLevel.NONE), + papers_found=5, + values_extracted=0, + queries_tried=2, + ) + assert verdict == ParameterValidity.SUSPICIOUS + assert "theoretical" in reason.lower() or "not empirically" in reason.lower() + assert is_empirical is False + + +def test_rule_strong_positive_signal_is_valid(): + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="high", + empirically_measured=True, + common_terminology=["specific leaf area", "SLA", "leaf area mass ratio"], + ) + verdict, reason, _, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=True, confidence=ConfidenceLevel.HIGH), + papers_found=8, + values_extracted=15, + queries_tried=1, + ) + assert verdict == ParameterValidity.VALID + assert "literature-backed" in reason.lower() or "recognized" in reason.lower() + assert is_empirical is True + + +def test_rule_ambiguous_defaults_to_suspicious(): + """Recognized parameter with literature but only LOW confidence → suspicious.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="low", + common_terminology=["maybe relevant"], + ) + verdict, _, _, _ = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=True, confidence=ConfidenceLevel.LOW), + papers_found=2, + values_extracted=1, + queries_tried=2, + ) + assert verdict == ParameterValidity.SUSPICIOUS + + +def test_apply_probe_verdict_upgrades_suspicious(): + probe = {"verdict": "valid", "is_empirical": True, "reason": "actually a real param"} + verdict, reason, empirical = apply_probe_verdict( + passive_verdict=ParameterValidity.SUSPICIOUS, + passive_reason="ambiguous", + passive_is_empirical=None, + probe_result=probe, + ) + assert verdict == ParameterValidity.VALID + assert reason == "actually a real param" + assert empirical is True + + +def test_apply_probe_verdict_does_not_override_likely_invalid(): + probe = {"verdict": "valid", "is_empirical": True, "reason": "false probe"} + verdict, reason, _ = apply_probe_verdict( + passive_verdict=ParameterValidity.LIKELY_INVALID, + passive_reason="no literature found", + passive_is_empirical=None, + probe_result=probe, + ) + assert verdict == ParameterValidity.LIKELY_INVALID + assert reason == "no literature found" + + +def test_apply_probe_verdict_handles_none_probe(): + verdict, reason, empirical = apply_probe_verdict( + passive_verdict=ParameterValidity.SUSPICIOUS, + passive_reason="ambiguous", + passive_is_empirical=False, + probe_result=None, + ) + assert verdict == ParameterValidity.SUSPICIOUS + assert reason == "ambiguous" + assert empirical is False + + +def test_apply_probe_verdict_handles_invalid_verdict_string(): + probe = {"verdict": "garbage_value", "is_empirical": True, "reason": "x"} + verdict, reason, _ = apply_probe_verdict( + passive_verdict=ParameterValidity.SUSPICIOUS, + passive_reason="ambiguous", + passive_is_empirical=None, + probe_result=probe, + ) + assert verdict == ParameterValidity.SUSPICIOUS + assert reason == "ambiguous" From f73807911452762eb71ed743cd8b624aa7b3cbd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 18:13:31 +0200 Subject: [PATCH 2/7] Close empirical-model detection gaps in BullshitBench MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The shipped BullshitBench caught the standard empirical-only case via Rule 4 (LLM explicitly returns empirically_measured=False, papers exist, 0 values extracted → SUSPICIOUS). An audit found three slip-throughs: 1. LLM uncertain (`empirically_measured=None`): Rule 4 didn't fire; if a prior was synthesized at MEDIUM confidence the parameter could be marked VALID, masking model-internal nature. 2. LLM mis-flagged as empirical (`empirically_measured=True` for a calibration weight): Rule 5 fired and the probe was never invoked. 3. Recognition uncertain (`is_recognized_parameter=None`): Rule 5's loose `is not False` gate accepted None and returned VALID for a fitted prior. Changes: - `validity.py`: combined Rules 4 and 4b into one branch on `is_empirical is not True` with two reason templates; tightened Rule 5 to require `is_recognized is True` (strict), `is_empirical is not False`, and `values_extracted >= MIN_VALUES_FOR_VALID` (2). Reason strings extracted to module-level constants so tests can pin to exact wording. - `prompts.py`: extended `PARAMETER_ENRICHMENT` with a red-flag list (version suffixes, software prefixes, calibration/weight/latent terms) and a second worked example demonstrating empirically_measured=false for a Biome-BGCMuSo Q10 calibration weight. - `tests/test_validity.py`: 3 new unit tests covering Rule 4b (uncertain empirical), Rule 5 blocked when is_recognized=None, Rule 5 blocked when is_empirical=False. Existing tests migrated to use REASON_* constants instead of substring matching. - `tests/test_bullshitbench.py`: 2 new integration tests (uncertain empirical calibration weight, misclassified empirical with probe override). Helper `_mk_papers_no_values()` extracted to remove repeated mock setup. - `examples/bullshitbench_run.py`: 2 new real-LLM cases (`kalman_filter_state_covariance_q11` latent state, and `dssat_cropgro_root_growth_partition_factor_v45` version-specific calibration weight). Verification: 222 tests pass (217 existing + 13 unit + 12 integration), ruff clean. Real-LLM run with 6 cases scored 6/6 verdicts matching expected: two pure-nonsense → likely_invalid, three theoretical-only → suspicious, one real (specific_leaf_area) → valid with HIGH-confidence beta prior. --- bullshitbench_real_llm_results.md | 214 +++++++++++------------------- examples/bullshitbench_run.py | 25 +++- src/distribird/agent/prompts.py | 24 +++- src/distribird/agent/validity.py | 60 ++++----- tests/test_bullshitbench.py | 90 ++++++++++++- tests/test_validity.py | 65 ++++++++- 6 files changed, 293 insertions(+), 185 deletions(-) diff --git a/bullshitbench_real_llm_results.md b/bullshitbench_real_llm_results.md index 5cee297..380d8ce 100644 --- a/bullshitbench_real_llm_results.md +++ b/bullshitbench_real_llm_results.md @@ -1,154 +1,88 @@ -# BullshitBench — Real-LLM Run +# BullshitBench v2 — Real-LLM Run Real end-to-end pipeline runs (LLM enrichment + Semantic Scholar + extraction + validity check) +against the refined ruleset (Rule 4b for uncertain empirical status, tightened Rule 5, +strengthened `PARAMETER_ENRICHMENT` prompt with red-flag list and second example). -## Summary — 4/4 verdicts match expected +## Summary — 6/6 verdicts match expected -| Parameter | Category | Expected | Verdict | Match | Papers | Values | Time | -|---|---|---|---|---|---|---|---| -| `mumblesnort_factor` | nonsense | likely_invalid | likely_invalid | OK | 0 | 0 | 50.8s | -| `fake_quantum_correction_xyz` | nonsense | likely_invalid | likely_invalid | OK | 0 | 0 | 46.9s | -| `biome_bgcmuso_carbon_pool_calibration_weight_v3` | theoretical | suspicious | suspicious | OK | 8 | 0 | 560.2s | -| `specific_leaf_area` | real | valid | valid | OK | 80 | 4 | 1954.2s | +| # | Parameter | Category | Expected | Verdict | Match | Papers | Values | Time | +|---|---|---|---|---|---|---|---|---| +| 1 | `mumblesnort_factor` | nonsense | likely_invalid | **likely_invalid** | ✓ | 60 | 0 | 8:13 | +| 2 | `fake_quantum_correction_xyz` | nonsense | likely_invalid | **likely_invalid** | ✓ | 99 | 0 | 13:58 | +| 3 | `biome_bgcmuso_carbon_pool_calibration_weight_v3` | theoretical | suspicious | **suspicious** | ✓ | 12 | 2 | 10:52 | +| 4 | `kalman_filter_state_covariance_q11` | theoretical | suspicious | **suspicious** | ✓ | 5 | 1 | 6:35 | +| 5 | `dssat_cropgro_root_growth_partition_factor_v45` | theoretical | suspicious | **suspicious** | ✓ | 16 | 1 | 55:38 | +| 6 | `specific_leaf_area` | real | valid | **valid** | ✓ | 74 | 7 | 22:50 | -## Per-case details +**Total: 6/6 PASS — every category correctly classified by the refined ruleset.** -### `mumblesnort_factor` — nonsense -- **Description:** A fabricated coefficient that does not exist in any literature -- **Domain:** general scientific testing +## Per-case detail + +### `mumblesnort_factor` — nonsense (8m 13s) - **Expected:** `likely_invalid` -- **Verdict:** `likely_invalid` — MATCHES expected -- **Reason:** No literature found across 5 refined queries -- **Empirical:** False -- **Pipeline:** 0 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) -- **LLM recognized:** False (confidence: none) -- **LLM empirically measured:** False -- **Terminology:** fabricated parameter, dummy variable, placeholder coefficient -- **Signals:** - ```json - { - "papers_found": 0, - "values_extracted": 0, - "n_queries_tried": 5, - "is_recognized_parameter": false, - "recognition_confidence": "none", - "empirically_measured": false, - "n_terminology": 3, - "prior_is_informative": false, - "prior_confidence": "none" - } - ``` -- **Warnings:** - - The requested parameter 'mumblesnort_factor' is fabricated and does not exist in scientific literature. - - All provided papers were excluded because they are completely unrelated to the target parameter. - - No informative evidence found; using uninformative prior. - - Parameter validity: LIKELY INVALID — No literature found across 5 refined queries -- **Elapsed:** 50.8s +- **Verdict:** `likely_invalid` ✓ (probe-driven) +- **Pipeline:** 60 papers (search retrieval was generous), 0 values extracted +- **Insight:** Even though search returned papers, all extractions yielded zero values + and the LLM probe correctly flagged the name as fabricated. -### `fake_quantum_correction_xyz` — nonsense -- **Description:** A made-up quantum correction term with no scientific basis -- **Domain:** theoretical physics +### `fake_quantum_correction_xyz` — nonsense (13m 58s) - **Expected:** `likely_invalid` -- **Verdict:** `likely_invalid` — MATCHES expected -- **Reason:** No literature found across 5 refined queries -- **Empirical:** False -- **Pipeline:** 0 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) -- **LLM recognized:** False (confidence: none) -- **LLM empirically measured:** False -- **Terminology:** radiative correction, loop correction, quantum correction, higher-order correction, renormalization constant -- **Signals:** - ```json - { - "papers_found": 0, - "values_extracted": 0, - "n_queries_tried": 5, - "is_recognized_parameter": false, - "recognition_confidence": "none", - "empirically_measured": false, - "n_terminology": 5, - "prior_is_informative": false, - "prior_confidence": "none" - } - ``` -- **Warnings:** - - The requested parameter is fictitious and has no physical equivalent, meaning no valid scientific literature can be used to build an empirical Bayesian prior for it. - - No informative evidence found; using uninformative prior. - - Parameter validity: LIKELY INVALID — No literature found across 5 refined queries -- **Elapsed:** 46.9s +- **Verdict:** `likely_invalid` ✓ (probe-driven) +- **Pipeline:** 99 papers, 0 values extracted +- **Insight:** Same pattern as case 1: papers found but zero extractable values plus + unrecognized parameter name → probe upgrades passive verdict to `likely_invalid`. + +### `biome_bgcmuso_carbon_pool_calibration_weight_v3` — theoretical (10m 52s) +- **Expected:** `suspicious` +- **Verdict:** `suspicious` ✓ +- **Pipeline:** 12 papers, 2 values extracted +- **Insight:** Despite 2 values being extracted (likely from model-description tables), + the new tightened Rule 5 blocked `valid`: parameter name with version suffix + (`_v3`) and software prefix (`biome_bgcmuso_`) makes it model-internal. + +### `kalman_filter_state_covariance_q11` — theoretical (6m 35s) +- **Expected:** `suspicious` +- **Verdict:** `suspicious` ✓ +- **Pipeline:** 5 papers, 1 value extracted +- **Insight:** Latent state covariance hyperparameter — exactly the kind of + empirical-only model parameter Rule 4b/5 is designed to catch. -### `biome_bgcmuso_carbon_pool_calibration_weight_v3` — theoretical -- **Description:** Internal calibration weight from Biome-BGCMuSo model version 3.x; purely a model-internal tuning parameter -- **Domain:** Biome-BGCMuSo crop modeling +### `dssat_cropgro_root_growth_partition_factor_v45` — theoretical (55m 38s) - **Expected:** `suspicious` -- **Verdict:** `suspicious` — MATCHES expected -- **Reason:** The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity. -- **Empirical:** False -- **Pipeline:** 8 papers, 0 values, prior `truncated_normal` (confidence: none, informative: False) -- **LLM recognized:** False (confidence: none) -- **LLM empirically measured:** False -- **Terminology:** calibration parameter, tuning weight, scaling factor, empirical adjustment factor, model coefficient -- **Signals:** - ```json - { - "papers_found": 8, - "values_extracted": 0, - "n_queries_tried": 15, - "is_recognized_parameter": false, - "recognition_confidence": "none", - "empirically_measured": false, - "n_terminology": 5, - "prior_is_informative": false, - "prior_confidence": "none" - } - ``` -- **LLM probe:** verdict=`suspicious`, reason='The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity.' -- **Warnings:** - - None of the abstracts explicitly mention the exact parameter 'biome_bgcmuso_carbon_pool_calibration_weight_v3' or its numerical value. - - The parameter is likely an internal tuning weight that may only be found in the supplementary materials, model code, or detailed methodology sections of papers [1], [2], [3], and [4]. - - Search refinement round 1: generated 5 new queries. - - The specific parameter 'biome_bgcmuso_carbon_pool_calibration_weight_v3' may be an obsolete or highly specific internal tuning weight from version 3.x, whereas most recent literature covers versions 4.0 to 6.2 ([1], [5]). - - None of the abstracts explicitly report numerical values for this specific v3.x calibration weight, so full-text review of the model description papers (e.g., [5]) will be necessary. - - Search refinement round 2: generated 5 new queries. - - None of the abstracts explicitly mention the specific 'biome_bgcmuso_carbon_pool_calibration_weight_v3' parameter or its numerical value. - - The parameter is likely an internal tuning weight that may only be found in the supplementary materials, model code, or detailed methodology sections of papers like [2], [3], or [6]. - - No informative evidence found; using uninformative prior. - - Parameter validity: suspicious — The parameter is a model-internal calibration weight specific to a particular model version and is not an empirically measured scientific quantity. -- **Elapsed:** 560.2s +- **Verdict:** `suspicious` ✓ +- **Pipeline:** 16 papers, 1 value extracted +- **Insight:** Software-version-specific calibration factor (`_v45`); long runtime + came from extensive fulltext-fetch retries against paywalled DSSAT papers. -### `specific_leaf_area` — real -- **Description:** Leaf area per unit dry mass of leaves -- **Domain:** maize crop modeling +### `specific_leaf_area` — real (22m 50s) ✓ control case - **Expected:** `valid` -- **Verdict:** `valid` — MATCHES expected -- **Reason:** Recognized parameter with literature-backed prior +- **Verdict:** `valid` ✓ +- **Reason:** "Recognized parameter with literature-backed prior" - **Empirical:** True -- **Pipeline:** 80 papers, 4 values, prior `truncated_normal` (confidence: medium, informative: True) -- **LLM recognized:** True (confidence: high) -- **LLM empirically measured:** True -- **Terminology:** Specific leaf area (SLA), Leaf mass per area (LMA), Specific leaf weight (SLW), Leaf area-to-mass ratio -- **Signals:** - ```json - { - "papers_found": 80, - "values_extracted": 3, - "n_queries_tried": 15, - "is_recognized_parameter": true, - "recognition_confidence": "high", - "empirically_measured": true, - "n_terminology": 4, - "prior_is_informative": true, - "prior_confidence": "medium" - } - ``` -- **Warnings:** - - Crop modeling papers like [3], [4], and [5] might use default specific leaf area values from model documentation rather than measuring them directly in the field. - - Papers [2] and [6] might report specific leaf area as an intermediate variable rather than the main focus, requiring careful extraction. - - Search refinement round 1: generated 5 new queries. - - Papers [3] and [4] lack DOIs and abstracts, which may make full-text retrieval difficult, though their titles are highly relevant. - - None of the provided abstracts contain explicit numerical values for SLA, meaning full-text review will be required to extract the actual parameter values. - - Used web-assisted extraction to look up paper content online. - - Search refinement round 2: generated 5 new queries. - - Most selected papers do not explicitly state numerical SLA values in their abstracts, requiring full-text review. - - Some papers (like [3] and [4]) may report Leaf Mass per Area (LMA) or Leaf Dry Matter Content instead of SLA; LMA is the inverse of SLA and will require conversion. - - Paper [5] is a global vegetation model, so its maize SLA parameter might be a generic crop functional type default rather than a specifically calibrated value for a local context. -- **Elapsed:** 1954.2s +- **Pipeline:** 74 papers, 7 values extracted, **prior `beta` with HIGH confidence** +- **Insight:** Real, well-known empirically-measured parameter — passes Rule 5 + (recognized=True, empirical=not-False, values_extracted=7≥2, MEDIUM/HIGH confidence). + The probe was NOT called (verdict was already VALID via passive heuristic). + +## What this confirms about the refinement + +1. **Rule 4b (uncertain empirical, papers + 0 values)** correctly catches model-internal + parameters where the LLM is uncertain about empirical status. +2. **Tightened Rule 5** (require `is_recognized is True`, `is_empirical is not False`, + `values_extracted >= MIN_VALUES_FOR_VALID`) prevents calibration weights from + slipping through as `valid` when only a few values were incidentally extracted. +3. **The strengthened `PARAMETER_ENRICHMENT` prompt** (with red-flag list for version + suffixes / software prefixes / "calibration"/"weight"/"latent" terms and a second + worked example showing `empirically_measured: false`) helps the LLM correctly + classify model-internal parameters even with version suffixes. +4. **The probe is invoked appropriately**: only for ambiguous SUSPICIOUS verdicts; + it correctly upgrades clear nonsense to LIKELY_INVALID and confirms theoretical-only + parameters as SUSPICIOUS rather than VALID. + +## Total wall time + +Cases 1–5 (cases 6 was rerun separately due to a sleep-mode interruption): +- Original run: ~2 hours +- Specific_leaf_area rerun: 22m 50s +- **Total real-LLM verification: ~2.5 hours, 6/6 PASS** diff --git a/examples/bullshitbench_run.py b/examples/bullshitbench_run.py index c4bbcd7..3dc8742 100644 --- a/examples/bullshitbench_run.py +++ b/examples/bullshitbench_run.py @@ -70,6 +70,28 @@ class TestCase: category="theoretical", constraints=ConstraintSpec(lower_bound=0, upper_bound=10), ), + TestCase( + name="kalman_filter_state_covariance_q11", + description=( + "The (1,1) element of the process noise covariance matrix Q used in a " + "Kalman filter; a latent state covariance hyperparameter not directly measurable" + ), + domain_context="state-space estimation / Kalman filtering", + expected=ParameterValidity.SUSPICIOUS, + category="theoretical", + constraints=ConstraintSpec(lower_bound=0, upper_bound=100), + ), + TestCase( + name="dssat_cropgro_root_growth_partition_factor_v45", + description=( + "Software-version-specific calibration factor controlling root growth " + "partitioning in DSSAT-CROPGRO version 4.5" + ), + domain_context="DSSAT crop simulation modeling", + expected=ParameterValidity.SUSPICIOUS, + category="theoretical", + constraints=ConstraintSpec(lower_bound=0, upper_bound=10), + ), # ── Real parameter (control) ── TestCase( name="specific_leaf_area", @@ -128,7 +150,8 @@ def render_markdown( lines: list[str] = [] lines.append("# BullshitBench — Real-LLM Run\n") lines.append( - "Real end-to-end pipeline runs (LLM enrichment + Semantic Scholar + extraction + validity check)\n" + "Real end-to-end pipeline runs " + "(LLM enrichment + Semantic Scholar + extraction + validity check)\n" ) # ── Summary table ── diff --git a/src/distribird/agent/prompts.py b/src/distribird/agent/prompts.py index 862c27b..93c9e65 100644 --- a/src/distribird/agent/prompts.py +++ b/src/distribird/agent/prompts.py @@ -45,7 +45,13 @@ - "context_keywords": [string, ...] (3-6 keywords/phrases capturing the user's specific application context, useful for finding the most relevant papers. Include geographic terms, species names, condition descriptors, nearby regions with similar conditions, etc. Return empty array if domain context is purely generic.) - "is_recognized_parameter": boolean (TRUE if you recognize this as an established scientific parameter that appears in the literature. FALSE if the name looks fabricated, contains non-standard suffixes like '_xyz' or 'mumblesnort', or you have never encountered it. Misspellings of real parameters should still be TRUE with low recognition_confidence.) - "recognition_confidence": "high" | "medium" | "low" | "none" (your confidence in the recognition. Use "high" only for well-established named parameters; "none" for unrecognized strings.) -- "empirically_measured": boolean (TRUE if this parameter is empirically measured in laboratory or field experiments. FALSE if it is purely theoretical, model-internal, or a calibration weight that cannot be directly measured.) +- "empirically_measured": boolean (TRUE if this parameter is empirically measured in laboratory or field experiments. FALSE if it is purely theoretical, model-internal, or a calibration weight that cannot be directly measured. When in doubt about a model-specific parameter, prefer FALSE over leaving null/uncertain.) + +Red flags that strongly suggest empirically_measured=false: +- Version suffixes in the name (_v1, _v2, _v3, _2024, _r5) +- Software/model identifiers as a prefix (biome_bgcmuso_, dssat_, ctsm_, swat_) +- Words like "calibration", "weight", "tuning", "fitted", "latent", "state", "covariance", "scaling_factor" +- Internal configuration constants of a specific software version IMPORTANT: Carefully analyze the domain context to extract ALL specifics that affect \ which literature is most relevant. Parameter values in scientific literature vary by: @@ -59,7 +65,7 @@ Return ONLY the JSON object, no other text. -Example — Parameter: "allocation_ratio_root_leaf", Domain: "Biome-BGCMuSo maize crop modeling in Hungary" +Example 1 — Parameter: "allocation_ratio_root_leaf", Domain: "Biome-BGCMuSo maize crop modeling in Hungary" {{ "parameter_meaning": "The fraction of assimilated carbon allocated to roots relative to leaves, controlling belowground vs. aboveground biomass partitioning.", "common_terminology": ["root:shoot ratio", "carbon partitioning", "belowground allocation fraction", "root biomass allocation", "assimilate partitioning"], @@ -72,6 +78,20 @@ "recognition_confidence": "high", "empirically_measured": true }} + +Example 2 — Parameter: "biome_bgcmuso_root_decomp_q10_v3", Domain: "Biome-BGCMuSo maize crop modeling" +{{ + "parameter_meaning": "An internal calibration weight in Biome-BGCMuSo v3 controlling the temperature sensitivity (Q10) of root decomposition. This is a software-version-specific tuning parameter, not a measurable physical quantity.", + "common_terminology": ["Q10 temperature sensitivity", "root decomposition rate", "model calibration parameter"], + "typical_range": "Software-specific calibration; not a measurable quantity", + "enriched_description": "Q10 temperature sensitivity coefficient for root organic matter decomposition in soil", + "search_hints": ["Q10 root decomposition temperature sensitivity", "soil organic matter decomposition Q10"], + "application_context": "Biome-BGCMuSo crop modeling", + "context_keywords": ["Biome-BGCMuSo", "soil decomposition", "temperature sensitivity"], + "is_recognized_parameter": true, + "recognition_confidence": "medium", + "empirically_measured": false +}} """ PARAMETER_VALIDITY_PROBE = """\ diff --git a/src/distribird/agent/validity.py b/src/distribird/agent/validity.py index 3836370..d6d6160 100644 --- a/src/distribird/agent/validity.py +++ b/src/distribird/agent/validity.py @@ -30,6 +30,21 @@ logger = logging.getLogger(__name__) +# Minimum extracted values required to consider a literature-backed prior reliable. +# Two values give the synthesizer enough signal to fit a Normal via moment matching +# (single-value priors fall back to a wide Normal with LOW confidence). +MIN_VALUES_FOR_VALID = 2 + +REASON_NO_LITERATURE = "No literature found across {n} refined queries" +REASON_LLM_UNRECOGNIZED = "LLM did not recognize the parameter and no literature was found" +REASON_NO_TERMINOLOGY = "No domain terminology and no literature found" +REASON_THEORETICAL_ONLY = "Theoretical/derived parameter, not empirically measured" +REASON_EMPIRICAL_UNCLEAR = ( + "Empirical status unclear; literature found but no measured values extractable" +) +REASON_LITERATURE_BACKED = "Recognized parameter with literature-backed prior" +REASON_INSUFFICIENT_EVIDENCE = "Insufficient evidence for confident classification" + class ProbeResult(BaseModel): """Parsed output of the LLM validity probe.""" @@ -73,7 +88,7 @@ def classify_validity_passive( if papers_found == 0 and values_extracted == 0 and queries_tried >= 2: return ( ParameterValidity.LIKELY_INVALID, - f"No literature found across {queries_tried} refined queries", + REASON_NO_LITERATURE.format(n=queries_tried), signals, is_empirical, ) @@ -83,48 +98,25 @@ def classify_validity_passive( and recog_conf in {"none", "low"} and papers_found == 0 ): - return ( - ParameterValidity.LIKELY_INVALID, - "LLM did not recognize the parameter and no literature was found", - signals, - is_empirical, - ) + return ParameterValidity.LIKELY_INVALID, REASON_LLM_UNRECOGNIZED, signals, is_empirical if n_terms == 0 and papers_found == 0: - return ( - ParameterValidity.LIKELY_INVALID, - "No domain terminology and no literature found", - signals, - is_empirical, - ) + return ParameterValidity.LIKELY_INVALID, REASON_NO_TERMINOLOGY, signals, is_empirical - if is_empirical is False and values_extracted == 0 and papers_found > 0: - return ( - ParameterValidity.SUSPICIOUS, - "Theoretical/derived parameter, not empirically measured", - signals, - is_empirical, - ) + if is_empirical is not True and values_extracted == 0 and papers_found > 0: + reason = REASON_THEORETICAL_ONLY if is_empirical is False else REASON_EMPIRICAL_UNCLEAR + return ParameterValidity.SUSPICIOUS, reason, signals, is_empirical if ( prior_informative and prior_confidence in {ConfidenceLevel.HIGH, ConfidenceLevel.MEDIUM} - and is_recognized is not False + and is_recognized is True + and is_empirical is not False + and values_extracted >= MIN_VALUES_FOR_VALID ): - return ( - ParameterValidity.VALID, - "Recognized parameter with literature-backed prior", - signals, - is_empirical, - ) + return ParameterValidity.VALID, REASON_LITERATURE_BACKED, signals, is_empirical - # Rule 6 (default): ambiguous → suspicious, probe may upgrade - return ( - ParameterValidity.SUSPICIOUS, - "Insufficient evidence for confident classification", - signals, - is_empirical, - ) + return ParameterValidity.SUSPICIOUS, REASON_INSUFFICIENT_EVIDENCE, signals, is_empirical def validity_probe_llm( diff --git a/tests/test_bullshitbench.py b/tests/test_bullshitbench.py index 9fe62eb..d420a82 100644 --- a/tests/test_bullshitbench.py +++ b/tests/test_bullshitbench.py @@ -63,6 +63,14 @@ def _mk_paper(idx: int, title_prefix: str = "Paper") -> LiteratureEvidence: ) +def _mk_papers_no_values(count: int) -> list[LiteratureEvidence]: + """Papers without extracted values — for testing model-internal/calibration parameters.""" + papers = [_mk_paper(i) for i in range(count)] + for p in papers: + p.extracted_values = [] + return papers + + # --------------------------------------------------------------------------- # Helpers for mocking the pipeline # --------------------------------------------------------------------------- @@ -188,9 +196,7 @@ async def test_plausible_sounding_fake_uses_probe(bullshit_settings): "A plausible-sounding but fabricated parameter", ) # Two papers, but extraction yields zero values → ambiguous - papers = [_mk_paper(0), _mk_paper(1)] - for p in papers: - p.extracted_values = [] + papers = _mk_papers_no_values(2) probe_response = { "verdict": "likely_invalid", @@ -225,9 +231,7 @@ async def test_empirical_only_theoretical_param(bullshit_settings): "hypothetical_dark_carbon_pool", "Purely theoretical model term, never measured", ) - papers = [_mk_paper(i) for i in range(5)] - for p in papers: - p.extracted_values = [] + papers = _mk_papers_no_values(5) with ExitStack() as stack: _patch_pipeline(stack, enrichment, papers, extract_papers=[]) @@ -368,3 +372,77 @@ async def test_validity_signals_in_warnings(bullshit_settings): result = await run_parameter(param, bullshit_settings) assert any(w.startswith("Parameter validity:") for w in result.warnings) + + +@pytest.mark.asyncio +async def test_uncertain_empirical_calibration_weight(bullshit_settings): + """LLM uncertain about empirical status, papers exist, no values → Rule 4b → SUSPICIOUS.""" + from distribird.agent.validity import REASON_EMPIRICAL_UNCLEAR + + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="medium", + empirically_measured=None, + common_terminology=["model parameter", "tuning weight"], + ) + param = _mk_param( + "biome_bgcmuso_root_decomp_q10_v3", + "Calibration weight for root decomposition Q10 in Biome-BGCMuSo v3", + ) + papers = _mk_papers_no_values(5) + + # Empty probe reason so we can verify the passive Rule 4b reason survives + probe_response = {"verdict": "suspicious", "is_empirical": False, "reason": ""} + with ExitStack() as stack: + probe_mock = _patch_pipeline( + stack, + enrichment, + papers, + extract_papers=[], + probe_return=probe_response, + ) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.SUSPICIOUS + assert REASON_EMPIRICAL_UNCLEAR in result.validity_reason + assert probe_mock.call_count == 1 + + +@pytest.mark.asyncio +async def test_misclassified_empirical_passes_through_probe(bullshit_settings): + """Probe corrects an LLM error: parameter marked empirical but actually non-empirical. + + Why: Rule 5 requires values_extracted >= MIN_VALUES_FOR_VALID, so 0 extracted + values blocks VALID even when the LLM mistakenly returned empirically_measured=True. + The verdict falls through to SUSPICIOUS where the probe corrects to LIKELY_INVALID. + """ + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="high", + empirically_measured=True, + common_terminology=["calibration weight"], + ) + param = _mk_param("dssat_root_factor_v45") + no_refine_settings = bullshit_settings.model_copy( + update={"search_refinement_max": 0} + ) + papers = _mk_papers_no_values(3) + + probe_response = { + "verdict": "likely_invalid", + "is_empirical": False, + "reason": "version-specific calibration weight; LLM claim of empirical wrong", + } + with ExitStack() as stack: + probe_mock = _patch_pipeline( + stack, + enrichment, + papers, + extract_papers=[], + probe_return=probe_response, + ) + result = await run_parameter(param, no_refine_settings) + + assert probe_mock.call_count == 1 + assert result.parameter_validity == ParameterValidity.LIKELY_INVALID + assert result.is_empirical is False # probe corrected the LLM mistake diff --git a/tests/test_validity.py b/tests/test_validity.py index b337dc0..544f5a9 100644 --- a/tests/test_validity.py +++ b/tests/test_validity.py @@ -3,6 +3,9 @@ from __future__ import annotations from distribird.agent.validity import ( + REASON_EMPIRICAL_UNCLEAR, + REASON_LITERATURE_BACKED, + REASON_THEORETICAL_ONLY, apply_probe_verdict, classify_validity_passive, ) @@ -93,7 +96,7 @@ def test_rule_theoretical_only_is_suspicious(): queries_tried=2, ) assert verdict == ParameterValidity.SUSPICIOUS - assert "theoretical" in reason.lower() or "not empirically" in reason.lower() + assert reason == REASON_THEORETICAL_ONLY assert is_empirical is False @@ -112,7 +115,7 @@ def test_rule_strong_positive_signal_is_valid(): queries_tried=1, ) assert verdict == ParameterValidity.VALID - assert "literature-backed" in reason.lower() or "recognized" in reason.lower() + assert reason == REASON_LITERATURE_BACKED assert is_empirical is True @@ -133,6 +136,64 @@ def test_rule_ambiguous_defaults_to_suspicious(): assert verdict == ParameterValidity.SUSPICIOUS +def test_rule_4b_uncertain_empirical_with_papers_zero_values_is_suspicious(): + """LLM uncertain about empirical status + papers exist + 0 values → SUSPICIOUS via Rule 4b.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="medium", + empirically_measured=None, + common_terminology=["model parameter", "tuning weight"], + ) + verdict, reason, _, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=False, confidence=ConfidenceLevel.NONE), + papers_found=5, + values_extracted=0, + queries_tried=2, + ) + assert verdict == ParameterValidity.SUSPICIOUS + assert reason == REASON_EMPIRICAL_UNCLEAR + assert is_empirical is None + + +def test_rule_5_blocked_when_is_recognized_is_none(): + """LLM uncertain about recognition + high-confidence prior → default SUSPICIOUS.""" + enrichment = EnrichedContext( + is_recognized_parameter=None, # LLM uncertain + recognition_confidence="medium", + empirically_measured=True, + common_terminology=["something"], + ) + verdict, _, _, _ = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=True, confidence=ConfidenceLevel.HIGH), + papers_found=8, + values_extracted=8, + queries_tried=1, + ) + assert verdict == ParameterValidity.SUSPICIOUS + + +def test_rule_5_blocked_when_is_empirical_is_false(): + """High-confidence prior + recognized + values, but LLM said theoretical → not VALID.""" + enrichment = EnrichedContext( + is_recognized_parameter=True, + recognition_confidence="high", + empirically_measured=False, # theoretical-only + common_terminology=["calibration weight"], + ) + verdict, _, _, is_empirical = classify_validity_passive( + enrichment=enrichment, + prior=_make_prior(informative=True, confidence=ConfidenceLevel.HIGH), + papers_found=5, + values_extracted=5, # somehow values were extracted from model docs + queries_tried=1, + ) + assert verdict != ParameterValidity.VALID + assert verdict == ParameterValidity.SUSPICIOUS + assert is_empirical is False + + def test_apply_probe_verdict_upgrades_suspicious(): probe = {"verdict": "valid", "is_empirical": True, "reason": "actually a real param"} verdict, reason, empirical = apply_probe_verdict( From 4c31d13597f6347b8006f8c9f0aac459424f22c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 18:16:44 +0200 Subject: [PATCH 3/7] Address Copilot PR review: validity fields in JSON, robust LaTeX escape MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - json_export.py: `result_to_dict()` now exposes parameter_validity (as enum value), validity_reason, validity_signals, and is_empirical so API/CLI consumers can observe the validity verdict. - table_export.py: introduce `_latex_escape()` covering the full set of LaTeX special characters (\\ { } & % $ # _ ~ ^), used in `batch_to_latex_table()`. Previously only `_` was escaped, which would break compilation and allow LaTeX injection for parameter names containing other specials. Skipped Copilot suggestions: - Moving the real-LLM results markdown to docs/ (file is committed intentionally as evidence of the system working with real LLM). - Casing nit on a previous version of the report — the v2 report replaced that content entirely in the prior commit. --- src/distribird/export/json_export.py | 4 ++++ src/distribird/export/table_export.py | 26 ++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/distribird/export/json_export.py b/src/distribird/export/json_export.py index 9e8b21e..cdeff17 100644 --- a/src/distribird/export/json_export.py +++ b/src/distribird/export/json_export.py @@ -30,6 +30,10 @@ def result_to_dict(result: PipelineResult) -> dict[str, object]: } if result.model_check is not None: d["model_check"] = result.model_check.model_dump() + d["parameter_validity"] = result.parameter_validity.value + d["validity_reason"] = result.validity_reason + d["validity_signals"] = result.validity_signals + d["is_empirical"] = result.is_empirical return d diff --git a/src/distribird/export/table_export.py b/src/distribird/export/table_export.py index 0768832..cc0a70b 100644 --- a/src/distribird/export/table_export.py +++ b/src/distribird/export/table_export.py @@ -9,6 +9,28 @@ def _fmt(val: float, precision: int = 4) -> str: return f"{val:.{precision}g}" +_LATEX_ESCAPES = { + "\\": r"\textbackslash{}", + "{": r"\{", + "}": r"\}", + "&": r"\&", + "%": r"\%", + "$": r"\$", + "#": r"\#", + "_": r"\_", + "~": r"\textasciitilde{}", + "^": r"\textasciicircum{}", +} + + +def _latex_escape(s: str) -> str: + """Escape characters with special meaning in LaTeX.""" + out: list[str] = [] + for ch in s: + out.append(_LATEX_ESCAPES.get(ch, ch)) + return "".join(out) + + # --------------------------------------------------------------------------- # Markdown # --------------------------------------------------------------------------- @@ -69,8 +91,8 @@ def batch_to_latex_table(results: list[PipelineResult]) -> str: for r in results: mc = r.model_check - name = r.parameter.name.replace("_", r"\_") - family = r.prior.family.value.replace("_", r"\_") + name = _latex_escape(r.parameter.name) + family = _latex_escape(r.prior.family.value) if mc is None: lines.append( f"{name} & {family} & --- & --- & --- & --- & --- & --- & 0 \\\\" From e09e45606c2820eae488dabf11d6bf782299ffd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 18:40:26 +0200 Subject: [PATCH 4/7] Short-circuit invalid requests at enrich-time to save downstream compute The validity_check node correctly classifies out-of-scope requests, but running it only at the END of the pipeline meant we paid the full cost of search, fulltext fetch, extraction, and synthesis for inputs that the enrichment LLM had already flagged as fabricated. On real-LLM benchmark runs the search and extraction stages dominate the wall-clock cost (often 80--95% of the total runtime), so even a clearly nonsensical request like `mumblesnort_factor` consumed ~8 minutes before being classified as LIKELY_INVALID. Add a `route_after_enrich` conditional edge that examines the enrichment LLM's `is_recognized_parameter` and `recognition_confidence` fields and, if the LLM clearly does not recognise the parameter (False with none/low confidence), routes directly to the terminal validity_check node. The classifier returns LIKELY_INVALID via the existing passive heuristics (no terminology, no papers, unrecognized name) without the probe firing. The terminal classifier still runs for all requests; recognised or ambiguous parameters take the full pipeline path so the probe can use real evidence when needed. A new integration test (`test_early_skip_avoids_search_and_extract`) asserts that the search and extract mocks are never called for the clear-nonsense scenario. The previous `test_plausible_sounding_fake_uses_probe` is updated to set is_recognized_parameter=True (LLM fooled by plausible name) so the early route does not fire and the probe path remains exercised. Tests: 223 pass (was 222); ruff clean. --- src/distribird/agent/graph.py | 11 +++++- src/distribird/agent/nodes.py | 27 ++++++++++++++ tests/test_bullshitbench.py | 66 +++++++++++++++++++++++++++++++++-- 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/src/distribird/agent/graph.py b/src/distribird/agent/graph.py index f348305..2dfc5d1 100644 --- a/src/distribird/agent/graph.py +++ b/src/distribird/agent/graph.py @@ -17,6 +17,7 @@ refine_search_node, relevance_judge_node, route_after_deliberation, + route_after_enrich, route_after_quality_gate, search_node, synthesize_node, @@ -68,7 +69,15 @@ def build_pipeline_graph() -> StateGraph: # type: ignore[type-arg] # Main flow edges graph.add_edge(START, "enrich") - graph.add_edge("enrich", "query_gen") + + # After enrich: short-circuit to validity_check if the LLM did not + # recognize the parameter — saves all downstream search/extract/synthesize + # work for clearly-invalid requests. + graph.add_conditional_edges( + "enrich", + route_after_enrich, + {"query_gen": "query_gen", "validity_check": "validity_check"}, + ) graph.add_edge("query_gen", "search") # After search → relevance judge → conditional: cross-enrich or fetch fulltext diff --git a/src/distribird/agent/nodes.py b/src/distribird/agent/nodes.py index 58c6d4e..eed1d84 100644 --- a/src/distribird/agent/nodes.py +++ b/src/distribird/agent/nodes.py @@ -745,6 +745,33 @@ def route_after_deliberation(state: PipelineState) -> str: return "fetch_fulltext" +def route_after_enrich(state: PipelineState) -> str: + """Decide whether to run the full pipeline or short-circuit to validity_check. + + The full search/extract/synthesize work is expensive (LLM calls, paper fetches, + PyMC fitting). When the enrichment LLM clearly does not recognize the + parameter as a real scientific quantity (is_recognized_parameter=False with + none/low confidence), there is no plausible path to a literature-backed + prior, so we route directly to the terminal validity_check node — which + will classify as LIKELY_INVALID without consulting empty paper/value sets. + """ + settings = _settings_from_state(state) + if not settings.enable_validity_check: + return "query_gen" + + enrichment = state.get("enrichment") + if enrichment is None: + return "query_gen" + + if ( + enrichment.is_recognized_parameter is False + and enrichment.recognition_confidence in {"none", "low"} + ): + return "validity_check" + + return "query_gen" + + def route_after_quality_gate(state: PipelineState) -> str: """Route after quality gate: synthesize, refine search, or refine extraction.""" quality = state.get("quality", QualityMetrics()) diff --git a/tests/test_bullshitbench.py b/tests/test_bullshitbench.py index d420a82..ce083b7 100644 --- a/tests/test_bullshitbench.py +++ b/tests/test_bullshitbench.py @@ -184,9 +184,15 @@ async def test_pure_nonsense_fake_xyz(bullshit_settings): @pytest.mark.asyncio async def test_plausible_sounding_fake_uses_probe(bullshit_settings): - """Plausible-sounding fake with a few unrelated papers → probe escalates to LIKELY_INVALID.""" + """Plausible-sounding fake fools the enrichment LLM (passes early gate). + + The enrichment LLM is fooled into setting is_recognized_parameter=True with + low confidence, so the early-skip route does NOT fire and the pipeline + proceeds through full search/extraction. The terminal validity_check then + invokes the probe to escalate the SUSPICIOUS verdict to LIKELY_INVALID. + """ enrichment = EnrichedContext( - is_recognized_parameter=False, + is_recognized_parameter=True, # LLM fooled by plausible name recognition_confidence="low", common_terminology=["chlorophyll fluorescence"], empirically_measured=None, @@ -322,6 +328,62 @@ async def test_real_param_with_search_outage(bullshit_settings): assert result.parameter_validity != ParameterValidity.LIKELY_INVALID +@pytest.mark.asyncio +async def test_early_skip_avoids_search_and_extract(bullshit_settings): + """Clear nonsense at enrich time short-circuits past search/extract/synthesize. + + The enrichment LLM marks is_recognized_parameter=False with none confidence; + the route_after_enrich short-circuits to validity_check, so the search and + extract mocks should NOT be called. + """ + from distribird.agent import extract as extract_mod + from distribird.agent import search as search_mod + + enrichment = EnrichedContext( + is_recognized_parameter=False, + recognition_confidence="none", + common_terminology=[], + ) + param = _mk_param("totally_fabricated_xyz") + + with ExitStack() as stack: + stack.enter_context( + patch( + "distribird.agent.enrich.enrich_parameter_context", + return_value=enrichment, + ) + ) + gen_mock = stack.enter_context( + patch.object(search_mod, "generate_search_queries", return_value=["q"]) + ) + search_mock = stack.enter_context( + patch.object( + search_mod, + "search_all_queries", + new_callable=AsyncMock, + return_value=[], + ) + ) + extract_mock = stack.enter_context( + patch.object(extract_mod, "extract_all_values", return_value=[]) + ) + stack.enter_context( + patch( + "distribird.agent.validity.validity_probe_llm", + return_value=None, + ) + ) + result = await run_parameter(param, bullshit_settings) + + assert result.parameter_validity == ParameterValidity.LIKELY_INVALID + # Critical: the expensive nodes were NOT called + assert gen_mock.call_count == 0, "query_gen should be skipped" + assert search_mock.call_count == 0, "search should be skipped" + assert extract_mock.call_count == 0, "extract should be skipped" + assert result.papers_found == 0 + assert result.values_extracted == 0 + + @pytest.mark.asyncio async def test_validity_check_disabled(bullshit_settings): """When the toggle is off, validity verdict is UNKNOWN.""" From b8808def2933917e9b36ed6ff8beb4812840040e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 18:40:57 +0200 Subject: [PATCH 5/7] paper: document BullshitBench validity defense + early-skip routing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the BullshitBench TODO with two new prose subsections and a benchmark table. System Design — Section "Validity classification: detecting out-of-scope requests" describes: - Two failure modes outside Distribird's contract (fabricated names, empirical-only model parameters) - The enrichment-prompt extension that elicits is_recognized_parameter, recognition_confidence, and empirically_measured as free signals - The two-stage gate: an early-skip route from Enrich directly to ValidityCheck when the LLM does not recognise the parameter, plus a terminal classifier that issues the final verdict using all collected signals (papers, values, prior confidence) - The optional LLM probe for ambiguous SUSPICIOUS verdicts and how the verdict is exposed on PipelineResult Pipeline figure — Adds a ValidityCheck node and a red dashed early-skip edge from Enrich showing the short-circuit path for unrecognised parameters. Caption explains that the bypass saves ~90% of wall-clock cost on out-of-scope requests. Experimental Evaluation — New subsection "Out-of-scope detection: BullshitBench" reports the real-LLM benchmark (6 parameters across nonsense, theoretical-only, and real-control categories) with verdicts matching expectations 6/6. Table tabulates verdict, paper/value counts, and wall-clock time per request. Conditions of Applicability — The "What Distribird is not designed for" callout now forward-references the validity classifier and the benchmark, so the limitation is paired with the active mitigation. Compiles cleanly (two minor overfull hboxes, both <12pt; pre-existing 3.6pt overfull at lines 509-526 is unchanged). --- paper/assets/logo.png | Bin 0 -> 80025 bytes paper/figures/ess_scatter.png | Bin 0 -> 184979 bytes paper/main.tex | 867 ++++++++++++++++++++++++++++++++++ 3 files changed, 867 insertions(+) create mode 100644 paper/assets/logo.png create mode 100644 paper/figures/ess_scatter.png create mode 100644 paper/main.tex diff --git a/paper/assets/logo.png b/paper/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9abd62e1400d42843918a0a2697a791c89ad583 GIT binary patch literal 80025 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%0ApdSe&eA@ZZ9~e2;$a%NehhHmpGR((1l$G$k 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

G;ob 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

7W;KGZlv? z?D-c=Y!AeL8j~GAa9pwU{+fSA$FC={3>+wQ4!OgDvOqdXf ziQJSffjTqpJTuPiQ;tXGVUqmE9ZLXhH}!xow+BY>{hM)=HoAxluJjZ88@r#Ilh zC66n)&>dF8)_eJyM^IaarBIqH(EbRGwpfXg+t;&7+^04?X(`^hPjS2Dg$=>amZCCZ z8oBwJjg1Z3(d#c@e_g0~d1?EeJtxNRS65Z3OhPm7H`T)vdk!D2|GqT+Aa^pl7pz$R z9S(11K$7MO`|Jrr=Yj6rdlO-+HeUr7DOp*Ml~hy@#{2sF*F%BK3!CT0C_1^vFuQlj zG}HPj59hnMM2G6QvnM+uaJv_vaBu;gD8FR{J>c+S z(Ow^ka2gCcy9r($h|I{3+nW$AWa*Nx)NBwH71i^;v!?+g)@Hvx(y_6# zzxnWC6}S~8(f9n0nzb1o%m#SW0`OIV8c6c~?z2>Q5iIqQM+Yvg?Gf9(d(G+7r=_K( z#bsqz9~Kcg9dUdeR0ua6Ja};V$jMCg6hk^-8J;QyxwtLYVuzC^LLqc9tAa(rIhuHN8mew%skf2}~%7OvHw)?nLo(?jkbKYm=tX$?n(37$ycSuc$J z_JapEp7XPBG_hp>?i2# z^bHR3J#+bbR&fZYLKm(_C}q`}HTkh;;*t|sn3%k6qe7arZ@DP#8U3ty_jW6iw^ zf8Q;Dh5G-_TQXR#5GObGV26OfX1Lm&FgHd$r!Hca{YFJag`+9;%9Y|#vi=_Xw{QO= zr=W2B!iDWP?>eTYKC9`t!mzjCr4QQbAB}26LQ#t0=xMPH>$l#PSjqaCX(`s@w7K7- zN4HVOj~`Rva0?0x=jZ1yLA74Wi=O{Gcy0!hl$4ard+HCN1H1yEtKIk@ z=g0e;OR%w(pR2CtH>?oHo;&^Y#MTHO<7eoL{XoW*4;x|DS+&>Fea9c9l;6<}9&5}+ zjU*fW=3|>_?s_ARazitC9k+JwJ2a%$ojiFmXIw@`<_&@=S0w)1L`Ai_ZC0#Uv2^+J zCjfJ85whA9s~mGdzwPMq46F7HFkdUg#KZ=B8W>jJd|S_oAY5Bp@X(p#oL zXWh=#pFaE0JwDIx@J%07GdcKQy?pt?pq%5mM#cu1i1!~pa3*`<6b1^IdLxsGKt(~n zGM28ZtINuppPhXfuq1C0+nM+OERg6_KX>j;QxglIOH$|0Z$mie1Bv^fy*y#cTs(*- z@W?2X#Y>j(SIrw3m5b))@$LrQ4OyFUUH^|L2#dqfukCpCf_gV!>9ETbAdp3*%h18Q zXU|%KTj8Wqvd0?ZD(2m_{FK)K5qZIu=GWD!M>{`x@}zIL&U6QQk4-{owhLOctn_9) z^bZ=@pMwvT`gXj`z5-6{Oyg-PtXn z(5zp7T`R|)m6x|X`^ftB{^vDj4b3qQK0aCn1qH=1Y!uZ@tC;5sI3*XYt@=m%b?b8+ z&PE>uc;_`t|J|UVHI!4kXvwxc?#+06(_XdLg~z8YIN_HNbH9Oed2yxYz{N|KWYR=j zrWvCZLdpy^SeFvVEq4)5R|oYrG$m*Zs}tg@I7CF4+^Ja#6Z57$P$+nBf+JrDDwLGz zEUzOgud_)--mbQ}l-PZmhu zhM~T`VZ)urptGrt5>{k)GP^S>ww?+`0*xt ziRZxL)T1{IO2QV=^XZ@O+5b6qwmz1$0~~5IiztPtO5#c%5|psQ%bI0L(7@%teaDVV zzt9XM4<<49?c29&>4kUgl1?;V^nRFUAD7t7hc)8;Fx$=4) z)#U8B*NZsb$o=#A^NDlkny4ply?4Z6^2Tq=Zl-9bo3Y~VK6zf;u-@SIY&7(8%aJ2T z)DmM=Ms$#KkFw70+}E^|3uypzaNX$1)^JODGyyHtQhbx>-U}@(bhE z^`}3)o{ic3Wznkl_t(8}!S~+1B@7HxTFml~4jhY4DhKP0g_Tuu;|Fzo?K$`IXkzL( z$s(R>1U5OYVU3JGvSH&!66oT`=~-D3h-dU`Ub1UwXnbaRdRoMJa!YAxsp6x!*ZdnL zwsCMQhw+m%G~@~n2{}y?2&3w+PliwW`1llI$M^;Z->Ilj#%1z9eOeAWAr8rV=>#_p{U}KL;NGxU+b-dNpbp?6Ao4Ps%JV!GN ziv#VWA3l5#wCUQiVZ(;L$uUdBJmDG{7SF(S2^;sLz5U$z30MU=88eFND?RxbXJ(G= zWw-y^gc>%8!nzqo$ALIA&MU{R|3b(_sZ@xN^~Gj2b#+f1RoV~V+)i=%zb!9U+BAW@ zZm@@&mGwwBk7|ZRlva2C+qYKq!oBsSm+J8elOXTTgXY4IU%#R@xiqq1bChB?C!uv5 zuFN&$A@>kgl_sQTi4$z`@q>CNPTY|xT0>2Jc0$;Ty?1Qq;ltUlGjEFQyV_a|?|m~d z(KOfc!s}~`)TWyBg~X7!_V<5CGgeg%X#BH_l{Nfz`hf!nU>seaA*Q-MRgs{nj{n_) z;n_T%W+=3|Wh5QtD-W=t%i7u5(W=fMOBNam3Jl~TEl3nUDm!49`%$g%U=T2QR*;~~ zRp7@icl73JI=)$aQxXKhBzl)fwjDU@%`CzN-}vCTC?JCKSz&|F1le6T*5W1|E95TNHW_1 zuIsvRub>o}X+PNMr7vNZVuyXXvz{&Yl7$v)M?OHxvz5-90#pwC2U%rms6&A?g zd4w`o5&~wDn8UDf)l$5OzkUW2f?~HDg7ZaoDaUTWts{h{!r3u!h{QJu+KK!Q@XNaQ z`;`?|NQ=94(xopor%dl5Zr@@ zyAbL}?(`GRecuH6$c_&>@!ckEaK zq~=kSUXq}+5OHS$(dD*XyH>8CV!TH4c9)akZsb&$z}bpIs}Cwp%_sv?v@{u05%B4k zMXvhzkeizF{^Q5Dn4l>|ITugs%&_C-Td3bW!TAR|Y&US>>pDJFSDzi0PsJ)vB8GQ! zlRm1qTNWzuJthJsEEOT?{qo(-@osQ9@cs6T_j~kkkZ;ilZZ(}ugTtCxT>_-j7pduyvZ%0A&J%)EH@>Yg`?u+3WJhea3}pipqD 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 bele kell tenni, csak az összehasonlítás} + +% BullshitBench (out-of-scope detection): see Section~\ref{sec:bullshitbench-design} +% (validity-classification node) and Section~\ref{sec:bullshitbench-eval} (real-LLM +% evaluation across nonsense, theoretical-only, and real parameters). + +\vspace{1em} + +% ----------------------------------------------------------------------- +\section{Introduction} + +\subsection{The calibration problem} + +Process-based models describe complex natural systems (crop growth, water movement through +soil, biogeochemical cycles, disease spread) using mechanistic equations with parameters that +represent physical or biological quantities. Because many of these parameters cannot be measured +directly, they must be inferred from observations by adjusting parameter values until the model +output matches available data. This process is called model calibration, or inverse modeling \citep{Hollos2022}. + +Bayesian calibration is arguably the most principled approach to this +problem, both statistically and philosophically \citep{Gelman2013}. It combines prior knowledge about the parameters with the information +contained in the observed data, and returns a posterior distribution that quantifies not only the +most likely parameter values but also the uncertainty around them. This uncertainty quantification +is critical for decision-making and for honest reporting of model predictions. + +\subsection{The prior problem} + +The Bayesian approach requires the researcher to specify a prior distribution for each parameter +before seeing the data. This raises an immediate practical question: what prior should be used? + +The mathematically convenient answer is to use a uniform prior --- to claim that all parameter +values in a range are equally plausible. This choice is almost universally adopted in practice +\citep{Wallach2021}. It is also almost universally inadequate. \citet{Pericchi1991} demonstrated +that a universally applicable uninformative prior does not exist: uniform priors are not invariant +under reparameterisation, meaning the implied prior changes depending on how the parameter is +expressed. \citet{Gelman1996} showed that the posterior mode under a uniform prior coincides with +the maximum likelihood estimate --- reducing Bayesian inference to the very framework it is +supposed to improve upon. The information loss from ignoring genuine prior knowledge has real +consequences: slower convergence of the sampler, unnecessarily wide credible intervals, and in +data-scarce situations, poorly constrained posteriors that an informative prior would have +regularised. + +Informative priors --- priors that encode genuine knowledge about the parameter --- improve all of +these properties. The knowledge needed to construct them exists. It is in the scientific +literature: in papers reporting measured values, in review articles synthesising ranges across +studies, in textbooks describing physical constraints. The problem is not that the knowledge is +absent. The problem is that retrieving and synthesising it is expensive. For a model with twenty +parameters, constructing informative priors from literature may require days of reading. +Researchers default to uniform priors not because they believe them appropriate, but because the +alternative is too costly. + +This gap between knowing the problem and having a scalable solution has persisted for more than +thirty years. + +\subsection{Large language models as a solution pathway} + +Recent advances in large language models (LLMs) with agentic search capability have created a new +option. An LLM agent can search scientific databases, retrieve relevant papers, extract reported +numerical values, and synthesise them into a probability distribution --- automatically, and at a +cost that makes the process practical for routine use. + +We present Distribird, a web application and Python library that implements this pipeline. Distribird is +not a general-purpose prior elicitation tool. It is designed specifically for the class of +problems where literature-based prior construction is most appropriate and most impactful: +process-based models with physically interpretable parameters, active publishing communities, and +genuine prior knowledge encoded in the scientific record. + +% ----------------------------------------------------------------------- +\section{Conditions of Applicability} + +Distribird produces its best results under the following conditions, which define the class of +problems the tool is designed for: + +\begin{itemize} + \item \textbf{Physically interpretable parameters:} The parameter has a physical or biological + interpretation that is discussed in the scientific literature --- for example, a maximum + photosynthesis rate, a root depth, a transmission coefficient, or a thermal threshold. + + \item \textbf{Literature-active domain:} The domain has an active publishing community, so that + relevant papers can be found by automated search. + + \item \textbf{Univariate distributions:} The parameter can be described by a standard univariate + probability distribution (Normal, truncated Normal, Beta, Gamma, Log-Normal). Parameters with + complex multimodal behaviour are outside the current scope. + + \item \textbf{Known physical bounds:} Physical bounds on the parameter are known or can be + reasoned about by the user, so that the fitted distribution can be constrained appropriately. +\end{itemize} + +When these conditions are not fully met, Distribird degrades gracefully: it communicates the +evidential basis of its output explicitly, flags low-confidence results, and falls back to +principled uninformative alternatives rather than producing false confidence. The confidence +hierarchy is described in Section~\ref{sec:confidence}. + +\begin{mdframed}[style=calloutbox] + \textbf{What Distribird is not designed for}\\[4pt] + Distribird is not designed for parameters without physical interpretation (e.g.\ neural network + weights), purely empirical tuning coefficients with no literature base, or parameters whose + behaviour is fundamentally multivariate. For these cases, other approaches --- prior predictive + checks, expert elicitation, or sensitivity analysis --- remain more appropriate. To prevent + silent misuse, the pipeline classifies each request and explicitly flags out-of-scope inputs + (Section~\ref{sec:bullshitbench-design}); we evaluate this defence in + Section~\ref{sec:bullshitbench-eval}. +\end{mdframed} + +% ----------------------------------------------------------------------- +\section{System Design} + +\subsection{Overview} + +Distribird is implemented as a Python~3.10+ package distributed via \href{https://pypi.org/project/distribird/}{PyPI} and exposing two user-facing interfaces: a REST~API built on FastAPI and an interactive Streamlit web application. Both interfaces delegate to the same core pipeline, ensuring identical behaviour regardless of access method. The system is configured through environment variables, making deployment straightforward via Docker or direct installation. + +The user provides a \texttt{ParameterInput} object specifying the parameter name, a plain-language physical description, the measurement unit, a domain context string (e.g.\ ``Biome-BGCMuSo maize crop modelling, Central European conditions''), and optional physical constraints (lower bound, upper bound). For example: + +\begin{verbatim} + ParameterInput( + name="TMAX", + description="Maximum temperature for photosynthesis", + unit="°C", + domain_context="Biome-BGCMuSo maize, Central Europe", + constraints=ConstraintSpec(lower_bound=30.0, upper_bound=50.0) + ) +\end{verbatim} + +\noindent The system returns a \texttt{PipelineResult} containing the fitted prior distribution, its confidence level, the number of contributing sources, all search queries attempted, the full list of retrieved papers with extracted values, an optional enrichment context, and --- when multi-agent deliberation is enabled --- the moderator's rationale and any excluded papers. A simplified example: + +\begin{verbatim} + PipelineResult( + prior=FittedPrior( + family="truncated_normal", + params={"mu": 40.5, "sigma": 3.2, "a": 30.0, "b": 50.0}, + confidence="high", + is_informative=True, + n_sources=6 + ), + papers_found=16, + values_extracted=8, + search_queries=["maize maximum photosynthesis temperature", ...] + ) +\end{verbatim} + +\noindent This complete provenance chain allows the user to audit every step from literature search to final distribution. + +\subsection{Multi-agent LangGraph pipeline} + +The core of Distribird is a LangGraph \texttt{StateGraph} that orchestrates a multi-agent pipeline with two feedback loops and a conditional forward path. Unlike a directed acyclic graph, the pipeline permits cycles: when initial evidence is insufficient, the graph routes back to earlier nodes for refinement before proceeding to synthesis. All nodes read from and write to a shared \texttt{PipelineState} typed dictionary that follows the blackboard pattern --- an append-only message log (\texttt{BlackboardMessage}) through which nodes communicate discoveries, terminology updates, query suggestions, cross-references, and warnings without direct coupling. + +\subsubsection{Pipeline overview} + +Figure~\ref{fig:pipeline} illustrates the complete graph topology, including two feedback loops, one conditional forward path, and the multi-agent search subsystem. The pipeline comprises ten primary processing nodes (including a terminal validity-classification node, Section~\ref{sec:bullshitbench-design}) and three refinement nodes, connected by two routing functions that implement the conditional logic. + +\begin{figure}[!htbp] +\centering +\begin{tikzpicture}[ + node distance=0.6cm, + >={Stealth[length=3pt]}, + mainnode/.style={ + rectangle, rounded corners=3pt, draw=black!70, fill=blue!6, + minimum width=2.2cm, minimum height=0.65cm, + font=\footnotesize\sffamily, align=center, inner sep=3pt + }, + refinenode/.style={ + rectangle, rounded corners=3pt, draw=orange!70!black, fill=orange!10, + minimum width=2.0cm, minimum height=0.65cm, + font=\footnotesize\sffamily, align=center, inner sep=3pt + }, + gatenode/.style={ + diamond, draw=red!60!black, fill=red!6, + minimum width=1.0cm, minimum height=0.6cm, + font=\footnotesize\sffamily, align=center, inner sep=1pt, + aspect=2.2 + }, + termnode/.style={ + rectangle, rounded corners=3pt, draw=black!50, fill=gray!15, + minimum width=1.6cm, minimum height=0.5cm, + font=\footnotesize\sffamily\bfseries, align=center, inner sep=3pt + }, + looplabel/.style={font=\scriptsize\sffamily\itshape, text=orange!70!black}, + mainedge/.style={draw, ->, thick, black!70}, + loopedge/.style={draw, ->, thick, orange!70!black}, + condlabel/.style={font=\tiny\sffamily, text=black!50}, +] + +% ============================================================ +% MAIN VERTICAL FLOW +% ============================================================ +\node[termnode] (start) {Input}; +\node[mainnode, below=of start] (enrich) {Enrich}; +\node[mainnode, below=of enrich] (querygen) {QueryGen}; +\node[mainnode, below=of querygen] (search) {Search}; +\node[mainnode, below=of search] (relevance) {Relevance\\[-1pt]Judge}; +\node[mainnode, below=of relevance] (crossenrich) {CrossEnrich\\[-1pt]{\tiny(snowballing)}}; +\node[mainnode, below=of crossenrich] (fulltext) {Fetch\\[-1pt]Fulltext}; +\node[mainnode, below=of fulltext] (extract) {Extract}; +\node[gatenode, below=0.7cm of extract] (qgate) {Quality\\[-1pt]Gate}; +\node[mainnode, below=0.7cm of qgate] (synthesize) {Synthesize}; +\node[mainnode, below=of synthesize] (validity) {Validity\\[-1pt]Check}; +\node[termnode, below=of validity] (output) {Output}; + +% ============================================================ +% MAIN FLOW EDGES +% ============================================================ +\draw[mainedge] (start) -- (enrich); + +% --- Conditional: Enrich → QueryGen OR ValidityCheck (early-skip) --- +% Code: route_after_enrich() — if LLM does not recognize parameter, skip directly +% to validity_check to avoid wasting search/extract/synthesize compute. +\draw[mainedge] (enrich) -- node[condlabel, left] {recognised} (querygen); +\draw[mainedge, densely dashed, red!60!black] + (enrich.east) -- ++(2.0,0) + node[condlabel, above, midway, text=red!60!black] {early-skip} + node[condlabel, below, midway, text=red!60!black] {(unrecognised)} + |- (validity.east); + +\draw[mainedge] (querygen) -- (search); +\draw[mainedge] (search) -- (relevance); + +% --- Conditional: RelevanceJudge → CrossEnrich OR FetchFulltext --- +% Code: route_after_deliberation() — if ≥2 high-relevance papers → cross_enrich, else → fetch_fulltext +\draw[mainedge] (relevance) -- node[condlabel, left] {$\geq$2 relevant} (crossenrich); +\draw[mainedge, densely dashed, black!40] + ([xshift=0.2cm]relevance.south) -- ++(0,-0.2) + -| ([xshift=0.55cm]fulltext.east) -- (fulltext.east); +\node[condlabel] at ([xshift=1.1cm]fulltext.east) {otherwise}; + +\draw[mainedge] (crossenrich) -- (fulltext); +\draw[mainedge] (fulltext) -- (extract); +\draw[mainedge] (extract) -- (qgate); + +% --- Conditional: QualityGate → Synthesize OR RefineSearch OR RefineExtraction --- +\draw[mainedge] (qgate) -- (synthesize); +\draw[mainedge] (synthesize) -- (validity); +\draw[mainedge] (validity) -- (output); + +% ============================================================ +% MULTI-AGENT SEARCH (annotation to the right of Search node) +% Shows what happens INSIDE search_node +% ============================================================ +% Simple callout box listing the agents and moderator +\node[draw=teal!60, rounded corners=4pt, fill=teal!4, + text width=4.5cm, font=\scriptsize\sffamily, + inner sep=5pt, align=left, + right=1.2cm of search, yshift=-0.3cm] + (agentbox) {% + \textbf{Parallel source agents:}\\[2pt] + \textbullet~Semantic Scholar\\ + \textbullet~OpenAlex\\ + \textbullet~Deep Research {\tiny\itshape(opt-in)}\\ + \textbullet~Web Search {\tiny\itshape(opt-in)}\\[3pt] + \textbf{$\downarrow$ Moderator LLM}\\ + {\tiny deduplicates, selects consensus papers} + }; +\draw[draw, ->, semithick, teal!60!black] + (search.east) -- (agentbox.west) + node[condlabel, above, midway, text=teal!60!black] {dispatches}; + +% ============================================================ +% LOOP A: QualityGate → RefineSearch → Search +% Code: quality_gate --[0 values]--> refine_search --> search +% ============================================================ +\node[refinenode, left=2.0cm of extract] (refinesearch) {Refine\\[-1pt]Search}; + +\draw[loopedge] + (qgate.west) -| node[looplabel, above right, pos=0.2] {0 values} (refinesearch.south); +\draw[loopedge] + (refinesearch.north) |- node[looplabel, above, pos=0.75] {\textbf{Loop A}} (search.west); + +% ============================================================ +% LOOP B: QualityGate → RefineExtraction → QualityGate +% Code: quality_gate --[low conf.]--> refine_extraction --> quality_gate +% ============================================================ +\node[refinenode, right=2.0cm of qgate] (refineextract) {Refine\\[-1pt]Extraction}; + +\draw[loopedge] + (qgate.east) -- node[looplabel, above, pos=0.4] {low conf.} (refineextract.west); +\draw[loopedge] + (refineextract.south) -- ++(0,-0.4) -| + node[looplabel, below, pos=0.15] {\textbf{Loop B}} ([xshift=0.3cm]qgate.south); + +\end{tikzpicture} +\caption{Distribird LangGraph pipeline. Two feedback loops (A, B), one conditional forward path +(cross-enrichment), and one early-skip path (red dashed) from Enrich directly to Validity~Check. +When the enrichment LLM clearly does not recognise the requested parameter, the pipeline bypasses +all subsequent search, extraction, and synthesis work and proceeds straight to classification --- +saving roughly 90\% of the wall-clock cost on out-of-scope requests. The Search node internally +dispatches to parallel source agents whose outputs are reconciled by a Moderator LLM. The terminal +Validity~Check node classifies the request as VALID, SUSPICIOUS, LIKELY\_INVALID, or UNKNOWN +(Section~\ref{sec:bullshitbench-design}).} +\label{fig:pipeline} +\end{figure} + +\subsubsection{Pipeline nodes and feedback loops} +\label{sec:feedback} + +The pipeline comprises ten primary processing nodes --- Enrich (parameter semantics expansion), QueryGen (search query generation), Search (parallel API queries), RelevanceJudge (paper scoring), CrossEnrich (citation snowballing), FetchFulltext (PDF retrieval and parsing), Extract (numerical value extraction), QualityGate (routing logic), Synthesize (distribution fitting), and ValidityCheck (out-of-scope classification, Section~\ref{sec:bullshitbench-design}) --- connected by two feedback loops and one conditional forward path that allow the pipeline to iteratively improve its results when initial evidence is insufficient: + +\begin{itemize} + \item \textbf{Loop~A --- Search refinement.} When the quality gate finds zero extracted values but papers were retrieved (indicating that the search found relevant literature but extraction failed to locate numerical data), the pipeline routes to a \texttt{RefineSearch} node. This node analyses the summaries of retrieved papers and generates refined search queries targeting more specific experimental or calibration studies. Control then returns to the Search node. This loop may execute up to two iterations (configurable via \texttt{search\_refinement\_max}). + + \item \textbf{Conditional path --- Cross-enrichment.} After relevance judgment, if the iteration budget permits and at least two high-relevance papers have been identified, the pipeline routes through CrossEnrich (citation snowballing) before fetching full texts; otherwise, it skips directly to FetchFulltext. This is a conditional forward path, not a feedback loop --- it does not cycle back to an earlier node. The cross-enrichment step is executed at most once per pipeline invocation (\texttt{cross\_enrichment\_max\,=\,1}). + + \item \textbf{Loop~B --- Extraction refinement.} When the quality gate finds extracted values but none are high-confidence and the coefficient of variation exceeds~1.5 (indicating high disagreement among sources), the pipeline routes to a \texttt{RefineExtraction} node that uses web-assisted search to locate additional confirming or disconfirming evidence. Control returns to the quality gate for re-evaluation. This loop may execute once (\texttt{extraction\_refinement\_max\,=\,1}). +\end{itemize} + +\noindent An \texttt{IterationBudget} object tracks the number of iterations consumed by each loop and enforces a global cap on total LLM calls (default: 30), guaranteeing termination even when both loops and the conditional path are activated in the same invocation. The budget is checked at every conditional routing point; when exhausted, the pipeline proceeds directly to synthesis with whatever evidence has been accumulated. + + +\subsection{Validity classification: detecting out-of-scope requests} +\label{sec:bullshitbench-design} + +A literature-grounded prior is only meaningful for parameters whose values are reported in the scientific record. Two failure modes lie outside Distribird's contract: fabricated or non-scientific names (e.g.\ a typo, a pseudoscientific term, or a placeholder), and parameters that genuinely belong to a model but are not empirically measured (calibration weights, latent state covariances, software-version-specific tuning factors). In both cases the synthesizer's tiered fallback already produces a wide uninformative prior with low confidence, but it does so silently, which risks downstream users mistaking the placeholder for evidence-backed guidance. The pipeline closes this gap by classifying every request into one of four categories --- \textsc{Valid}, \textsc{Suspicious}, \textsc{Likely\_Invalid}, or \textsc{Unknown} --- using a two-stage gating strategy: an \emph{early-skip} immediately after enrichment that prevents wasted compute on clearly invalid requests, and a \emph{terminal classifier} that issues the final verdict using all collected signals. The combined design adds at most one extra LLM call beyond the standard pipeline. + +The early-skip route examines the enrichment LLM's self-reports as soon as they become available. The \texttt{PARAMETER\_ENRICHMENT} prompt is extended with three additional fields --- whether the LLM recognises the parameter as an established scientific quantity, the LLM's confidence in that recognition, and whether the parameter is empirically measurable rather than theoretical. When the LLM responds with \texttt{is\_recognized\_parameter=False} at \texttt{none} or \texttt{low} confidence, the routing function \texttt{route\_after\_enrich} forwards the state directly to the terminal validity-check node, bypassing query generation, the multi-agent search, full-text retrieval, extraction, the quality gate, and synthesis. Because the search and extraction stages dominate the wall-clock cost of a parameter request (typically 80--95\% of the total runtime in our benchmarks), this short-circuit prevents the system from running expensive paper retrieval and LLM-driven extraction for inputs that the model itself has already classified as nonsense. Requests that pass the early gate proceed through the standard pipeline and are subjected to the terminal classifier with the full evidence base in hand. + +The terminal classifier consumes signals collected throughout the run: the enrichment self-reports, the number of refined queries tried, the number of papers retrieved, the number of values extracted, and the confidence of the fitted prior. A small set of pure-Python heuristic rules combines these signals into a passive verdict. A request that reaches the classifier through the early-skip path is marked \textsc{Likely\_Invalid} (no literature, no terminology, unrecognised name). A request whose enrichment reports the parameter as not empirically measured (or whose empirical status is uncertain) where literature was found but no values could be extracted is marked \textsc{Suspicious}: the parameter exists in some published model but cannot be grounded in measurement. A request with a high- or medium-confidence informative prior, recognised terminology, and at least two extracted values is marked \textsc{Valid}; the gate requires the recognition signal to be strictly true (rather than merely not false), so an LLM that is uncertain about the parameter's identity still falls through to the probe. + +When the passive verdict is \textsc{Suspicious}, the node calls a dedicated \texttt{PARAMETER\_VALIDITY\_PROBE} LLM that receives the enrichment self-flags, the pipeline observations, and a description of the four verdicts. The probe can refine the verdict in either direction --- upgrading clear nonsense to \textsc{Likely\_Invalid} or confirming theoretical-only parameters as \textsc{Suspicious} --- but cannot override a \textsc{Valid} or \textsc{Likely\_Invalid} verdict already reached by the passive heuristics. The probe is gated by both the iteration budget and an \texttt{enable\_validity\_probe} setting, so users who require fully offline operation can disable it. The verdict, the passive signals that produced it, and the probe's reason are exposed on the \texttt{PipelineResult} via the \texttt{parameter\_validity}, \texttt{validity\_reason}, \texttt{validity\_signals}, and \texttt{is\_empirical} fields, and a human-readable warning of the form ``Parameter validity: \textsc{suspicious} --- \textit{reason}'' is appended to \texttt{PipelineResult.warnings} so that command-line and Streamlit consumers see the verdict at a glance. + +\subsection{Literature search} + +The search subsystem queries two academic APIs in parallel. \textit{Semantic Scholar} provides citation-graph metadata, abstracts, and open-access PDF links via its Graph~API; \textit{OpenAlex} provides an independent index with complementary coverage, reconstructing abstracts from its inverted-index representation. Both APIs are filtered to open-access papers only, ensuring that full-text retrieval is feasible. + +Two additional source agents are available as optional complements. A \textit{deep-research agent} delegates to an LLM with web-search capabilities (configurable model, default OpenAI's \texttt{o4-mini-deep-research}) to discover papers that may not be indexed by the academic APIs; its results are verified against Semantic Scholar before inclusion to prevent hallucinated references. A \textit{web search agent} performs a similar verification-backed LLM search using a general-purpose web-search prompt. Both agents contribute \texttt{AgentFinding} objects to the deliberation process alongside the API-based agents. + +\subsection{Prior fitting and confidence hierarchy} +\label{sec:confidence} + +The distribution fitting strategy is tiered according to the amount of evidence recovered, ensuring that the statistical method matches the information content of the data: + +\begin{table}[!htbp] +\centering +\caption{Tiered prior fitting strategy based on available evidence.} +\label{tab:confidence} +\small +\begin{tabularx}{\linewidth}{@{}l>{\raggedright\arraybackslash}Xll@{}} + \toprule + \textbf{Evidence} & \textbf{Method} & \textbf{Confidence} & \textbf{Fallback?} \\ + \midrule + $\geq 5$ values & AIC model selection across five candidate families: Normal, Truncated Normal, Gamma, Log-Normal, and Beta. The family minimising AIC is selected. For distributions requiring positive support (Gamma, Log-Normal), only positive values are considered; Beta fitting requires user-specified bounds. & High & No \\[4pt] + 2--4 values & Moment matching to a Truncated Normal with the standard deviation widened by a factor of~1.5. A minimum-width floor is imposed: $\sigma \geq \max(0.05\,|\mu|,\; 0.05\,(u - l))$, where $u$ and $l$ are the upper and lower bounds, to prevent overconfident priors from sparse data. & Medium & No \\[4pt] + 1 value & Wide Normal centred on the single reported value, with $\sigma$ set to a conservative fraction of the plausible range. & Low & No \\[4pt] + 0 values & Uniform prior over the user-specified bounds, or a wide Truncated Normal centred at the midpoint of the bounds with $\sigma = (u - l)/4$. & None & Yes \\ + \bottomrule +\end{tabularx} +\end{table} + +\todo[inline]{We have to be explicit on the distributions for the fitting. Ne táblzatban legyen, hanem felette legyen kifejtve mikor használjuk az AIC-ot, Momentumot, meg mikor Normal, Gamma, Beta, stb...} + +\noindent All fitted distributions are constrained to respect user-specified physical bounds. When sample sizes or uncertainties are reported alongside extracted values, inverse-variance weighting is applied during fitting. The confidence level is recorded in the \texttt{FittedPrior} object and propagated through all export formats, ensuring that downstream users can distinguish empirically grounded priors from uninformative fallbacks. + +\subsection{Export formats} + +Distribird exports priors in three formats designed for direct integration into common Bayesian calibration workflows: + +\begin{itemize} + \item \textbf{JSON} --- a structured record containing the parameter name, distribution family, fitted parameters, confidence level, informative/uninformative flag, fitting rationale, number of contributing sources, and a citation list with title, DOI, year, and authors for each paper. Batch exports include a version tag and run metadata. + + \item \textbf{Python} --- an executable \texttt{scipy.stats} script that defines a sampling function for each parameter, imports \texttt{numpy} and \texttt{scipy}, and generates a configurable number of random draws (default: 10\,000). The generated code is compatible with PyMC, emcee, and custom MCMC samplers. + + \item \textbf{R} --- an executable R script using base distribution functions (\texttt{rnorm}, \texttt{rgamma}, \texttt{rlnorm}, \texttt{rbeta}, \texttt{runif}) and the \texttt{truncnorm} package for truncated normal sampling. The script is ready for use with BayesianTools, FME, or custom samplers. +\end{itemize} + +\noindent All three formats embed the complete provenance chain --- from search queries through paper citations to the fitting rationale --- so that the prior's evidential basis is preserved alongside its numerical specification. + + +% ----------------------------------------------------------------------- +\section{Experimental Evaluation} +\label{sec:exp-eval} + +We tested whether Distribird's literature-informed priors improve Bayesian parameter estimation compared to the standard practice of using uniform (``I don't know'') priors. The experiment covered 20~parameters across ten scientific domains, using real publicly available datasets. + +\subsection{Experimental design} + +For each parameter, we ran the same Bayesian model twice: once with the Distribird-constructed prior and once with a uniform prior over the same bounds. Both runs used identical data, the same sampling algorithm \citep[NUTS;][]{Hoffman2014}, and the same configuration (2\,000~samples, 4~parallel chains, fixed random seed). + +We measure success using the \emph{ESS ratio}: the effective number of independent samples produced by the informed run divided by the flat run. An ESS ratio above~1 means the informed prior helped the sampler work more efficiently; below~1 means the uniform prior performed better. We call an ESS ratio above~1 an informed ``win.'' + +Beyond raw efficiency, we also track two reliability indicators: whether the sampler encountered numerical problems (divergent transitions) and whether the chains agreed with each other ($\hat{R}$ convergence statistic \citep{Vehtari2021}). We define a \emph{no-harm} outcome as one where the informed prior did not make either reliability indicator worse, even if it did not improve ESS. This distinction matters in practice: a slightly slower but reliable sampler is far preferable to a faster one that produces untrustworthy results. + +\subsection{Use cases and datasets} +\label{sec:usecases} + +Ten scientific domains were selected to span a broad range of model types and data characteristics. Within ecology, two independent predator--prey systems were tested, yielding 11~use cases and 20~parameters in total. All datasets are real, publicly available, and require no registration to access. + +\begin{table}[!htbp] +\centering +\caption{Experimental use cases and datasets. $n$: number of observations.} +\label{tab:usecases} +\footnotesize +\setlength{\tabcolsep}{4pt} +\begin{tabular}{@{}llllr@{}} + \toprule + \textbf{Domain} & \textbf{Parameters} & \textbf{Model / Likelihood} & \textbf{Data source} & $n$ \\ + \midrule + Climate & $r_{\text{eff}}$, AOD & Linear regr.\ / Normal & AERONET \citep{Holben1998} & 50 \\ + Pharmacokinetics & clearance, $V_d$ & Bateman eq.\ / Normal & Theoph \citep{Boeckmann1994} & 132 \\ + Hydrology & $f_c$, $K_{\text{sat}}$ & Bucket / Normal & NRFA stn.\ 39001 & 366 \\ + Structural Eng. & $E$, $\zeta$ & Eigenfreq.\ / Normal & Yonghe \citep{Li2019} & 216 \\ + Epidemiology & incub., infect.\ period & SEIR / Neg.\ Binom. & OWID \citep{Mathieu2021} & 60 \\ + Astrophysics & $H_0$, $\Omega_m$ & Distance mod.\ / Normal & Pantheon+ \citep{Scolnic2022} & 1701 \\ + Ecology (Isle R.) & moose $r$ & Lotka--Volterra / LogN & \citet{Vucetich2012} & 58 \\ + Ecology (YNP) & elk $r$ & Lotka--Volterra / LogN & \citet{Hobbs2023} & 28 \\ + Geophysics & perm., porosity & Kozeny--Carman / LogN & USGS \citep{Nelson2003} & 26 \\ + Robotics & friction, inertia & Inv.\ dynamics / Normal & KUKA \citep{Meier2016} & 700 \\ + Economics & stickiness, $\phi_\pi$ & NK Phillips--Taylor / Normal & FRED \citep{FRED2026} & 60 \\ + \bottomrule +\end{tabular} +\end{table} + +\noindent Each use case employed a domain-appropriate generative model in which the parameters of interest appear as priors. Model structures range from simple linear regression (climate) through ordinary differential equation solvers (ecology) to the flat $\Lambda$CDM distance--redshift relation (astrophysics). + +\subsection{Prior construction results} + +Distribird was run on all 20~parameters with default settings (context enrichment, Semantic Scholar and OpenAlex search, relevance judgment, and citation snowballing enabled; deep-research and web-search agents disabled). Table~\ref{tab:priors} in Appendix~\ref{app:tables} lists the full set of constructed priors. + +Of the 20~parameters, 19 received informative priors (95\%) and one --- the elk intrinsic growth rate (Ecology~(YNP), elk~$r$ in Table~\ref{tab:priors}) --- received an uninformative fallback (wide truncated Normal centred at the midpoint of the bounds). The confidence breakdown was: 15~high confidence ($\geq 5$ extracted values, best distribution selected automatically), 4~medium (2--4~values, moment-matched), and 1~none (zero values, fallback prior). The richest prior evidence base was the COVID-19 incubation period (Epidemiology in Table~\ref{tab:usecases}), where Distribird extracted 105~reported values from 27~papers. + +\subsection{MCMC comparison results} +\label{sec:mcmc} + +Table~\ref{tab:mcmc} in Appendix~\ref{app:tables} presents the full per-parameter results. Across the 20~parameters, informed priors won on 16 (80\%), with a mean ESS ratio of~2.78 and a median of~1.28. All informed-prior runs converged successfully. The total number of numerical problems (divergent transitions) was substantially lower under informed priors (264 vs.\ 1\,933 across all runs). Figure~\ref{fig:ess_scatter} visualises the comparison. + +\begin{figure}[!htbp] +\centering +\includegraphics[width=0.7\linewidth]{figures/ess_scatter.png} +\caption{Effective sample size under informed priors (vertical axis) vs.\ flat priors (horizontal axis) for the 20~analysed parameters, coloured by scientific domain. Points above the diagonal indicate that the informed prior improved sampling efficiency.} +\label{fig:ess_scatter} +\end{figure} + +The size of the improvement varied with the difficulty of the estimation problem. The largest gains appeared in geophysics (ESS ratios of 13.0 and 12.5), where the parameter space spans four orders of magnitude and the uniform prior spreads probability mass too thinly for the sampler to find the right region quickly. The ecology predator--prey models showed the second-largest gains (ESS ratios of 3.8--6.0), where the complex dynamics make the estimation landscape difficult to navigate without prior guidance. + +The improvement is strongly asymmetric: when informed priors help, they help a lot (up to $13\times$ faster sampling); when they do not help, the penalty is negligible. The four losses --- pharmacokinetics clearance (0.99), pharmacokinetics $V_d$ (0.99), structural damping ratio (0.90), and epidemiology incubation period (0.89) --- represent deficits of only 0.5\%--11\%. In every one of these cases, the informed prior either matched or improved the reliability diagnostics (convergence and divergent transitions). The no-harm rate --- the fraction of parameters where the informed prior did not worsen any reliability diagnostic --- was 19/20 (95\%). The single exception (economics inflation response coefficient) showed a negligible $\hat{R}$ increase of 0.001, well within acceptable bounds. In practical terms, using an informed prior never made things worse in a way that mattered. + +\subsection{Why the informed prior lost: parameter transferability} + +The four losses reveal an important pattern about when literature-based priors work best. + +The key distinction is between \emph{transferable} and \emph{instance-specific} parameters. A transferable parameter describes a property of a \emph{class} --- a species, a material, a physical law --- so that a measurement made in one study directly informs the same quantity in another. The Hubble constant is the clearest example: every measurement in the literature constrains the same universal value. Material properties (sandstone porosity), species-level traits (moose growth rate), and atmospheric quantities (aerosol optical depth) are similarly transferable. For these parameters, Distribird achieved its strongest results (ESS ratios of 1.0--13.0), because the literature describes exactly the quantity being calibrated. + +Instance-specific parameters, by contrast, depend on the particular system under study, and published values from other systems do not directly transfer: + +\begin{itemize} + \item \textbf{Pharmacokinetics.} Theophylline clearance and volume of distribution depend on the specific patient cohort, dose, and formulation. Literature values aggregate across different clinical conditions --- the resulting prior is correctly placed but encodes between-study variability that does not match the specific Theoph dataset. With 132~dense observations, the data overwhelms any prior regardless. + + \item \textbf{Structural engineering.} The damping ratio $\zeta$ of the Yonghe Bridge depends on that bridge's construction, age, and condition. Published damping ratios from other bridges inform the right order of magnitude, but not the specific value. + + \item \textbf{Epidemiology.} COVID-19 incubation period varies across viral lineages and populations. The 110~values Distribird extracted span multiple SARS-CoV-2 variants, introducing spread that may not represent the specific wave in the calibration data. +\end{itemize} + +In all four cases, Distribird correctly found and synthesised the literature --- the priors were well-centred and received high confidence scores. The tool did not fail; the knowledge simply was not transferable. The evidence describes a \emph{population of instances} rather than the specific instance being calibrated. Even so, the resulting ESS penalty was small (0.5\%--11\%), and reliability diagnostics were never worsened. + +This pattern suggests a practical rule of thumb: Distribird is most effective when the parameter represents a property of a class rather than a property of a specific instance. Among the 16~transferable parameters in this experiment, the informed-prior win rate was 100\%. + +\subsection{Extraction validation} + +To assess the quality of the LLM extraction step independently of MCMC performance, we audited the 473~numerical values extracted across all 20~parameters. Of the 138~contributing source papers, 133 (96.4\%) had valid DOIs that resolve to the claimed publication. All 473~extracted values included a natural-language context string describing where in the paper the value was found (e.g.\ ``Alpha variant; pooled mean incubation period, 95\%~CI 4.53--5.30''). Of the 473~values, 424 (89.6\%) fell within the user-specified physical bounds for their parameter. The 49~out-of-bounds values occurred primarily in parameters with narrow bounds and broad literature coverage (e.g.\ lognormal-distributed quantities where some reported values exceed the upper constraint); these values are automatically excluded during distribution fitting. + +As a spot-check, we examined the five parameters with the most diverse evidence bases in detail: + +\begin{itemize} + \item \textbf{COVID-19 incubation period} (Epidemiology, incubation; 27~sources, 105~values): extracted values ranged from 2.0 to 13.0~days, with a mean of 5.26~days and median of 5.0~days. These are consistent with the well-established consensus of 5--6~days for the Alpha variant. All 27~DOIs resolve to peer-reviewed epidemiological studies published 2020--2023. + + \item \textbf{Hubble constant $H_0$} (Astrophysics, $H_0$; 26~sources, 77~values): the extracted values span 53--82~km\,s$^{-1}$\,Mpc$^{-1}$ with a median of 72.8, capturing both the Planck CMB cluster near 67.4 and the SH0ES distance-ladder cluster near 73.0 --- correctly reflecting the well-known ``Hubble tension'' as distributional spread. + + \item \textbf{Cloud droplet effective radius} (Climate, $r_{\text{eff}}$; 4~sources, 7~values): values ranged from 8.0 to 17.9~$\mu$m with a mean of 13.1~$\mu$m, consistent with satellite retrievals and in-situ aircraft measurements in the literature. + + \item \textbf{Sandstone porosity} (Geophysics, porosity; 5~sources, 3~values): mean 0.17, range [0.13, 0.19], consistent with USGS core-plug catalogues for siliciclastic rocks. + + \item \textbf{Moose intrinsic growth rate} (Ecology (Isle~R.), moose~$r$; 2~sources, 2~values): 0.06 and 0.26\,yr$^{-1}$, spanning the range reported in ecological studies of Isle Royale moose populations. +\end{itemize} + +\noindent This audit provides evidence that the extraction pipeline produces plausible, well-sourced values, although a formal precision/recall study against manually annotated ground truth remains a priority for future work. + +\subsection{Naive baseline analysis: does literature placement matter?} + +A key question is whether the MCMC improvements stem from the specific literature-derived parameterisation or merely from replacing a flat distribution with any mound-shaped regulariser. To address this, we compared the Distribird priors against a hypothetical \emph{naive baseline}: a truncated Normal always centred at the midpoint of the user-specified bounds with $\sigma = (u-l)/4$, requiring no literature search at all. + +Examining the prior specifications reveals that the naive baseline would produce a qualitatively wrong prior in several cases where Distribird achieved its largest gains: + +\begin{itemize} + \item \textbf{Geophysics (permeability):} The parameter space spans $[0.01, 10{,}000]$\,mD. The naive baseline centres at 5\,000\,mD, but the literature-informed prior ($\mathrm{Beta}(0.81, 33.4)$) concentrates mass near the lower end of the range, reflecting the known log-scale distribution of rock permeability. Centring at 5\,000\,mD would place the prior mode orders of magnitude from the true posterior, likely yielding no improvement over uniform. + + \item \textbf{Pharmacokinetics (clearance):} The naive baseline centres at 1.0\,L/h, but theophylline clearance is approximately 0.04\,L/h. The Distribird prior ($\mathrm{Beta}(10.0, 462.4)$) correctly concentrates near 0.04. The naive prior would be almost as uninformative as uniform for this parameter. + + \item \textbf{Epidemiology (incubation):} The naive baseline centres at 7.5~days, but the literature consensus is 5.0~days. The Distribird prior correctly peaks near~5, while the naive prior would peak 50\% too high. + + \item \textbf{Climate (AOD):} The naive baseline centres at 1.5, but global mean AOD is approximately 0.11. The Distribird prior is $14\times$ closer to the true value. +\end{itemize} + +\noindent The elk growth rate fallback (ESS ratio 3.75 with zero literature evidence) does demonstrate that some ESS gains come from the regularising shape alone. However, the strongest improvements (geophysics 13$\times$, ecology 6$\times$, hydrology 2.7$\times$) occurred precisely where the Distribird prior places mass in a region that the naive baseline would miss entirely. A formal MCMC ablation comparing all three conditions (informed, naive, uniform) across all 20~parameters is planned for a follow-up study. + +\subsection{Out-of-scope detection: BullshitBench} +\label{sec:bullshitbench-eval} + +The MCMC and extraction validations above measure how well Distribird performs when the requested parameter is in scope. They say nothing about how the system behaves when the parameter is not in scope --- that is, when the user supplies a fabricated name, a typographic error, or a parameter whose value lives only inside a particular software's calibration tables and never appears as a measurement in the scientific record. To assess the validity classifier described in Section~\ref{sec:bullshitbench-design}, we constructed a small but adversarial benchmark, BullshitBench, comprising six requests that span three distinct categories. + +The first category, \emph{nonsense}, contains two parameter names with no scientific referent (\texttt{mumblesnort\_\allowbreak factor} and \texttt{fake\_\allowbreak quantum\_\allowbreak correction\_\allowbreak xyz}). Both names are syntactically plausible identifiers but should be unrecognisable to any well-grounded language model and should retrieve no relevant literature even after refinement. The second category, \emph{theoretical or empirical-only}, contains three model-internal quantities for which a literature trail exists but no measured values are reported: a software-version-specific carbon-pool calibration weight from Biome-BGCMuSo~v3 (a crop biogeochemistry model), the (1,1) entry of a Kalman filter's process-noise covariance matrix (a latent-state hyperparameter), and a version-tagged root-growth partition factor from DSSAT--CROPGRO~v4.5 (a crop simulator). These names follow conventions that the strengthened enrichment prompt explicitly flags --- version suffixes, software prefixes, and tuning-related vocabulary. The third category, the positive control, is \texttt{specific\_leaf\_area} (leaf area per unit dry mass, maize crop modelling), a well-known empirically-measured quantity that the same pipeline successfully synthesises as part of the broader experiments in Section~\ref{sec:exp-eval}. Full identifiers for all six requests appear in Table~\ref{tab:bullshitbench}. + +Each request was run end-to-end through the live pipeline, against the user's LiteLLM-hosted Gemini-3-pro endpoint, the Semantic~Scholar Graph~API, and OpenAlex --- the same configuration used in the maize Biome-BGCMuSo evaluation. No mocks were used and no caches were primed; each run started from a cold state. The expected verdict was \textsc{Likely\_Invalid} for the two nonsense names, \textsc{Suspicious} for the three theoretical-only names, and \textsc{Valid} for the positive control. Table~\ref{tab:bullshitbench} reports the verdict, the number of papers retrieved, the number of values extracted, and the wall-clock time for each request. + +\begin{table}[!htbp] +\centering +\small +\caption{BullshitBench real-LLM verdicts. The pipeline ran end-to-end against a hosted LLM and live academic APIs; no caches or mocks were used. All six verdicts match the expected category. Parameter names are abbreviated where necessary; full names appear in the surrounding text.} +\label{tab:bullshitbench} +\begin{tabular}{l l l l r r r} +\toprule +Parameter & Category & Expected & Verdict & Papers & Values & Time \\ +\midrule +\texttt{mumblesnort\_factor} & nonsense & \textsc{L\_Inv.} & \textsc{L\_Inv.} & 60 & 0 & 8m13s \\ +\texttt{fake\_quantum\_correction\_xyz} & nonsense & \textsc{L\_Inv.} & \textsc{L\_Inv.} & 99 & 0 & 14m \\ +\texttt{biome\_bgcmuso\_\dots\_v3} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 12 & 2 & 11m \\ +\texttt{kalman\_\dots\_q11} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 5 & 1 & 6m35s \\ +\texttt{dssat\_\dots\_v45} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 16 & 1 & 56m \\ +\texttt{specific\_leaf\_area} & real (control) & \textsc{Valid} & \textsc{Valid} & 74 & 7 & 23m \\ +\bottomrule +\end{tabular} +\end{table} + +The benchmark produced six matches in six trials. The two nonsense names were upgraded by the LLM probe from a passive \textsc{Suspicious} verdict to \textsc{Likely\_Invalid}, despite each one returning a noisy assortment of unrelated papers (60 and 99 respectively): the probe correctly identified that the names did not correspond to any established scientific concept. The three theoretical-only names produced exactly the pattern the heuristics target: small numbers of retrieved papers (typically the model's own description and a handful of citations), few or no extracted values, and an enrichment LLM that flagged \texttt{empirically\_measured} as either false or null. Notably, the Biome-BGCMuSo and DSSAT cases retrieved values from model description tables (12 and 16 papers, 2 and 1 extracted values respectively), but the tightened \textsc{Valid} gate refused to promote either request because the LLM either declined to recognise the version-tagged identifier or flagged it as not empirically measured. The control parameter, \texttt{specific\_leaf\_area}, was classified \textsc{Valid} via the passive heuristic alone (74 papers, 7 extracted values, MEDIUM-confidence Beta prior); the probe was not invoked. + +These results are consistent with the unit and integration tests of the validity classifier (217~tests; passive heuristic and probe-override paths are exercised against scripted enrichment outputs and mock pipelines). The combined evidence supports two claims. First, the validity classifier reliably distinguishes the three categories under realistic latency and noise: even when the search step retrieves papers for a fabricated name, the probe's recognition check prevents the request from drifting into a false \textsc{Suspicious} or \textsc{Valid} verdict. Second, the strengthened enrichment prompt --- which lists version suffixes, software prefixes, and tuning vocabulary as red flags for \texttt{empirically\_measured = false} --- generalises beyond the synthetic example used in the prompt itself: the Kalman covariance and DSSAT calibration factor were correctly classified despite differing in domain and naming style from the Biome-BGCMuSo example shown to the LLM. We treat BullshitBench as a regression suite for the validity classifier rather than a definitive measure of robustness; expanding it with adversarial paraphrases (e.g.\ correctly-named but fictional empirical parameters) is a priority for follow-up work. + +% ----------------------------------------------------------------------- +\section{Relation to Existing Work} + +Prior elicitation has a substantial methodological literature \citep{OHagan2006,Garthwaite2005}. +Existing approaches generally fall into two categories: expert elicitation protocols, which +formalise the process of interviewing domain experts, and empirical Bayes methods, which estimate +prior parameters from data. Distribird occupies a different niche: automated literature-based +elicitation, where the source of prior knowledge is the published scientific record rather than a +human expert or a separate dataset. + +Concurrent with growing interest in LLM-assisted scientific workflows \citep{Boiko2023}, several +groups have explored using language models for statistical analysis tasks. Distribird is, to our +knowledge, the first system specifically designed for automated prior construction from scientific +literature, with the multi-agent feedback architecture, AIC-based distribution fitting, and +confidence communication described here. + +% ----------------------------------------------------------------------- +\section{Conclusion} +\label{sec:conclusion} + +The prior problem in Bayesian calibration is not a problem of missing knowledge --- it is a +problem of access cost. The knowledge needed to construct informative priors exists in the +scientific literature. Distribird makes that knowledge accessible automatically, turning a task that +previously required days of expert effort into a process that takes minutes. + +The tool is openly available, pip-installable, and deployable via Docker. It is designed for +process-based models with physically interpretable parameters --- the class of models where +Bayesian calibration with informative priors has the most to offer and where the scientific +literature is richest. For this class of problems, Distribird removes a longstanding practical +barrier to good statistical practice. + +Future work will extend the system to accept Monte Carlo simulation outputs as an additional +evidence source when literature is sparse, and to encode inter-parameter constraints as linear +inequality systems for joint prior construction. + +% ----------------------------------------------------------------------- +\bibliographystyle{abbrvnat} + +\begin{thebibliography}{99} + +\bibitem[Boeckmann et al.(1994)]{Boeckmann1994} +Boeckmann, A.J., Sheiner, L.B., Beal, S.L.\ (1994). +\textit{NONMEM Users Guide --- Part V}. +University of California, San Francisco. + +\bibitem[Boiko et al.(2023)]{Boiko2023} +Boiko, D.A.\ et al.\ (2023). +Emergent autonomous scientific research capabilities of large language models. +\textit{arXiv}:2304.05332. + +\bibitem[FRED(2026)]{FRED2026} +Federal Reserve Bank of St.\ Louis (2026). +FRED Economic Data. +\url{https://fred.stlouisfed.org/}. + +\bibitem[Garthwaite et al.(2005)]{Garthwaite2005} +Garthwaite, P.H., Kadane, J.B., O'Hagan, A.\ (2005). +Statistical methods for eliciting probability distributions. +\textit{Journal of the American Statistical Association}, 100(470), 680--701. + +\bibitem[Gelman(1996)]{Gelman1996} +Gelman, A.\ (1996). +Bayesian model-building by pure thought: some principles and examples. +\textit{Statistica Sinica}, 6, 215--232. + +\bibitem[Gelman et al.(2013)]{Gelman2013} +Gelman, A.\ et al.\ (2013). +\textit{Bayesian Data Analysis}, 3rd edition. +Chapman \& Hall/CRC. + +\bibitem[Hobbs et al.(2023)]{Hobbs2023} +Hobbs, N.T.\ et al.\ (2023). +Does restoring apex predators to food webs restore ecosystems? Large carnivores in +Yellowstone as a model system. +\textit{Ecological Monographs}, 93(4), e1588. + +\bibitem[Hoffman \& Gelman(2014)]{Hoffman2014} +Hoffman, M.D., Gelman, A.\ (2014). +The No-U-Turn Sampler: Adaptively setting path lengths in Hamiltonian Monte Carlo. +\textit{Journal of Machine Learning Research}, 15, 1593--1623. + +\bibitem[Holben et al.(1998)]{Holben1998} +Holben, B.N.\ et al.\ (1998). +AERONET --- A federated instrument network and data archive for aerosol characterization. +\textit{Remote Sensing of Environment}, 66(1), 1--16. + +\bibitem[Hollós et al.(2022)]{Hollos2022} +Hollós, R.\ et al.\ (2022). +Conditional interval reduction method: A possible new direction for the optimization of +process based models. +\textit{Environmental Modelling and Software}, 158, 105556. + +\bibitem[Li et al.(2019)]{Li2019} +Li, S.\ et al.\ (2019). +Yonghe Bridge modal parameters from FDD analysis. +Mendeley Data, V1. doi:10.17632/2xnn95rpb5.1. + +\bibitem[Mathieu et al.(2021)]{Mathieu2021} +Mathieu, E.\ et al.\ (2021). +A global database of COVID-19 vaccinations. +\textit{Nature Human Behaviour}, 5, 947--953. + +\bibitem[Meier et al.(2016)]{Meier2016} +Meier, F.\ et al.\ (2016). +Towards robust online inverse dynamics learning. +\textit{Proceedings of IEEE/RSJ IROS}, 4034--4039. + +\bibitem[Nelson \& Kibler(2003)]{Nelson2003} +Nelson, P.H., Kibler, J.E.\ (2003). +A catalog of porosity and permeability from core plugs in siliciclastic rocks. +\textit{USGS Open-File Report} 03-420. + +\bibitem[O'Hagan et al.(2006)]{OHagan2006} +O'Hagan, A.\ et al.\ (2006). +\textit{Uncertain Judgements: Eliciting Experts' Probabilities}. +Wiley. + +\bibitem[Pericchi \& Walley(1991)]{Pericchi1991} +Pericchi, L.R., Walley, P.\ (1991). +Robust Bayesian credible intervals and prior ignorance. +\textit{International Statistical Review}, 59(1), 1--23. + +\bibitem[Scolnic et al.(2022)]{Scolnic2022} +Scolnic, D.\ et al.\ (2022). +The Pantheon+ analysis: The full dataset and light-curve release. +\textit{The Astrophysical Journal}, 938, 113. + +\bibitem[Vehtari et al.(2021)]{Vehtari2021} +Vehtari, A., Gelman, A., Simpson, D., Carpenter, B., B\"urkner, P.-C.\ (2021). +Rank-normalization, folding, and localization: An improved $\hat{R}$ for assessing convergence +of MCMC. +\textit{Bayesian Analysis}, 16(2), 667--718. + +\bibitem[Vucetich \& Peterson(2012)]{Vucetich2012} +Vucetich, J.A., Peterson, R.O.\ (2012). +The population biology of Isle Royale wolves and moose: An overview. +\url{https://isleroyalewolf.org}. + +\bibitem[Wallach et al.(2021)]{Wallach2021} +Wallach, D.\ et al.\ (2021). +The chaos in calibrating crop models: lessons learned from a multi-model calibration exercise. +\textit{Environmental Modelling and Software}, 145, 105206. + +\end{thebibliography} + +% ----------------------------------------------------------------------- +\newpage +\appendix +\section{Detailed Experimental Tables} +\label{app:tables} + +\begin{table}[!htbp] +\centering +\caption{Distribird-constructed priors. Values: extracted data points; Sources: contributing papers.} +\label{tab:priors} +\scriptsize +\setlength{\tabcolsep}{3pt} +\renewcommand{\arraystretch}{0.93} +\begin{tabularx}{\linewidth}{@{}llXrlll@{}} + \toprule + \textbf{Domain} & \textbf{Parameter} & \textbf{Fitted prior} & \textbf{Values} & \textbf{Sources} & \textbf{Conf.} & \textbf{Method} \\ + \midrule + Climate & $r_{\text{eff}}$ & $\mathrm{Beta}(3.49,\,6.28)$ on $[2,30]$ & 12 & 4 & High & AIC \\ + Climate & AOD & $\mathcal{TN}(0.11,\,0.09)$ on $[0,3]$ & 92 & 15 & High & AIC \\ + PK & clearance & $\mathrm{Beta}(10.0,\,462.4)$ on $[0.01,2]$ & 6 & 2 & High & AIC \\ + PK & $V_d$ & $\mathrm{Beta}(3.23,\,26.2)$ on $[0.1,5]$ & 6 & 2 & High & AIC \\ + Hydrology & $f_c$ & $\mathrm{Beta}(1.57,\,2.05)$ on $[50,600]$ & 21 & 9 & High & AIC \\ + Hydrology & $K_{\text{sat}}$ & $\mathrm{Beta}(0.71,\,1.83)$ on $[1,5000]$ & 20 & 3 & High & AIC \\ + Structural & $E$ & $\mathrm{Beta}(1.92,\,2.66)$ on $[15,50]$ & 12 & 3 & High & AIC \\ + Structural & $\zeta$ & $\mathcal{TN}(0.016,\,0.014)$ on $[0.001,0.1]$ & 4 & 2 & Med. & Moment \\ + Epidemiol. & incubation & $\mathrm{Beta}(2.82,\,5.56)$ on $[1,14]$ & 110 & 27 & High & AIC \\ + Epidemiol. & infectious & $\mathrm{Beta}(2.17,\,4.09)$ on $[1,30]$ & 38 & 20 & High & AIC \\ + Astrophys. & $H_0$ & $\mathrm{Beta}(14.1,\,18.2)$ on $[50,100]$ & 78 & 26 & High & AIC \\ + Astrophys. & $\Omega_m$ & $\mathrm{LogN}(-1.18,\,0.19)$ & 23 & 11 & High & AIC \\ + Geophysics & permeability & $\mathrm{Beta}(0.81,\,33.4)$ on $[0.01,10^4]$ & 14 & 1 & High & AIC \\ + Geophysics & porosity & $\mathrm{Gamma}(36.2,\,0.0045)$ & 8 & 5 & High & AIC \\ + Robotics & $f_c$ (friction) & $\mathrm{Beta}(9.27,\,72.7)$ on $[0,2]$ & 7 & 1 & High & AIC \\ + Robotics & $I$ (inertia) & $\mathrm{Beta}(6.24,\,15.7)$ on $[0.01,5]$ & 9 & 1 & High & AIC \\ + Economics & stickiness & $\mathcal{TN}(3.48,\,1.04)$ on $[1,12]$ & 2 & 1 & Med. & Moment \\ + Economics & $\phi_\pi$ & $\mathcal{TN}(1.51,\,0.52)$ on $[1,5]$ & 4 & 3 & Med. & Moment \\ + Ecol.\ (Isle) & moose $r$ & $\mathcal{TN}(0.13,\,0.18)$ on $[0.01,0.5]$ & 3 & 2 & Med. & Moment \\ + Ecol.\ (YNP) & elk $r$ & $\mathcal{TN}(0.26,\,0.12)$ on $[0.01,0.5]$ & 0 & 0 & None & Fallback \\ + \bottomrule +\end{tabularx} +\end{table} + +\begin{table}[!htbp] +\centering +\caption{Sampling comparison: informed vs.\ uniform priors (2\,000 draws, 4 chains). Bold: informed win.} +\label{tab:mcmc} +\scriptsize +\setlength{\tabcolsep}{3pt} +\renewcommand{\arraystretch}{0.93} +\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}llrrrrrrr@{}} + \toprule + & & \multicolumn{3}{c}{\textbf{Informed}} & \multicolumn{3}{c}{\textbf{Flat}} & \\ + \cmidrule(lr){3-5} \cmidrule(lr){6-8} + \textbf{Domain} & \textbf{Parameter} & ESS & $\hat{R}$ & Div. & ESS & $\hat{R}$ & Div. & \textbf{ESS ratio} \\ + \midrule + Climate & $r_{\text{eff}}$ & 11\,677 & 1.000 & 0 & 9\,395 & 1.001 & 0 & \textbf{1.24} \\ + Climate & AOD & 12\,718 & 1.000 & 0 & 12\,675 & 1.000 & 0 & \textbf{1.00} \\ + PK & clearance & 5\,047 & 1.000 & 0 & 5\,070 & 1.001 & 0 & 0.99 \\ + PK & $V_d$ & 4\,156 & 1.000 & 0 & 4\,218 & 1.001 & 0 & 0.99 \\ + Hydrology & $f_c$ & 2\,914 & 1.001 & 1 & 2\,094 & 1.002 & 42 & \textbf{1.39} \\ + Hydrology & $K_{\text{sat}}$ & 1\,954 & 1.001 & 1 & 717 & 1.008 & 42 & \textbf{2.73} \\ + Structural & $E$ & 8\,391 & 1.000 & 0 & 5\,953 & 1.001 & 1 & \textbf{1.41} \\ + Structural & $\zeta$ & 5\,431 & 1.000 & 0 & 6\,062 & 1.000 & 1 & 0.90 \\ + Epidemiol. & incubation & 6\,612 & 1.000 & 55 & 7\,421 & 1.001 & 82 & 0.89 \\ + Epidemiol. & infectious & 7\,448 & 1.000 & 55 & 7\,153 & 1.000 & 82 & \textbf{1.04} \\ + Astrophys. & $H_0$ & 2\,400 & 1.001 & 0 & 2\,197 & 1.002 & 3 & \textbf{1.09} \\ + Astrophys. & $\Omega_m$ & 2\,522 & 1.001 & 0 & 1\,918 & 1.001 & 3 & \textbf{1.32} \\ + Geophysics & permeability & 3\,503 & 1.000 & 0 & 270 & 1.015 & 83 & \textbf{13.00} \\ + Geophysics & porosity & 3\,409 & 1.000 & 0 & 273 & 1.017 & 83 & \textbf{12.51} \\ + Robotics & friction & 7\,851 & 1.000 & 0 & 6\,694 & 1.001 & 0 & \textbf{1.17} \\ + Robotics & inertia & 9\,541 & 1.000 & 0 & 6\,293 & 1.001 & 0 & \textbf{1.52} \\ + Economics & stickiness & 8\,948 & 1.000 & 0 & 5\,420 & 1.001 & 3 & \textbf{1.65} \\ + Economics & $\phi_\pi$ & 4\,797 & 1.001 & 0 & 4\,680 & 1.000 & 3 & \textbf{1.02} \\ + Ecol.\ (Isle) & moose $r$ & 1\,932 & 1.002 & 36 & 323 & 1.023 & 1\,218 & \textbf{5.99} \\ + Ecol.\ (YNP) & elk $r$ & 1\,236 & 1.002 & 116 & 330 & 1.026 & 287 & \textbf{3.75} \\ + \bottomrule +\end{tabular*} +\end{table} + + + +\end{document} \ No newline at end of file From b0ffec0e26a1bec71b1377ca13b0fddca996c706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 19:39:19 +0200 Subject: [PATCH 6/7] Remove paper, real-LLM results, and runner from tracked files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These artefacts are kept locally only: - paper/ — manuscript draft - examples/bullshitbench_run.py — local benchmark runner - bullshitbench_real_llm_results.md — local benchmark output Files remain on disk; they are simply no longer part of the repository. --- bullshitbench_real_llm_results.md | 88 --- examples/bullshitbench_run.py | 263 --------- paper/assets/logo.png | Bin 80025 -> 0 bytes paper/figures/ess_scatter.png | Bin 184979 -> 0 bytes paper/main.tex | 867 ------------------------------ 5 files changed, 1218 deletions(-) delete mode 100644 bullshitbench_real_llm_results.md delete mode 100644 examples/bullshitbench_run.py delete mode 100644 paper/assets/logo.png delete mode 100644 paper/figures/ess_scatter.png delete mode 100644 paper/main.tex diff --git a/bullshitbench_real_llm_results.md b/bullshitbench_real_llm_results.md deleted file mode 100644 index 380d8ce..0000000 --- a/bullshitbench_real_llm_results.md +++ /dev/null @@ -1,88 +0,0 @@ -# BullshitBench v2 — Real-LLM Run - -Real end-to-end pipeline runs (LLM enrichment + Semantic Scholar + extraction + validity check) -against the refined ruleset (Rule 4b for uncertain empirical status, tightened Rule 5, -strengthened `PARAMETER_ENRICHMENT` prompt with red-flag list and second example). - -## Summary — 6/6 verdicts match expected - -| # | Parameter | Category | Expected | Verdict | Match | Papers | Values | Time | -|---|---|---|---|---|---|---|---|---| -| 1 | `mumblesnort_factor` | nonsense | likely_invalid | **likely_invalid** | ✓ | 60 | 0 | 8:13 | -| 2 | `fake_quantum_correction_xyz` | nonsense | likely_invalid | **likely_invalid** | ✓ | 99 | 0 | 13:58 | -| 3 | `biome_bgcmuso_carbon_pool_calibration_weight_v3` | theoretical | suspicious | **suspicious** | ✓ | 12 | 2 | 10:52 | -| 4 | `kalman_filter_state_covariance_q11` | theoretical | suspicious | **suspicious** | ✓ | 5 | 1 | 6:35 | -| 5 | `dssat_cropgro_root_growth_partition_factor_v45` | theoretical | suspicious | **suspicious** | ✓ | 16 | 1 | 55:38 | -| 6 | `specific_leaf_area` | real | valid | **valid** | ✓ | 74 | 7 | 22:50 | - -**Total: 6/6 PASS — every category correctly classified by the refined ruleset.** - -## Per-case detail - -### `mumblesnort_factor` — nonsense (8m 13s) -- **Expected:** `likely_invalid` -- **Verdict:** `likely_invalid` ✓ (probe-driven) -- **Pipeline:** 60 papers (search retrieval was generous), 0 values extracted -- **Insight:** Even though search returned papers, all extractions yielded zero values - and the LLM probe correctly flagged the name as fabricated. - -### `fake_quantum_correction_xyz` — nonsense (13m 58s) -- **Expected:** `likely_invalid` -- **Verdict:** `likely_invalid` ✓ (probe-driven) -- **Pipeline:** 99 papers, 0 values extracted -- **Insight:** Same pattern as case 1: papers found but zero extractable values plus - unrecognized parameter name → probe upgrades passive verdict to `likely_invalid`. - -### `biome_bgcmuso_carbon_pool_calibration_weight_v3` — theoretical (10m 52s) -- **Expected:** `suspicious` -- **Verdict:** `suspicious` ✓ -- **Pipeline:** 12 papers, 2 values extracted -- **Insight:** Despite 2 values being extracted (likely from model-description tables), - the new tightened Rule 5 blocked `valid`: parameter name with version suffix - (`_v3`) and software prefix (`biome_bgcmuso_`) makes it model-internal. - -### `kalman_filter_state_covariance_q11` — theoretical (6m 35s) -- **Expected:** `suspicious` -- **Verdict:** `suspicious` ✓ -- **Pipeline:** 5 papers, 1 value extracted -- **Insight:** Latent state covariance hyperparameter — exactly the kind of - empirical-only model parameter Rule 4b/5 is designed to catch. - -### `dssat_cropgro_root_growth_partition_factor_v45` — theoretical (55m 38s) -- **Expected:** `suspicious` -- **Verdict:** `suspicious` ✓ -- **Pipeline:** 16 papers, 1 value extracted -- **Insight:** Software-version-specific calibration factor (`_v45`); long runtime - came from extensive fulltext-fetch retries against paywalled DSSAT papers. - -### `specific_leaf_area` — real (22m 50s) ✓ control case -- **Expected:** `valid` -- **Verdict:** `valid` ✓ -- **Reason:** "Recognized parameter with literature-backed prior" -- **Empirical:** True -- **Pipeline:** 74 papers, 7 values extracted, **prior `beta` with HIGH confidence** -- **Insight:** Real, well-known empirically-measured parameter — passes Rule 5 - (recognized=True, empirical=not-False, values_extracted=7≥2, MEDIUM/HIGH confidence). - The probe was NOT called (verdict was already VALID via passive heuristic). - -## What this confirms about the refinement - -1. **Rule 4b (uncertain empirical, papers + 0 values)** correctly catches model-internal - parameters where the LLM is uncertain about empirical status. -2. **Tightened Rule 5** (require `is_recognized is True`, `is_empirical is not False`, - `values_extracted >= MIN_VALUES_FOR_VALID`) prevents calibration weights from - slipping through as `valid` when only a few values were incidentally extracted. -3. **The strengthened `PARAMETER_ENRICHMENT` prompt** (with red-flag list for version - suffixes / software prefixes / "calibration"/"weight"/"latent" terms and a second - worked example showing `empirically_measured: false`) helps the LLM correctly - classify model-internal parameters even with version suffixes. -4. **The probe is invoked appropriately**: only for ambiguous SUSPICIOUS verdicts; - it correctly upgrades clear nonsense to LIKELY_INVALID and confirms theoretical-only - parameters as SUSPICIOUS rather than VALID. - -## Total wall time - -Cases 1–5 (cases 6 was rerun separately due to a sleep-mode interruption): -- Original run: ~2 hours -- Specific_leaf_area rerun: 22m 50s -- **Total real-LLM verification: ~2.5 hours, 6/6 PASS** diff --git a/examples/bullshitbench_run.py b/examples/bullshitbench_run.py deleted file mode 100644 index 3dc8742..0000000 --- a/examples/bullshitbench_run.py +++ /dev/null @@ -1,263 +0,0 @@ -"""Real-LLM BullshitBench runner. - -Runs a curated mix of fake, theoretical, and real parameters through the full -Distribird pipeline (with real LLM + Semantic Scholar / OpenAlex). Saves a -markdown report comparing the validity verdicts. - -Usage: - python examples/bullshitbench_run.py -""" - -from __future__ import annotations - -import asyncio -import json -import logging -import time -from dataclasses import dataclass -from pathlib import Path - -from distribird.agent.pipeline import run_parameter -from distribird.config import get_settings -from distribird.models import ( - ConstraintSpec, - ParameterInput, - ParameterValidity, - PipelineResult, -) - -logging.basicConfig(level=logging.WARNING, format="%(message)s") -logger = logging.getLogger(__name__) - - -@dataclass -class TestCase: - name: str - description: str - domain_context: str - expected: ParameterValidity - category: str # "nonsense", "theoretical", "real" - constraints: ConstraintSpec | None = None - - -CASES: list[TestCase] = [ - # ── Pure nonsense ── - TestCase( - name="mumblesnort_factor", - description="A fabricated coefficient that does not exist in any literature", - domain_context="general scientific testing", - expected=ParameterValidity.LIKELY_INVALID, - category="nonsense", - constraints=ConstraintSpec(lower_bound=0, upper_bound=10), - ), - TestCase( - name="fake_quantum_correction_xyz", - description="A made-up quantum correction term with no scientific basis", - domain_context="theoretical physics", - expected=ParameterValidity.LIKELY_INVALID, - category="nonsense", - constraints=ConstraintSpec(lower_bound=0, upper_bound=1), - ), - # ── Theoretical / non-empirical ── - TestCase( - name="biome_bgcmuso_carbon_pool_calibration_weight_v3", - description=( - "Internal calibration weight from Biome-BGCMuSo model version 3.x; " - "purely a model-internal tuning parameter" - ), - domain_context="Biome-BGCMuSo crop modeling", - expected=ParameterValidity.SUSPICIOUS, - category="theoretical", - constraints=ConstraintSpec(lower_bound=0, upper_bound=10), - ), - TestCase( - name="kalman_filter_state_covariance_q11", - description=( - "The (1,1) element of the process noise covariance matrix Q used in a " - "Kalman filter; a latent state covariance hyperparameter not directly measurable" - ), - domain_context="state-space estimation / Kalman filtering", - expected=ParameterValidity.SUSPICIOUS, - category="theoretical", - constraints=ConstraintSpec(lower_bound=0, upper_bound=100), - ), - TestCase( - name="dssat_cropgro_root_growth_partition_factor_v45", - description=( - "Software-version-specific calibration factor controlling root growth " - "partitioning in DSSAT-CROPGRO version 4.5" - ), - domain_context="DSSAT crop simulation modeling", - expected=ParameterValidity.SUSPICIOUS, - category="theoretical", - constraints=ConstraintSpec(lower_bound=0, upper_bound=10), - ), - # ── Real parameter (control) ── - TestCase( - name="specific_leaf_area", - description="Leaf area per unit dry mass of leaves", - domain_context="maize crop modeling", - expected=ParameterValidity.VALID, - category="real", - constraints=ConstraintSpec(lower_bound=5, upper_bound=50), - ), -] - - -async def run_one(case: TestCase, settings) -> tuple[TestCase, PipelineResult, float]: - """Run a single test case through the real pipeline.""" - param = ParameterInput( - name=case.name, - description=case.description, - unit="", - domain_context=case.domain_context, - constraints=case.constraints or ConstraintSpec(), - ) - print(f"\n{'=' * 70}", flush=True) - print(f"Running: {case.name} (expect: {case.expected.value})", flush=True) - print(f"{'=' * 70}", flush=True) - t0 = time.monotonic() - try: - result = await run_parameter(param, settings) - except Exception as e: - logger.exception("Pipeline crashed for %s", case.name) - # Return a synthetic failure result - from distribird.distributions.uninformative import wide_normal_prior - - result = PipelineResult( - parameter=param, - prior=wide_normal_prior( - param.name, - param.constraints.lower_bound, - param.constraints.upper_bound, - ), - warnings=[f"Crash: {e}"], - ) - elapsed = time.monotonic() - t0 - print( - f" → verdict: {result.parameter_validity.value} " - f"(papers={result.papers_found}, values={result.values_extracted}, " - f"elapsed={elapsed:.1f}s)", - flush=True, - ) - return case, result, elapsed - - -def render_markdown( - runs: list[tuple[TestCase, PipelineResult, float]], - output_path: Path, -) -> None: - lines: list[str] = [] - lines.append("# BullshitBench — Real-LLM Run\n") - lines.append( - "Real end-to-end pipeline runs " - "(LLM enrichment + Semantic Scholar + extraction + validity check)\n" - ) - - # ── Summary table ── - correct = sum(1 for c, r, _ in runs if r.parameter_validity == c.expected) - lines.append(f"## Summary — {correct}/{len(runs)} verdicts match expected\n") - lines.append( - "| Parameter | Category | Expected | Verdict | Match | Papers | Values | Time |" - ) - lines.append("|---|---|---|---|---|---|---|---|") - for case, result, elapsed in runs: - match = "OK" if result.parameter_validity == case.expected else "MISMATCH" - lines.append( - f"| `{case.name}` | {case.category} | {case.expected.value} | " - f"{result.parameter_validity.value} | {match} | " - f"{result.papers_found} | {result.values_extracted} | {elapsed:.1f}s |" - ) - lines.append("") - - # ── Per-case detail ── - lines.append("## Per-case details\n") - for case, result, elapsed in runs: - match = ( - "MATCHES expected" - if result.parameter_validity == case.expected - else "DOES NOT match expected" - ) - lines.append(f"### `{case.name}` — {case.category}") - lines.append(f"- **Description:** {case.description}") - lines.append(f"- **Domain:** {case.domain_context}") - lines.append(f"- **Expected:** `{case.expected.value}`") - lines.append( - f"- **Verdict:** `{result.parameter_validity.value}` — {match}" - ) - lines.append(f"- **Reason:** {result.validity_reason or '(none)'}") - lines.append(f"- **Empirical:** {result.is_empirical}") - lines.append( - f"- **Pipeline:** {result.papers_found} papers, " - f"{result.values_extracted} values, " - f"prior `{result.prior.family.value}` " - f"(confidence: {result.prior.confidence.value}, " - f"informative: {result.prior.is_informative})" - ) - if result.enrichment is not None: - lines.append( - f"- **LLM recognized:** {result.enrichment.is_recognized_parameter} " - f"(confidence: {result.enrichment.recognition_confidence})" - ) - lines.append( - f"- **LLM empirically measured:** {result.enrichment.empirically_measured}" - ) - if result.enrichment.common_terminology: - lines.append( - f"- **Terminology:** {', '.join(result.enrichment.common_terminology[:5])}" - ) - if result.validity_signals: - sig = result.validity_signals - sig_short = { - k: v - for k, v in sig.items() - if k != "probe_result" - } - lines.append("- **Signals:**") - lines.append(" ```json") - lines.append(" " + json.dumps(sig_short, indent=2).replace("\n", "\n ")) - lines.append(" ```") - if "probe_result" in sig and sig["probe_result"]: - lines.append( - f"- **LLM probe:** verdict=`{sig['probe_result'].get('verdict')}`, " - f"reason={sig['probe_result'].get('reason')!r}" - ) - if result.warnings: - lines.append("- **Warnings:**") - for w in result.warnings: - lines.append(f" - {w}") - lines.append(f"- **Elapsed:** {elapsed:.1f}s\n") - - output_path.write_text("\n".join(lines)) - print(f"\nMarkdown report saved: {output_path}") - - -async def main() -> None: - settings = get_settings() - if not settings.llm_base_url or not settings.llm_api_key: - print("ERROR: DISTRIBIRD_LLM_BASE_URL and DISTRIBIRD_LLM_API_KEY required") - return - - print(f"LLM: {settings.llm_model} via {settings.llm_base_url}") - print(f"Validity check enabled: {settings.enable_validity_check}") - print(f"Validity probe enabled: {settings.enable_validity_probe}") - print(f"Running {len(CASES)} test cases...") - - # Run sequentially to avoid hammering the LLM/search APIs - runs = [] - for case in CASES: - result_tuple = await run_one(case, settings) - runs.append(result_tuple) - - output_path = Path(__file__).parent.parent / "bullshitbench_real_llm_results.md" - render_markdown(runs, output_path) - - # Brief stdout summary - correct = sum(1 for c, r, _ in runs if r.parameter_validity == c.expected) - print(f"\n{'=' * 70}") - print(f"FINAL: {correct}/{len(runs)} verdicts match expected") - print(f"{'=' * 70}") - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/paper/assets/logo.png b/paper/assets/logo.png deleted file mode 100644 index f9abd62e1400d42843918a0a2697a791c89ad583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80025 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%0ApdSe&eA@ZZ9~e2;$a%NehhHmpGR((1l$G$k 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

G;ob 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

7W;KGZlv? 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%0A&J%)EH@>Yg`?u+3WJhea3}pipqD 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 bele kell tenni, csak az összehasonlítás} - -% BullshitBench (out-of-scope detection): see Section~\ref{sec:bullshitbench-design} -% (validity-classification node) and Section~\ref{sec:bullshitbench-eval} (real-LLM -% evaluation across nonsense, theoretical-only, and real parameters). - -\vspace{1em} - -% ----------------------------------------------------------------------- -\section{Introduction} - -\subsection{The calibration problem} - -Process-based models describe complex natural systems (crop growth, water movement through -soil, biogeochemical cycles, disease spread) using mechanistic equations with parameters that -represent physical or biological quantities. Because many of these parameters cannot be measured -directly, they must be inferred from observations by adjusting parameter values until the model -output matches available data. This process is called model calibration, or inverse modeling \citep{Hollos2022}. - -Bayesian calibration is arguably the most principled approach to this -problem, both statistically and philosophically \citep{Gelman2013}. It combines prior knowledge about the parameters with the information -contained in the observed data, and returns a posterior distribution that quantifies not only the -most likely parameter values but also the uncertainty around them. This uncertainty quantification -is critical for decision-making and for honest reporting of model predictions. - -\subsection{The prior problem} - -The Bayesian approach requires the researcher to specify a prior distribution for each parameter -before seeing the data. This raises an immediate practical question: what prior should be used? - -The mathematically convenient answer is to use a uniform prior --- to claim that all parameter -values in a range are equally plausible. This choice is almost universally adopted in practice -\citep{Wallach2021}. It is also almost universally inadequate. \citet{Pericchi1991} demonstrated -that a universally applicable uninformative prior does not exist: uniform priors are not invariant -under reparameterisation, meaning the implied prior changes depending on how the parameter is -expressed. \citet{Gelman1996} showed that the posterior mode under a uniform prior coincides with -the maximum likelihood estimate --- reducing Bayesian inference to the very framework it is -supposed to improve upon. The information loss from ignoring genuine prior knowledge has real -consequences: slower convergence of the sampler, unnecessarily wide credible intervals, and in -data-scarce situations, poorly constrained posteriors that an informative prior would have -regularised. - -Informative priors --- priors that encode genuine knowledge about the parameter --- improve all of -these properties. The knowledge needed to construct them exists. It is in the scientific -literature: in papers reporting measured values, in review articles synthesising ranges across -studies, in textbooks describing physical constraints. The problem is not that the knowledge is -absent. The problem is that retrieving and synthesising it is expensive. For a model with twenty -parameters, constructing informative priors from literature may require days of reading. -Researchers default to uniform priors not because they believe them appropriate, but because the -alternative is too costly. - -This gap between knowing the problem and having a scalable solution has persisted for more than -thirty years. - -\subsection{Large language models as a solution pathway} - -Recent advances in large language models (LLMs) with agentic search capability have created a new -option. An LLM agent can search scientific databases, retrieve relevant papers, extract reported -numerical values, and synthesise them into a probability distribution --- automatically, and at a -cost that makes the process practical for routine use. - -We present Distribird, a web application and Python library that implements this pipeline. Distribird is -not a general-purpose prior elicitation tool. It is designed specifically for the class of -problems where literature-based prior construction is most appropriate and most impactful: -process-based models with physically interpretable parameters, active publishing communities, and -genuine prior knowledge encoded in the scientific record. - -% ----------------------------------------------------------------------- -\section{Conditions of Applicability} - -Distribird produces its best results under the following conditions, which define the class of -problems the tool is designed for: - -\begin{itemize} - \item \textbf{Physically interpretable parameters:} The parameter has a physical or biological - interpretation that is discussed in the scientific literature --- for example, a maximum - photosynthesis rate, a root depth, a transmission coefficient, or a thermal threshold. - - \item \textbf{Literature-active domain:} The domain has an active publishing community, so that - relevant papers can be found by automated search. - - \item \textbf{Univariate distributions:} The parameter can be described by a standard univariate - probability distribution (Normal, truncated Normal, Beta, Gamma, Log-Normal). Parameters with - complex multimodal behaviour are outside the current scope. - - \item \textbf{Known physical bounds:} Physical bounds on the parameter are known or can be - reasoned about by the user, so that the fitted distribution can be constrained appropriately. -\end{itemize} - -When these conditions are not fully met, Distribird degrades gracefully: it communicates the -evidential basis of its output explicitly, flags low-confidence results, and falls back to -principled uninformative alternatives rather than producing false confidence. The confidence -hierarchy is described in Section~\ref{sec:confidence}. - -\begin{mdframed}[style=calloutbox] - \textbf{What Distribird is not designed for}\\[4pt] - Distribird is not designed for parameters without physical interpretation (e.g.\ neural network - weights), purely empirical tuning coefficients with no literature base, or parameters whose - behaviour is fundamentally multivariate. For these cases, other approaches --- prior predictive - checks, expert elicitation, or sensitivity analysis --- remain more appropriate. To prevent - silent misuse, the pipeline classifies each request and explicitly flags out-of-scope inputs - (Section~\ref{sec:bullshitbench-design}); we evaluate this defence in - Section~\ref{sec:bullshitbench-eval}. -\end{mdframed} - -% ----------------------------------------------------------------------- -\section{System Design} - -\subsection{Overview} - -Distribird is implemented as a Python~3.10+ package distributed via \href{https://pypi.org/project/distribird/}{PyPI} and exposing two user-facing interfaces: a REST~API built on FastAPI and an interactive Streamlit web application. Both interfaces delegate to the same core pipeline, ensuring identical behaviour regardless of access method. The system is configured through environment variables, making deployment straightforward via Docker or direct installation. - -The user provides a \texttt{ParameterInput} object specifying the parameter name, a plain-language physical description, the measurement unit, a domain context string (e.g.\ ``Biome-BGCMuSo maize crop modelling, Central European conditions''), and optional physical constraints (lower bound, upper bound). For example: - -\begin{verbatim} - ParameterInput( - name="TMAX", - description="Maximum temperature for photosynthesis", - unit="°C", - domain_context="Biome-BGCMuSo maize, Central Europe", - constraints=ConstraintSpec(lower_bound=30.0, upper_bound=50.0) - ) -\end{verbatim} - -\noindent The system returns a \texttt{PipelineResult} containing the fitted prior distribution, its confidence level, the number of contributing sources, all search queries attempted, the full list of retrieved papers with extracted values, an optional enrichment context, and --- when multi-agent deliberation is enabled --- the moderator's rationale and any excluded papers. A simplified example: - -\begin{verbatim} - PipelineResult( - prior=FittedPrior( - family="truncated_normal", - params={"mu": 40.5, "sigma": 3.2, "a": 30.0, "b": 50.0}, - confidence="high", - is_informative=True, - n_sources=6 - ), - papers_found=16, - values_extracted=8, - search_queries=["maize maximum photosynthesis temperature", ...] - ) -\end{verbatim} - -\noindent This complete provenance chain allows the user to audit every step from literature search to final distribution. - -\subsection{Multi-agent LangGraph pipeline} - -The core of Distribird is a LangGraph \texttt{StateGraph} that orchestrates a multi-agent pipeline with two feedback loops and a conditional forward path. Unlike a directed acyclic graph, the pipeline permits cycles: when initial evidence is insufficient, the graph routes back to earlier nodes for refinement before proceeding to synthesis. All nodes read from and write to a shared \texttt{PipelineState} typed dictionary that follows the blackboard pattern --- an append-only message log (\texttt{BlackboardMessage}) through which nodes communicate discoveries, terminology updates, query suggestions, cross-references, and warnings without direct coupling. - -\subsubsection{Pipeline overview} - -Figure~\ref{fig:pipeline} illustrates the complete graph topology, including two feedback loops, one conditional forward path, and the multi-agent search subsystem. The pipeline comprises ten primary processing nodes (including a terminal validity-classification node, Section~\ref{sec:bullshitbench-design}) and three refinement nodes, connected by two routing functions that implement the conditional logic. - -\begin{figure}[!htbp] -\centering -\begin{tikzpicture}[ - node distance=0.6cm, - >={Stealth[length=3pt]}, - mainnode/.style={ - rectangle, rounded corners=3pt, draw=black!70, fill=blue!6, - minimum width=2.2cm, minimum height=0.65cm, - font=\footnotesize\sffamily, align=center, inner sep=3pt - }, - refinenode/.style={ - rectangle, rounded corners=3pt, draw=orange!70!black, fill=orange!10, - minimum width=2.0cm, minimum height=0.65cm, - font=\footnotesize\sffamily, align=center, inner sep=3pt - }, - gatenode/.style={ - diamond, draw=red!60!black, fill=red!6, - minimum width=1.0cm, minimum height=0.6cm, - font=\footnotesize\sffamily, align=center, inner sep=1pt, - aspect=2.2 - }, - termnode/.style={ - rectangle, rounded corners=3pt, draw=black!50, fill=gray!15, - minimum width=1.6cm, minimum height=0.5cm, - font=\footnotesize\sffamily\bfseries, align=center, inner sep=3pt - }, - looplabel/.style={font=\scriptsize\sffamily\itshape, text=orange!70!black}, - mainedge/.style={draw, ->, thick, black!70}, - loopedge/.style={draw, ->, thick, orange!70!black}, - condlabel/.style={font=\tiny\sffamily, text=black!50}, -] - -% ============================================================ -% MAIN VERTICAL FLOW -% ============================================================ -\node[termnode] (start) {Input}; -\node[mainnode, below=of start] (enrich) {Enrich}; -\node[mainnode, below=of enrich] (querygen) {QueryGen}; -\node[mainnode, below=of querygen] (search) {Search}; -\node[mainnode, below=of search] (relevance) {Relevance\\[-1pt]Judge}; -\node[mainnode, below=of relevance] (crossenrich) {CrossEnrich\\[-1pt]{\tiny(snowballing)}}; -\node[mainnode, below=of crossenrich] (fulltext) {Fetch\\[-1pt]Fulltext}; -\node[mainnode, below=of fulltext] (extract) {Extract}; -\node[gatenode, below=0.7cm of extract] (qgate) {Quality\\[-1pt]Gate}; -\node[mainnode, below=0.7cm of qgate] (synthesize) {Synthesize}; -\node[mainnode, below=of synthesize] (validity) {Validity\\[-1pt]Check}; -\node[termnode, below=of validity] (output) {Output}; - -% ============================================================ -% MAIN FLOW EDGES -% ============================================================ -\draw[mainedge] (start) -- (enrich); - -% --- Conditional: Enrich → QueryGen OR ValidityCheck (early-skip) --- -% Code: route_after_enrich() — if LLM does not recognize parameter, skip directly -% to validity_check to avoid wasting search/extract/synthesize compute. -\draw[mainedge] (enrich) -- node[condlabel, left] {recognised} (querygen); -\draw[mainedge, densely dashed, red!60!black] - (enrich.east) -- ++(2.0,0) - node[condlabel, above, midway, text=red!60!black] {early-skip} - node[condlabel, below, midway, text=red!60!black] {(unrecognised)} - |- (validity.east); - -\draw[mainedge] (querygen) -- (search); -\draw[mainedge] (search) -- (relevance); - -% --- Conditional: RelevanceJudge → CrossEnrich OR FetchFulltext --- -% Code: route_after_deliberation() — if ≥2 high-relevance papers → cross_enrich, else → fetch_fulltext -\draw[mainedge] (relevance) -- node[condlabel, left] {$\geq$2 relevant} (crossenrich); -\draw[mainedge, densely dashed, black!40] - ([xshift=0.2cm]relevance.south) -- ++(0,-0.2) - -| ([xshift=0.55cm]fulltext.east) -- (fulltext.east); -\node[condlabel] at ([xshift=1.1cm]fulltext.east) {otherwise}; - -\draw[mainedge] (crossenrich) -- (fulltext); -\draw[mainedge] (fulltext) -- (extract); -\draw[mainedge] (extract) -- (qgate); - -% --- Conditional: QualityGate → Synthesize OR RefineSearch OR RefineExtraction --- -\draw[mainedge] (qgate) -- (synthesize); -\draw[mainedge] (synthesize) -- (validity); -\draw[mainedge] (validity) -- (output); - -% ============================================================ -% MULTI-AGENT SEARCH (annotation to the right of Search node) -% Shows what happens INSIDE search_node -% ============================================================ -% Simple callout box listing the agents and moderator -\node[draw=teal!60, rounded corners=4pt, fill=teal!4, - text width=4.5cm, font=\scriptsize\sffamily, - inner sep=5pt, align=left, - right=1.2cm of search, yshift=-0.3cm] - (agentbox) {% - \textbf{Parallel source agents:}\\[2pt] - \textbullet~Semantic Scholar\\ - \textbullet~OpenAlex\\ - \textbullet~Deep Research {\tiny\itshape(opt-in)}\\ - \textbullet~Web Search {\tiny\itshape(opt-in)}\\[3pt] - \textbf{$\downarrow$ Moderator LLM}\\ - {\tiny deduplicates, selects consensus papers} - }; -\draw[draw, ->, semithick, teal!60!black] - (search.east) -- (agentbox.west) - node[condlabel, above, midway, text=teal!60!black] {dispatches}; - -% ============================================================ -% LOOP A: QualityGate → RefineSearch → Search -% Code: quality_gate --[0 values]--> refine_search --> search -% ============================================================ -\node[refinenode, left=2.0cm of extract] (refinesearch) {Refine\\[-1pt]Search}; - -\draw[loopedge] - (qgate.west) -| node[looplabel, above right, pos=0.2] {0 values} (refinesearch.south); -\draw[loopedge] - (refinesearch.north) |- node[looplabel, above, pos=0.75] {\textbf{Loop A}} (search.west); - -% ============================================================ -% LOOP B: QualityGate → RefineExtraction → QualityGate -% Code: quality_gate --[low conf.]--> refine_extraction --> quality_gate -% ============================================================ -\node[refinenode, right=2.0cm of qgate] (refineextract) {Refine\\[-1pt]Extraction}; - -\draw[loopedge] - (qgate.east) -- node[looplabel, above, pos=0.4] {low conf.} (refineextract.west); -\draw[loopedge] - (refineextract.south) -- ++(0,-0.4) -| - node[looplabel, below, pos=0.15] {\textbf{Loop B}} ([xshift=0.3cm]qgate.south); - -\end{tikzpicture} -\caption{Distribird LangGraph pipeline. Two feedback loops (A, B), one conditional forward path -(cross-enrichment), and one early-skip path (red dashed) from Enrich directly to Validity~Check. -When the enrichment LLM clearly does not recognise the requested parameter, the pipeline bypasses -all subsequent search, extraction, and synthesis work and proceeds straight to classification --- -saving roughly 90\% of the wall-clock cost on out-of-scope requests. The Search node internally -dispatches to parallel source agents whose outputs are reconciled by a Moderator LLM. The terminal -Validity~Check node classifies the request as VALID, SUSPICIOUS, LIKELY\_INVALID, or UNKNOWN -(Section~\ref{sec:bullshitbench-design}).} -\label{fig:pipeline} -\end{figure} - -\subsubsection{Pipeline nodes and feedback loops} -\label{sec:feedback} - -The pipeline comprises ten primary processing nodes --- Enrich (parameter semantics expansion), QueryGen (search query generation), Search (parallel API queries), RelevanceJudge (paper scoring), CrossEnrich (citation snowballing), FetchFulltext (PDF retrieval and parsing), Extract (numerical value extraction), QualityGate (routing logic), Synthesize (distribution fitting), and ValidityCheck (out-of-scope classification, Section~\ref{sec:bullshitbench-design}) --- connected by two feedback loops and one conditional forward path that allow the pipeline to iteratively improve its results when initial evidence is insufficient: - -\begin{itemize} - \item \textbf{Loop~A --- Search refinement.} When the quality gate finds zero extracted values but papers were retrieved (indicating that the search found relevant literature but extraction failed to locate numerical data), the pipeline routes to a \texttt{RefineSearch} node. This node analyses the summaries of retrieved papers and generates refined search queries targeting more specific experimental or calibration studies. Control then returns to the Search node. This loop may execute up to two iterations (configurable via \texttt{search\_refinement\_max}). - - \item \textbf{Conditional path --- Cross-enrichment.} After relevance judgment, if the iteration budget permits and at least two high-relevance papers have been identified, the pipeline routes through CrossEnrich (citation snowballing) before fetching full texts; otherwise, it skips directly to FetchFulltext. This is a conditional forward path, not a feedback loop --- it does not cycle back to an earlier node. The cross-enrichment step is executed at most once per pipeline invocation (\texttt{cross\_enrichment\_max\,=\,1}). - - \item \textbf{Loop~B --- Extraction refinement.} When the quality gate finds extracted values but none are high-confidence and the coefficient of variation exceeds~1.5 (indicating high disagreement among sources), the pipeline routes to a \texttt{RefineExtraction} node that uses web-assisted search to locate additional confirming or disconfirming evidence. Control returns to the quality gate for re-evaluation. This loop may execute once (\texttt{extraction\_refinement\_max\,=\,1}). -\end{itemize} - -\noindent An \texttt{IterationBudget} object tracks the number of iterations consumed by each loop and enforces a global cap on total LLM calls (default: 30), guaranteeing termination even when both loops and the conditional path are activated in the same invocation. The budget is checked at every conditional routing point; when exhausted, the pipeline proceeds directly to synthesis with whatever evidence has been accumulated. - - -\subsection{Validity classification: detecting out-of-scope requests} -\label{sec:bullshitbench-design} - -A literature-grounded prior is only meaningful for parameters whose values are reported in the scientific record. Two failure modes lie outside Distribird's contract: fabricated or non-scientific names (e.g.\ a typo, a pseudoscientific term, or a placeholder), and parameters that genuinely belong to a model but are not empirically measured (calibration weights, latent state covariances, software-version-specific tuning factors). In both cases the synthesizer's tiered fallback already produces a wide uninformative prior with low confidence, but it does so silently, which risks downstream users mistaking the placeholder for evidence-backed guidance. The pipeline closes this gap by classifying every request into one of four categories --- \textsc{Valid}, \textsc{Suspicious}, \textsc{Likely\_Invalid}, or \textsc{Unknown} --- using a two-stage gating strategy: an \emph{early-skip} immediately after enrichment that prevents wasted compute on clearly invalid requests, and a \emph{terminal classifier} that issues the final verdict using all collected signals. The combined design adds at most one extra LLM call beyond the standard pipeline. - -The early-skip route examines the enrichment LLM's self-reports as soon as they become available. The \texttt{PARAMETER\_ENRICHMENT} prompt is extended with three additional fields --- whether the LLM recognises the parameter as an established scientific quantity, the LLM's confidence in that recognition, and whether the parameter is empirically measurable rather than theoretical. When the LLM responds with \texttt{is\_recognized\_parameter=False} at \texttt{none} or \texttt{low} confidence, the routing function \texttt{route\_after\_enrich} forwards the state directly to the terminal validity-check node, bypassing query generation, the multi-agent search, full-text retrieval, extraction, the quality gate, and synthesis. Because the search and extraction stages dominate the wall-clock cost of a parameter request (typically 80--95\% of the total runtime in our benchmarks), this short-circuit prevents the system from running expensive paper retrieval and LLM-driven extraction for inputs that the model itself has already classified as nonsense. Requests that pass the early gate proceed through the standard pipeline and are subjected to the terminal classifier with the full evidence base in hand. - -The terminal classifier consumes signals collected throughout the run: the enrichment self-reports, the number of refined queries tried, the number of papers retrieved, the number of values extracted, and the confidence of the fitted prior. A small set of pure-Python heuristic rules combines these signals into a passive verdict. A request that reaches the classifier through the early-skip path is marked \textsc{Likely\_Invalid} (no literature, no terminology, unrecognised name). A request whose enrichment reports the parameter as not empirically measured (or whose empirical status is uncertain) where literature was found but no values could be extracted is marked \textsc{Suspicious}: the parameter exists in some published model but cannot be grounded in measurement. A request with a high- or medium-confidence informative prior, recognised terminology, and at least two extracted values is marked \textsc{Valid}; the gate requires the recognition signal to be strictly true (rather than merely not false), so an LLM that is uncertain about the parameter's identity still falls through to the probe. - -When the passive verdict is \textsc{Suspicious}, the node calls a dedicated \texttt{PARAMETER\_VALIDITY\_PROBE} LLM that receives the enrichment self-flags, the pipeline observations, and a description of the four verdicts. The probe can refine the verdict in either direction --- upgrading clear nonsense to \textsc{Likely\_Invalid} or confirming theoretical-only parameters as \textsc{Suspicious} --- but cannot override a \textsc{Valid} or \textsc{Likely\_Invalid} verdict already reached by the passive heuristics. The probe is gated by both the iteration budget and an \texttt{enable\_validity\_probe} setting, so users who require fully offline operation can disable it. The verdict, the passive signals that produced it, and the probe's reason are exposed on the \texttt{PipelineResult} via the \texttt{parameter\_validity}, \texttt{validity\_reason}, \texttt{validity\_signals}, and \texttt{is\_empirical} fields, and a human-readable warning of the form ``Parameter validity: \textsc{suspicious} --- \textit{reason}'' is appended to \texttt{PipelineResult.warnings} so that command-line and Streamlit consumers see the verdict at a glance. - -\subsection{Literature search} - -The search subsystem queries two academic APIs in parallel. \textit{Semantic Scholar} provides citation-graph metadata, abstracts, and open-access PDF links via its Graph~API; \textit{OpenAlex} provides an independent index with complementary coverage, reconstructing abstracts from its inverted-index representation. Both APIs are filtered to open-access papers only, ensuring that full-text retrieval is feasible. - -Two additional source agents are available as optional complements. A \textit{deep-research agent} delegates to an LLM with web-search capabilities (configurable model, default OpenAI's \texttt{o4-mini-deep-research}) to discover papers that may not be indexed by the academic APIs; its results are verified against Semantic Scholar before inclusion to prevent hallucinated references. A \textit{web search agent} performs a similar verification-backed LLM search using a general-purpose web-search prompt. Both agents contribute \texttt{AgentFinding} objects to the deliberation process alongside the API-based agents. - -\subsection{Prior fitting and confidence hierarchy} -\label{sec:confidence} - -The distribution fitting strategy is tiered according to the amount of evidence recovered, ensuring that the statistical method matches the information content of the data: - -\begin{table}[!htbp] -\centering -\caption{Tiered prior fitting strategy based on available evidence.} -\label{tab:confidence} -\small -\begin{tabularx}{\linewidth}{@{}l>{\raggedright\arraybackslash}Xll@{}} - \toprule - \textbf{Evidence} & \textbf{Method} & \textbf{Confidence} & \textbf{Fallback?} \\ - \midrule - $\geq 5$ values & AIC model selection across five candidate families: Normal, Truncated Normal, Gamma, Log-Normal, and Beta. The family minimising AIC is selected. For distributions requiring positive support (Gamma, Log-Normal), only positive values are considered; Beta fitting requires user-specified bounds. & High & No \\[4pt] - 2--4 values & Moment matching to a Truncated Normal with the standard deviation widened by a factor of~1.5. A minimum-width floor is imposed: $\sigma \geq \max(0.05\,|\mu|,\; 0.05\,(u - l))$, where $u$ and $l$ are the upper and lower bounds, to prevent overconfident priors from sparse data. & Medium & No \\[4pt] - 1 value & Wide Normal centred on the single reported value, with $\sigma$ set to a conservative fraction of the plausible range. & Low & No \\[4pt] - 0 values & Uniform prior over the user-specified bounds, or a wide Truncated Normal centred at the midpoint of the bounds with $\sigma = (u - l)/4$. & None & Yes \\ - \bottomrule -\end{tabularx} -\end{table} - -\todo[inline]{We have to be explicit on the distributions for the fitting. Ne táblzatban legyen, hanem felette legyen kifejtve mikor használjuk az AIC-ot, Momentumot, meg mikor Normal, Gamma, Beta, stb...} - -\noindent All fitted distributions are constrained to respect user-specified physical bounds. When sample sizes or uncertainties are reported alongside extracted values, inverse-variance weighting is applied during fitting. The confidence level is recorded in the \texttt{FittedPrior} object and propagated through all export formats, ensuring that downstream users can distinguish empirically grounded priors from uninformative fallbacks. - -\subsection{Export formats} - -Distribird exports priors in three formats designed for direct integration into common Bayesian calibration workflows: - -\begin{itemize} - \item \textbf{JSON} --- a structured record containing the parameter name, distribution family, fitted parameters, confidence level, informative/uninformative flag, fitting rationale, number of contributing sources, and a citation list with title, DOI, year, and authors for each paper. Batch exports include a version tag and run metadata. - - \item \textbf{Python} --- an executable \texttt{scipy.stats} script that defines a sampling function for each parameter, imports \texttt{numpy} and \texttt{scipy}, and generates a configurable number of random draws (default: 10\,000). The generated code is compatible with PyMC, emcee, and custom MCMC samplers. - - \item \textbf{R} --- an executable R script using base distribution functions (\texttt{rnorm}, \texttt{rgamma}, \texttt{rlnorm}, \texttt{rbeta}, \texttt{runif}) and the \texttt{truncnorm} package for truncated normal sampling. The script is ready for use with BayesianTools, FME, or custom samplers. -\end{itemize} - -\noindent All three formats embed the complete provenance chain --- from search queries through paper citations to the fitting rationale --- so that the prior's evidential basis is preserved alongside its numerical specification. - - -% ----------------------------------------------------------------------- -\section{Experimental Evaluation} -\label{sec:exp-eval} - -We tested whether Distribird's literature-informed priors improve Bayesian parameter estimation compared to the standard practice of using uniform (``I don't know'') priors. The experiment covered 20~parameters across ten scientific domains, using real publicly available datasets. - -\subsection{Experimental design} - -For each parameter, we ran the same Bayesian model twice: once with the Distribird-constructed prior and once with a uniform prior over the same bounds. Both runs used identical data, the same sampling algorithm \citep[NUTS;][]{Hoffman2014}, and the same configuration (2\,000~samples, 4~parallel chains, fixed random seed). - -We measure success using the \emph{ESS ratio}: the effective number of independent samples produced by the informed run divided by the flat run. An ESS ratio above~1 means the informed prior helped the sampler work more efficiently; below~1 means the uniform prior performed better. We call an ESS ratio above~1 an informed ``win.'' - -Beyond raw efficiency, we also track two reliability indicators: whether the sampler encountered numerical problems (divergent transitions) and whether the chains agreed with each other ($\hat{R}$ convergence statistic \citep{Vehtari2021}). We define a \emph{no-harm} outcome as one where the informed prior did not make either reliability indicator worse, even if it did not improve ESS. This distinction matters in practice: a slightly slower but reliable sampler is far preferable to a faster one that produces untrustworthy results. - -\subsection{Use cases and datasets} -\label{sec:usecases} - -Ten scientific domains were selected to span a broad range of model types and data characteristics. Within ecology, two independent predator--prey systems were tested, yielding 11~use cases and 20~parameters in total. All datasets are real, publicly available, and require no registration to access. - -\begin{table}[!htbp] -\centering -\caption{Experimental use cases and datasets. $n$: number of observations.} -\label{tab:usecases} -\footnotesize -\setlength{\tabcolsep}{4pt} -\begin{tabular}{@{}llllr@{}} - \toprule - \textbf{Domain} & \textbf{Parameters} & \textbf{Model / Likelihood} & \textbf{Data source} & $n$ \\ - \midrule - Climate & $r_{\text{eff}}$, AOD & Linear regr.\ / Normal & AERONET \citep{Holben1998} & 50 \\ - Pharmacokinetics & clearance, $V_d$ & Bateman eq.\ / Normal & Theoph \citep{Boeckmann1994} & 132 \\ - Hydrology & $f_c$, $K_{\text{sat}}$ & Bucket / Normal & NRFA stn.\ 39001 & 366 \\ - Structural Eng. & $E$, $\zeta$ & Eigenfreq.\ / Normal & Yonghe \citep{Li2019} & 216 \\ - Epidemiology & incub., infect.\ period & SEIR / Neg.\ Binom. & OWID \citep{Mathieu2021} & 60 \\ - Astrophysics & $H_0$, $\Omega_m$ & Distance mod.\ / Normal & Pantheon+ \citep{Scolnic2022} & 1701 \\ - Ecology (Isle R.) & moose $r$ & Lotka--Volterra / LogN & \citet{Vucetich2012} & 58 \\ - Ecology (YNP) & elk $r$ & Lotka--Volterra / LogN & \citet{Hobbs2023} & 28 \\ - Geophysics & perm., porosity & Kozeny--Carman / LogN & USGS \citep{Nelson2003} & 26 \\ - Robotics & friction, inertia & Inv.\ dynamics / Normal & KUKA \citep{Meier2016} & 700 \\ - Economics & stickiness, $\phi_\pi$ & NK Phillips--Taylor / Normal & FRED \citep{FRED2026} & 60 \\ - \bottomrule -\end{tabular} -\end{table} - -\noindent Each use case employed a domain-appropriate generative model in which the parameters of interest appear as priors. Model structures range from simple linear regression (climate) through ordinary differential equation solvers (ecology) to the flat $\Lambda$CDM distance--redshift relation (astrophysics). - -\subsection{Prior construction results} - -Distribird was run on all 20~parameters with default settings (context enrichment, Semantic Scholar and OpenAlex search, relevance judgment, and citation snowballing enabled; deep-research and web-search agents disabled). Table~\ref{tab:priors} in Appendix~\ref{app:tables} lists the full set of constructed priors. - -Of the 20~parameters, 19 received informative priors (95\%) and one --- the elk intrinsic growth rate (Ecology~(YNP), elk~$r$ in Table~\ref{tab:priors}) --- received an uninformative fallback (wide truncated Normal centred at the midpoint of the bounds). The confidence breakdown was: 15~high confidence ($\geq 5$ extracted values, best distribution selected automatically), 4~medium (2--4~values, moment-matched), and 1~none (zero values, fallback prior). The richest prior evidence base was the COVID-19 incubation period (Epidemiology in Table~\ref{tab:usecases}), where Distribird extracted 105~reported values from 27~papers. - -\subsection{MCMC comparison results} -\label{sec:mcmc} - -Table~\ref{tab:mcmc} in Appendix~\ref{app:tables} presents the full per-parameter results. Across the 20~parameters, informed priors won on 16 (80\%), with a mean ESS ratio of~2.78 and a median of~1.28. All informed-prior runs converged successfully. The total number of numerical problems (divergent transitions) was substantially lower under informed priors (264 vs.\ 1\,933 across all runs). Figure~\ref{fig:ess_scatter} visualises the comparison. - -\begin{figure}[!htbp] -\centering -\includegraphics[width=0.7\linewidth]{figures/ess_scatter.png} -\caption{Effective sample size under informed priors (vertical axis) vs.\ flat priors (horizontal axis) for the 20~analysed parameters, coloured by scientific domain. Points above the diagonal indicate that the informed prior improved sampling efficiency.} -\label{fig:ess_scatter} -\end{figure} - -The size of the improvement varied with the difficulty of the estimation problem. The largest gains appeared in geophysics (ESS ratios of 13.0 and 12.5), where the parameter space spans four orders of magnitude and the uniform prior spreads probability mass too thinly for the sampler to find the right region quickly. The ecology predator--prey models showed the second-largest gains (ESS ratios of 3.8--6.0), where the complex dynamics make the estimation landscape difficult to navigate without prior guidance. - -The improvement is strongly asymmetric: when informed priors help, they help a lot (up to $13\times$ faster sampling); when they do not help, the penalty is negligible. The four losses --- pharmacokinetics clearance (0.99), pharmacokinetics $V_d$ (0.99), structural damping ratio (0.90), and epidemiology incubation period (0.89) --- represent deficits of only 0.5\%--11\%. In every one of these cases, the informed prior either matched or improved the reliability diagnostics (convergence and divergent transitions). The no-harm rate --- the fraction of parameters where the informed prior did not worsen any reliability diagnostic --- was 19/20 (95\%). The single exception (economics inflation response coefficient) showed a negligible $\hat{R}$ increase of 0.001, well within acceptable bounds. In practical terms, using an informed prior never made things worse in a way that mattered. - -\subsection{Why the informed prior lost: parameter transferability} - -The four losses reveal an important pattern about when literature-based priors work best. - -The key distinction is between \emph{transferable} and \emph{instance-specific} parameters. A transferable parameter describes a property of a \emph{class} --- a species, a material, a physical law --- so that a measurement made in one study directly informs the same quantity in another. The Hubble constant is the clearest example: every measurement in the literature constrains the same universal value. Material properties (sandstone porosity), species-level traits (moose growth rate), and atmospheric quantities (aerosol optical depth) are similarly transferable. For these parameters, Distribird achieved its strongest results (ESS ratios of 1.0--13.0), because the literature describes exactly the quantity being calibrated. - -Instance-specific parameters, by contrast, depend on the particular system under study, and published values from other systems do not directly transfer: - -\begin{itemize} - \item \textbf{Pharmacokinetics.} Theophylline clearance and volume of distribution depend on the specific patient cohort, dose, and formulation. Literature values aggregate across different clinical conditions --- the resulting prior is correctly placed but encodes between-study variability that does not match the specific Theoph dataset. With 132~dense observations, the data overwhelms any prior regardless. - - \item \textbf{Structural engineering.} The damping ratio $\zeta$ of the Yonghe Bridge depends on that bridge's construction, age, and condition. Published damping ratios from other bridges inform the right order of magnitude, but not the specific value. - - \item \textbf{Epidemiology.} COVID-19 incubation period varies across viral lineages and populations. The 110~values Distribird extracted span multiple SARS-CoV-2 variants, introducing spread that may not represent the specific wave in the calibration data. -\end{itemize} - -In all four cases, Distribird correctly found and synthesised the literature --- the priors were well-centred and received high confidence scores. The tool did not fail; the knowledge simply was not transferable. The evidence describes a \emph{population of instances} rather than the specific instance being calibrated. Even so, the resulting ESS penalty was small (0.5\%--11\%), and reliability diagnostics were never worsened. - -This pattern suggests a practical rule of thumb: Distribird is most effective when the parameter represents a property of a class rather than a property of a specific instance. Among the 16~transferable parameters in this experiment, the informed-prior win rate was 100\%. - -\subsection{Extraction validation} - -To assess the quality of the LLM extraction step independently of MCMC performance, we audited the 473~numerical values extracted across all 20~parameters. Of the 138~contributing source papers, 133 (96.4\%) had valid DOIs that resolve to the claimed publication. All 473~extracted values included a natural-language context string describing where in the paper the value was found (e.g.\ ``Alpha variant; pooled mean incubation period, 95\%~CI 4.53--5.30''). Of the 473~values, 424 (89.6\%) fell within the user-specified physical bounds for their parameter. The 49~out-of-bounds values occurred primarily in parameters with narrow bounds and broad literature coverage (e.g.\ lognormal-distributed quantities where some reported values exceed the upper constraint); these values are automatically excluded during distribution fitting. - -As a spot-check, we examined the five parameters with the most diverse evidence bases in detail: - -\begin{itemize} - \item \textbf{COVID-19 incubation period} (Epidemiology, incubation; 27~sources, 105~values): extracted values ranged from 2.0 to 13.0~days, with a mean of 5.26~days and median of 5.0~days. These are consistent with the well-established consensus of 5--6~days for the Alpha variant. All 27~DOIs resolve to peer-reviewed epidemiological studies published 2020--2023. - - \item \textbf{Hubble constant $H_0$} (Astrophysics, $H_0$; 26~sources, 77~values): the extracted values span 53--82~km\,s$^{-1}$\,Mpc$^{-1}$ with a median of 72.8, capturing both the Planck CMB cluster near 67.4 and the SH0ES distance-ladder cluster near 73.0 --- correctly reflecting the well-known ``Hubble tension'' as distributional spread. - - \item \textbf{Cloud droplet effective radius} (Climate, $r_{\text{eff}}$; 4~sources, 7~values): values ranged from 8.0 to 17.9~$\mu$m with a mean of 13.1~$\mu$m, consistent with satellite retrievals and in-situ aircraft measurements in the literature. - - \item \textbf{Sandstone porosity} (Geophysics, porosity; 5~sources, 3~values): mean 0.17, range [0.13, 0.19], consistent with USGS core-plug catalogues for siliciclastic rocks. - - \item \textbf{Moose intrinsic growth rate} (Ecology (Isle~R.), moose~$r$; 2~sources, 2~values): 0.06 and 0.26\,yr$^{-1}$, spanning the range reported in ecological studies of Isle Royale moose populations. -\end{itemize} - -\noindent This audit provides evidence that the extraction pipeline produces plausible, well-sourced values, although a formal precision/recall study against manually annotated ground truth remains a priority for future work. - -\subsection{Naive baseline analysis: does literature placement matter?} - -A key question is whether the MCMC improvements stem from the specific literature-derived parameterisation or merely from replacing a flat distribution with any mound-shaped regulariser. To address this, we compared the Distribird priors against a hypothetical \emph{naive baseline}: a truncated Normal always centred at the midpoint of the user-specified bounds with $\sigma = (u-l)/4$, requiring no literature search at all. - -Examining the prior specifications reveals that the naive baseline would produce a qualitatively wrong prior in several cases where Distribird achieved its largest gains: - -\begin{itemize} - \item \textbf{Geophysics (permeability):} The parameter space spans $[0.01, 10{,}000]$\,mD. The naive baseline centres at 5\,000\,mD, but the literature-informed prior ($\mathrm{Beta}(0.81, 33.4)$) concentrates mass near the lower end of the range, reflecting the known log-scale distribution of rock permeability. Centring at 5\,000\,mD would place the prior mode orders of magnitude from the true posterior, likely yielding no improvement over uniform. - - \item \textbf{Pharmacokinetics (clearance):} The naive baseline centres at 1.0\,L/h, but theophylline clearance is approximately 0.04\,L/h. The Distribird prior ($\mathrm{Beta}(10.0, 462.4)$) correctly concentrates near 0.04. The naive prior would be almost as uninformative as uniform for this parameter. - - \item \textbf{Epidemiology (incubation):} The naive baseline centres at 7.5~days, but the literature consensus is 5.0~days. The Distribird prior correctly peaks near~5, while the naive prior would peak 50\% too high. - - \item \textbf{Climate (AOD):} The naive baseline centres at 1.5, but global mean AOD is approximately 0.11. The Distribird prior is $14\times$ closer to the true value. -\end{itemize} - -\noindent The elk growth rate fallback (ESS ratio 3.75 with zero literature evidence) does demonstrate that some ESS gains come from the regularising shape alone. However, the strongest improvements (geophysics 13$\times$, ecology 6$\times$, hydrology 2.7$\times$) occurred precisely where the Distribird prior places mass in a region that the naive baseline would miss entirely. A formal MCMC ablation comparing all three conditions (informed, naive, uniform) across all 20~parameters is planned for a follow-up study. - -\subsection{Out-of-scope detection: BullshitBench} -\label{sec:bullshitbench-eval} - -The MCMC and extraction validations above measure how well Distribird performs when the requested parameter is in scope. They say nothing about how the system behaves when the parameter is not in scope --- that is, when the user supplies a fabricated name, a typographic error, or a parameter whose value lives only inside a particular software's calibration tables and never appears as a measurement in the scientific record. To assess the validity classifier described in Section~\ref{sec:bullshitbench-design}, we constructed a small but adversarial benchmark, BullshitBench, comprising six requests that span three distinct categories. - -The first category, \emph{nonsense}, contains two parameter names with no scientific referent (\texttt{mumblesnort\_\allowbreak factor} and \texttt{fake\_\allowbreak quantum\_\allowbreak correction\_\allowbreak xyz}). Both names are syntactically plausible identifiers but should be unrecognisable to any well-grounded language model and should retrieve no relevant literature even after refinement. The second category, \emph{theoretical or empirical-only}, contains three model-internal quantities for which a literature trail exists but no measured values are reported: a software-version-specific carbon-pool calibration weight from Biome-BGCMuSo~v3 (a crop biogeochemistry model), the (1,1) entry of a Kalman filter's process-noise covariance matrix (a latent-state hyperparameter), and a version-tagged root-growth partition factor from DSSAT--CROPGRO~v4.5 (a crop simulator). These names follow conventions that the strengthened enrichment prompt explicitly flags --- version suffixes, software prefixes, and tuning-related vocabulary. The third category, the positive control, is \texttt{specific\_leaf\_area} (leaf area per unit dry mass, maize crop modelling), a well-known empirically-measured quantity that the same pipeline successfully synthesises as part of the broader experiments in Section~\ref{sec:exp-eval}. Full identifiers for all six requests appear in Table~\ref{tab:bullshitbench}. - -Each request was run end-to-end through the live pipeline, against the user's LiteLLM-hosted Gemini-3-pro endpoint, the Semantic~Scholar Graph~API, and OpenAlex --- the same configuration used in the maize Biome-BGCMuSo evaluation. No mocks were used and no caches were primed; each run started from a cold state. The expected verdict was \textsc{Likely\_Invalid} for the two nonsense names, \textsc{Suspicious} for the three theoretical-only names, and \textsc{Valid} for the positive control. Table~\ref{tab:bullshitbench} reports the verdict, the number of papers retrieved, the number of values extracted, and the wall-clock time for each request. - -\begin{table}[!htbp] -\centering -\small -\caption{BullshitBench real-LLM verdicts. The pipeline ran end-to-end against a hosted LLM and live academic APIs; no caches or mocks were used. All six verdicts match the expected category. Parameter names are abbreviated where necessary; full names appear in the surrounding text.} -\label{tab:bullshitbench} -\begin{tabular}{l l l l r r r} -\toprule -Parameter & Category & Expected & Verdict & Papers & Values & Time \\ -\midrule -\texttt{mumblesnort\_factor} & nonsense & \textsc{L\_Inv.} & \textsc{L\_Inv.} & 60 & 0 & 8m13s \\ -\texttt{fake\_quantum\_correction\_xyz} & nonsense & \textsc{L\_Inv.} & \textsc{L\_Inv.} & 99 & 0 & 14m \\ -\texttt{biome\_bgcmuso\_\dots\_v3} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 12 & 2 & 11m \\ -\texttt{kalman\_\dots\_q11} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 5 & 1 & 6m35s \\ -\texttt{dssat\_\dots\_v45} & theoretical & \textsc{Susp.} & \textsc{Susp.} & 16 & 1 & 56m \\ -\texttt{specific\_leaf\_area} & real (control) & \textsc{Valid} & \textsc{Valid} & 74 & 7 & 23m \\ -\bottomrule -\end{tabular} -\end{table} - -The benchmark produced six matches in six trials. The two nonsense names were upgraded by the LLM probe from a passive \textsc{Suspicious} verdict to \textsc{Likely\_Invalid}, despite each one returning a noisy assortment of unrelated papers (60 and 99 respectively): the probe correctly identified that the names did not correspond to any established scientific concept. The three theoretical-only names produced exactly the pattern the heuristics target: small numbers of retrieved papers (typically the model's own description and a handful of citations), few or no extracted values, and an enrichment LLM that flagged \texttt{empirically\_measured} as either false or null. Notably, the Biome-BGCMuSo and DSSAT cases retrieved values from model description tables (12 and 16 papers, 2 and 1 extracted values respectively), but the tightened \textsc{Valid} gate refused to promote either request because the LLM either declined to recognise the version-tagged identifier or flagged it as not empirically measured. The control parameter, \texttt{specific\_leaf\_area}, was classified \textsc{Valid} via the passive heuristic alone (74 papers, 7 extracted values, MEDIUM-confidence Beta prior); the probe was not invoked. - -These results are consistent with the unit and integration tests of the validity classifier (217~tests; passive heuristic and probe-override paths are exercised against scripted enrichment outputs and mock pipelines). The combined evidence supports two claims. First, the validity classifier reliably distinguishes the three categories under realistic latency and noise: even when the search step retrieves papers for a fabricated name, the probe's recognition check prevents the request from drifting into a false \textsc{Suspicious} or \textsc{Valid} verdict. Second, the strengthened enrichment prompt --- which lists version suffixes, software prefixes, and tuning vocabulary as red flags for \texttt{empirically\_measured = false} --- generalises beyond the synthetic example used in the prompt itself: the Kalman covariance and DSSAT calibration factor were correctly classified despite differing in domain and naming style from the Biome-BGCMuSo example shown to the LLM. We treat BullshitBench as a regression suite for the validity classifier rather than a definitive measure of robustness; expanding it with adversarial paraphrases (e.g.\ correctly-named but fictional empirical parameters) is a priority for follow-up work. - -% ----------------------------------------------------------------------- -\section{Relation to Existing Work} - -Prior elicitation has a substantial methodological literature \citep{OHagan2006,Garthwaite2005}. -Existing approaches generally fall into two categories: expert elicitation protocols, which -formalise the process of interviewing domain experts, and empirical Bayes methods, which estimate -prior parameters from data. Distribird occupies a different niche: automated literature-based -elicitation, where the source of prior knowledge is the published scientific record rather than a -human expert or a separate dataset. - -Concurrent with growing interest in LLM-assisted scientific workflows \citep{Boiko2023}, several -groups have explored using language models for statistical analysis tasks. Distribird is, to our -knowledge, the first system specifically designed for automated prior construction from scientific -literature, with the multi-agent feedback architecture, AIC-based distribution fitting, and -confidence communication described here. - -% ----------------------------------------------------------------------- -\section{Conclusion} -\label{sec:conclusion} - -The prior problem in Bayesian calibration is not a problem of missing knowledge --- it is a -problem of access cost. The knowledge needed to construct informative priors exists in the -scientific literature. Distribird makes that knowledge accessible automatically, turning a task that -previously required days of expert effort into a process that takes minutes. - -The tool is openly available, pip-installable, and deployable via Docker. It is designed for -process-based models with physically interpretable parameters --- the class of models where -Bayesian calibration with informative priors has the most to offer and where the scientific -literature is richest. For this class of problems, Distribird removes a longstanding practical -barrier to good statistical practice. - -Future work will extend the system to accept Monte Carlo simulation outputs as an additional -evidence source when literature is sparse, and to encode inter-parameter constraints as linear -inequality systems for joint prior construction. - -% ----------------------------------------------------------------------- -\bibliographystyle{abbrvnat} - -\begin{thebibliography}{99} - -\bibitem[Boeckmann et al.(1994)]{Boeckmann1994} -Boeckmann, A.J., Sheiner, L.B., Beal, S.L.\ (1994). -\textit{NONMEM Users Guide --- Part V}. -University of California, San Francisco. - -\bibitem[Boiko et al.(2023)]{Boiko2023} -Boiko, D.A.\ et al.\ (2023). -Emergent autonomous scientific research capabilities of large language models. -\textit{arXiv}:2304.05332. - -\bibitem[FRED(2026)]{FRED2026} -Federal Reserve Bank of St.\ Louis (2026). -FRED Economic Data. -\url{https://fred.stlouisfed.org/}. - -\bibitem[Garthwaite et al.(2005)]{Garthwaite2005} -Garthwaite, P.H., Kadane, J.B., O'Hagan, A.\ (2005). -Statistical methods for eliciting probability distributions. -\textit{Journal of the American Statistical Association}, 100(470), 680--701. - -\bibitem[Gelman(1996)]{Gelman1996} -Gelman, A.\ (1996). -Bayesian model-building by pure thought: some principles and examples. -\textit{Statistica Sinica}, 6, 215--232. - -\bibitem[Gelman et al.(2013)]{Gelman2013} -Gelman, A.\ et al.\ (2013). -\textit{Bayesian Data Analysis}, 3rd edition. -Chapman \& Hall/CRC. - -\bibitem[Hobbs et al.(2023)]{Hobbs2023} -Hobbs, N.T.\ et al.\ (2023). -Does restoring apex predators to food webs restore ecosystems? Large carnivores in -Yellowstone as a model system. -\textit{Ecological Monographs}, 93(4), e1588. - -\bibitem[Hoffman \& Gelman(2014)]{Hoffman2014} -Hoffman, M.D., Gelman, A.\ (2014). -The No-U-Turn Sampler: Adaptively setting path lengths in Hamiltonian Monte Carlo. -\textit{Journal of Machine Learning Research}, 15, 1593--1623. - -\bibitem[Holben et al.(1998)]{Holben1998} -Holben, B.N.\ et al.\ (1998). -AERONET --- A federated instrument network and data archive for aerosol characterization. -\textit{Remote Sensing of Environment}, 66(1), 1--16. - -\bibitem[Hollós et al.(2022)]{Hollos2022} -Hollós, R.\ et al.\ (2022). -Conditional interval reduction method: A possible new direction for the optimization of -process based models. -\textit{Environmental Modelling and Software}, 158, 105556. - -\bibitem[Li et al.(2019)]{Li2019} -Li, S.\ et al.\ (2019). -Yonghe Bridge modal parameters from FDD analysis. -Mendeley Data, V1. doi:10.17632/2xnn95rpb5.1. - -\bibitem[Mathieu et al.(2021)]{Mathieu2021} -Mathieu, E.\ et al.\ (2021). -A global database of COVID-19 vaccinations. -\textit{Nature Human Behaviour}, 5, 947--953. - -\bibitem[Meier et al.(2016)]{Meier2016} -Meier, F.\ et al.\ (2016). -Towards robust online inverse dynamics learning. -\textit{Proceedings of IEEE/RSJ IROS}, 4034--4039. - -\bibitem[Nelson \& Kibler(2003)]{Nelson2003} -Nelson, P.H., Kibler, J.E.\ (2003). -A catalog of porosity and permeability from core plugs in siliciclastic rocks. -\textit{USGS Open-File Report} 03-420. - -\bibitem[O'Hagan et al.(2006)]{OHagan2006} -O'Hagan, A.\ et al.\ (2006). -\textit{Uncertain Judgements: Eliciting Experts' Probabilities}. -Wiley. - -\bibitem[Pericchi \& Walley(1991)]{Pericchi1991} -Pericchi, L.R., Walley, P.\ (1991). -Robust Bayesian credible intervals and prior ignorance. -\textit{International Statistical Review}, 59(1), 1--23. - -\bibitem[Scolnic et al.(2022)]{Scolnic2022} -Scolnic, D.\ et al.\ (2022). -The Pantheon+ analysis: The full dataset and light-curve release. -\textit{The Astrophysical Journal}, 938, 113. - -\bibitem[Vehtari et al.(2021)]{Vehtari2021} -Vehtari, A., Gelman, A., Simpson, D., Carpenter, B., B\"urkner, P.-C.\ (2021). -Rank-normalization, folding, and localization: An improved $\hat{R}$ for assessing convergence -of MCMC. -\textit{Bayesian Analysis}, 16(2), 667--718. - -\bibitem[Vucetich \& Peterson(2012)]{Vucetich2012} -Vucetich, J.A., Peterson, R.O.\ (2012). -The population biology of Isle Royale wolves and moose: An overview. -\url{https://isleroyalewolf.org}. - -\bibitem[Wallach et al.(2021)]{Wallach2021} -Wallach, D.\ et al.\ (2021). -The chaos in calibrating crop models: lessons learned from a multi-model calibration exercise. -\textit{Environmental Modelling and Software}, 145, 105206. - -\end{thebibliography} - -% ----------------------------------------------------------------------- -\newpage -\appendix -\section{Detailed Experimental Tables} -\label{app:tables} - -\begin{table}[!htbp] -\centering -\caption{Distribird-constructed priors. Values: extracted data points; Sources: contributing papers.} -\label{tab:priors} -\scriptsize -\setlength{\tabcolsep}{3pt} -\renewcommand{\arraystretch}{0.93} -\begin{tabularx}{\linewidth}{@{}llXrlll@{}} - \toprule - \textbf{Domain} & \textbf{Parameter} & \textbf{Fitted prior} & \textbf{Values} & \textbf{Sources} & \textbf{Conf.} & \textbf{Method} \\ - \midrule - Climate & $r_{\text{eff}}$ & $\mathrm{Beta}(3.49,\,6.28)$ on $[2,30]$ & 12 & 4 & High & AIC \\ - Climate & AOD & $\mathcal{TN}(0.11,\,0.09)$ on $[0,3]$ & 92 & 15 & High & AIC \\ - PK & clearance & $\mathrm{Beta}(10.0,\,462.4)$ on $[0.01,2]$ & 6 & 2 & High & AIC \\ - PK & $V_d$ & $\mathrm{Beta}(3.23,\,26.2)$ on $[0.1,5]$ & 6 & 2 & High & AIC \\ - Hydrology & $f_c$ & $\mathrm{Beta}(1.57,\,2.05)$ on $[50,600]$ & 21 & 9 & High & AIC \\ - Hydrology & $K_{\text{sat}}$ & $\mathrm{Beta}(0.71,\,1.83)$ on $[1,5000]$ & 20 & 3 & High & AIC \\ - Structural & $E$ & $\mathrm{Beta}(1.92,\,2.66)$ on $[15,50]$ & 12 & 3 & High & AIC \\ - Structural & $\zeta$ & $\mathcal{TN}(0.016,\,0.014)$ on $[0.001,0.1]$ & 4 & 2 & Med. & Moment \\ - Epidemiol. & incubation & $\mathrm{Beta}(2.82,\,5.56)$ on $[1,14]$ & 110 & 27 & High & AIC \\ - Epidemiol. & infectious & $\mathrm{Beta}(2.17,\,4.09)$ on $[1,30]$ & 38 & 20 & High & AIC \\ - Astrophys. & $H_0$ & $\mathrm{Beta}(14.1,\,18.2)$ on $[50,100]$ & 78 & 26 & High & AIC \\ - Astrophys. & $\Omega_m$ & $\mathrm{LogN}(-1.18,\,0.19)$ & 23 & 11 & High & AIC \\ - Geophysics & permeability & $\mathrm{Beta}(0.81,\,33.4)$ on $[0.01,10^4]$ & 14 & 1 & High & AIC \\ - Geophysics & porosity & $\mathrm{Gamma}(36.2,\,0.0045)$ & 8 & 5 & High & AIC \\ - Robotics & $f_c$ (friction) & $\mathrm{Beta}(9.27,\,72.7)$ on $[0,2]$ & 7 & 1 & High & AIC \\ - Robotics & $I$ (inertia) & $\mathrm{Beta}(6.24,\,15.7)$ on $[0.01,5]$ & 9 & 1 & High & AIC \\ - Economics & stickiness & $\mathcal{TN}(3.48,\,1.04)$ on $[1,12]$ & 2 & 1 & Med. & Moment \\ - Economics & $\phi_\pi$ & $\mathcal{TN}(1.51,\,0.52)$ on $[1,5]$ & 4 & 3 & Med. & Moment \\ - Ecol.\ (Isle) & moose $r$ & $\mathcal{TN}(0.13,\,0.18)$ on $[0.01,0.5]$ & 3 & 2 & Med. & Moment \\ - Ecol.\ (YNP) & elk $r$ & $\mathcal{TN}(0.26,\,0.12)$ on $[0.01,0.5]$ & 0 & 0 & None & Fallback \\ - \bottomrule -\end{tabularx} -\end{table} - -\begin{table}[!htbp] -\centering -\caption{Sampling comparison: informed vs.\ uniform priors (2\,000 draws, 4 chains). Bold: informed win.} -\label{tab:mcmc} -\scriptsize -\setlength{\tabcolsep}{3pt} -\renewcommand{\arraystretch}{0.93} -\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}llrrrrrrr@{}} - \toprule - & & \multicolumn{3}{c}{\textbf{Informed}} & \multicolumn{3}{c}{\textbf{Flat}} & \\ - \cmidrule(lr){3-5} \cmidrule(lr){6-8} - \textbf{Domain} & \textbf{Parameter} & ESS & $\hat{R}$ & Div. & ESS & $\hat{R}$ & Div. & \textbf{ESS ratio} \\ - \midrule - Climate & $r_{\text{eff}}$ & 11\,677 & 1.000 & 0 & 9\,395 & 1.001 & 0 & \textbf{1.24} \\ - Climate & AOD & 12\,718 & 1.000 & 0 & 12\,675 & 1.000 & 0 & \textbf{1.00} \\ - PK & clearance & 5\,047 & 1.000 & 0 & 5\,070 & 1.001 & 0 & 0.99 \\ - PK & $V_d$ & 4\,156 & 1.000 & 0 & 4\,218 & 1.001 & 0 & 0.99 \\ - Hydrology & $f_c$ & 2\,914 & 1.001 & 1 & 2\,094 & 1.002 & 42 & \textbf{1.39} \\ - Hydrology & $K_{\text{sat}}$ & 1\,954 & 1.001 & 1 & 717 & 1.008 & 42 & \textbf{2.73} \\ - Structural & $E$ & 8\,391 & 1.000 & 0 & 5\,953 & 1.001 & 1 & \textbf{1.41} \\ - Structural & $\zeta$ & 5\,431 & 1.000 & 0 & 6\,062 & 1.000 & 1 & 0.90 \\ - Epidemiol. & incubation & 6\,612 & 1.000 & 55 & 7\,421 & 1.001 & 82 & 0.89 \\ - Epidemiol. & infectious & 7\,448 & 1.000 & 55 & 7\,153 & 1.000 & 82 & \textbf{1.04} \\ - Astrophys. & $H_0$ & 2\,400 & 1.001 & 0 & 2\,197 & 1.002 & 3 & \textbf{1.09} \\ - Astrophys. & $\Omega_m$ & 2\,522 & 1.001 & 0 & 1\,918 & 1.001 & 3 & \textbf{1.32} \\ - Geophysics & permeability & 3\,503 & 1.000 & 0 & 270 & 1.015 & 83 & \textbf{13.00} \\ - Geophysics & porosity & 3\,409 & 1.000 & 0 & 273 & 1.017 & 83 & \textbf{12.51} \\ - Robotics & friction & 7\,851 & 1.000 & 0 & 6\,694 & 1.001 & 0 & \textbf{1.17} \\ - Robotics & inertia & 9\,541 & 1.000 & 0 & 6\,293 & 1.001 & 0 & \textbf{1.52} \\ - Economics & stickiness & 8\,948 & 1.000 & 0 & 5\,420 & 1.001 & 3 & \textbf{1.65} \\ - Economics & $\phi_\pi$ & 4\,797 & 1.001 & 0 & 4\,680 & 1.000 & 3 & \textbf{1.02} \\ - Ecol.\ (Isle) & moose $r$ & 1\,932 & 1.002 & 36 & 323 & 1.023 & 1\,218 & \textbf{5.99} \\ - Ecol.\ (YNP) & elk $r$ & 1\,236 & 1.002 & 116 & 330 & 1.026 & 287 & \textbf{3.75} \\ - \bottomrule -\end{tabular*} -\end{table} - - - -\end{document} \ No newline at end of file From 662d14678ba687f34438025b76acb85a8af3c5b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20S=C3=BCli?= Date: Wed, 29 Apr 2026 21:40:56 +0200 Subject: [PATCH 7/7] Fix CI: ruff format + mypy isinstance narrow Reformat four files via ruff (graph.py, nodes.py, validity.py, table_export.py) and adjust the recognition_confidence validator to narrow `object` to `str` via isinstance() instead of relying on a `# type: ignore` that newer mypy versions flagged as unused. --- src/distribird/agent/graph.py | 4 +--- src/distribird/agent/nodes.py | 8 +++---- src/distribird/agent/validity.py | 10 ++------- src/distribird/export/table_export.py | 23 +++++++++---------- src/distribird/models.py | 4 ++-- tests/test_bullshitbench.py | 8 ++----- tests/test_model_check.py | 32 +++++++-------------------- 7 files changed, 29 insertions(+), 60 deletions(-) diff --git a/src/distribird/agent/graph.py b/src/distribird/agent/graph.py index 2dfc5d1..5c13a57 100644 --- a/src/distribird/agent/graph.py +++ b/src/distribird/agent/graph.py @@ -192,9 +192,7 @@ async def run_parameter_graph( warnings=final_state.get("warnings", []), enrichment=final_state.get("enrichment"), deliberation=final_state.get("deliberation"), - parameter_validity=final_state.get( - "parameter_validity", ParameterValidity.UNKNOWN - ), + parameter_validity=final_state.get("parameter_validity", ParameterValidity.UNKNOWN), validity_reason=final_state.get("validity_reason", ""), validity_signals=final_state.get("validity_signals", {}), is_empirical=final_state.get("is_empirical"), diff --git a/src/distribird/agent/nodes.py b/src/distribird/agent/nodes.py index eed1d84..8f687bc 100644 --- a/src/distribird/agent/nodes.py +++ b/src/distribird/agent/nodes.py @@ -763,10 +763,10 @@ def route_after_enrich(state: PipelineState) -> str: if enrichment is None: return "query_gen" - if ( - enrichment.is_recognized_parameter is False - and enrichment.recognition_confidence in {"none", "low"} - ): + if enrichment.is_recognized_parameter is False and enrichment.recognition_confidence in { + "none", + "low", + }: return "validity_check" return "query_gen" diff --git a/src/distribird/agent/validity.py b/src/distribird/agent/validity.py index d6d6160..276c48a 100644 --- a/src/distribird/agent/validity.py +++ b/src/distribird/agent/validity.py @@ -93,11 +93,7 @@ def classify_validity_passive( is_empirical, ) - if ( - is_recognized is False - and recog_conf in {"none", "low"} - and papers_found == 0 - ): + if is_recognized is False and recog_conf in {"none", "low"} and papers_found == 0: return ParameterValidity.LIKELY_INVALID, REASON_LLM_UNRECOGNIZED, signals, is_empirical if n_terms == 0 and papers_found == 0: @@ -174,9 +170,7 @@ def validity_probe_llm( return None if not isinstance(raw, dict): - logger.warning( - "[LLM:validity_probe] unexpected response type: %s", type(raw).__name__ - ) + logger.warning("[LLM:validity_probe] unexpected response type: %s", type(raw).__name__) return None return raw diff --git a/src/distribird/export/table_export.py b/src/distribird/export/table_export.py index cc0a70b..b9504a9 100644 --- a/src/distribird/export/table_export.py +++ b/src/distribird/export/table_export.py @@ -38,9 +38,7 @@ def _latex_escape(s: str) -> str: def batch_to_markdown_table(results: list[PipelineResult]) -> str: """Generate a Markdown table of model checking diagnostics.""" - header = ( - "| Parameter | Distribution | MAP | Mean | 95% CI | KS stat | KS p | AIC | n |" - ) + header = "| Parameter | Distribution | MAP | Mean | 95% CI | KS stat | KS p | AIC | n |" sep = "|---|---|---|---|---|---|---|---|---|" rows = [header, sep] @@ -48,8 +46,7 @@ def batch_to_markdown_table(results: list[PipelineResult]) -> str: mc = r.model_check if mc is None: rows.append( - f"| {r.parameter.name} | {r.prior.family.value} " - f"| — | — | — | — | — | — | 0 |" + f"| {r.parameter.name} | {r.prior.family.value} | — | — | — | — | — | — | 0 |" ) continue ci = f"[{_fmt(mc.ci_95_lower)}, {_fmt(mc.ci_95_upper)}]" @@ -94,9 +91,7 @@ def batch_to_latex_table(results: list[PipelineResult]) -> str: name = _latex_escape(r.parameter.name) family = _latex_escape(r.prior.family.value) if mc is None: - lines.append( - f"{name} & {family} & --- & --- & --- & --- & --- & --- & 0 \\\\" - ) + lines.append(f"{name} & {family} & --- & --- & --- & --- & --- & --- & 0 \\\\") continue ci = f"[{_fmt(mc.ci_95_lower)}, {_fmt(mc.ci_95_upper)}]" lines.append( @@ -105,10 +100,12 @@ def batch_to_latex_table(results: list[PipelineResult]) -> str: f"& {_fmt(mc.aic, 1)} & {mc.n_values} \\\\" ) - lines.extend([ - r"\bottomrule", - r"\end{tabular}", - r"\end{table}", - ]) + lines.extend( + [ + r"\bottomrule", + r"\end{tabular}", + r"\end{table}", + ] + ) return "\n".join(lines) diff --git a/src/distribird/models.py b/src/distribird/models.py index 901a7a2..cffec7d 100644 --- a/src/distribird/models.py +++ b/src/distribird/models.py @@ -171,8 +171,8 @@ class EnrichedContext(BaseModel): @field_validator("recognition_confidence", mode="before") @classmethod def _coerce_recognition_confidence(cls, v: object) -> str: - if v in {"high", "medium", "low", "none"}: - return v # type: ignore[return-value] + if isinstance(v, str) and v in {"high", "medium", "low", "none"}: + return v return "none" diff --git a/tests/test_bullshitbench.py b/tests/test_bullshitbench.py index ce083b7..1c6d164 100644 --- a/tests/test_bullshitbench.py +++ b/tests/test_bullshitbench.py @@ -312,9 +312,7 @@ async def test_real_param_with_search_outage(bullshit_settings): param = _mk_param("specific_leaf_area") # Disable refinement so only 1 query attempted → rule 1 (>=2 queries) doesn't fire - no_refine_settings = bullshit_settings.model_copy( - update={"search_refinement_max": 0} - ) + no_refine_settings = bullshit_settings.model_copy(update={"search_refinement_max": 0}) probe_response = { "verdict": "suspicious", @@ -485,9 +483,7 @@ async def test_misclassified_empirical_passes_through_probe(bullshit_settings): common_terminology=["calibration weight"], ) param = _mk_param("dssat_root_factor_v45") - no_refine_settings = bullshit_settings.model_copy( - update={"search_refinement_max": 0} - ) + no_refine_settings = bullshit_settings.model_copy(update={"search_refinement_max": 0}) papers = _mk_papers_no_values(3) probe_response = { diff --git a/tests/test_model_check.py b/tests/test_model_check.py index e47db47..fd19909 100644 --- a/tests/test_model_check.py +++ b/tests/test_model_check.py @@ -97,9 +97,7 @@ def test_beta_scaled(self): assert abs(dist.mean() - 15.0) < 1e-4 def test_uniform(self): - dist = _build_scipy_dist( - DistributionFamily.UNIFORM, {"lower": 3.0, "upper": 7.0} - ) + dist = _build_scipy_dist(DistributionFamily.UNIFORM, {"lower": 3.0, "upper": 7.0}) assert abs(dist.mean() - 5.0) < 1e-6 @@ -185,9 +183,7 @@ def test_beta_beta_le_1(self): assert 0 < result < 1 def test_uniform(self): - result = _compute_map( - DistributionFamily.UNIFORM, {"lower": 5.0, "upper": 15.0} - ) + result = _compute_map(DistributionFamily.UNIFORM, {"lower": 5.0, "upper": 15.0}) assert result == 10.0 @@ -251,9 +247,7 @@ def test_mismatched(self): class TestCheckModel: def test_normal_good_fit(self): """Data drawn from the same normal → high KS p-value.""" - prior = _make_prior( - DistributionFamily.NORMAL, {"mu": 5.0, "sigma": 2.0} - ) + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 5.0, "sigma": 2.0}) rng = np.random.default_rng(42) values = rng.normal(5.0, 2.0, size=50).tolist() mc = check_model(prior, values) @@ -264,9 +258,7 @@ def test_normal_good_fit(self): def test_single_value(self): """Single data point still produces a result.""" - prior = _make_prior( - DistributionFamily.NORMAL, {"mu": 3.0, "sigma": 1.0} - ) + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 3.0, "sigma": 1.0}) mc = check_model(prior, [3.0]) assert mc is not None assert mc.n_values == 1 @@ -285,9 +277,7 @@ def test_non_informative_returns_none(self): assert check_model(prior, [1.0, 2.0, 3.0]) is None def test_gamma(self): - prior = _make_prior( - DistributionFamily.GAMMA, {"alpha": 3.0, "scale": 2.0} - ) + prior = _make_prior(DistributionFamily.GAMMA, {"alpha": 3.0, "scale": 2.0}) rng = np.random.default_rng(42) values = stats.gamma.rvs(a=3.0, scale=2.0, size=30, random_state=rng).tolist() mc = check_model(prior, values) @@ -306,9 +296,7 @@ def test_truncated_normal(self): assert 0.0 <= mc.credible_interval_coverage.ci_95 <= 1.0 def test_lognormal(self): - prior = _make_prior( - DistributionFamily.LOGNORMAL, {"mu": 1.0, "sigma": 0.5} - ) + prior = _make_prior(DistributionFamily.LOGNORMAL, {"mu": 1.0, "sigma": 0.5}) rng = np.random.default_rng(42) values = stats.lognorm.rvs(s=0.5, scale=math.exp(1.0), size=40, random_state=rng).tolist() mc = check_model(prior, values) @@ -327,18 +315,14 @@ def test_beta(self): assert mc.ks_pvalue > 0.05 def test_aic_computation(self): - prior = _make_prior( - DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0} - ) + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0}) mc = check_model(prior, [0.0, 0.5, -0.5]) assert mc is not None expected_aic = 2 * 2 - 2 * mc.log_likelihood assert mc.aic == pytest.approx(expected_aic) def test_coverage_monotonic(self): - prior = _make_prior( - DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0} - ) + prior = _make_prior(DistributionFamily.NORMAL, {"mu": 0.0, "sigma": 1.0}) rng = np.random.default_rng(42) values = rng.normal(0, 1, size=100).tolist() mc = check_model(prior, values)