Qwen 2.5 Coder: Contexto extendido, templates y CoT.

Qwen 2.5 coder es una familia de modelos que ha dado muy buenos resultados generando código. Tanto que pueden competir con modelos privados mucho mayores como ChatGPT4o o Claude 3 Opus. 

Podéis ver más sobre estos modelos en el siguiente vídeo:

Haz click para ver el vídeo en mi canal de YouTube

Este post se centra en los prompts necesarios para usar sus diversas funcionalidades.

Completar texto:

La funcionalidad habitual de los modelos de lenguaje. Le pasas un texto y va prediciendo las siguientes palabras (bueno, tokens).

No necesita ningún prompt especial.

Rellenar texto intermedio (infill):

Una funcionalidad imprescindible para completar código. El código no se escribe como la prosa. Es habitual insertar código en mitad de ficheros ya escritos. Además hay que tener en cuanta todo el contenido del fichero.

El prompt divide el texto en un prefijo (el código que va antes del texto a generar) y un sufijo (el código que va después del texto a generar)

<|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>

Completar proyecto:

Otra función útil es que para completar código se tenga en cuenta múltiples ficheros del proyecto y la estructura del mismo.

El prompt consta del nombre del repositorio (puede ser cualquiera) y los distintos ficheros que se quiere que se tengan en cuenta. Cada fichero incluye la ruta con su nombre y tras un salto de línea el código.

<|repo_name|>{repo_name}
<|file_sep|>{file_path1}
{file_content1}
<|file_sep|>{file_path2}
{file_content2}

Seguir instrucciones o chatear:

Está funcionalidad se puede usar tanto para dar instrucciones al modelo como para mantener una conversación con él.

En todos estos casos es importante respetar los saltos de línea.

<|im_start|>system
{system_prompt}<|im_end|>
<|im_start|>user
{prompt}<|im_end|>
<|im_start|>assistant

Contexto extendido a 128k:

El contexto por defecto es de 32k tokens, pero usando YARN con un escalado de x4 puede llegar a 128k (cada motor de inferencia tendrá su forma de configurar esto, por ejemplo en llama.ccp es usando los parámetros:  )

Esto solo funciona en los modelos de 7B o más parámetros: -rope-scaling yarn –rope-scale 4.0

Generar texto con CoT (cadena de pensamientos):

De regalo este truco, no es oficial, yo lo he sacado de un comentario en Reddit del usuario Eposnix. Este usuario compartió un prompt que permite realizar CoT aplicado a la generación de código. Hace que el modelo de lenguaje entre en bucle tratando de corregir el código que genera hasta que esté perfecto. Cuidado que puede hacer que el mdoelo entre en bucle, por lo que es recomendable usar este prompt limitando el numero total de tokens que puede generar.

1. Generate your initial code solution
2. Rate your solution on a scale of 1-5 based on these criteria:
- 5: Exceptional - Optimal performance, well-documented, follows best practices, handles edge cases
- 4: Very Good - Efficient solution, good documentation, follows conventions, handles most cases
- 3: Acceptable - Working solution but could be optimized, basic documentation
- 2: Below Standard - Works partially, poor documentation, potential bugs
- 1: Poor - Non-functional or severely flawed approach

3. If your rating is below 3, iterate on your solution
4. Continue this process until you achieve a rating of 3 or higher
5. Present your final solution with:
- The complete code as a solid block
- Comments explaining key parts
- Rating and justification
- Any important usage notes or limitations

Tras ese prompt puedes especificar que deseas que programe Qwen