Skip to content
Tellwise

How the AI works

Two systems, honest about both

Tellwise does not have one AI. It has two, and they do different jobs. The forecast numbers come from a predictive model running in code. A language model explains them in plain English. Neither is asked to do the other's job.

Why two

Because the two jobs are genuinely different

Projecting a balance forward day by day is a structured mathematical problem. You can write the code, test it against known histories, and know when it is wrong. A language model is not the right tool for it: language models interpolate between patterns they have seen, and asking one to compute a future balance is asking it to do arithmetic by extrapolation from a training corpus.

Explaining a warning in a sentence a person can act on is a writing problem. You cannot write a regular expression for "this week will be tight because the rent lands before the paycheck," calibrated to one specific person's pattern and phrased for their situation. That is exactly what a language model does well.

So Tellwise uses both: code for numbers, language model for words. Neither is asked to do the other's job, and the split is documented here so you can judge whether it is honest.

Part A

The predictive model, computed in code

The forecast, the confidence range, the warnings, and the anomaly flags are produced by a deterministic model over your transaction history. They are computed in TypeScript, not by a language model. This part of the system does not involve a language model at any point.

01

Recurring-pattern detection

The model identifies which transactions recur: income, bills, subscriptions. For each it learns the typical amount and the cadence, day-of-month or day-of-week. A charge that repeats on the 1st of each month is treated differently from one that appears sporadically.

02

Everyday spend and volatility

Variable day-to-day spending is averaged and its volatility is measured separately. Both go into the projection: the average is the expected path; the volatility determines how wide the confidence range is at each future day.

03

Day-by-day projection

Starting from today's balance, the model adds expected income, subtracts expected bills and average spending, and steps forward one day at a time. The result is a projected balance for each day in the forecast horizon.

04

Confidence range and warnings

The confidence range is computed from measured volatility, not chosen to look reassuring. It widens with time. Tight-week and overdraft warnings fall out of the projection automatically: when the lower bound crosses zero, a warning is raised.

The numbers this model produces are the numbers that appear in the forecast, in the warnings, and in the plain-language explanation the language model writes around them. They are computed once, auditably, before any language model is involved.

Part B

The language model, for the explanation

Once the predictive model has computed the forecast, a language model is handed the results: the projected balance, the confidence range, the warning dates, the subscription flags, and the anomalies. It is asked to explain them in plain language.

The language model never invents a number. Every figure in its explanation was computed first by the predictive model and passed to it explicitly. If the explanation says your balance will be –$107 on Aug 17, that number came from the code. The language model turned it into a sentence.

On the language side, Tellwise is model-agnostic by design. The application code asks for a task, not a model: it calls complete({ task: "explain" }) and gets text back. Which model answers, which lab provides it, and what the fallback chain is are configuration decisions in one file. Changing a route is one line. Adding a lab is one case in a switch statement.

Routing

The table, generated from the code

This is not a diagram somebody drew. It is rendered from the same routing configuration the explanation engine reads, so if it is wrong here it is wrong in production.

TaskModelProviderTierUSD per M tokens
Explain the forecast and name the warnings in plain languagegpt-4.1-miniopenaibalanced$1.60
Write the one-line read at the top of the forecastgpt-4.1-miniopenaibalanced$1.60

Fallback chain

If the routed model fails or returns nothing, the call walks a chain of candidates before giving up: gpt-4.1-mini, then claude-sonnet, then gpt-4.1, then gpt-4.1-nano. Providers with no key configured are skipped silently. One provider having a bad hour should not lose a customer their explanation, and it does not.

No training on your data

Your transactions are sent to a language model to produce your explanation and for nothing else, under agreements that prohibit training on that traffic. The predictive model runs locally and never sends your data anywhere. Neither system learns from your transactions over time.

Candidates

What is wired, and what is one key away

Every model below sits behind the same interface. Adding a provider is one case in one file, which is the entire point of building it this way. The models that are one key away switch on the moment that key is present.

gpt-4.1

frontier

openai · 1,000,000 token context

  • long histories with irregular income
  • explaining several interacting warnings at once

gpt-4.1-mini

balanced

openai · 1,000,000 token context

  • explaining the forecast in plain language
  • naming warnings and describing anomalies

gpt-4.1-nano

fast

openai · 1,000,000 token context

  • the one-line overall summary
  • tidying a subscription name

claude-sonnet

frontier

anthropic · 200,000 token context

  • careful phrasing of money warnings
  • tone on a tight week

gemini-flash

fast

google · 1,000,000 token context

  • high-volume explanation at low cost

llama-open

open

meta · 128,000 token context

  • self-hosted explanation for privacy-first deployments

In this deployment the OpenAI and Anthropic adapters are written and the OpenAI one is live. The other providers are declared with their real model names and switch on when their key is present. No model is trained on customer transactions, by us or by our providers.

Limitations

What the forecast cannot know

A forecast is an estimate. Telling you the limitations is the only honest thing to do.

Thin history means a wide range

The predictive model learns from your past. With a week of history it has little to learn from, and the confidence range will be wide. With three months of regular income and bills, the range narrows significantly. The product shows the range honestly rather than hiding it.

Irregular income widens the range

Freelance income that arrives at different amounts on different days is genuinely harder to project than a monthly salary. Tellwise handles it, but the uncertainty is real. The confidence range reflects it, and Pro includes deeper modelling for variable and seasonal income.

The past is not the future

A forecast is built from patterns in your history. If something changes, such as a new job, a move, or a large planned purchase, the forecast will not know about it until the new transactions appear. It cannot predict what has not happened yet.

The explanation is grounded but not audited

The language model writes the plain-language read from the numbers it is handed. It is not independently verified against your raw transactions. A poorly phrased sentence is possible. A fabricated number is not: all numbers are pre-computed and passed explicitly.

Tellwise is money information, not financial advice. A forecast is an estimate and it can be wrong. We say so plainly next to every forecast in the product. The full stance is on the Care page.