7 pontos por GN⁺ 2024-01-01 | 1 comentários | Compartilhar no WhatsApp
  • O Emacs Copilot usa um LLM (Large Language Model) executado localmente para gerar conclusão de código dentro do buffer do Emacs
  • O LLM é executado como um subcomando que lembra o histórico local de edição por arquivo, e pode ser interrompido a qualquer momento com C-g
  • Ao apagar código, esse histórico também pode ser removido do contexto do LLM, e a linguagem de programação é determinada pela extensão do arquivo, independentemente da linguagem em si

Modelo WizardCoder 34b

  • O WizardCoder 34b é um excelente LLM que obteve a mesma pontuação no HumanEval que o GPT-4.
  • Para usar esse modelo, é necessário um computador potente, como um Mac Studio M2 Ultra; usuários de Macbook Pro podem considerar a versão Q3, e usuários de PCs comuns podem considerar o modelo WizardCoder-Python-13b.
  • Usuários com menor poder computacional, como um Raspberry Pi, podem usar o modelo Phi-2.

Como começar

  • Após escrever a primeira linha da função, pressione C-c C-k para passar o controle ao LLM, que então gerará o restante da implementação da função.
  • O LLM é ajustado para parar quando a função estiver completa, evitando explicações ou comentários ELI5 (explicações simplificadas).

Implementação de referência

  • Depois de baixar o LLM, copie o código abaixo para um buffer do Emacs e execute M-x eval-buffer.
  • Você pode ajustar o código de acordo com suas preferências pessoais.

Link para baixar o Emacs

  • Caso o Emacs não esteja instalado ou você use uma plataforma em que ele seja difícil de obter, como o Windows, há um link para uma build em arquivo único executável, sem necessidade de instalação.

Link para baixar o LLM

  • São fornecidos links para baixar gratuitamente alguns LLMs conhecidos por funcionarem bem com o Emacs Copilot.
  • O tamanho do modelo pode ser escolhido de acordo com o hardware disponível.

Arquivos de cache

  • Se você decidir mudar de modelo, deve excluir todos os arquivos FILE.cache criados no sistema de arquivos local.

Observações

  • No macOS com Apple Silicon, é necessário ter o Xcode instalado.
  • Ao usar zsh, talvez seja necessário executar com sh -c ./llamafile.
  • Em alguns sistemas Linux, podem ocorrer erros relacionados ao registro de binfmt_misc.

Sistemas operacionais e CPUs compatíveis

  • O llamafile oferece suporte a vários sistemas operacionais com requisitos mínimos de instalação.
  • O llamafile oferece suporte a CPUs específicas e requer um microprocessador AMD64 com conjunto de instruções SSSE3 ou superior, ou um microprocessador ARM64 com ARMv8a+.

Observação sobre os modelos

  • Os exemplos de llamafile fornecidos acima não devem ser interpretados como endosso ou recomendação da Mozilla a qualquer modelo, licença ou conjunto de dados específicos.

Opinião do GN⁺

  • Experiência de edição inovadora: o Emacs Copilot oferece aos desenvolvedores um novo nível de assistência à programação, com potencial para aumentar significativamente a eficiência e a produtividade.
  • Acessibilidade e personalização: os usuários podem escolher o LLM e ajustar o ambiente do Emacs de acordo com suas necessidades e preferências, tornando possível montar um ambiente de desenvolvimento personalizado.
  • Compatibilidade técnica: ao oferecer suporte a diversos sistemas operacionais e CPUs, o Emacs Copilot pode ser usado por um público amplo, promovendo inclusão e acessibilidade dentro da comunidade de desenvolvedores.

1 comentários

 
GN⁺ 2024-01-01
Comentários do Hacker News
  • Dúvida sobre a utilidade da integração de LLM/IDE

    Não há certeza de que a integração de LLM/IDE traga um grande ganho de produtividade em tarefas comuns de programação. A produtividade média de um programador é de cerca de 100 LOC por dia, mas ao criar protótipos é fácil escrever mais de 1000 LOC por dia. A diferença de produtividade entre código de qualidade para produção e hacking/prototipagem existe por causa da qualidade, e a maioria dos programadores competentes consegue produzir código de qualidade melhor escrevendo por conta própria do que copiando de um LLM ou de outras fontes. O tempo gasto analisando o código e verificando se não há vulnerabilidades e se o design é adequado para manutenção futura parece compensar o ganho de tempo obtido por não escrever o código diretamente. Pode ser útil ao usar LLM para aprender ou para escrever código descartável em que a qualidade não é importante, mas para código de produção ainda parece haver um longo caminho até o ponto em que a saída do LLM esteja no nível de um desenvolvedor e não precise de revisão/correção cuidadosa.

  • Agradecimento pelo desenvolvimento de ferramentas de LLM self-hosted

    Agradece à Justine por avançar no desenvolvimento de ferramentas de LLM self-hosted. Llamafiles deveria virar padrão. Pergunta se existe uma forma de se conectar a um LLM remoto hospedado na mesma LAN; não usa dispositivos Apple, mas tem uma máquina poderosa na rede e gostaria de usá-la. Talvez o Llamafile possa oferecer uma API, o que entraria no território de LSP, e aproveitar Llamafiles seria uma boa ideia.

  • Compartilhamento de experiência com integração de LLM usando Emacs

    Usa Emacs na maior parte do tempo para programação e documentação técnica. Está rodando phind-v2-codellama, openhermes, ollama, gptel e o Copilot do GitHub. Gosta da capacidade de enviar áreas arbitrárias para o LLM e fazer solicitações. A UX ainda está em estágio inicial, mas imagine se um modelo-base pudesse receber todo o contexto, como arquivos orgmode e buffers abertos, e usar ferramentas como LSP.

  • Experiência executando LLM em um MacBook Pro M1 Max

    Usa um MacBook Pro M1 Max com 64GB de RAM e baixou um modelo 34B Q55 (grande), confirmando que funciona bem. A velocidade é lenta, mas utilizável. Está rodando em uma partição Asahi Fedora Linux e não sabe como a GPU está sendo utilizada. Configurou o ambiente com ZSH 5.9 e, ao chamar o LLM diretamente via SUDO, ele carrega rapidamente como servidor web, permitindo interação pelo navegador em localhost:8080. Porém, ao tentar executar o LLM no Emacs, ocorre o erro "Doing vfork: Exec format error.". Seguindo a demo do Readme, ao digitar o início da função isPrime e depois C-c C-k, esse erro aparece. Pergunta se alguém tem ideia do que está errado.

  • Crítica à função is_prime na demonstração em vídeo

    A função is_prime mostrada na demonstração em vídeo é muito ruim. Mesmo que a entrada não seja divisível por 2, ela continua fazendo testes de módulo com 4, 6, 8 etc., o que é completamente sem sentido. Basta adicionar uma única linha de código (checagem de ímpar) para fazer o loop considerar apenas números ímpares e dobrar a velocidade. Espera que as pessoas que usam esse tipo de LLM revisem o código antes de fazer push para prod.

  • Pergunta sobre build de llamafile que não pode ser executada no NixOS

    Pergunta se é possível fazer seu próprio build de llamafile sem cosmopolitan/sem um executável realmente portável. Não consegue rodar no NixOS.

  • Demanda por uma integração de LLM mais geral

    Está satisfeito com o que existe hoje, mas quer uma integração de LLM mais geral que faça tanto isso quanto tudo o mais que um LLM pode fazer. Por exemplo, um atalho poderia significar "complete este código", enquanto outro poderia enviar o buffer atual para o LLM como está, enviar uma região para o LLM ou enviar uma região e substituí-la pelo resultado. Haveria algumas funcionalidades ortogonais para levar entrada ao LLM de várias formas (região, buffer, arquivo, prompt inline) e para produzir a saída de várias formas (inserir no ponto, sobrescrever região, colocar em um novo buffer etc.), e em cima disso seria possível construir diversos prompts de sistema automáticos, como conclusão de código, prosa e outros.

  • Compartilhamento de comando customizado de integração com LLM por um usuário de Vim

    Usa um comando customizado que pega o código atualmente selecionado e abre uma janela do navegador para pedir a vários motores de IA que o melhorem. Compartilha o comando usado no vimrc.

  • Pergunta sobre o caminho de upgrade do Llamafile

    Pergunta sobre o caminho de upgrade do Llamafile. Entende que ele combina o llama.cpp (um arquivo pequeno atualizado com frequência) com os pesos do modelo (um arquivo grande que não é atualizado com frequência) em um só. Quer saber se, sempre que o llama.cpp precisar de correção, será necessário baixar novamente vários gigabytes de um modelo que não mudou.

  • Expressão de interesse e intenção de testar a integração com LLM

    Parece muito interessante e com certeza vai testar. No entanto, como funciona de forma muito diferente do GitHub Copilot, talvez o nome não tenha sido uma escolha tão boa. Considerando a arquitetura do Emacs e afins, surpreende que não haja mais desenvolvimento em integração com LLM, mas a maioria dos projetos ficou sem atividade por alguns meses. Ainda assim, talvez a maior parte das pessoas que usam Emacs seja contrária ao uso de LLM.