Erste Schritte
Copy a setup prompt with the install steps and the full markdown guide for this plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-llm`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/de/docs/plugins/llm/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Installation
Section titled “Installation”npm install @capgo/capacitor-llmnpx cap syncyarn add @capgo/capacitor-llmnpx cap syncpnpm add @capgo/capacitor-llmnpx cap syncbun add @capgo/capacitor-llmnpx cap syncPlattform-Konfiguration
Section titled “Plattform-Konfiguration”iOS-Konfiguration
Section titled “iOS-Konfiguration”- iOS 26.0+: Verwendet standardmäßig Apple Intelligence (kein Modell erforderlich) - Empfohlen
- iOS < 26.0: Erfordert benutzerdefinierte MediaPipe-Modelle (experimentell, kann Kompatibilitätsprobleme haben)
Für benutzerdefinierte Modelle auf älteren iOS-Versionen platzieren Sie Modelldateien über Xcode’s “Copy Bundle Resources” in Ihrem iOS-App-Bundle.
Android-Konfiguration
Section titled “Android-Konfiguration”Platzieren Sie Modelldateien in Ihrem Android-Assets-Ordner:
android/app/src/main/assets/Sie benötigen beide Dateien für Android:
.task-Datei (Hauptmodell).litertlm-Datei (Begleitdatei)
Download von Kaggle Gemma-Modelle → “LiteRT (formerly TFLite)“-Tab
Empfohlene Modelle
Section titled “Empfohlene Modelle”Für Android (Gemma-3-Modelle)
Section titled “Für Android (Gemma-3-Modelle)”- Gemma 3 270M - Kleinstes, effizientestes für Mobilgeräte (~240-400MB) - Empfohlen
- Gemma 3 1B - Größeres Textgenerierungsmodell (~892MB-1.5GB)
Download von Kaggle Gemma-Modelle → Klicken Sie auf “LiteRT (formerly TFLite)“-Tab
Für iOS
Section titled “Für iOS”- Apple Intelligence (iOS 26.0+) - Integriert, kein Download erforderlich - Empfohlen
- Gemma-2 2B (experimentell) - Kann Kompatibilitätsprobleme mit
.task-Format haben
Für benutzerdefinierte iOS-Modelle laden Sie von Hugging Face MediaPipe-Modelle herunter
Verwendung
Section titled “Verwendung”Plugin importieren und initialisieren:
import { CapgoLLM } from '@capgo/capacitor-llm';import { Capacitor } from '@capacitor/core';
// Überprüfen, ob LLM bereit istconst { readiness } = await CapgoLLM.getReadiness();console.log('LLM-Bereitschaft:', readiness);
// Modell basierend auf Plattform festlegenconst platform = Capacitor.getPlatform();if (platform === 'ios') { // iOS: Apple Intelligence verwenden (Standard) await CapgoLLM.setModel({ path: 'Apple Intelligence' });} else { // Android: MediaPipe-Modell verwenden await CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task' });}
// Chat-Sitzung erstellenconst { id: chatId } = await CapgoLLM.createChat();
// KI-Antworten abhörenCapgoLLM.addListener('textFromAi', (event) => { console.log('KI-Antwort:', event.text);});
// Auf Fertigstellung hörenCapgoLLM.addListener('aiFinished', (event) => { console.log('KI hat Antwort abgeschlossen');});
// Nachricht sendenawait CapgoLLM.sendMessage({ chatId, message: 'Hallo! Wie geht es dir heute?'});Erweiterte Funktionen
Section titled “Erweiterte Funktionen”Modelle herunterladen
Section titled “Modelle herunterladen”// Modell von URL herunterladenawait CapgoLLM.downloadModel({ url: 'https://example.com/model.task', filename: 'model.task'});
// Für Android beide .task- und .litertlm-Dateien herunterladenawait CapgoLLM.downloadModel({ url: 'https://example.com/gemma-3-270m-it-int8.task', companionUrl: 'https://example.com/gemma-3-270m-it-int8.litertlm', filename: 'gemma-3-270m-it-int8.task'});
// Download-Fortschritt abhörenCapgoLLM.addListener('downloadProgress', (event) => { console.log(`Download-Fortschritt: ${event.progress}%`); console.log(`Heruntergeladen: ${event.downloadedBytes} / ${event.totalBytes}`);});Modellverwaltung
Section titled “Modellverwaltung”// Spezifisches Modell mit Konfiguration festlegenawait CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8});
// Bereitschaft prüfenconst { readiness } = await CapgoLLM.getReadiness();if (readiness === 'ready') { // Modell ist geladen und bereit}
// Auf Bereitschaftsänderungen hörenCapgoLLM.addListener('readinessChange', (event) => { console.log('Bereitschaft geändert:', event.readiness);});API-Methoden
Section titled “API-Methoden”createChat()
Section titled “createChat()”Erstellt eine neue Chat-Sitzung.
const { id: chatId } = await CapgoLLM.createChat();Rückgabe: Promise<{ id: string; instructions?: string }>
sendMessage(…)
Section titled “sendMessage(…)”Sendet eine Nachricht an das LLM.
await CapgoLLM.sendMessage({ chatId: 'chat-id', message: 'Wie ist das Wetter?'});| Parameter | Typ | Beschreibung |
|---|---|---|
chatId | string | Chat-Sitzungs-ID |
message | string | Zu sendende Nachricht |
getReadiness()
Section titled “getReadiness()”Prüft, ob das LLM einsatzbereit ist.
const { readiness } = await CapgoLLM.getReadiness();Rückgabe: Promise<{ readiness: string }>
Mögliche Werte:
ready- Modell ist geladen und bereitloading- Modell wird geladennot_ready- Modell noch nicht geladenerror- Fehler beim Laden des Modells
setModel(…)
Section titled “setModel(…)”Setzt die Modellkonfiguration.
// iOS: Apple Intelligence verwenden (empfohlen)await CapgoLLM.setModel({ path: 'Apple Intelligence'});
// iOS: Benutzerdefiniertes MediaPipe-Modell verwenden (experimentell)await CapgoLLM.setModel({ path: 'Gemma2-2B-IT_multi-prefill-seq_q8_ekv1280', modelType: 'task', maxTokens: 1280});
// Android: MediaPipe-Modell verwendenawait CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8});| Parameter | Typ | Beschreibung |
|---|---|---|
path | string | Modellpfad oder “Apple Intelligence” für iOS-System |
modelType | string | Optional: Modelldateityp (z.B. “task”, “bin”) |
maxTokens | number | Optional: Maximale Token, die das Modell verarbeitet |
topk | number | Optional: Anzahl der betrachteten Token bei jedem Schritt |
temperature | number | Optional: Zufälligkeit bei der Generierung (0.0-1.0) |
randomSeed | number | Optional: Zufallsseed für Generierung |
downloadModel(…)
Section titled “downloadModel(…)”Lädt ein Modell von einer URL herunter und speichert es im Gerätespeicher.
await CapgoLLM.downloadModel({ url: 'https://example.com/gemma-3-270m-it-int8.task', companionUrl: 'https://example.com/gemma-3-270m-it-int8.litertlm', filename: 'gemma-3-270m-it-int8.task'});| Parameter | Typ | Beschreibung |
|---|---|---|
url | string | URL zum Herunterladen |
companionUrl | string | Optional: URL für Begleitdatei (.litertlm) |
filename | string | Optional: Dateiname zum Speichern |
Rückgabe: Promise<{ path: string; companionPath?: string }>
Ereignisse
Section titled “Ereignisse”textFromAi
Section titled “textFromAi”Wird ausgelöst, wenn KI Text generiert (Streaming-Antwort).
CapgoLLM.addListener('textFromAi', (event) => { console.log('KI-Text:', event.text); console.log('Chat-ID:', event.chatId); console.log('Ist Chunk:', event.isChunk);});Ereignisdaten:
text(string) - Inkrementeller Textabschnitt von KIchatId(string) - Chat-Sitzungs-IDisChunk(boolean) - Ob dies ein vollständiger Chunk oder partielle Streaming-Daten ist
aiFinished
Section titled “aiFinished”Wird ausgelöst, wenn KI die Antwort abgeschlossen hat.
CapgoLLM.addListener('aiFinished', (event) => { console.log('Abgeschlossen für Chat:', event.chatId);});Ereignisdaten:
chatId(string) - Chat-Sitzungs-ID
downloadProgress
Section titled “downloadProgress”Wird während des Modell-Downloads ausgelöst, um Fortschritt zu melden.
CapgoLLM.addListener('downloadProgress', (event) => { console.log('Fortschritt:', event.progress, '%'); console.log('Heruntergeladen:', event.downloadedBytes, '/', event.totalBytes);});Ereignisdaten:
progress(number) - Prozentsatz des abgeschlossenen Downloads (0-100)downloadedBytes(number) - Bisher heruntergeladene BytestotalBytes(number) - Gesamte zu ladende Bytes
readinessChange
Section titled “readinessChange”Wird ausgelöst, wenn sich der Bereitschaftsstatus des LLM ändert.
CapgoLLM.addListener('readinessChange', (event) => { console.log('Bereitschaft geändert zu:', event.readiness);});Ereignisdaten:
readiness(string) - Der neue Bereitschaftsstatus
Vollständiges Beispiel
Section titled “Vollständiges Beispiel”import { CapgoLLM } from '@capgo/capacitor-llm';import { Capacitor } from '@capacitor/core';
class AIService { private chatId: string | null = null; private messageBuffer: string = '';
async initialize() { // Modell basierend auf Plattform einrichten const platform = Capacitor.getPlatform();
if (platform === 'ios') { // iOS: Apple Intelligence verwenden (empfohlen) await CapgoLLM.setModel({ path: 'Apple Intelligence' }); } else { // Android: MediaPipe-Modell verwenden await CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8 }); }
// Warten, bis Modell bereit ist let isReady = false; while (!isReady) { const { readiness } = await CapgoLLM.getReadiness(); if (readiness === 'ready') { isReady = true; } else if (readiness === 'error') { throw new Error('Fehler beim Laden des Modells'); } await new Promise(resolve => setTimeout(resolve, 500)); }
// Chat-Sitzung erstellen const { id } = await CapgoLLM.createChat(); this.chatId = id;
// Event-Listener einrichten this.setupListeners(); }
private setupListeners() { CapgoLLM.addListener('textFromAi', (event) => { if (event.chatId === this.chatId) { this.messageBuffer += event.text; this.onTextReceived(event.text); } });
CapgoLLM.addListener('aiFinished', (event) => { if (event.chatId === this.chatId) { this.onMessageComplete(this.messageBuffer); this.messageBuffer = ''; } }); }
async sendMessage(message: string) { if (!this.chatId) { throw new Error('Chat nicht initialisiert'); }
await CapgoLLM.sendMessage({ chatId: this.chatId, message }); }
onTextReceived(text: string) { // UI mit Streaming-Text aktualisieren console.log('Empfangen:', text); }
onMessageComplete(fullMessage: string) { // Vollständige Nachricht verarbeiten console.log('Vollständige Nachricht:', fullMessage); }}
// Verwendungconst ai = new AIService();await ai.initialize();await ai.sendMessage('Erzähl mir von KI');Plattform-Unterstützung
Section titled “Plattform-Unterstützung”| Plattform | Unterstützt | Anforderungen |
|---|---|---|
| iOS | ✅ | iOS 13.0+ (26.0+ für Apple Intelligence) |
| Android | ✅ | API 24+ |
| Web | ❌ | Nicht unterstützt |
Bewährte Methoden
Section titled “Bewährte Methoden”-
Modellauswahl: Wählen Sie Modelle basierend auf Gerätefähigkeiten
- Verwenden Sie 270M für die meisten Mobilgeräte
- Verwenden Sie 1B für High-End-Geräte mit mehr RAM
- Testen Sie Leistung auf Zielgeräten
-
Speicherverwaltung: Chat-Sitzungen löschen, wenn fertig
// Neuen Chat für neue Konversationen erstellenconst { id } = await CapacitorLLM.createChat(); -
Fehlerbehandlung: Bereitschaft immer vor Verwendung prüfen
const { readiness } = await CapacitorLLM.getReadiness();if (readiness !== 'ready') {// Nicht-bereiten Zustand behandeln} -
Streaming-UI: UI inkrementell mit Streaming-Text aktualisieren
- Text anzeigen, wie er über
onAiTexteintrifft - Mit
onAiCompletionals vollständig markieren
- Text anzeigen, wie er über
-
Modell-Download: Modelle während App-Setup herunterladen, nicht bei erster Verwendung
// Während App-Initialisierungawait CapacitorLLM.downloadModel({url: 'https://your-cdn.com/model.task',filename: 'model.task'});
Fehlerbehebung
Section titled “Fehlerbehebung”Modell lädt nicht
Section titled “Modell lädt nicht”- Modelldatei am richtigen Ort überprüfen
- Modellformat mit Plattform abgleichen (.gguf für iOS, .task für Android)
- Ausreichenden Gerätespeicher sicherstellen
Schlechte Leistung
Section titled “Schlechte Leistung”- Kleineres Modell versuchen (270M statt 1B)
- Andere Apps schließen, um Speicher freizugeben
- Auf echtem Gerät testen, nicht im Simulator
Keine Antworten
Section titled “Keine Antworten”- Bereitschaftsstatus auf ‘ready’ prüfen
- Event-Listener vor dem Senden von Nachrichten einrichten
- Konsole auf Fehler überprüfen