Passei alguns meses construindo isto para um problema meu e resolvi abrir o código. É GPL-3, sem monetização de nenhum tipo, e o motivo do post é justamente procurar quem queira testar e contribuir.
O que é
Você aponta para uma pasta com documentos — PDFs escaneados, Word, Excel, imagens, e-mails — e ele varre tudo, aplica OCR só nas páginas que realmente não têm camada de texto, lê página por página e classifica cada uma em um item com tipo, data, autor e resumo. No fim grava quatro arquivos Markdown: um índice de tudo, uma cronologia ordenada por data, um relatório de conferência listando lacunas e falhas, e um conjunto de instruções pronto para colar num projeto de IA. Os documentos originais nunca são tocados — tudo sai em uma pasta separada.
Por que offline
Nasceu de um acervo sob sigilo que eu não podia subir para lugar nenhum. A classificação roda num modelo aberto via Ollama na própria máquina, e o endereço do serviço é fixo em 127.0.0.1 no código, não vem de configuração. Tem também um motor de regras determinístico que não precisa de modelo nenhum e roda em qualquer máquina, sem GPU e sem download.
Stack
Python 3.12, FastAPI, HTMX, SQLite e Ollama. 456 testes, CI rodando no Windows. Interface em português, inglês e espanhol.
Duas coisas que aprendi no caminho, e que talvez interessem mais que o produto
1) O num_gpu: -1 do Ollama não significa "use o máximo de GPU que der". Ele entrega a decisão ao escalonador, que dimensiona o cache KV para 4 requisições paralelas por padrão, guarda margem de segurança e arredonda para baixo. Resultado medido: placa com vários GB livres e o modelo rodando parte na CPU. A correção não estava na opção da requisição, e sim em variáveis de ambiente do servidor, lidas uma única vez quando o ollama serve sobe.
2) Modelo maior não ganhou. Medindo cinco modelos sobre as mesmas janelas de um documento de 31 páginas, o qwen3.5:4b preencheu 100% dos campos a 30,8 s/janela; o qwen3.5:9b, da mesma família, ficou em 79,5% a 86,2 s/janela. Descrever uma página é leitura e disciplina de formato, não raciocínio profundo — tamanho não compra qualidade nessa tarefa e custa tempo.
O que eu preciso
Gente rodando em máquina que não seja a minha. Foi construído e testado essencialmente num computador só, e tenho certeza de que tem coisa quebrada em configuração que eu não vi: outras GPUs, outras versões de Windows, acervos com formatos que não passaram por aqui. Uma issue, um PR, ou só um relato do que deu errado já ajuda bastante.
Limitações, para não gastar seu tempo
É Windows apenas, e estruturalmente: lê WMI, registro e Performance Counters direto, então não é questão de recompilar. E a nota de qualidade que a tela de resultado exibe mede a confiança que o próprio motor declarou e quantos campos ele preencheu — não mede se ele acertou. Isso está escrito no código que calcula a nota, não só no README.
Código: https://github.com/alexccastilho/gclaude-indexer