[ADR-0011] Execução de LLM Local via Inferência Nativa (Edge AI) | Wiki
[ADR-0011] Execução de LLM Local via Inferência Nativa (Edge AI)
- *Status:* Proposto
- *Data:* 17 de Maio, 2026
*Contexto:*
A biblioteca gbr_llm atualmente depende de provedores em nuvem (OpenAI, Anthropic, Google) via HTTP (gun). Embora a abstração agnóstica de provedores (ADR-0002) permita trocar de API facilmente, a dependência exclusiva de redes externas fere os princípios de privacidade absoluta (LGPD/GDPR), impede o uso em ambientes isolados (air-gapped / offline) e gera custos recorrentes de tokens. Como já possuímos uma base de execução de tensores locais (HuggingFace candle via Rust NIF) implementada para a vetorização semântica (gbr_vector), temos o alicerce necessário para estender essa capacidade para a geração de texto.
*Decisão:*
Implementaremos a capacidade de *Inferência Local Zero-Dependency* nativa na plataforma gleambr_ai.
-
*O Novo Provedor:* Criaremos um novo provedor no
gbr_llm/client/providerchamadolocal_edge(ounative). Este provedor não fará chamadas HTTP, mas implementará a interface despachando requisições para um novo Ator Gleam. -
*O Motor de Inferência (Rust NIF):* Expandiremos a nossa ponte Rust/Erlang (baseada em
candle) para carregar modelos quantizados (GGUF/Safetensors) otimizados para CPU/Metal, como Llama-3-8B-Instruct ou Phi-3-mini. -
*Gerenciamento de Scheduler OTP:* Como a geração de tokens é intensiva em CPU, a execução ocorrerá estritamente em threads
DirtyCpudo Rustler para não bloquear os schedulers normais da Erlang VM. A comunicação com o Ator de Sessão será feita emitindo tokens iterativamente de volta para o processo Erlang, simulando o efeito de Streaming SSE que já possuímos.
*Consequências:*
-
*Positivas:* Privacidade total de código (propriedade intelectual não sai da máquina do desenvolvedor); custo zero de execução após o download do modelo; funcionalidade 100% offline; consolida o
gleambr_aicomo uma ferramenta de defesa de segurança (Privacy-First). - *Negativas:* Aumento drástico no uso de memória RAM/VRAM da máquina hospedeira; o tamanho do binário distribuído aumentará significativamente caso o modelo de IA seja empacotado, ou exigirá uma etapa complexa de download/gerenciamento de modelos no primeiro uso.
Análise crítica
- *A Vitória Imediata (Ollama/Llama.cpp via HTTP):*
-
Vamos garantir que o nosso provedor genérico da OpenAI permita que o usuário injete um
base_urlvia variável de ambiente (ex:GBR_OLLAMA_URL). Isso nos dá "Edge AI Local" imediatamente, com streaming perfeito e zero esforço de código, aproveitando o que o ecossistema externo já construiu.
- *A "Opção Nuclear" (O NIF Nativo com Candle):*
- Vamos manter o NIF Rust na geladeira como uma prova de conceito (PoC). Quando formos refatorá-lo, o faremos direito: o NIF usará envio de mensagens assíncronas para a BEAM, respeitando a arquitetura de Streaming do ADR-0002 e suportando KV-Caching entre as perguntas para não precisarmos reprocessar o System Prompt (que é gigante por causa das ferramentas) a cada requisição.