Files
carinha-control-panel/docs/IA-LOCAL.md
T

5.9 KiB

Cérebro local — primeira integração

Executor transferido para S10

Por solicitação do usuário, inferência agora em http://192.168.1.16:8101. Drop-in ia-s10.conf aponta CARINHA_IA_URL no serviço carinha-pc; modelo no Orange Pi desligado (carinha-ai.service disabled). API, configuração e distribuição de comandos continuam no Orange Pi. Decisão real via S10 levou 1,96 s, contra ensaio anterior de 21,96 s na placa; eventos e contexto podem diferir, portanto não é benchmark pareado de latência.

APK 0.6-ia-local instalado com bibliotecas ARM64 do llama.cpp. Ao abrir o app, CerebroLocal prepara modelo em files/qwen3-q4.gguf, baixando pela rota local /ia/modelo se ausente e validando SHA256. Executável fica em nativeLibraryDir, extraído pelo instalador; não executa código baixado da rede. Processo usa 2 threads, contexto 1024, um slot, porta LAN 8101. Modelo só é copiado uma vez. Fecha processo próprio ao destruir a Activity; precisa manter Carinha aberto e reabrir após reiniciar telefone. Não é serviço de boot ou foreground independente do rosto nesta versão.

Durante a migração, o executor de teste em /data/local/tmp/carinha-ai pode ser reutilizado se já estiver escutando 8101. A compilação e instalação do APK integrado passaram; inicialização pelo app requer confirmação via logs após o usuário reabrir. Logs Android: tag CarinhaIA; log do processo em files/ia-runtime.log. Endpoint privado do app visível pelo run-as para diagnóstico autorizado.

Para trocar IP, atualizar CARINHA_IA_URL e reiniciar carinha-pc. Não altera firmware nem configuração da rede. Porta do modelo não deve ser encaminhada no roteador para a internet. Para retornar à placa, remover apenas o drop-in ia-s10.conf, habilitar carinha-ai e reiniciar carinha-pc; configuração de personalidade é preservada.

As seções abaixo registram os ensaios e a configuração anterior no Orange Pi.

Implementado em 2026-10-05. Qwen3-0.6B quantizado Q4_K_M, llama.cpp b11404 (commit a3a1c4747). O modelo oficial é da Qwen; GGUF usado é quantização Unsloth, revisão 50968a4468ef4233ed78cd7c3de230dd1d61a56b. Arquivo 396705472 bytes, SHA256 ac2d97712095a558e31573f62f466a3f9d93990898b0ec79d7c974c1780d524a, conferido após download.

Comparação medida

Mesmo modelo, CPU, dois threads, um ensaio por aparelho, prompt de 32 tokens e geração de 16:

Aparelho Recursos observados Prompt tokens/s Geração tokens/s
S10 SM-G973F universal9820 7,25 GiB total; 4,32 GiB disponíveis; 101 GB livres 125,21 39,94
Orange Pi Zero3 969 MiB total; cerca de 716 MiB disponíveis antes da IA 5,57 3,07

Conclusão: S10 tem significativamente mais capacidade neste ensaio. Cerca de 13x mais rápido em geração. São testes curtos, sem avaliação de temperatura, bateria ou carga longa. Não representam latência garantida de uma conversa completa.

Runtime Android foi testado via ADB em /data/local/tmp/carinha-ai, sem iniciar aplicativo pelo comando am start. Não está incorporado ao APK nem é serviço Android persistente nesta etapa. Não confundir benchmark com executor de produção no telefone. Uma futura integração nativa pode oferecer esse executor atrás da API central, mantendo troca de aparelhos. Nesta entrega o cérebro ativo continua no Orange Pi conforme preferência inicial.

Instalação ativa

  • /opt/carinha-ai/models/qwen3-0.6b-q4.gguf
  • Runtime /opt/carinha-ai/llama-b11404
  • carinha-ai.service habilitado no boot; endpoint restrito 127.0.0.1:8101.
  • Contexto 1024, um slot, dois threads, modo de pensamento desativado; prioridade Nice=10.
  • Aproximadamente 581 MB de memória contabilizada pelo serviço no ensaio; inclui páginas de arquivo e buffers. Sistema reportou cerca de 587 MiB disponíveis e 107 MiB swap usada depois dos testes/instalação.
  • Caso real: saudacao -> surpreso, resposta JSON validada, 21,96 segundos. A decisão real no Orange Pi é lenta; animações e controles do app continuam independentes.

Personalidade

Painel principal: seção Personalidade · IA local. Ativar cérebro, escolher evento e Testar reação. Configuração persistente em /opt/carinha-pc/ia-config.json. Começa desativada. GET /ia/status mostra processamento, último gesto e erro; POST /ia/config {ativo:true}; POST /ia/evento {evento:"saudacao"}.

Eventos aceitos: som, movimento, saudacao, sozinho. Observação automática usa telemetria apenas com app online, acordado, sensores ativos. Intervalo mínimo 20 s entre inferências automáticas; curiosidade quando sozinho após 60 s. Memória curta de seis gestos por sessão, sem gravação de áudio ou vídeo. Uma inferência por vez. Modelo recebe somente evento e histórico curto, não imagens.

Modelo decide entre piscar, piscadinha, feliz, surpreso, coracao, olhar_esq, olhar_dir, olhar_baixo. JSON restrito por schema e validado novamente pelo servidor. Nenhum comando de pulso/motor permitido. Não é visão por modelo, reconhecimento de voz, conversa falada nem um controlador do braço. Desligar personalidade invalida a inferência em andamento antes de enfileirar ações. Uma expressão só entra na fila se celular ainda estiver conectado e acordado.

Validação: checksum, executáveis ARM nos dois aparelhos, benchmark real, inferência estruturada real, testes da lista de intenções e 12 regressões do servidor. O personagem físico depende do app estar aberto e conectado; resposta facial ainda requer observação do usuário.

Recuperação: desativar personalidade pelo painel; systemctl disable --now carinha-ai libera executor; preservar modelo e ia-config.json. Servidor e controles de servos continuam carinha-pc em 8100. Logs: journalctl -u carinha-ai. Os arquivos do servidor antes da IA permanecem no workspace e backups de etapas anteriores.

Fontes: https://huggingface.co/Qwen/Qwen3-0.6B ; https://huggingface.co/unsloth/Qwen3-0.6B-GGUF ; https://github.com/ggml-org/llama.cpp/releases/tag/b11404