Empezando
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/es/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.
Instalación
Section titled “Instalación”npm install @capgo/capacitor-llmnpx cap syncyarn add @capgo/capacitor-llmnpx cap syncpnpm add @capgo/capacitor-llmnpx cap syncbun add @capgo/capacitor-llmnpx cap syncConfiguración de la plataforma
Section titled “Configuración de la plataforma”iOS Configuración
Section titled “iOS Configuración”- iOS 26.0+: utiliza Apple Inteligencia de forma predeterminada (no se necesita modelo) - Recomendado
- iOS < 26.0: Requiere modelos personalizados de MediaPipe (experimental, puede tener problemas de compatibilidad)
Para modelos personalizados en versiones anteriores de iOS, coloque archivos de modelo en su paquete de aplicaciones iOS a través de “Copiar recursos del paquete” de Xcode.
Android Configuración
Section titled “Android Configuración”Coloque los archivos del modelo en su carpeta de activos Android:
android/app/src/main/assets/Necesita ambos archivos para Android:
- Archivo
.task(modelo principal) - Archivo
.litertlm(archivo complementario)
Descargar desde modelos Kaggle Gemma → pestaña “LiteRT (anteriormente TFLite)“
Modelos recomendados
Section titled “Modelos recomendados”Para Android (modelos Gemma-3)
Section titled “Para Android (modelos Gemma-3)”- Gemma 3 270M - El más pequeño y eficiente para dispositivos móviles (~240-400 MB) - Recomendado
- Gemma 3 1B - Modelo de generación de texto más grande (~892 MB-1,5 GB)
Descargue desde [modelos Kaggle Gemma] (https://www.kaggle.com/models/google/gemma) → Haga clic en la pestaña “LiteRT (anteriormente TFLite)“
Para iOS
Section titled “Para iOS”- Apple Inteligencia (iOS 26.0+) - Integrado, no necesita descarga - Recomendado
- Gemma-2 2B (experimental) - Puede tener problemas de compatibilidad con el formato
.task
Para modelos iOS personalizados, descárguelos desde Modelos Hugging Face MediaPipe
Importe el complemento e inicialícelo:
import { CapgoLLM } from '@capgo/capacitor-llm';import { Capacitor } from '@capacitor/core';
// Check if LLM is readyconst { readiness } = await CapgoLLM.getReadiness();console.log('LLM readiness:', readiness);
// Set the model based on platformconst platform = Capacitor.getPlatform();if (platform === 'ios') { // iOS: Use Apple Intelligence (default) await CapgoLLM.setModel({ path: 'Apple Intelligence' });} else { // Android: Use MediaPipe model await CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task' });}
// Create a chat sessionconst { id: chatId } = await CapgoLLM.createChat();
// Listen for AI responsesCapgoLLM.addListener('textFromAi', (event) => { console.log('AI response:', event.text);});
// Listen for completionCapgoLLM.addListener('aiFinished', (event) => { console.log('AI completed response');});
// Send a messageawait CapgoLLM.sendMessage({ chatId, message: 'Hello! How are you today?'});Funciones avanzadas
Section titled “Funciones avanzadas”Descargar modelos
Section titled “Descargar modelos”// Download a model from URLawait CapgoLLM.downloadModel({ url: 'https://example.com/model.task', filename: 'model.task'});
// For Android, download both .task and .litertlm filesawait 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'});
// Listen for download progressCapgoLLM.addListener('downloadProgress', (event) => { console.log(`Download progress: ${event.progress}%`); console.log(`Downloaded: ${event.downloadedBytes} / ${event.totalBytes}`);});Gestión de modelos
Section titled “Gestión de modelos”// Set a specific model with configurationawait CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8});
// Check readinessconst { readiness } = await CapgoLLM.getReadiness();if (readiness === 'ready') { // Model is loaded and ready}
// Listen for readiness changesCapgoLLM.addListener('readinessChange', (event) => { console.log('Readiness changed:', event.readiness);});API Métodos
Section titled “API Métodos”crearChat()
Section titled “crearChat()”Crea una nueva sesión de chat.
const { id: chatId } = await CapgoLLM.createChat();Devoluciones: Promise<{ id: string; instructions?: string }>
enviar mensaje(…)
Section titled “enviar mensaje(…)”Envíe un mensaje al LLM.
await CapgoLLM.sendMessage({ chatId: 'chat-id', message: 'What is the weather like?'});| Parámetro | Tipo | Descripción |
|---|---|---|
chatId | string | ID de sesión de chat |
message | string | Mensaje para enviar |
obtener preparación()
Section titled “obtener preparación()”Verifique si el LLM está listo para usar.
const { readiness } = await CapgoLLM.getReadiness();Devoluciones: Promise<{ readiness: string }>
Valores posibles:
ready- El modelo está cargado y listoloading- Se está cargando el modelonot_ready- Modelo aún no cargadoerror- Error al cargar el modelo
establecerModelo(…)
Section titled “establecerModelo(…)”Establezca la configuración del modelo.
// iOS: Use Apple Intelligence (recommended)await CapgoLLM.setModel({ path: 'Apple Intelligence'});
// iOS: Use custom MediaPipe model (experimental)await CapgoLLM.setModel({ path: 'Gemma2-2B-IT_multi-prefill-seq_q8_ekv1280', modelType: 'task', maxTokens: 1280});
// Android: Use MediaPipe modelawait CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8});```| Parámetro | Tipo | Descripción || --------------- | -------- | ------------------------------------------------- || **`path`** | `string` | Ruta del modelo o "Apple Inteligencia" para el sistema iOS || **`modelType`** | `string` | Opcional: tipo de archivo de modelo (por ejemplo, "tarea", "bin") || **`maxTokens`** | `number` | Opcional: tokens máximos que maneja el modelo || **`topk`** | `number` | Opcional: Número de tokens considerados en cada paso || **`temperature`** | `number` | Opcional: Aleatoriedad en la generación (0,0-1,0) || **`randomSeed`** | `number` | Opcional: Semilla aleatoria para generación |
### descargarModelo(...)
Descargue un modelo desde la URL y guárdelo en el almacenamiento del dispositivo.
```typescriptawait 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'});| Parámetro | Tipo | Descripción |
|---|---|---|
url | string | URL para descargar desde |
companionUrl | string | Opcional: URL del archivo complementario (.litertlm) |
filename | string | Opcional: Nombre de archivo para guardar como |
Devoluciones: Promise<{ path: string; companionPath?: string }>
Eventos
Section titled “Eventos”textoDeAi
Section titled “textoDeAi”Se activa cuando la IA genera texto (respuesta de transmisión).
CapgoLLM.addListener('textFromAi', (event) => { console.log('AI text:', event.text); console.log('Chat ID:', event.chatId); console.log('Is chunk:', event.isChunk);});Datos del evento:
text(cadena) - Fragmento de texto incremental de AIchatId(cadena) - ID de sesión de chatisChunk(booleano): si se trata de un fragmento completo o de datos de transmisión parciales
aiTerminado
Section titled “aiTerminado”Se dispara cuando la IA completa la respuesta.
CapgoLLM.addListener('aiFinished', (event) => { console.log('Completed for chat:', event.chatId);});Datos del evento:
chatId(cadena) - ID de sesión de chat
descargarProgreso
Section titled “descargarProgreso”Activado durante la descarga del modelo para informar el progreso.
CapgoLLM.addListener('downloadProgress', (event) => { console.log('Progress:', event.progress, '%'); console.log('Downloaded:', event.downloadedBytes, '/', event.totalBytes);});Datos del evento:
progress(número) - Porcentaje de descarga completada (0-100)downloadedBytes(número) - Bytes descargados hasta el momentototalBytes(número) - Total de bytes para descargar
preparaciónCambiar
Section titled “preparaciónCambiar”Se activa cuando cambia el estado de preparación del LLM.
CapgoLLM.addListener('readinessChange', (event) => { console.log('Readiness changed to:', event.readiness);});Datos del evento:
readiness(cadena) - El nuevo estado de preparación
Ejemplo completo
Section titled “Ejemplo completo”import { CapgoLLM } from '@capgo/capacitor-llm';import { Capacitor } from '@capacitor/core';
class AIService { private chatId: string | null = null; private messageBuffer: string = '';
async initialize() { // Set up model based on platform const platform = Capacitor.getPlatform();
if (platform === 'ios') { // iOS: Use Apple Intelligence (recommended) await CapgoLLM.setModel({ path: 'Apple Intelligence' }); } else { // Android: Use MediaPipe model await CapgoLLM.setModel({ path: '/android_asset/gemma-3-270m-it-int8.task', maxTokens: 2048, topk: 40, temperature: 0.8 }); }
// Wait for model to be ready let isReady = false; while (!isReady) { const { readiness } = await CapgoLLM.getReadiness(); if (readiness === 'ready') { isReady = true; } else if (readiness === 'error') { throw new Error('Failed to load model'); } await new Promise(resolve => setTimeout(resolve, 500)); }
// Create chat session const { id } = await CapgoLLM.createChat(); this.chatId = id;
// Set up event listeners 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 not initialized'); }
await CapgoLLM.sendMessage({ chatId: this.chatId, message }); }
onTextReceived(text: string) { // Update UI with streaming text console.log('Received:', text); }
onMessageComplete(fullMessage: string) { // Handle complete message console.log('Complete message:', fullMessage); }}
// Usageconst ai = new AIService();await ai.initialize();await ai.sendMessage('Tell me about AI');Soporte de plataforma
Section titled “Soporte de plataforma”| Plataforma | Apoyado | Requisitos |
|---|---|---|
| iOS | ✅ | iOS 13.0+ (26.0+ para Apple Inteligencia) |
| Android | ✅ | API 24+ |
| Web | ❌ | No compatible |
Mejores prácticas
Section titled “Mejores prácticas”-
Selección de modelo: elija modelos según las capacidades del dispositivo
- Utilice 270M para la mayoría de los dispositivos móviles
- Utilice 1B para dispositivos de gama alta con más RAM
- Pruebe el rendimiento en los dispositivos de destino.
-
Administración de memoria: borre las sesiones de chat cuando haya terminado
// Create new chat for new conversationsconst { id } = await CapacitorLLM.createChat(); -
Manejo de errores: siempre verifique que esté listo antes de usar
const { readiness } = await CapacitorLLM.getReadiness();if (readiness !== 'ready') {// Handle not ready state} -
Interfaz de usuario de transmisión: actualice la interfaz de usuario de forma incremental con transmisión de texto
- Mostrar texto tal como llega a través de
onAiText - Marcar completo con
onAiCompletion
- Mostrar texto tal como llega a través de
-
Descarga de modelos: descarga modelos durante la configuración de la aplicación, no en el primer uso.
// During app initializationawait CapacitorLLM.downloadModel({url: 'https://your-cdn.com/model.task',filename: 'model.task'});
Solución de problemas### El modelo no se carga
Section titled “Solución de problemas### El modelo no se carga”- Verifique que el archivo del modelo esté en la ubicación correcta
- Verifique que el formato del modelo coincida con la plataforma (.gguf para iOS, .task para Android)
- Garantizar suficiente almacenamiento en el dispositivo
Mal desempeño
Section titled “Mal desempeño”- Pruebe un modelo más pequeño (270M en lugar de 1B)
- Cierra otras aplicaciones para liberar memoria.
- Prueba en un dispositivo real, no en un simulador
Sin respuestas
Section titled “Sin respuestas”- Verificar que el estado de preparación sea “listo”
- Verificar que los detectores de eventos estén configurados antes de enviar mensajes.
- Verifique la consola en busca de errores.