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

Estructura del objeto de endpoint personalizado

Cada endpoint en el array custom debe tener la siguiente estructura:

Ejemplo

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

Clave:

KeyTypeDescriptionExample
nameStringUn nombre único para el endpoint.Will be used as the "title" in the Endpoints Selector

Requerido

Ejemplo:

name: 'Mistral'

apiKey

Clave:

KeyTypeDescriptionExample
apiKeyString (apiKey | "user_provided")Su clave de API para el servicio. Puede hacer referencia a una variable de entorno o permitir que el usuario proporcione el valor.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Requerido

Ejemplo:

apiKey: '${MISTRAL_API_KEY}'

o

apiKey: 'your_api_key'

o

apiKey: 'user_provided'

baseURL

Clave:

KeyTypeDescriptionExample
baseURLString (baseURL | "user_provided")URL base para la API. Puede hacer referencia a una variable de entorno o permitir que el usuario proporcione el valor.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Requerido

Ejemplo:

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

o

baseURL: '${MISTRAL_BASE_URL}'

o

baseURL: 'user_provided'

Notas:

  • Si el baseURL que configuraste es el endpoint completo de completions, puedes establecer el campo directEndpoint en true para usarlo directamente.
    • Esto es necesario porque la aplicación añade "/chat/completions" o "/completion" a la baseURL de forma predeterminada.
  • Al usar provider: anthropic, configure baseURL a la raíz de la API que el SDK de Anthropic debe llamar, como https://api.anthropic.com o la raíz de su gateway. LibreChat utiliza la ruta nativa /v1/messages de Anthropic para ese proveedor.

provider

Clave:

KeyTypeDescriptionExample
providerStringEnruta un endpoint personalizado a través de un cliente de proveedor nativo en lugar del cliente predeterminado compatible con OpenAI.Currently supports `anthropic`.

Predeterminado: omitido, lo cual utiliza la ruta de endpoint personalizada compatible con OpenAI.

Valores admitidos:

  • "anthropic" - Utiliza el cliente nativo de Anthropic /v1/messages con el baseURL, apiKey, headers, addParams, dropParams y customParams.paramDefinitions de este endpoint.

Ejemplo:

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)'

Notas:

  • Utilice provider: anthropic para Anthropic directamente o para pasarelas compatibles con Anthropic que utilicen la Messages API nativa.
  • Enumere los modelos explícitamente bajo models.default; models.fetch al estilo de OpenAI no se utiliza para endpoints personalizados nativos de Anthropic.
  • El proveedor implica los parámetros de la UI de Anthropic a menos que establezcas explícitamente un customParams.defaultParamsEndpoint diferente.
  • Los endpoint sin provider mantienen el comportamiento compatible con OpenAI.

iconURL

Clave:

KeyTypeDescriptionExample
iconURLStringURL de la imagen, ruta de activo público o clave de icono de endpoint integrado para usar como icono del endpoint.

Predeterminado: ""

Ejemplo:

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

o reutilice un icono de endpoint integrado:

iconURL: openAI

Notas:

  • No establezca un name de endpoint personalizado con el nombre de un endpoint integrado solo para reutilizar un icono. Los nombres de los endpoints personalizados deben ser únicos y no deben utilizar valores de endpoints predeterminados como:
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Para usar un icono de endpoint incluido en el proyecto, mantén el name del endpoint personalizado como único y, en su lugar, establece iconURL en una de las claves de endpoint integradas.
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Para usar una imagen personalizada, establece iconURL en una URL de imagen o una ruta servida por LibreChat, como /assets/my-icon.svg.
  • También existen "endpoints conocidos" (que no distinguen entre mayúsculas y minúsculas), los cuales tienen iconos proporcionados. Si el name de tu endpoint coincide con los siguientes nombres, debes omitir este campo:
    • Anyscale
    • APIpie
    • Cohere
    • Deepseek
    • Fireworks
    • groq
    • Helicone
    • Huggingface
    • Mistral
    • MLX
    • Moonshot
    • ollama
    • OpenRouter
    • Perplexity
    • Qwen
    • ShuttleAI
    • together.ai
    • Unificar
    • xai

models

Clave:

KeyTypeDescriptionExample
modelsObjectConfiguración para modelos.

Requerido

Propiedades:

default

Clave:

KeyTypeDescriptionExample
defaultArray of StringsUna matriz de cadenas que indica los modelos predeterminados a utilizar.If fetching models fails, these defaults are used as a fallback.

Requerido

Ejemplo:

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

fetch

Clave:

KeyTypeDescriptionExample
fetchBooleanCuando se establece en `true`, intenta obtener una lista de modelos desde la API.May cause slowdowns during initial use of the app if the response is delayed. Defaults to `false`.

Predeterminado: false

Ejemplo:

fetch: true

userIdQuery

Clave:

KeyTypeDescriptionExample
userIdQueryBooleanCuando se establece en `true`, añade el ID de usuario de LibreChat como un parámetro de consulta a la solicitud de modelos de la API.

Predeterminado: false

Ejemplo:

userIdQuery: true

titleConvo

Clave:

KeyTypeDescriptionExample
titleConvoBooleanHabilita el título de la conversación cuando se establece en `true`.

Predeterminado: false

Ejemplo:

titleConvo: true

titleTiming

Clave:

KeyTypeDescriptionExample
titleTimingStringControla cuándo se generan los títulos de las conversaciones. Valores válidos: "immediate" o "final".Defaults to "immediate".

Predeterminado: "immediate"

Valores disponibles:

  • "immediate" - Genera el título tan pronto como comienza la solicitud, en paralelo con la respuesta del modelo, utilizando el primer mensaje del usuario.
  • "final" - Aplaza la generación del título hasta que se complete la respuesta completa. Esto preserva el comportamiento heredado.

Ejemplo:

titleTiming: 'final'

titleMethod

Clave:

KeyTypeDescriptionExample
titleMethodStringControla el método utilizado para generar los títulos de las conversaciones.Valid values: "completion" (default), "structured", "functions" (legacy alias for "structured")

Predeterminado: "completion"

Métodos disponibles:

  • "completion" - Utiliza la API de completion estándar sin herramientas/funciones. Compatible con la mayoría de los LLMs.
  • "structured" - Utiliza una salida estructurada para la generación de títulos. Requiere soporte del proveedor/modelo.
  • "functions" - Alias heredado para "structured". Funcionalmente idéntico.

Ejemplo:

titleMethod: 'completion'

titleModel

Clave:

KeyTypeDescriptionExample
titleModelStringEspecifica el modelo a utilizar para los títulos.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".

Predeterminado: "gpt-3.5-turbo"

Ejemplo:

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

titlePrompt

Clave:

KeyTypeDescriptionExample
titlePromptStringPrompt personalizado para la generación de títulos. Debe incluir el marcador de posición {convo}.Allows full control over how titles are generated.

Predeterminado:

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}

Notas:

  • Debe incluir siempre el marcador de posición {convo}
  • El marcador de posición {convo} será reemplazado por la conversación formateada

Ejemplo:

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

titlePromptTemplate

Clave:

KeyTypeDescriptionExample
titlePromptTemplateStringPlantilla para dar formato al contenido de la conversación que reemplaza a {convo} en titlePrompt.Must include {input} and {output} placeholders.

Predeterminado: "User: {input}\nAI: {output}"

Notas:

  • Debe incluir ambos marcadores de posición {input} y {output}
  • Controla cómo se formatea la conversación cuando se inserta en titlePrompt

Ejemplo:

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

titleEndpoint

Clave:

KeyTypeDescriptionExample
titleEndpointStringEspecifica un endpoint alternativo para usar en la generación de títulos.Allows using a different model/endpoint for titles.

Predeterminado: Utiliza el endpoint personalizado actual

Valores aceptados:

  • openAI
  • azureOpenAI
  • google
  • anthropic
  • bedrock
  • Otro nombre de endpoint personalizado

Ejemplo:

# 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

Clave:

KeyTypeDescriptionExample
modelDisplayLabelStringLa etiqueta que se muestra en los mensajes junto al icono del modelo de IA actual.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".

Predeterminado: "AI"

Ejemplo:

modelDisplayLabel: 'Mistral'

addParams

Clave:

KeyTypeDescriptionExample
addParamsObject/DictionaryAñade parámetros adicionales a las solicitudes. Los valores pueden ser cadenas, números, booleanos, matrices u objetos anidados. Admite activadores de herramientas de proveedores como `web_search: true` y `url_context: true` de Google.Adds/Overrides parameters. Useful for specifying API-specific options.

Ejemplo:

addParams:
  safe_prompt: true
  max_tokens: 2048

Notas:

  • El campo addParams le permite incluir parámetros adicionales que no forman parte de la carga útil predeterminada (consulte la sección "Default Parameters"). Esto es particularmente útil para opciones específicas de la API.

dropParams

Clave:

KeyTypeDescriptionExample
dropParamsArray/List of StringsElimina los parámetros predeterminados de las solicitudes.Excludes specified default parameters. Useful for APIs that do not accept or recognize certain parameters.

Ejemplo:

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

Nota:

  • El campo dropParams le permite eliminar "Default Parameters" que se envían con cada solicitud. Esto es útil cuando se trabaja con APIs que no aceptan o reconocen ciertos parámetros.

customParams

Clave:

KeyTypeDescriptionExample
customParamsObject/DictionaryDefine el comportamiento del endpoint personalizado y los metadatos de configuración que no forman parte del cuerpo de la solicitud del proveedor.Used for endpoint-specific configuration such as reasoning parameter shape.

Sub-claves:

KeyTypeDescriptionExample
defaultParamsEndpointStringValores predeterminados de endpoint utilizados para los metadatos de los parámetros de solicitud. El valor predeterminado es `custom`. Cuando se establece `provider: anthropic` y se omite este campo, LibreChat utiliza el conjunto de parámetros de Anthropic.defaultParamsEndpoint: custom
reasoningFormatStringControla cómo se envían los parámetros de razonamiento a los endpoints personalizados compatibles con OpenAI. Valores válidos: `reasoning_effort`, `reasoning_object`, `disabled`.reasoningFormat: reasoning_object
reasoningKeyStringControla qué clave de respuesta se lee para el contenido de razonamiento del proveedor. Valores válidos: `reasoning` o `reasoning_content`.reasoningKey: reasoning_content
includeReasoningContentBooleanReproduce el `reasoning_content` del proveedor dentro de los turnos de llamada a herramientas para endpoints personalizados compatibles con OpenAI que lo requieran.includeReasoningContent: true
includeReasoningHistoryBooleanReconstruye `reasoning_content` a partir del historial de conversación persistido a través de los turnos. Implica `includeReasoningContent`.includeReasoningHistory: true
paramDefinitionsArray/ListDefiniciones de configuración personalizada para este endpoint.See default parameter definitions.

Formatos de razonamiento:

  • reasoning_effort - Envía el parámetro heredado reasoning_effort.
  • reasoning_object - Envía un objeto reasoning, como { effort, summary }, para proveedores que siguen el formato más reciente compatible con OpenAI.
  • disabled - Suprime los parámetros de razonamiento incluso cuando un usuario o Model Specs selecciona el razonamiento.

Reproducción del razonamiento:

  • Utilice includeReasoningContent: true para proveedores compatibles con OpenAI que requieran que el reasoning_content del asistente sea reproducido durante los turnos de llamada a herramientas.
  • Utilice includeReasoningHistory: true solo para proveedores que también requieran que reasoning_content se reconstruya a partir del historial persistido en turnos posteriores, como algunas puertas de enlace compatibles con Xiaomi MiMo o Kimi.

Nota del proveedor Anthropic:

Utilice provider: anthropic cuando el endpoint personalizado deba utilizar la API nativa de mensajes de Anthropic. Utilice customParams.defaultParamsEndpoint: anthropic sin provider solo cuando aún necesite la ruta del endpoint personalizado compatible con OpenAI, pero desee metadatos de parámetros y adaptación de solicitudes al estilo de Anthropic.

Ejemplo:

customParams:
  reasoningFormat: reasoning_object
  reasoningKey: reasoning_content
  includeReasoningContent: true

tokenConfig

Clave:

KeyTypeDescriptionExample
tokenConfigObject/DictionaryDefine las ventanas de contexto específicas del modelo y las tarifas por millón de tokens para este endpoint personalizado.Used by context usage, visible cost breakdowns, balance transactions, and multi-endpoint agent billing.

Cada clave es un nombre de modelo. Cada entrada de modelo admite:

KeyTypeDescriptionExample
promptNumberTasa de tokens de prompt/entrada por millón de tokens.Required
completionNumberTasa de tokens de finalización/salida por millón de tokens.Required
contextNumberVentana de contexto máxima para el modelo.Required
cacheReadNumberTasa de lectura de entrada en caché por millón de tokens.Optional
cacheWriteNumberTasa de escritura de entrada en caché por millón de tokens.Optional

Ejemplo:

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

Notas:

  • Las tarifas se expresan por millón de tokens en USD antes de que se aplique cualquier conversión de interface.currency para su visualización.
  • El nombre del modelo debe coincidir con el valor del modelo enviado a través del endpoint personalizado.
  • Para los Agents que utilizan múltiples endpoints, se utiliza la configuración de tokens del endpoint/modelo correspondiente al registrar el uso y el costo.

headers

Clave:

KeyTypeDescriptionExample
headersObject/DictionaryAñade encabezados adicionales a las solicitudes. Todos los valores de los encabezados deben ser cadenas de texto. Admite la sustitución dinámica de campos de usuario con `{{LIBRECHAT_USER_*}}`, marcadores de posición del cuerpo de la solicitud con `{{LIBRECHAT_BODY_*}}` y variables de entorno con `${ENV_VAR}`.The `headers` object specifies custom headers for requests. Useful for authentication and setting content types.

Ejemplo:

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

Nota: Admite valores de variables de entorno dinámicas, que utilizan el formato: "${VARIABLE_NAME}".

Cuando se utiliza models.fetch: true, estos encabezados también se resuelven y se reenvían a la solicitud de lista de modelos para las URLs base controladas por el administrador. Un encabezado Authorization configurado tiene prioridad sobre el apiKey de respaldo del endpoint, lo cual es útil para proxies con reconocimiento de autenticación que devuelven listas de modelos por usuario. Si se configura baseURL: "user_provided", LibreChat no reenvía las plantillas de encabezado configuradas al destino proporcionado por el usuario. Para provider: anthropic, los encabezados se reenvían a través del cliente nativo de Anthropic en lugar del cliente compatible con OpenAI.

Marcadores de posición de campo de usuario disponibles:

Marcador de posiciónCampo de usuarioTipoDescripción
{{LIBRECHAT_USER_ID}}idStringIdentificador único del usuario
{{LIBRECHAT_USER_NAME}}nameStringNombre visible del usuario
{{LIBRECHAT_USER_USERNAME}}usernameStringNombre de usuario
{{LIBRECHAT_USER_EMAIL}}emailStringDirección de correo electrónico del usuario
{{LIBRECHAT_USER_PROVIDER}}providerStringProveedor de autenticación (ej. "email", "google", "github")
{{LIBRECHAT_USER_ROLE}}roleStringRol del usuario (ej. "user", "admin")
{{LIBRECHAT_USER_GOOGLEID}}googleIdStringID de cuenta de Google
{{LIBRECHAT_USER_FACEBOOKID}}facebookIdStringID de cuenta de Facebook
{{LIBRECHAT_USER_OPENIDID}}openidIdStringID de cuenta de OpenID
{{LIBRECHAT_USER_SAMLID}}samlIdStringID de cuenta de SAML
{{LIBRECHAT_USER_LDAPID}}ldapIdStringID de cuenta de LDAP
{{LIBRECHAT_USER_GITHUBID}}githubIdStringID de cuenta de GitHub
{{LIBRECHAT_USER_DISCORDID}}discordIdStringID de cuenta de Discord
{{LIBRECHAT_USER_APPLEID}}appleIdStringID de cuenta de Apple
{{LIBRECHAT_USER_EMAILVERIFIED}}emailVerifiedBoolean → StringEstado de verificación de correo ("true" o "false")
{{LIBRECHAT_USER_TWOFACTORENABLED}}twoFactorEnabledBoolean → StringEstado de 2FA ("true" o "false")
{{LIBRECHAT_USER_TERMSACCEPTED}}termsAcceptedBoolean → StringEstado de aceptación de términos ("true" o "false")

Marcadores de posición disponibles para el cuerpo de la solicitud:

Marcador de posiciónCampo del cuerpoTipoDescripción
{{LIBRECHAT_BODY_CONVERSATIONID}}conversationIdStringIdentificador de la conversación actual
{{LIBRECHAT_BODY_PARENTMESSAGEID}}parentMessageIdStringIdentificador del mensaje padre
{{LIBRECHAT_BODY_MESSAGEID}}messageIdStringIdentificador del mensaje actual

Ejemplo usando marcadores de posición en el cuerpo de la solicitud:

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

directEndpoint

Clave:

KeyTypeDescriptionExample
directEndpointBooleanCuando se establece en `true`, trata la `baseURL` configurada como el endpoint de completions que se utilizará

Predeterminado: false

Ejemplo:

directEndpoint: true

titleMessageRole

  • Opciones: "system" | "user" | "assistant"

Clave:

KeyTypeDescriptionExample
titleMessageRoleStringEspecifica el valor de rol que se utilizará en la carga útil del mensaje para la generación del título. Debe ser uno de los siguientes: `"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.

Predeterminado: "system"

Ejemplo:

titleMessageRole: 'user'

¿Qué te parece esta guía?