Uma entrevista auto-avaliada para modelos de codificação de IA.
11/21 Este projeto foi muito difícil de usar e eu sou o mantenedor! Passei algum tempo refatorando os scripts da entrevista, atualizando requisitos.txt e há um novo guia de avaliação para avaliar os modelos e as APIs.
11/20 reavaliar o Codeqwen2.5 (novos pesos). Avalie o Mistral-Small-2409 e o Ministral-8B-2410. Avalie o GPT-4O-2024-11-20.
11/13 Avalie Qwen2.5 (32b em FP16, GGUF Q8, EXL2 8BPW), OpenCoder (1,5b e 8b em FP16).
10/26 Avalie Qwen2.5 (3b, 7b, 14b fp16 | 14b, 32b, 72b AWQ) e Qwen-coder2.5
10/26 Atualizar avaliações de todos os modelos disponíveis OpenAI, Mistral e Antrópico.
10/25 Avalie a família IBM-Granite/Granite-3.0 (densa 8b, densa 2b, 1b Moe, 3b Moe). Tive que fazer um breve hiato devido à troca de trabalhos, mas agora trabalha para acompanhar o backlog, para que houvesse algum problema de código interessante ou novas famílias nas últimas ~ 6 semanas que perdi! QWEN2.5 e LLAMA3.2 estarão acordados neste fim de semana.
9/12 Corrigido um bug de serialização no avaliador que afetou negativamente quatro resultados: Deepseek-AI-Deekseek-Coder-V2-Lite-Instrut-Fp16, Ibm-Granite-Granite-8b-Code-Instrut-NF4, Ajibawa-25023- Code-llama-3-8b, ollama-phi3: 3,8b-mini-instrução-4k-fp16
9/11 Avalie Yi-Coder-1.5b-ChAT e Yi-Coder-9b-Chat (FP16), o 9b em particular é muito forte.
junior-v2
é um conjunto de 12 testes criados para este projeto para testar o desempenho de codificação LLM pequeno. Este projeto fornece todos os componentes necessários para executar esta avaliação.
? humaneval
é um conjunto apenas de 164 testes criados pelo OpenAI. Este projeto fornece scripts de modelo para preparar e executar a entrevista da Humaneval, bem como scripts de extração de resultados para ajudar seu avaliador. Consulte https://github.com/openai/human-eval para obter mais informações.
Todas as respostas do modelo e os resultados da avaliação estão agora incluídos dentro deste repositório! Instale uma versão recente do streamlit pip install streamlit==1.23
Em seguida, streamlit run app.py
ou streamlit run compare-app.py
para executar os webApps acima localmente.
? Atualmente, o trabalho de desenvolvimento/ desenvolvimento está em pausa, há outros projetos que estão muito mais adiante.
Consulte https://github.com/my-other-github-account/llm-humaneval-benchmarks e https://github.com/abacaj/code-eval para grandes listas de resultados de benchmark Humaneval LLM.
junior-v2/*.yaml
- Perguntas de entrevista de codificador júnior (estável)senior/*.yaml
- Perguntas para entrevistas com codificadores sênior (WIP)prompts/*.txt
- LLM Prompt Modelos para os vários modelosprepare.py
aplica modelos para questionar transformá-los em avisos específicos de idioma e modelo adequados para entrevista Consulte Prompts/ Para todas as solicitações de referências na tabela de classificação.
params/*.json
interview-*.py
- Scripts de entrevista Consulte Params/ para todas as referências de parâmetros na tabela de classificação.
evaluate.py
- Executar testes para o código gerado em uma caixa de areia e notas cada respostaapp.py
-STRILHTLIT WebApp para explorar os resultados, consulte https://huggingface.co/spaces/mike-ravkine/can-ai-code-resultscompare.py
- executa comparações entre avaliações, opcionalmente chamando um LLM para análisecompare-app.py
-STRILHTLIT WebApp para explorar comparações, consulte https://huggingface.co/spaces/mike-ravkine/can-ai-code-comparecompare/*.yaml
- Compare configuraçõescompare/*.json
- Compare os resultados Tempo de execução da API | Script |
---|---|
Litellm (Openai, etc ..) | interview-litellm.py |
Oobabooga/Koboldcpp | interview-oobabooga.py |
Inferência de huggingface | interview-hfinference.py |
Gradio (HF Spaces) | interview-gradio.py |
Tipo de quantização | Script | Dependência |
---|---|---|
GGUF | interview-llamacpp.py | Llamacpp ou GGML binário |
GPTQ (AutoGPTQ) | interview-cuda.py | Auto-GPTQ == 0.6.0 |
GPTQ (Exllama) | interview-cuda.py | exllama @ 3B013CD53C7D413CF99CA04C7C28DD5C95117C0D |
EXL2, GPTQ (exllama2) | interview-cuda.py | exllamav2 @ 0.0.12 |
HQQ | interview-cuda.py | HQQ @ 0.1.1 |
Awq, fp16 (vllm) | interview-cuda.py | vllm == 0.3.0 |
Ctranslate2 | interview-cuda.py | ctranslate2> = 3.16.0 |
Bitsandbytes | interview-cuda.py | Bitsandbytes == 0.41.3 |
FP16 (Transformers) | interview-cuda.py | Transformers == 4.37.2 |
O invólucro modal recomendado é interview_modal_cuda11.py
, que constrói um contêiner baseado em CUDA11.8 com todas as dependências acima funcionando. Uma interview_modal_cuda12.py
também é fornecida, mas o AutoGPTQ e o CTRANSLATE2 não são compatíveis.
Infelizmente, a natureza do Modal não permite a seleção da linha de comando do modelo EITEHR LLM ou motor de tempo de execução.
Para selecionar modelos, abra o script e o descomamento da linha de escolha .run_function(download...)
. Observe que apenas um modelo pode ser selecionado por vez. Para adicionar um novo modelo, implemente um novo download...
função.
Para selecionar o tempo de execução, abra o script e o descomment em uma das opções RUNTIME
. Observe que, para transformers
você também deve especificar QUANT
.
Um conjunto de perguntas da entrevista é uma pasta de arquivos .yaml. Cada pergunta é uma chave de nível superior:
SanityList :
Signature : " things() "
Input : " with no inputs "
Output : " a list with three values: the number 5, the string 'foobar', the capital city of Spain "
Fact : " the capital city of Spain is Madrid "
Description : " List function, see if the model can combine input facts with internal knowledge. "
Checks :
input_name :
assert : " f.name "
eq : " things "
Neste exemplo, SanityList
é o nome da pergunta da entrevista.
Os quatro primeiros campos são usados pelo prepare.py
para criar a entrevista:
Signature
é a assinatura da função desejadaInput
descreve as entradas da funçãoOutput
descreve as saídas de funçãoFact
é opcional e fornece qualquer contexto necessário para executar corretamente a tarefa Essas 4 variáveis junto com language
( python
ou javascript
) são usadas para expandir modelos em prompts/
.
Os dois últimos campos são usados pela evaluate.py
para julgar os resultados:
Description
é uma explicação legível por humanos sobre por que este teste é útilChecks
definem o comportamento esperado da saída. Cada verificação tem um nome, algum valor assert
(código Python) e um valor eq
esperado.
O objeto F representa a vista da caixa de areia da função. A análise estática é realizada na assinatura da função para extrair os campos f.name
e f.args
, enquanto f.call
permite a avaliação da função.
Todos os scripts Saída nomearam automaticamente arquivos .ndjson para os results/
diretórios.
Cada estágio gera um super-set de campos do estágio anterior, portanto, é possível alimentar avaliar/entrevistar de volta à entrevista (para executar novamente as perguntas) ou voltar para avaliar (para re-executar a avaliação).
results/prepare_{interview}_{languages}_{template}.ndjson
Campos:
results/interview_{interview}_{languages}_{template}_{templateout}_{params}_{model}_{timestamp}.ndjson
Campos:
prepare
campos results/eval_{interview}_{languages}_{template}_{templateout}_{params}_{model}_{timestamp}.ndjson
Campos:
eval