Embedding-Provider per Standard mitliefern (CPU-Dienst im Compose, Modell eingebacken) #70

Closed
opened 2026-10-20 19:27:51 +00:00 by alf · 0 comments
Owner

Problem

Ein frisch installierter Linux-Server hat keinen Embedding-Provider. Der Standard im Server ist „Ollama auf localhost:11434“ (app/embedding_config_routes.py), den es im Container nicht gibt. Der Server bringt keinen eigenen Embedding-Dienst mit: alle vier Provider (Ollama, LM Studio, OpenAI-kompatibel, mlx-vlm) sind nur Clients gegen einen anderen Dienst. Im Onboarding (Schritt „Embedding-Provider“) muss man deshalb etwas von Hand eintragen. Beim Test bleibt nur der Behelf, das Embedding-Modell von LM Studio auf dem Mac Studio zu nutzen (http://192.168.178.94:1235). Für ein Produktiv-Release geht das nicht: ohne Embeddings funktionieren die semantische Suche in Memory, Obsidian und Joplin nicht aus der Schachtel.

Randbedingungen

  • Die GPU eines Servers ist oft belegt (Dev-Host: RTX 4090 mit Strata für die Qwen-Flash-Modelle); Embeddings dürfen dort keine GPU brauchen.
  • Latenz ist unwichtig (Iris arbeitet „fire-and-forget“), die Qualität für deutsche Notizen schon.
  • Alles selbst gehostet, nichts aus einer Cloud; ein frischer Server soll ohne Handarbeit auskommen (und möglichst ohne Internet beim ersten Start).
  • Auf dem Dev-Host gibt es heute kein Ollama (kein Container, kein Binary, kein Dienst, nichts im Compose-Ordner); eine frühere manuelle Installation ist nicht in die Iris-Images eingegangen.

Vorschlag (zur Entscheidung)

  1. Neuer Compose-Dienst (z. B. embedding): offizielles Ollama-Image, nur CPU, Adresse http://embedding:11434 (kein Host-Port, nur im Docker-Netz), in docker-compose.yml und in der Deploy-Vorlage.
  2. Modell eingebacken: build-and-push.sh baut ein eigenes Image (iris-embedding) mit bereits geladenem Modell und veröffentlicht es mit den anderen Images. Der erste Start braucht kein Internet.
  3. Standard für neue Server: embedding_config ohne vorhandene Konfiguration = Provider ollama, URL http://embedding:11434, das eingebackene Modell. Im Onboarding vorgewählt; LM Studio, OpenAI-kompatibel und mlx-vlm bleiben wählbar. Der Server richtet die Konfiguration beim Start selbst ein, wie beim Git-Server.
  4. Bestandsserver: der Dienst kommt beim „Iris-Server aktualisieren“ per syncMissingComposeServices dazu (kein Host-Port nötig, darum keine Portkollision zwischen Instanzen); die Konfiguration eines Bestandsservers wird nicht überschrieben.

Offene Entscheidung

  • Modell. Kandidaten: bge-m3 (etwa 1,2 GB, mehrsprachig, 1024 Dimensionen, gut für Deutsch) oder nomic-embed-text (etwa 270 MB, englisch stärker). Vektoren verschiedener Modelle passen nicht zusammen: das Standardmodell sollte zu dem passen, mit dem der bestehende Index gebaut ist, sonst muss neu indiziert werden. Auf dem Mac Studio liegen bge-m3-mlx und text-embedding-nomic-embed-text-v1.5.
  • Ob ein Image-Aufbau mit eingebackenem Modell im Release-Ablauf (Größe, Bauzeit) akzeptabel ist oder das Modell beim ersten Start geladen werden soll.

Abnahme

  • Frischer Linux-Server (ohne Eintrag im Embedding-Schritt): Test der Verbindung im Onboarding grün, semantische Suche liefert Treffer, ohne dass ein Dienst auf einem anderen Rechner läuft und ohne GPU-Nutzung.
  • Zwei Instanzen auf einem Host: keine Portkollision.
  • Bestandsserver nach dem Update: Dienst da, bestehende Embedding-Konfiguration unverändert.
  • Unit-/Integrationstest gegen den echten Dienst (Modell antwortet mit Vektor der erwarteten Dimension).
## Problem Ein frisch installierter Linux-Server hat **keinen Embedding-Provider**. Der Standard im Server ist „Ollama auf `localhost:11434`“ (`app/embedding_config_routes.py`), den es im Container nicht gibt. Der Server bringt keinen eigenen Embedding-Dienst mit: alle vier Provider (Ollama, LM Studio, OpenAI-kompatibel, mlx-vlm) sind nur Clients gegen einen anderen Dienst. Im Onboarding (Schritt „Embedding-Provider“) muss man deshalb etwas von Hand eintragen. Beim Test bleibt nur der Behelf, das Embedding-Modell von LM Studio auf dem Mac Studio zu nutzen (`http://192.168.178.94:1235`). **Für ein Produktiv-Release geht das nicht**: ohne Embeddings funktionieren die semantische Suche in Memory, Obsidian und Joplin nicht aus der Schachtel. ## Randbedingungen - Die GPU eines Servers ist oft belegt (Dev-Host: RTX 4090 mit Strata für die Qwen-Flash-Modelle); Embeddings dürfen dort keine GPU brauchen. - Latenz ist unwichtig (Iris arbeitet „fire-and-forget“), die Qualität für **deutsche** Notizen schon. - Alles selbst gehostet, nichts aus einer Cloud; ein frischer Server soll ohne Handarbeit auskommen (und möglichst ohne Internet beim ersten Start). - Auf dem Dev-Host gibt es heute **kein Ollama** (kein Container, kein Binary, kein Dienst, nichts im Compose-Ordner); eine frühere manuelle Installation ist nicht in die Iris-Images eingegangen. ## Vorschlag (zur Entscheidung) 1. **Neuer Compose-Dienst** (z. B. `embedding`): offizielles Ollama-Image, **nur CPU**, Adresse `http://embedding:11434` (kein Host-Port, nur im Docker-Netz), in `docker-compose.yml` **und** in der Deploy-Vorlage. 2. **Modell eingebacken:** `build-and-push.sh` baut ein eigenes Image (`iris-embedding`) mit bereits geladenem Modell und veröffentlicht es mit den anderen Images. Der erste Start braucht kein Internet. 3. **Standard für neue Server:** `embedding_config` ohne vorhandene Konfiguration = Provider `ollama`, URL `http://embedding:11434`, das eingebackene Modell. Im Onboarding vorgewählt; LM Studio, OpenAI-kompatibel und mlx-vlm bleiben wählbar. Der Server richtet die Konfiguration beim Start selbst ein, wie beim Git-Server. 4. **Bestandsserver:** der Dienst kommt beim „Iris-Server aktualisieren“ per `syncMissingComposeServices` dazu (kein Host-Port nötig, darum keine Portkollision zwischen Instanzen); die Konfiguration eines Bestandsservers wird **nicht** überschrieben. ## Offene Entscheidung - **Modell.** Kandidaten: `bge-m3` (etwa 1,2 GB, mehrsprachig, 1024 Dimensionen, gut für Deutsch) oder `nomic-embed-text` (etwa 270 MB, englisch stärker). Vektoren verschiedener Modelle passen nicht zusammen: das Standardmodell sollte zu dem passen, mit dem der bestehende Index gebaut ist, sonst muss neu indiziert werden. Auf dem Mac Studio liegen `bge-m3-mlx` und `text-embedding-nomic-embed-text-v1.5`. - Ob ein Image-Aufbau mit eingebackenem Modell im Release-Ablauf (Größe, Bauzeit) akzeptabel ist oder das Modell beim ersten Start geladen werden soll. ## Abnahme - Frischer Linux-Server (ohne Eintrag im Embedding-Schritt): Test der Verbindung im Onboarding grün, semantische Suche liefert Treffer, ohne dass ein Dienst auf einem anderen Rechner läuft und ohne GPU-Nutzung. - Zwei Instanzen auf einem Host: keine Portkollision. - Bestandsserver nach dem Update: Dienst da, bestehende Embedding-Konfiguration unverändert. - Unit-/Integrationstest gegen den echten Dienst (Modell antwortet mit Vektor der erwarteten Dimension).
alf closed this issue 2026-10-27 10:43:40 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-linux-server#70
No description provided.