Les SDK officiels d’OpenAI pour Python et Node fonctionnent tels quels : réglez l’URL de base sur https://autonomousrelay.com/v1, utilisez une clé d’inférence et nommez tout modèle du catalogue par son identifiant auteur/modèle. Le Démarrage rapide donne le changement de deux lignes; cette page couvre le reste du SDK.
Le configurer une fois, par variables d’environnement
Les deux SDK lisent OPENAI_BASE_URL et OPENAI_API_KEY quand le client est créé sans arguments : du code qui utilise déjà OpenAI change de passerelle sans modification.
export OPENAI_BASE_URL="https://autonomousrelay.com/v1" export OPENAI_API_KEY="$AUTONOMOUSRELAY_API_KEY"
from openai import OpenAI
client = OpenAI() # reads both variables
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Hello"}],
)Ce que chaque méthode du SDK atteint
chat.completions.create: tous les modèles, avec diffusion en continu, appels d’outils etresponse_format. L’utilisation arrive dans le dernier morceau d’un flux.responses.create: sans état. Laissezstoreabsent ou àfalseet envoyez toute la conversation dansinput;previous_response_idest refusé par une erreur 400 qui le dit.embeddings.create,images.generate,audio.speech.createetaudio.transcriptions.create: les formats d’OpenAI, sur les modèles de plongement, d’image et d’audio du catalogue.completions.create: le point d’accès hérité, une invite par requête.models.list(): le catalogue.batches.createne fonctionne pas depuis le SDK : il prend un fichier téléversé, alors qu’ici les lots reçoivent leurs requêtes directement. EnvoyezPOST /v1/batchesavec n’importe quel client HTTP.
Les limites de chaque point d’accès sont dans Complétions de conversation.
Les champs que le SDK ne connaît pas
Une chaîne de repli (models) et les préférences d’acheminement (provider) ne sont pas des paramètres d’OpenAI. Python les envoie par extra_body; en Node, ajoutez-les à l’objet de la requête, avec une conversion de type en TypeScript.
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Hello"}],
extra_body={"models": ["anthropic/claude-sonnet-5", "openai/gpt-5.5"]},
)const resp = await client.chat.completions.create({
model: 'anthropic/claude-sonnet-5',
messages: [{ role: 'user', content: 'Hello' }],
models: ['anthropic/claude-sonnet-5', 'openai/gpt-5.5'],
} as OpenAI.ChatCompletionCreateParamsNonStreaming);Voyez Replis LLM et basculement entre fournisseurs et Acheminement pour le rôle de chaque champ.
Erreurs, nouvelles tentatives et identifiant de requête
- Les erreurs lèvent les exceptions habituelles du SDK, avec notre message :
AuthenticationError(401),PermissionDeniedError(403),NotFoundError(404, par exemple aucune clé de fournisseur pour ce modèle),RateLimitError(429) etBadRequestError(400). La page Erreurs les énumère. - Les SDK refont deux fois par défaut une requête qui reçoit 408, 409, 429 ou 5xx, en attendant ce que dit
retry-after. Une chaîne de repli essaie déjà d’autres modèles dans une même requête : les nouvelles tentatives du SDK n’interviennent qu’une fois toutes ces tentatives échouées. Réglezmax_retries(Python) oumaxRetries(Node) pour le changer. - L’
idd’une réponse (gen-…) est l’identifiant de la requête :GET /v1/generation?id=en donne le coût et le point d’accès qui l’a servie.