> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Custom Views

> Build a custom layout for your traces, sessions, or labeling-queue records, no code required.

A **custom view** is a customized layout designed to get the information you need from your traces. To create a custom view, you can open [Alyx](/docs/ax/alyx), describe the layout in plain language, and Alyx will build it for you. Instead of reading raw spans in the default view, you get a purpose-built panel (a conversation transcript, a tool-call checklist, a side-by-side input/output comparison) rendered alongside your data.

You don't need to write any code; simply describe what you want, and Alyx will generate a live preview that you can refine in conversation until it's right. Once you accept a custom view, it's added as a tab in the traces view that you can rename, and that an org admin can publish to the rest of your team.

<Info>
  Custom views are different from **[Saved Views](/docs/ax/observe/tracing/view-and-manage-traces#saved-views)**. A Saved View stores a table configuration (filters, columns, sort, time range). A custom view is a bespoke layout of the underlying data that Alyx builds from your description.
</Info>

## Purpose-built layouts that match your application

The default trace view renders every application as a tree of spans, since this structure is shared across all applications because of how traces are ingested. However, every application has a different shape. A support agent is a conversation with tool calls attached to individual turns. A retrieval pipeline is a ranked document set and the answer generated from it. Reading and reconstructing spans and traces into turns, sessions, and actions taken by an agent is work that needs to be redone every investigation, the expensive way: expanding spans, guessing at attribute keys, holding two panels in your head at once. A custom view moves that reconstruction into the layout, so the evidence for a failure arrives in one place, in the order you need to understand it and explain it.

Custom views offer a helpful layout for the failure mode your team keeps hitting; they read the spans you already send, so nothing changes upstream, and turn one builder's way of reading a problem into a shareable default that makes the information most important to you parseable at a glance. Custom views are built on what Arize AX already knows about your data, including [sessions](/docs/ax/instrument/set-up-sessions) that stitch turns into a conversation with evaluations and cost attached to each span so you can view incoming data through the lens that matters most.

### Session views

A [session](/docs/ax/instrument/set-up-sessions) groups the traces that share a `session.id`, and Arize AX computes that session's duration, trace count, prompt, completion, and total token counts. [Session-scope evaluators](/docs/ax/evaluate/create-evaluators#scope) then score the session as a whole rather than scoring each turn in isolation, so the result measures the overall effectiveness of the conversation.

A session custom view receives all of it: the session's duration, trace count, token counts, and session-scope evaluation results, plus every span in the session with its parent, input, output, latency, cost, token counts, metadata, user ID, and span-level evaluations attached. A layout can therefore render the conversation turn by turn and still reach the tool calls and retrievals inside any single turn, since the grouping and the session-scope scores already exist.

## Where you can create a custom view

Custom views come in three flavors, depending on where you open Alyx:

| View type                 | Where it renders                            | What it can show                                                                                                                                                                                         |
| :------------------------ | :------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trace**                 | The trace detail panel                      | Every span in the trace with its span kind, status, latency, token counts, cost, metadata, attributes, and evaluations, plus the input and output of the selected span                                   |
| **Session**               | The session detail page                     | Every span in the session with its input, output, latency, token counts, cost, metadata, user ID, and evaluations, plus the session's duration, trace count, token counts, and session-scope evaluations |
| **Labeling-queue record** | A record in an annotation queue (read-only) | The queue's name and instructions, the record's columns, and the annotation rubric (each config's type, label options, and score range)                                                                  |

## Create a view

<Frame caption="Open Customize Tabs on a trace and click Create Custom View to generate a view with Alyx.">
  <video
    src="https://storage.googleapis.com/arize-assets/doc-images/alyx/Alyx-custom-view.mp4"
    alt="Opening Customize Tabs on a trace and selecting Create Custom View to generate a custom view with Alyx"
    width="100%"
    height="100%"
    style={{
  display: 'block',
  objectFit: 'fill',
  backgroundColor: 'transparent',
}}
    controls
    autoPlay
    muted
    loop
  />
</Frame>

<Steps>
  <Step title="Start a custom view">
    Open a trace, a session, or a labeling-queue record. Open the **Customize Tabs** menu in the tab bar and click **Create Custom View** (on a labeling-queue record, use the **+** button above the record). This opens Alyx, which knows which surface you're on and builds the matching view type. You can also open Alyx directly (**Cmd+L** / **Ctrl+L** by default) and ask it to create a view.
  </Step>

  <Step title="Describe the layout you want">
    Tell Alyx what you want to see, in plain language. Be specific about the data and the shape: a list, a table, a chat transcript, or side-by-side panels.
  </Step>

  <Step title="Preview and refine">
    Alyx returns a **live preview** of the view with **Accept** and **Reject** buttons. Nothing is saved yet. Keep talking to Alyx to adjust it (move things around, add a control, change the sort) until it looks right.
  </Step>

  <Step title="Accept, manage, and share">
    Click **Accept** and the view is automatically added as a tab. To manage a saved view, open the **Customize Tabs** menu and hover the view to reveal its actions: **Edit in Alyx**, **Rename** (on views you created), and **Delete** (on views you created, or on published views if you are an org admin), plus a **Publish** section with a **Visible to everyone** checkbox that shares the view with your team. To publish a view you must have created it and be an org admin; once it's published, either its creator or an org admin can unpublish it. Labeling-queue views have a second checkbox, **Show on all queues**, which the view's creator or an org admin can toggle. To control whether a view stays in the tab row, select or clear its checkbox in the **Customize Tabs** list; that choice is stored per browser and applies only to you.
  </Step>
</Steps>

## What to ask Alyx

You describe the view; Alyx handles the rest. A good request names the **data** you want and the **shape** you want it in.

### Trace views

* *"Create a custom view for this trace that shows a list of all tool calls with their inputs and outputs."*
* *"Create a conversation-style view of the messages in this trace."*
* *"Build a side-by-side input/output comparison."*
* *"Show every LLM span with its latency, token count, and cost in a sortable table."*
* *"Make a timeline of the spans in this trace, ordered by start time, with errors highlighted."*

### Session views

* *"Create a custom view for this session that shows each turn as a chat bubble with its latency."*
* *"Show a table of every trace in this session with its status, duration, and total tokens."*
* *"Summarize the token usage across this session as a running total."*

### Labeling-queue views

* *"Lay out this record with the model output on the left and the annotation rubric on the right."*
* *"Show the record's columns as a clean, scannable card so I can label faster."*

### Refining a view

<Frame caption="Refining a view: ask Alyx to edit an existing custom view to also show cost per span.">
  <video
    src="https://storage.googleapis.com/arize-assets/doc-images/alyx/Alyx-edit-custom-view.mp4"
    alt="Editing a custom view with Alyx to add cost per span"
    width="100%"
    height="100%"
    style={{
  display: 'block',
  objectFit: 'fill',
  backgroundColor: 'transparent',
}}
    controls
    autoPlay
    muted
    loop
  />
</Frame>

Once a view is open, ask Alyx to change it:

* *"Add a search box."*
* *"Change the layout to side-by-side."*
* *"Add a column for cost."*
* *"Fix the sorting so the slowest spans are first."*
* *"Group the rows by span kind."*

## Good to know

* **Nothing saves until you accept.** Every view Alyx generates is a preview first. Refine it as much as you want before committing.
* **Views render the data that's available.** A view can only show data present in the trace, session, or record. In a trace view, the full input and output belong to the selected span, while in a session view every span carries its own input and output. If you ask for data that isn't there, Alyx will tell you what it can show instead.
* **Personal by default, shareable when ready.** New views are visible only to you until **Visible to everyone** is checked in the view's actions, which requires having created the view and being an org admin.
* **View controls are display-only.** Search boxes, sorting, filtering, and expand and collapse all work inside a view, and clicking a row can change which span is selected in the surrounding page. A view cannot write data back, so it can't record feedback or submit annotations.
* **Labeling-queue views are read-only.** They reshape a record for easier review but don't submit annotations themselves.
