Exemples
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.
Vérifié le 3 octobre 2026Version MarkdownSignaler une erreur sur cette page
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
// 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
// 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é.
// 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 :
✓ 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 pastool_calls; finish_reasonpour détecter une réponse coupée (toujoursstop) ;- la Responses API, les embeddings, les fichiers ou les lots (absents).
Le détail est dans Compatibilité. Pour le SDK Anthropic, l'URL de base est l'hôte seul (https://chat.tuk-ai.com) et la clé passe dans apiKey.