Ask Artifacts
An Ask Artifact is a visualization the Ask agent composes inline inside an answer. The agent selects building blocks as it writes, so an answer can contain none, one, or several, in any order, interleaved with prose.
Every artifact is populated from values the agent’s data tools returned for the grounded source. There are nine types.
A titled chart with a category or time axis and one or more named series.
| Field | Renders as |
|---|---|
type | line, area, or bar for series across the x-axis; donut or pie for share-of-whole |
title | Heading above the chart |
xKey | The row field used for the x-axis; for donut and pie, the category-label field |
series | One entry per plotted series: data key, display label, and color |
data | The plotted rows |
For donut and pie, the first series’ key names the numeric value field and any further series are ignored. Y-axis and tooltip values are grouped below 10,000 and shown compactly (1.2M) above it. X-axis category labels longer than 14 characters truncate with an ellipsis. The chart carries an accessible description naming the chart type and its series labels.
A sortable table.
| Field | Renders as |
|---|---|
columns | Header cells; each has a key, a label, an optional align (left, center, right), and an optional format |
rows | Body rows, keyed by column key |
sortBy / sortDir | The initial sort; without them the table renders unsorted |
title | Optional heading |
format is number, percent, or text. Numeric and percent columns are formatted to at most two decimal places, right-aligned by default, and sorted numerically — including numeric strings. Percent columns append %. Missing, null, or empty cells render as an em dash and sort last.
Clicking a header sorts by that column and toggles direction. At most 15 rows render; any beyond that are summarized below the table.
A grid of stat tiles.
| Field | Renders as |
|---|---|
kpis[].label | The tile caption |
kpis[].value | The figure — numbers are thousands-grouped, strings shown verbatim |
kpis[].unit | Optional suffix beside the value |
kpis[].delta | Optional signed change against the prior period, shown with an up, down, or flat arrow |
kpis[].deltaDirectionGoodIs | up (default) or down — which direction counts as an improvement |
title | Optional heading above the grid |
A delta is colored and labelled by whether it improved: green and “better”, red and “worse”, or grey and “unchanged”. deltaDirectionGoodIs: "down" inverts that, so a falling figure reads as an improvement. The delta’s accessible name states the value, that it is versus the prior period, and the improvement word — colour is never the only signal.
Segments grid
Section titled “Segments grid”A side-by-side comparison of the same question across groups. Each column carries:
- a title and an
n=Nbadge giving how many responses the group contributed - mini-stat tiles, each with a label, a value, an optional suffix, and an optional signed delta
- a stacked sentiment bar over positive, neutral, and negative
- theme rows, each with a name, a mention count, and a 0–100 bar fill
- an optional quote with its attribution
Up to three columns render side by side on desktop; more wrap. Each column renders at most eight theme rows, with the remainder summarized below.
Theme bars
Section titled “Theme bars”Horizontal mention-rate bars, rendered under a Themes heading. Each bar has a label, a 0–100 percentage driving the fill width, and a formatted value string such as 5 of 8.
An optional tone sets the fill colour and adds a matching icon beside the label, with the tone word appended to the bar’s accessible name:
| Tone | Fill | Icon meaning |
|---|---|---|
default | Brand | — |
ok | Green | Positive |
warn | Amber | Warning |
bad | Red | Negative |
Percentages outside 0–100, and non-numeric ones, clamp to the range. Blank labels fall back to an em dash; long labels truncate with the full text on hover. At most 15 bars render, with a “+N more themes” note for the rest. An optional footer line sits below the bars, typically stating sample size or confidence. An empty payload renders “No data”.
A single verbatim quote, rendered as a block with a left border coloured by sentiment.
| Field | Renders as |
|---|---|
text | The quote body; blank falls back to an em dash |
who | Attribution; blank falls back to “Anonymous” |
role | Optional role shown in the meta row |
sentiment | pos, neu, or neg — sets the border colour and a smiley, neutral, or frown icon |
tags | Optional pills in the meta row |
The sentiment icon carries a text label, so the colour is not the sole signal. At most six tags render; the rest collapse into a “+N more” pill.
Conflict Signal
Section titled “Conflict Signal”A Conflict Signal is an amber callout surfacing a divergence the agent found — groups whose views differ on the same theme, presented rather than averaged away.
| Field | Renders as |
|---|---|
theme | The theme in question, shown as an “On:” caption |
summary | A one-line plain-language statement of the disagreement |
groups | One row per clustered group: its label and a one-line summary of its position |
quote | Optional supporting quote, inlined beneath the groups with its own sentiment icon and label |
Clustering happens server-side. An empty groups list leaves the summary standing alone; blank group labels fall back to an em dash.
Sources
Section titled “Sources”The Grounded in panel: a row of numbered chips naming the responses an answer cites.
Each chip has a number, a label, and optionally the id of the response it points at. Chips carrying a response id are clickable; chips without one render but do nothing. Each chip’s accessible name is Source {n}: {label}, so the number is never the only cue. At most 12 chips render, with a “+N more” note beyond that. Long labels truncate with the full label on hover, blank labels fall back to an em dash, and an empty panel renders “No data”.
A Tool use panel listing the steps the agent took for that turn. Each step has a label and a status:
| Status | Shown as |
|---|---|
| Done | Green check, labelled “Done” |
| In progress | Spinning indicator, labelled “In progress” |
| Queued | Ellipsis glyph, labelled “Queued” |
Steps may carry a duration. The panel stays expanded while the turn is streaming and collapses once it completes; clicking the header toggles it, and a manual expand is not overridden afterwards. When the answer carries tool-call data, the trace is built from that data in preference to any trace the agent emitted itself.
Inline evidence citations
Section titled “Inline evidence citations”Within an answer’s prose, [Evidence N] markers render as small numbered chips. Clicking one scrolls to the matching chip in that answer’s Sources panel and briefly highlights it. Resolution is scoped to the answer it appears in, so source 2 in one answer never jumps to source 2 in another.
A marker with no matching Sources entry in the same answer still renders, but is inert and labelled “Source detail unavailable”.
Rendering states
Section titled “Rendering states”| State | Shown as |
|---|---|
| Payload still streaming | A “Rendering…” placeholder in the artifact’s position |
| Payload complete but unrenderable | An inert message naming the type, such as “Invalid chart data” |
An unrenderable artifact never removes the surrounding prose — the rest of the answer renders normally.
Copy behaviour
Section titled “Copy behaviour”The copy action under an answer serialises prose, headings, bullets, and markdown tables. Ask Artifacts are skipped rather than copied as their underlying data.