Skip to content
Plotwell

How the AI works

Model-agnostic, and honest about it

Plotwell does not exist without modern language models, and it is not tied to any one lab. Here is the routing, the escalation rule, the fallback chain, and the check that decides what you are allowed to see.

Why a model at all

Because the input is arbitrary

A rule engine can detect that a column called “Date” is a date. It cannot detect that a column called “Signed” or “Week of” or “FY Q2” is also a date, and it cannot decide whether the right chart for that date paired with a column called “MRR” is a line, a bar, or a table. That judgement lives in having read thousands of similar decisions, not in a regular expression.

The second part is harder. Writing “revenue was up 18% in March, driven by the enterprise segment which added three accounts” from a table of numbers, in two sentences, in plain language, is a writing problem. Fixed templates produce sentences that are technically true and completely useless. That is the part customers pay for and it is the part only a language model does.

So the model is the engine. Everything else in this product is plumbing around it: parsing a spreadsheet a person made by hand, running the aggregations in code, and refusing to show you a number the model made up.

The pipeline

What the model is actually asked

01gpt-4.1-nano

Work out what kind of dataset this is

Before anything else, a fast cheap model looks at the column names and a sample of values to classify the dataset: sales data, survey responses, time-series metrics, inventory, and so on. This triage takes under a second and sets the context for everything that follows. It is the cheapest step because it does not need to be deep, only fast and directional.

02gpt-4.1-mini

Read the columns and choose the charts that fit

The column profile, which is the types, ranges and cardinalities but not your raw rows, goes to a balanced model with a system prompt that names the chart types Plotwell can draw and the rules for choosing between them. The model is told to pick the views that answer a question a reasonable person would ask of this data, and to skip the ones that would just fill space.

03gpt-4.1-mini

Write the plain-language takeaways

The aggregated output, the actual sums and groups computed from your rows in code, goes to a model with a prompt that asks for two to four sentences per chart. Every figure the model writes is checked against the computed output before you see it. A figure that does not appear in the data is dropped and the count of dropped figures is reported. The model is told to say nothing if there is nothing to say.

04gpt-4.1-mini

Name the dashboard and write the summary

A short title and a one-paragraph summary go at the top of every dashboard. The title names the dataset and the period. The summary names the one or two things that matter most. This is a separate routed step because the voice is different from the takeaways and the prompt is different from the chart selection.

Routing

The table, generated from the code

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

StepModelProviderTierUSD per M tokens
Read the columns and choose the charts that fitgpt-4.1-miniopenaibalanced$1.60
Write the plain-language takeawaysgpt-4.1-miniopenaibalanced$1.60
Name the dashboard and write its summarygpt-4.1-miniopenaibalanced$1.60
Work out what kind of dataset this isgpt-4.1-nanoopenaifast$0.40

Escalation

Wide files, where the column profile is large enough that the right chart is not obvious, escalate to the frontier model. The threshold is configurable by environment variable. Files up to 50,000 rows are supported on Pro and Team, and the escalation point adjusts for files at that scale.

Fallback

If the routed model fails or returns nothing, the call walks a chain of candidates from other tiers and other labs before giving up. One provider having a bad afternoon should not cost a user their dashboard, and it does not.

Grounding check

Every number in a takeaway is checked against the aggregated output before it is shown. A figure that does not appear in the computed data is dropped and counted. This is the only part of the pipeline the model does not get a vote on.

Candidates

What is wired, and what is one key away

Every model below sits behind the same interface. Adding a lab is one case in one file, which is the whole point of building it this way.

gpt-4.1

frontier

openai · 1,000,000 token context

  • wide files with many columns to reason about
  • datasets where the right chart is not obvious
  • picking the few charts that actually answer a question

gpt-4.1-mini

balanced

openai · 1,000,000 token context

  • choosing charts for a typical spreadsheet
  • writing plain-language takeaways
  • naming the dashboard

gpt-4.1-nano

fast

openai · 1,000,000 token context

  • working out what kind of dataset this is
  • quick column triage

claude-sonnet

frontier

anthropic · 200,000 token context

  • careful reading of an unusual schema
  • takeaway phrasing

gemini-flash

fast

google · 1,000,000 token context

  • high-volume dashboards
  • cheap first-pass column triage

llama-open

open

meta · 128,000 token context

  • self-hosted analysis for teams that cannot send data out

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

The grounding guarantee

Numbers computed in code. Takeaways verified.

Charts are not drawn by the model. The model chooses which columns to chart and which chart type fits. The aggregation runs in code against your real rows. The model never produces a number from memory or training data.

Takeaways are checked before you see them. Every figure a takeaway cites is verified against the computed aggregation output. A figure that does not appear in that output is dropped, not corrected. Plotwell would rather say less than say something wrong.

Ungrounded figures are counted and reported. If a model run drops two figures from a set of takeaways, the count is shown so you know the takeaways you received are the ones that passed, not the full raw output.

Files up to 50,000 rows are supported on Pro and Team. The column profile Plotwell sends to the model is compact by design, which is what keeps large files fast and keeps your raw rows from traveling unnecessarily.