How it works

Charts in the answer

When an answer contains a set of comparable numbers, the agent draws it — unprompted, mid-conversation. Nine chart types with a worked example of each, the containment gate that refuses a chart whose numbers are not in your material, and why derived figures are computed in code rather than by the model.

Ask a support agent what each plan costs and you get a paragraph. Ask a person and they sketch four bars. The agent does the second thing: when an answer already contains a set of comparable numbers, it draws them — without being asked to, in the middle of an ordinary conversation.

Every chart on this page is rendered by the same component your visitors see, from the same spec the model emits. Nothing here is a screenshot.

What the model actually writes

A fenced block, next to the words:

```chart
{"type": "bar", "source": "passage:kb", "title": "Monthly price by plan", "unit": "USD",
 "labels": ["Free", "Starter", "Pro", "Enterprise"],
 "series": [{"name": "monthly USD", "values": [0, 49, 499, null]},
            {"name": "tokens (M)", "values": [5, 25, 250, null]}]}
```

which renders as:

Monthly price by planFrom your knowledge base

Three things in that example are load-bearing.

null, not 0. Enterprise pricing is "contact sales", so there is no number — and a zero bar would be a claim the material never made. Zero is a meaningful value; "unknown" is not zero.

The prose stays. The chart supplements the answer, never replaces it. Telegram, WhatsApp and screen readers receive the same content as a compact table, so an agent that answered only in a picture would answer nothing at all on half its channels.

source is required. A chart with no provenance is a number with no citation, and the badge in the corner says which kind of material it came from. Where a single retrieved passage carries the figures, that badge is a live citation you can open.

The numbers have to be in your material

This is the part that matters more than the drawing.

passage: charts are the common case: the numbers come from your knowledge base, and the model copies them out. Copying is reliable — measured across three models pulling a price table out of retrieved text, with a stale price sitting in the same passage as a distractor: 9 out of 9 correct, none taken in by the decoy.

Arithmetic is not. The same models, the same passages, asked to work out a bill from a base fee plus an overage rate: 12 out of 12 wrong. Every multiplication was right and every formula was wrong.

So before a chart renders, a deterministic check runs over it: every label-and-value pair must appear in the material the agent actually retrieved this turn. A pair that cannot be found means the whole block is dropped — the answer keeps its words and loses its picture. Unlike the sentence-level grounding marks elsewhere in the product, this one refuses rather than annotates: a mis-drawn bar has finished making its point long before anyone reads a footnote.

The check compares numbers, in every written form they take — 4,200 and 4200, 25M and 25000000, 2500万 and 25 million. It does not verify units, and it cannot always tell which of two labels in one sentence a number belongs to. It is a floor under fabrication, not a proof of correctness.

Derived figures are computed, not written

Shares, growth rates and running totals are exactly what the model gets wrong, and exactly what makes a chart worth looking at. So the model does not calculate them.

It hands the verbatim figures to a tool, names the derivation it wants — share of total, percent change, running total — and the platform computes the series in code. The result stays on the server; the model writes a reference, and the numbers are filled in before the block is sent. It never gets the chance to mistype what the code just worked out.

The chart says so: a series computed this way is labelled on the chart itself, because "copied from your material" and "calculated for you" are different guarantees and a reader deserves to know which one they are looking at.

Charts you can talk to

Click a bar — or a row of a table — and the agent receives a follow-up question about that category, as if the visitor had typed it. The chart stops being output and becomes input: someone who cannot articulate which slice of the data they want can simply point at it.

Every chart also exports to CSV, and bar / sideways / line / area are the same sentence told four ways, so a reader can switch between them. Pie, funnel, radar and scatter are different sentences — composition, drop-off, shape, correlation — so they do not offer the switch.

The nine types, and when each one is right

A type set the model cannot choose between is the same as having one type. Each of these answers a different question, and picking the wrong one is worse than not drawing at all: the chart is still there, quietly saying something else.

bar — how do these categories compare?

The default. Reach for it when nothing more specific fits.

Cases closed by teamFrom a tool result

hbar — the same question, with long labels

Category names that are country or product names stop fitting under vertical bars and the axis starts rotating them 45°. Turned sideways they simply fit. The platform switches to this by itself past twelve categories — not to a line, because these categories have no order and a line would invent a trend.

Leads by marketFrom a tool result

line — where is this heading?

For categories that genuinely have an order: months, stages, versions. Gaps are joined rather than broken, because a break reads as two separate series rather than one missing number.

Monthly recurring revenueFrom a tool result

area — the same trend, when the volume is the point

Use it when the accumulated quantity matters more than the rate of change.

Tickets receivedFrom a tool result

stacked — a comparison that also has parts

Not a type of its own, a modifier on bar, hbar and area: still a comparison, but each bar opens up to show what it is made of.

Revenue by quarterFrom a tool result

pie — what is this whole made of?

Only when the parts genuinely add up to the thing. One series, no negatives, at most eight slices — past that nobody can tell which slice is which, and it degrades to bars.

Where the questions come fromFrom a tool result

funnel — where are people dropping out?

Each stage must be a subset of the one above it. A series that does not descend is not a funnel, it is a set of side-by-side numbers — and the platform draws it as bars instead.

From visit to paidFrom a tool result

radar — what shape does each option have?

Several things compared across the same few dimensions. It needs the dimensions to be on comparable scales: put a 0–10 rating next to a 0–1,000,000 count and one axis pegs while the other flatlines, so the platform falls back to bars.

Vendor comparisonFrom a tool result

Exactly two series: the first is x, the second is y, and the labels name the points.

Answer length against satisfactionFrom a tool result

table — when none of the above is honest

Two measures on different scales, or data that was always a table. It is also where every other type lands when its premise breaks.

Registration by marketFrom your knowledge base
daysfee (USD)
Brazil904,200
Mexico602,800
Colombia451,900
Chile552,100
Peru702,450
Argentina

When it stays quiet

Three numbers is the floor. "Up from 120k to 150k" is a sentence, not a bar chart, and drawing it is noise. Yes/no questions and single-value lookups get an answer, not a picture. At most two charts in one reply, and a second only when the two measures are in different units — the platform counts, so the model cannot talk itself into a third.

And if nothing was retrieved this turn, there is nothing to draw. The agent says what it knows and what it does not, which is the same thing it does with words.

Turning it on

Nothing to turn on. Any agent with a knowledge base or tools does this already, and the containment gate means a chart it should not have drawn never reaches the visitor. Charts are stored with the message, so reopening the conversation a month later shows the same picture, not a hole in the middle of an answer that still discusses it.