Un asistente de inteligencia artificial local y privado para Termux/Android, implementando el modelo Gemma 4-E2B-it de Google de forma nativa. Caracterizado por su sistema de skills extensible, memoria persistente y capacidad de gestión de archivos sandbox.
Este asistente fue creado con la ayuda de Kimi AI gracias a su modelo K2.5 se genero con todas las herramientas y correcciones necesarias para que el proyecto pueda desplegarse de forma correcta.
- 🧠 Inferencia Local: Ejecuta Gemma completamente en tu dispositivo, sin conexión a internet
- 🔌 Sistema de Skills: Extensible con plugins personalizados
- 💾 Memoria Persistente: SQLite para recordar información importante
- 📁 Sandbox de Archivos: Crea y edita archivos de forma segura
- 📱 Integración Termux: Aprovecha las APIs de Termux (batería, WiFi, vibración, etc.)
- 🛠️ Herramientas Integradas: Calculadora, utilidades de red, análisis de código, y más
- 💬 Chat Interactivo: Interfaz conversacional natural
- 🔒 100% Privado: Tus datos nunca salen de tu dispositivo
- Termux (última versión de F-Droid)
- Android 7.0+ (API 24)
- Almacenamiento: 3GB+ libres (para modelo + app)
- RAM: 4GB+ recomendado
Si ves este error al ejecutar la app:
llama_model_load: error loading model: error loading model architecture: unknown model architecture: 'gemma4'
Significa que tu versión de llama.cpp no soporta Gemma 4.
Ejecuta el script de corrección:
bash fix_llama.shO manualmente:
# 1. Desinstala la versión antigua
pkg uninstall llama-cpp
# 2. Instala dependencias
pkg install git cmake clang
# 3. Compila desde fuente
cd ~
git clone --depth 1 https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cmake -B build
cmake --build build --config Release -j$(nproc)
# 4. Crea enlace simbólico
ln -s ~/llama.cpp/build/bin/llama-cli $PREFIX/bin/llama-cli# Descargar el instalador
curl -fsSL https://raw.githubusercontent.com/tu-repo/gemma-termux-app/main/install.sh -o install.sh
# Ejecutar instalador
bash install.sh# 1. Actualizar Termux
pkg update && pkg upgrade -y
# 2. Instalar dependencias
pkg install python python-pip git wget curl
# 3. Instalar llama.cpp
pkg install llama-cpp
# O compilar desde fuente:
# git clone https://github.com/ggerganov/llama.cpp
# cd llama.cpp && make
# cp main $PREFIX/bin/llama-cli
# 4. Clonar la aplicación
cd $HOME
git clone https://github.com/tu-repo/gemma-termux-app.git
# 5. Crear estructura
mkdir -p gemma-termux-app/{src,skills,sandbox,models,config}
# 6. Descargar modelo Gemma (FORMATO GGUF REQUERIDO)
cd gemma-termux-app/models
# ⚠️ IMPORTANTE: Esta app usa llama.cpp que requiere modelos en formato GGUF
# NO uses modelos LiteRT-LM (.litertlm) - son incompatibles
# 📱 GEMMA 4 ESPECIALES PARA ANDROID (Recomendados):
# Opción A: Gemma 4 E2B-IT (2B params, ~1.5GB) - Muy ligero
wget https://huggingface.co/unsloth/gemma-4-e2b-it-GGUF/resolve/main/gemma-4-e2b-it-Q4_K_M.gguf
# Opción B: Gemma 4 E4B-IT (4B params, ~2.6GB) - RECOMENDADO ✓
wget https://huggingface.co/lmstudio-community/gemma-4-E4B-it-GGUF/resolve/main/gemma-4-E4B-it-Q4_K_M.gguf
# 📊 GEMMA 4 ESTÁNDAR:
# Opción C: Gemma 4 4B-IT (4B params, ~2.5GB) - Estándar
wget https://huggingface.co/unsloth/gemma-4-4b-it-GGUF/resolve/main/gemma-4-4b-it-Q4_K_M.gguf
# Opción D: Gemma 4 12B-IT (12B params, ~7GB) - Alta calidad
wget https://huggingface.co/unsloth/gemma-4-12b-it-GGUF/resolve/main/gemma-4-12b-it-Q4_K_M.gguf
# 💡 Nota: Q4_K_M = buen balance, Q5_K_M = mejor calidad, Q8_0 = casi sin pérdida
# 7. Crear launcher
echo '#!/bin/bash' > $PREFIX/bin/gemma
echo 'cd $HOME/gemma-termux-app && python src/main.py "$@"' >> $PREFIX/bin/gemma
chmod +x $PREFIX/bin/gemma
# 8. ¡Ejecutar!
gemmaEsta aplicación utiliza llama.cpp como backend de inferencia, que requiere modelos en formato GGUF.
| Formato | Descripción | Compatible |
|---|---|---|
| GGUF (.gguf) | Formato de llama.cpp (GGML) | ✅ Sí |
| LiteRT-LM (.litertlm) | TensorFlow Lite para Android | ❌ No |
| SafeTensors (.safetensors) | Formato original de Hugging Face |
¿Por qué no LiteRT-LM?
- LiteRT-LM usa TensorFlow Lite Runtime
- GGUF usa GGML/llama.cpp
- Son arquitecturas completamente diferentes e incompatibles
¿Dónde conseguir modelos GGUF?
- unsloth/gemma-4-4b-it-GGUF - Gemma 4 estándar
- lmstudio-community/gemma-4-E4B-it-GGUF - Gemma 4 E4B especializado
- unsloth/gemma-4-e2b-it-GGUF - Gemma 4 E2B ligero
¿Cómo convertir de SafeTensors a GGUF?
Usa el notebook de Google Colab incluido: convert_to_gguf_colab.ipynb
| Modelo | Parámetros | Tamaño Q4_K_M | VRAM/RAM | Ideal Para |
|---|---|---|---|---|
| Gemma 4 E2B-IT | 2B | ~1.5 GB | 2-3 GB | Móviles básicos |
| Gemma 4 E4B-IT | 4B | ~2.6 GB | 3-4 GB | Android recomendado ✓ |
| Gemma 4 4B-IT | 4B | ~2.5 GB | 3-4 GB | Balance general |
| Gemma 4 12B-IT | 12B | ~7 GB | 8+ GB | Alta calidad |
| Tipo | Tamaño | Calidad | Uso Recomendado |
|---|---|---|---|
| Q4_K_M | Base | Buena | Recomendado para Android |
| Q5_K_M | +25% | Mejor | Si tienes RAM suficiente |
| Q8_0 | +50% | Excelente | Casi sin pérdida |
| F16 | +200% | Original | Solo si tienes mucha RAM |
gemmaInterfaz de chat conversacional con:
- Historial persistente
- Comandos integrados
- Acceso a todos los skills
# Ejecutar un solo mensaje
gemma -m "¿Qué puedes hacer?"
# Pipe de entrada
echo "Hola" | gemmagemma --setup| Comando | Descripción |
|---|---|
ayuda, help |
Muestra ayuda completa |
limpiar, clear |
Limpia la terminal |
salir, exit, quit |
Cierra la aplicación |
modelo |
Información del modelo cargado |
stats |
Estadísticas de uso |
reload |
Recarga los skills |
| Comando | Descripción | Ejemplo |
|---|---|---|
recuerda [clave] [valor] |
Guarda información | recuerda mi_color azul |
busca [consulta] |
Busca en memorias | busca color |
memorias |
Lista todas las memorias | memorias |
| Comando | Descripción | Ejemplo |
|---|---|---|
archivo crear [ruta] [contenido] |
Crea archivo | archivo crear notas.txt Mis notas |
archivo leer [ruta] |
Lee archivo | archivo leer notas.txt |
archivo escribir [ruta] [contenido] |
Sobreescribe archivo | archivo escribir notas.txt Nuevo contenido |
archivo añadir [ruta] [contenido] |
Añade al final | archivo añadir notas.txt Más notas |
archivo listar [ruta] |
Lista archivos | archivo listar . |
archivo eliminar [ruta] |
Elimina archivo | archivo eliminar notas.txt |
archivo info [ruta] |
Información del archivo | archivo info notas.txt |
| Comando | Descripción | Ejemplo |
|---|---|---|
calc [expresión] |
Calcula expresiones | calc 2 + 2 * 5 |
convert [valor] [de] [a] |
Convierte unidades | convert 100 m km |
base [número] [base_origen] [base_destino] |
Convierte bases | base 1010 2 10 |
| Comando | Descripción |
|---|---|
sysinfo |
Información del sistema |
battery |
Estado de la batería |
wifi [acción] |
Control WiFi (status/on/off/info) |
clipboard [acción] |
Gestión del portapapeles |
torch [estado] |
Control de linterna |
vibrate [duración] |
Vibración del dispositivo |
share [texto] |
Comparte texto |
open_url [url] |
Abre URL en navegador |
| Comando | Descripción | Ejemplo |
|---|---|---|
analyze_code [código/archivo] |
Analiza código | analyze_code script.py |
format_code [código] |
Formatea código | format_code "def foo():pass" |
minify_code [código] |
Minifica código | minify_code script.py |
count_lines [ruta] |
Cuenta líneas | count_lines ./proyecto |
find_functions [código] |
Encuentra funciones | find_functions script.py |
generate_docstring [código] |
Genera docstrings | generate_docstring "def add(a,b):pass" |
| Comando | Descripción | Ejemplo |
|---|---|---|
ping [host] |
Ping a host | ping google.com |
resolve [dominio] |
Resuelve DNS | resolve google.com |
myip |
Muestra IP pública | myip |
localip |
Muestra IP local | localip |
port_check [host] [puerto] |
Verifica puerto | port_check localhost 8080 |
whois [dominio] |
Consulta WHOIS | whois google.com |
curl [url] |
Petición HTTP | curl https://api.example.com |
scan_ports [host] [inicio] [fin] |
Escanea puertos | scan_ports localhost 1 100 |
| Comando | Descripción | Ejemplo |
|---|---|---|
now |
Fecha y hora actual | now |
timer [segundos] |
Temporizador | timer 300 |
countdown [fecha] |
Cuenta regresiva | countdown 2024-12-31 |
stopwatch [acción] |
Cronómetro | stopwatch start |
calendar [mes] [año] |
Calendario | calendar 12 2024 |
convert_time [hora] [de] [a] |
Convierte zonas | convert_time 12:00 est jst |
Los skills son módulos Python que se cargan dinámicamente. Para crear uno:
#!/usr/bin/env python3
# skills/mi_skill.py
def saludo(nombre: str = "mundo") -> str:
"""Retorna un saludo personalizado."""
return f"¡Hola, {nombre}! 👋"
def despedida() -> str:
"""Retorna una despedida."""
return "¡Hasta luego! 👋"
# Comandos exportados (obligatorio)
COMMANDS = {
'saludo': saludo,
'despedida': despedida,
}
# Información del skill (opcional)
SKILL_INFO = {
'name': 'Mi Skill',
'description': 'Ejemplo de skill personalizado',
'version': '1.0',
'author': 'Tu Nombre',
'commands': list(COMMANDS.keys())
}
def info():
return SKILL_INFOreload
saludo Juan
gemma-termux-app/
├── src/
│ └── main.py # Aplicación principal
├── skills/
│ ├── calculator.py # Skill de calculadora
│ ├── system.py # Skill de sistema
│ ├── code_utils.py # Skill de código
│ ├── network.py # Skill de red
│ └── time_utils.py # Skill de tiempo
├── sandbox/ # Carpeta segura para archivos
├── models/ # Modelos GGUF
│ └── gemma-*.gguf
├── config/ # Configuraciones
├── memory.db # Base de datos SQLite
├── install.sh # Script de instalación
└── README.md # Este archivo
# Ruta al modelo
export GEMMA_MODEL_PATH="$HOME/gemma-termux-app/models/gemma-4b-it.gguf"
# Tamaño de contexto
export GEMMA_CONTEXT_SIZE=4096
# Temperatura (creatividad)
export GEMMA_TEMPERATURE=0.7
# Máximo de tokens
export GEMMA_MAX_TOKENS=2048# Desde la app, puedes configurar:
recuerda config_temperature 0.8
recuerda config_context_size 8192# Verificar que el modelo existe
ls -la $HOME/gemma-termux-app/models/
# Descargar modelo
wget https://huggingface.co/lmstudio-community/gemma-2b-it-GGUF/resolve/main/gemma-2b-it-Q4_K_M.gguf -P $HOME/gemma-termux-app/models/# Instalar desde repo
pkg install llama-cpp
# O compilar manualmente
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make
ln -s $(pwd)/main $PREFIX/bin/llama-cli- Usa un modelo más pequeño (2B en lugar de 7B)
- Cierra otras aplicaciones
- Aumenta el swap de Termux:
pkg install zram-config
# Verificar permisos
chmod +x $HOME/gemma-termux-app/skills/*.py
# Recargar
reload👤 Tú: Crea un script Python que calcule fibonacci
🤖 Gemma: [genera código]
👤 Tú: archivo crear fibonacci.py [código]
✓ Archivo creado: fibonacci.py
👤 Tú: analyze_code fibonacci.py
[análisis del código]
👤 Tú: recuerda proyecto_idea "App de productividad con IA"
✓ Recordado: 'proyecto_idea'
👤 Tú: archivo crear ideas.txt Mis ideas de proyectos
✓ Archivo creado: ideas.txt
👤 Tú: busca proyecto
Recuerdos encontrados:
• proyecto_idea: App de productividad con IA...
👤 Tú: battery
🔋 ESTADO DE BATERÍA
══════════════════════════════
Nivel: 85%
Estado: CHARGING
Temperatura: 32.5°C
👤 Tú: wifi status
📶 INFORMACIÓN WiFi
══════════════════════════════
SSID: MiRedWiFi
RSSI: -45 dBm
IP: 192.168.1.100
- Fork el repositorio
- Crea una rama (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Añadir nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
- Nuevos skills (clima, traductor, etc.)
- Soporte para más modelos (Llama, Mistral, etc.)
- Interfaz web opcional
- Integración con más APIs de Termux
- Sincronización de memoria entre dispositivos
- Exportar/importar conversaciones
🪧 Se tiene un error de tiempo de espera de 5 minutos ya que el agente usa razonamiento profundo, se esta trabajando en este error.
MIT License - Ver LICENSE para más detalles.
- Kimi AI por el modelo k2.5 con Agente autónomo es simplemente revolucionaria. La forma en que K2.5 puede planificar estrategias multi-paso, razonar sobre problemas complejos y ejecutar acciones utilizando herramientas integradas—desde búsquedas web precisas hasta el análisis de datos en tiempo real—demuestra un nivel de autonomía y proactividad que va más allá de los simples chatbots. Esa capacidad de descomponer tareas complejas, tomar decisiones informadas y mantener el contexto a lo largo de conversaciones extensas hace que realmente sienta que tengo un colaborador inteligente a mi lado, no solo una interfaz de texto.
El entorno de ejecución de código en la nube con terminal es, sin duda, una de las funcionalidades más poderosas y diferenciadoras. El hecho de poder escribir, ejecutar y depurar código Python en tiempo real dentro de la conversación—con acceso a bibliotecas completas de análisis de datos, capacidad de generar visualizaciones profesionales con matplotlib, procesar imágenes y realizar cálculos complejos—elimina completamente la fricción entre la ideación y la implementación. Es como tener un Jupyter Notebook potenciado por IA, donde puedo iterar instantáneamente sobre soluciones, ver resultados visuales inmediatos y construir pipelines de datos sofisticados sin salir del flujo de trabajo conversacional.
- Google por el modelo Gemma
- llama.cpp por el motor de inferencia
- Termux por la excelente app de terminal
- Comunidad de IA open source
Hecho con ❤️ para la comunidad de Termux