Ogoat es una aplicación Android que permite ejecutar modelos de lenguaje (LLMs) localmente en tu dispositivo usando MediaPipe GenAI (LiteRT) y Gemini Nano. Incluye un servidor HTTP local con API REST y descargador de modelos desde Hugging Face.
- 🤖 Gemini Nano (NPU): Soporte nativo para Gemini Nano en dispositivos Pixel 8 Pro+ usando AICore
- 📱 Modelos Locales: Ejecuta modelos MediaPipe LiteRT completamente offline
- 🌐 Servidor HTTP Local: API REST para integración con otras apps
- 📥 Descarga de Modelos: Descarga automática desde Hugging Face
- 💬 Interfaz de Chat: UI sencilla para probar los modelos
- 🔐 Seguridad: API key opcional para proteger el servidor local
- 📋 Auto-copiar: Copia respuestas automáticamente al portapapeles
- Ve a Releases
- Descarga el último
Ogoat-vX.X.X.apk - En tu dispositivo Android:
- Ve a Configuración > Seguridad
- Habilita "Instalar desde fuentes desconocidas" para tu navegador/gestor de archivos
- Abre el APK descargado e instala
Nota: El APK está firmado con certificado de desarrollo. Es seguro instalarlo.
- Android 11+ (SDK 30)
- 2GB RAM mínimo
- Conexión a Internet (solo para descarga inicial de modelos)
- Dispositivo Pixel 8 Pro o superior
- Android 14+
- AICore instalado (Android System Intelligence desde Play Store)
- Bootloader bloqueado (no funciona con bootloader desbloqueado)
-
Primera vez:
- Abre la app
- Ve a la pestaña "Configuración"
- Opcional: Añade tu token de Hugging Face para descargar modelos privados
-
Usar Gemini Nano (Pixel 8 Pro+):
- La app detectará automáticamente si Gemini Nano está disponible
- Si ves "AICore aún no está listo", espera 5-10 minutos conectado a WiFi
- Una vez disponible, presiona "Usar Gemini Nano"
-
Usar modelos locales:
- Ve a la pestaña "Modelos HF"
- Busca un modelo compatible (ej: "Qwen/Qwen2.5-0.5B-Instruct")
- Descárgalo
- Ve a "Modelos Locales" y cárgalo
-
Chat:
- Abre la pestaña "Chat"
- Escribe tu mensaje y presiona enviar
Solución:
- Abre Google Play Store
- Busca "Android System Intelligence"
- Instálalo o actualízalo
Causa: AICore aún está descargando configuraciones en segundo plano.
Solución:
- Conecta el dispositivo a WiFi
- Conecta el dispositivo a corriente eléctrica
- Espera 10-15 minutos
- Reinicia la app e intenta de nuevo
Causa: El APK no está firmado o tu dispositivo no permite fuentes desconocidas.
Solución:
- Descarga el APK desde GitHub Releases (no uses builds de CI directamente)
- Habilita "Instalar desde fuentes desconocidas" en Configuración > Seguridad
- Si persiste, verifica que el archivo no esté corrupto (re-descárgalo)
Requisitos:
- Solo funciona en Pixel 8 Pro, Pixel 9, Pixel 9 Pro (XL)
- Requiere Android 14 o superior
- Bootloader debe estar bloqueado
- AICore debe estar actualizado
El servidor HTTP local expone los siguientes endpoints:
Genera texto usando el modelo cargado.
Headers:
Authorization: Bearer <tu-api-key> (opcional, si configuraste una)
Content-Type: application/json
Body:
{
"prompt": "¿Qué es la inteligencia artificial?",
"max_tokens": 512
}Response:
{
"response": "La inteligencia artificial es...",
"model": "Gemini Nano (Sistema)"
}Obtiene el estado del servidor y modelo actual.
Response:
{
"status": "ready",
"model": "Gemini Nano (Sistema)",
"using_nano": true
}app/src/main/java/com/mks/ogoat/ModelManager.kt: Gestiona la carga y ejecución de los modelos.app/src/main/java/com/mks/ogoat/OgoatService.kt: Servicio de fondo que mantiene el servidor Ktor.app/src/main/java/com/mks/ogoat/HFDownloader.kt: Utilidad para descargar modelos de Hugging Face.app/src/main/java/com/mks/ogoat/ChatActivity.kt: UI de chat.
Este proyecto utiliza un flujo de trabajo asistido por IA. Las siguientes reglas deben ser seguidas por cualquier agente de IA que trabaje en este repositorio.
-
Versionado Automático (Bumping):
- Cada vez que se realice un cambio significativo en el código (nuevas funcionalidades, corrección de errores, cambios en la API), el agente debe incrementar el
versionNameenapp/build.gradle.kts. - Si es un cambio menor o corrección: incrementar el tercer dígito (patch). Ejemplo:
0.1.1->0.1.2. - Si es una nueva funcionalidad: incrementar el segundo dígito (minor). Ejemplo:
0.1.1->0.2.0. - Si es un cambio mayor o ruptura de compatibilidad: incrementar el primer dígito (major). Ejemplo:
0.1.1->1.0.0. - El
versionCodedebe incrementarse en 1 con cada subida de versión.
- Cada vez que se realice un cambio significativo en el código (nuevas funcionalidades, corrección de errores, cambios en la API), el agente debe incrementar el
-
Documentación:
- Mantener el
README.mdactualizado con las nuevas capacidades. - Documentar las nuevas funciones en el código utilizando KDoc.
- Mantener el
-
Prácticas de Código:
- Seguir las convenciones de Kotlin de JetBrains.
- Asegurarse de que las tareas de red se realicen fuera del hilo principal.
- Gestionar correctamente los recursos de MediaPipe para evitar fugas de memoria.
Cuando el usuario pida realizar cambios en el código, el agente debe:
- Analizar el alcance del cambio.
- Aplicar los cambios solicitados.
- Abrir
app/build.gradle.kts. - Actualizar
versionNamesegún las reglas de SemVer mencionadas arriba. - Incrementar
versionCodeen 1. - Notificar al usuario sobre el incremento de versión realizado.