Migrer d'OpenRouter à HiWay en 5 minutes
Un pas-à-pas concret avec code before/after complet
Migrer d'OpenRouter à HiWay2LLM prend 5 minutes. Code before/after complet en Python et Node.js, ce qui casse, ce qui reste pareil.
Migrer d'OpenRouter à HiWay2LLM est l'une des plus petites migrations en infra moderne. Tu swap un endpoint compatible OpenAI pour un autre. Ton SDK ne change pas. Ton code de streaming ne change pas. Ton tool use ne change pas.
Ce qui change : tu apportes tes propres clés provider (BYOK), ta facturation devient transparente, et tes noms de modèles passent du format author/model d'OpenRouter à des IDs de modèles directs.
Voici le chemin complet, chronométré.
Les 5 étapes
- Inscription sur HiWay2LLM (60 secondes).
- Ajouter tes clés provider — Anthropic, OpenAI, Google, Mistral, ce que tu utilises (2 minutes).
- Générer ta clé API HiWay (30 secondes).
- Changer
base_urlet la clé API dans ton code, mettre à jour les noms de modèles (1 minute). - Lancer ta test suite existante, vérifier que rien n'a cassé (1 minute).
C'est tout. Le reste de ce post, c'est le code.
Étape 1 : Inscription
Direction app.hiway2llm.com, crée un compte. Pas de carte bancaire pour le plan Free (2 500 requêtes/mois). Confirme ton email.
Étape 2 : Ajouter tes clés provider
Dans le dashboard, va dans Providers et colle tes clés déjà existantes :
- Anthropic (pour les modèles Claude)
- OpenAI (pour GPT et les modèles o-series)
- Google (pour Gemini)
- Mistral, Groq, DeepSeek, xAI, Cerebras — optionnels
Tes clés sont stockées chiffrées. Elles ne quittent jamais notre infra UE-hosted. HiWay les utilise pour appeler les providers en ton nom ; les providers te facturent directement au tarif wholesale.
C'est l'étape BYOK. Si tu viens d'OpenRouter, tu n'as jamais eu besoin de comptes provider — OpenRouter payait. Crée-les maintenant si besoin ; c'est 30 secondes de signup par provider.
Étape 3 : Générer ta clé API HiWay
Dans le dashboard, va dans API Keys → Create new key. Donne-lui un nom (ex. production-web), copie-la. Ça ressemble à :
hw_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Stocke-la dans ton secret manager ou ton .env. Ne la commit jamais.
Étape 4 : Changer ton code
Voici tout le changement de code. Comme HiWay est compatible OpenAI, n'importe quel SDK qui parle à OpenAI fonctionne sans modif — tu swap juste base_url et la clé API.
Python (OpenAI SDK)
Avant (OpenRouter) :
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4.6",
messages=[{"role": "user", "content": "Hello"}],
)
Après (HiWay) :
from openai import OpenAI
client = OpenAI(
base_url="https://app.hiway2llm.com/v1",
api_key=os.environ["HIWAY_API_KEY"],
)
response = client.chat.completions.create(
model="claude-sonnet-4-6", # ID direct, pas de préfixe author/
messages=[{"role": "user", "content": "Hello"}],
)
Deux lignes changées. Imports SDK, streaming, tool use, structured outputs — tout identique.
Node.js (OpenAI SDK)
Avant :
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const response = await client.chat.completions.create({
model: "openai/gpt-4.1",
messages: [{ role: "user", content: "Hello" }],
});
Après :
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://app.hiway2llm.com/v1",
apiKey: process.env.HIWAY_API_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4-1",
messages: [{ role: "user", content: "Hello" }],
});
Vercel AI SDK
Avant :
import { createOpenAI } from "@ai-sdk/openai";
const openrouter = createOpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const result = await streamText({
model: openrouter("anthropic/claude-sonnet-4.6"),
prompt: "Hello",
});
Après :
import { createOpenAI } from "@ai-sdk/openai";
const hiway = createOpenAI({
baseURL: "https://app.hiway2llm.com/v1",
apiKey: process.env.HIWAY_API_KEY,
});
const result = await streamText({
model: hiway("claude-sonnet-4-6"),
prompt: "Hello",
});
LangChain (Python)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://app.hiway2llm.com/v1",
api_key=os.environ["HIWAY_API_KEY"],
model="claude-sonnet-4-6",
)
curl
curl https://app.hiway2llm.com/v1/chat/completions \
-H "Authorization: Bearer $HIWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "Hello"}]
}'
Aucune carte bancaire requise
Ce qui reste pareil
- SDK : garde le SDK compatible OpenAI que tu as. Pas de réécriture.
- Streaming :
stream: truemarche à l'identique. - Tool use / function calling : même schéma.
- Structured outputs / JSON mode : pareil.
- Objet usage :
response.usage.prompt_tokensetcompletion_tokenssont retournés comme attendu. - Codes d'erreur : 429, 500, 502, 504 veulent dire la même chose.
Ce qui change
Noms de modèles
OpenRouter utilise author/model (ex. anthropic/claude-sonnet-4.6). HiWay utilise des IDs directs (ex. claude-sonnet-4-6). Tu peux trouver l'ID exact pour tout modèle supporté dans le catalogue de modèles du dashboard.
Un tableau de mapping rapide pour les plus courants :
| OpenRouter | HiWay |
|---|---|
anthropic/claude-opus-4.7 | claude-opus-4-7 |
anthropic/claude-sonnet-4.6 | claude-sonnet-4-6 |
anthropic/claude-haiku-4.6 | claude-haiku-4-6 |
openai/gpt-4.1 | gpt-4-1 |
openai/gpt-4.1-mini | gpt-4-1-mini |
google/gemini-2.5-pro | gemini-2-5-pro |
mistralai/mistral-large | mistral-large |
Facturation
OpenRouter te facturait directement, markup inclus. HiWay ne facture pas l'inférence — tes providers te facturent directement au tarif wholesale, et tu payes HiWay un abonnement flat (Free, Build à 15 €, Scale à 39 €, ou Business à 249 €/mois selon le volume). Deux factures au lieu d'une. Un poil plus de setup, beaucoup plus de transparence — et le smart routing coupe typiquement 40-85% sur la partie inférence en plus.
Smart routing (optionnel)
OpenRouter route vers le modèle que tu spécifies. HiWay peut faire pareil — ou, si tu passes l'ID magique auto, il choisit le modèle optimal par requête selon la complexité en moins d'1 ms :
response = client.chat.completions.create(
model="auto", # HiWay choisit le bon tier
messages=[{"role": "user", "content": "Hello"}],
)
Les salutations courtes vont vers Haiku. Le raisonnement dur vers Opus. Tout entre les deux vers Sonnet. Tu vois quel modèle a vraiment tourné dans les metadata de réponse.
C'est optionnel. Si tu veux le contrôle total, spécifie les noms de modèles explicitement.
Étape 5 : Vérifier
Lance ta test suite existante contre la nouvelle base_url. Les assertions qui passaient avec OpenRouter devraient passer à l'identique avec HiWay — même surface API, même sémantique.
Un smoke test rapide :
from openai import OpenAI
client = OpenAI(
base_url="https://app.hiway2llm.com/v1",
api_key=os.environ["HIWAY_API_KEY"],
)
r = client.chat.completions.create(
model="claude-haiku-4-6",
messages=[{"role": "user", "content": "Réponds OK."}],
)
assert "ok" in r.choices[0].message.content.lower()
print("HiWay marche.")
Si ça affiche HiWay marche., ta migration est terminée.
Plan de rollback
Si quoi que ce soit déconne, repointe base_url vers https://openrouter.ai/api/v1 et ton app est de retour sur OpenRouter instantanément. HiWay ne te lock pas — tout l'intérêt du BYOK c'est que tes clés provider sont les tiennes, et n'importe quel router compatible OpenAI peut les utiliser.
Pièges classiques
- Typos d'ID de modèle : le format est
claude-sonnet-4-6(tirets, pas de points, pas de préfixe author). Le dashboard a un bouton copy à côté de chaque. - Clé provider manquante : si tu appelles
claude-sonnet-4-6mais n'as pas ajouté ta clé Anthropic, HiWay renvoie un message d'erreur clair te disant quel provider manque. - Rate limits : les rate limits de ton provider s'appliquent, pas ceux de HiWay. Si tu tapais le quota partagé d'OpenRouter, tu vas maintenant taper ton propre quota Anthropic. Généralement c'est plus de marge, pas moins.
- Stats d'usage : l'UI d'usage par requête d'OpenRouter est dans leur dashboard. Celle de HiWay est dans le nôtre. Si tu avais des dashboards BI pointés sur OpenRouter, repointe-les.
Le takeaway
Cinq minutes. Un changement de base_url. Même SDK. Si la migration prend plus que ça, un truc cloche — généralement une clé provider oubliée ou un typo d'ID de modèle.
Le gain plus gros c'est ce qui se passe après : pas de markup sur l'inférence, facturation transparente de chaque provider, smart routing optionnel, et des clés BYOK qui te suivent si jamais tu pars.
Prochain : pourquoi on a construit HiWay en premier lieu — la founder's story.
Cet article t'a servi ?
Commentaires
Sois le premier à commenter.