[PITCH] Treinei um pequeno LLM para escrever commits do Git offline
Boa noite, pessoal do TabNews!
Já faz um ano que sou entusiasta desse mundo dos LLMs locais open-source. Geralmente, gosto de manter meus commits pequenos e com mensagens claras quando trabalho em equipe. Por isso, quando o ChatGPT lançou a ferramenta GPTs, criei um modelo dedicado a escrever commits: o Git Commit Message Pro. Porém, encontrei uma limitação relacionada à privacidade. Foi aí que comecei a explorar o fine-tuning para criar um LLM local que pudesse gerar um rascunho inicial, necessitando apenas pequenas alterações posteriores. Utilizando o Ollama, montei o tavernari/git-commit-message.
tavernari/git-commit-message
Na primeira versão, utilizei como base o modelo Mistral de 7B, que ocupa aproximadamente 4.4 GB, podendo ser pesado dependendo das especificações da máquina. Embora funcionasse, os resultados ainda não eram satisfatórios o suficiente e eram lentos na geração das respostas.
Recentemente, tivemos um hype em torno do DeepSeekR1, um modelo menor que foi treinado para "pensar" melhor. Inspirado por essa ideia, resolvi criar minha própria versão reduzida focada especificamente em escrever commits.
Esta foi minha primeira experiência com fine-tuning. Apesar de ainda não considerar o resultado ideal, acredito que com mais tempo dedicado ao treinamento e refinamento da técnica, será possível atingir um nível aceitável.
Assim, surgiu a versão "reasoning" do modelo: tavernari/git-commit-message:reasoning. Essa versão utiliza um modelo de apenas 3B (1.9 GB) com capacidade de raciocínio aprimorada. Além disso, criei outra versão com Chain of Thought (Chain of Thought), que também apresentou bons resultados, embora ainda não tenha sido explorada a fundo.
Aqui estão exemplos comparativos de desempenho no mesmo computador:
Versão 7B - Mistral
Versão 3B - Qwen (Reasoning)
Versão 3B - Llama (Chain of Thought)
Git Commit Message Agêntico
Apesar do bom funcionamento, o modelo tinha dificuldades com contextos grandes. Por isso, criei um script agêntico que avalia os diffs do git por etapas, permitindo gerar commits sem que o LLM se perca no processo.
As funcionalidades do script incluem:
- Adicionar contexto ao LLM para melhorar a escrita do commit;
- Editar a mensagem antes da confirmação;
- Gerar apenas a mensagem (com a opção --only-message).
Instalação fácil pelo terminal, tem a explicação no perfil do modelo tavernari/git-commit-message
Objetivo do projeto
Minha meta com este modelo é proporcionar mensagens de commit suficientemente boas, que exijam apenas pequenos ajustes manuais e que funcionem totalmente offline, mantendo seu trabalho intelectual seguro e protegido.
Investi alguns recursos financeiros para realizar o fine-tuning, com o objetivo final de oferecer algo útil para a comunidade. Futuramente, pretendo dedicar mais tempo ao treinamento e refinamento para elevar a qualidade.
A ideia é oferecer uma ferramenta prática, eficiente e, principalmente, que mantenha seu trabalho protegido e seguro.
Fiquem à vontade para usar, sugerir e colaborar!
Meu hugginface https://huggingface.co/Tavernari/git-commit-message
Abraço!