Skip to content

Releases: Kronos1027/AtlasKronos

AtlasKronos v1.0.1 — Correção crítica: importação de modelo via SAF

Choose a tag to compare

@Kronos1027 Kronos1027 released this 07 Aug 06:18

🤖 AtlasKronos v1.0.1

🐛 Problema crítico corrigido

Problema reportado: No Android 13+, o Scoped Storage bloqueia totalmente o acesso à pasta /Android/data/com.kronos1027.atlaskronos.debug/files/ — nenhum app de arquivos (Termux, ZArchiver) consegue copiar o modelo para lá. Era impossível colocar o modelo manualmente.

Causa técnica:

  • Isolamento em Sandbox: a pasta /Android/data/ é privada — só o próprio app tem acesso
  • Proteção Anti-Malware: Google bloqueou o acesso para evitar que apps leiam dados de outros
  • Bloqueio do Seletor do Sistema (SAF): a partir do Android 13, a permissão manual de sobreposição foi desativada no kernel

✨ Solução: importação nativa via SAF

O app agora tem um botão 'Selecionar modelo (.gguf)' que abre o seletor de arquivos do sistema (Storage Access Framework). O usuário baixa o modelo em Downloads (como faria normalmente), abre o AtlasKronos, toca no botão, escolhe o arquivo, e o próprio app copia o conteúdo para sua pasta interna onde tem acesso total.

📋 Como usar (passo a passo)

  1. Baixe o modelo (380MB) no navegador do celular:

    • URL: huggingface.co/bartowski/Qwen2.5-0.5B-Instruct-GGUF/resolve/main/Qwen2.5-0.5B-Instruct-Q4_K_M.gguf
    • O arquivo vai pra pasta Download
  2. Instale o APK v1.0.1 (por cima da v1.0.0 se já tinha instalado — não perde dados)

  3. Abra o AtlasKronos — vai aparecer uma tela de boas-vindas com:

    • Instruções claras (com o link acima)
    • Botão grande '📁 Selecionar modelo (.gguf)'
  4. Toque no botão — o seletor de arquivos do Android abre

  5. Navegue até Downloads e selecione o arquivo .gguf baixado

  6. Aguarde a cópia — barra de progresso mostra percentual + MB copiados (~10-30s)

  7. Pronto! O app mostra '✓ Modelo importado!' e abre a tela de chat

🔧 Melhorias técnicas

  • LlamaEngine.importModelFromUri() — copia via ContentResolver com buffer 64KB
  • InitCallback.onModelMissing() — notifica UI pra mostrar overlay de importação
  • Progresso em tempo real (percentual + bytes) durante a cópia
  • Aceita qualquer arquivo .gguf (não só nome fixo) — funciona com outros modelos
  • Deleta modelos antigos ao importar novo (mantém só 1)
  • takePersistableUriPermission() — pode re-ler o URI se necessário
  • Instruções claras com link clicável dentro do app

⚠️ Mesmas limitações da v1.0.0 (não testadas em device)

  • ❌ Não foi possível testar em emulador (sem KVM no ambiente)
  • ❌ Não foi possível testar em celular físico (sem ADB device conectado)
  • ✅ Build do APK: SUCCESSFUL em 22s
  • ✅ 13 libs nativas + 2 assets empacotados corretamente
  • ✅ Inferência do llama.cpp + Qwen2.5-0.5B validada no Linux x86_64 (25 tokens/s)
  • ✅ 5/5 testes de function-calling passaram no Linux
  • ✅ 24/24 testes unitários JVM passaram

Sobre a meta de 500MB RAM: continua não atingida (estimativa ~650MB). Trade-off documentado no README.

📥 Download

Baixe o AtlasKronos-v1.0.1-debug.apk abaixo (200MB).

💜 Créditos

Feito por Darlan (NATSKY)@Kronos1027

AtlasKronos Android v1.0.0 — MVP (IA local offline)

Choose a tag to compare

@Kronos1027 Kronos1027 released this 07 Aug 05:13

🤖 AtlasKronos Android v1.0.0 — MVP

Assistente de IA brasileiro 100% offline para Android, rodando Qwen2.5-0.5B via llama.cpp.

⚠️ LEIA ANTES DE USAR — Estado de testes honesto

Este MVP foi desenvolvido num ambiente sem emulador Android (sem /dev/kvm) e sem dispositivo físico ADB conectado. Portanto:

✅ O que FOI testado de verdade

Teste Resultado
Inferência llama.cpp + Qwen2.5-0.5B no Linux ✓ 25 tokens/s
Function-calling — 4 prompts (whatsapp/chrome/configuracoes/camera) ✓ JSON válido em 4/4
Conversa normal em português ✓ Respondeu corretamente
Build APK debug ✓ 35s, 200MB
24 testes unitários JVM ✓ 24/24 passaram

❌ O que NÃO foi testado (precisa de device Android)

  • ❌ Instalar o APK num emulador/celular
  • ❌ Validar que o llama-cli executa no Android
  • ❌ Medir RAM real com adb shell dumpsys meminfo
  • ❌ Testar 'abre o WhatsApp' via PackageManager de verdade
  • ❌ Validar visualmente o rosto animado

📊 Sobre a meta de 500MB de RAM

Não atingida com qualidade mínima de conversa. Trade-off real:

Configuração RAM estimada Qualidade
Qwen2.5-0.5B Q4_K_M (atual) ~650MB Boa — faz function-calling
Qwen2.5-0.5B Q3_K_S ~510MB Razoável — erra JSON às vezes
TinyLlama-1.1B Q2_K ~400MB Ruim — não segue instruções

O MVP usa Q4_K_M porque sem function-calling confiável, o 'abre o WhatsApp' não funciona.

🎯 Funcionalidades do MVP

  1. ✅ App Android instalável (APK debug, 200MB)
  2. ✅ Chat com contexto (sliding window 20 turns, ~2048 tokens)
  3. ✅ Rosto animado fofo (Canvas, 5 estados: IDLE/LISTENING/THINKING/SPEAKING/HAPPY)
  4. ✅ Function-calling: abrir apps por comando de texto
  5. ✅ Memória local: fatos extraídos do chat são persistidos (Room) e injetados no system prompt
  6. ✅ HUD técnico: modelo + RAM em tempo real + tokens/s
  7. ✅ Tema deep-tech idêntico ao portfólio NATSKY

📦 Instruções de uso

1. Baixar o modelo GGUF (NÃO vem no APK — 380MB)

O APK não inclui o modelo (ficaria gigante). Baixe manualmente:

curl -L -o qwen2.5-0.5b-instruct-q4_k_m.gguf \
  https://huggingface.co/bartowski/Qwen2.5-0.5B-Instruct-GGUF/resolve/main/Qwen2.5-0.5B-Instruct-Q4_K_M.gguf

adb push qwen2.5-0.5b-instruct-q4_k_m.gguf \
  /sdcard/Android/data/com.kronos1027.atlaskronos.debug/files/models/

Ou coloque em /sdcard/Download/atlaskronos/models/.

2. Instalar o APK

adb install AtlasKronos-v1.0.0-debug.apk

3. Testar

  • "oi! quem é você?" → conversa normal
  • "abre o whatsapp" → abre o WhatsApp
  • "abre o chrome" → abre o Chrome
  • "abre as configurações" → abre Settings
  • "abre a câmera" → abre a câmera
  • "meu nome é Darlan" → aprende seu nome

📋 Checklist de aceite

Item Status
🧪 App instala e abre sem crashar ❌ NÃO TESTADO (sem device)
🧪 Conversa offline com contexto ⚠️ PARCIAL (inferência validada no Linux)
🧪 Rosto animado troca de estado ⚠️ PARCIAL (código compilou)
🧪 3+ comandos 'abrir app' ⚠️ PARCIAL (4/4 JSON no Linux; Intent não testado)
🧪 RAM real medida ❌ NÃO TESTADO (estimativa ~650MB)
🧪 Fato influencia resposta ⚠️ PARCIAL (lógica implementada)
Commit/autoria corretos ✓ OK

🏗️ Stack

  • Linguagem: Java 17 (com Java 21 features via desugaring)
  • UI: Views XML + ConstraintLayout + Canvas (sem Compose)
  • DB: Room 2.6.1 (conversations + user_facts)
  • LLM: llama.cpp b10298 (binário ARM64 pré-compilado)
  • Modelo: Qwen2.5-0.5B-Instruct Q4_K_M (379MB GGUF)
  • Tema: Material 3 dark + paleta deep-tech

💜 Créditos

Feito por Darlan (NATSKY)@Kronos1027

⚠️ Aviso

O app usa QUERY_ALL_PACKAGES para listar apps instalados (necessário para function-calling). Esta permissão é restrita na Play Store para apps públicos, mas é aceita em instalações via APK (sideload).

📄 Licença

MIT License.