Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Structure de l'objet endpoint personnalisé

Chaque endpoint dans le tableau custom doit avoir la structure suivante :

Exemple

endpoints:
  custom:
    # Example using Mistral AI API
    - name: 'Mistral'
      apiKey: '${YOUR_ENV_VAR_KEY}'
      baseURL: 'https://api.mistral.ai/v1'
      models:
        default: ['mistral-tiny', 'mistral-small', 'mistral-medium', 'mistral-large-latest']
      titleConvo: true
      titleTiming: 'immediate'
      titleModel: 'mistral-tiny'
      modelDisplayLabel: 'Mistral'
      # customParams:
      #   reasoningFormat: reasoning_object
      #   reasoningKey: reasoning_content
      # tokenConfig:
      #   mistral-large-latest:
      #     prompt: 2
      #     completion: 6
      #     context: 128000
      # addParams:
      #   safe_prompt: true # Mistral specific value for moderating messages
      # NOTE: For Mistral, it is necessary to drop the following parameters or you will encounter a 422 Error:
      dropParams: ['stop', 'user', 'frequency_penalty', 'presence_penalty']
 
    # Example using the native Anthropic Messages API
    - name: 'Claude-Compatible'
      provider: 'anthropic'
      apiKey: '${ANTHROPIC_API_KEY}'
      baseURL: 'https://api.anthropic.com'
      headers:
        anthropic-version: '2023-06-01'
      models:
        default: ['claude-sonnet-4-5', 'claude-opus-4-5']
        fetch: false
      titleConvo: true
      titleModel: 'claude-sonnet-4-5'
      modelDisplayLabel: 'Claude (Compatible)'

name

Clé :

KeyTypeDescriptionExample
nameStringUn nom unique pour le endpoint.Will be used as the "title" in the Endpoints Selector

Requis

Exemple :

name: 'Mistral'

apiKey

Clé :

KeyTypeDescriptionExample
apiKeyString (apiKey | "user_provided")Votre clé API pour le service. Peut faire référence à une variable d'environnement, ou permettre à l'utilisateur de fournir la valeur.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Requis

Exemple :

apiKey: '${MISTRAL_API_KEY}'

ou

apiKey: 'your_api_key'

ou

apiKey: 'user_provided'

baseURL

Clé :

KeyTypeDescriptionExample
baseURLString (baseURL | "user_provided")URL de base pour l'API. Peut faire référence à une variable d'environnement ou permettre à l'utilisateur de fournir la valeur.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Requis

Exemple :

baseURL: 'https://api.mistral.ai/v1'

ou

baseURL: '${MISTRAL_BASE_URL}'

ou

baseURL: 'user_provided'

Notes :

  • Si la baseURL que vous avez définie est le point de terminaison complet des complétions, vous pouvez définir le champ directEndpoint sur true pour l'utiliser directement.
    • Ceci est nécessaire car l'application ajoute par défaut "/chat/completions" ou "/completion" à la baseURL.
  • Lorsque vous utilisez provider: anthropic, définissez baseURL sur la racine de l'API que le SDK Anthropic doit appeler, telle que https://api.anthropic.com ou la racine de votre passerelle. LibreChat utilise le chemin natif /v1/messages d'Anthropic pour ce fournisseur.

provider

Clé :

KeyTypeDescriptionExample
providerStringAchemine un endpoint personnalisé via un client fournisseur natif au lieu du client compatible OpenAI par défaut.Currently supports `anthropic`.

Par défaut : omis, ce qui utilise le chemin d'endpoint personnalisé compatible avec OpenAI.

Valeurs prises en charge :

  • "anthropic" - Utilise le client natif Anthropic /v1/messages avec les propriétés baseURL, apiKey, headers, addParams, dropParams et customParams.paramDefinitions de cet endpoint.

Exemple :

endpoints:
  custom:
    - name: 'Claude-Compatible'
      provider: 'anthropic'
      apiKey: '${ANTHROPIC_API_KEY}'
      baseURL: 'https://api.anthropic.com'
      headers:
        anthropic-version: '2023-06-01'
      models:
        default:
          - 'claude-sonnet-4-5'
          - 'claude-opus-4-5'
        fetch: false
      titleConvo: true
      titleModel: 'claude-sonnet-4-5'
      modelDisplayLabel: 'Claude (Compatible)'

Notes :

  • Utilisez provider: anthropic pour Anthropic lui-même ou pour les passerelles compatibles avec Anthropic qui utilisent l'API Messages native.
  • Listez les modèles explicitement sous models.default ; le style models.fetch d'OpenAI n'est pas utilisé pour les endpoints personnalisés natifs d'Anthropic.
  • Le fournisseur implique les paramètres d'interface Anthropic, sauf si vous définissez explicitement un customParams.defaultParamsEndpoint différent.
  • Les endpoints sans provider conservent le comportement compatible avec OpenAI.

iconURL

Clé :

KeyTypeDescriptionExample
iconURLStringURL de l'image, chemin d'accès à une ressource publique ou clé d'icône d'endpoint intégrée à utiliser comme icône d'endpoint.

Par défaut : ""

Exemple :

iconURL: https://github.com/danny-avila/LibreChat/raw/main/docs/assets/LibreChat.svg

ou réutilisez une icône d'endpoint intégrée :

iconURL: openAI

Notes :

  • Ne définissez pas de name d'endpoint personnalisé avec le nom d'un endpoint intégré juste pour réutiliser une icône. Les noms d'endpoints personnalisés doivent être uniques et ne doivent pas utiliser les valeurs d'endpoints par défaut telles que :
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Pour utiliser une icône de endpoint incluse dans le projet, gardez le name du endpoint personnalisé unique et définissez plutôt iconURL sur l'une des clés de endpoint intégrées.
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Pour utiliser une image personnalisée, définissez iconURL sur une URL d'image ou un chemin servi par LibreChat, tel que /assets/my-icon.svg.
  • Il existe également des "known endpoints" (insensibles à la casse), pour lesquels des icônes sont fournies. Si le name de votre endpoint correspond aux noms suivants, vous devez omettre ce champ :
    • Anyscale
    • APIpie
    • Cohere
    • Deepseek
    • Fireworks
    • groq
    • Helicone
    • Huggingface
    • Mistral
    • MLX
    • Moonshot
    • ollama
    • OpenRouter
    • Perplexité
    • Qwen
    • ShuttleAI
    • together.ai
    • Unifier
    • xai

models

Clé :

KeyTypeDescriptionExample
modelsObjectConfiguration pour les modèles.

Requis

Propriétés :

default

Clé :

KeyTypeDescriptionExample
defaultArray of StringsUn tableau de chaînes indiquant les modèles par défaut à utiliser.If fetching models fails, these defaults are used as a fallback.

Requis

Exemple :

default:
  - 'mistral-tiny'
  - 'mistral-small'
  - 'mistral-medium'

fetch

Clé :

KeyTypeDescriptionExample
fetchBooleanLorsqu'il est défini sur `true`, tente de récupérer une liste de modèles depuis l'API.May cause slowdowns during initial use of the app if the response is delayed. Defaults to `false`.

Par défaut : false

Exemple :

fetch: true

userIdQuery

Clé :

KeyTypeDescriptionExample
userIdQueryBooleanLorsqu'il est défini sur `true`, ajoute l'ID utilisateur LibreChat en tant que paramètre de requête à la requête des modèles de l'API.

Par défaut : false

Exemple :

userIdQuery: true

titleConvo

Clé :

KeyTypeDescriptionExample
titleConvoBooleanActive la génération de titres de conversation lorsque défini sur `true`.

Par défaut : false

Exemple :

titleConvo: true

titleTiming

Clé :

KeyTypeDescriptionExample
titleTimingStringContrôle le moment où les titres des conversations sont générés. Valeurs valides : "immediate" ou "final".Defaults to "immediate".

Par défaut : "immediate"

Valeurs disponibles :

  • "immediate" - Génère le titre dès que la requête commence, en parallèle de la réponse du modèle, en utilisant le premier message de l'utilisateur.
  • "final" - Diffère la génération du titre jusqu'à ce que la réponse complète soit terminée. Cela préserve le comportement hérité.

Exemple :

titleTiming: 'final'

titleMethod

Clé :

KeyTypeDescriptionExample
titleMethodStringContrôle la méthode utilisée pour générer les titres de conversation.Valid values: "completion" (default), "structured", "functions" (legacy alias for "structured")

Par défaut : "completion"

Méthodes disponibles :

  • "completion" - Utilise l'API de complétion standard sans outils/fonctions. Compatible avec la plupart des LLM.
  • "structured" - Utilise une sortie structurée pour la génération de titres. Nécessite la prise en charge du fournisseur/modèle.
  • "functions" - Alias hérité pour "structured". Fonctionnellement identique.

Exemple :

titleMethod: 'completion'

titleModel

Clé :

KeyTypeDescriptionExample
titleModelStringSpécifie le modèle à utiliser pour les titres.Defaults to "gpt-3.5-turbo" if omitted. May cause issues if "gpt-3.5-turbo" is not available. You can also dynamically use the current conversation model by setting it to "current_model".

Par défaut : "gpt-3.5-turbo"

Exemple :

titleModel: 'mistral-tiny'
titleModel: 'current_model'

titlePrompt

Clé :

KeyTypeDescriptionExample
titlePromptStringInvite personnalisée pour la génération de titre. Doit inclure l'espace réservé {convo}.Allows full control over how titles are generated.

Par défaut :

Analyze this conversation and provide:
1. The detected language of the conversation
2. A concise title in the detected language (5 words or less, no punctuation or quotation)

{convo}

Notes :

  • Doit toujours inclure l'espace réservé {convo}
  • Le paramètre fictif {convo} sera remplacé par la conversation formatée

Exemple :

titlePrompt: "Create a brief, descriptive title for the following conversation:\n\n{convo}\n\nTitle:"

titlePromptTemplate

Clé :

KeyTypeDescriptionExample
titlePromptTemplateStringModèle pour formater le contenu de la conversation qui remplace {convo} dans titlePrompt.Must include {input} and {output} placeholders.

Par défaut : "User: {input}\nAI: {output}"

Notes :

  • Doit inclure les deux espaces réservés {input} et {output}
  • Contrôle la façon dont la conversation est formatée lorsqu'elle est insérée dans titlePrompt

Exemple :

titlePromptTemplate: "Human: {input}\n\nAssistant: {output}"

titleEndpoint

Clé :

KeyTypeDescriptionExample
titleEndpointStringSpécifie un endpoint alternatif à utiliser pour la génération de titres.Allows using a different model/endpoint for titles.

Par défaut : Utilise l'endpoint personnalisé actuel

Valeurs acceptées :

  • openAI
  • azureOpenAI
  • google
  • anthropic
  • bedrock
  • Un autre nom d'endpoint personnalisé

Exemple :

# Use a different custom endpoint for titles
endpoints:
  custom:
    - name: 'my-chat-endpoint'
      apiKey: '${CHAT_API_KEY}'
      baseURL: 'https://api.example.com/v1/chat'
      models:
        default: ['gpt-4']
      titleEndpoint: 'my-title-endpoint'
 
    - name: 'my-title-endpoint'
      apiKey: '${TITLE_API_KEY}'
      baseURL: 'https://api.example.com/v1/title'
      models:
        default: ['gpt-3.5-turbo']

modelDisplayLabel

Clé :

KeyTypeDescriptionExample
modelDisplayLabelStringL'étiquette affichée dans les messages à côté de l'icône du modèle d'IA actuel.The display order is: 1. Custom name set via preset (if available), 2. Label derived from the model name (if applicable), 3. This value is used if the above are not specified. Defaults to "AI".

Par défaut : "AI"

Exemple :

modelDisplayLabel: 'Mistral'

addParams

Clé :

KeyTypeDescriptionExample
addParamsObject/DictionaryAjoute des paramètres supplémentaires aux requêtes. Les valeurs peuvent être des chaînes de caractères, des nombres, des booléens, des tableaux ou des objets imbriqués. Prend en charge `web_search: true` pour activer la recherche web dans les requêtes.Adds/Overrides parameters. Useful for specifying API-specific options.

Exemple :

addParams:
  safe_prompt: true
  max_tokens: 2048

Notes :

  • Le champ addParams vous permet d'inclure des paramètres supplémentaires qui ne font pas partie de la charge utile par défaut (voir la section "Paramètres par défaut"). Ceci est particulièrement utile pour les options spécifiques à une API.

dropParams

Clé :

KeyTypeDescriptionExample
dropParamsArray/List of StringsSupprime les paramètres par défaut des requêtes.Excludes specified default parameters. Useful for APIs that do not accept or recognize certain parameters.

Exemple :

dropParams:
  - 'stop'
  - 'user'
  - 'frequency_penalty'
  - 'presence_penalty'

Remarque :

  • Le champ dropParams vous permet de supprimer les "Paramètres par défaut" qui sont envoyés avec chaque requête. Cela est utile lorsque vous travaillez avec des API qui n'acceptent pas ou ne reconnaissent pas certains paramètres.

customParams

Clé :

KeyTypeDescriptionExample
customParamsObject/DictionaryDéfinit le comportement personnalisé de l'endpoint et les métadonnées de paramètres qui ne font pas partie du corps de la requête du fournisseur.Used for endpoint-specific configuration such as reasoning parameter shape.

Sous-clés :

KeyTypeDescriptionExample
defaultParamsEndpointStringValeurs par défaut de l'endpoint utilisées pour les métadonnées des paramètres de requête. La valeur par défaut est `custom`. Lorsque `provider: anthropic` est défini et que ce champ est omis, LibreChat utilise l'ensemble de paramètres Anthropic.defaultParamsEndpoint: custom
reasoningFormatStringContrôle la manière dont les paramètres de raisonnement sont envoyés aux endpoints personnalisés compatibles avec OpenAI. Valeurs valides : `reasoning_effort`, `reasoning_object`, `disabled`.reasoningFormat: reasoning_object
reasoningKeyStringContrôle quelle clé de réponse est lue pour le contenu de raisonnement du fournisseur. Valeurs valides : `reasoning` ou `reasoning_content`.reasoningKey: reasoning_content
paramDefinitionsArray/ListDéfinitions de paramètres personnalisés pour cet endpoint.See default parameter definitions.

Formats de raisonnement :

  • reasoning_effort - Envoie le paramètre hérité reasoning_effort.
  • reasoning_object - Envoie un objet reasoning, tel que { effort, summary }, pour les fournisseurs qui suivent la nouvelle structure compatible avec OpenAI.
  • disabled - Supprime les paramètres de raisonnement même lorsqu'un utilisateur ou une Model Specs sélectionne le raisonnement.

Note sur le fournisseur Anthropic :

Utilisez provider: anthropic lorsque le point de terminaison personnalisé doit utiliser l'API native Anthropic Messages. Utilisez customParams.defaultParamsEndpoint: anthropic sans provider uniquement lorsque vous avez toujours besoin du chemin de point de terminaison personnalisé compatible avec OpenAI, mais que vous souhaitez bénéficier des métadonnées de paramètres et de l'adaptation de requête de style Anthropic.

Exemple :

customParams:
  reasoningFormat: reasoning_object
  reasoningKey: reasoning_content

tokenConfig

Clé :

KeyTypeDescriptionExample
tokenConfigObject/DictionaryDéfinit les fenêtres de contexte spécifiques au modèle et les tarifs par million de jetons pour cet endpoint personnalisé.Used by context usage, visible cost breakdowns, balance transactions, and multi-endpoint agent billing.

Chaque clé est un nom de modèle. Chaque entrée de modèle prend en charge :

KeyTypeDescriptionExample
promptNumberTaux de jetons de prompt/entrée par million de jetons.Required
completionNumberTaux de jetons de complétion/sortie par million de jetons.Required
contextNumberFenêtre de contexte maximale pour le modèle.Required
cacheReadNumberTaux de lecture des entrées en cache par million de jetons.Optional
cacheWriteNumberTaux d'écriture des entrées en cache par million de jetons.Optional

Exemple :

tokenConfig:
  gpt-4o-mini:
    prompt: 0.15
    completion: 0.6
    context: 128000
    cacheRead: 0.075
    cacheWrite: 0.15

Notes :

  • Les tarifs sont exprimés par million de jetons en USD avant que toute conversion interface.currency ne soit appliquée pour l'affichage.
  • Le nom du modèle doit correspondre à la valeur du modèle envoyée via le endpoint personnalisé.
  • Pour les Agents utilisant plusieurs endpoints, la configuration de jetons de l'endpoint/modèle correspondant est utilisée lors de l'enregistrement de l'utilisation et du coût.

headers

Clé :

KeyTypeDescriptionExample
headersObject/DictionaryAjoute des en-têtes supplémentaires aux requêtes. Toutes les valeurs d'en-tête doivent être des chaînes de caractères. Prend en charge la substitution dynamique des champs utilisateur avec `{{LIBRECHAT_USER_*}}`, les espaces réservés du corps de la requête avec `{{LIBRECHAT_BODY_*}}` et les variables d'environnement avec `${ENV_VAR}`.The `headers` object specifies custom headers for requests. Useful for authentication and setting content types.

Exemple :

headers:
  x-api-key: '${ENVIRONMENT_VARIABLE}'
  Content-Type: 'application/json'
  X-User-ID: '{{LIBRECHAT_USER_ID}}'
  X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'

Remarque : Prend en charge les valeurs de variables d'environnement dynamiques, qui utilisent le format : "${VARIABLE_NAME}".

Lorsque models.fetch: true est utilisé, ces en-têtes sont également résolus et transmis à la requête de liste de modèles pour les URLs de base contrôlées par l'administrateur. Un en-tête Authorization configuré a priorité sur le recours à l' apiKey de l'endpoint, ce qui est utile pour les proxys sensibles à l'authentification qui renvoient des listes de modèles par utilisateur. Si baseURL: "user_provided" est configuré, LibreChat ne transmet pas les modèles d'en-têtes configurés vers la destination fournie par l'utilisateur. Pour provider: anthropic, les en-têtes sont transmis via le client Anthropic natif au lieu du client compatible OpenAI.

Espaces réservés pour les champs utilisateur disponibles :

Espace réservéChamp utilisateurTypeDescription
{{LIBRECHAT_USER_ID}}idStringIdentifiant unique de l'utilisateur
{{LIBRECHAT_USER_NAME}}nameStringNom d'affichage de l'utilisateur
{{LIBRECHAT_USER_USERNAME}}usernameStringNom d'utilisateur
{{LIBRECHAT_USER_EMAIL}}emailStringAdresse e-mail de l'utilisateur
{{LIBRECHAT_USER_PROVIDER}}providerStringFournisseur d'authentification (ex: "email", "google", "github")
{{LIBRECHAT_USER_ROLE}}roleStringRôle de l'utilisateur (ex: "user", "admin")
{{LIBRECHAT_USER_GOOGLEID}}googleIdStringID de compte Google
{{LIBRECHAT_USER_FACEBOOKID}}facebookIdStringID de compte Facebook
{{LIBRECHAT_USER_OPENIDID}}openidIdStringID de compte OpenID
{{LIBRECHAT_USER_SAMLID}}samlIdStringID de compte SAML
{{LIBRECHAT_USER_LDAPID}}ldapIdStringID de compte LDAP
{{LIBRECHAT_USER_GITHUBID}}githubIdStringID de compte GitHub
{{LIBRECHAT_USER_DISCORDID}}discordIdStringID de compte Discord
{{LIBRECHAT_USER_APPLEID}}appleIdStringID de compte Apple
{{LIBRECHAT_USER_EMAILVERIFIED}}emailVerifiedBoolean → StringStatut de vérification de l'e-mail ("true" ou "false")
{{LIBRECHAT_USER_TWOFACTORENABLED}}twoFactorEnabledBoolean → StringStatut de la 2FA ("true" ou "false")
{{LIBRECHAT_USER_TERMSACCEPTED}}termsAcceptedBoolean → StringStatut d'acceptation des conditions ("true" ou "false")

Espaces réservés disponibles pour le corps de la requête :

Espace réservéChamp du corpsTypeDescription
{{LIBRECHAT_BODY_CONVERSATIONID}}conversationIdStringIdentifiant de la conversation actuelle
{{LIBRECHAT_BODY_PARENTMESSAGEID}}parentMessageIdStringIdentifiant du message parent
{{LIBRECHAT_BODY_MESSAGEID}}messageIdStringIdentifiant du message actuel

Exemple utilisant des espaces réservés dans le corps de la requête :

headers:
  X-Conversation-ID: '{{LIBRECHAT_BODY_CONVERSATIONID}}'
  X-Parent-Message-ID: '{{LIBRECHAT_BODY_PARENTMESSAGEID}}'
  X-Message-ID: '{{LIBRECHAT_BODY_MESSAGEID}}'

directEndpoint

Clé :

KeyTypeDescriptionExample
directEndpointBooleanLorsqu'il est défini sur `true`, traite la `baseURL` configurée comme le point de terminaison (endpoint) de complétion à utiliser

Par défaut : false

Exemple :

directEndpoint: true

titleMessageRole

  • Options : "system" | "user" | "assistant"

Clé :

KeyTypeDescriptionExample
titleMessageRoleStringSpécifie la valeur du rôle à utiliser dans la charge utile du message pour la génération du titre. Doit être l'un des suivants : `"system"`, `"user"`, `"assistant"`.Defaults to "system" if omitted. May cause issues if "system" is not a valid value, which is sometimes the case for single message payloads, as it is for title generation.

Par défaut : "system"

Exemple :

titleMessageRole: 'user'

Que pensez-vous de ce guide ?