# Migrer une intégration du SDK OpenAI

> Les trois lignes à changer pour faire passer un code du SDK OpenAI sur l'API Tukai, et une vérification gratuite que la migration est prête.

Source : https://developers.tuk-ai.com/cookbook/migrer-sdk · Vérifié le 2026-10-03

**Ce que fait la recette** : elle part d'un appel standard du SDK OpenAI et montre la version Tukai. Pour un appel de texte, **trois lignes** changent : l'URL de base, la clé et l'identifiant du modèle.

**Version vérifiée** : `openai` 7.27.0 pour Node.js, le 3 octobre 2026, avec la vérification ci-dessous.

## Avant

avant.mjs :

```typescript
// Intégration de départ, telle qu'on la trouve chez OpenAI. Ne s'exécute pas contre Tukai.
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const reponse = await client.chat.completions.create({
  model: process.env.OPENAI_MODEL, // un identifiant OpenAI
  max_tokens: 100,
  messages: [
    {
      role: "user",
      content: "Résume en une phrase : la réunion est déplacée à jeudi 10 h.",
    },
  ],
});

console.log(reponse.choices[0].message.content);
```

## Après

apres.mjs :

```typescript
// La même intégration, sur Tukai. Trois lignes changent ; elles sont marquées.
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: process.env.TUKAI_BASE_URL ?? "https://chat.tuk-ai.com/v1", // changé : URL de base Tukai
  apiKey: process.env.TUKAI_API_KEY, //                                   changé : clé tuk_sk_
});

const { data, response } = await client.chat.completions
  .create({
    model: process.env.TUKAI_MODELE ?? "chat-aion-labs-aion-3-0-mini", // changé : identifiant Tukai
    max_tokens: 100,
    messages: [
      {
        role: "user",
        content: "Résume en une phrase : la réunion est déplacée à jeudi 10 h.",
      },
    ],
  })
  .withResponse();

console.log(data.choices[0].message.content);
console.log(`x-request-id : ${response.headers.get("x-request-id")}`);
```

## Vérifier sans payer

Ce script envoie la requête avec une clé **volontairement invalide**. Une erreur `401` lue par le SDK prouve que l'URL, le chemin et la lecture des erreurs sont corrects ; rien n'est généré ni facturé.

verifier.mjs :

```typescript
// Vérification gratuite de la migration : envoie la requête de apres.mjs avec une clé
// VOLONTAIREMENT invalide. Une réponse 401 prouve que l'URL de base, le chemin et la lecture
// des erreurs par le SDK sont corrects, sans générer ni payer quoi que ce soit.
import OpenAI from "openai";

const URL_DE_BASE = process.env.TUKAI_BASE_URL ?? "https://chat.tuk-ai.com/v1";
const client = new OpenAI({
  baseURL: URL_DE_BASE,
  apiKey: "tuk_sk_INVALIDE",
  maxRetries: 0,
});

try {
  await client.chat.completions.create({
    model: "chat-aion-labs-aion-3-0-mini",
    max_tokens: 1,
    messages: [{ role: "user", content: "test" }],
  });
  console.error("✗ Réponse inattendue : une clé invalide a été acceptée.");
  process.exit(1);
} catch (erreur) {
  if (erreur instanceof OpenAI.AuthenticationError) {
    console.log(
      `✓ ${URL_DE_BASE}/chat/completions joint, erreur 401 lue par le SDK (x-request-id : ${erreur.requestID ?? "absent"})`,
    );
    console.log(
      "  La migration est prête : remplacez la clé de test par votre TUKAI_API_KEY.",
    );
  } else {
    console.error(
      `✗ Erreur inattendue : ${erreur.status ?? ""} ${erreur.message}`,
    );
    process.exit(1);
  }
}
```

Résultat attendu :

```text
✓ https://chat.tuk-ai.com/v1/chat/completions joint, erreur 401 lue par le SDK (x-request-id : …)
  La migration est prête : remplacez la clé de test par votre TUKAI_API_KEY.
```

## Ce qui ne migre pas

Changer ces trois lignes ne suffit **pas** si votre code utilise :

- des images ou de l'audio en entrée (ignorés par Tukai) ;
- des outils (`tools`) : la réponse Tukai ne contient pas `tool_calls` ;
- `finish_reason` pour détecter une réponse coupée (toujours `stop`) ;
- la Responses API, les embeddings, les fichiers ou les lots (absents).

Le détail est dans [Compatibilité](https://developers.tuk-ai.com/docs/compatibility). Pour le SDK Anthropic, l'URL de base est l'hôte seul (`https://chat.tuk-ai.com`) et la clé passe dans `apiKey`.
