SDK OpenAI
MarkdownLes 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 openainpm install openaiConnexion
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)import OpenAI from "openai";
const client = new OpenAI({ maxRetries: 0,
baseURL: "https://api.ailoot.ai/v1",
apiKey: process.env.AILOOT_API_KEY,
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-5-5",
messages: [{ role: "user", content: "Explique en deux phrases ce qu’est une API." }],
});
console.log(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)const resp = await 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 ?",
});
console.log(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"))try {
await client.chat.completions.create({ model: "claude-sonnet-5-5", messages: [{ role: "user", content: "Bonjour" }] });
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.log(err.status, err.code, err.headers?.["x-request-id"]);
}
}Encore des questions ? Envoyez le Request ID et une description : nous vous aiderons à l’analyser.Contacter l’assistance