Skip to main content

AI Admin Console

The AI stack ships with an admin console. Use it to see how busy the GPUs are, whether the LLM has slowed down, and whether document indexing ran correctly — from a browser, without logging in to the server.

This document gives one section per screen. Each section has a screenshot, and the numbers in the image (① ② ③) match the numbers in the table below it. The numbers follow the screen from top to bottom. If this is your first time, take a lap through Take a tour, then look up the section for the screen you need.

Who this is for

Field operators and system administrators. The console is mostly read-only, so it is nearly impossible to break something with a stray click. Screens that change values are flagged with a warning in their section.


Access and login​

The address is one of three. Check with your administrator which one applies.

FormAddressNotes
By IP on the internal network (HTTP)http://<AI_SERVER_IP>:5959PI_ADMIN_WEB_PORT, default 5959
By IP on the internal network (HTTPS)https://<AI_SERVER_IP>:5960PI_ADMIN_WEB_TLS_PORT, default 5960. The proxy (plantpulse-proxy) terminates TLS and forwards to the console
Installation with a domain namehttps://admin.<COMPANY_DOMAIN>Goes through port 443 on the proxy

HTTP and HTTPS are both open. Arriving over HTTP does not redirect you to HTTPS.

If you upgraded from a release earlier than 2026.09

Through 2026.09 the console lived on 9080. As of 2026.10, port 9080 is no longer used — change your bookmarks and firewall rules to 5959 · 5960. The full port list is in the service port map.

On the login screen (/login/), enter your username and password. The default username is admin, and the password is set by the administrator at install time. After logging in you return to the screen you originally tried to open.

There is only one account

The console does not keep per-user accounts. You sign in with a single account shared by the operations team. Keep the password inside the team. Account settings are described in Accounts and sessions.

One login lasts 8 hours

After 8 hours you must log in again. The address of the screen you were viewing is remembered, so you return to that spot after logging in.

Available in Korean

The console comes in two languages: English · 한국어. Switch with the language button on the login screen, or with the Language button at the bottom of the left rail after logging in. Appending ?lang=ko to the address also opens it in Korean. This document puts the Korean screen names in bold with the English names in parentheses.


Screen map​

The vertical strip on the left (the rail) selects a service, and the sidebar to its right shows that service's screens. Home and GPU have no sidebar. At the bottom of the rail are Operations Manual ↗ · Language · Log out.

GPU and LLM sit above the services on purpose. Whatever is slow or dead usually starts in the infrastructure underneath, so scanning from top to bottom finds the problem faster. MCP Gateway comes right after LLM — you see the model and the gateway its tools pass through side by side.

Rail (English UI)Screens in the sidebar
홈 (Home)—
GPU—
LLMDashboard · Chat test · Model registration · API keys · API endpoints · Upstream status · Logs · Settings
MCP 게이트웨이 (MCP Gateway)Overview, Gateway group (Servers · Tools · Permissions · Client API Keys), Tool Search group (Search Test Bench · Search Settings), Monitoring group (Calls & Metrics) + common menu (2026.10 re-release (2026-10-20))
RAG APIDashboard, Index group (Documents · Videos · Sync history · Drawing register), API group (Query test) + common menu
시계열 인사이트 (Timeseries Insight)Dashboard, analysis group (Assets · Production · OEE · RAM · EMS · Alarms · System), AI autonomy · Profiling · Feature store + common menu
문서 파싱 (Document Parsing)Document check, Drawings group (Drawing read test) + common menu
비전 (Vision)Vision check + common menu
디지털 스레드 (Digital Thread)Integration map · Graph mirror + common menu
자동화 샌드박스 (Automation Sandbox)Overview, Execution group (Run History · Run limits) + common menu (no MCP server info)

The common menu is identical across all six of RAG API · Timeseries Insight · Document Parsing · Vision · Digital Thread · MCP Gateway (Automation Sandbox has the same except MCP server info) — MCP server info · API endpoints (MCP group), Logs · API keys (Operations group), and Settings at the end of the list. Learn it once and it is the same in all six. The Common menu section at the end of this document covers them all at once.

Field-work screens are not in this console (2026.10)

Things field personnel look at — job readiness, equipment timelines, revision badges on drawings — live in the copilot (Field › Digital Thread /thread, the timeline on the equipment screen, drawing cards in chat) → Copilot screen map. The Digital Thread rail in this console keeps only the operator screens for wiring up connectors and watching the mirror. Operators look not at the verdict but at «what feeds the verdict» → Readiness sources.

The manual link does not open on an air-gapped network

Operations Manual in the rail goes out to an external site (docs.kopens.io). It will not open at a field site with no internet. A copy of the manual is installed on the server — ask your administrator.

Narrow screens — the menu collapses into a drawer​

Narrow screen — left: drawer closed, right: drawer open (two scenes in one image). Numbers follow reading order

When the window is narrower than 1024px, the rail and sidebar disappear from the left edge and a bar appears across the top.

No.LocationWhat it does
①☰ at the left of the top barOpen menu — the rail and sidebar open as a drawer
②Top barLogo and product name
③Drawer (right-hand scene)The same menu as the rail · sidebar on a wide screen. When open it covers ① · ② in the top bar
④Dim overlay outside the drawerTap to close the drawer

The drawer closes on any of: Esc, tapping outside, tapping a menu item, navigating to another screen, or widening the window past 1024px.


Take a tour​

If this is your first time, take a lap in this order. You only look — nothing changes.

  1. Home — if Down in the System Status row is 0, you can relax for now.
  2. GPU — check that XID errors is 0.
  3. LLM → Dashboard — check that P95 per model is close to normal.
  4. RAG API → Documents — just confirm that indexed documents exist.
  5. Logs in the same sidebar — recent log lines, newest first. No need to SSH in and run docker logs.

See overall status on Home → go into the service that looks wrong → read its logs. That one line covers most of what you do in the console.


Home — /​

Home — look at the down count in the ② status row and the status dots on the ③ cards

An at-a-glance view of the health of the whole AI stack, and the starting point for entering each service screen. Status refreshes automatically every 20 seconds.

No.LocationWhat it does
①Top of screenProduct name and subtitle — a header you can customize per installation
②System StatusCounts every monitored service as Total · Healthy · Warning · Down. The dot in the header is the overall verdict, with the last refresh time and a refresh button beside it. Expanding Details shows per-service status and response times
③Service cardsOne card per service. Grouped as Service APIs · Model serving · Storage · gateway · tracing, so that during an incident you can work down from «the caller → the server → storage and observability»

Read a card like this:

  • The status dot on the right appears only on monitored services.
  • Cards with an arrow can be opened. RAG API · Timeseries Insight · Vision · Document Understanding · Digital Thread open screens inside the console; LLM proxy · Graph DB open that tool's own UI in a new window.
  • Cards without an arrow are status-only. They are internal services the browser cannot reach directly.
  • The second line of a card describes what that service does in two lines or less. For example, RAG API is "Indexes and searches asset documents (PDF · Office), drawings (DXF · PDF), video, and audio," and the time series inference model server is "TSPulse anomaly detection · TTM forecasting model server."

Common tasks​

  1. Expand Details. Once expanded, it stays expanded the next time you come in.
  2. Hover over the status indicator of a service in Warning (yellow). The tooltip also shows the raw status the service itself reported — for example, the service is alive but its database connection is down.
  3. Go into that service and read its Logs.
The first few seconds are gray

While no status has arrived yet the dot is gray (not measured). Gray means "not known yet," not "healthy."


GPU — /gpu/​

GPU — look at XID errors in the ② summary row and the SM · temperature columns in the ③ device table

Shows utilization, temperature, and errors for GPU devices. Values are re-collected every 5 seconds.

No.LocationWhat it does
①Top of screenScreen name and last collection time — check here that values are not frozen
②Summary rowDevices · Unified memory · Host CPU · XID errors — in one line, how full the machine is right now and whether any hardware errors occurred
③Devices tableOne row per GPU. Compare SM (utilization) · memory bandwidth · temperature · memory temperature · power · SM clock · encode / decode · XID down the column to find the GPU that stands out
④TrendA 60-minute chart — tells a momentary spike from a sustained high
Do not wave off a non-zero XID

XID is an error raised by the NVIDIA hardware or driver. A non-zero value puts a red marker on that row. If you let it pass quietly, the next symptom is usually a server crash. Copy the value verbatim and report it to your system administrator.


LLM dashboard — /llm/​

LLM dashboard — look at worst P95 in ② and the P95 column in the ③ model table

Shows response speed and throughput of the model serving engines. Values are collected every 5 seconds.

No.LocationWhat it does
①Top of screenScreen name and last collection time
②Summary rowModels · Running · Queue · Worst P95 — in one line, whether the engine is backing up. The warning threshold is shown next to worst P95
③Models tableOne row per model. Use status · running · queue · throughput · P50 · P95 · P99 · 1-min interruptions · KV cache · 30-min TPS to find which model is slow. A dash (—) means no samples yet
④TrendA 60-minute chart (1-minute buckets) for one model — find when it slowed down

When someone says "answers have been slow lately," look at the P95 column (the 5th slowest out of 100). If it is well above normal, their impression is correct.


Chat test — /llm/playground/​

Chat test — pick a model in the ② prompt card and send one request

Sends a single prompt through the model gateway (LiteLLM). It is the same path the applications use, so it tells "the model is alive but only the app is broken" apart.

No.LocationWhat it does
①Top of screenScreen name and the number of models reported by the gateway
②Prompt cardPick a model with the model buttons, fill in System prompt (optional) · Max tokens · the prompt, and press Send (Ctrl+Enter). Below you get the answer, elapsed time, and input/output tokens
The server caps max tokens at 2048

Whatever you enter, the server caps it at 2048 tokens. The answer arrives all at once (streaming is intentionally disabled). The model «thinks» before answering, so with a small budget it may run out before any answer text appears — the screen tells you when that happens. The same GPU also serves the copilot, so long answers take time.


Model registration — /llm/models/​

Model registration — register in the ③ Add a model card and check Source in the ④ table

Registers external model endpoints with the gateway. Internal or commercial, anything OpenAI-compatible works.

No.LocationWhat it does
①Top of screenScreen name and refresh
②Summary rowServing · Config file · Registered here — counts the models the gateway routes to, by source. Only the ones «registered here» can be edited from this screen
③모델 추가 (Add a model)Registers a new endpoint — fill in Model name · Provider path · Endpoint · Provider API key · API version · Type, run Test connection, then Register
④Serving modelsThe models currently being served — only rows whose Source is «this console» can be deleted

Common tasks​

  1. Enter the model name (the name callers will pass as model), the provider path (LiteLLM format, e.g. openai/gpt-4o), and the endpoint. If the endpoint needs a key, enter the provider API key. API version is used only with Azure OpenAI.
  2. Pick the right type (chat · completion · embedding · rerank). Pick it wrong and a perfectly good endpoint will look broken.
  3. Confirm a response with Test connection, then Register.
This screen changes values
  • Default models whose source is the config file (litellm-config.yaml) cannot be edited here — that file is the source of truth.
  • Deleting one makes everything calling that name start failing immediately.
  • Registration, testing, and deletion are recorded in the audit log (provider keys are not recorded; only fingerprints are).
Registered provider keys are encrypted with a salt

Provider API keys entered here are stored encrypted with PI_LITELLM_SALT_KEY. Change the salt and the registered models stay visible in the list while calls fail silently → Changing passwords and API keys


LLM API keys — /llm/api-keys/​

Issues, rotates, and deletes virtual keys to hand out to applications. It shares a name with API keys in the common menu but does something different — that one measures «whether our key works», this one mints «keys to give to others».

LocationWhat it does
Summary rowKeys · Spend · Blocked — how much the issued keys have been used and whether any are blocked
키 발급 (Issue a key)Set Name · Max budget (USD) · Expires in (e.g. 30d, 24h, 1mo) and press Issue. Leave blank for no limit
Issued keys tablePer key: hash · models · spend / budget · status · expiry, with Rotate · Delete at the end of the row
An issued key is shown only once

Neither the console nor the gateway stores the plaintext. If you did not copy it right after issuing, you must rotate it. Rotating or deleting stops the current value from working immediately. Issue, rotate, and delete are recorded in the audit log (the key value is not).

LLM also has API endpoints (/llm/api-endpoints/). It lists the gateway's full API surface and looks the same as the one in the common menu.


Upstream status — /llm/operations/​

Upstream status — press ① Run check and find unhealthy models in the ③ table

Probes whether the models behind the gateway actually answer. One check is one real call.

No.LocationWhat it does
①Top of screenScreen name and Run check — only when pressed does it actually call every model once
②Summary rowHealthy · Unhealthy counts — see at a glance whether any model is not answering
③Endpoints tableStatus and Details per model — the gateway's values are shown unmodified, so you can read the failure reason as-is

LLM logs — /llm/logs/​

One line per request that passed through the gateway. Different from Logs in the common menu (service log files).

LocationWhat it does
Top of screenStart · End → Apply — choose the window to view
TableTime · model · type · tokens · latency · cost · request id — find which request was slow or expensive

Prompt and answer bodies are not here — they are in the Phoenix traces.


LLM settings — /llm/config/​

LLM settings — ② the gateway key shows only a fingerprint; ④ lists the models the gateway knows

Shows how the console reaches the LLM stack and what the gateway reports. Read-only.

No.LocationWhat it does
①Top of screenScreen name and refresh
②게이트웨이 (Gateway)The gateway address and key the console uses. Only a fingerprint is shown; the plaintext is fetched only when you press the eye icon, and that request is recorded in the audit log with the username
③지표 수집 대상 (Metric poll targets)The engines the LLM dashboard scrapes directly — if the dashboard is empty, check here whether a target is missing
④게이트웨이가 아는 모델 (Models the gateway knows)The model list exactly as reported by the gateway — the console keeps no list of its own
Give applications a virtual key, not the master key

The gateway master key is held by the console server and never sent to the browser. Hand applications a virtual key issued on the LLM API keys screen — you can attach a budget, an expiry, and revoke it separately.


RAG dashboard — /rag/​

RAG dashboard — look at the ② failure count and the scheduler&#39;s last run in ③

Shows the indexing status of the service (RAG API) that lets the chatbot answer from internal documents.

No.LocationWhat it does
①색인 운영 (Indexing Operations)Screen name, last refresh time, refresh
②Summary rowTotal documents · Indexed · Pending · Failed — counts how many documents in the platform ledger made it through indexing
③SchedulerNext run · Last run and a summary of that run — check that synchronization is running on time

Below that come the backend reachability table (whether LightRAG · PostgreSQL · graph DB · vector DB · platform are reachable) and index status by asset. If Failed is non-zero or anything is Unreachable, read that service's Logs.


Documents — /rag/documents/​

Documents — look at the ① header buttons and the Status column in the ③ document table

Shows indexed documents and lets you upload or re-index documents. When someone reports "the chatbot can't find a document," start here.

No.LocationWhat it does
①Top of screenUpload (opens the upload dialog) · Refresh · Sync now (immediately re-fetches platform documents) · Reindex all
②Summary rowDocuments · Indexed · Pending · Failed — whether any document has not finished indexing or has failed
③Document tableAsset · Document · Status · Indexed at · Actions. Row actions: view details, re-index, download original, test search with this document, exclude from / re-include in the corpus, delete (uploaded documents only)

Common task — when the chatbot cannot find a document​

  1. Check whether the document is in the table — if not, it was never indexed.
  2. If it is, use Test search with this document at the end of the row, or the Query test screen, with wording similar to what the user asked.
  3. Check in Sync history that the last sync did not end in failure.

While indexing is running, status refreshes automatically every second, so you do not need to refresh.

If drawing indexing (DRAWING_INGEST_ENABLED) is on, drawing rows also show the drawing number · revision · part number and a revision badge (Latest · Superseded (latest …) · Change in progress · Unverified) under the document name. To view drawings grouped by revision, open the drawing register.

  • PDF drawings whose drawing number could not be read from the title block still appear as drawing rows — with "Drawing · could not read drawing number from title block" under the name. The marking keeps them from looking like ordinary documents.
  • Exclude from search on a drawing row depends on how the drawing arrived.
    • Drawings from the platform ledger (source PLATFORM) have the Exclude from / re-include in corpus button enabled, like ordinary documents. The ledger is the source of truth so they cannot be deleted; use this to take them out of search.
    • Drawings uploaded directly in the console have the button disabled (grayed out). Hovering shows "Manually uploaded drawings cannot be excluded from search — delete or re-index the drawing instead (platform ledger drawings can be excluded)."
    • Re-index and download original work for any drawing; delete works only for ones uploaded directly.
The "no supporting evidence" wording is not fixed

That sentence is generated by the LLM on the spot, so it differs every time. Do not judge by a specific phrase — judge by whether the indexed count is 0.

Deleting a document cannot be undone

Delete is available only for directly uploaded documents (marked Manual). A deleted document can no longer be used as evidence by the chatbot, and putting it back requires uploading the original file again. If you do not have the original file at hand, do not delete it. For documents that came from the platform, use Exclude from corpus instead of deleting.

Reindex all

Reindex all re-indexes «every» platform document. Documents are re-collected incrementally so there is no indexing gap, and directly uploaded documents are unaffected. Still, it takes time — press it only when you need to.

Upload dialog — shared by Documents · Drawing register · Videos​

All three screens open the same dialog. Only the initial values and accepted formats differ by where you open it from.

Opened fromButtonDialog
DocumentsUploadAccepts every format below. PDFs default to document
Drawing registerUpload drawingTitled "Upload drawing"; PDFs default to drawing
VideosUpload videoTitled "Upload video/audio"; accepts video · audio · subtitles only. Dropping a document or drawing is blocked with "Only video, audio, and subtitles are accepted here"
No.LocationWhat it does
①AssetSearch by asset ID or name and pick one. If you pick none it goes to the shared bucket (_manual) and is not tied to an asset
②Drop zone · Accepted formatsDrop multiple files at once or pick them with Choose files. The strip below shows the currently accepted formats and the maximum size per format — disabled formats show Off
③File listPer file, the type (table below) and state (Ready · Blocked · Uploading · Done · Failed). PDF rows have a document / drawing toggle, and All PDFs switches them all at once
④Blocked rowsThe reason it was blocked before sending is written on that row (below)
⑤Upload N filesSends files one at a time, in order — because RAG indexing writes only one at a time
ExtensionType
pdf · docx · pptx · xlsx · md · txtDocument (PDF: choose document / drawing)
dxfDrawing
mp4 · mov · mkv · webmVideo
m4a · mp3 · wavAudio
srt · vttSubtitles

Choosing drawing for a PDF indexes it as a drawing (document_kind=drawing is sent with it). On installations where drawing indexing (DRAWING_INGEST_ENABLED) is off, "Drawing indexing is off … PDFs will be indexed as ordinary documents" appears and PDFs become ordinary documents.

Blocked before sending

CaseReason shown on the row
.dwg"DWG is not accepted — export to DXF or PDF and upload that."
Video or audio while media ingestion is off"Video/audio ingestion is off — set PI_MEDIA_ENABLED=true in the install env …"
Subtitles while subtitle ingestion is off"Subtitle ingestion is off (MEDIA_TEXT_TRACKS)."
DXF while drawing indexing is off"Drawing indexing is off (DRAWING_INGEST_ENABLED), so DXF cannot be indexed."
Over the size limit"Too large — … exceeds the limit of ….". The limits are SYNC_MAX_FILE_MB for documents and drawings (bundled value 50 MB), MEDIA_MAX_FILE_MB for video and audio (default 2048 MB), and 5 MB for subtitles
Empty file"The file is empty."
  • The enabled features and limits are not decided by the dialog; they come from the RAG API configuration. If the configuration cannot be read, "Could not read rag-api configuration — the server decides formats and sizes." appears and only .dwg and unknown extensions are blocked.
  • Files uploaded here are marked Manual (directly uploaded) and are never removed by synchronization.
  • Uploading a drawing shows the drawing number · revision · dimensions · BOM row count in the result line; video and audio end with "Queued for transcription and indexing" — transcription starts in the processing window.
  • If the same name is already indexed the other way (drawing / ordinary document), the server rejects it — delete it first or rename the file.

Videos — /rag/videos/​

Videos — one row (a video with a paired subtitle file) expanded. Numbers follow reading order

Shows repair, training, and equipment-operation video and audio file by file — whether it was transcribed, whether scene thumbnails were produced, whether it made it into the search index. When a video is not showing up as evidence in chat, start here. How videos are used in chat is described in Video search.

On installations with media ingestion off

The screen shows only a "Video/audio ingestion is off" box, with no table. PI_MEDIA_ENABLED=true in the install env file is the switch — turn it on and recreate the stack, and RAG API will accept video ingestion and the transcription (ASR) server will come up. Until then RAG API has no media routes and video uploads are rejected → Configuration

No.LocationWhat it does
①Top of screenScreen name and description
②Summary rowFiles · Indexed · Pending/processing · Failed (failed · skipped) · Empty transcript · Missing from search (number of segments indexed but absent from the search index)
③ToolbarSearch file/asset (part of a file name · asset ID · asset name) · Problems only (failed · skipped · empty transcript · has segments missing from search) · Refresh · Upload video (opens the upload dialog restricted to video · audio · subtitles)
④Right of the toolbarProcessing window — when transcription and indexing start (below)
⑤TableFile · Asset · Duration · Status · Transcript (characters · segments) · Scenes (scene thumbnails) · Uploaded at · Actions
⑥Expanded rowExpanding a row reveals a player, the transcript with timestamp chips (tap a chip to play from that moment), the subtitle file paired with the video, and processing info (language · indexed segments · ASR model · updated at, etc.)
⑦Row actionsOnly the buttons that fit the state — in the image, the indexed row has Re-transcribe (↻) and Delete (directly uploaded only); failed and skipped rows have Retry (below)

Processing window. Video transcription occupies the GPU for a long time, so it only starts within a configured window. A row shows one of three:

  • "Processing window … — processing now"
  • "Processing window … — pending files start at …"
  • "No processing window restriction"

The window is set with MEDIA_PROCESSING_WINDOW. If left blank it is 20:00-06:00 (based on the install time zone PP_TZ), and always means it can start at any time. The window applies only to the «start» of processing — work that has started runs to completion even after the window closes → Configuration

Status

StatusMeaning
PendingWaiting for the processing window
Fetching · Transcribing · IndexingIn progress
IndexedUsed in search
No audio · No speechThere is no audio track, or no speech was found — if the video does contain speech, use Re-transcribe
Skipped · FailedCould not be processed — expand to read the reason and press Retry
DeletingDeletion is in progress

Actions

ActionRows where it appearsWhat it does
RetryFailed · SkippedRe-queues it. Starts in the next processing window
Re-transcribeIndexed · No speech · No audioTranscribes again from scratch. The current transcript is discarded, and new segments replace the old ones once indexed
DeleteDirectly uploaded (manual) onlyDeletes segments, transcript, and the archived original. Videos from the platform ledger cannot be deleted here
  • If any row is processing, the screen reloads every 5 seconds. If only Pending rows remain it does not reload (waiting for the window can take hours).
  • Do not let a non-zero Empty transcript slide. If a video with speech has an empty transcript, chat cannot use it as evidence — follow the guidance in the expanded row, check the ASR model, then Re-transcribe (or Retry).
  • As of 2026.10 re-release 4, transcription no longer discards the first sentence that follows silence or noise, and it pulls the timestamp of a retained sentence forward to the actual speech. Videos transcribed before that are not redone automatically, so for videos with a missing first sentence or misaligned source timestamps, use Re-transcribe — they will be transcribed again during the processing window (20:00-06:00 if left blank).
  • Times (uploaded at · next start) are shown in the install time zone (PP_TZ). The m:ss on transcript chips is the position within the video.

Sync history — /rag/sync-history/​

Sync history — look at the Result column on the top row

The history of synchronization runs that fetch asset documents from the platform. It survives restarts.

No.LocationWhat it does
①Top of screenScreen name, number of recorded runs, refresh
②TablePer run: Started · Trigger · Assets · Ledger · Indexed · Disappeared · Cards · Duration · Result — see what came in and what dropped out when, and whether any run failed

If Result on the top row is Error, read the RAG API Logs around that time.


Drawing register — /rag/drawings/​

Drawing register — one row (DWG-HMB-2040 rev D) expanded. Numbers follow reading order

Shows the drawings indexed in RAG (DXF · vector PDF) grouped by drawing number, one row per revision. If a revision has several files (DXF and PDF, platform ledger and direct upload), they collapse into one row. Open it to settle "is the drawing posted in the field the latest revision?" and "was the title block read correctly?"

No.LocationWhat it does
①Top of screenScreen name and description
②Summary rowDrawings · Revisions · Superseded · Unread — how many are superseded and how many failed to read
③Filter rowSearch box (drawing number or part number — also matches part of a document name, case-insensitive) · Superseded only · Read failures only · Refresh · Upload drawing (the upload dialog with PDFs defaulting to «drawing»)
④TableDrawing no. · Revision · Part no. · Revision status · Files · Read · Uploaded at. Within one drawing number, newer revisions are on top. The arrow at the left of a row expands a page preview (with page navigation) and the title block readings
⑤Files columnFormat chips for this revision — a solid chip marks the primary file (the one the chat card and preview open)
⑥Right side of the expanded rowN files in this revision — format · ledger/manual upload · asset · file name, with "(primary — opens this file)" on the primary. The primary is chosen as usable file → DXF original → platform ledger, in that order
⑦Compare columnWhen a drawing number has two or more revisions, the newer row gets a Compare with rev ○ button — comparing against the revision directly below
FieldValuesMeaning
Revision statusLatest · Superseded (latest ○) · Change in progress · UnverifiedThe answer obtained by querying PLM for the released revision and engineering changes by part number. Unverified does not mean «latest», it means «unknown» — there is no PLM connector, or it did not answer → Digital Thread
ReadTitle block read · No title block · Failed (with reason) · ProcessingSpeaks only to whether the drawing number was read from the title block and whether indexing failed. PDF drawings whose drawing number could not be read still appear in the register and are counted as Unread with No title block
Uploaded at—Shown in the install time zone (PP_TZ)

Pressing Compare opens, below that row, a summary · confidence · Could not compare items · a change table (added · removed · changed for title block · dimensions · BOM · notes), and the changed regions overlaid on the newer revision's image. Press again to close.

If drawing indexing is off

A banner reads "Drawing indexing is off in rag-api (DRAWING_INGEST_ENABLED)" at the top of the screen, and page preview · revision status · revision comparison are unavailable. The shipping default is off. How to turn it on is in Configuration.

To see how dimensions and the BOM were read

The Read field in the register speaks only to the title block and indexing failures. Upload the same file to the drawing read test — it uses the same reader RAG uses when indexing drawings.


Query test — /rag/query/​

Query test — pick a ② mode and press Run query

Runs a search against the indexed documents yourself. It honors the same contract as the query API consumers use, so it reproduces exactly what the chatbot receives as evidence.

No.LocationWhat it does
①Top of screenScreen name and description
②Query boxEnter a question, pick a search mode (hybrid · local · global · naive · mix, default hybrid), and press Run query (Ctrl+Enter). Below you get the answer, elapsed time, and sources

If the document you expect does not appear under Sources, change the mode and try again.


Timeseries Insight dashboard — /insight/​

Timeseries Insight dashboard — look at the ② status alert and the pipeline last runs in ④

Shows the status of the engine that finds anomalies in equipment data and forecasts what is coming (Timeseries Insight). It has the most menus of any service.

No.LocationWhat it does
①Top of screenScreen name
②Status alertWhether the service and all its dependencies respond — healthy / unhealthy / server connection error
③Summary rowAnomaly detection · Forecasting · MCP tools · Scheduler — the number of analyses, tools, and scheduled jobs this engine offers
④Pipeline tableLast run time for each feature store pipeline — check that the inputs to the analyses are being produced on time

Below that come a description of the analysis domains and system info (AI models · uptime · scheduler · forecasting models).


Anomaly detection — /insight/anomaly/asset/ and others​

Asset data anomaly detection — fill in the ② parameters and press Run detection

Scores recent data for the target as anomalous and ranks which tags or metrics deviated most from normal. The six screens below share this layout (alarm frequency anomaly is covered under Alarm analysis below).

SidebarPathTarget
Assets › Anomaly detection/insight/anomaly/asset/Sensor tags of one piece of equipment
Production › Anomaly detection/insight/anomaly/order/Recent work orders (the axis is order sequence, not time)
OEE › Anomaly detection/insight/anomaly/oee/Availability · performance · quality, viewed as deltas of cumulative OEE
RAM › Anomaly detection/insight/anomaly/ram/Reliability · availability · maintainability (MTBF/MTTR)
EMS › Anomaly detection/insight/anomaly/ems/Consumption, viewed as deltas of cumulative energy (power · fuel)
System › Anomaly detection/insight/anomaly/system/CPU · memory · disk of the collection host
No.LocationWhat it does
①Top of screenScreen name and the model used
②ParametersSet the asset and the window to analyze (data interval · row limit · threshold · lookback range · recent window · top K) and press Run detection. The results — a summary row, time series + anomaly score, anomaly ranking, response data, and a guidance card — open below

Common tasks​

  1. Pick an asset ID and press Run detection.
  2. Take the top tag in the anomaly ranking and look at its actual values in time series + anomaly score at the moment the score spiked.
  3. Open the Forecast screen for the same asset to see where it is headed.
The score means "different from usual," not "broken"

The score is renormalized to 0–1 «within» the requested window, so even a quiet window produces points near 1. Change the window and the same point gets a different score. Read Easy to misread on the guidance card below the results as well.

OEE · RAM · EMS are in the menu as of 2026.10

In earlier releases these three groups were not in the sidebar and could only be opened by URL. They now appear as groups under Assets · Production.


Forecasting — /insight/forecast/asset/ and others​

Asset data forecast — fill in the ② parameters and press Run forecast

Forecasts the next window for the target and draws the confidence interval as a band. The six screens below share this layout (alarm failure forecast is covered under Alarm analysis below).

SidebarPathTarget
Assets › Forecast/insight/forecast/asset/Sensor tags of one piece of equipment
Production › Quality forecast/insight/forecast/order/Quality · OEE · energy for the next few orders
OEE › Forecast/insight/forecast/oee/Where OEE is trending
RAM › Forecast/insight/forecast/ram/Reliability · availability · maintainability (MTBF/MTTR)
EMS › Forecast/insight/forecast/ems/Energy consumption
System › Forecast/insight/forecast/system/CPU · memory · disk of the collection host
No.LocationWhat it does
①Top of screenScreen name and the model used
②ParametersSet the asset and the horizon (data interval · row limit · context length · forecast length · lookback range · confidence interval) and press Run forecast. The results — a summary row (duration · model · confidence interval · context), forecast result, response data, and a guidance card — open below
If the model comes back as NAIVE

The Model in the summary row must be TTM for it to be a real forecast. NAIVE means TTM failed and a fallback was returned. The forecast length goes up to 96 points; anything larger is rejected rather than truncated.


Health index — /insight/asset/health/​

Asset health index — pick an asset, press Check health index, then read the guidance card

Reports one piece of equipment as a single 0–100 number, together with the deductions that brought the score down.

No.LocationWhat it does
①Top of screenScreen name — notes that the score combines sensors · OEE · RAM · EMS · alarms
②Parameters and guidance cardSet Asset ID · Data interval and press Check health index. The score · scores by domain · response data open below. The guidance card (Details / Collapse) explains how to read the score and which screen to go to next
Results are reused for 60 seconds

Press again within 60 seconds and the previous result is shown instead of a fresh calculation. A domain with no data is not counted as healthy — it is excluded from the score, and if observation is insufficient the grade is withheld as "-".

Only unplanned downtime is deducted

Setup · planned stops · calendar holidays · outside-shift time are not deducted. Domains with short history are withheld from judgment rather than scored 0 (held_domains in the response data), and the grade issued then is provisional (grade_provisional) → Timeseries Insight tools — reading the health index


Alarm analysis — /insight/alarm/…​

Alarm frequency anomaly detection — fill in the ② parameters and press Run detection

The five screens in the Alarms sidebar group. All share the same layout: set the asset and range in Parameters at the top, press the run button, and results, response data, and a guidance card open below. The image shows frequency anomaly.

No.LocationWhat it does
①Top of screenScreen name and description
②ParametersSet the asset · priority · aggregation window · row limit · threshold · top K and press Run detection. Before you run it, the results area shows only a prompt
SidebarPathRun buttonWhat it shows
Frequency anomaly/insight/alarm/anomaly/Run detectionWhich time windows the alarms clustered in
Failure forecast/insight/alarm/forecast/Run forecastHow many alarms to expect per window going forward
Duration analysis/insight/alarm/duration/Analyze durationWhether the same alarm is staying active longer over time (degradation detection)
Sensor correlation/insight/alarm/correlation/Run correlationWhich sensor tags the alarms hang off
Statistics/insight/alarm/stats/Query statisticsAlarm counts · priority distribution · top alarm configurations and tags
Sensor correlation is not a correlation coefficient

It «counts» alarms per tag and per time window. These are tags that frequently appeared together, not tags proven to move together. In Statistics, no alarms in the period is not an error — it returns 0 and an empty list.


AI findings — /insight/findings/​

AI findings — check the open/critical counts in ② and press Acknowledge/Close at the end of rows in ④

Shows what the AI noticed in the field (order shortfalls · data gaps · AI changes · process anomalies · sensor failures). Open items come first. It lives in the AI autonomy sidebar group.

No.LocationWhat it does
①Top of screenScreen name and refresh
②Summary rowOpen · Critical · High severity · Acknowledged — how many need a human right now
③Status filterNarrow the list to Not closed · Open · Acknowledged · Closed. Beside it you can also narrow by type and asset
④TablePer finding: type · asset · severity · description · last observed · status, with Acknowledge · Close at the end of the row — leaving a record that someone is on it and that it is handled

Common tasks​

  1. Read the description of an open finding and press Acknowledge to mark that you are on it.
  2. When the work is done, press Close and confirm once more in the dialog.
A closed finding does not reopen while the same condition persists

Acknowledge and close are recorded under the logged-in administrator's name and also land in the console audit log (insight.write).


Autonomous improvement — /insight/autonomy/​

Autonomous improvement — look at the ② current mode and the status/actions in the ③ target table

Shows what the AI changed on its own and why, and lets you stop or roll it back.

No.LocationWhat it does
①Top of screenScreen name and refresh
②지금 모드 (Current mode)The current mode (Auto · Propose only · Off), who set it and when, and the last nightly run. Mode switch buttons and the emergency-stop Off are here
③Target tablePer improvement target: version in use · in trial · pending candidate · status, with Roll back · Resume (when stopped) · Approve replacement (for candidates ready in propose-only mode) at the end of the row

Below that, the Change log records when · where · what happened · who, one line each.

  • Filter by period (7 · 30 · 90 days, default 7) and by decision. 50 entries at a time, with Show more to continue.
  • Skipped rows are hidden by default. Turn them on with Show skipped. The text above the rows reports the total in the window, how many are shown, and how many are hidden.
ModeWhat it does
AutoThe AI checks, trials, and replaces baselines on its own, and rolls back on its own if results get worse
Propose onlyChecks and trials a new version, then waits for approval before switching
OffChecks, replaces, and rolls back nothing. What is in use stays in use
This screen changes values

Mode switch · off · approve replacement · roll back · resume take effect immediately after a confirmation dialog, and a changed mode survives restarts. Every action is recorded under the logged-in administrator's name in the Change log and the console audit log (insight.write). In an emergency, Off is the stop button.


Scorer comparison (shadow) — /insight/shadow/​

Scorer comparison (shadow) — enter the asset and recent minutes and press Run scoring

Runs the model-free scorer over an asset's recent data to show what it would have caught had it been enabled.

No.LocationWhat it does
①Top of screenScreen name and description
②InputsEnter Asset ID · Recent minutes and press Run scoring. A summary of alert windows · alert minutes · no verdict · sensor faults opens, along with tables of the baselines used and per-window results
Read-only

Nothing is saved and no notifications are sent. The anomaly verdicts in production are unaffected.


Asset profiling — /insight/profile/asset/​

Asset profiling — pick an asset on the ① right and the tag profile is built in area ②

Understands an asset's tags automatically from real data — what each tag measures, its normal range, and the confidence in that.

No.LocationWhat it does
①Top of screenScreen name, with asset selection and Reload profile on the right
②BodyBefore an asset is selected, only a prompt. Once selected, a summary row and the Tag understanding · Relationship graph tabs open

The Tag understanding tab shows each tag's type · normal range · alarm limits · confidence, and Run relationship analysis on the Relationship graph tab computes tags that move together and lead → lag relationships (this can take tens of seconds).


Pipeline status — /insight/feature/status/​

Feature store pipelines — look at the last runs in the ③ pipeline table

Shows whether the processed data the analyses above consume (the feature store) is currently being produced correctly. If analysis results are empty or stale, this is usually the cause.

No.LocationWhat it does
①Top of screenScreen name, refresh, Run all — runs every pipeline right now
②Scheduler jobsPer job, the trigger and next run — check the schedule is alive
③PipelinesPer pipeline, the last run and trigger, with a run button on each row — find one that has not run in a while and run just that one

Below, the Backfill status card shows backfills in progress and the last error.

The other three screens in the Feature store group:

SidebarPathWhat it does
실행 이력 (Run History)/insight/feature/history/Past pipeline runs — run time · duration · processed · status · notes
피처 데이터 (Feature Data)/insight/feature/data/Asset feature lookup (Asset ID · Period · Row count → Query features), plus text search and similar assets (vector search)
백필 (Backfill)/insight/feature/backfill/Pick a start date · end date · pipeline and press Start backfill — refills missing periods. You cannot start a new backfill while one is running
Backfill makes the server busy

It recomputes past periods, so a wide range takes a long time and raises server load. Run it when production is quiet, narrowed to the period you need. If it is your first time, discuss it with your administrator.


Document parsing check — /parser/​

Document parsing check — pick a profile, upload a document, then read the ③ guidance card. Numbers follow reading order

Upload one document to see exactly how the document parsing service reads it (the text RAG would have indexed). Use this screen before trusting RAG indexing results. The sidebar entry is Document check.

No.LocationWhat it does
①Top of screenScreen name and the service this screen calls
②InputPick a parsing profile (default · fast · ocr · scan) and drop in a document (PDF · DOCX · PPTX · XLSX · image) or press Choose file. default matches the RAG indexing configuration; picking another shows «differs from default»
③Below ②Guidance card — what the selected profile does (for default, "How did RAG read this document?"). Collapse with Collapse

Results appear in the Parsed markdown card beside it, with duration · confidence · characters · lines in the summary row above. If the result is empty and the document is a scan, try again with the scan profile.

Each profile gets its own guidance card (③) below ②, telling you what that profile does, when to use it, and what to watch out for.

ProfileCard titleKey point
default"How did RAG read this document?"Same parsing options as RAG indexing. The text here is the text RAG would have indexed, and anything missing here is also unknown to RAG
fast"What does this document look like read fast with OCR off?"OCR is off, so text in scans and images does not appear. This differs from what RAG saw
ocr"What comes out if you extract only the text?"Table structure is not recognized, so tables flatten into prose. The OCR operation in the vision console uses this profile
scan"How does this document read if the text layer is discarded and everything is OCR'd?"Discards even a perfectly good text layer and reads via OCR. For digitally created PDFs, default is more accurate
  • Limits the card also mentions — uploads through the console are capped at 100 MB (over that returns 413). The console cap applies before the service's own cap (MAX_DOCUMENT_BYTES, default 200 MiB). The screen polls progress every 2 seconds and stops waiting after about 5 minutes — that does not cancel the parse.
  • Documents uploaded here are shown and discarded. They are not indexed into RAG.
  • Even if scan is clearly better, the profile on this screen does not change the RAG configuration. To get the same result in RAG you must change the document parsing OCR setting (DOCLING_*).
  • Drawings (DXF · PDF) belong on the drawing read test, not this screen.

Drawing read test — /parser/drawings/​

Drawing read test — upload a sample drawing (vector PDF) at ②, then read the ③ summary · ④ page image · ⑤ reading tables

Upload one drawing file to see what the document understanding service reads and where from that drawing. It lives in the Drawings sidebar group. It uses the same reader RAG uses when indexing drawings, so use it to settle "the chatbot states the wrong dimension from a drawing."

No.LocationWhat it does
①Top of screenScreen name and description
②DrawingDrop a file or click to choose, then press Read drawing. The accepted formats and size limit are decided by the service; the text below the drop zone states them
③Summary rowFormat · pages · dimensions · BOM rows · title block (found · not found) · warnings
④Page imageDraws colored boxes on the page image where things were read. The type buttons (Title block · Dimensions · BOM · Notes) toggle the boxes
⑤Reading tablesTitle block · dimensions (tolerances) · BOM · notes · zones in tables. Click a table row to highlight its box
⑥Two-revision comparison testUpload two files of the same drawing — the old revision and the new revision — and press Compare to see title block · dimension · BOM · note changes and the changed regions

The "upper/lower limit" column in the dimensions table. For each dimension, it also records where the allowed range came from.

What the cell showsMeaning
«lower ~ upper» values + (formula)An estimate produced by the ISO fit formula from the fit symbol on the drawing (e.g. H7) — it may differ from the standard tables by micrometers
«lower ~ upper» values + (drawing)The ± value written on the drawing, as-is
Not calculatedNot calculated — hover to see why
General tolerance …The general tolerance grade the drawing specifies for untoleranced dimensions (no figures are derived)

If any «formula» value is present, the note "«formula» values are ISO fit estimates — … confirm accept/reject decisions against your own copy of the standard." appears below the table.

GD&T frame check card. Checks whether the GD&T frames on the drawing conform to the rules. The header shows the drawing's general tolerance specification and the datum letters, and each row gives the severity (error · warning · info) · the target letter · the finding · the basis (standard number · concept name). Clicking a row tied to a dimension highlights that dimension in the image. If no frame violates a rule: "No frames violate the rules."

Guidance cards. Below the drop zone, "What was read from this drawing?"; below the comparison test, "What changed between the two revisions?" Both tell you what · when · how to read. The key points:

  • RAG's drawing indexing uses these same readings. A dimension missing here is also unknown to RAG.
  • Drawings uploaded here are shown and discarded. They are not indexed into RAG — indexed drawings are in the drawing register.
  • Scanned PDFs with no text layer yield no text for that page. This reader does not perform OCR.
  • If a comparison shows no changes at all, either the two revisions are identical or the comparison failed — tell them apart with the Could not compare list and the confidence value.
Amber warnings are not failures

Title block not found · No text layer (scanned page) · Zone grid defaulted (no border ticks) tell you «how it was read». Scanned PDFs have no text layer, so dimensions cannot be read.

DWG is not accepted

Files outside the accepted formats are rejected by the service with a reason. For DWG, export to DXF or PDF from your CAD tool and upload that.


Vision check — /vision/​

Vision check — pick an operation, upload an image, run it, then read the ③ guidance card

Upload one image to confirm what the vision service actually sees.

No.LocationWhat it does
①Top of screenScreen name and the service this screen calls
②RequestPick an operation (Inspection · Gauge reading · Text extraction · Classification · Free question · Object detection), upload an image, and press Run
③Guidance cardWhat the selected operation does and how to read the result (Details / Collapse)

Running it produces a samples · agreed · disagreed summary row and Image · Result cards. For object detection, boxes are drawn on the image.

"Cannot determine" is a valid answer

The vision service asks the model several times and returns a result only when enough answers agree (usually 2 of 3; 4 of 5 for gauge reading). When answers diverge it returns Cannot determine rather than inventing a value. Pressing again gives the same answer, so retake the photo. Free question does not go through this agreement check, so do not use it for readings or verdicts.


Integration map — /thread/​

Integration map — read connector colors on the ③ map (enabled · failed · disabled). Numbers follow reading order

Shows how the digital thread is wired to external systems, on one map. For connector registration, field binding, and synchronization procedures, see Digital Thread.

No.LocationWhat it does
①Top of screenView buttons (Map · List · Readiness sources), Add connector (four registration steps in a side panel), refresh
②Summary rowConnectors · Enabled · Conformance failures · Tools — how many integrations are alive
③MapA filter row (family · status) and the map. External system → connector → tool → binding → plant graph, left to right. Green = enabled, red = conformance failure, gray = disabled. Clicking a node opens its configuration, conformance results, and recent action calls in a side panel, and the map highlights only that node's chain

Working the map:

  • It opens at 1× scale, centered. Connectors are laid out with family order ERP → MES → PLM → SCM → scheduling first, then the remaining families alphabetically.
  • Drag to pan, wheel to scroll vertically, Ctrl+wheel to zoom. The buttons at the top right are zoom in · zoom out · fit all.
  • The filter row above the map narrows connectors by family · status (map only). Clear filters restores it.
  • The minimap is hidden by default. Turn it on with Show minimap in the control buttons.
  • If there are too many connectors to read the map, switch to List for a table — Name · Family · System · Endpoint · Status · Level · Tools · Credentials · Conformance.
  • The family list in Add connector initially shows erp · mes · plm · scm · sched · qm.

Sync now in a connector's side panel immediately loads that connector's bindings into the mirror and closes links that disappeared at the source (it does not delete them; it records an end time — the link history is built from that). When it finishes, "Synchronized N objects · N links" appears. If the list the connector returned was truncated, a yellow line also appears: "This sync did not close disappeared links — collection was truncated (…). They will be closed by a sync that reads to the end." — closing links from a truncated list would close healthy links too. Enabled connectors are also synchronized on a schedule by the service → Digital Thread — connector synchronization

Mutating actions are recorded in the audit log

Connector registration, modification, deletion, discovery, testing, synchronization, and field binding are recorded in the console audit log (thread.write) under the logged-in administrator's name. Action tools (🔒) are never called from the console — the copilot relays them through approved proposal cards.


Readiness sources — the third view of the integration map​

Readiness sources — numbers follow reading order

Shows, from the operator's side, what the copilot's supervisor job readiness (Go/No-Go per operation) bases its verdict on. The verdict itself (which operation is blocked) is not here; it is on the copilot screen. What you see here is «which connector feeds each item, whether that data is fresh, and what happens to the verdict if it is missing». The view button appears only when the digital thread service is a release that provides this feature.

No.LocationWhat it does
①Header rowThe last verdict time and state (Judged · Stale source — verdict halted · No MES — not judged), and Re-measure now
②Item · WiringFor each of eight items: Wired (green) · Partially wired (amber) · None (gray)
③Source (family · tool → connector)For each input: required · either-or · optional, which tool of which family reads it, and the name of the connector providing that tool. If the data is older than the limit, an amber Stale badge is attached. Clicking a connector name returns to the map and opens that connector's side panel
④If missingWhat the verdict becomes without the source — verdict «unknown», or, with no MES work order, no verdict is made at all. Each input carries a line saying what you lose (e.g. "material shortages are unknown — materials become unknown"). Inputs that actually could not be read in the most recent verdict are marked «could not read in the latest verdict»

The eight items and the families that feed them (the source of truth is a single declaration in the digital thread service; the verdict and this screen read the same declaration):

ItemSource read
(foundation)MES work order — without it, no item is judged
Preceding operationMES work order
MaterialsSCM shortages (or the equivalent tool from MES if absent)
Tooling · calibrationTool management (per-job tool list — required, tool register — optional)
Personnel · qualificationsMES operation qualification requirements + ERP personnel (or MES personnel if absent)
Permits · isolationSafety (EHS) work permit (required) · isolation (optional)
Quality holdsQuality (QM) nonconformance (or MES nonconformance if absent)
Equipment maintenanceAt least one of maintenance (CMMS) PM windows · maintenance work orders
Drawing revisionPLM engineering change (required) · PLM BOM (optional) · workstation drawings (digital thread mirror — drawings indexed by RAG)
  • Freshness is measured against the last verdict. With no verdict on record, "No verdict recorded yet" appears — Re-measure now runs a verdict once (read-only) and re-measures.
  • The freshness limit differs by family → Digital Thread — when data goes stale
  • A connector's side panel on the map also has a Readiness items row showing which items that connector feeds.
If the supervisor screen is full of «unknown»

The verdict is not wrong — the sources are not wired. Find the items marked None (gray) here and attach a connector from that family. «Unknown» is not GO — items with a missing source are never counted as passing.


Graph mirror — /thread/mirror/​

Graph mirror — look at the ② projection status and the ③ consecutive failure count

Shows the status of periodically copying (projecting) the platform ledger and learned edges into the plant graph. Read-only. For details see Digital Thread.

No.LocationWhat it does
①Top of screenScreen name and refresh
②Summary rowProjection · Last success · Dt objects · Projected links — whether projection is succeeding on time
③Last runFinish time · run number · consecutive failures · per-stage results — find which stage failed
④What is in the mirrorSource and count per item — what is mirrored and how much

MCP Gateway — /mcp-gateway/​

The gateway that every MCP tool the AI calls passes through. It gathers the tools of the platform integration MCP, this installation's AI services (Timeseries Insight · RAG · Document Understanding · Vision · Digital Thread · Engineering Calculation), and the external MCP servers the operator has attached, and serves them at a single address (plantpulse-mcp-gateway-api:7160/mcp/). The copilot looks only at this one address, and turning tools on and off is also done here (2026.10 re-release (2026-10-20) — before that it was the Tool Servers (MCP) screen in the Copilot Admin Console).

ScreenAddressWhat it does
Overview/mcp-gateway/Gateway status (database · embedding · platform MCP · MCP servers), server summary, calls · errors · latency p95 · searches over the last 24 hours
Servers/mcp-gateway/servers/The servers behind the gateway — kind (Platform · Built-in · External) · prefix · status · number of enabled tools · authentication · circuit · last discovery. Rediscover · Enable/Disable, and for external servers Register server · Edit · Authentication · Delete
Tools/mcp-gateway/tools/Every discovered tool — exposed name · server · description · search terms and their source · status · search index. The place to turn each tool on and off; you can also override the description (4000 characters) and the search terms → Tool search terms
Permissions/mcp-gateway/permissions/Which caller (the copilot · each issued key) sees which server's tools
Client API Keys/mcp-gateway/client-keys/Issue · scope · revoke keys (ppgw_…) for external MCP clients (other agents · desktop apps)
Search Test Bench/mcp-gateway/search/Enter one question and see the tools the gateway would give the model — score · lexical rank · embedding rank · reason for selection
Search Settings/mcp-gateway/search-settings/Tool search on/off · budget (number of tools given per turn) · family guarantee · dependency expansion
Calls & Metrics/mcp-gateway/calls/Call counts by server · error, and for each call the time · caller · server · tool · result (Succeeded · Tool failed · Transport failed) · duration · result size → Call log

Tool on/off — the initial value is set by policy​

When a tool is first discovered, it comes in enabled or disabled according to the gateway policy. After that, the value you change on the Tools screen stays, and neither a restart nor an upgrade overwrites it.

ServerInitially
Platform integration MCPAll on
Timeseries Insight34 on · 4 off · 1 write tool that cannot be enabled
Digital Thread9 on
Engineering Calculation4 on
RAG · Document Understanding · VisionOn (all 2 · 2 · 5) — if you turn off document search rag_search, chat cannot find documents
External serversOff

The per-tool list is in the MCP tool map.

  • Some tools cannot be enabled — tools suspected of writing (they declare readOnlyHint=false, or their name · description indicates a write) and connector tools (mes_ · erp_ …) served by a server other than Digital Thread. Platform tools are not blocked by the gateway; if they write, the copilot's approval gate gets a person's approval.
  • If two servers expose the same name, the one registered first wins and the later one is not exposed, marked «conflict». Change the later server's prefix.
  • An overridden description changes both the description the model reads and the search index. Clear it to go back to the server's original description.

Attaching an external MCP server​

  1. Servers › Register server — name · Streamable HTTP address · tool prefix (lowercase · digits, ending in _, required) · call time limit (1–600 seconds, default 120). The server is created disabled and allowed to no one.
  2. If authentication is needed, enter the header name and value under Authentication. The value is sealed and never shown again (only «Set»).
  3. Enable → Rediscover. External tools come in disabled. 🔴 An external tool's description and arguments go into the model prompt as-is, so read them on the Tools screen and enable each tool. If the definition of an enabled external tool changes, the gateway disables that tool and flags it for review.
  4. Under Permissions, allow that server or tool for the copilot (or an issued key).
  • External tools are passed to the copilot as write tools — the copilot does not call them without a person's approval.
  • If the address resolves to a loopback · link-local · cloud metadata address, it will not attach. Internal networks (10/8 · 172.16/12 · 192.168/16) are fine.
  • Platform · Built-in servers are determined by the installation, so they can only be disabled; they cannot be edited or deleted.
  • 🔴 External system connectors such as MES · ERP · PLM are attached not here but on the Integration map.

Permissions and client API keys​

  • Built-in servers are allowed for the copilot with all tools from the start. «All tools» includes tools discovered later.
  • New external servers and new keys are created with nothing allowed. If «not a single tool shows up», check Permissions first.
  • A key's plaintext is shown only once, when it is issued. The list keeps only the first 12 characters. Revocation takes effect immediately.
  • A key is given a scope (equipment · site · project · customer PO · supplier) and a grade. A key without a scope can call only external server tools, and built-in tools read narrowed to that scope · grade. Platform tools can be called only by keys whose scope is the whole installation (the platform does not filter by scope).
  • These keys are used only for /mcp/. This is a different screen from API keys in the common menu.
  • The address external MCP clients connect to is https://<호스트>/mcp/gateway/ → API Integration Guide

Tool search — on by default, budget 20​

Instead of loading every enabled tool for every question, the gateway picks only the ones that fit the question and gives them to the copilot. The initial values are on · budget 20 · family guarantee on · dependency expansion on. search_domains, which finds IDs by name, and document search rag_search are always loaded regardless of the budget (when allowed for that account).

  • If you turn it off in Search Settings, the copilot receives all allowed tools — with 70-some tools, the model often fails to pick. The bar for turning it on is recall@20 of 0.95 or higher in offline evaluation; if you try to turn it on below the bar, the screen warns you (it does not block you).
  • The values an operator changes and saves win — upgrading does not reset them to defaults.
  • 🔴 Search depends on the embedding service. If embedding is down, search returns 503 search_unavailable and there is no fallback path — check «Embedding» on the Overview.
  • The Search Test Bench produces rankings even when search is off. Use it to see «why this tool was not called for this question».

Tool descriptions are in English, so a Korean question such as «알람 확인 처리» (handle alarm acknowledgement) is linked to a tool through its search terms. Search terms are used only in keyword search (BM25); they are not embedded and are not shown to the model. On the Tools screen, below the description column, each tool shows the search terms it currently uses and their source.

SourceMeaning
This installAn operator of this installation overrode them — wins over the three below
Server declaredThe MCP server declared them along with the tool (Timeseries Insight · Digital Thread · Engineering Calculation · RAG · Document Understanding · Vision)
Gateway defaultThe value the gateway attaches for a server that does not declare its own (the platform integration MCP)
No search termsIndexed by name and description only
  • Search terms are shown in full, never truncated. Read the search terms an external server declares, too, before turning its tools on.
  • The Search terms button edits the Korean (ko) search terms, one per line (or comma-separated). Search terms in other languages are kept as they are and shown in the same dialog.
  • 🔴 The limits per tool are 4 languages, and 8 terms · 64 characters across all languages together. Beyond that, the save button is locked.
  • If you change nothing, the save button is locked — this prevents a copy of the server's value from freezing into an override and later hiding a value the server changes.
  • Saving it empty means the tool has «no Korean search terms». Remove override, in the «This install overrides the search terms.» strip at the top of the dialog, goes back to the server declaration · gateway default. They are two different buttons.
  • Search terms a server sent in the wrong shape or over the limits, and a stored override discarded for exceeding the limits, show their reason on a warning line (a discarded value is treated as absent and the next source applies). A discarded override is also cleared with Remove override.
  • The search box at the top of the screen filters by name · description · search terms together. If the search terms of an enabled external tool change, the gateway treats it as a changed definition and turns that tool off.

When this happens​

SymptomWhat to check
Server status is «Down»The circuit on Servers (after 3 consecutive failures it is not called for 120 seconds) and the discovery error
External server shows «Warning», authentication «Not set»An authentication header is defined but has no value — enter it again under Authentication
Call ends in upstream_authThat server returned 401/403 — check the authentication value
Call ends in result_too_largeThe result exceeded 1 MiB
No tools visible with an issued keyA new key has no permissions — Permissions
A question asked in Korean does not load the right toolEnter that question in the Search Test Bench to see the ranking, and look at that tool's search terms and source on the Tools screen → Tool search terms
Call is «Tool failed» but the server is fineThe backend answered but the result is a failure — look at the tool result (arguments · source data), not the server → Call log
Calls with an issued key end in forbidden_scopeThat key has no scope, or it is a platform tool and the scope is not the whole installation — Client API Keys

Call log — tool failures and transport failures​

Calls & Metrics has three results. The error count includes tool failures and is split beside it as «tool N · transport N». The per-server table also has a Tool failed column.

ResultMeaning
SucceededThe tool answered and the result is a success too
Tool failedThe backend server answered but the result is a failure — isError, a non-empty error, {"ok": false}, error_code with status: "error" (the same rule the copilot uses to treat a result as a failure)
Transport failedThe call never reached the backend, or the gateway blocked it — the Error code is the reason

The Result filter is All · Succeeded · Failed (any) · Tool failed. If «the server is fine but the answers are strange», filter by Tool failed.

The call log does not keep arguments · results · authentication values. «Who asked what», per person, is in the copilot's audit log → Copilot administration


Automation Sandbox — /sandbox/​

The screens of the service that runs the Python code of automation steps (processing earlier steps' tool results with numpy · pandas · scipy and producing JSON · tables · figures · text). On the rail it is Automation Sandbox, separate from MCP Gateway. The console only reads — runs are made by the copilot's approved automation plans, and writes from the console to the sandbox are blocked.

How isolation works

The sandbox container itself runs on gVisor (runsc), and for each run it starts an isolated process inside it with new namespaces (user · net · pid · mount). It does not start a new gVisor per run. Inside a run there is no network, so it cannot call tools or REST, and the root file system is read-only.

ScreenAddressWhat it does
Overview/sandbox/Isolation (gVisor version · platform · architecture · network, last self-test), Running · Queued, Executed · Errors · Turned away per period, run counts by result code
Run History/sandbox/runs/For each run: received time · result · error code · code SHA-256 · size · queue wait · elapsed. Expand it for input · output sizes · limits · context. Kept 30 days by default
Run limits/sandbox/limits/Per-run limits (time · memory, code · inputs · outputs · tables · figures · /tmp · processes), concurrency · queue limits, importable packages and their versions. These are the values the sandbox actually enforces

There are three results: Succeeded · Error · Turned away. Turned away is a request that was not run; its elapsed time in Run History is «—».

CodeResultMeaning
okSucceededFinished and returned outputs
syntaxErrorThe code did not compile — nothing ran
forbiddenErrorTried something the calculation step may not do (network · processes · native code · files outside /tmp)
timeoutErrorExceeded the wall-clock or CPU limit
memoryErrorExceeded the memory limit
output_too_largeErrorOutput · table · figure · /tmp exceeded its cap
runtimeErrorAny other exception, or the outputs could not become JSON
queue_fullTurned awayThe queue was full
queue_timeoutTurned awayWaited too long for a free slot
sandbox_unavailableTurned awayThe isolation could not be set up — the code was not run
  • 🔴 The code text is not here. The sandbox keeps no code · inputs · outputs, only their sizes and the code SHA-256. The text is in the copilot's approved plan with the same hash.
  • If sandbox_unavailable piles up or the overview shows «The isolation self-test failed», isolation setup is failing. Check the runtime version and last self-test under Overview › Isolation, and the sandbox's Logs.
  • If «Run records are not being stored» appears, the run record store (PostgreSQL) cannot be written. Runs continue, but runs during that time are missing from the records and counts.
  • The common menu is API endpoints · Logs · API keys · Settings. The sandbox has no MCP server, so there is no MCP server info.

Common menu​

Five screens that are identical across the six services RAG API · Timeseries Insight · Document Parsing · Vision · Digital Thread · MCP Gateway. The <service> slot in the address is rag · insight · parser · vision · thread · mcp-gateway. The images are from RAG API. Automation Sandbox (sandbox) has the same four, minus MCP server info.

MCP server info — /(service)/mcp-info/​

MCP server info — check that the ② tool table has at least one tool

No.LocationWhat it does
①Top of screenThis service's MCP address and a summary (tool · resource · prompt counts) — filled in live by querying the service directly
②Tool tableThe tools the AI copilot can call — Tool · Description · Parameters. Clicking a row expands each parameter's type · required · default

Below come the Resources · Prompts tables.

Zero tools is not normal

An MCP server with no tools at all should be read not as «no tools» but as a failure to read the list.

API endpoints — /(service)/api-endpoints/​

API endpoints — find the method and path in the ② table

No.LocationWhat it does
①Top of screenEndpoint count and description — built from the service's OpenAPI schema
②TableMethod · Path · Description · Domain — integration developers find the API to call

MCP endpoints (POST /mcp) are not in the OpenAPI schema — see MCP server info.

Logs — /(service)/logs/​

Logs — the top of the ③ table is the most recent log line

No.LocationWhat it does
①Top of screenAuto 5s (reloads every 5 seconds while on) · refresh
②Header rowThe log file being read · size · record count — whether the file is empty or has corrupted lines
③Log tailThe tail of the log file, newest on top — Time · Level · Event · Fields

You can narrow by line count · level · search term (Enter) at the top of the screen. No need to SSH in and run docker logs.

API keys — /(service)/api-keys/​

API keys — press ① Run check, then read the verdict from the ③ round trip

Measures whether inbound API key authentication is actually enabled on this service. It is not a screen for viewing key «values».

No.LocationWhat it does
①Top of screenScreen name and Run check — only when pressed does it call twice, once without a key and once with one
②Summary rowConsole key (whether the console holds a key, and its fingerprint) · Authentication (check result) · Shared across services (whether several services use the same key)
③Round tripResponse codes without a key · with a key, plus the verdict and its meaning — a closed service answers 401 then 200
④WiringPer service: console env var · service env var · key · upstream — under which name the key goes where. Pressing the eye icon beside a fingerprint reveals the plaintext, and that action is recorded in the audit log with the username
⑤Note below the tableThe key callers must send in X-API-Key, and which env var holds it in the console and in the service
VerdictMeaning
EnforcedRejects keyless calls and accepts the console's key — correct
OpenResponds without a key — anyone who can reach the route can access it
Not enforcedThe console holds a key, but the service responds without one
Key mismatchThe service is closed but rejects the key the console holds
No console keyThe service is closed but the console has no key
UnreachableThe service did not answer — this is not a «pass»
Opening the screen does not measure it

The five services refuse to start if the inbound key (PI_INBOUND_API_KEY) is empty. The only exception is deliberately disabling authentication by setting PI_INBOUND_AUTH_DISABLED=true in the install env, in which case the service comes up with no key — and the container reports healthy, so there is no signal. That is why you press Run check to measure it — so that merely opening the screen does not pile up 401s on the service. If it responds without a key (Open), a warning box appears above the table. The check deliberately sends one keyless request, so alerts watching for 401s may fire → API integration guide — inbound keys

Settings — /(service)/config/​

Settings — look at ② component status and ③ the values currently in effect

No.LocationWhat it does
①Top of screenKey count and refresh
②Component tablePer component the service uses: status · endpoint — find which dependency is down
③Settings tableThe runtime settings currently in effect, key · value — sensitive values such as passwords and tokens are masked
Settings is not an editing screen

It only displays values; it cannot change them. To actually change them, see Changing passwords and API keys and Service operations.


When this happens, do this​

SymptomLook here firstThen
The chatbot cannot find a documentRAG API → DocumentsSearch directly with Query test → Sync history
Chatbot answers are slowP95 on the LLM dashboardGPU utilization and temperature
A model does not answerLLM → Upstream statusLLM → Chat test, once by hand
Analysis results are emptyTimeseries Insight → Pipeline statusThe failures in Run history
Checking the backend is not open without authenticationThat service → API keys → Run checkChanging passwords and API keys
… rejected the console's inbound API key (401) - check <환경변수> on screenThe service's key differs from the one the console holds (error reason upstream_auth, 502)That service → the Wiring table under API keys → align the env var named in the message and restart the console
An LLM screen (API keys · logs · model registration, etc.) returns 502 with reason llm_upstreamThe gateway (LiteLLM) or its DB returned a 5xx. This is not a console fault — upstream_status is the gateway's status codedocker compose logs plantpulse-litellm → Troubleshooting
"Connector registry unavailable: 503 … config_error …" on the integration mapThe digital thread's registry store (DT_PG_*) or encryption key (DT_SECRET_KEY) is emptyAsk your administrator to configure it. The graph mirror runs independently of this
"Drawing indexing is off" in the drawing registerDRAWING_INGEST_ENABLED is off in rag-api (the shipping default)Turn it on per Configuration and restart rag-api
"Video/audio ingestion is off" on the Videos screen · video upload blockedPI_MEDIA_ENABLED is not enabled in the install env (off by default)Turn it on per Configuration and recreate the stack
An uploaded video sits in Pending for a long timeIt is outside the processing window — the processing window line on the Videos screen states the next start timeTo change the window, MEDIA_PROCESSING_WINDOW → Configuration
Chat does not use a video as evidenceRAG API → Videos → Empty transcript · Missing from searchExpand the row and Re-transcribe as instructed
Every Revision status in the drawing register is UnverifiedThere is no PLM connector to query for revisions, or it does not answerDigital Thread → Integration map to check the PLM connector is enabled → Digital Thread
Supervisor readiness is full of «unknown»The source connectors for those items are not attached, or the data is staleDigital Thread → Integration map → Readiness sources
A yellow light on HomeExpand Details and read the tooltipThat service → Logs
A red light on HomeThat service → LogsThe restart procedure in Service operations
The screen is blank with an error bannerThat service may not be up yetCheck status on Home
A wrong service key does not log you out

If a service rejects the console's key, the console does not treat that as an expired session — it shows a single error line (502, upstream_auth). Logging in again will not fix it, so check the env var named in the message.

"Empty" and "could not fetch" are different

When the console cannot fetch data it shows an error banner rather than faking an empty table. If you see an error banner, there is no missing data — the connection failed.


Accounts and sessions​

The console account is defined by environment variables, not a database (/etc/kopens/plantpulse-ai.env).

Environment variableMeaningDefault
PI_ADMIN_USERLogin usernameadmin
PI_ADMIN_PASSWORDLogin passwordNone — must be set
PI_ADMIN_SESSION_SECRETSession signing keyGenerated by the installer
ADMIN_SESSION_MAX_AGESession lifetime (minutes)480 (8 hours)

Inside the container they appear under the names ADMIN_AUTH_USERNAME · ADMIN_AUTH_PASSWORD · ADMIN_SESSION_SECRET, but compose simply copies the values above in, so edit the PI_* side.

With no password it will not start at all

Leaving PI_ADMIN_PASSWORD empty makes the console refuse to start. This is intended behavior, meant to prevent an unauthenticated admin portal from sitting quietly open.

If your session keeps dropping

If PI_ADMIN_SESSION_SECRET changes, every existing login is invalidated. Leave the value the installer generated as-is and logins survive restarts.

The console password cannot be changed with bin/passwd.sh

The console account is not in the list of keys managed by bin/passwd.sh (see the table in Changing passwords and API keys). To change it you must edit the env file directly and restart the service. Ask your administrator.