Exercices AI Engineering Valider le format fine-tuning
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Valider le format fine-tuning

Tu as passe des heures a preparer tes donnees de fine-tuning, tu lances l'upload sur OpenAI... et ca echoue a cause d'une ligne mal formattee. Pour eviter ca, tu valides ton fichier JSONL avant de l'envoyer. C'est une bonne pratique que tu retrouves dans tous les pipelines de donnees serieux.

Les regles de validation pour un exemple de fine-tuning chat :
1. Chaque ligne doit etre du JSON valide
2. L'objet doit avoir une clé 'messages'
3. 'messages' doit etre une liste non vide
4. Chaque message doit avoir les clés 'role' et 'content'
5. Le role doit etre 'system', 'user' ou 'assistant'
6. Il doit y avoir au moins un message avec le role 'assistant' (c'est ce qu'on entraine le modèle a générer)

Écris une fonction valider_jsonl(contenu) qui prend une chaine au format JSONL et retourne une liste d'erreurs (des chaines de caracteres). Si tout est valide, retourne une liste vide.

Pour chaque ligne avec un problème, ajoute un message du type 'Ligne X: description du problème' (X commence a 1).

Exemple :
valider_jsonl('{"messages": []}')
retourne ['Ligne 1: messages est vide']

Tests (1/1)

Tests
import json

# Tout valide
valide = json.dumps({'messages': [{'role': 'user', 'content': 'Q'}, {'role': 'assistant', 'content': 'R'}]})
assert valider_jsonl(valide) == [], 'Un JSONL valide ne doit pas avoir d erreurs'

# JSON invalide
assert len(valider_jsonl('pas du json')) > 0, 'JSON invalide doit etre detecte'
assert 'Ligne 1' in valider_jsonl('pas du json')[0], 'L erreur doit mentionner le numéro de ligne'

# Messages vides
assert len(valider_jsonl('{"messages": []}')) > 0, 'Messages vides doit etre detecte'

# Pas de clé messages
assert len(valider_jsonl('{"data": []}')) > 0, 'Absence de clé messages doit etre detecte'

# Pas d assistant
sans_assistant = json.dumps({'messages': [{'role': 'user', 'content': 'Q'}]})
assert len(valider_jsonl(sans_assistant)) > 0, 'Absence de message assistant doit etre detecte'

# Chaine vide
assert valider_jsonl('') == [], 'Chaine vide doit retourner liste vide'

# Plusieurs lignes dont une invalide
deux_lignes = valide + '\n' + 'invalide'
errs = valider_jsonl(deux_lignes)
assert len(errs) == 1, 'Seule la ligne invalide doit générer une erreur'
assert 'Ligne 2' in errs[0], 'L erreur doit etre a la ligne 2'

Indices (3 disponibles)

solution.py
Non stockée