April 20267 min de lectureJohan Bretonneau

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

  1. Inscription sur HiWay2LLM (60 secondes).
  2. Ajouter tes clés provider — Anthropic, OpenAI, Google, Mistral, ce que tu utilises (2 minutes).
  3. Générer ta clé API HiWay (30 secondes).
  4. Changer base_url et la clé API dans ton code, mettre à jour les noms de modèles (1 minute).
  5. 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 KeysCreate 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"}]
  }'
Économiser maintenant →

Aucune carte bancaire requise

Ce qui reste pareil

  • SDK : garde le SDK compatible OpenAI que tu as. Pas de réécriture.
  • Streaming : stream: true marche à l'identique.
  • Tool use / function calling : même schéma.
  • Structured outputs / JSON mode : pareil.
  • Objet usage : response.usage.prompt_tokens et completion_tokens sont 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 :

OpenRouterHiWay
anthropic/claude-opus-4.7claude-opus-4-7
anthropic/claude-sonnet-4.6claude-sonnet-4-6
anthropic/claude-haiku-4.6claude-haiku-4-6
openai/gpt-4.1gpt-4-1
openai/gpt-4.1-minigpt-4-1-mini
google/gemini-2.5-progemini-2-5-pro
mistralai/mistral-largemistral-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-6 mais 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.

Partager

LinkedInXEmail

Cet article t'a servi ?

Commentaires

Sois le premier à commenter.