Research modes & the elector
How hard a claim gets checked is your choice, per debate - or per claim.
The methods
| Mode | What it does | Good for |
|---|---|---|
two_step | Search → read the results → judge | Most claims. Fast, cheap. |
decompose | Break the claim into sub-questions, research each, synthesize | Compound or multi-part claims |
decompose_invest | Decomposition with a more investigative planner | Claims needing an angle, not just facts |
native | Ask a search-native model to research and answer directly | A useful independent second opinion |
local | Search only the internal indexed corpus, no external calls | Deterministic, zero search cost |
agentic | An agent searches, fetches pages, follows citations, requests PDFs | Statistical and document-backed claims |
And composites that run several and give you every panel:
| Mode | Expands to |
|---|---|
parallel | two_step + decompose |
parallel_es | two_step + decompose + local |
parallel_full | two_step + decompose + decompose_invest |
Choosing per debate
{"research_modes": ["two_step", "decompose"]}More modes means more panels, more confidence, more cost - roughly linearly. Start with ["two_step"] and add when you find claims it does not settle.
An empty list is meaningful, not a mistake:
{"research_modes": []}Claims are still detected, persisted and shown - but nothing is researched until you ask. That is how you build a "review, then check the ones that matter" flow without paying for the rest.
Checking one claim another way
Any claim can be re-checked with a specific method, including one already checked:
curl -sX POST $RTFC/claim \
-H "X-Auth-Token: $TOKEN" -H 'Content-Type: application/json' \
-d '{"text": "…", "debate_id": "…", "research_mode": "agentic", "manually_added": true}'manually_added: true also widens the elector's expectations, so an election waits for the added method to finish instead of deciding without it.
For a shared claim, only the genuinely missing method runs - asking for parallel on a claim that already has a two_step panel researches decompose alone.
The elector
With several methods you get several panels, and something has to choose. Set elector_enabled: true on the debate and an LLM judge elects the best one once every expected method has finished - weighing source count and trust, sub-question coverage, and the verdict itself.
{"research_modes": ["two_step", "decompose", "agentic"], "elector_enabled": true}GET /v1/claims/{id}/best then returns the elected panel with election_method: "llm" and an elected block explaining why.
It is advisory: it never overrides a human. Full precedence, highest first:
- Operator winner - someone explicitly picked a panel (
POST /claims/{id}/winner) - Crowd votes - the highest net-voted panel, if any has positive net votes
- LLM elector - when
elector_enabled - Math - decisive verdict, then confidence, then best source trust
election_method on the response tells you which applied, so your UI can say "chosen by our reviewers" rather than implying a machine decided.
Verdicts
true, false, partially_true, misleading, unverifiable, pending.
unverifiable is a real answer, not a failure - it means the evidence available does not settle the claim, and it is more honest than a low-confidence guess. Before returning it, two_step and decompose automatically retry the search in English and Spanish, since international sources are indexed in those far more often. The verdict always comes back in the claim's own language regardless.