Base URL and SDK Migration7 juillet 2026Flatkey

Migration SDK multi-modèle : Conservez les clients OpenAI pour Claude, Gemini et DeepSeek

Planifiez une migration SDK multi-modèle qui conserve les clients OpenAI tout en testant Claude, Gemini, DeepSeek, les outils, le streaming, la facturation et la restauration.

Migration SDK multi-modèle : Conservez les clients OpenAI pour Claude, Gemini et DeepSeek

La migration d'un SDK multi-modèle ne devrait pas commencer par le remplacement de chaque bibliothèque cliente dans votre application. Si votre code de production utilise déjà le SDK OpenAI Python ou Node pour les complétions de chat, la première étape la plus sûre consiste à maintenir cette surface cliente stable, à déplacer le choix du fournisseur dans la configuration et à prouver le comportement de Claude, Gemini et DeepSeek derrière une route compatible avant d'élargir le trafic.

Flatkey est conçu pour les équipes qui souhaitent une seule clé, une couche de routage compatible avec OpenAI, un accès aux modèles de différents fournisseurs, ainsi qu'un examen de l'utilisation et de la facturation en un seul endroit. Cela le rend utile pour une migration de SDK multi-modèle, mais ne supprime pas la nécessité de tester les familles de points de terminaison, les alias de modèles, le streaming, les appels d'outils et les enregistrements d'utilisation. Considérez chaque exemple de code ici comme un modèle jusqu'à ce que vous le validiez avec votre propre clé Flatkey et votre catalogue de modèles actuel.

L'objectif pratique est simple : conserver l'objet de requête que votre application connaît déjà, isoler les quelques valeurs qui doivent changer et construire un paquet de preuves avant le basculement.

Matrice de décision pour la migration d'un SDK multi-modèle

Utilisez cette matrice avant de modifier le code. Elle sépare ce qui peut rester stable de ce qui doit devenir configurable.

CoucheÀ garder stableÀ rendre configurablePreuve à conserver
Client SDKImportation du SDK OpenAI existant et chemin d'appel de la complétion de chatClé API, URL de base, délai d'attente, politique de relanceVersion du SDK et configuration de démarrage expurgée
Forme de la requêtemessages, model, stream, outils de base là où ils sont pris en chargeExtras spécifiques au fournisseur et paramètres non pris en chargeRequête minimale et réponse brute
Sélection du modèleAlias au niveau de l'application tels que support_chat ou analysis_fastAlias de modèle de la passerelle et famille de points de terminaisonCapture d'écran ou exportation du catalogue de modèles
OpérationsJournaux existants, ID de requête et gestion des erreursFournisseur, route, utilisation, quota et métadonnées de restaurationPreuve du tableau de bord/de relecture
Mise en productionChemin de déploiement actuel de l'applicationVariables d'environnement pour le déploiement progressif et la restaurationResponsable de la restauration et configuration précédente

C'est la discipline fondamentale de la migration d'un SDK multi-modèle : ne mélangez pas le remplacement de la bibliothèque, la migration des prompts, l'évaluation du fournisseur, la validation de la facturation et le déploiement en production en une seule mise en production.

Ce que disent les documentations officielles sur la compatibilité

Les SDK d'OpenAI prennent déjà en charge le modèle dont vous avez besoin. Le README actuel d'OpenAI Python documente le client OpenAI et une option base_url, et le README de Node documente le client OpenAI standard et les complétions de chat. La référence API d'OpenAI indique que les complétions de chat créent une réponse de modèle pour une conversation, prennent en charge le streaming et retournent un objet de complétion de chat ou des morceaux de flux (stream chunks).

Si vous divisez le déploiement par environnement d'exécution, associez cette liste de contrôle au guide sur l'URL de base personnalisée du SDK OpenAI Python et au guide sur l'URL de base du SDK OpenAI Node. Si la première décision concerne le routage des fournisseurs plutôt que la configuration du client, utilisez le guide de routage des API Claude vs GPT avant de choisir la charge de travail de test.

La compatibilité des fournisseurs diffère :

FournisseurSignal de compatibilité officielImplication pour la migration
SDK OpenAIPython prend en charge base_url ; Node utilise baseURL ; les complétions de chat ont les champs messages, model, stream, outils et utilisation.Conservez l'enveloppeur (wrapper) du client OpenAI pour la première tranche de la migration.
Anthropic / ClaudeAnthropic publie une couche de compatibilité avec le SDK OpenAI, mais indique qu'elle est principalement destinée aux tests et à la comparaison, et non au chemin de production à long terme pour la plupart des cas d'utilisation. L'API native Messages utilise /v1/messages, max_tokens, messages, et un paramètre system de haut niveau.Utilisez la compatibilité pour une évaluation rapide, mais testez les exigences natives de Claude avant de vous fier aux fonctionnalités spécifiques du fournisseur.
Google GeminiGoogle indique que les modèles Gemini sont accessibles via les bibliothèques OpenAI Python, TypeScript/JavaScript et REST en modifiant la clé API, l'URL de base et le modèle.Gemini est un bon candidat pour un test de fumée (smoke test) au format OpenAI, avec un raisonnement et un comportement spécifique au modèle vérifiés séparément.
DeepSeekDeepSeek indique que son format d'API est compatible avec OpenAI et Anthropic ; sa documentation de premier appel liste les URL de base d'OpenAI et d'Anthropic ainsi que des exemples au format OpenAI.DeepSeek peut s'adapter au chemin du client OpenAI, mais les dépréciations de noms de modèles et les paramètres de réflexion nécessitent des vérifications explicites.
FlatkeyLa page publique des modèles de Flatkey expose des types de points de terminaison tels que openai, anthropic et gemini ; la page d'accueil montre une route de complétions de chat compatible avec OpenAI.Sélectionnez les modèles par famille de points de terminaison, et non uniquement par nom de fournisseur.

La leçon importante est que « compatible OpenAI » signifie généralement que le client peut envoyer une requête au format OpenAI. Cela ne signifie pas que chaque paramètre, schéma d'outil, contrôle de raisonnement, entrée multimédia ou champ d'utilisation se comporte de manière identique d'un fournisseur à l'autre.

Étape 1 : Figer la frontière du client

Commencez la migration du SDK multi-modèle en plaçant le client OpenAI derrière une fabrique (factory) locale. La fabrique doit être le seul endroit qui connaisse la clé, l'URL de base, le délai d'attente et l'alias du modèle.

import os
from openai import OpenAI


def make_llm_client() -> OpenAI:
    return OpenAI(
        api_key=os.environ["FLATKEY_API_KEY"],
        base_url=os.getenv("FLATKEY_BASE_URL", "https://router.flatkey.ai/v1"),
        timeout=float(os.getenv("LLM_TIMEOUT_SECONDS", "60")),
        max_retries=int(os.getenv("LLM_MAX_RETRIES", "2")),
    )


client = make_llm_client()

completion = client.chat.completions.create(
    model=os.environ["FLATKEY_MODEL"],
    messages=[
        {"role": "system", "content": "You answer with short implementation notes."},
        {"role": "user", "content": "Reply with exactly: migration probe ok"},
    ],
)

print(completion.choices[0].message.content)

Pour Node :

import OpenAI from "openai";

export function makeLlmClient() {
  return new OpenAI({
    apiKey: process.env.FLATKEY_API_KEY,
    baseURL: process.env.FLATKEY_BASE_URL ?? "https://router.flatkey.ai/v1",
    timeout: Number(process.env.LLM_TIMEOUT_MS ?? 60000),
    maxRetries: Number(process.env.LLM_MAX_RETRIES ?? 2),
  });
}

const client = makeLlmClient();

const completion = await client.chat.completions.create({
  model: process.env.FLATKEY_MODEL,
  messages: [
    { role: "system", content: "You answer with short implementation notes." },
    { role: "user", content: "Reply with exactly: migration probe ok" },
  ],
});

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

L'application doit appeler make_llm_client() ou makeLlmClient(), et non construire des clients à travers les contrôleurs, les workers et les scripts. Cette frontière unique est ce qui permet à une migration de SDK multi-modèle de rester réversible.

Étape 2 : Construire une carte des modèles et des points de terminaison

Ne dirigez pas chaque charge de travail vers un seul nouveau nom de modèle. Commencez par une carte qui nomme la charge de travail, la famille de points de terminaison, le fournisseur actuel, le fournisseur cible et la valeur de restauration (rollback).

Charge de travailFamille de points de terminaisonChemin actuelChemin cibleRestauration (Rollback)
Chat de supportComplétions de chat de style OpenAIModèle OpenAI actuelAlias de chat Flatkey pour GPT, Claude, Gemini ou DeepSeekClé, URL de base et modèle précédents
Analyse interneComplétions de chat de style OpenAIModèle OpenAI actuelAlias de modèle Flatkey sélectionné pour le raisonnement et le coûtAlias de modèle précédent
Flux de travail d'outilComplétions de chat avec des outilsModèle actuel compatible avec les outilsModèle candidat avec un comportement d'outil vérifiéDésactiver la route du fournisseur
Interface utilisateur en streamingFlux de complétions de chatAnalyseur de flux actuelFournisseur candidat avec preuve de flux brutRétablir le trafic du flux
Fonctionnalité native de ClaudeAPI Messages d'AnthropicClient natif de ClaudeConserver le natif si la compatibilité supprime une fonctionnalité requiseNe pas migrer ce chemin

La page des modèles de Flatkey est utile ici car elle expose les types de points de terminaison. Si un modèle est répertorié sous une famille de points de terminaison native, ne présumez pas qu'il est disponible via le chemin de chat OpenAI tant que le catalogue de votre compte et les tests de fumée (smoke tests) ne le prouvent pas.

Étape 3 : Exécuter le test de fumée (smoke test) à quatre fournisseurs

Le test de fumée (smoke test) minimal utile pour une migration de SDK multi-modèle comporte quatre lignes de fournisseurs et le même prompt. Gardez le prompt simple afin que le style de la réponse ne masque pas les échecs de transport.

TestRequêteCondition de réussiteÉchec à trier
GPT ou modèle OpenAI actuelRequête existante au format OpenAI via FlatkeyLa réponse est retournée, l'utilisation est visible, les journaux pointent vers l'alias attenduClé incorrecte, URL de base incorrecte, /v1 en double, modèle manquant
ClaudeMême requête au format OpenAI via l'alias Flatkey sélectionnéUne réponse simple est retournée ; aucune fonctionnalité non prise en charge dans la requêteMappage des messages système, schéma d'outil, fonctionnalités natives exclusives à Claude
GeminiMême requête au format OpenAI via l'alias Flatkey sélectionnéUne réponse simple est retournée ; les paramètres de raisonnement par défaut sont acceptablesAlias de modèle, paramètres de raisonnement, hypothèses multimodales
DeepSeekMême requête au format OpenAI via l'alias Flatkey sélectionnéUne réponse simple est retournée ; l'alias sensible à la dépréciation est à jourRenommage du modèle, paramètres de réflexion, analyseur de flux

Enregistrez le corps brut de la requête, les en-têtes expurgés, le corps de la réponse, le statut HTTP, l'alias du modèle, l'ID de la requête s'il est retourné, et l'entrée d'utilisation du tableau de bord. Si un fournisseur a besoin d'un paramètre différent, déplacez ce paramètre dans un profil de fournisseur plutôt que de disperser des branches if provider == dans votre application.

Étape 4 : Tester le streaming et les appels d'outils séparément

Une complétion simple ne prouve que le chemin le moins risqué. Le streaming et les appels d'outils sont des contrats distincts.

Pour le streaming, enregistrez :

Élément de preuvePourquoi c'est important
En-têtes de réponseConfirme si la route renvoie des données event-stream.
Premier événementDétecte les problèmes de mise en mémoire tampon ou d'analyseur de proxy.
Événement finalConfirme la gestion de fin de flux et le comportement d'utilisation.
Sortie de l'analyseur de l'interface utilisateurProuve que votre frontend n'a pas supposé la forme des blocs de données d'un fournisseur unique.

Pour les outils, testez d'abord un schéma minuscule :

{
  "type": "function",
  "function": {
    "name": "lookup_order_status",
    "description": "Return a test order status.",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string" }
      },
      "required": ["order_id"]
    }
  }
}

N'utilisez pas votre plus grand schéma d'outil de production comme première preuve. La documentation de compatibilité d'Anthropic, par exemple, signale des limitations concernant la compatibilité avec OpenAI et recommande l'API native de Claude pour l'ensemble complet des fonctionnalités de Claude. C'est exactement le genre de détail qu'une liste de contrôle de migration SDK multi-modèle devrait détecter avant le déploiement.

Étape 5 : Gardez des profils de fournisseur réduits

Les profils de fournisseur doivent décrire les différences, et non contenir la logique métier.

{
  "support_chat": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_SUPPORT_CHAT_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": true,
    "tools": "basic",
    "fallback_alias": "support_chat_previous"
  },
  "analysis_fast": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_ANALYSIS_FAST_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": false,
    "tools": "none",
    "fallback_alias": "analysis_fast_previous"
  }
}

Gardez les fonctionnalités natives des fournisseurs hors du chemin du client OpenAI partagé, à moins que vous n'ayez des tests pour chaque fournisseur cible. Si des citations Claude, un comportement multimédia spécifique à Gemini, des contrôles de raisonnement DeepSeek ou un point de terminaison de traitement par lots natif au fournisseur sont requis, créez un adaptateur natif nommé et conservez le chemin compatible OpenAI pour les charges de travail qui lui conviennent vraiment.

Étape 6 : Prouvez la facturation et la restauration

Une migration qui renvoie du texte mais perd les preuves de facturation n'est pas terminée. Avant d'augmenter le trafic, enregistrez :

Vérification des opérationsCondition de réussite
Visibilité de l'utilisationLa requête apparaît dans l'utilisation ou les journaux de Flatkey avec le contexte de route/modèle attendu.
Examen des coûtsLes enregistrements de tarification ou d'utilisation sont suffisamment visibles pour que les services financiers ou opérationnels puissent les rapprocher.
Comportement des quotasUn quota de test faible ou un seuil de budget se comporte comme prévu dans une clé de non-production.
Taxonomie des erreursLes erreurs 401, 403, 404, 429, 5xx et les erreurs de fournisseur sont associées à des actions claires pour les responsables.
RestaurationUn seul changement d'environnement renvoie le trafic vers la clé/l'URL de base/le modèle précédent.

C'est là que l'examen unifié de la facturation et de l'utilisation de Flatkey prend tout son sens. L'objectif n'est pas seulement d'accéder à plus de modèles. L'objectif d'une migration SDK multi-modèle est un accès que les équipes produit, opérations et finance peuvent inspecter après le déplacement du trafic.

Un flux de travail de basculement pour la migration SDK multi-modèle

Utilisez cet ordre pour la première tranche de production :

  1. Choisissez une charge de travail à faible risque avec un client SDK OpenAI existant.
  2. Ajoutez la fabrique de clients et les variables d'environnement sans changer le fournisseur actuel.
  3. Prouvez le modèle actuel via la nouvelle fabrique.
  4. Prouvez une cible Claude, Gemini ou DeepSeek avec une complétion simple.
  5. Prouvez le streaming et les outils uniquement si cette charge de travail les utilise.
  6. Vérifiez l'utilisation, la facturation, la gestion des erreurs et la restauration.
  7. Acheminez un petit pourcentage du trafic vers le nouvel alias de modèle.
  8. Examinez les échecs par fournisseur et par famille de points de terminaison avant d'ajouter la charge de travail suivante.

Si la première charge de travail nécessite des fonctionnalités natives du fournisseur, choisissez une charge de travail différente pour la première migration SDK multi-modèle. La première tranche doit prouver le modèle de migration, pas toutes les capacités du modèle.

FAQ

Puis-je utiliser un seul client SDK OpenAI pour Claude, Gemini et DeepSeek ?

Vous pouvez souvent conserver un client SDK OpenAI pour les routes compatibles avec OpenAI, mais vous avez toujours besoin de tests spécifiques au fournisseur. Google et DeepSeek documentent un accès compatible avec OpenAI. Anthropic documente une couche de compatibilité SDK OpenAI, mais indique qu'elle est principalement destinée aux tests et à la comparaison plutôt qu'au choix de production à long terme pour la plupart des cas d'utilisation.

Dois-je migrer le trafic de l'API Responses de la même manière ?

Uniquement si la passerelle cible et le modèle cible prennent explicitement en charge la famille de points de terminaison que vous utilisez. Les complétions de chat et les réponses ne sont pas le même contrat. Commencez par la famille de points de terminaison que votre application utilise déjà, puis créez un plan de test distinct pour les réponses.

Quelle est l'erreur la plus courante dans une migration SDK multi-modèle ?

L'erreur la plus courante est de considérer le changement d'URL de base comme l'ensemble de la migration. Une véritable migration SDK multi-modèle vérifie également les noms de modèles, les familles de points de terminaison, le streaming, les outils, l'utilisation, les quotas, la gestion des erreurs et la restauration.

Quand dois-je conserver un SDK de fournisseur natif ?

Conservez un SDK de fournisseur natif lorsque votre charge de travail dépend de fonctionnalités spécifiques au fournisseur que la couche de compatibilité ne couvre pas. Les fonctionnalités natives de Claude, les chemins multimédias spécifiques à Gemini ou les contrôles de raisonnement spécifiques à DeepSeek peuvent justifier un adaptateur distinct.

Liste de contrôle finale

Avant de considérer la migration comme terminée, confirmez que vous avez :

ÉlémentTerminé lorsque
Fabrique de clientsTous les chemins d'application utilisent un wrapper SDK OpenAI ou un adaptateur natif nommé.
Division de la configurationLa clé API, l'URL de base, l'alias du modèle, le délai d'attente, les tentatives et le propriétaire de la route sont pilotés par l'environnement.
Preuve du fournisseurLes candidats GPT, Claude, Gemini et DeepSeek ont été testés avec des preuves brutes enregistrées.
Preuve de la fonctionnalitéLe streaming et les outils ont été testés séparément de la discussion simple.
Preuve des opérationsL'utilisation, la facturation, les quotas, les journaux et les erreurs sont visibles par les propriétaires appropriés.
Preuve de restaurationUne modification documentée ramène la charge de travail à la route précédente.

La migration SDK multi-modèle fonctionne mieux lorsqu'elle est sans surprise : une petite charge de travail, une seule limite de client, une seule carte de modèle et des preuves pour chaque fournisseur que vous ajoutez. Lorsque vous êtes prêt à exécuter ces tests via une route unifiée, obtenez une clé Flatkey et commencez par un chemin de discussion compatible OpenAI à faible risque.