GB
Voltar ao portfólio
#ios#swift#mlx#ai#product

Construindo o Junto: ML on-device no iOS com MLX-Swift

6 de março de 20264 min de leitura

O Problema com Apps de Finanças

A maioria dos apps de finanças pessoais cai em duas categorias: são planilhas glorificadas, ou mandam todos os seus dados para um servidor e chamam isso de "IA". Nenhuma das duas me agradou.

Dados financeiros estão entre os mais sensíveis que as pessoas possuem. Eu queria construir algo que de fato raciocina sobre seu comportamento financeiro — mas sem que seus dados saíssem do seu dispositivo.

É isso que o Junto é: um app de finanças onde a IA roda inteiramente no seu iPhone.

Por Que MLX-Swift?

Quando a Apple lançou o MLX-Swift, abriu algo genuinamente novo: rodar modelos de linguagem fine-tuned on-device com a eficiência do Apple Silicon. Não só modelos de classificação — LLMs reais, capazes de raciocinar em linguagem natural.

A proposta do Junto era simples: analisar suas transações, responder perguntas sobre suas finanças e gerar insights personalizados. Tudo localmente. Sem chamadas de API, sem servidor, sem dados saindo do seu celular.

A Arquitetura

A stack acabou sendo mais em camadas do que eu planejei inicialmente:

  • SwiftUI + SwiftData para interface e persistência local
  • MLX-Swift para inferência de LLM on-device
  • Fine-tuning com QLoRA em um modelo Qwen base, especializado em raciocínio de finanças pessoais brasileiras
  • Pipeline de RAG (VectorStore + EmbeddingService) para dar ao modelo contexto sobre as transações e metas reais do usuário
  • Pluggy API para sincronização via Open Finance — conectando a 300+ bancos brasileiros automaticamente
  • Gemini e Claude como fallback cloud para features premium
  • Supabase para autenticação e gerenciamento de tier de assinatura

Fine-Tuning: O Que Realmente Aconteceu

Treinei um adapter QLoRA sobre o Qwen usando o pipeline de treinamento do MLX. O objetivo era fazer o modelo entender terminologia financeira brasileira, categorias de transações e dar conselhos baseados nos dados reais do usuário — não dicas financeiras genéricas.

O treinamento do adapter funcionou. O problema veio na inferência.

O modelo base com que comecei — Qwen3 4B com quantização 4-bit — ficava em torno de 2-3GB. Mesmo quantizado, criava pressão de memória séria na maioria dos iPhones. Os tempos de carregamento eram lentos, os memory warnings eram constantes, e em dispositivos mais antigos simplesmente não era viável.

A solução: migrar para um modelo de 1.5B parâmetros. Menor, mais rápido, ainda capaz o suficiente para as tarefas de classificação e chat que o Junto precisa. O adapter LoRA precisou ser retreinado para a nova arquitetura — não ideal, mas o trade-off certo.

A Camada de RAG

Uma coisa que fez diferença real na qualidade das respostas: dar ao modelo acesso aos dados reais do usuário no momento da inferência.

Construí um pipeline de RAG local do zero:

  • Transações, metas e resumos de chat são embedados e armazenados em um VectorStore local (SwiftData)
  • No momento da query, os K itens mais relevantes são recuperados e injetados no contexto do modelo
  • O modelo de embedding roda on-device via Core ML, com fallback hash-based

Isso significa que quando você pergunta "por que gastei demais em janeiro?", o modelo tem suas transações de janeiro no contexto — não só um prompt genérico.

O Que Ainda É Difícil

ML on-device no iOS é genuinamente difícil de formas que não são óbvias de fora:

Tamanho do modelo vs. capacidade do dispositivo é uma negociação constante. O que roda bem num iPhone 15 Pro pode travar num iPhone 13.

O simulador é inútil para ML. MLX requer Metal, que não roda no simulador do iOS. Todo teste de inferência exige um dispositivo físico.

Gerenciamento de memória é brutal. O modelo de memória do SwiftUI e os requisitos de memória do MLX nem sempre cooperam. Auto-unload do modelo em memory warnings, limites de cache e degradação graciosa tudo teve que ser construído manualmente.

Status Atual

O Junto está em desenvolvimento final antes do beta no App Store. As features principais — controle de transações, chat com IA, gerenciamento de metas e o Marketplace (relatórios financeiros gerados por IA) — estão funcionando. Auth via Supabase integrada. A migração do modelo para 1.5B está em andamento.

Se quiser acesso antecipado ou quiser conversar sobre ML on-device no iOS, me manda uma mensagem.

GB

Gustavo Barra Felizardo

Estudante de CC na UFMG · Pesquisador @ FutureLab · Fundador da Solitus & Junto