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

# The chat screen

> Every part of the ModelHub chat: the composer, sending and stopping, streaming answers, Markdown and code rendering, the per-answer report card and its Details panel.

The chat is the main page of ModelHub. It has three parts: the sidebar on the left, the conversation in the middle, and the composer (the message box) at the bottom.

## Layout

| Area | Contents |
| - | - |
| Header | Organization and project switcher, light/dark toggle |
| Sidebar | **New chat**, **Chat**, **AI Usage**, **Settings** (administrators only), your conversation history, your name and photo |
| Main area | The home screen when a conversation is empty, otherwise the messages and the composer pinned to the bottom |

### The home screen

A new conversation shows the heading **CorePillar Assistant**, a greeting ("Hi *your first name* — ask anything. Routing, cost and PII handling happen automatically."), the composer, and four example prompts:

* Summarize this incident report and pull out the action items
* Draft a reply to a customer asking about our SOC 2 status
* Explain the difference between our small and large models
* Rewrite this paragraph so a non-technical exec would get it

Clicking an example puts it in the composer for you to edit. It does not send it.

## The composer

| Control | What it does |
| - | - |
| Message box (**Message the assistant…**) | Grows as you type, up to 40% of the window height, then scrolls. |
| Paperclip (**Attach a file**) | Opens a file picker. See [Attachments](/modelhub/chat/attachments). Disabled once five files are attached. |
| Model picker (shows **Auto** or a model name) | Choose Auto or a specific model, grouped by **Small**, **Mid** and **Large**. See [Models and routing](/modelhub/chat/models-and-routing). |
| **Optimise** switch | Removes stock politeness and wordy phrases before sending. Off by default. See [Optimise](/modelhub/chat/optimise). |
| **N masked** badge | Appears when the live privacy scan finds something in your draft. Hover it to see each finding's type and severity under **Found in this draft**. |
| **Send** / **Send masked** | Sends the message. The label changes to **Send masked** when a critical identifier was found. |
| Stop button (square) | Replaces **Send** while an answer is streaming. Stops the answer. |

### Keyboard and input

* **Enter** sends. **Shift+Enter** adds a new line.
* Pasting files into the message box attaches them instead of pasting text.
* You can drag files onto the composer. The border turns dashed and the placeholder reads **Drop to attach…**.
* **Page Up** and **Page Down** scroll the conversation even while the cursor is in the message box.

### The live privacy check

While you type, ModelHub scans your draft for personal data about a third of a second after you stop typing (350 ms). This scan runs fixed patterns only, so it is fast and free. If it finds something:

* The **N masked** badge appears. Its shield turns red when a finding is critical.
* For a critical finding (an API key, a card number, a US Social Security number and similar), a red strip above the composer says "A critical identifier was found — it will be replaced before the model sees it." and the button reads **Send masked**. Clicking it is your confirmation.

If you press **Enter** before the scan has finished, ModelHub scans first. When that scan finds something critical, nothing is sent until you click **Send masked**. Full details are in [Privacy screening](/modelhub/chat/privacy-screening).

## Sending a message

When you send:

1. Your message appears on the right straight away, already masked: each detected value shows as a dashed chip such as `[EMAIL_4821]`.
2. A thinking line appears in place of the answer. It cycles through words like "Percolating…" and "Mulling…", and after 3 seconds adds the elapsed seconds.
3. A small line above the composer shows where the message went, for example **Routed to Mid · GPT-4.1**, plus **· N masked** if anything was removed. See [what the routing line says](/modelhub/chat/models-and-routing#what-you-see-while-it-runs).
4. The answer streams in word by word.

Limits per message:

| Limit | Value |
| - | - |
| Message length | 32,000 characters |
| Conversation length | 20 exchanges (40 messages). Every earlier turn is sent to the model as context, masked. |
| Longest answer | 8,192 output tokens for models in CorePillar's catalogue (more if the administrator set a higher default); models outside the catalogue use their own configured limit, or 4,096 tokens |

You cannot send while an answer is streaming, or while an attachment is still being scanned.

<Warning>
  In the current build a conversation holds at most 20 exchanges. Sending a 21st message in the same conversation fails with "The assistant could not be reached (400)." Click **New chat** and continue there; paste a short summary of the earlier thread if the model needs it.
</Warning>

## Stopping an answer

Click the square **Stop generating** button. Whatever has streamed so far stays on screen and no error is shown. A stopped answer does not get its report card and may not be saved to your history.

## How answers are displayed

Answers are rendered as Markdown:

* Headings, paragraphs, bold and italic, block quotes and horizontal rules.
* Bulleted, numbered and task lists (task checkboxes are display only).
* Tables, which scroll sideways when wide.
* Links open in a new tab. Only `http`, `https` and `mailto` links are clickable; anything else shows as plain text.
* Inline `code` and fenced code blocks.

Code blocks show the language in the top-left corner (or `text` when none was given) and a **Copy** button. Syntax highlighting is applied for `ts`, `tsx`, `js`, `jsx`, `json`, `python`, `sql`, `bash`, `html`, `css`, `yaml`, `go`, `rust` and `java`. Other languages render as plain monospaced text.

Hovering an answer shows a **Copy** button that copies the whole answer. If placeholders in the answer refer to your own data (for example the model wrote "I'll email `[EMAIL_4821]`"), ModelHub puts the real value back on your screen. Critical values such as keys and card numbers stay as placeholders.

### Scrolling

The view follows the answer as it streams. Scroll up and it stops following; a button appears at the bottom labelled **New text below** while streaming, or **Jump to latest** afterwards. Sending a new message always takes you back to the bottom.

## The report card under each answer

When an answer finishes, a card appears beneath it.

**Top row:** a verdict badge and a one-line headline.

| Badge | Meaning | Headline |
| - | - | - |
| **Right-sized** | The model's strength fit the question. | "Good match — the model's strength fit this question." |
| **Overkill** | A cheaper model would have done. | "A cheaper model would have done this just as well — about N% less per message like this." (or "A lighter model could likely have handled this for less." when the saving is under 5% or unknown) |
| **Underpowered** | The question needed a stronger model. | "This question needed a stronger model — the answer may be less reliable." |

For **Overkill** and **Underpowered**, a meter shows the question's difficulty (**Question:** Simple, Moderate or Complex) against the model's strength (**Model:** Basic, Standard or Advanced).

**Bottom row:**

* A suggestion chip. On **Overkill** it reads **Use** *cheaper model* with the amount you would have saved (for example `−$0.0031`). On **Underpowered** it reads **Try** *stronger model*. Click it to select that model for your next message. If no stronger model is connected you see "No stronger model is set up here — ask your admin."
* The cost of the answer and the total time it took.
* The model name (on right-sized answers).
* **N tokens trimmed** when Optimise removed something.
* **Details**, which expands the panel below.

### Details

| Section | Contents |
| - | - |
| **Why this verdict** | "Needed a *basic/standard/advanced* model, used a *basic/standard/advanced* one", a short note such as "short answer, large model", and a confidence percentage. |
| **What made it** *simple/moderate/complex* | One bar per routing signal (for example "debugging", "contains code", "greeting"), plus the routing reason such as "scored as moderately complex" or "You picked this model". |
| **Privacy** | Counts of masked items by severity (critical, high, medium, low), or "No personal details found". |
| **Usage** | Tokens in and out, the model name, time to first word, and the list of Optimise changes, if any. |

The verdict is calculated from the length of the answer and the question's score, not by a second AI. The method is explained in [How routing works](/modelhub/how-it-works/routing#grading-the-decision-afterwards).

## Errors

Errors appear in a red box under the answer. Common ones:

| Message | Cause |
| - | - |
| A credential or government identifier was found in this message. It will be replaced with a placeholder before the model sees it — send again to continue. | The server found a critical item the live check had not confirmed. Send the message again; it goes out masked. |
| The assistant could not be reached (NNN). | The request was refused before streaming began. `409` usually means the project has no models; `401` means your session expired; `404` means the organization or project was not found; `400` usually means the conversation passed 20 exchanges or the message is too long. |
| The selected model is no longer configured. | An administrator removed the model you picked. Choose another, or switch to Auto. |
| This model's API key is missing or revoked. | The provider key behind the model is not usable. CorePillar already tried the organization's other keys for that provider. Tell your administrator. |
| *Model* used its entire N-token budget before writing any answer… | A reasoning model spent its output allowance thinking. Pick a non-reasoning model. |
| *Model* returned no text… Re-send, or try a different model. | The provider returned an empty answer. |

A failed answer keeps whatever text had streamed before the error.

## Encrypted history banner

If your organization has turned on end-to-end encryption for chat history, a strip may appear at the top of the chat:

* "Chat history is end-to-end encrypted. Set a passphrase so you can reopen your own chats." with a **Set passphrase** button, or
* "Chat history is end-to-end encrypted — locked on this device." with **Locked — enter passphrase**.

See [Settings and profile](/modelhub/settings#end-to-end-encrypted-history).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.