Classification Modes
Classification Modes
Two pages classify signals: Classify (one signal at a time) and Classify Bulk (a whole CSV), each with an unsupervised and a supervised flavor.
Classify (single signal)
Route /classify. Fill in:
- Description (required) — the signal text, in any language.
- Technology — currently only Hydro is enabled (Wind/Solar are shown as "soon").
- Plant / RDS Top Node (required) — identifies which plant's context (schema, validated-signal history) to use.
- Context hint (optional) — a free-text operator note, e.g. "pump- turbine, unit 2".
- Plant Schema (optional, multi-select) — one or more parsed schemas for this plant (see Plant Schematics Ingestion) to inject as structural context.
- Advanced parameters (collapsible) — model, overall confidence threshold, and the reference/validated-signal similarity thresholds used during retrieval.
Submitting returns:
- The code, in the standard 8-field format.
- A confidence breakdown — an overall score plus a score for each step of the decision pipeline.
- The reasoning — the full classification history showing how the agent arrived at the result.
- Flags — a review suggestion when the agent itself is unsure (e.g. an ambiguous comparison match).
- Similar signals — the reference and previously-validated signals retrieved as supporting evidence.
- Validation errors, if the proposed
(lnclass, do, da, cdc)doesn't match a normatively valid combination.
There's no inline correction here — if the result is wrong, corrections happen through Classify Bulk's supervised flow, which is built around operator review.
Classify Bulk (CSV)
Route /bulk_classify, in two steps. Every run is saved automatically — see
History to reopen, edit,
continue, or delete a past run.
Step 1 — Import: pick a .csv file, choose its delimiter (or leave on
Auto), and optionally cap the run to a sample of N rows.
Step 2 — Configure the run:
- Pick which column holds the signal description.
- Set technology, plant/RDS top node, and context hint (same as single Classify).
- Choose which extra columns to carry through into the results table and the export.
- Pick a Plant Schema, if relevant.
- Choose the mode:
- Unsupervised — every row streams straight through.
- Supervised — the stream pauses on any row whose confidence falls below a supervised threshold (default 0.90) and waits for you.
- Comparison — pick an existing classification column (e.g. a
full_designationcolumn with codes an operator already assigned outside this tool). Every row is classified as usual, then audited against that existing code using the same knowledge base, plant schema and retrieved evidence — producing a verdict (match / partial / mismatch), a field-by-field diff, and a recommended code. The stream pauses on any row that isn't an exact match and waits for you.
- Set model/threshold parameters, then click Classify.
Real-time progress
Results stream in via Server-Sent Events as each row finishes — you don't wait for the whole file. A progress bar and a live "Classifying N/total" counter track overall progress. Pause stops the stream before the next signal starts; Resume picks it back up — useful for stepping away mid-run without losing place.
Operator feedback (supervised mode)
When a row's confidence is below the threshold, a feedback modal opens with:
- The signal description and the proposed code (pre-filled and editable — type a different code to correct it directly).
- The full classification detail for that row (reasoning, retrieved evidence) loaded on demand.
- A free-text field for feedback, e.g. explaining why the right code is different.
- Send feedback (apply it and continue) or Skip (continue without correcting).
Whatever you submit is immediately folded into that run's conversation memory — the LLM sees your correction as context for every signal classified afterwards in the same run, so it doesn't repeat the mistake. It's also persisted to the SQLite learning store (see Learning from Corrections).
You can also revisit any already-classified row: click it to open a side panel with a Re-classify form, where you can give feedback or a direct correction after the fact — the correction is folded into the conversation memory the same way.
Comparison mode
Comparison mode reuses the same feedback modal as supervised mode, but the pause condition and the modal content differ:
- The stream pauses only when the audit verdict is partial or mismatch — never on confidence alone.
- The row detail panel (and the modal, loaded from it) shows a "Comparison
with existing classification" section: the existing code, this system's
code, a field-by-field agreement table, the verdict, and a recommended
code with its source (
llm,operator, orhybrid). - The "Classified code" field in the feedback form is pre-filled with the recommended code rather than this system's raw classification — edit or accept it, then Send feedback as usual.
- The results table gets an extra Audit column (✓ match / ~ partial / ✕ mismatch) so you can scan agreement across the whole run at a glance.
- CSV export gains three extra columns in this mode:
existing_code,audit_verdict,recommended_code.
End of run
A summary popup reports matched / rules / ok / errors counts. From there you can:
- Export the results to CSV.
- Persist the run's signals into that plant's dedicated collection (see Context Enrichment & Plant Memory) — shown only when a plant was selected and at least one row succeeded.
- Open the Wiki rules / Inferred schema suggestion panels — see Learning from Corrections.