Forecast a Decision: Grant Funding at Three Levels
decision forecasts one outcome under each alternative of a choice you control. The choice here is how much to donate to an open funding proposal, and the alternatives are $0, an intermediate amount, and the full remaining ask. All alternatives are researched jointly, so the gaps between them price the money rather than reading as three unrelated forecasts.
Use decision whenever the "if" clause is a choice you control. Use a conditional forecast when the "if" is something you merely observe.
The question
Every row asks the same outcome question about a different organization:
By December 31, 2028, will a named outside actor take a costly action, documented in public records, that stakes something on this project's work produced after August 1, 2026?
The alternatives column holds that organization's three funding levels: $0, an intermediate amount, and the amount remaining to meet its full goal as of July 31, 2026. The $0 branch is the unconditional baseline.
Run it
import asyncio
import json
from pandas import DataFrame
from futuresearch.ops import decision
OUTCOME = (
"By December 31, 2028, will a named outside actor take a costly action, "
"documented in public records, that stakes something on this project's "
"work produced after August 1, 2026?"
)
proposals = DataFrame([
{
"organization": "ControlAI",
"question": OUTCOME,
"grant_size": json.dumps(["$0 (no grant)", "$250k", "$1M"]),
"resolution_criteria": (
"250 individually listed sitting parliamentarians from non-US G7 "
"legislatures or the European Parliament on ControlAI's public "
"campaign statements by end of 2028."
),
},
{
"organization": "Transluce",
"question": OUTCOME,
"grant_size": json.dumps(["$0 (no grant)", "$500k", "$1.96M"]),
"resolution_criteria": (
"Two distinct frontier labs or government AI safety institutes "
"document use of Transluce tooling in official model evaluations, "
"with the use occurring after August 1, 2026."
),
},
])
async def main():
result = await decision(
input=proposals,
alternatives_field="grant_size",
intervention=(
"Assume the grant is announced publicly at the time it is made, that "
"no other funder backfills a declined application, and that the "
"decision is made within the next quarter."
),
)
print(result.data[["organization", "probabilities", "rationale"]])
asyncio.run(main())
intervention replaces the default assumptions wholesale, so state the full set rather than only the one you want to change.
Results
Five of the eighteen proposals, with the probability of the 2028 outcome under each funding level:
| Organization | Partial | Full ask | p($0) | p(partial) | p(full) |
|---|---|---|---|---|---|
| Tarbell Center for AI Journalism | $50k | $171k | 78 | 79 | 81 |
| ControlAI | $250k | $1M | 39 | 54 | 70 |
| Transluce | $500k | $1.96M | 21 | 25 | 31 |
| GPAI Policy Lab | $250k | $2.47M | 11 | 16 | 27 |
| PauseAI US | $100k | $450k | 7 | 10 | 15 |
Tarbell's outcome is close to settled before any money moves, so the full ask buys 3 points. ControlAI's buys 31.
Going deeper
- Long-form analysis: Forecasting the outcomes of philanthropic grants
- Published output: all 18 proposals at three funding levels
- Reference: decision