OpenMultiDocumentation
Console

Outils et sorties structurées

tools, tool_choice, response_format (json_schema) et les messages role: "tool" sont transmis verbatim au modèle, et les réponses tool_calls reviennent intactes. Cette transparence est verrouillée par les tests de contrat d'OpenMulti — pas seulement constatée : une régression casserait la CI.

Concrètement : tout ce qui fonctionne avec le SDK OpenAI fonctionne à l'identique via OpenMulti, y compris avec model: "auto".

Appel d'outils (function calling)

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Météo actuelle d'une ville",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

r = client.chat.completions.create(
    model="auto",
    messages=[{"role": "user", "content": "Quel temps à Nice ?"}],
    tools=tools,
)

call = r.choices[0].message.tool_calls[0]
# call.function.name == "get_weather", call.function.arguments == '{"city": "Nice"}'

Renvoyez ensuite le résultat de l'outil avec un message role: "tool", comme avec l'API OpenAI :

messages.append(r.choices[0].message)
messages.append({
    "role": "tool",
    "tool_call_id": call.id,
    "content": '{"temp_c": 24, "sky": "clear"}',
})
r2 = client.chat.completions.create(model="auto", messages=messages, tools=tools)

tool_choice ("auto", "none", "required" ou un outil précis) passe tel quel.

Conseil — pour les boucles agentiques, openmulti.purpose: "agent" oriente le routage vers les modèles solides en appel d'outils et en code.

Sorties structurées (JSON Schema)

r = client.chat.completions.create(
    model="auto",
    messages=[{"role": "user", "content": "Extrait le nom et l'email : ..."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "contact",
            "schema": {
                "type": "object",
                "properties": {"name": {"type": "string"}, "email": {"type": "string"}},
                "required": ["name", "email"],
            },
        },
    },
)

response_format: {"type": "json_object"} fonctionne aussi.

Note — le support effectif de ces capacités dépend du modèle qui sert la requête. Si votre code en dépend strictement, restreignez les candidats avec openmulti.allow, ou passez un id concret.