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:

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:

  1. Eine HTML-Indexseite scrapt und den Link zu vex.tar.zst findet
  2. Das Archiv herunterlädt
  3. Den SHA256-Hash gegen eine .sha256-Datei verifiziert
  4. Das Zstandard-komprimierte Tar-Archiv entpackt (mode="r|")
  5. Die größte Datei (Bytes) und Datei mit meisten Zeilen ermittelt und ausgibt
  6. Eine requirements.txt schreibt
  7. 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):

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:

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:


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