Known limits
Datagoat isn't the right tool for every question. These are the edges we know about, so you can design around them.
What it can't answer
- Anything without history. Datagoat learns from outcomes you've recorded. A record needs
about 500 labeled rows. Below that, the answer is
not_yet. For a new question with no history, use a zero-shot model like Jev. - Free text. Text columns count as categories, not as language. To use what a message says, turn it into columns first (Read, then learn).
- Numbers. Outcomes are yes/no. "How much will they spend?" needs a regression tool. "Will they spend over $500?" works, if the record has that column.
- Causes. Reasons and
choicepicks are associations in the record. Switching a customer to the picked contract may not keep them. Report what happens, and let the outcomes tell you.
How it answers
- A refusal stays a refusal. The same record and the same question always refuse the same way. Retrying is pointless. Change the record (more rows, more columns) or the question.
- The first fit takes time. Seconds on a small table. A minute or two on a large record, and
then the call returns
pending. A repeat call on the same bytes answers from the cached fit. - One changed byte is a new record. Appending a day of rows makes a new fit. Use
refit_ofto link the two, anddg_driftto see whether anything moved. outcome_is_desirableis part of the fit. Two questions on one outcome share a fit only when they say the same thing about it. One withfalseand one with nothing set run two fits.rankbeside other types ranks only the cases. The other types needcases, andrankranks what it's given. Rank the whole record in its own call.- Choice needs the option to matter. When the option column isn't part of the pattern, the
answer is
refused(option_not_in_pattern), not a tie-break.
Proving that acting worked
- Levers appear only where the engine can show the changed state is reachable on held-out rows. Many answers carry none, and then there is nothing to attest.
dg_evidencecompares groups only once each has 30 cases with a reported outcome.- Acted cases are chosen by you, not at random. A difference is evidence, not proof of cause.
- Models fitted before lever tokens were added carry levers without tokens until they refit.
Size
- Up to 8 questions and 10,000 cases per call. Inline records up to 10,000 rows (or 8 MB of CSV).
Larger records go through
dg_add_dataset. rankreturns at most 1,000 cases.- Over MCP, a large answer can overflow an assistant's context. Ask about the cases the conversation needs, and use the REST API for bulk scoring.
Shapes
- Shapes other than
tableanswer about cases by id, not new rows. - The reading's windows and horizons come from fixed sets (for example,
horizon_daysof 30, 60 or 90). Other values are refused, with the allowed ones listed. - An event log shorter than its windows reads to nothing (
shape_empty).
Verdicts
- A Verdict expires with its model, 90 days after the fit, even when a later call reused that fit. After that, the question fits again.
- Verdicts name
datagoat.ioas their issuer and verify against Datagoat's public keys.