Proxy et SDK LiteLLM avec DeepSeek, Claude et toute API compatible OpenAI

LiteLLM est un SDK Python et un serveur proxy gratuits et open source qui placent une seule API au format OpenAI devant de nombreux fournisseurs de modèles. Nous l'avons configuré avec l'API compatible OpenAI de Zurelay, fait passer le SDK, le proxy et Claude Code par ce biais, et noté chaque réglage qui posait problème.

· Guides Zurelay · Tarifs actualisés en direct

Ce que fait LiteLLM

  • Le SDK est une fonction Python, completion(), qui appelle n'importe quel fournisseur au format OpenAI. Le préfixe du nom du modèle détermine le fournisseur : openai/ désigne n'importe quelle API compatible OpenAI.
  • Le proxy est un serveur que vous hébergez vous-même, sur http://localhost:4000 par défaut. Vos applications l'appellent au format OpenAI ou Anthropic, et il ajoute clés, budgets, journalisation et solutions de repli devant vos fournisseurs.

Configurer le proxy

  1. Installez-le dans un environnement virtuel. LiteLLM 1.106 nécessite Python 3.10 ou une version ultérieure.
terminal
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install "litellm[proxy]"
  1. Écrivez le fichier config.yaml. Voici celui que nous avons testé : DeepSeek V4.1 Flash via le endpoint compatible OpenAI, Claude Sonnet 5.5 via le fournisseur Anthropic de LiteLLM, et un joker qui donne accès à tous les autres modèles sous la forme zurelay/<model ID>. Les prix model_info sont les prix actuels de Zurelay.
config.yaml
model_list:
- model_name: deepseek-v4.1-flash
litellm_params:
model: openai/deepseek-v4.1-flash
api_base: https://api.zurelay.com/v1
api_key: os.environ/ZURELAY_API_KEY
use_chat_completions_api: true
model_info:
input_cost_per_token: 0.00000003
output_cost_per_token: 0.00000012
cache_read_input_token_cost: 0.00000000074
- model_name: claude-sonnet-5-5
litellm_params:
model: anthropic/claude-sonnet-5-5
api_base: https://api.zurelay.com
api_key: os.environ/ZURELAY_API_KEY
model_info:
input_cost_per_token: 0.00000079
output_cost_per_token: 0.00000395
cache_read_input_token_cost: 0.000000079
- model_name: zurelay/*
litellm_params:
model: openai/*
api_base: https://api.zurelay.com/v1
api_key: os.environ/ZURELAY_API_KEY
use_chat_completions_api: true
litellm_settings:
use_chat_completions_url_for_anthropic_messages: true
check_provider_endpoint: true
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
  1. Lancez-le avec votre clé Zurelay et une clé maître de votre choix. Les clients envoient la clé maître ; LiteLLM attend des clés qui commencent par sk-.
terminal
export ZURELAY_API_KEY="zr_live_..."
export LITELLM_MASTER_KEY="sk-choose-a-long-random-key"
litellm --config config.yaml
  1. Appelez-le comme n'importe quelle API compatible OpenAI, avec le model_name de la configuration.
terminal
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-v4.1-flash", "messages": [{"role": "user", "content": "Hello"}]}'

Ou utilisez le SDK Python

Sans le proxy, passez l'URL de base et la clé à chaque appel. Pour Claude via le fournisseur anthropic/ de LiteLLM, l'URL de base est https://api.zurelay.com, sans /v1.

app.py
import os
from litellm import completion
response = completion(
model="openai/deepseek-v4.1-flash",
api_base="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)
claude = completion(
model="anthropic/claude-sonnet-5-5",
api_base="https://api.zurelay.com",
api_key=os.environ["ZURELAY_API_KEY"],
messages=[{"role": "user", "content": "Hello"}],
)

Claude Code via LiteLLM

Le proxy prend aussi en charge l'API Messages d'Anthropic, ce qui permet à Claude Code de fonctionner avec n'importe quel modèle de la configuration. Pointez Claude Code vers le proxy et indiquez les modèles à utiliser :

terminal
export ANTHROPIC_BASE_URL="http://localhost:4000"
export ANTHROPIC_AUTH_TOKEN="$LITELLM_MASTER_KEY"
export ANTHROPIC_MODEL="deepseek-v4.1-flash"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-sonnet-5-5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4.1-flash"
claude

Si vous n'utilisez que des modèles Claude, LiteLLM n'est pas nécessaire : Claude Code communique directement avec Zurelay, comme le montre la tarification de Claude Code. Pour un routeur avec une page web plutôt qu'un fichier YAML, consultez Claude Code Router.

Les réglages qui l'ont cassé

  1. Claude Code a échoué sur DeepSeek avec Unknown request URL: POST /v1/responses. Pour les modèles openai/, LiteLLM convertit les requêtes Anthropic Messages en appels à l'API Responses d'OpenAI, que Zurelay ne prend pas en charge. Après un premier échec, LiteLLM a aussi mis le modèle en période de refroidissement, si bien que les requêtes suivantes ont reçu 429 No deployments available for selected model. use_chat_completions_url_for_anthropic_messages: true sous litellm_settings les redirige vers Chat Completions à la place.
  2. Les clients de l'API Responses échouaient de la même façon. Une requête envoyée à /v1/responses du proxy, ou à litellm.responses() dans le SDK, était transmise telle quelle en amont tant que use_chat_completions_api: true n'était pas défini sur le modèle.
  3. Claude avec /v1 dans l'URL de base a appelé /v1/v1/messages et a reçu une erreur 404. Le fournisseur anthropic/ ajoute /v1/messages lui-même ; les modèles openai/ ont besoin de /v1.
  4. Le joker listait les mauvais modèles. Avec openai/*, le /v1/models du proxy affichait la liste intégrée de LiteLLM, soit 216 noms OpenAI (gpt-3.5-turbo, babbage-002), et aucun modèle de Zurelay. Les requêtes avec de vrais identifiants de modèle fonctionnaient quand même. check_provider_endpoint: true lui a fait lister les modèles de Zurelay à la place.
  5. Sous Windows, le proxy plantait au démarrage avec UnicodeEncodeError: 'charmap' codec can't encode characters lorsque sa sortie était redirigée vers un fichier de log : la bannière contient des caractères absents de la page de code par défaut. Le mode UTF-8 de Python a réglé le problème : PYTHONUTF8=1 dans l'environnement, ou python -X utf8.

Suivi des coûts

Le suivi des dépenses de LiteLLM calcule le prix de chaque requête à partir de sa propre liste. Pour les modèles qu'il connaît, il s'agit du tarif public du laboratoire : il a compté notre requête Claude Sonnet 5.5 au tarif d'Anthropic, soit environ 2,5 fois ce que Zurelay a facturé. Pour les modèles qu'il ne connaît pas, comme DeepSeek V4.1 Flash derrière openai/, il n'enregistre aucun coût. Les lignes model_info de la configuration ci-dessus règlent ces deux problèmes : avec elles, le coût renvoyé par LiteLLM dans son en-tête x-litellm-response-cost correspondait à notre facture.

Le coût de notre test

Via le proxy, Claude Code a écrit un petit fichier Python avec DeepSeek V4.1 Flash, puis l'a modifié avec Claude Sonnet 5.5. Les deux modèles ont utilisé correctement les outils de fichiers de Claude Code. Zurelay a facturé :

ModèleTâcheRequêtesTokens du prompt (en cache)Coût
DeepSeek V4.1 FlashCréer hello.py339,725 (25,845)$0.0005
Claude Sonnet 5.5Modifier hello.py351,310 (32,523)$0.023

Chaque requête embarquait les instructions et les définitions d'outils de Claude Code, soit 13 000 à 18 000 tokens, et dès la deuxième requête, l'essentiel était lu depuis le cache. L'estimation de Claude Code lui-même pour la tâche avec Claude était de $0.054, aux prix publics d'Anthropic. Les appels SDK précédents, avec une réponse courte chacun, ont coûté $0.000006 sur DeepSeek et $0.0003 sur Claude Sonnet 5.5.

À savoir

  • Le proxy écoute sur toutes les interfaces réseau (0.0.0.0) sauf si vous passez --host 127.0.0.1. Gardez la clé maître définie, sinon n'importe qui sur votre réseau pourra dépenser votre crédit.
  • Pour les modèles génériques (wildcard), l'ID réel suit le préfixe : zurelay/gpt-6.1-terra dans une requête devient gpt-6.1-terra chez Zurelay.
  • Sous Windows, installez dans un dossier au chemin court. Un environnement virtuel placé trop profondément dans un dossier temporaire a échoué avec ModuleNotFoundError: No module named 'openai.types...' parce que certains chemins de fichiers dépassaient la limite de 260 caractères de Windows.

Les tarifs des modèles que vous placeriez derrière

Pour 1M tokens, le tarif catalogue du laboratoire et celui de Zurelay :

ModèleEntréeSortieSur Zurelay (entrée / sortie)
DeepSeek V4.1 Flash$0.30$1.20$0.03 / $0.12
Claude Sonnet 5.5$2.00$10.00$0.79 / $3.95
Claude Opus 5.5$4.00$20.00$1.40 / $7.00
GPT-6.1 Terra$1.00$5.00$0.25 / $1.25
Gemini 3.8 Flash$0.75$3.75$0.22 / $1.10
Kimi K3.1 Pro$2.00$10.00$0.80 / $4.00
GLM-5.3$1.40$4.40$0.38 / $1.21

Testé sur 3 novembre 2026 avec LiteLLM 1.106.6 sous Python 3.12 et Claude Code 2.1.317, sous Windows, avec l'API de Zurelay. La configuration rapide est décrite dans LiteLLM dans la documentation. Documentation officielle de LiteLLM : Endpoints compatibles OpenAI et configuration du proxy.

Tous les modèles avec une seule clé compatible OpenAI, sous les tarifs catalogue. Crédit dès $10, sans abonnement.Obtenez votre clé API

FAQ

Questions fréquentes

D’autres questions ? Contactez notre équipe et nous vous répondrons par e-mail.

Qu'est-ce que LiteLLM ?

Un SDK Python et serveur proxy open source de BerriAI. Le SDK appelle de nombreux fournisseurs de modèles via une seule fonction au format OpenAI ; le proxy est un serveur que vous hébergez et que vos applications appellent au format OpenAI ou Anthropic, avec gestion des clés, budgets, journalisation et solutions de repli devant vos fournisseurs.

LiteLLM est-il gratuit ?

Oui. Le SDK et le proxy sont open source sous licence MIT, à l'exception des fonctionnalités entreprise situées dans le dossier enterprise du dépôt, qui ont leur propre licence. Vous ne payez que les fournisseurs auxquels vous envoyez des requêtes.

Comment utiliser une API compatible OpenAI avec LiteLLM ?

Préfixez le nom du modèle par openai/ et définissez api_base sur l'URL de base du fournisseur, /v1 inclus, par exemple model: openai/deepseek-v4.1-flash avec api_base: https://api.zurelay.com/v1. La clé se place dans api_key, ou os.environ/NAME dans le config.yaml du proxy.

Pourquoi LiteLLM appelle-t-il /v1/responses ?

Pour les modèles openai/, LiteLLM envoie les requêtes Anthropic Messages (par exemple depuis Claude Code) et les requêtes Responses API à la Responses API du fournisseur. Les fournisseurs qui ne gèrent que Chat Completions répondent par une erreur 404. Définissez use_chat_completions_url_for_anthropic_messages: true sous litellm_settings, et use_chat_completions_api: true sur le modèle.

Comment utiliser Claude Code avec LiteLLM ?

Lancez le proxy LiteLLM avec les modèles de config.yaml, puis définissez ANTHROPIC_BASE_URL sur http://localhost:4000, ANTHROPIC_AUTH_TOKEN sur la clé maître du proxy, et ANTHROPIC_MODEL ainsi que les trois variables ANTHROPIC_DEFAULT_*_MODEL sur des noms de modèles de la configuration, puis exécutez claude.

Pourquoi le coût affiché par LiteLLM est-il faux ?

LiteLLM calcule le prix des requêtes à partir de sa propre liste : le tarif public du laboratoire pour les modèles qu'il connaît, et rien pour ceux qu'il ne connaît pas. Ajoutez input_cost_per_token, output_cost_per_token et cache_read_input_token_cost sous model_info pour chaque modèle afin de suivre ce que votre fournisseur facture réellement.

Quel port le proxy LiteLLM utilise-t-il ?

Le port 4000, sur toutes les interfaces réseau (0.0.0.0), sauf si vous passez --host. Changez le port avec --port ou la variable d'environnement PORT.

Autres guides

Ne payez plus le prix catalogue.
Économisez dès aujourd’hui.

Créez une clé en quelques secondes, configurez votre SDK habituel pour utiliser Zurelay et payez chaque requête jusqu’à 90% moins cher, dès le premier token.