First plugin to exercise the Studio-plugin translate hook end-to-end. Routes through an Ollama-shaped /api/chat endpoint configured via OLLAMA_ENDPOINT (default http://localhost:11434/api/chat). System prompt constrains the model to ONLY the translation — no commentary, no markdown frames — so the translate hook contract (plain string in, plain string out) stays honest. Declared permissions: net: localhost + net: 127.0.0.1 + net: ollama. Operator policy extends the ceiling for remote / cloud LLM endpoints. v0.1 limits: no glossary, no batching, no caching. Same SDK v0.1 single-world contract — declares Declined stubs for the theme and output-view hooks. Built artefact: ~108 KiB stripped wasm. Uploaded to releases.fai.flemming.ai (sha256 0101ed6e…) and reachable via `fai install studio.translate.ollama`. Signed-off-by: flemming-it <sf@flemming.it>
2.2 KiB
studio.translate.ollama
Translate-Hook-Plugin für F∆I Studio. Routet translate-
Aufrufe durch einen konfigurierten Ollama-/api/chat-Endpunkt
— so wird Server-gelieferter englischer Text (MCP-Tool-
Beschreibungen, n8n-Endpunkt-Namen, [EN]-gebadgete Strings)
in die aktive Studio-Sprache übersetzt, just-in-time.
Capability
studio.translate.ollama@0.1.0
Implementierter Hook
translate(text, from_locale, to_locale) -> string
Die anderen beiden Studio-Plugin-Hooks (theme, output-view)
liefern PluginError::Declined — dieses Plugin übersetzt nur.
Konfiguration
Liest zwei Umgebungsvariablen, die der Operator dem Plugin
über die env:-Berechtigung verfügbar macht:
| Variable | Default |
|---|---|
OLLAMA_ENDPOINT |
http://localhost:11434/api/chat |
OLLAMA_MODEL |
qwen2.5:14b |
Für andere Endpunkte (z.B. remote Inferenz-Node):
OLLAMA_ENDPOINT vor fai serve setzen und den Host in den
net:-Berechtigungen unten ergänzen.
Berechtigungen
permissions:
- "net: localhost"
- "net: 127.0.0.1"
- "net: ollama"
Operator:innen mit nicht-Loopback-Endpunkt erweitern ihre Operator-Policy-Ceiling um den Upstream-Host.
Wie der System-Prompt arbeitet
Das Plugin sendet zwei Nachrichten an das Modell: einen festen System-Prompt, der die Ausgabe auf NUR die Übersetzung einschränkt (keine Anführungszeichen, kein Kommentar, keine Erklärung), und eine User-Message mit dem Quelltext. Der Sprach-Hinweis steht im System-Prompt — das Modell behandelt ihn als Anweisung, nicht als zu übersetzenden Inhalt.
So bleibt der Translate-Hook-Vertrag ehrlich: der Caller erwartet einen reinen String zurück, keine markdown-umrahmte LLM-Antwort.
Grenzen in v0.1.0
- Kein Glossar / keine Terminologie-Liste — das Modell stützt sich auf sein Allgemeinwissen.
- Kein Batching. Jeder Aufruf ist ein HTTP-Request.
- Kein Caching. Studios Plugin-Host könnte in einer späteren Iteration einen pro-Aufruf-Cache ergänzen.
Build
cargo build --release --target wasm32-wasip2
# Ausgabe: target/wasm32-wasip2/release/studio_translate_ollama.wasm