Una entrevista autoevaluante para modelos de codificación de IA.
21/11 Este proyecto fue demasiado difícil de usar, ¡y soy el mantenedor! He pasado algún tiempo refactorizando los scripts de la entrevista, actualizando los requisitos.txt y hay una nueva guía de evaluación para evaluar tanto los modelos como las API.
11/20 Reevalúe CodeQwen2.5 (nuevos pesos). Evalúe Mistral-Small-2409 y Ministral-8B-2410. Evaluar GPT-4O-2024-11-20.
11/13 Evalúe Qwen2.5 (32B en FP16, GGUF Q8, EXL2 8BPW), OpenCoder (1.5B y 8B en FP16).
10/26 Evaluar Qwen2.5 (3b, 7b, 14b FP16 | 14b, 32b, 72B AWQ) y QWEN-Coder2.5
El 26/10 de actualización de evaluaciones de todos los modelos OpenAI disponibles, Mistral y antrópicos disponibles.
25/10 Evalúe la familia IBM-granito/granito-3.0 (8b denso, 2b denso, 1b moe, 3b moe). Tuve que tomar un breve pausa debido a los trabajos de cambio, pero ahora trabajando para ponerse al día con los problemas de la acumulación, así que hay algún modelos de código interesantes o nuevas familias en las últimas ~ 6 semanas que me perdí. Qwen2.5 y Llama3.2 estarán activos este fin de semana.
9/12 Se corrigió un error de serialización en el evaluador que afectó negativamente cuatro resultados: Deepseek-Ai-Deepseek-Coder-V2-Lite-Instructo-FP16, IBM-Granite-Granite-8B-Instructo-NF4, Ajibaw-2023--2023- Code-llama-3-8b, Ollama-Phi3: 3.8b-mini-instructo-4K-FP16
9/11 Evalúa Yi-coder-1.5b-chat y Yi-coder-9b-chat (FP16), el 9B en particular es muy fuerte.
junior-v2
es un conjunto de 12 pruebas creado para este proyecto para probar un pequeño rendimiento de codificación LLM. Este proyecto proporciona todos los componentes necesarios para ejecutar esta evaluación.
? humaneval
es una suite solo de Python de 164 pruebas creadas por OpenAI. Este proyecto proporciona scripts de plantilla para preparar y ejecutar la entrevista de Humaneval, así como los scripts de extracción de resultados para ayudar a su evaluador. Consulte https://github.com/openai/human-eval para obtener más información.
¡Todas las respuestas del modelo y los resultados de la evaluación ahora se incluyen dentro de este repositorio! Instale una versión reciente de Streamlit pip install streamlit==1.23
y luego streamlit run app.py
o streamlit run compare-app.py
para ejecutar las aplicaciones web anteriores localmente.
? Actualmente se detiene el trabajo de Humaneval/ Desarrollo, hay otros proyectos que están mucho más avanzados.
Consulte https://github.com/my-ther-github-account/llm-humaneval-benchmarks y https://github.com/abacaj/code-eval para grandes listas de resultados de referencia Humaneval LLM.
junior-v2/*.yaml
- Preguntas de entrevista del codificador junior (estable)senior/*.yaml
- Preguntas de entrevista del codificador senior (WIP)prompts/*.txt
- LLM Plantillas de solicitud para los diversos modelosprepare.py
: aplica plantillas para cuestionar convertirlas en indicaciones específicas del idioma y modelo adecuados para la entrevista Consulte las indicaciones/ para ver todas las referencias de indicaciones en la tabla de clasificación.
params/*.json
- Muestreo de conjuntos de hiper -parámetros (utilizados por todos los guiones de entrevista)interview-*.py
- Scripts de entrevista Ver Params/ para todas las referencias de parámetros en la tabla de clasificación.
evaluate.py
: ejecute pruebas para el código generado en un sandbox y califica cada respuestaapp.py
-Strewlit WebApp para explorar los resultados, consulte https://huggingface.co/spaces/mike-ravkine/can-ai-code-resultscompare.py
: realiza comparaciones entre evaluaciones, opcionalmente llamando a un LLM para su análisiscompare-app.py
-Strewlit WebApp para explorar las comparaciones, consulte https://huggingface.co/spaces/mike-ravkine/can-ai-code-comparecompare/*.yaml
- Comparar configuracionescompare/*.json
- Comparar resultados Tiempo de ejecución de API | Guion |
---|---|
Litellm (OpenAi, etc.) | interview-litellm.py |
Oobabooga/koboldcpp | interview-oobabooga.py |
Inferencia de la cara de abrazos | interview-hfinference.py |
Gradio (espacios HF) | interview-gradio.py |
Tipo de cuantificación | Guion | Dependencia |
---|---|---|
Gguf | interview-llamacpp.py | llamacpp o ggml binario |
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 (transformadores) | interview-cuda.py | Transformers == 4.37.2 |
El envoltorio modal recomendado es interview_modal_cuda11.py
que crea un contenedor basado en Cuda11.8 con todas las dependencias anteriores funcionando. También se proporciona una interview_modal_cuda12.py
, pero AutoGPTQ y Ctranslate2 no son compatibles.
Desafortunadamente, la naturaleza del modal no permite la selección de la línea de comandos del modelo Eitehr LLM o el motor de tiempo de ejecución.
Para seleccionar modelos, abra el script y la falta de comodidad de la línea de elección .run_function(download...)
. Tenga en cuenta que solo se puede seleccionar un modelo a la vez. Para agregar un nuevo modelo, implementa una nueva función download...
Para seleccionar el tiempo de ejecución, abra el script y la falta de comment una de las opciones de RUNTIME
. Tenga en cuenta que para transformers
también debe especificar QUANT
.
Un conjunto de preguntas de la entrevista es una carpeta de archivos .yaml. Cada pregunta es una clave de nivel 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 "
En este ejemplo, SanityList
es el nombre de la pregunta de la entrevista.
prepare.py
utiliza los primeros cuatro campos para crear la entrevista:
Signature
es la función de función deseadaInput
describe las entradas de la funciónOutput
describe las salidas de la funciónFact
es opcional y proporciona cualquier contexto necesario para realizar correctamente la tarea Estas 4 variables junto con language
( python
o javascript
) se utilizan para expandir las plantillas en prompts/
.
evaluate.py
utiliza los dos últimos campos para juzgar los resultados:
Description
es una explicación legible por el humano de por qué esta prueba es útilChecks
define el comportamiento esperado de la salida. Cada cheque tiene un nombre, algún valor assert
(código de python) y un valor eq
esperado.
El objeto F representa la vista Sandbox de la función. El análisis estático se realiza en la firma de función para extraer los campos f.name
y f.args
, mientras que f.call
permite la evaluación de la función.
Todos los scripts salen automáticamente los archivos .ndjson al directorio results/
.
Cada etapa genera un súper set de campos de la etapa anterior, por lo que es posible alimentar la evaluación/entrevista a la entrevista (para volver a ejecutar las preguntas) o volver a EVIS (para volver a ejecutar la evaluación).
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