docs
Connexion

SDK OpenAI

Markdown

Les bibliothèques officielles OpenAI pour Python et Node.js fonctionnent avec Ailoot sans modifier le code : seuls l’adresse et la clé changent.

Guide complet

Installation

pip install openai

Connexion

Définissez l’adresse de base https://api.ailoot.ai/v1. Vous pouvez le faire dans le code ou via les variables OPENAI_BASE_URL et OPENAI_API_KEY — le code reste alors entièrement inchangé.

from openai import OpenAI
import os

client = OpenAI(max_retries=0, 
    base_url="https://api.ailoot.ai/v1",
    api_key=os.environ["AILOOT_API_KEY"],
)

resp = client.chat.completions.create(
    model="claude-sonnet-5-5",
    messages=[{"role": "user", "content": "Explique en deux phrases ce qu’est une API."}],
)
print(resp.choices[0].message.content)

API Responses

Le nouveau format OpenAI. Disponible pour les modèles dont le catalogue indique le format Responses : 53 identifiants, dont Claude, GPT, DeepSeek, Qwen, Kimi et GLM.

resp = client.responses.create(
    model="gpt-6.1-sol",
    instructions="Réponds de manière concise et pertinente.",
    input="Quelle est la différence entre TCP et UDP ?",
)
print(resp.output_text)

Outils (function calling)

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

import json

messages = [{"role": "user", "content": "Quel temps fait-il à Kazan ?"}]
# Désactivez les nouvelles tentatives automatiques : après un dépassement de délai, vérifiez d’abord le Request ID dans votre historique d’utilisation.
client = client.with_options(max_retries=0)
for turn in range(4):
    resp = client.chat.completions.create(
        model="claude-sonnet-5-5", messages=messages, tools=tools,
    )
    message = resp.choices[0].message
    messages.append(message.model_dump(exclude_none=True))
    if not message.tool_calls:
        print(message.content)
        break
    for call in message.tool_calls:
        if call.function.name != "get_weather":
            raise ValueError("Unexpected function")
        arguments = json.loads(call.function.arguments)
        # Remplacez par votre propre fonction météo ; cet exemple utilise explicitement des données de démonstration.
        result = {"city": arguments["city"], "temperature_c": 20, "demo": True}
        messages.append({"role": "tool", "tool_call_id": call.id,
                         "content": json.dumps(result, ensure_ascii=False)})
else:
    raise RuntimeError("Tool loop limit reached")

Embeddings

emb = client.embeddings.create(
    model="nvidia/nemotron-3-embed-1b",
    input=["Premier document", "Deuxième document"],
)
print(len(emb.data), len(emb.data[0].embedding))

Images en entrée

resp = client.chat.completions.create(
    model="gpt-6.1-sol",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Que voit-on sur cette image ?"},
            {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
        ],
    }],
)

Gestion des erreurs

Les erreurs Ailoot utilisent le format OpenAI, de sorte que les exceptions standard du SDK permettent de les intercepter. Le message contient le Request ID.

import openai

try:
    resp = client.chat.completions.create(model="claude-sonnet-5-5", messages=[{"role": "user", "content": "Bonjour"}])
except openai.APIStatusError as e:
    print(e.status_code, e.response.json()["error"]["code"])
    print(e.response.headers.get("x-request-id"))
Encore des questions ? Envoyez le Request ID et une description : nous vous aiderons à l’analyser.Contacter l’assistance