Une interview auto-évaluante pour les modèles de codage de l'IA.
11/21 Ce projet était trop difficile à utiliser, et je suis le mainteneur! J'ai passé un peu de temps à refactoriser les scripts d'entrevue, à mettre à jour les exigences.txt et il existe un nouveau guide d'évaluation pour évaluer les modèles et les API.
11/20 réévaluer CodeQwen2.5 (nouveaux poids). Évaluez Mistral-Small-2409 et Ministral-8B-2410. Évaluez GPT-4O-2024-11-20.
11/13 Évaluer Qwen2.5 (32b à FP16, GGUF Q8, EXL2 8BPW), OpenCcoder (1,5b et 8b à FP16).
10/26 Évaluer Qwen2.5 (3b, 7b, 14b fp16 | 14b, 32b, 72b AWQ) et QWEN-CODER2.5
10/26 Mise à jour des évaluations de tous les modèles OpenAI, Mistral et anthropiques disponibles.
10/25 Évaluer la famille IBM-Granite / Granite-3.0 (8B dense, 2B dense, 1b Moe, 3B MOE). J'ai dû prendre un bref hiatus en raison du changement de travail, mais je travaille maintenant à rattraper le dossier, donc des problèmes ouverts s'il y a des modèles de code intéressants ou de nouvelles familles au cours des 6 dernières semaines que j'ai manquées! Qwen2.5 et llama3.2 seront en place ce week-end.
9/12 Correction d'un bug de sérialisation dans l'évaluateur qui a affecté négativement quatre résultats: Deepseek-Ai-Deepseek-coder-V2-Lite-Instruct-FP16, IBM-Granite-Granite-8b-Code-Istruct-NF4, AJibawa-2023-- Code-Llama-3-8b, Ollama-Phi3: 3.8B-MinI-Instruct-4k-FP16
9/11 Évaluer Yi-coder-1.5b-chat et yi-coder-9b-chat (FP16), le 9b en particulier est très fort.
junior-v2
est une suite multicangue (Python, JavaScript) de 12 tests créés pour ce projet pour tester de petites performances de codage LLM. Ce projet fournit tous les composants nécessaires pour exécuter cette évaluation.
? humaneval
est une suite Python uniquement de 164 tests créés par Openai. Ce projet fournit des scripts de modèle pour préparer et exécuter l'entretien Humaneval, ainsi que des scripts d'extraction de résultats pour aider leur évaluateur. Voir https://github.com/openai/human-eval pour plus d'informations.
Toutes les réponses du modèle et les résultats d'évaluation sont désormais incluses dans ce référentiel! Installez une version récente de Streamlit pip install streamlit==1.23
puis streamlit run app.py
ou streamlit run compare-app.py
pour exécuter les WebApps ci-dessus localement.
? Le travail humainval / de développement est actuellement interrompu, il y a d'autres projets qui sont beaucoup plus loin.
Voir https://github.com/my-other-github-account/llm-humaneval-benchmarks et https://github.com/abacaj/code-val pour les grandes listes de résultats de référence Humananeval LLM.
junior-v2/*.yaml
- Questions d'entrevue du codeur junior (stable)senior/*.yaml
- Questions d'entrevue du codeur senior (WIP)prompts/*.txt
- Modèles d'invite LLM pour les différents modèlesprepare.py
- Applique des modèles pour les remettre en question en les transformant en invites spécifiques au langage et au modèle adaptées à l'entretien Voir invites / pour toutes les références d'invites dans le classement.
params/*.json
- ensembles d'hyper-paramètres d'échantillonnage (utilisés par tous les scripts d'entrevue)interview-*.py
- Interview Scripts Voir params / pour toutes les références de paramètres dans le classement.
evaluate.py
- Exécutez des tests pour le code généré dans un bac à sable et note chaque réponseapp.py
- rationalisez WebApp pour explorer les résultats, voir https://huggingface.co/spaces/mike-ravkine/can-ai-code-resultscompare.py
- effectue des comparaisons entre les évaluations, en appelant éventuellement un LLM pour l'analysecompare-app.py
- rationalisez WebApp pour explorer les comparaisons, voir https://huggingface.co/spaces/mike-ravkine/can-ai-code-comparecompare/*.yaml
- Comparez les configurationscompare/*.json
- Comparez les résultats API Runtime | Scénario |
---|---|
Litellm (openai, etc.) | interview-litellm.py |
Oobabooga / koboldcpp | interview-oobabooga.py |
Inférence de l'étreinte | interview-hfinference.py |
Gradio (espaces HF) | interview-gradio.py |
Type de quantification | Scénario | Dépendance |
---|---|---|
Gguf | interview-llamacpp.py | llamacpp ou binaire GGML |
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 |
L'écran modal recommandé est interview_modal_cuda11.py
qui construit un conteneur basé sur CUDA11.8 avec toutes les dépendances ci-dessus fonctionnant. Une interview_modal_cuda12.py
est également fournie, mais AutoGPTQ et Ctranslate2 ne sont pas compatibles.
Malheureusement, la nature du modal ne permet pas la sélection de ligne de commande du modèle EITEHR LLM ou du moteur d'exécution.
Pour sélectionner les modèles, ouvrez le script et décommentez la ligne de choix .run_function(download...)
. Notez qu'un seul modèle peut être sélectionné à la fois. Pour ajouter un nouveau modèle, implémentez une nouvelle fonction download...
Pour sélectionner l'exécution, ouvrez le script et l'incommente l'une des options RUNTIME
. Notez que pour transformers
vous devez également spécifier QUANT
.
Un ensemble de questions d'entrevue est un dossier de fichiers .yaml. Chaque question est une clé de haut niveau:
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 "
Dans cet exemple, SanityList
est le nom de la question de l'interview.
Les quatre premiers champs sont utilisés par prepare.py
pour créer l'entretien:
Signature
est la fonction de fonction souhaitéeInput
décrit les entrées de fonctionOutput
décrit les sorties de fonctionFact
est facultatif et fournit tout contexte nécessaire pour effectuer correctement la tâche Ces 4 variables ainsi que language
( python
ou javascript
) sont utilisées pour étendre les modèles dans prompts/
.
Les deux derniers champs sont utilisés par evaluate.py
pour juger les résultats:
Description
est une explication lisible par l'homme de la raison pour laquelle ce test est utileChecks
définissent le comportement attendu de la sortie. Chaque vérification a un nom, une valeur assert
(code python) et une valeur eq
attendue.
L'objet F représente la vue de bac à sable de la fonction. Une analyse statique est effectuée sur la signature de la fonction pour extraire les champs f.name
et f.args
, tandis que f.call
permet une évaluation de la fonction.
Tous les scripts sortent automatiquement des fichiers .ndjson au répertoire results/
.
Chaque étape émet un super-ensemble de champs de la scène avant lui, il est donc possible de renvoyer l'évaluation / entretien pour être interviewé (pour relancer les questions) ou de retour à l'évaluation (pour réinstaller l'évalue).
results/prepare_{interview}_{languages}_{template}.ndjson
Champs:
results/interview_{interview}_{languages}_{template}_{templateout}_{params}_{model}_{timestamp}.ndjson
Champs:
prepare
des champs results/eval_{interview}_{languages}_{template}_{templateout}_{params}_{model}_{timestamp}.ndjson
Champs:
eval