Estimate a number, or the probability an event happens by a date
estimate_quantity_or_probabilityEstimates an uncertain number, or the probability that an event happens by a date, from a question in plain language, and returns a calibrated range and probability distribution. Use this when the user asks how much, how many, how big or how long something is or will be (market size, cost, count, price, duration), or asks a yes/no question about the future: "will X happen by ?", "what are the odds / chances / likelihood of X?".
For a yes/no question, set unit to "probability (0-1)": point_estimate is then Fermi's best probability that the event happens (0.15 means 15%), and estimation_interval is how far that probability could plausibly be off (e.g. 0.05 to 0.35); the beta distribution describes the same uncertainty. There is no separate yes/no verdict.
Returns point_estimate, estimation_interval (low/high: the range that should contain the true value, or for a yes/no question the true probability, with probability coverage_probability, default 90%), the fitted distribution (distribution_family and distribution_parameters), reasoning_summary, assumptions, estimate_id, and next_steps.simulate. To combine several estimates into a model with a time axis and get percentiles, NPV or payback out, feed them into neumann (https://neumann.kromatic.com) as simulation root nodes -- every successful estimate carries a next_steps.simulate block with the arguments already prepared. (neumann is Kromatic's companion Monte Carlo simulation server; fermi itself does not simulate.) The neumann URLs above are production. A non-production fermi still emits next_steps.simulate against its own configured neumann base URL, so read that block rather than these links whenever you are not on the production host.
Tiers: 1 = fast, answers in the same call, no web search, and the only tier available without an account. 2 = grounded, answers in the same call, searches the web. 3 = deep research, runs in the background: the call returns status "pending" and an estimate_id; read the result later with get_estimate_result. Tier 1 does not know today's date or recent news: for any question about the future, put today's date and relevant recent facts in context, and give an absolute date in target_horizon.
Not for: running a simulation or combining estimates (use neumann); reading prediction-market prices or placing bets; financial, medical or legal advice. To get an account, call POST https://fermi.kromatic.com/api/v1/accounts (it returns an api_key once; a new account starts with 3 credits), or sign in through your connector. If you cannot make HTTP requests, ask the user to do one of these.
Cost: without an account, 3 free tier-1 estimates per UTC day; once they are used up, calls are refused with a sign-in requirement until 00:00 UTC. With an account, tier 1/2/3 costs 1/3/10 credits ($0.50/$1.50/$5.00 at $0.50 per credit). Tiers 1 and 2 charge only if the estimate succeeds, and a failed call does not use up a free estimate; tier 3 charges when it starts and refunds if it fails. Every call is a new estimate and is charged again, even for the same question. credits_charged and billing in the result report what was spent.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"question": "<question>",
"unit": "<unit>",
"target_horizon": "<target_horizon>",
"disclaimer_acknowledged": "<disclaimer_acknowledged>"
},
"name": "estimate_quantity_or_probability"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | Unit of the answer, e.g. "USD", "people", "hotel rooms", "days". For a yes/no event question use "probability (0-1)": the answer is then a probability between 0 and 1 (0.15 = 15%). | |
| model | No | Optional model id for that provider. It must be the model configured for that tier and provider, so normally omit it. | |
| api_key | No | Your Fermi API key. Omit it if your connector is already signed in, or to use Fermi without an account. Get one with POST https://fermi.kromatic.com/api/v1/accounts (returned once). | |
| context | No | Anything the estimate should take into account. For a question about the future always include today's date ("Today is 2026-10-30."), plus recent facts or news, and the user's own numbers or definitions. | |
| provider | No | Optional AI provider for the estimate, "openai" or "anthropic". Omit to use the default. Tiers 2 and 3 accept only "openai". | |
| question | Yes | The question in plain language, one quantity or one event per call. Quantity: "How many hotel rooms will Lisbon have in 2030?". Yes/no event: "Will any EU country make a four-day work week law before 2030-01-01?". | |
| callback_url | No | Optional URL that receives the finished or failed result as a signed POST, so a server need not keep asking. Chat clients usually cannot receive it: read the result with get_estimate_result instead. | |
| source_inputs | No | Optional documents or data for the estimate to use. Each item has source_type ("qualitative_text", "spreadsheet" or "structured_file") and either content (text) or structured_data (an object, or a list of row objects); title, file_name and media_type are optional. | |
| target_horizon | Yes | When the answer applies. Prefer an absolute date or year: "by 2027-06-30", "2030", "end of 2028", or "current" for a value today. Turn relative phrases like "in the next 12 months" into a date, because tier 1 does not know today's date. | |
| requested_tier_id | No | 1 = fast: answers in the same call, no web search; the only tier without an account. 2 = grounded: answers in the same call, searches the web; account only. 3 = deep research: runs in the background and searches the web; returns status "pending" and an estimate_id to read later with get_estimate_result; account only. Default 1. Without an account, tiers 2 and 3 are refused with a sign-in requirement; nothing is downgraded or charged. | |
| coverage_probability | No | How likely the returned interval is to contain the true value, strictly between 0 and 1. Default 0.9, a 90% interval. Use 0.95 for a "95% interval", 0.8 for an "80% range". | |
| disclaimer_acknowledged | Yes | Must be true. Confirms the result is a probabilistic estimate for decision support, not financial, medical or legal advice. A call with false is refused. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model that produced it. | |
| status | No | Only on results that are not finished yet or that come from get_estimate_result: "pending" (tier 3 still running), "completed" or "failed". | |
| billing | No | Who this call was billed to and what is left. Present on every Fermi result. | |
| tier_id | No | The tier that produced it (1, 2 or 3). | |
| provider | No | AI provider that produced it. | |
| range_low | No | Same as estimation_interval.low. | |
| created_at | No | When it was made (ISO 8601). | |
| disclaimer | No | Not financial advice notice. | |
| next_steps | No | Ready-made input for neumann, Kromatic's Monte Carlo simulation server. simulate.root_node (distribution_type and distribution_params) can be added to a neumann model as one uncertain input; when the family has no direct neumann match, simulate.solve_args are the arguments for neumann's convert_range_to_distribution instead. simulate.note says which, and simulate.mcp_url is the neumann server to call. | |
| range_high | No | Same as estimation_interval.high. | |
| request_id | No | Id of this request, for support. | |
| assumptions | No | The assumptions the estimate rests on. | |
| estimate_id | No | Id of this estimate, for get_estimate_result and list_my_estimates. | |
| error_detail | No | When failed: what went wrong. | |
| point_estimate | No | The single best value. For a yes/no question asked with unit "probability (0-1)", this is the probability that the event happens (0.15 = 15%). | |
| credits_charged | No | Credits this estimate cost (0 without an account). | |
| confidence_level | No | Set only from coverage_probability: "high" for 0.95 or more, "medium" for 0.9 up to 0.95, "low" below 0.9. It is not a judgement of the estimate's quality. | |
| credits_refunded | No | When failed: credits given back. | |
| research_sources | No | Tiers 2 and 3: web sources used (url, title, snippet, relevance_note). | |
| reasoning_summary | No | How the estimate was reached, in a few sentences. | |
| verification_flags | No | Tier 3: issues the second check raised. | |
| distribution_family | No | Shape of the fitted probability distribution: normal, log_normal (positive and right-skewed), uniform, constant, beta (values between 0 and 1, used for probabilities and rates), triangle, gamma, exponential or poisson (counts). | |
| estimation_interval | No | The range that should contain the true value with probability coverage_probability. For a probability question, both ends are probabilities between 0 and 1. | |
| retry_after_seconds | No | When pending: seconds to wait before reading it again. | |
| coverage_probability | No | Chance the interval contains the true value (0.9 = 90%). | |
| verification_summary | No | Tier 3: what a second check found. | |
| distribution_parameters | No | Parameters of that distribution by name, e.g. alpha and beta for beta, mu and sigma for log_normal. | |
| decomposition_suggestions | No | Sub-questions (sub_question, reasoning) worth estimating separately to sharpen this one. Each would be a new estimate call at the usual cost. |