Documentation

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
# 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: 200000
baseURL 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.
Sur Docker, modifier le fichier ne suffit pas. Le guide de démarrage rapide indique explicitement que 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.
Le registre des coûts correspond au calcul de LibreChat, pas aux montants facturés. LibreChat calcule le coût d’une requête à partir d’une table intégrée, en faisant correspondre l’identifiant de votre modèle. Un identifiant de passerelle peut donc être facturé au tarif d’un autre modèle, ce que le bloc 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.
Cette configuration a été reprise de la documentation de LibreChat à la date indiquée ci-dessous. Kunavo n’a pas exécuté LibreChat avec son point de terminaison : aucune conversation, aucun tour en streaming, aucun aller-retour d’appel d’outil, aucune exécution d’Agents. Une page de configuration publiée ne constitue pas un test et ne doit pas être interprétée comme telle. En dix secondes, vous pouvez vérifier le curl ci-dessous ; le comportement du client dépend de LibreChat.
Kunavo ne propose aucun modèle d’embedding, de synthèse vocale ou de reconnaissance vocale ; ce point de terminaison répond donc uniquement aux requêtes de complétion de chat. C’est important ici, car LibreChat propose des fonctionnalités annexes qui font appel à d’autres types de fournisseurs : le chat avec fichiers utilise son index vectoriel via une API RAG distincte, avec sa propre clé et sa propre URL de base, tandis que les fonctionnalités vocales utilisent d’autres identifiants. Elles restent associées à leur fournisseur actuel ; la clé du bloc ci-dessus sert au point de terminaison personnalisé et à rien d’autre sur cette page.
Pas encore de clé ? Créez un compte Kunavo, créez une clé (elle commence par 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

  1. Créez une clé sur /app/keys et copiez-la — elle n’est affichée qu’une seule fois.
  2. Sur Docker, montez d’abord le fichier de configuration : le guide de démarrage rapide demande de copier docker-compose.override.yml.example vers docker-compose.override.yml et de décommenter le volume librechat.yaml. Une installation bare metal n’a pas besoin de cette étape.
  3. Créez ou modifiez librechat.yaml à la racine du projet, dans le même répertoire que votre .env, puis ajoutez l’entrée endpoints.custom ci-dessus.
  4. Placez la clé dans .env sous la forme KUNAVO_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.
  5. 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 tableau models.default si cette récupération échoue.
  6. 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.

Voici la version courte. Le guide complet — choix du modèle, coût d’une session réelle et modes d’échec — se trouve dans le coût réel d’utilisation de LibreChat.

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èleEntrée / sortie sur KunavoOù cela s’intègre dans LibreChat
claude-sonnet-5$1.40 / $7.00l’entrée par défaut de models.default — le modèle de conversation courant
claude-opus-5$3.50 / $17.50l’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.50le 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.20longs documents collés dans la conversation, pour lesquels la fenêtre de contexte est le facteur déterminant
La facturation se fait au token à partir d’un solde prépayé, sans frais mensuels — consultez la facturation. Avec un contexte répété — ce qu’envoient la plupart des éditeurs et clients de chat — la mise en cache des prompts influe davantage sur la facture que le choix du modèle.

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.

ChampCe qu’indique la référencePourquoi c’est important pour une passerelle
providerAchemine 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.default.
models.fetchLorsque 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.default sert de valeur de repli si cet appel échoue : il est donc utile de le renseigner même lorsque la récupération est activée.
tokenConfigDé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.