Executando verificação de segurança...
22

[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
7B

Versão 3B - Qwen (Reasoning)
3B Reasoning

Versão 3B - Llama (Chain of Thought)
3B

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

Agentic

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!

Carregando publicação patrocinada...
2

Eu gostaria de criar um para servir como copilot ao de 1.5b a 3b, só que não sei como fazer isso.

Pois quero treina-lo com as docs e projetos em uma linguagem especifica, que até o momento só o claude sonet conhece essa linguagem, e além disso queria algo bem personalizado e com propriedade sobre a linguagem.

Faz um vídeo ou um tuto por aqui de como treinar? please!

1

Pra fazer fine tuning você pode usar unsloth.ai.

Pois quero treina-lo com as docs e projetos em uma linguagem especifica, que até o momento só o claude sonet conhece essa linguagem, e além disso queria algo bem personalizado e com propriedade sobre a linguagem.

Treinar um modelo é uma tarefa cara e exige muitas horas e expertise.
Existe uma diferença no termo "treinar" e "ajustar" (Fine Tuning)!

Fine Tuning

Descartando a possibilidade de treino para nós meros mortais, vamos para o fine tuning.

Quando você treina um modelo, vc cria o que chamamos de "weights" (pesos), então estes pesos vão guiar o modelo treinado a escolher um próximo token, dito isso, o processo de fine tuning é ajustar estes "pesos" para que o próximo token venha conforme seu estilo.

Baseado no seu input, fine tuning não vai ensinar novos dados ao modelo, ele vai ajustar o peso para o modelo responder conforme sua necessidade, vou dar um exemplo.

Você pode fazer fine tuning para seu modelo sempre responder com emojis, e então ele vai aprender que depois de certas expressões ou no lugar de certa expressões deveria usar emojis, e vc vai especializá-lo nisso.

Retrieval-Augmented Generation (RAG)

Esta é a técnica recomendada para "adicionar" novas informações ao modelo.
Dito isso é melhor você estudar como implementar um RaG para poder então plugar sua documentação e dar poder ao seu sistema de consultá-la.

Este cara é um dos fundadores do Ollama e ele tem um curso totalmente grátis sobre esses temas, então recomendo assistir.

Faz um vídeo ou um tuto por aqui de como treinar? please!

https://www.youtube.com/watch?v=1XCEZW_Twr0

1

pode instalar o ollama do site ollama.com ele já abstrai grande parte do trabalho com llms, aí tu pode baixar modelos como imagens docker por exemplo ollama run llama3.2

Ele vai baixar e rodar o modelo. Além de disponibilizar o acesso através de uma api no localhost:11434.

Para usar no vscode, tem uma extensão muito boa que pode encontrar no site continue.dev, ela permite adicionar modelos via llm para autocomplete de código além de uma interface na lateral para conversar com o modelo similar com o gpt.

2

Victor, muito bom! Parabéns pelo projeto e obrigado por compartilhar.

Com certeza vou testar por aqui.

Até o momento tenho usado o Claude Sonnet para criar mensagens melhores para diffs maiores e tem servido muito bem. Dependendo da situação eu direciono melhor o que quero, mas na maioriadas vezes só peço escrever uma mensagem mais detalhada e o resultado é muito bom.

Mais uma vez, muito obrigado por compartilhar.

1
2

Muito bom, parabéns. Aqui utilizo a extensão Genie apontando pra api offline rodando o LM Studio com o modelo Qwen2.5 Coder. Aperto F1 no VScode e ela pega o diff, envia pra api e retorna o commit seguindo as boas práticas.

-1
1
0
1
1

Totalmente local, este projeto está sendo desenvolvido com a premissa de ser off-line e preocudado com a privacidade, então os diffs e nenhuma informação será rodada fora do computador do usuário.

Como ele usar Ollama, se vc quiser hospedar o ollama em algum server e apontar para o servidor, ai é uma decisão do usuário. :P