1 · Photo of the issue
Tap to take / choose a photo
or drag & drop it here
3 · AI analysis (supporting signal for HOD approval)
The photo walks the flow you built in the Flow Editor — every hop is shown live.
raw JSON
Live node monitor
Pattern discovery — clusters over all analyzed photos
Duplicate incidents (near-identical reports)
Cluster
Retrieval — what the chatbot is told before it answers
The chatbot used to receive the entire knowledge base and the entire rate card on every message. Now it receives only the facts the question is about, retrieved from an index of three sources: the company knowledge, every job on the rate card (with the symptom words customers actually type), and what has really been reported. Measured at a 68% smaller prompt with a realistic knowledge base — and the gap widens with every fact you write down.
A wrong answer is usually a retrieval problem, not a model problem. This is where you see which it was.
Token savings — how much the brain answers itself
Every photo is answered one of three ways. Dedup reuses the verdict of a near-identical photo, own model answers from what it has learned, and cloud sends it to a paid engine. Only the last one costs money, so this is the number to drive down — and it is measured from what was actually recorded, not from a counter kept alongside it.
Photos the cloud has already analysed still carry its verdict. This turns those into training samples — counting distinct faults, not photos, so one leak sent fifty times does not drown out everything else. Safe to run repeatedly.
Chat photos — confirm or correct the AI
Every photo a customer has sent, newest first, with what they wrote alongside it and what the model concluded. Confirming or correcting one teaches the model straight away: the exact job goes into the confirmation memory for instant precision, and the category becomes a weighted training sample — a correction counts for more than another easy example, because it teaches the model what it got wrong. The queue below only shows what the brain was unsure about; this shows everything.
Review queue — active learning
The brain flags photos it was unsure about, or where it disagreed with the AI that answered. Confirm the real type here — these are the highest-value labels, and they feed straight back into training as weighted corrections.
Our model — vision · card & training
Import the mock samples (or ingest real labeled photos), then press Train.
Add a labeled sample (/ingest)
Every real submission already carries the user's category (§3.2), so labels are free. This form mimics that.
Learn from AI — self-training loop
When ON, every analyzed photo becomes a training sample: the user's category (ground truth) or the answering AI's verdict (GPT / Gemini / Ollama teaches the own model). With auto-retrain the model gets smarter day by day — data by data.
ML diagnostics — where it's confident vs confused
Cross-validated: every sample is scored on a fold the model didn't train on. The confusion matrix (rows = true class, columns = predicted) shows exactly which classes get mixed up — that tells you what to label next.
Model versions — capability history
Every training run is versioned; watch accuracy and coverage grow as data flows in.
Autonomy — self-improving, safely
The model retrains itself as new labels arrive, but a new version only goes live if it beats the current champion on a frozen golden test set — so it can run unattended and never regress. Rejected challengers are kept for history, not deployed.
Brain export / import — move training between machines
Train on one machine, carry the whole brain to another (staging / prod) — no
retraining. Export bundles the trained vision + text models, their training data and
the company knowledge into one .tar.gz. Secrets (API tokens, bot config) are
never included. Keep the same embedding backend on both ends.
Booking page address
Telegram Bots OFF
How to set up a bot (2 minutes)
/newbot → copy the token.2. Click Create bot, paste the token, pick a module, press Save, then flip it Active.
3. Test connection (in the edit dialog) shows your bot's username.
4. Open your bot, send any message, then a photo of a maintenance issue — the analysis comes right back.
5. Optional: set a chat id so flow Notify nodes can ping you.
Create bot
Create session
WAHA (self-hosted, scan a QR)
maintenance.request.submitted). When the main system approves via POST /api/maintenance/{id}/approval, the user is auto-notified on their channel.Ticket
feedback.submitted), and — when the correct answer maps to a
known type — teaches the model so it improves. A Telegram bot with the Feedback module
does the same over chat (send the photo → previous answer → correct answer → remarks).log feedback
history
Feedback
.env), stored masked; edits take effect
with no rebuild. Text-only providers are skipped for photo analysis.Access & authentication — two separate keys
X-Dashboard-Key; the login screen stores it in your browser.
Set it server-side with DASHBOARD_KEY. Covers every console page & endpoint
(analyze, model, flow, clusters, integrations, debug…). Leave blank = open console./api/* endpoints. Sent as Authorization: Bearer aip_…, generated &
revoked below, stored hashed. These are independent of the dashboard key.ADMIN_TOKEN is set, config/training
writes also need X-Admin-Token (set it on Logs & Status → Security).GET /health and the
WhatsApp webhook (own verify token). Everything else needs the dashboard key.Third-party API — connect any system
http://localhost:8090 · /api/* calls require
Authorization: Bearer <token> (generate one below) · uploads are
multipart/form-data · responses JSON.Interactive spec: Swagger UI /docs · openapi.json (these are behind the dashboard key). Typical CRM flow:
POST /api/analyze-async → store job_id →
poll GET /api/result/<job_id> → save the verdict on the ticket.API access tokens
System status — is everything wired up?
Security — admin token
When the server is started with an ADMIN_TOKEN, changing configuration or training (flow, providers, learning, train, recluster, tokens, integrations) requires it. Paste it here once — it's stored in this browser only and attached automatically to those requests. Read-only viewing never needs it. Leave blank if the server has no token set.
Live logs (api + worker, newest at the bottom)
docker compose logs -f api worker