Fine tuning with function call in JSONL

Hello,
I have an issue to add function calling in my jsonL file

I added around 500 line in the jsonL and it work welln now I want to add some example for the function call following the documentation here : https://platform.openai.com/docs/guides/fine-tuning/fine-tuning-examples

I tried a lot of format and I still have the same issue when the fine tuning job is running : The job failed due to an invalid training file. Invalid file format. Example 536 contains an extra “tools”.

And I took the exact same example they show on the documentation and turn it into 1 line for the JsonL but it doesn’t work

What am I missing ?

Here is the example I added to my JsonL file at the line 536 where I have this issue :

{"messages":[{"role":"user","content":"Je veux emballer des bouteilels de vin "},{"role":"assistant","content":"","tool_calls":[{"id":"call_box","type":"function","function":{"name":"get_box_v2","arguments":"{\"query\": \"caisse bouteilles\", \"number\": \"1\"}"}}]},{"role":"tool","content":"{\"caisse\": \"caisse bouteille\", \"cannelure\": \"simple cannelure\"}","tool_call_id":"call_box"},{"role":"assistant","content":"Voici votre caisse pour bouteille"}],"tools":[{"type":"function","function":{"name":"get_box_v2","description":"Récupérer des caisses en carton ou en contreplaqué, des 'boites', des caisses pour bouteille, pour vêtement, pour smartphone, pour mug en fonction du besoin du USER. Si tu as des dimensions, alors utilise les dans les paramètres 'lengt', 'width' et 'height' et non dans la query","parameters":{"type":"object","properties":{"query":{"type":"string","description":"La requête au moteur de recherche du site eCommerce. Si tu as les informations, indique la cannelure 'simple', 'double' ou 'triple' de la caisse ou la matière, sinon indique l'usage de la caisse comme caisse pour bouteille ou caisse penderie pour les vêtements, boîte pour mug ou pour smartphone"},"number":{"type":"integer","description":"Le nombre maximum de résultats à retourner. Toujours définir à 1 pour ne faire qu'une seule proposition à l'utilisateur."},"length":{"type":"integer","description":"La longueur de la caisse.0 par défault "},"width":{"type":"integer","description":"La largeur de la caisse. 0 par défault"},"height":{"type":"integer","description":"La hauteur de la caisse. 0 par défault"}},"required":["query","number","length","width","height"]},"strict":false}}]}```

Your Json line should be as follows:

{"messages":
     [{"role":"system", "content": "put your system prompt here"},
      {"role":"user", "content":"Je veux emballer des bouteilels de vin "},
      {"role":"assistant",
       "tool_calls":[{
             "id":"call_box",
             "type":"function",
             "function":{"name":"get_box_v2",
             "arguments":{\"query\": \"caisse bouteilles\", \"number\": \"1\"}
                        }
                    ]
               },
     {"role":"tool", 
      "content":{\"caisse\": \"caisse bouteille\", \"cannelure\": \"simple cannelure\"},
      "tool_call_id":"call_box"},
      {"role":"assistant",
        "content":"Voici votre caisse pour bouteille"}],
"tools":[{"type":"function",
          "function":{
               "name":"get_box_v2",
               "description":"Récupérer des caisses en carton ou en contreplaqué, des 'boites', des caisses pour bouteille, pour vêtement, pour smartphone, pour mug en fonction du besoin du USER. Si tu as des dimensions, alors utilise les dans les paramètres 'lengt', 'width' et 'height' et non dans la query",
               "parameters":{
                      "type":"object",
                       "properties":{
                           "query":{"type":"string", "description":"La requête au moteur de recherche du site eCommerce. Si tu as les informations, ....."},
                           "required:["query","number","length","width","height"]
}}}]}```

Add a system role and system prompt.
Remove double quotations for arguments key.
You can remove strict since it’s False by default.