Documentation
LibreChat
LibreChat configure une passerelle sous forme de bloc dans librechat.yaml : quatre champs obligatoires, une variable d’environnement pour la clé et un redémarrage. Le sélecteur donne ensuite accès aux identifiants Claude et GPT derrière un seul nom de point de terminaison.
LibreChat utilise une passerelle sous forme de bloc endpoints.custom dans librechat.yaml — quatre champs obligatoires, la clé provenant de .env, puis un redémarrage avant son affichage dans le sélecteur.
# librechat.yaml — project root, beside your .env
version: 1.3.5 # the value the documentation's own example carries
endpoints:
custom:
# Required: name, apiKey, baseURL, models. The name must be unique and
# must not reuse a built-in endpoint name such as openAI or anthropic.
- name: "Kunavo"
apiKey: "${KUNAVO_API_KEY}" # resolved from .env, not written here
# Keep the /v1. LibreChat appends /chat/completions to this by default.
baseURL: "https://api.kunavo.com/v1"
models:
default: ["claude-sonnet-5", "claude-haiku-4-5"]
fetch: true # fills the picker from GET /v1/models
titleConvo: true
titleModel: "claude-haiku-4-5" # titles are a separate call — pin a cheap id
modelDisplayLabel: "Kunavo"
# Optional but worth the four lines: without it LibreChat prices your
# traffic from a table it ships. prompt/completion are USD per million
# tokens; context is that model's own window. All three required.
tokenConfig:
claude-sonnet-5:
prompt: 1.4
completion: 7
context: 1000000
claude-haiku-4-5:
prompt: 0.7
completion: 3.5
context: 200000baseURL conserve le /v1. La documentation tranche la question en toutes lettres plutôt que par un exemple : elle précise que directEndpoint sert lorsque l’URL de base est déjà le point de terminaison complet des complétions, et que cela est « nécessaire parce que l’application ajoute par défaut « /chat/completions » ou « /completion » à baseURL ». Ainsi, https://api.kunavo.com/v1 pointe vers /v1/chat/completions, la route à appeler, et directEndpoint reste non défini. Les deux exemples pratiques du site se terminent de la même façon : https://api.mistral.ai/v1 et https://openrouter.ai/api/v1. Une origine seule provoque ici une erreur 404, et non une erreur d’authentification.librechat.yaml doit se trouver à la racine du projet, être monté dans le conteneur API et que LibreChat doit être redémarré pour que la modification apparaisse dans l’interface. Si un nouveau point de terminaison n’apparaît pas dans le sélecteur, c’est presque toujours la cause, et non les identifiants. Vérifiez ceux-ci séparément avec la commande curl ci-dessous.tokenConfig ci-dessus permet justement de remplacer. Déclarez-le pour chaque identifiant proposé, ou considérez le registre comme une estimation et votre solde chez /app/billing comme la valeur de référence.curl ci-dessous ; le comportement du client dépend de LibreChat.sk-kn-) et ajoutez un crédit à partir de 10 $ — les appels sont payés sur ce solde et les appels échoués ne sont pas facturés. Le tableau de bord s’ouvre ensuite sur la configuration LibreChat.Étape par étape
- Créez une clé sur
/app/keyset copiez-la — elle n’est affichée qu’une seule fois. - Sur Docker, montez d’abord le fichier de configuration : le guide de démarrage rapide demande de copier
docker-compose.override.yml.exampleversdocker-compose.override.ymlet de décommenter le volumelibrechat.yaml. Une installation bare metal n’a pas besoin de cette étape. - Créez ou modifiez
librechat.yamlà la racine du projet, dans le même répertoire que votre.env, puis ajoutez l’entréeendpoints.customci-dessus. - Placez la clé dans
.envsous la formeKUNAVO_API_KEY=sk-kn-.... L’espace réservé${KUNAVO_API_KEY}dans le YAML est résolu à partir de ce fichier, ce qui évite d’inclure le secret dans le fichier de configuration que vous validez dans le dépôt. - Redémarrez LibreChat, puis ouvrez le sélecteur de points de terminaison : Kunavo apparaît comme une entrée distincte à côté des entrées intégrées. La liste des modèles est soit récupérée depuis
GET /v1/models, soit tirée de votre tableaumodels.defaultsi cette récupération échoue. - Envoyez un message, puis vérifiez que le sélecteur de modèles change bien de modèle : les identifiants sont résolus au point de terminaison. Il est donc normal d’avoir un identifiant Claude et un identifiant GPT sous une même entrée ; ce n’est pas une mauvaise configuration.
Vérifié avec Référence des objets de points de terminaison personnalisés de LibreChat le 21 septembre 2026. Les paramètres tiers évoluent ; si le nom d’un champ ne correspond plus à ce que vous voyez ici, cette page fait autorité, pas celle-ci.
Vérifiez avant de déboguer le client
Une requête suffit à déterminer si l’échec vient de l’endpoint, de la clé ou du fichier de configuration. Si cette requête renvoie du JSON, la même URL de base et la même clé fonctionnent dans LibreChat.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Quel identifiant de modèle saisir dans le champ
Tous les modèles textuels sont accessibles sous forme d’identifiant de modèle — la liste à jour se trouve sur GET /v1/models, et le catalogue avec les prix sur la page des modèles. Les tarifs sont en USD par million de tokens, entrée / sortie.
| Identifiant du modèle | Entrée / sortie sur Kunavo | Où cela s’intègre dans LibreChat |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | l’entrée par défaut de models. |
claude-opus-5 | $3.50 / $17.50 | l’identifiant sélectionné pour une longue analyse, lorsqu’une meilleure réponse vaut le coût du tour |
claude-haiku-4-5 | $0.70 / $3.50 | le trafic de volume d’une instance partagée et titleModel — LibreChat attribue un titre à chaque conversation lors d’un appel distinct |
gpt-5-6-terra | $0.70 / $4.20 | longs documents collés dans la conversation, pour lesquels la fenêtre de contexte est le facteur déterminant |
Trois champs facultatifs qui se comportent différemment derrière une passerelle
Toutes les informations de ce tableau proviennent de la même référence de champs, consultée à la date indiquée ci-dessus. Il s’agit de la description par LibreChat de sa propre configuration, et non d’un résultat de test Kunavo ni d’une affirmation sur le comportement d’un identifiant de modèle donné une fois la requête envoyée par le client.
| Champ | Ce qu’indique la référence | Pourquoi c’est important pour une passerelle |
|---|---|---|
provider | Achemine un point de terminaison personnalisé via un client de fournisseur natif. Anthropic est actuellement la valeur prise en charge. | Ce champ remplace le protocole réseau, pas le fournisseur : le même bloc peut utiliser le protocole Anthropic Messages au lieu de celui des complétions de chat. La récupération de modèles de type OpenAI n’est pas utilisée dans ce cas ; indiquez donc explicitement les identifiants sous models. |
models.fetch | Lorsque cette option est activée, tente de récupérer une liste de modèles depuis l’API et peut ralentir la première utilisation si la réponse tarde. | Kunavo répond à GET /v1/models, la liste du sélecteur se remplit donc toute seule. models. |
tokenConfig | Définit les fenêtres de contexte propres aux modèles et les tarifs par million de jetons pour le suivi des coûts et le calcul de l’utilisation. | Sans cette configuration, le registre calcule le coût de votre trafic à partir de la table fournie par LibreChat, en faisant correspondre un identifiant pour lequel cette table n’a jamais été conçue. Avec cette configuration, les chiffres affichés dans l’interface sont ceux que vous avez définis. |
Le guide en quatre étapes — monter le fichier, configurer, définir la variable d’environnement, redémarrer — se trouve sur la page de démarrage rapide de LibreChat consacrée aux points de terminaison personnalisés, qui utilise une passerelle dans son exemple pratique.
Questions fréquentes
Comment ajouter un point de terminaison personnalisé à LibreChat ?
Créez librechat.yaml à la racine du projet, à côté de votre .env, puis ajoutez une entrée sous endpoints.custom avec les quatre champs obligatoires : name, apiKey, baseURL et models. Le nom doit être unique et ne doit pas reprendre celui d’un point de terminaison intégré comme openAI ou anthropic. Placez l’identifiant dans .env et faites-y référence dans le YAML sous la forme ${YOUR_ENV_VAR}, puis redémarrez. Avec Docker, le fichier doit également être monté dans le conteneur API via docker-compose.override.yml ; la nouvelle entrée apparaît dans le sélecteur de points de terminaison après ce redémarrage.
L’URL baseURL de LibreChat doit-elle se terminer par /v1 ?
Oui, pour une passerelle compatible avec OpenAI. La référence des champs de LibreChat indique que l’option directEndpoint sert lorsque l’URL de base est déjà le point de terminaison complet des complétions, et qu’elle est nécessaire parce que l’application ajoute par défaut /chat/completions ou /completion à baseURL. L’URL de base doit donc être la racine de l’API avec le suffixe /v1, soit https://api.kunavo.com/v1, et directEndpoint doit rester non défini. Les deux exemples du site de LibreChat suivent le même modèle. Une valeur incorrecte provoque une erreur 404 plutôt qu’un échec d’authentification, ce qui permet de la distinguer d’une clé erronée.
Pourquoi les coûts indiqués par LibreChat ne correspondent-ils pas à ceux facturés par le fournisseur ?
Parce que LibreChat calcule le coût d’une requête à partir de sa propre table tarifaire, et non de la facture de votre fournisseur, en faisant correspondre l’identifiant de votre modèle à cette table. Un identifiant de passerelle qui ressemble à une entrée de la table est débité au tarif de cette entrée ; s’il ne correspond à aucune entrée, un tarif fixe est appliqué. Pour corriger cela, ajoutez un bloc tokenConfig à votre point de terminaison personnalisé et indiquez prompt, completion et context pour chaque identifiant proposé, en USD par million de jetons. LibreChat vérifie cette valeur de remplacement avant de consulter sa propre table. Considérez le registre intégré à l’application comme une estimation et le solde chez votre fournisseur comme la valeur de référence.
LibreChat peut-il utiliser des modèles Claude via un point de terminaison personnalisé ?
Oui, selon deux configurations. Un point de terminaison personnalisé standard compatible avec OpenAI transmet l’identifiant du modèle tel quel à votre URL de base ; un identifiant Claude est donc résolu à ce point de terminaison plutôt que dans LibreChat, sans faire appel à un compte Anthropic. Autre possibilité : le champ provider achemine le même bloc via le client natif Anthropic Messages de LibreChat. anthropic est actuellement la valeur prise en charge. Dans ce cas, la récupération de modèles de type OpenAI n’est pas utilisée : indiquez donc les identifiants souhaités sous models.default au lieu de vous fier à fetch.
Kunavo a-t-il testé LibreChat ?
Non. La configuration de cette page est transcrite de la documentation de LibreChat sur les points de terminaison personnalisés à la date indiquée, et aucun de ses éléments ne provient d’une exécution réelle : aucune conversation, aucun tour en streaming, aucun aller-retour d’appel d’outil, aucune exécution d’Agents. Cela vaut pour tous les clients documentés ici : une page de configuration publiée ne constitue pas un test. En dix secondes, vous pouvez vérifier vous-même si l’URL de base et la clé fonctionnent, grâce à la commande curl indiquée sur cette page ; tout ce qui vient ensuite dépend du comportement de LibreChat avec l’identifiant de modèle choisi.