LLMGui Control Center
Das LLMGui Control Center ist eine GTK3-Desktop-Applikation (llmgui-control.py) für Linux, die eine grafische Oberfläche für alle wesentlichen LLMGui-Funktionen bereitstellt. Es ist das primäre Interface für Modellverwaltung, Live-Chat, Benchmark-Läufe und Ergebnisauswertung.
Navigation
Starten
# Direkt
python3 llmgui-control.py
# Mit Abhängigkeiten
sudo apt install python3-gi gir1.2-gtk-3.0 gir1.2-webkit2-4.1
python3 llmgui-control.py
Voraussetzung: Laufender LLMGui-Server und Ollama-Instanz.
Interface-Übersicht
Das Control Center ist in mehrere Tabs unterteilt:
Tab: Modelle
Zeigt alle via Ollama verfügbaren Modelle mit detaillierten Metadaten:
| Spalte | Beschreibung |
|---|---|
| Modellname | Vollständiger Ollama-Modellname |
| Größe | Modellgröße in GB |
| VRAM | Geschätzter VRAM-Bedarf |
| Parameter | Parameteranzahl (7b, 14b, 27b, …) |
| Familie | Modell-Familie (qwen, llama, deepseek, …) |
| Quantisierung | Q4_0, Q8_0, F16, … |
| Benchmark | Letzter Benchmark-Score als Hint-Spalte |
Benchmark-Hints (Spalte "Benchmark"):
| Anzeige | Bedeutung |
|---|---|
— (grau) |
Noch kein Benchmark gelaufen |
⚡7.1 (blau) |
Nur Standard-Benchmark: avg. Tokens/s |
★8.5 (lila) |
Nur Planning-Benchmark: Total-Score |
⚡7.1 ★8.5 (grün) |
Beide Benchmarks vorhanden |
Tooltip zeigt Datum des letzten Runs. Hints werden aus allen benchmark_results_*.json und planning_results_*.json in benchmark/ gelesen.
Aktionen:
- Modell aktivieren / als Standard setzen
- Modell aus Ollama entfernen
- GPU-VRAM-Status via SSH-Abfrage (nvidia-smi) für Remote-Server wie dana
Tab: Chat
Vollwertiger Chat-Client direkt im Control Center:
- Streaming-Ausgabe mit Token-by-Token-Darstellung
- Slash Commands nutzbar
- Workspace-Pfad konfigurierbar
- Modell-Wechsel ohne Server-Neustart
Tab: Security
Der Security-Tab verwandelt LLMGui in ein vollwertiges Security Operations Center (SOC). Er besteht aus zwei Sub-Tabs: Findings und Trend & Vergleich.
Sub-Tab: Findings
Scan-Toolbar (oben, zwischen Stats-Cards und Findings-Tabelle):
| Element | Funktion |
|---|---|
| Pfad-Entry | Ziel-Verzeichnis für den Scan |
| Vuln Scan | POST /api/scan/vuln → Vulnerability-Scan (pip-audit, safety, semgrep) |
| Secret Scan | POST /api/scan/secrets → Secret-Erkennung (Regex + Entropie) |
| Spinner | Zeigt laufenden Scan an |
| Status-Label | Blau = läuft · Grün = fertig · Rot = Fehler |
Die Stats-Cards oben zeigen in Echtzeit: Total Findings · Critical · High · Offene / Behobene.
Die Findings-Tabelle (sortierbar nach allen Spalten) zeigt:
| Spalte | Inhalt |
|---|---|
| Severity | 💥 Critical · 🔴 High · 🟡 Medium · 💡 Low |
| Tool | bandit / pip-audit / safety / semgrep / … |
| ID | CVE-ID oder Regel-Code |
| Datei / Paket | Betroffene Datei (mit Zeile) oder Paketname |
| CVSS | Score 0.0–10.0 |
| Beschreibung | Schwachstellenbeschreibung |
| Fix | Verfügbare Fix-Version oder Hinweis |
| Status | open / fixed / verified_fixed |
Aktionen auf ausgewähltem Finding:
- Fix with AI — /sec-fix <id>: LLM generiert und wendet Patch an
- Verify Fix — /sec-verify <id>: Re-Exploit in Docker-Sandbox (nur wenn Status = fixed)
Live-Scan-Ergebnisse (noch nicht in DB) haben DB_ID = -1 → Fix-Button aktiv, Verify deaktiviert.
Health Grade (A–F): Basiert auf Anzahl offener Critical/High-Findings und FIM-Events. Wird vom LLM als CISO-Bewertung berechnet.
AI-FIM Judge: Intelligente Analyse von Dateisystem-Änderungen via /sec-monitor. Die KI unterscheidet zwischen Entwickler-Edits und potenziell schädlichem Tampering.
Sub-Tab: Trend & Vergleich
Visualisiert die Sicherheitslage über die Zeit via GET /api/security/trend:
| Element | Funktion |
|---|---|
| Zeitraum-Dropdown | 7 / 30 / 90 Tage / Gesamt |
| Refresh-Button | Lädt Trenddaten neu |
| Cairo-Linien-Chart | 4 Serien: critical (rot), high (orange), medium (gelb), low (blau) |
| X-Achse | Datum-Beschriftungen |
| Y-Gitter | Anzahl Findings |
| Legende | Farb-Zuordnung |
| Vergleichs-Panel | Delta erster ↔ letzter Tag: Δ Critical / Δ High / Δ Medium / Δ Total |
Der Trend-Tab wird nach jedem Live-Scan automatisch aktualisiert.
Tab: Tools & Konfiguration
Übersicht aller installierten Security- und Analyse-Tools:
| Spalte | Inhalt |
|---|---|
| Tool | Name (bandit, pip-audit, flake8, ruff, mypy, radon, vulture, pylint, safety, semgrep, …) |
| PATH | Gefundener System-Pfad |
| .pyz Bundle | Standalone-Bundle unter dist/tools/ vorhanden? |
| Beschreibung | Kurzbeschreibung |
| Aktion | Tool-spezifische Schaltflächen |
Aktions-Buttons:
- PYZ-Tools (bandit/safety/pip-audit/flake8/ruff/mypy/radon/pylint/vulture): Build .pyz → führt ./build_sec_tools.sh TOOLNAME aus
- System-Tools (semgrep/npm/shiv/ollama/git): Installieren → jeweiligen install-Command
- Status aktualisieren — aktualisiert alle Einträge
- Alle Sec-Tools bauen — baut alle .pyz-Bundles auf einmal
- System-Install (pip) — installiert alle Sec-Tools via pip
Tab: Planning Benchmark
Der umfangreichste Teil des Control Centers — ein vollautomatischer Benchmark-Runner, der Modelle an einer realen, ausführbaren Coding-Aufgabe misst.
Planning Benchmark — Detail
Aufgabe
Jedes Modell bekommt denselben Prompt und soll ein lauffähiges Python-Skript generieren, das:
- Eine HTML-Indexseite scrapt und den Link zu
vex.tar.zstfindet - Das Archiv herunterlädt
- Den SHA256-Hash gegen eine
.sha256-Datei verifiziert - Das Zstandard-komprimierte Tar-Archiv entpackt (
mode="r|") - Die größte Datei (Bytes) und Datei mit meisten Zeilen ermittelt und ausgibt
- Eine
requirements.txtschreibt - venv-Setup-Befehle ausgibt
Das Skript wird tatsächlich ausgeführt — mit bis zu 5 Korrekturversuchen bei Fehlern. Die Ausgabe wird automatisch gegen eine Referenzlösung (Ground Truth) verglichen.
Ablauf
1. setup_exec_env() — exec_venv mit Paketen vorbereiten
2. start_fixture_server() — lokaler HTTP-Server für Testdaten
3. establish_ground_truth() — Referenzlösung ausführen
4. Pro Modell (max 5 Versuche):
a. LLM generiert test2.py
b. Skript ausführen
c. Bei Fehler: Fehlermeldung → LLM → Korrektur → Retry
d. Bei Erfolg: Unit-Tests + Correctness-Verifikation
5. Ergebnisse speichern (JSON)
Scoring: Ergebnis-first
Das Scoring gewichtet das korrekte Endergebnis am stärksten. Ein schöner Plan oder eleganter Code nützt nichts, wenn falsche Werte im Output stehen.
6-dim (Correctness + Unit-Tests verfügbar — voller Run):
| Dimension | Gewicht | Was wird gemessen? |
|---|---|---|
| Correctness | 40% | Stehen SHA256, größte Datei, Zeilenzahl korrekt im Output? |
| Unit-Tests | 20% | pytest-Verifikation der Artefakte |
| Implementation | 15% | Valides Python, alle Bibliotheken korrekt |
| Adherence | 10% | Alle 7 Aufgaben abgedeckt |
| Planning | 10% | Schritte benannt, Dependencies erkannt |
| Quality | 5% | Error-Handling, main-Guard, Kommentare |
5-dim Fallback (nur Unit-Tests, kein Correctness):
| Dimension | Gewicht |
|---|---|
| Unit-Tests | 40% |
| Implementation | 20% |
| Adherence | 15% |
| Planning | 15% |
| Quality | 10% |
4-dim Fallback (Skript lief nie — reine Heuristik):
| Dimension | Gewicht |
|---|---|
| Implementation | 40% |
| Adherence | 30% |
| Planning | 20% |
| Quality | 10% |
Wichtig: Modelle, die nie erfolgreich durchliefen, werden nur heuristisch (4-dim) bewertet. Dieser Score ist nicht direkt vergleichbar mit 6-dim-Scores von Modellen, die tatsächlich die Aufgabe gelöst haben.
Correctness-Checks
5 binäre Checks (0 oder 1), Summe / 5 × 10 = Correctness-Score:
| Check | Beschreibung |
|---|---|
sha256_in_output |
Korrekter SHA256-Hash im stdout? |
biggest_file_correct |
Richtiger Dateiname der größten Datei? |
biggest_bytes_correct |
Korrekte Dateigröße in Bytes? |
most_lines_file_correct |
Richtiger Dateiname der zeilenreichsten Datei? |
most_lines_count_correct |
Korrekte Zeilenzahl? |
LLM-as-Judge (optional)
Zusätzlich kann ein Judge-Modell (z.B. qwen2.5-coder:14b) den generierten Code qualitativ bewerten. Der Judge bewertet 4 Dimensionen (je 1–10):
- Correctness (laut Judge-Einschätzung)
- Completeness (alle Aufgaben abgedeckt?)
- Code Quality (Struktur, Lesbarkeit)
- Robustness (Fehlerbehandlung)
Der judge_total ist der Durchschnitt der 4 Werte. Der Judge-Score fließt nicht in den total_score ein — er dient als unabhängige Qualitätsperspektive.
Ergebnisdarstellung
Nach einem Benchmark-Run werden die Ergebnisse automatisch gespeichert (benchmark/planning_results_YYYYMMDD_HHMMSS.json) und im Control Center visualisiert:
- Rangliste (sortiert nach
total_score) - Radar-Chart (interaktiv, Legend-Klick um Modelle ein-/auszublenden)
- Score-Verlaufsgraph (Entwicklung über mehrere Runs)
- Detaillierte Checks (TreeView mit Tooltips für jeden einzelnen Check)
- Alle Modelle – letzter Stand: Kombinierte Ansicht aus allen JSON-Ergebnisdateien (letzter Run pro Modell)
Ergebnis-JSON-Format
{
"model": "phi4:14b",
"planning_score": 10.0,
"adherence_score": 8.75,
"implementation_score": 10.0,
"quality_score": 10.0,
"unit_test_score": 0.0,
"total_score": 7.08,
"scoring_mode": "6-dim",
"execution_passed": true,
"execution_attempts": 1,
"correctness_score": 8.0,
"correctness_checks": {
"sha256_in_output": false,
"biggest_file_correct": true,
"biggest_bytes_correct": true,
"most_lines_file_correct": true,
"most_lines_count_correct": true
},
"judge_total": 7.5,
"judge_reasoning": "...",
"response_time_s": 291.5,
"tokens_per_second": 5.57,
"timestamp": "2026-03-01T09:23:32"
}
VRAM-Monitoring
Das Control Center kann den GPU-VRAM eines Remote-Ollama-Servers (z.B. dana) via SSH/nvidia-smi abfragen:
- Automatische Erkennung geladener Modelle
- VRAM-Gesamtkapazität und -Auslastung
- Anzeige in der Modell-Liste und im VS Code Status Bar
Technische Details
| Aspekt | Details |
|---|---|
| Framework | GTK3 via Python-GI |
| Threading | Benchmark-Runs und Scans laufen in Background-Threads via threading.Thread |
| GTK-Thread-Safety | Alle UI-Updates via GLib.idle_add() |
| Charting | Matplotlib (eingebettet in GTK via FigureCanvasGTK3Agg) |
| Trend-Chart | Cairo-Linien-Chart direkt via GTK DrawingArea |
| Radar-Chart | Polar-Plot, interaktive Legende (Click to toggle) |
| ListStore | Korrekte int-Typen auch für Modellgrößen >2 GB |
| Fix-Loop | Max. 5 Versuche (1 Erstversuch + 4 Korrekturrunden) |
| Security-DB | ~/.brainy/security_findings.db (SQLite) — shared mit VS Code Extension |
| REST-Endpoints | GET /api/security/trend · POST /api/scan/vuln · POST /api/scan/secrets · GET /api/findings |