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:
| Key | Type | Description | Example |
|---|---|---|---|
| name | String | Un nombre único para el endpoint. | Will be used as the "title" in the Endpoints Selector |
Requerido
Ejemplo:
name: 'Mistral'apiKey
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| apiKey | String (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:
| Key | Type | Description | Example |
|---|---|---|---|
| baseURL | String (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
baseURLque configuraste es el endpoint completo de completions, puedes establecer el campo directEndpoint entruepara usarlo directamente.- Esto es necesario porque la aplicación añade "/chat/completions" o "/completion" a la
baseURLde forma predeterminada.
- Esto es necesario porque la aplicación añade "/chat/completions" o "/completion" a la
- Al usar
provider: anthropic, configurebaseURLa la raÃz de la API que el SDK de Anthropic debe llamar, comohttps://api.anthropic.como la raÃz de su gateway. LibreChat utiliza la ruta nativa/v1/messagesde Anthropic para ese proveedor.
provider
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| provider | String | Enruta 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/messagescon elbaseURL,apiKey,headers,addParams,dropParamsycustomParams.paramDefinitionsde 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: anthropicpara Anthropic directamente o para pasarelas compatibles con Anthropic que utilicen la Messages API nativa. - Enumere los modelos explÃcitamente bajo
models.default;models.fetchal 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.defaultParamsEndpointdiferente. - Los endpoint sin
providermantienen el comportamiento compatible con OpenAI.
iconURL
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| iconURL | String | URL 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.svgo reutilice un icono de endpoint integrado:
iconURL: openAINotas:
- No establezca un
namede 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
namedel endpoint personalizado como único y, en su lugar, estableceiconURLen una de las claves de endpoint integradas.- "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
- Para usar una imagen personalizada, establece
iconURLen 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
namede 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:
| Key | Type | Description | Example |
|---|---|---|---|
| models | Object | Configuración para modelos. |
Requerido
Propiedades:
default
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| default | Array of Strings | Una 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:
| Key | Type | Description | Example |
|---|---|---|---|
| fetch | Boolean | Cuando 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: trueuserIdQuery
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| userIdQuery | Boolean | Cuando 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: truetitleConvo
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| titleConvo | Boolean | Habilita el tÃtulo de la conversación cuando se establece en `true`. |
Predeterminado: false
Ejemplo:
titleConvo: truetitleTiming
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| titleTiming | String | Controla 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:
| Key | Type | Description | Example |
|---|---|---|---|
| titleMethod | String | Controla 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:
| Key | Type | Description | Example |
|---|---|---|---|
| titleModel | String | Especifica 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:
| Key | Type | Description | Example |
|---|---|---|---|
| titlePrompt | String | Prompt 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:
| Key | Type | Description | Example |
|---|---|---|---|
| titlePromptTemplate | String | Plantilla 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:
| Key | Type | Description | Example |
|---|---|---|---|
| titleEndpoint | String | Especifica 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:
openAIazureOpenAIgoogleanthropicbedrock- 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:
| Key | Type | Description | Example |
|---|---|---|---|
| modelDisplayLabel | String | La 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:
| Key | Type | Description | Example |
|---|---|---|---|
| addParams | Object/Dictionary | Añ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: 2048Notas:
- El campo
addParamsle 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:
| Key | Type | Description | Example |
|---|---|---|---|
| dropParams | Array/List of Strings | Elimina 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
dropParamsle 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:
| Key | Type | Description | Example |
|---|---|---|---|
| customParams | Object/Dictionary | Define 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:
| Key | Type | Description | Example |
|---|---|---|---|
| defaultParamsEndpoint | String | Valores 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 |
| reasoningFormat | String | Controla 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 |
| reasoningKey | String | Controla qué clave de respuesta se lee para el contenido de razonamiento del proveedor. Valores válidos: `reasoning` o `reasoning_content`. | reasoningKey: reasoning_content |
| includeReasoningContent | Boolean | Reproduce el `reasoning_content` del proveedor dentro de los turnos de llamada a herramientas para endpoints personalizados compatibles con OpenAI que lo requieran. | includeReasoningContent: true |
| includeReasoningHistory | Boolean | Reconstruye `reasoning_content` a partir del historial de conversación persistido a través de los turnos. Implica `includeReasoningContent`. | includeReasoningHistory: true |
| paramDefinitions | Array/List | Definiciones de configuración personalizada para este endpoint. | See default parameter definitions. |
Formatos de razonamiento:
reasoning_effort- EnvÃa el parámetro heredadoreasoning_effort.reasoning_object- EnvÃa un objetoreasoning, 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: truepara proveedores compatibles con OpenAI que requieran que elreasoning_contentdel asistente sea reproducido durante los turnos de llamada a herramientas. - Utilice
includeReasoningHistory: truesolo para proveedores que también requieran quereasoning_contentse 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: truetokenConfig
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| tokenConfig | Object/Dictionary | Define 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:
| Key | Type | Description | Example |
|---|---|---|---|
| prompt | Number | Tasa de tokens de prompt/entrada por millón de tokens. | Required |
| completion | Number | Tasa de tokens de finalización/salida por millón de tokens. | Required |
| context | Number | Ventana de contexto máxima para el modelo. | Required |
| cacheRead | Number | Tasa de lectura de entrada en caché por millón de tokens. | Optional |
| cacheWrite | Number | Tasa 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.15Notas:
- Las tarifas se expresan por millón de tokens en USD antes de que se aplique cualquier conversión de
interface.currencypara 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:
| Key | Type | Description | Example |
|---|---|---|---|
| headers | Object/Dictionary | Añ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ón | Campo de usuario | Tipo | Descripción |
|---|---|---|---|
{{LIBRECHAT_USER_ID}} | id | String | Identificador único del usuario |
{{LIBRECHAT_USER_NAME}} | name | String | Nombre visible del usuario |
{{LIBRECHAT_USER_USERNAME}} | username | String | Nombre de usuario |
{{LIBRECHAT_USER_EMAIL}} | email | String | Dirección de correo electrónico del usuario |
{{LIBRECHAT_USER_PROVIDER}} | provider | String | Proveedor de autenticación (ej. "email", "google", "github") |
{{LIBRECHAT_USER_ROLE}} | role | String | Rol del usuario (ej. "user", "admin") |
{{LIBRECHAT_USER_GOOGLEID}} | googleId | String | ID de cuenta de Google |
{{LIBRECHAT_USER_FACEBOOKID}} | facebookId | String | ID de cuenta de Facebook |
{{LIBRECHAT_USER_OPENIDID}} | openidId | String | ID de cuenta de OpenID |
{{LIBRECHAT_USER_SAMLID}} | samlId | String | ID de cuenta de SAML |
{{LIBRECHAT_USER_LDAPID}} | ldapId | String | ID de cuenta de LDAP |
{{LIBRECHAT_USER_GITHUBID}} | githubId | String | ID de cuenta de GitHub |
{{LIBRECHAT_USER_DISCORDID}} | discordId | String | ID de cuenta de Discord |
{{LIBRECHAT_USER_APPLEID}} | appleId | String | ID de cuenta de Apple |
{{LIBRECHAT_USER_EMAILVERIFIED}} | emailVerified | Boolean → String | Estado de verificación de correo ("true" o "false") |
{{LIBRECHAT_USER_TWOFACTORENABLED}} | twoFactorEnabled | Boolean → String | Estado de 2FA ("true" o "false") |
{{LIBRECHAT_USER_TERMSACCEPTED}} | termsAccepted | Boolean → String | Estado de aceptación de términos ("true" o "false") |
Marcadores de posición disponibles para el cuerpo de la solicitud:
| Marcador de posición | Campo del cuerpo | Tipo | Descripción |
|---|---|---|---|
{{LIBRECHAT_BODY_CONVERSATIONID}} | conversationId | String | Identificador de la conversación actual |
{{LIBRECHAT_BODY_PARENTMESSAGEID}} | parentMessageId | String | Identificador del mensaje padre |
{{LIBRECHAT_BODY_MESSAGEID}} | messageId | String | Identificador 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:
| Key | Type | Description | Example |
|---|---|---|---|
| directEndpoint | Boolean | Cuando se establece en `true`, trata la `baseURL` configurada como el endpoint de completions que se utilizará |
Predeterminado: false
Ejemplo:
directEndpoint: truetitleMessageRole
- Opciones:
"system"|"user"|"assistant"
Clave:
| Key | Type | Description | Example |
|---|---|---|---|
| titleMessageRole | String | Especifica 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?