---
product: "AG Studio"
title: "Panel Features"
description: "Learn how to offer a choice of model in the chat panel, and how to suggest prompts before a conversation starts."
framework: javascript
version: "3.0.0"
related:
    - title: "Chat UI Overview"
      url: "https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-chat-ui/"
    - title: "Tool Components"
      url: "https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-tool-components/"
llms: "https://www.ag-grid.com/studio/archive/3.0.0/llms.txt"
---

# Panel Features

Two of the chat panel's features are declared on the harness config rather than in the UI, because both belong to the conversation rather than to a single render. Both are options on [`AgAiHarnessConfig`](https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-builtin-harness/#config-reference).

## Offering a Choice of Model

List `models` and the chat panel shows a model picker beside its send button. Each entry needs an `id`, which your adapter receives, and a `label`, which is the wording the reader sees. A model that offers a choice of effort declares its own `efforts`, so the two pickers stay in step and switching model switches to that model's efforts:

```js
const studioProperties = {
    ai: ({ api }) =>
        createAiHarness(api, {
            adapter,
            models: [
                {
                    id: 'gpt-5.6-terra',
                    label: 'GPT-5.6 Terra',
                    efforts: [
                        { id: 'low', label: 'Low' },
                        { id: 'high', label: 'High' },
                    ],
                },
                { id: 'gpt-5.6-sol', label: 'GPT-5.6 Sol' },
                { id: 'gpt-5.6-luna', label: 'GPT-5.6 Luna' },
            ],
        }),

    // other studio properties ...
}
```

Omit `models` and no picker is shown - the adapter answers on whatever model it was built with. A model with no `efforts` shows only the model picker.

The choice belongs to the conversation. Each thread keeps the model it was last set to, and a new thread starts on whichever model was picked most recently. Every message carries the choice through to [your adapter](https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-direct-llm-runner/#choosing-the-model), which decides what to do with it.

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| `id` | `string` |  | Passed through to the adapter as AgAiModelSelection.id. |
| `label` | `string` |  | The wording the reader sees for this model. |
| `efforts` | `AgAiModelEffort[]` |  | The efforts this model offers, in the order they are shown. Omit for a model that offers no choice of effort, and the reader is asked only to pick the model. |

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| `id` | `string` |  | Passed through to the adapter as AgAiModelSelection.effort. |
| `label` | `string` |  | The wording the reader sees for this effort. |

## Suggesting Prompts

`promptStarters` seeds an empty thread with prompts a reader can click instead of typing. They show only before the first message, so they are an opening move rather than a menu:

```js
const studioProperties = {
    ai: ({ api }) =>
        createAiHarness(api, {
            adapter,
            promptStarters: [
                { label: 'Summarise this page', prompt: 'Summarise what this dashboard shows.' },
                { label: 'Find outliers', prompt: 'Which cities are unusual in this data, and why?' },
            ],
        }),

    // other studio properties ...
}
```

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| `label` | `string` |  | The words on the button. Keep it short - it is not what the agent receives. |
| `prompt` | `string` |  | The message sent when the suggestion is chosen. |
| `icon` | `AgCustomIcon` |  | An icon shown before the label. One of: `string` - an SVG string `{ className: string }` - a CSS class name `{ url: string }` - a URL to an SVG |

Write them for the data in front of the reader. A starter that mentions a field the dashboard does not have shows the reader that the assistant does not know their data.

## Next

- [Chat UI](https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-chat-ui/) - what the panel renders
- [Built-in Harness](https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-builtin-harness/) - the rest of the harness config
- [Direct LLM Runner](https://www.ag-grid.com/studio/archive/3.0.0/javascript/ai-direct-llm-runner/) - what an adapter does with the chosen model
