OpenAI SDK

Un point d’accès /v1 pour tous les fournisseurs. Pointez votre client OpenAI vers une autre URL et une clé, avec vos clés et 0 % de majoration.

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.

bash
export OPENAI_BASE_URL="https://autonomousrelay.com/v1"
export OPENAI_API_KEY="$AUTONOMOUSRELAY_API_KEY"
python
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 et response_format. L’utilisation arrive dans le dernier morceau d’un flux.
  • responses.create : sans état. Laissez store absent ou à false et envoyez toute la conversation dans input; previous_response_id est refusé par une erreur 400 qui le dit.
  • embeddings.create, images.generate, audio.speech.create et audio.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.create ne fonctionne pas depuis le SDK : il prend un fichier téléversé, alors qu’ici les lots reçoivent leurs requêtes directement. Envoyez POST /v1/batches avec 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.

python
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"]},
)
typescript
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) et BadRequestError (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églez max_retries (Python) ou maxRetries (Node) pour le changer.
  • L’id d’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.