Ask — AI Chat
Overview
Ask is the Copilot's landing screen and its chat (/chat). Ask a question in plain language and the built-in agent (AgentOrchestrator + ToolRegistry) selects and calls the tools it needs on its own — real-time data lookup, AI analysis, knowledge search — and answers with supporting evidence. Platform integration MCP (real-time data), TimeSeries-Insight (AI analysis), RAG (document · drawing · video search), and Vision (photo reading) are all bound to a single input box. If optional integrations such as the digital thread or MES are connected, their tools (jobs, part numbers, engineering changes) are simply added; the screen stays the same.
Ask with text, photos, or speech, and get back a conclusion, tables, charts, and evidence cards.
The Copilot's other menus (Proposals · Automation) and the sidebar, notifications, and settings are covered in Copilot screen map.
Chat orchestration is handled by the copliot-web built-in agent (reorganized 2026-07). There is no separate Langflow engine; LLM inference goes through the LiteLLM gateway (default model aura-lite).
Landing screen
When you open a new conversation, the greeting, input box, «Today's tasks», and question chips are laid out in a single column.

| No. | Location | What it does |
|---|---|---|
| ① | Greeting | 「Good morning, ○○」 (afternoon: 「Thanks for your work today」 · evening: 「Thanks for working this late」) plus today's date — based on the plant time zone |
| ② | Input box | 「Ask me anything」 — see Input box below |
| ③ | Today's tasks | Normally collapsed to a single line, 「Today's tasks: N」; tap it and it expands as shown, up to five lines. Tapping a line opens that proposal, and View all goes to the Proposals screen. If there are no tasks, this block is not drawn |
| ④ | Question chips | Four frequently asked questions — tapping one only fills the input box. Edit it and send it yourself |
The four question chips are these:
- 「Show me the equipment in poor health, by priority」
- 「Summarize the alarms that keep recurring」
- 「This equipment anomaly — how was it handled last time?」
- 「Is there a manual registered for this equipment?」
The greeting follows the clock in the plant time zone — 05–11 「Good morning」, 11–17 「Thanks for your work today」, 17–22 「Thanks for working this late」, and at other night and early-morning hours 「Hello, ○○」.
«Today's tasks» starts as a collapsed single line (「Today's tasks: N」). Tapping that line expands it to up to five lines, and this device remembers the expanded state. Line order and dot colors are described in Copilot screen map — Ask landing screen.
To return to the landing screen, press New conversation in the sidebar — there is no separate «Ask» entry in the sidebar.
Once you send a question, the landing screen clears and becomes the conversation screen. On phones, the input box is docked to the bottom of the screen.
Conversation screen

| No. | Location | What it does |
|---|---|---|
| ① | Header | The name of the current conversation (the first question asked). Edit it with the pencil (Rename). On phones the name appears in the top app bar, and you rename it from the «…» menu of the recent conversation in the sidebar |
| ② | Answer | The body — tables, code, and diagrams are rendered inside the answer, and numbers such as [1] link to evidence cards |
| ③ | Below the answer | The chart card and the data line beneath it — which tool it came from, the period and record count actually plotted, and 「partial」 if only part was plotted |
| ④ | Bottom of the answer | Copy answer · Regenerate buttons and the elapsed time (seconds) |
| ⑤ | Bottom of the screen | Input box — 「Ask a follow-up」 |
| ⑥ | Below the input box | 「AI answers can be wrong. Verify the evidence before taking any important action.」 |
Four more things are not visible in the figure.
- Regenerate — next to Copy answer on the finished last answer. Generates a new answer to the same question → see Reading the answer below
- Tool line — above the answer, 「Running tools」 → 「N tools used · N s」. Tap to expand.
- Evidence cards — below the answer: number, type (or thumbnail), title. Up to six are shown, the rest expand via 「Show more evidence (+N)」.
- Follow-up questions — up to three at the end of the last answer.
While you scroll up to read, the view does not follow the answer downward. Use the Jump to bottom button that appears above the input box to come back.
Finding past conversations
Past conversations are grouped in the sidebar under Recent conversations as Today, Yesterday, This week, and Earlier. Typing in the Search conversations box above narrows the list.
- The search targets the conversation title (the first question asked, or the name you changed it to). It does not search conversation bodies — if it is a conversation you will want to find again later, rename it to something recognizable.
- Search runs on the server. The sidebar always shows the latest 30, but a search also matches older conversations (up to 100 at a time).
- If there is no match, 「No matching conversation」 appears.
- When the topic changes, you will get better answers by starting fresh with New conversation in the sidebar.
Conversation URLs
| URL | What it opens |
|---|---|
/chat/new | A new conversation. Append ?q=<text> to prefill the input box with that text (it is not sent) |
/chat/<conversation id> | That conversation. When the first answer arrives in a new conversation, the URL changes from /chat/new to this form — bookmark or share that URL |
/chat | Redirects to /chat/new |
- The URL
/chat?session=<id>used before re-release (2026-10-20) of 2026.10 is no longer accepted.
Input box
| Location | Button · key | What it does |
|---|---|---|
| Bottom left | Add file | Attaches photos (up to 4) and document · drawing · video · audio files. Dragging onto the input box or pasting (Ctrl+V) also works — see Adding files below |
| Bottom right | Thinking level (brain icon) | Chooses how much the AI thinks before answering — see Thinking level below |
| Bottom right | Ask by voice | Press to record, press again (Stop recording) to transcribe into the input box — up to 60 seconds |
| Far right | Send | Changes to Stop response while the AI is generating — during that time you cannot send a new question in the same conversation (Add file and Ask by voice are also locked) |
| Keyboard | Enter · Shift+Enter | Enter sends, Shift+Enter inserts a line break. Enter pressed while composing Hangul does not send |
@ at the start | Call an automation | The list of your automations and automations shared with you appears above the input box |
- As the text grows, the input box expands to 40% of the screen height.
- You can also send just photos or files with no text.
- Pressing Stop response also stops generation on the server. Whatever appeared on screen is saved as the answer, with 「Stopped」 appended below it — reopening the conversation shows the same text. If you stopped before any text appeared, 「Stopped before any answer appeared」 and Retry are shown.
- Only one answer at a time is generated per conversation. If an answer for the same conversation is being generated in another window or on another device, a new question is rejected and you are told to send it again after the previous answer finishes.
Thinking level — fast or deep
In the button row below the input box, the brain icon to the left of the microphone is «Thinking level». The current level is shown next to it by name (icon only on phones), and tapping it opens a menu upward.
| Item | Meaning |
|---|---|
| Server default | Follows the value set by the administrator (initial value). The icon appears dimmed in this state |
| Off | Answers immediately without thinking — fast |
| Low | Thinks a little before answering |
| Medium | A balance of speed and depth |
| High | Slower, but thinks deeply |
- The level you choose is remembered in this browser.
- The button appears only on installations where the administrator has configured thinking levels → Environment variable settings — Thinking mode
- 🔴 «Off» is fast, but on questions that require tools the model may fabricate an answer without calling them. Leave questions about equipment values and alarms on «Server default» or «Medium».
Calling automations with @
Typing @ as the first character in the input box shows up to eight callable automations. Continue typing the name to narrow the list (spaces and case are ignored), select with ↑ ↓, and insert with Enter or Tab. Esc closes the list.
- Each row is tagged on the right with My automation or 「Shared · creator」.
- If there is nothing to call, 「No automations available to call」 appears.
- Users who cannot see the Automation menu do not get the
@list either. - How to build automations and what happens after calling one is in Automation.
Opening Ask with a question handed over from another screen
When another screen opens Ask — for example Continue in Ask on a proposal detail — the question arrives prefilled in the input box (URL /chat?q=…). You press Send yourself.
Ask about this area in the drawing viewer works the same way — the input box of the open Ask window receives text beginning with 「Drawing … area on page N: 」 along with the image of the selected area. If you already had text in the box, it is appended on the next line → Ask about drawings — Viewer
Asking with photos — gauge readings and nameplate text
Attach a photo with Add file and ask, and the AI answers from the photo. Gauge readings and nameplate text are read with the reading tool (Vision) — expand the tool line and you will see it.
| What you ask | Example | What you get |
|---|---|---|
| Analog · digital gauge value | 「What does this pressure gauge read?」 | The reading — only when the same photo is read five times and at least four readings agree |
| Nameplate · label · sign text | 「Summarize this motor nameplate」 | The transcribed text (including Korean), organized |
- If it cannot be read, it refuses. If the image is blurred or badly reflective and the readings disagree, it answers 「Unreadable」 rather than inventing a number. Retake the photo closer and straight on.
- You can attach up to 4 photos at a time. Beyond that, 「You can attach up to 4 images」 appears. Attached photos appear as thumbnails above the input box; remove one with Remove image in its corner.
- Large photos are downscaled to 1568px on the long edge before sending. If gauge graduations come out small, shooting from close up reads better than zooming from far away.
- Photos are used only for reading and are not stored. The conversation history keeps only a reference that «a photo was present». A photo is used for that one question only — to have the same photo read again in the next question, attach it again.
- The same Add file button is used on phones.
- Photo files (png · jpg · gif · webp) attach as photos whichever way you add them. A scanned TIFF is not a photo; it goes in as an attachment under Adding files below.
Adding files — ask right in this conversation
Files that are not in document search — a checklist you just received, a drawing a supplier sent, a work video shot on site — can be put into the input box so you can ask about that file right away. The server reads an added file first (reading · transcription for video and audio), and when answering, the AI picks the pages · sheets · slides it needs from that read text, and the segments it needs from the transcript.
There are three ways to add files.
| Way | How |
|---|---|
| Add file button | Click the button at the bottom left of the input box and pick files — you can pick several at once |
| Drag and drop | Drag files over the input box. When 「Drop to add the file」 appears, drop them |
| Paste | Paste copied files into the input box with Ctrl+V |
Photos (png · jpg · gif · webp) added the same way attach as photos for Asking with photos; any other file becomes an attachment.
| Files you can add | Format | Unit read |
|---|---|---|
| Document PDF | pdf | Page |
| Excel · spreadsheets | xlsx · xlsm · xls · csv | Sheet |
| Word | docx · docm · doc | Page |
| PowerPoint | pptx · pptm · ppt | Slide |
| Drawing | dxf — read as a drawing when added. For a PDF drawing, press the chip's Drawing button | Page |
| Scan | tif · tiff — text is read with optical character recognition (OCR) | Page |
| Video | mp4 · mov · mkv · webm — speech and embedded subtitles are transcribed → see Video · audio below | Time-stamped segment |
| Audio | m4a · mp3 · wav | Time-stamped segment |
- The format is judged by content, not the file name. A different file merely named
.xlsxis not accepted. - Files not accepted — DWG (export to DXF or PDF and add that), executables, formats not in the table above (side captions
srt·vttare not accepted either). - Video · audio is accepted only when both the extension and the content of the file header match. A different file merely named
.mp4is not accepted. - Macros and external links in Excel · Word are neither run nor followed — only the values are read.
| Limit | Value | If exceeded |
|---|---|---|
| Size of one file | 50MB — video · audio 1GB | 「The file is too large (max 50 MB)」 · 「The video or audio file is too large (max 1 GB)」 — it is not uploaded |
| Length of video · audio | 60 minutes | 「The video or audio is too long (max 60 minutes). Cut it and add the parts」 — it is not uploaded |
| Files per conversation | 20 — documents · drawings · video · audio combined, files already sent count too | 「You can add up to 20 files to one conversation」 — add it in a new conversation |
| Pages read | First 100 pages — each sheet · slide also counts as one page | Pages from 101 on are not read. The AI also knows it read only the first 100 pages |
| Reading time | 10 minutes | The file becomes «Could not read» |
Chip status — files must be read before you can send
Added files appear above the input box as chips (name · size · status).
| What the chip shows | Meaning |
|---|---|
| Uploading | The file is being sent to the server |
| Reading | The server is reading the file. 「Reading files — you can send once they are read」 appears below the input box and Send is locked |
| N pages read · N sheets read · N slides read | Reading finished. You can send |
| 「Could not read this file: reason」 | Reading failed. You can still send it, and the AI answers knowing it could not read that file → Troubleshooting — Files added to chat |
| A sentence about the format · size · count | The upload itself was rejected. This chip is not sent — remove it with ✕ |
- Remove a file with the chip's ✕ (Remove). The file uploaded to the server is deleted too.
- PDF chips have a Drawing button. Pressing it re-reads that PDF as a drawing (title block · dimensions · tolerances · BOM). Pressing it again reads it as a document. Each press re-reads it from the start. If a PDF that is a drawing is read as a document, the dimensions · BOM remain only as scattered text.
- You can also send just files with no text.
Video · audio — read by transcribing
For video · audio files the server transcribes the speech (transcription) and, if the video has an embedded subtitle track, reads that text too, turning it into time-stamped text. For video it also keeps a few scene pictures. The AI picks segments or words from this text and answers — it does not look at the picture; it reads speech and subtitles.
| What the chip shows | Meaning |
|---|---|
| Uploading n% | The file is being sent to the server. Large videos take time |
| Waiting for transcription | Waiting its turn to be transcribed |
| Processing · Processing n/m | Being transcribed. n/m is the number of finished chunks |
| Transcript ready · length | Transcription finished (e.g. 「Transcript ready · 3:05」) |
| No speech or subtitles found | There was neither speech nor subtitles to transcribe. The AI knows this too |
| Could not transcribe: reason · Not accepted: reason | It failed or was not accepted → Troubleshooting — Files added to chat |
How long you wait depends on the file's length and size.
| File | Handling |
|---|---|
| 5 minutes or less · 200MB or less | Transcribed as soon as it is added. Even if you send before it finishes, the question waits up to 20 seconds before answering |
| Up to 60 minutes · 1GB | Transcribed in the background — the chip shows 「Processing n/m」. When it finishes, the chip changes and the notification 「Transcript of “file name” is ready」 appears (even if you left the input box after sending) |
| Longer or larger files | Not accepted — cut them and add the parts |
- You can send while transcription is running — unlike documents, Send is not locked. But if the file has not been transcribed yet, the AI does not guess its content and answers that it is «still transcribing». Ask again after it finishes.
- The chip above the sent question also follows along, 「Processing n/m」 → 「Transcript ready」, until transcription finishes.
- Transcription runs one file at a time, in the order added. If many files (4) are waiting for transcription across the whole installation, new video · audio is rejected with 「Too many files are waiting for transcription right now. Please add it again in a moment」.
- Unlike videos uploaded to document search, it does not wait for the night window — it is transcribed right away, regardless of the processing window.
- Burned-in subtitles and on-screen text are not read. If a video has only pictures and no speech, the AI has nothing to answer from.
Answers come with scenes. When the AI writes a time like [3:12] in its answer, the segment containing that time becomes an evidence card —
for video, a small picture of that scene is attached. Clicking the card plays it in the right panel from that time and stops at the end of the segment.
- If the answer cites no time, or a cited time doesn't match the transcript, a card is attached for each segment the AI actually read from the transcript (up to 6) — the matching segments when it searched by word, or the first segment when it read a range.
- Videos added here have no Create Procedure Draft — it works only for videos uploaded to document search → Creating a Work Procedure from Video
Transcription uses the same transcription service as Video · audio. If the install switch PI_MEDIA_ENABLED is off, the file uploads, but
the chip soon becomes 「Could not transcribe: media transcription is disabled: ASR_URL is not set」. The original still plays, but the AI cannot read the content.
After sending — preview and follow-up questions
The file chips stay above the sent question. Clicking a chip previews it in the right panel.
| File | What the panel shows |
|---|---|
| Document PDF | The original — the browser's PDF viewer. The header has Open in new tab · Download original |
| Others (Office · PDF read as a drawing · DXF · scans), or a browser without a PDF viewer | Text as read by the server — per page · sheet · slide. Above it, 「Text as read by the server — it may differ from the original layout. Download the original to see it」, and below it Previous · Next. The header has Download original |
| A file that could not be read | 「Could not read this file: reason」 and Download original |
| Video · audio | The player and the chip's one-line status, with the Transcript below it (time and text per segment) — the original plays even before transcription finishes. If there is no transcript yet: 「This attachment has no extracted text or transcript」 |
- Added files stay in that conversation. The AI can read the same file again in the next question — unlike photos, which are used for one question only.
- In a conversation with files, the AI decides for itself whether to look at the added files or document search. Ask something like 「the dimensions of this drawing」 and it looks at the added file.
- For the AI to read files, the chat tool permission (
tool:builtin) is needed. All default roles include it → Permissions
- Added files are seen only by the owner of that conversation. Administrators cannot open files added to someone else's conversation either. The same goes for playing video · audio and its scene pictures.
- When you add video · audio, the input box shows 「The original video (faces and voices) is kept in this conversation — deleting the conversation deletes it too」. Who downloaded or played an original, and when, is recorded in the server audit log (playback: one line per file per login; the content is not recorded).
- There is no fixed retention period — they remain as long as the conversation does. Deleting the conversation deletes the added files (original · read text · transcript · scene pictures) too. If transcription was in progress, it stops too.
- Added files do not go into company document search (RAG). They are not used in other people's answers or answers in other conversations. Documents everyone should be able to find are uploaded to document search by an administrator → RAG — Not the same as files added to a conversation
Asking by voice — the microphone button
Press Ask by voice once to start, press again (Stop recording) to stop. The limit is 60 seconds, after which it stops by itself. While recording, 「Listening」, a level meter, and elapsed time replace the input box, and ✕ (Cancel) discards it. After stopping, it passes through 「Transcribing」 and the spoken text goes into the input box — review, edit, and send. Audio is not stored.
- Available only on installations with video and audio enabled (install switch
PI_MEDIA_ENABLED). If it is off, speech cannot be transcribed and 「Voice input is unavailable right now」 appears — ask in text. - The microphone only opens on HTTPS addresses.
- The messages that appear and what to do about them are in Asking with video and audio — the microphone button.
Reading the answer
Answer shape — the conclusion comes first
Answers come as structured text, not one-liners.
- The first line is the conclusion in bold. One to three lines of supporting detail follow.
- Two or more items are listed as a table (ID, value, unit, state, timestamp, and so on).
- If the content splits into two or more threads, short subheadings divide it.
- IDs of sites, lines, equipment, tags, and so on that appear in the answer are displayed as 「Name (description)」 — e.g.
ASSET_DJ_M_01_1→M_01_1_JUICE_PET_INJECTOR(주스 PET 주입기). While the answer is streaming, IDs are visible; when it finishes they switch to names. IDs for which the Platform has no name stay as they are. - Status code words mixed into the answer (such as
HIGH·WARN·RUN·NO_GO) are shown as Korean labels. Words inside equipment numbers and inside code blocks are left alone. - Ask in English and you get an answer in English.
- Questions about tolerances, dimensions, specifications, materials, heat treatment, or Ø always go through document and drawing search before the AI answers. If the drawing's dimension table has upper and lower limits for that dimension, the answer starts with those values. If the limits were derived from an ISO formula, the answer ends with 「※ The «formula-estimated» upper/lower limits are estimates derived from ISO fit formulas — verify pass/fail against your copy of the standard (ISO 286 / KS B 0401).」 → Ask about drawings
Within the body, things are rendered like this.
| Element in the body | On screen |
|---|---|
| Lists · subheadings | Markdown as written |
| Tables | Drawn inside a rounded box. A table wider than the screen scrolls horizontally within that box only (the whole page does not shift). IDs such as work order numbers, drawing numbers, and dates, and short cells, do not wrap mid-value |
| Status indicators | Status emoji the AI wrote, such as 🔴 · ⚠️ · ✅, are shown as status dots — red (urgent/critical), orange (caution), green (normal), gray. Color is used on screen only for these dots |
| Formulas | Rendered as math. If they cannot be rendered, the text stays as written |
| Code | Syntax-colored, with a Copy code button in the corner — pressing it shows 「Copied」 |
| Diagrams (process flow, state transitions, etc.) | Rendered as a picture once the answer finishes. If it cannot be rendered, 「Could not render the diagram」 |
| Charts written by the AI | Rendered as a picture once the answer finishes. If it cannot be rendered, 「Could not render the chart」 |
Citation numbers such as [1] | Pressable number buttons — see Evidence cards below |
Copy answer at the bottom copies the answer exactly as it appears on screen — markdown markers (** · | · #) are dropped, and table cells are separated by tabs so they paste straight into Excel. The number beside it is how long the answer took (seconds).
Regenerate exists only on the finished last answer. It generates a new answer to the same question and swaps it in for the previous one. The previous answer is deleted only after the new one is saved, so if the new generation fails or is stopped partway, the previous answer remains. The button is hidden while an answer is streaming.
While you wait — thinking messages and the tool line
From sending until the answer text appears, the current stage is shown along with elapsed time. The stage follows what the server is actually doing right now, not how much time has passed.
| Message | When |
|---|---|
| 「Thinking」 | Right after sending — while the AI decides what to query |
| 「Running tools」 | While tools are running |
| 「Composing the answer」 | After the tools finish, before the answer text appears |
| 「This is taking a while, but it is progressing normally」 | After 2 minutes |
| 「The response is delayed」 | When the signal from the server has been silent for more than 5 seconds — the text also stops pulsing |
🔴 For answers that use tools, text streams only after the tools finish. Text the AI wrote before calling tools is a draft and is not shown on screen — until then you see only the stage messages above. Answers that finish without tools may appear all at once instead of streaming. If the AI calls another tool after text has been streaming, that text is cleared and the stage message returns.
When the AI calls a tool, a tool line appears above the answer. While running it is expanded as 「Running tools」; when it finishes it collapses to a single line, 「N tools used · N s」. Tap it to see, in call order, each tool's name (human-readable), elapsed time, and record count received (「N records」). A green dot means success, red means failure.
- The raw results returned by the tools (machine-readable text) are not shown in this line. For administrators only, 「Raw tool result (admin)」 is attached collapsed to each row and must be expanded.
Tool arguments whose names contain key · token · secret · password · passwd · credential are recorded with their values masked. The actual values are still used in the tool call itself.
Today's jobs · customer PO tables — the server attaches the tables
On installations with the digital thread connected, asking about today's work — e.g. 「What jobs do we have today?」 — makes the AI call the digital thread's today's job list tool, and the server appends a table built from the tool result at the end of the answer. The AI does not transcribe the numbers — if the AI already wrote a table with the same content, that table is removed and this one kept.
| Table | Title · columns | Rows |
|---|---|---|
| Today's jobs | 「Today's jobs date · N operations」 — work order · operation · readiness · blocking reason · customer PO plan float · drawing | Up to 12 rows, sorted by least customer PO float |
| Affected customer POs | Customer PO · customer · due date · float days · risk | Up to 10 rows — when customer orders are included in the recovery plan or job readiness result |
- The answer to 「What jobs do we have today?」 gets only one table. If the AI wrote the same content as a separate table, it is removed and this server-built table is kept.
- The Blocking reason cell is the first readiness reason rendered as a Korean sentence (e.g. when the new-revision part arrives following an engineering change). If nothing is blocking, it is 「—」.
- The Customer PO plan float cell reads 「Customer PO · N days · risk」. It is based on the work order's planned finish, so part delays are not included, and rows linked only through the project show 「≤N days」 (an upper bound). Below the table: 「Float is based on the work order planned finish (part delays not reflected; ≤ is an upper bound that does not count downstream operations). For delay-adjusted float, ask the recovery calculation.」
- Float days in the Affected customer POs table carry their basis — values from the recovery calculation read 「N (delay-adjusted)」, plan-based values read 「N (plan basis)」 (or 「≤N (plan basis)」 for an upper bound). The two values can differ for the same customer PO.
- Cells that could not be read are left as «Unknown». There is one footer under the table — 「and N more」 if the row limit is exceeded, or, if the digital thread truncated the result, 「Showing N of M rows — for the rest, ask again naming a work order number or operation」 (M is the total, N is the rows shown).
- Numbers in the drawing cell (e.g.
[3]) link to the drawing evidence cards below the answer — press one to open that drawing. - The meaning of float days and risk is in Digital thread — Customer POs and today's jobs.
Charts — the server copies the numbers from the tool result
When you query values that change over time — tag history, alarm intervals, equipment KPIs (OEE), edge status history — a chart card is attached below the answer. The numbers in the chart are not written by the AI; the server copies them straight from the tool result.
- The source line under the card — 「Data: tool · period · N records」. The period is not the period you asked about but the first and last timestamps of the data actually plotted (plant time zone, e.g. 「Oct 12 10:27 ~ 10:44」 — the date appears once if both fall on the same day). Queries with no known period read 「Data: tool」.
- If the tool truncated the data so that only part of the requested period was plotted, 「N records (partial — not the entire period you asked about)」 is appended after the count. In that case the picture does not cover the full period you asked about — narrow the period and ask again.
- Alarm lists (counts by priority) are charted only when you ask about a «trend» or a «chart».
- Reopening a past conversation redraws the charts exactly as before.
Evidence cards and citations — [numbers] in the body lead to cards
Cards are attached under the Evidence group below the answer. Whatever the type, the card layout is the same — number · type icon (or thumbnail) · title · one supporting line. Six are shown at a time; if there are more, 「Show more evidence (+N)」 expands them.
| Card type | Title · supporting line | When pressed |
|---|---|---|
| Document | 「Equipment name · document name」 (for directly uploaded documents, 「Common document · document name」) / if the passage came from a drawing document, its zone (「Parts list」 · 「Title block」 · 「Notes」 · 「Revision block」 · 「Dimensions」), and for PDFs with known pages 「p. 12」 · 「pp. 12–13」. Below that, two lines of the cited passage the answer relied on | Opens the source document in the right panel → see Right panel below |
| Drawing | 「Drawing number rev」 / page · zone · part number · 「N files」. A thumbnail of that page and a revision badge (latest revision · older revision · change in progress · revision unverifiable) | Opens a preview of that page in the right panel. The small button at the card's right edge is Open in viewer (new tab) → Ask about drawings |
| Video · audio | File name / time of the matching scene · the text for that segment. If a scene image is stored, that scene, plus a marker of where the text came from (subtitle · screen · audio) | Plays that segment in the right panel → Asking with video and audio |
| Time series | Equipment or tag / tool · period | (does not open) |
| Digital thread | Target / tool | (does not open) |
- Cards that open have an open indicator at their right edge. Even a document card will not open if the source did not carry which document of which equipment it is.
- Evidence is attached only for tool results the answer actually used. Search results the AI queried but did not use in the answer are omitted from the evidence (the tool line still shows «what was called»). This is why cards visible while the answer streams can disappear once it finishes. Multiple passages from the same document are merged into a single card.
- Pressing a number in the body scrolls to that card and highlights it briefly. If the card group was collapsed, it expands first.
- If the body cited only some of the cards, the uncited cards are dimmed. Their numbers stay the same.
- If the server drew a chart or table from tool results and cards remain but the body never attached a single number, 「This answer did not cite its evidence」 appears under the group — check for yourself which sentence rests on which evidence.
- If the body cited a number that has no card, 「Cited a number that is not in the evidence」 appears — the sentence carrying that number is one whose evidence cannot be verified.
- Numbers are assigned by code, and citation coverage is measured by code. The AI's answer itself is not edited.
- Which video segments become cards is decided by document search. Video · audio cards picked by document search stay even if the body does not cite their number → Asking with video and audio
Right panel — documents, drawings, video
Pressing a document, drawing, video, or audio card opens it in the same right panel while keeping the conversation. Pressing another card replaces the panel content.
| Card | What the panel shows |
|---|---|
| Document | The source document — PDFs open inside the panel in the browser's PDF viewer. The header title is the document name, with a single line below showing which equipment's document it is. The header has Open in new tab · Download original |
| Drawing | The drawing image for that page — a highlight box at the location the answer pointed to, the revision badge and a one-line reason, page navigation, and zoom. The header has Open in viewer (new tab) |
| Video · audio | A player — it starts automatically at the time of the matching scene shown on the card and stops at the end of the segment. Below it, 「Segment 0:42 ~ 1:15」 and Replay segment (from the start of the segment), plus the text for that segment |
| Added file | Opens when you click a file chip above a sent question — the original for document PDFs, text as read by the server for others → Adding files — After sending |
| Video | Additionally Draft a procedure → Creating work procedures from video |
The source document opens like this.
- When document search has confirmed the passage and page the answer relied on, 「Cited passage」 and its text (up to four lines) appear at the top of the panel and the PDF opens at that page. Unconfirmed sources open at page 1 with no passage — such sources are not rare.
- A cited passage is either a sentence from the source or one row of a table. For a table row, it appears as a single line of text with the cells joined by « · » (it is not drawn as a table, and column names are not included).
- Documents with no known page open at page 1 — this applies to non-PDF documents, PDFs whose text cannot be read (such as scans), and documents whose page information has not been built yet. The page is also omitted when it is not certain. In that case, find the passage using the PDF viewer's search based on the cited passage.
- The cited passage is shown even when the original cannot be rendered on screen (non-PDF formats, controlled classification, browsers without a PDF viewer).
- Open in new tab opens the same source in a new browser tab at the same page (shown only when the PDF can be rendered). Download original downloads the original file.
- Permissions and access classification are re-checked by the server every time you open it.
| Message in the panel | Meaning |
|---|---|
| 「This format cannot be viewed here. Download the original to open it」 | A non-PDF document (Word, Excel, text file, etc.). Get it with Download original below |
| 「This browser has no PDF viewer. Download the original to open it」 | A browser, such as a phone browser, that cannot render PDFs inline |
| 「This is a controlled document. The original cannot be opened or downloaded」 | Controlled classification never releases the original to anyone. There are no open or download buttons |
| 「You do not have permission to view this document」 | The document is outside your scope or above your access level → Permissions |
| 「The source document could not be found. The original is not archived or the document was deleted」 | The index remains but the original is gone. Notify an administrator |
| 「Could not retrieve the source document. Try again shortly」 | The document server could not be reached — Retry |
- When a video stops at the end of a segment, 「Stopped at the end of the segment」 appears. Pressing play yourself after that continues past the segment.
- Close with the Close panel button or Esc. Drag the left edge or use the ← → keys to change the width (up to 70% of the screen; the browser remembers it). On narrow screens it opens over the body, and on phones it covers the whole screen.
- After clicking inside the PDF, Esc no longer works — close with the highlighted Close panel button → Copilot screen map — Right panel
Follow-up questions
Up to three follow-up questions are attached at the end of the last answer. They are built from the equipment, tags, orders, and engineering changes queried in this answer (e.g. 「Show me the last 24 hours of (tag)」, 「Is (engineering change) blocking other jobs too?」). Pressing one sends that question immediately. They are attached only to the last answer and are not saved — reopening a past conversation will not show them.
When the answer is interrupted or stopped
| Message shown | Meaning |
|---|---|
| 「The connection dropped. The server is finishing the answer and it will be loaded here as soon as it is done」 | Only the browser connection dropped. The screen retrieves the answer every 5 seconds for up to 5 minutes — no need to ask again |
| 「Your internet connection dropped. You can send again once reconnected」 | The device is offline |
| 「Could not connect to the server. Check the network and try again」 | The server could not be reached |
| 「The AI answer is empty. Try again.」 | The connection ended but no text was received |
| 「No answer was received」 | The server returned an error with no reason, or the connection ended without an answer |
| 「Stopped before any answer appeared」 | Stop response was pressed before any text appeared |
| 「The model could not finish writing an answer, so the query results are presented as they are.」 | The model could not produce a usable answer, so the server lays out the tool results it retrieved as items and tables. These are not sentences written by the AI |
| 「Could not generate an answer. The model returned an empty response …」 | The model returned an empty answer. Ask again, and if it repeats, rephrase the question slightly |
| 「⚠ Generation was stopped because the same content kept repeating …」 | The model repeated itself and the server cut it off. Use only what appears above, and narrow your question before asking again |
| 「⚠ The model repeated itself while writing the answer, so the document search results are shown as they are. Check the originals in the source cards.」 | The model fell into repetition and did so again on one retry. Instead of the AI's answer, the document search results retrieved this time are shown with evidence cards |
| 「Document search is unavailable right now (the MCP gateway is not responding). Manual, drawing and procedure questions need the registered documents, so this one is not answered — please ask again shortly.」 | You asked about a manual · drawing · procedure · maintenance, but the MCP Gateway is not responding. Document search goes only through the gateway, so instead of making up an answer without evidence, it is blocked. Ask again shortly, and if it continues, tell an administrator → Troubleshooting |
| 「Document search is turned off or not allowed for this account. Manual, drawing and procedure questions need the registered documents, so this one is not answered — please contact your administrator.」 | The gateway responds, but document search (rag_search) is off or outside your permissions. An administrator has to turn it on → Troubleshooting |
| 「The tool gateway is unreachable — this answer was made without tools (document search, asset lookups).」 at the start of an answer | The gateway could not be reached, so that answer was made without using any tools. Do not trust its numbers · equipment status; ask again shortly |
| 「Could not load the conversation」 | Opening the past conversation failed — Retry |
| 「This conversation could not be found」 — 「It was deleted or the URL is wrong.」 | The URL points to a nonexistent conversation — start fresh with New conversation below it |
| 「You do not have permission to view this conversation」 | It is someone else's conversation |
| 「Could not rename」 | Saving the conversation name failed. Rename it again |
| 「You do not have permission to open this screen」 | Your role does not include Ask permission. Request it from an administrator → Permissions |
- The last answer that errored gets a Retry button.
- If you try to close or reload the window while an answer is streaming, the browser asks once. Even if you navigate to another menu or the connection drops, the server finishes and saves the answer, so reopening that conversation will show it. To make it stop generating, press Stop response.
Action cards — approval creates one «draft» in another system
When a tool result the AI called proposes a draft to be entered into another system, an Available actions card is attached below the answer. There are two kinds.
| Card | When it appears | Where the draft goes | Who can approve | Approvals needed |
|---|---|---|---|---|
| Material expedite request | When you ask about due-date or milestone delays, or «what if a part is N days late», and the recovery calculation proposes expediting a supplier | SCM | Plant manager · Administrator | Two people — it goes out to the supplier and is hard to undo |
| Maintenance request | When you ask about AI findings, such as 「Is any equipment having trouble right now?」, and the answer contains an open failure-risk finding | MES | Team leader · Maintenance · Plant manager · Administrator | One person |
🔴 The person who asked cannot approve their own card (two-person approval). The card shows a one-line notice instead of an approval field, and someone else with approval rights enters a reason and approves or rejects it under Pending approval in Proposals.
The body of an answer carrying a card does not write out the request text itself; it simply states 「You can approve the draft in the card below」. For «what if a part is N days late» questions, the recovery calculation is called before document search, and the card's Impact field records both the assumption in the question (part, number of days) and the current delay.

| No. | Location | What it does |
|---|---|---|
| ① | Card header | Available actions and 「Risk: low — draft only」 |
| ② | Title | What it is — e.g. 「Expedite request draft for PO-G2001 line 10 — needed by 2026-10-15」 |
| ③ | Stages | Proposed → Approved → Draft created. The current stage is shown in bold |
| ④ | Body | Impact (assumption → milestone delay → customer order line · contract due date · float) · Target system · Approvals required. After approval, who approved, when, and with what reason are added |
| ⑤ | Collapsible | Payload — the values to be passed to the target system, as they are |
| ⑥ | Notice line | 「The author cannot approve — another person with Administrator or Plant manager rights approves it under Pending approval in Proposals.」 |
| ⑦ | Under the card | 「Only a «draft» is created in the source system. It does not control equipment and does not write a committed record — a person commits it in that system.」 |
For users who can approve, position ⑥ holds an Approval reason (required) field (up to 500 characters) and the Approve and execute · Reject buttons. Pressing Approve and execute shows 「Approve this action?」, which restates what is being sent, where, and with what reason, and it goes out only after you confirm.
- For high-impact actions such as material expediting, after the first approval it reads 「First approval: «name» — waiting for a second approval from another approver (high-impact action).」, and a person other than the first approver must give the second approval before it is sent (「The second approval must come from someone other than the first approver.」). Which actions require two approvals is set by
access.two_person.tools(expediting only, by default). - Once the final approval is given, one draft is created in the target system and its number stays on the card — 「Draft created: number (status) — check it and submit it in that system.」 A person commits it inside that system. It does not control equipment.
- Who can approve is determined by role groups (see the table above). Users without the right see 「Only … can approve this action.」 instead of the buttons. The administrator defines the roles → User permissions and work roles
- Pressing the same card twice still creates only one draft. On failure, 「Could not create the draft:」 with the reason and Send again appear. A Reject is likewise recorded as 「Rejected」.
- Within one conversation there is one card per target — one card per equipment for maintenance requests. The previous card must be rejected before another appears.
- The equipment and priority on a maintenance request card are determined by the same rules as the cards in Proposals. If the same finding was already approved in Proposals, no card appears in chat.
- Reopening a past conversation re-attaches the card under that answer in its current state.
The recovery plan tool (thread_explain_recovery) and the finding tool (insight_list_findings) are enabled by default (if an administrator turns them off in AI Admin Console › MCP Gateway › Tools, they stay off → MCP Gateway). If there is still no card —
- The digital thread does not have a connector enabled to receive that draft. Expediting needs the SCM connector; maintenance requests need the MES connector to expose the maintenance request tool.
- Expediting: the answer has no purchase order line or needed-by date.
- Maintenance request: the failure-risk finding is not in an open state (it is acknowledged, closed, or awaiting verification), it was already approved in Proposals, or a card for the same equipment already exists in this conversation.
Among the tools the AI calls, those that change state (for example alarm acknowledgment ack_alarm) are not executed from chat. They are recorded as failed in the tool line, and the AI explains that it cannot run them directly in chat and directs you to the action buttons on the incident. The actual action is taken by a person on the incident detail in Proposals → MCP
Key features
Natural-language plant data queries
- Ask in natural Korean → the AI automatically selects the appropriate MCP server and tools
- Intuitive dialogue such as "What's the injector temperature?" or "Show me the Daejeon plant structure"
- Equipment name (Korean) → system ID conversion, automatically
SSE real-time streaming responses
- Real-time streaming responses based on Server-Sent Events
- Watch the AI's analysis progress live in the tool line
- Charts and diagrams render along with the answer
Rich visualization
| Visualization type | Supported charts |
|---|---|
| Server charts | Tag history · alarm intervals · OEE · edge status history — the numbers from the tool result, as they are |
| ECharts | Trends, gauges, bars, and so on drawn by the AI when there is no server chart |
| Mermaid | Process flow diagrams, state transitions, root-cause diagnosis trees |
| Markdown | Sensor data tables, equipment lists, alarm history |
Built-in agent tool routing
- The LLM analyzes the intent of the user's question and selects the optimal tools automatically
- For compound questions, an agent loop calls multiple tools in sequence (tool-calling)
- Tools: every tool behind the MCP Gateway — the Platform integration MCP + in-house MCP servers (time series insight, RAG, document understanding, vision, engineering calculation, and the digital thread if connected).
There are no built-in chat tools that the copilot gives the model separately — document search
rag_searchalso calls RAG through the gateway, and is always loaded regardless of tool search - So if the gateway does not respond, that turn goes without tools. Manual · drawing · procedure questions are then not answered and are blocked with 「Document search is unavailable right now …」 (see When the answer is interrupted or stopped above)
Screen layout
| Screen | Description |
|---|---|
Ask (/chat) | The landing screen (greeting, input box, today's tasks, question chips) and the conversation — charts, evidence cards, and action cards are rendered within the answer |
| Recent conversations (sidebar) | Search by conversation title and continue asking |
| Right panel | Opens the source document, drawing, video, or audio of an evidence card beside the conversation |
Drawing viewer (/viewer/drawing, new tab) | View drawings large, turn pages, compare revisions, and select an area to ask about → Ask about drawings |
Admin console (/admin) | Users · role groups · LLM settings · API keys · prompts (tool on/off is in AI Admin Console › MCP Gateway) → Copilot admin console |
The timestamps shown on screen and the boundary of 「today」 follow the PP_TZ set at installation, not the browser's time zone. Even when you connect from abroad, times are shown in plant time.
Technology stack
| Component | Technology |
|---|---|
| Backend | Java 21, Spring Boot 3.4, Spring Security 6.x |
| Frontend | React, ECharts, Mermaid |
| AI backend | Built-in agent (AgentOrchestrator + ToolRegistry) → LiteLLM (default aura-lite), SSE streaming |
| Database | PostgreSQL (metadata, chat history), Redis (cache) |
| File storage | RustFS (S3-compatible object storage) |
| Deployment | WAR (servlet container) or embedded Tomcat |
Key settings
Configuration file: src/main/resources/application.properties (values can be overridden with environment variables)
CH_ to CO_All environment variables read by the Copilot container now start with CO_. The old name CH_* is not read, and no warning is issued. If your host env file has values written with CH_ (for example the public API key CH_API_V1_KEY), they will be silently ignored after the upgrade, so move them by hand to the CO_ names → Environment configuration
| Item | Description | Default | Environment variable |
|---|---|---|---|
openai.api.url | LLM (LiteLLM) gateway URL | http://plantpulse-litellm:4000 | CO_OPENAI_API_URL |
openai.model | Chat LLM model | aura-lite | CO_OPENAI_MODEL |
platform.api.url | Platform base URL — for screens · background lookups (chat's integration MCP tools go through the MCP Gateway) | (Platform server-web address) | CO_PLATFORM_API_URL |
platform.api.token | Platform api_key | (set at installation) | CO_PLATFORM_API_TOKEN |
mcp.gateway.url | MCP Gateway address — every model tool chat · automation uses goes here (only the three automation-only record lookups copilot_* stay inside the copilot). If empty, the copilot does not start | (set at installation) | CO_MCP_GATEWAY_URL |
mcp.timeseries.api.url | Time series insight API URL | http://127.0.0.1:8970 | CO_MCP_TIMESERIES_API_URL |
rag.api.url | RAG API URL | http://127.0.0.1:7115 | CO_RAG_API_URL |
rag.api.key · mcp.timeseries.api.key · mcp.parser.api.key · mcp.vision.api.key | Inbound key for the four backends — the same value for all four | (set at installation) | CO_INBOUND_API_KEY |
sse.stream.timeout | SSE streaming timeout | -1 (unlimited) | — |
app.request.limit | Concurrent request limit | 10 | — |
server.servlet.session.timeout | Session timeout | 480m (8 hours) | — |
openai.api.url · openai.model are filled from environment variables only when the DB settings have no value; after that, the DB values are used. To change the model, change it in LLM settings in the admin console (/admin/llm), not in environment variables → Copilot admin console
A single chat call reaches the tools of several backends — the Platform for real-time data, time series insight for AI analysis, RAG for document search,
and document understanding and vision for document parsing and photo reading. Chat's tool calls all go through the MCP Gateway (mcp.gateway.url) —
the platform.api.url · mcp.timeseries.api.url · rag.api.url above are used by screens (document originals · video playback, etc.) and background lookups.
If the answer says the data cannot be retrieved, check the gateway first, then which backend is down → MCP tool map
mcp.api.*The setting names for the Platform address and token changed from mcp.api.url · mcp.api.token to platform.api.url · platform.api.token (DB setting rows under the old names are migrated automatically at startup). Supplying environment variables under the old names does nothing at all.
The key for the four backends is likewise not CO_RAG_API_KEY but a single CO_INBOUND_API_KEY — RAG, time series, document understanding, and vision all use the same value.
Characteristics
A web interface you can adopt immediately
- No separate client installation — access with a web browser alone
- The same screen is used as-is on phones and tablets
- Authentication/authorization based on Spring Security
UX optimized for the manufacturing floor
- Korean-native — natural understanding of plant terminology and equipment names
- Visualized status indicators (normal/warning/critical)
- Compound analysis results automatically formatted into structured reports
Enterprise-ready
- WAR deployment integrates with existing WAS (Tomcat, WildFly, etc.)
- JDBC-based user authentication — integrates with your existing user DB
- Full on-premises support — no cloud dependency