Say there is one chat component, in the places that claimed otherwise

Several headers argued the Scheduler dock was deliberately separate, and the Scheduler's help
never mentioned the assistant at all — including the fix flow that just changed shape.
This commit is contained in:
Gmer4Lfe
2026-08-09 12:22:25 -04:00
parent 8eeb4c3d6c
commit 6be765a9bf
6 changed files with 95 additions and 24 deletions
+3 -2
View File
@@ -356,8 +356,9 @@ $_vv_doc_vars = array_merge(vv_conf_vars(), ['SCRIPTS_DIR' => SCRIPTS_DIR]);
<?php vv_ai_chat_list_markup('vv-mon-ai', true); ?>
</div>
<!-- Named for what it is, not "dock" — the Scheduler tab's vv-ai-dock is a different
component and vvAiDockOn() there tests for that id by name. -->
<!-- Named for what it is, not "dock". The Scheduler renders the same component inside a
wrapper that still carries the #vv-ai-dock id, and two elements answering to that name
on one page would be a trap the day anything queries it globally. -->
<div class="vv-card" id="vv-ai-assistant-card">
<h3>
<span style="display:flex;align-items:center;gap:5px;">
+25 -4
View File
@@ -56,11 +56,13 @@ as the GPU and UPS cards.
| Card | What it tells you |
|---|---|
| AI | Model residency, context size, VRAM, index size and staleness, tokens used today |
| AI | Model residency, context size, VRAM, index size and staleness |
| Tokens | What the assistant has spent — per node, and for today, the last 7 days and all time |
| Conversations | The last `$AI_CHAT_HISTORY_MAX` chats. Click to reopen, × to delete |
| Assistant | Ask a question without leaving the dashboard |
| ⤢ | Expands the conversation to about two and a half times its height. Remembered |
| Profile buttons | Which contract answers — General Chat, Varaverk Assistant, Code Sketcher, Troubleshoot |
| Profile chip | Which contract answers — General Chat, Varaverk Assistant, Code Sketcher, Troubleshoot |
| ⤢ | Trades more room for the conversation, and back. Always opens at the smaller size |
| ▾ | Saved conversations, the same ones the Conversations card lists |
---
@@ -79,6 +81,25 @@ implied.
These figures come from the same one-minute collection the AI tab's banner uses, so the two
cannot disagree about whether the model is loaded.
## Tokens is its own card, not a line on the AI one
The AI card answers whether the model is healthy right now. What it has spent over a month is a
different question, and it was crowding that card out one line at a time.
`Nodes` lists each host with its total. A host with no rows reads **not collected here**, never
zero — each host writes to its own `data/` and only `ai_token_sync.sh` moves a ledger between
them, so a zero would claim the partner sat idle when the truth is that this host cannot see its
ledger at all. Click a node to scope the figures below it to that host; click **All hosts** to go
back.
The totals cover today, the last 7 days and all time, each with the turn count and the prompt /
completion split. The footer adds how long the ledger has been running, the best throughput seen,
and — under All hosts only — the split by profile and by source. Those last two describe the whole
ledger, so they are not shown under a single host's heading where they would not describe it.
This is the same ledger the AI tab shows, read from the same endpoint. It refreshes when a turn
finishes here, and otherwise once a minute, because the numbers only move when a turn completes.
## The assistant here starts on General Chat
The AI tab starts on Varaverk Assistant, which answers only from this installation's
@@ -91,7 +112,7 @@ to the strict profile automatically, and handed back if the documentation turns
it. Starting strict would refuse ordinary questions to guard against a mistake the server already
prevents.
Switching profile with the buttons keeps what is on screen but stops sending earlier turns to the
Switching profile with the chip keeps what is on screen but stops sending earlier turns to the
model. Carrying cited, retrieval-grounded answers into a mode with no retrieval makes the model
keep referring to sources it can no longer see.
@@ -80,6 +80,42 @@ Two blocks on the Scheduler Info panel get you there faster:
The status dot in the Orch tree is green, orange or red for the last run's outcome, dim if the
script has never run. Hover for detail.
## Asking the assistant about what is on screen
The panel below the right-hand views is the same chat component the AI tab and the Monitor
dashboard use, at this panel's size. What is particular to this tab is that its subject follows
you: open a log, a conf or a script and the chip states both the profile answering and the thing
it is pointed at. Nothing is inferred silently — if what the chip says is wrong, that costs a
glance rather than a confidently wrong answer.
Every row in **Recent Activity** carries a **why?** (failed) or **recap** (clean) button. It opens
that script's log first and then asks, because the question is only worth asking with the log
attached — the profile that reads it is the one that gets the log tail. The question is posted as
visible text, so what was asked on your behalf is never a mystery.
Moving to a different subject keeps the transcript on screen but stops sending the earlier turns
to the model, and starts a new stored conversation. A troubleshooting thread carrying log excerpts
must not bleed into a question about a conf key; hiding that the earlier exchange happened would
be worse than carrying it visibly.
Reasoning is enabled only for Troubleshoot. Working out what a log means is worth waiting for; a
lookup like "what does this setting do" is not, and an inline answer that stalls reads as broken.
## Recording what actually fixed something
When a diagnosis is followed by that same script running clean, the assistant offers to record it:
*"`<script>` just ran clean. Want me to record what fixed it?"* Answer **Yes** and the next thing
you type is stored as the fix rather than asked as a question.
The trigger is the run record, not the conversation. It fires once, at the moment the trouble is
demonstrably over, rather than after every answer — an offer that appears constantly is one you
learn to skip past.
What gets stored is the symptom you asked about and the fix you describe. The model's diagnosis is
deliberately not stored: it is a reading of evidence, and writing a hypothesis into institutional
memory as settled fact is how a wrong answer outlives the incident it came from. What is
remembered is what actually worked, and it is shown the next time the same thing is diagnosed.
## Stopping a script that is stuck
**Stop** sends SIGTERM, waits 3 seconds, then SIGKILL, and clears any lock files the script left
@@ -138,6 +174,11 @@ on disk is never touched until you press Save.
| **Auto Scroll** | Toolbar | Follows the newest line; pauses if you scroll up |
| **Cancel** | Toolbar, editing | Discards changes and returns here. The file is untouched until Save |
| **+ Folder** | Custom Scripts | A collapsible subfolder you can drag scripts into |
| **why? / recap** | Recent Activity | Opens that run's log and asks the assistant about it in one click |
| **Profile chip** | Assistant | What is answering, and what it is pointed at. Click to change the profile |
| **⤢** | Assistant | Trades more of the panel for the conversation, and back |
| **▾** | Assistant | Saved conversations, shared with the AI tab and the Monitor dashboard |
| **New** | Assistant | Starts a fresh conversation; the old one stays in the store |
## Reference — orchestrator and step behaviour