Exercices AI Engineering Écrire un fichier JSONL pour fine-tuning
🎉

Bravo!

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

Écrire un fichier JSONL pour fine-tuning

Tu veux que GPT reponde comme ton support client, avec le ton et les connaissances specifiques a ton produit ? C'est le fine-tuning. Et pour entrainer le modele sur tes donnees, OpenAI demande un fichier au format JSONL : chaque ligne est un exemple d'entrainement au format JSON.

Chaque ligne représente un exemple d'entrainement. Pour le chat fine-tuning, chaque exemple a cette structure :

{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}

Attention : c'est une seule ligne par exemple, pas de retour a la ligne dans le JSON. Et chaque ligne est un objet JSON complet (pas de virgule entre les lignes, pas de crochets englobants comme dans un tableau JSON).

Écris une fonction générer_jsonl(exemples) qui prend une liste de tuples (system, user, assistant) et retourne une chaine au format JSONL. Chaque tuple devient une ligne avec les trois messages.

Exemple :
exemples = [('Sois bref.', 'Salut', 'Yo!')]
générer_jsonl(exemples) retourne une chaine avec une ligne JSON valide

Tests (1/1)

Tests
import json

result = générer_jsonl([('Sys', 'Bonjour', 'Salut')])
lignes = result.strip().split('\n')
assert len(lignes) == 1, 'Un exemple doit donner une seule ligne'
obj = json.loads(lignes[0])
assert 'messages' in obj, 'Chaque ligne doit avoir une clé messages'
assert len(obj['messages']) == 3, 'Chaque exemple doit avoir 3 messages'
assert obj['messages'][0]['role'] == 'system', 'Le premier role doit etre system'
assert obj['messages'][1]['role'] == 'user', 'Le deuxieme role doit etre user'
assert obj['messages'][2]['role'] == 'assistant', 'Le troisieme role doit etre assistant'

result2 = générer_jsonl([('S1', 'U1', 'A1'), ('S2', 'U2', 'A2'), ('S3', 'U3', 'A3')])
lignes2 = result2.strip().split('\n')
assert len(lignes2) == 3, 'Trois exemples doivent donner trois lignes'
for ligne in lignes2:
    obj = json.loads(ligne)
    assert 'messages' in obj, 'Chaque ligne doit etre du JSON valide avec messages'

assert générer_jsonl([]) == '', 'Une liste vide doit donner une chaine vide'

Indices (3 disponibles)

solution.py
Non stockée