# ShinrAI für Open WebUI

Open WebUI wird mit dem selbst betriebenen ShinrAI-Relay verbunden. Ein verbindlicher globaler Filter prüft jeden Modellaufruf, nachdem Suchkontext und Werkzeugdefinitionen zusammengestellt wurden. Der Relay schützt die Daten vor der Weiterleitung an Ihren Modellanbieter. Lizenz: MIT. Direkte Installation möglich; kein Marketplace-Eintrag.

Getestet mit **Open WebUI 0.11.3**, lokalen MiniLM-Embeddings, beiden Antwortmodi, Streaming, fünf Dokumentvarianten und echter Dokumentensuche mit Quellen im Browser. Die vollständige Freigabe wird im QA-Bericht getrennt ausgewiesen.

## Installation

1. Das Open-WebUI-Paket von ShinrAI entpacken und in `open-webui` wechseln. Den benachbarten Ordner `python` beibehalten. `.env.example` nach `.env` kopieren und den Zugriff auf Administratoren beschränken.
2. ShinrAI-Dienstadresse und API-Schlüssel eintragen. Modelladresse, Modellname und Anbieterschlüssel für den Relay konfigurieren. Für `RELAY_API_KEY` und `WEBUI_SECRET_KEY` unabhängige Zufallswerte mit mindestens 32 Zeichen erzeugen. Administrator-E-Mail, Passwort und Anwendungsadresse festlegen.
3. Im Paketverzeichnis `docker compose up -d --build` ausführen. Außerhalb eines vertrauenswürdigen lokalen Netzes die Anwendung über Ihren authentifizierten HTTPS-Zugang bereitstellen. Der Relay erhält keinen öffentlichen Port.
4. In Open WebUI unter **Admin Panel → Functions → Import** die Datei `shinrai-filter.json` importieren. Die Funktion aktivieren und **Global** einschalten. Endanwender können sie nicht abschalten. Die Relay-Adresse muss mit der OpenAI-Verbindung übereinstimmen, normalerweise `http://shinrai-relay:8080/v1`.
5. Unter **Settings → Connections** nur die Relay-Verbindung mit ihrem eigenen Schlüssel verwenden. Nur `shinrai-private` und `shinrai-restored` anzeigen. Direkte Verbindungen, Ollama, Arena-Modelle und andere Modellwege deaktivieren. Die ursprünglichen Modellnamen verwenden; überschreibende Workspace-Modelle werden abgelehnt. Der ShinrAI-Filter muss nach anderen Request-Filtern ausgeführt werden. Öffnen Sie als Administrator `/shinrai/` und wählen Sie **Geschützte Modelle für Nutzer freigeben**. Damit erhalten angemeldete Nutzer Zugriff auf die beiden ursprünglichen Modell-IDs. Unter **Admin Panel → Einstellungen → Modelle** können Sie die Berechtigungen anschließend auf einzelne Nutzer/Gruppen beschränken. Ohne diesen Schritt sind nicht registrierte Modelle in Open WebUI 0.11.3 nur für Administratoren sichtbar.
6. Lokale Speicherung, Textextraktion und Embeddings beibehalten. Bei externen Einstellungen lehnt der Dokumentadapter Uploads ab.
7. Auf Ihrer Open-WebUI-Adresse `/shinrai/?lang=de` öffnen und **Verbindung und Datenschutz testen** wählen. Der Beispielname und die E-Mail müssen ersetzt werden. Im Chat die Adresse `max.mustermann@example.org` wiederholen lassen: Der private Modus zeigt einen Ersatz, der Wiederherstellungsmodus den erkannten Originalwert.
8. Ein synthetisches TXT-, PDF- oder DOCX-Dokument über den normalen Chat-Upload hochladen. Open WebUI indexiert geschützten Text. Eine geschützte PDF-Kopie steht unter `/shinrai/` für 24 Stunden bereit. Ergebnis vor dem Einsatz eigener Daten prüfen.

In einer vorhandenen Installation kann zunächst nur `shinrai_filter.py` zusammen mit dem Relay installiert werden. Der Dokumentadapter und die Downloadseite sind Bestandteil des mitgelieferten Anwendungsimages. Vor einem Imagewechsel Anwendungsdaten sichern. Den dauerhaften `WEBUI_SECRET_KEY` aufbewahren; für ein Rollback Image und passenden Datenstand gemeinsam wiederherstellen.

## Schutzumfang

- Geschützt werden Nachrichten, gefundener Kontext, unterstützte Textwerte in Werkzeugdefinitionen, Argumente, Ergebnisse und Folgeaufrufe. Numerische Standardwerte in Schemas und Protokollkennungen bleiben Struktureinstellungen. Numerische Laufzeitwerte werden geschützt oder bei unverträglichem Datentyp abgelehnt. Nicht unterstützte Bild-, Audio- und Datei-Modellinhalte werden gestoppt.
- **Pseudonyme beibehalten** zeigt Ersatzwerte. **Erkannte Werte wiederherstellen** stellt nur erkannte Ersatzwerte des jeweiligen Modellaufrufs im eigenen Relay wieder her. Zuordnungen gelangen nicht in den Modellkontext. Bereits geschützte Uploads behalten ihre Pseudonyme; ihre ursprünglichen Identitäten werden nicht gespeichert oder im Chat wiederhergestellt.
- Ihr Open-WebUI-Server empfängt Benutzereingaben und kann den lokal ausgewählten Originaldateinamen im Chat behalten. Der Uploadadapter übermittelt das Original zur Verarbeitung an ShinrAI, speichert und indexiert danach nur geschützten Text mit erzeugtem Dateinamen und verwirft Upload-Metadaten. Der mitgelieferte Relay verwendet `SHINRAI_RELAY_PROTOCOL=openwebui`: Er entfernt generierte Quellen- und Anhangsnamen aus Modellanfragen, erhält geprüfte Ressourcenkennungen und feste Protokollattribute und lehnt unbekannte Metadaten ab.
- TXT, PDF und DOCX: 10 MB, 100 Seiten, 125.000 extrahierte Zeichen, maximal fünf Minuten. Scans und eingebettete Bilder werden durch den isolierten OCR-Worker verarbeitet. PDF-Kopien sind gerasterte geschützte Ausgaben. Nicht unterstützte oder unvollständige Dokumente werden abgelehnt. Originale auf dem Benutzergerät bleiben erhalten.
- PDF-Kopien sind verschlüsselt, kontogebunden und laufen nach 24 Stunden ab. Löschen ist über authentifiziertes `POST /shinrai/documents/{id}/delete` möglich. Der getrennt indexierte geschützte Text und Chats werden über Open WebUI verwaltet.
- Erfasst werden neue Uploads über `/api/v1/files/`. Bestehende Bibliotheken, direkte Speicherimporte, externe Konnektoren, Bild-/Audiodienste und beliebige Netzwerkaufrufe weiterer Plugins werden nicht umgeschrieben. Externe Embeddings und zusätzliche externe Verarbeitungsdienste bleiben in dieser Referenz ausgeschaltet.

## Fehlerbehebung

Ein Schutzfehler stoppt den betroffenen Aufruf. Schlüssel, Guthaben, Dienstadresse und Relay-Verbindung prüfen. Bei neuen, nicht unterstützten Modellfeldern keinen ungeschützten Ersatzweg einrichten. Fehlende PDF-Kopien sind abgelaufen, gelöscht oder einem anderen Konto zugeordnet. Maximal vier Uploads werden gleichzeitig verarbeitet; bei ausgelasteter Warteschlange später erneut versuchen.

Die Erkennung ist probabilistisch. Prüfen Sie repräsentative Ergebnisse für Ihre Datentypen; nicht jeder mögliche sensible Wert wird garantiert erkannt.

Quellen: [Request-Filter](https://docs.openwebui.com/features/extensibility/plugin/functions/filter/), [Quellcode 0.11.3](https://github.com/open-webui/open-webui/tree/v0.11.3).

## Geprüftes Beispiel

Die [Screenshots](screenshots/) stammen aus der tatsächlich installierten Testumgebung mit synthetischen Daten. Ersatzwerte können bei jedem Lauf anders aussehen. Die gemeinsamen Beispieldateien und ein ausführbarer Verbindungstest liegen im Ordner `../fixtures/` des Downloadpakets.
