Function call bad in others languages

i have recently make a code where there is function call, i speak french so i write un function call in french but the model was doing pretty bad when the description was in french, it will alway made up parameters, i have saw that when you prompt it’s in english it’s does pretty well calling the functions without making up the parameters here is the code if you want to test it


def gpt_functioncall(message,t):
    function_reponse = ""
    response = client.chat.completions.create(
  model="gpt-3.5-turbo-1106",
  tools=function_call_toll,
  tool_choice="auto",
  messages=message,
    temperature=t
    )
    r_message = response.choices[0].message
    tool_calls = r_message.tool_calls

    return r_message

system = """
Tu es un appelleur de fonction, ta tâche est d'appeller des fonctions selon la question de l'utilisateur et l'historique de la discusion.
Ta réponse dois être formuler sous forme de JSON avec comme clé 'fonction_name' qui contient le nom de la fonction ,un dictionnaire 'argument' avec les different arguments de la fonction.
Certains arguments seront des liste d'element qui se trouve entre ces crochets [], tu devrais utiliser que les élément dans la liste pour donner une valeur à l'arguments.
Tous les arguments seront accompagné par une description pour décrire à quoi sert l'argument, tu devras utiliser cette description pour assigner une valeur à l'argument.
Voici les fonction dont tu dispose : 

    {
        \"type\": \"function\",
        \"function\": {
            \"name\": \"Answer_Generator\",
            \"description\": \"Lorsque l'utilisateur demande explicitement de lui expliquer un concept en employant le mot Explique moi\",
            \"parameters\": {
                \"type\": \"object\",
                \"properties\": {
                    \"question\": {
                        \"type\": \"string\",
                        \"description\": \"La question poser par l'utilisateur\"
                    }
                },
                \"required\": [\"question\"]
            }
        }
    },
    {
        \"type\": \"function\",
        \"function\": {
            \"name\": \"Exercice_Generator_math\",
            \"description\": \"Génère un seul exercice de mathématique demander par l'élèves pour une leçon bien defini et un niveau de difficulté defini\",
            \"parameters\": {
                \"type\": \"object\",
                \"properties\": {
                    \"lecon\": {
                        \"type\": \"string\",
                        \"enum\":[\"Nombres_complexes\",\"Arithmétiques\",\"Fonctions_numériques\",\"Suites_numériques\",\"Primitives_Intégrales_Calculs_daires\", \"Fonctions_logarithmes\",\"Fonctions_exponentielle\",\"Equations_différentielles\",\"Dénombrement_Probabilité_Variable_aléatoire_Loi_binomiale_Epreuve_de_Bernoulli\",\"Barycentres\",\" Applications_affines\",\" Statistiques\",\"Coniques\"],
                        \"description\": \"La leçon dans laquelle il souhaite que l'exercice concerne\"
                    },
                    \"difficulte\": {
                        \"type\": \"string\",
                        \"enum\": [\"facile\", \"moyen\", \"difficile\"],
                        \"description\": \"La difficulté de l'exercice, la valeur peut être sois 'facile','moyen','difficile'\"
                    }
                },
                \"required\": [\"lecon\", \"difficulte\"]
            }
        }
    },
    {
        \"type\": \"function\",
        \"function\": {
            \"name\": \"Exercice_Solver\",
            \"description\": \"Résous un exercice ou un problème mathématique demander quand l'élèves lui en donne une\",
            \"parameters\": {
                \"type\": \"object\",
                \"properties\": {
                    \"Enonce\": {
                        \"type\": \"string\",
                       
                    \"description\": \"L'énoncé au complet de l'exercice avec les questions posées.\"
                }
            },
            {
                    \"question\": {
                        \"type\": \"list\",
                       
                    \"description\": \"La liste des question relative à l'énoncé.\"
                }
            },
            \"required\": [\"Enonce\"]
        }
    }
}

Si aucun de ces fonction n'a besoin d'être appeller retourne un format json avec None comme valeur pour toute les parametre
"""
prompt = "Tu connais les logarithmes"
exo = """
#Exercice Moyennement Difficile :

Enoncé de l'exercice :
Soit z un nombre complexe tel que \(z = 2 + 3i\) et w un nombre complexe tel que \(w = -1 - 2i\).
On note \(z' = \frac{1}{z}\) le quotient de z par l'opposé de z et \(w' = \frac{\bar{w}}{w}\) le quotient du conjugué de w par w.

1. Question 1 :
   - Calculer z' et écrire le résultat sous forme algébrique.

2. Question 2 :
   - Calculer w' et écrire le résultat sous forme algébrique.

3. Question 3 :
   - Soit \(z_1 = 1 - i\) et \(z_2 = 3 + 2i\), déterminer \(|z_1|, |z_2|\) et \(arg(z_1)\), \(arg(z_2)\).

4. Question 4 :
   - Calculer le produit \(z_1 \times z_2\) et écrire le résultat sous forme algébrique.

Veillez à donner les réponses sous forme algébrique."""
message = [
    {"role":"system","content":"Tu es un assistant. Tu te base sur les anciens messages donné précédement par l'utilisateur pour determiner la meilleur reponse à donné ou la meilleur action à prendre. Tu as 3 actions que tu peux prendre, résoudre l'exercice pour cela il te faut fournir l'enoncé de l'exercice avec les questions relative à l'exercice, généré un exercice pour cela il te faut demander à l'utilisateur la leçon sur laquelle l'exercice doit porter et la difficulté qui varie entre facile, moyen et difficile ou Répondre à une question.Ne génère jamais un exercice sans connaitre le niveau de difficulté et la leçon et ces informations doivent toujours être fournis par l'utilisateur et tu ne dois pas les déduire, si tu as la leçon mais pas la difficulté insiste pour connaitre la difficulté de l'exercice"},
    ]
message.append({"role":"user","content":"Genere moi un exercice"})
message.append({"role":"assistant","content":exo})
message.append({"role":"user","content":"C'est cool merci"})
message.append({"role":"assistant","content":"derien"})
message.append({"role":"user","content":"C'est un exercice sur quoi ?"})
message.append({"role":"assistant","content":"les nombres complexes"})
message.append(    {"role":"system","content":"Tu es un assistant. Tu te base sur les anciens messages donné précédement par l'utilisateur pour determiner la meilleur reponse à donné ou la meilleur action à prendre. Tu as 3 actions que tu peux prendre, résoudre l'exercice pour cela il te faut fournir l'enoncé de l'exercice avec les questions relative à l'exercice, généré un exercice pour cela il te faut demander à l'utilisateur la leçon sur laquelle l'exercice doit porter et la difficulté qui varie entre facile, moyen et difficile ou Répondre à une question.Ne génère jamais un exercice sans connaitre le niveau de difficulté et la leçon et ces informations doivent toujours être fournis par l'utilisateur et tu ne dois pas les déduire"},
)
message.append({"role":"user","content":"genere un exercice sur les fonction log nepriens"})
        
r = gpt_functioncall(message=message,t=0)
print(r)

and here is the function tool :

function_call_toll = [
    {
        "type": "function",
        "function": {
            "name": "Answer_Generator",
            "description": "Quand on a besoin d'expliquer une question théorique qui ne concerne pas la resolution d'exercice",
            "parameters": {
                "type": "object",
                "properties": {
                    "question": {
                        "type": "string",
                        "description": "La question poser par l'utilisateur"
                    }
                },
                "required": ["question"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "Exercice_Generator_math",
            "description": "Crée un exercice à partir de deux informations fournis par l'utilisateur, le niveau de difficulté et la leçon sur laquelle l'exercice doit porter",
            "parameters": {
                "type": "object",
                "properties": {
                    "lecon": {
                        "type": "string",
                        "enum":["Nombres_complexes","Arithmétiques","Fonctions_numériques","Suites_numériques","Primitives_Intégrales_Calculs_daires", "Fonctions_logarithmes","Fonctions_exponentielle","Equations_différentielles","Dénombrement_Probabilité_Variable_aléatoire_Loi_binomiale_Epreuve_de_Bernoulli","Barycentres"," Applications_affines"," Statistiques","Coniques"],
                        "description": "La leçon sur laquelle l'utilisateur à demandé l'exercice doit porté"
                    },
                    "difficulte": {
                        "type": "string",
                        "enum": ["facile", "moyen", "difficile"],
                        "description": "Le niveau de difficulté qu'a précisé l'utilisateur"
                    }
                },
                "required": ["lecon", "difficulte"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "Exercice_Solver",
            "description": "Résous un exercice ou un problème mathématique demander quand l'élèves lui en donne une",
            "parameters": {
                "type": "object",
                "properties": {
                    "Enonce": {
                        "type": "string",
                       
                    "description": "L'énoncé au complet de l'exercice avec les questions posées."
                },
                    "question": {
                      "type": "string",            
                      "description": "Les questions rélative à l'exercice."
            }

            },
            
            "required": ["Enonce","question"]
        }
    }
}
]

The main function you must focus on is Exercice_Generator_Math that generate exercice with a lesson an a difficulty set
You must change message.append({“role”:“user”,“content”:“genere un exercice sur les fonction log nepriens”}) you change the content by ‘Generate an exercice of math’ or ‘Generate an exercice of math about function log neperien’ you will constate that the functions calling is better in english then french, here in my exemple you can constat that sometime it will ask for the difficulty other time no and just made up the parameters eventhot in the system message i clearly precise not to do it, In english it will ask but it french sometime it will sometime no.
How can i solve this problems, should i always translate into english the prompt ?

Well … your function NAMES are not in French so at least there is a notion of non-French / English going around your code.
ALso in your prompt I don’t think I see anything that says something like ’ Ils faut toutjours respondrez en Francaise. Jamais en Anglais?"

Thanks you for your reply, effectively i have try a lot of thing, like translate all the function tools in english ou all in french without any english word. And for the fact that i didn’t precise either or not it should always responde in french is because i didn’t think i was necessary since all the message was in french. But i have try what you tell me.
But i always fund that when the function tool is in french it doesn’t matter a lot (in my case) even when the old prompt was in french it’s still perform a descent well but when the give him a prompt in french it perform worse than when the prompt is in english.

It’s one of my lessons learnt so far. If the GPT doesn’t do what you want it to do you need to tell it more specifically.

1 Like