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

Struktura obiektu niestandardowego endpoint

Każdy endpoint w tablicy custom powinien mieć następującą strukturę:

Przykład

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

Klucz:

KeyTypeDescriptionExample
nameStringUnikalna nazwa dla endpoint.Will be used as the "title" in the Endpoints Selector

Wymagane

Przykład:

name: 'Mistral'

apiKey

Klucz:

KeyTypeDescriptionExample
apiKeyString (apiKey | "user_provided")Twój klucz API dla tej usługi. Może odwoływać się do zmiennej środowiskowej lub pozwalać użytkownikowi na podanie wartości.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Wymagane

Przykład:

apiKey: '${MISTRAL_API_KEY}'

lub

apiKey: 'your_api_key'

lub

apiKey: 'user_provided'

baseURL

Klucz:

KeyTypeDescriptionExample
baseURLString (baseURL | "user_provided")Podstawowy adres URL dla API. Może odwoływać się do zmiennej środowiskowej lub pozwalać użytkownikowi na podanie wartości.It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`

Wymagane

Przykład:

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

lub

baseURL: '${MISTRAL_BASE_URL}'

lub

baseURL: 'user_provided'

Uwagi:

  • Jeśli ustawiony przez Ciebie baseURL jest pełnym punktem końcowym (endpoint) uzupełnień, możesz ustawić pole directEndpoint na true, aby użyć go bezpośrednio.
    • Jest to konieczne, ponieważ aplikacja domyślnie dodaje "/chat/completions" lub "/completion" do baseURL.
  • Podczas korzystania z provider: anthropic, ustaw baseURL na główny adres API, z którym ma łączyć się zestaw SDK Anthropic, na przykład https://api.anthropic.com lub adres główny Twojej bramy (gateway). LibreChat używa natywnej ścieżki Anthropic /v1/messages dla tego dostawcy.

provider

Klucz:

KeyTypeDescriptionExample
providerStringKieruje niestandardowy endpoint przez natywnego klienta dostawcy zamiast domyślnego klienta zgodnego z OpenAI.Currently supports `anthropic`.

Domyślnie: pominięto, co używa ścieżki niestandardowego endpoint zgodnego z OpenAI.

Obsługiwane wartości:

  • "anthropic" - Używa natywnego klienta Anthropic /v1/messages z baseURL, apiKey, headers, addParams, dropParams oraz customParams.paramDefinitions tego endpointu.

Przykład:

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

Uwagi:

  • Użyj provider: anthropic dla samej usługi Anthropic lub bramek kompatybilnych z Anthropic, które obsługują natywne Messages API.
  • Wymień modele jawnie w models.default; styl OpenAI models.fetch nie jest używany dla natywnych niestandardowych endpointów Anthropic.
  • Dostawca sugeruje parametry UI Anthropic, chyba że jawnie ustawisz inny customParams.defaultParamsEndpoint.
  • Endpointy bez provider zachowują zachowanie zgodne z OpenAI.

iconURL

Klucz:

KeyTypeDescriptionExample
iconURLStringAdres URL obrazu, ścieżka do zasobu publicznego lub wbudowany klucz ikony endpoint, który ma być użyty jako ikona endpoint.

Domyślnie: ""

Przykład:

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

lub użyj wbudowanej ikony endpoint:

iconURL: openAI

Uwagi:

  • Nie ustawiaj niestandardowej name (nazwy) endpointu na nazwę wbudowanego endpointu tylko po to, aby użyć ponownie ikony. Niestandardowe nazwy endpointów muszą być unikalne i nie powinny używać domyślnych wartości endpointów, takich jak:
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Aby użyć ikony punktu końcowego dołączonej do projektu, zachowaj unikalną nazwę name niestandardowego punktu końcowego i ustaw iconURL na jeden z wbudowanych kluczy punktów końcowych.
    • "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "azureAssistants" | "agents" | "bedrock"
  • Aby użyć niestandardowego obrazu, ustaw iconURL na adres URL obrazu lub ścieżkę obsługiwaną przez LibreChat, taką jak /assets/my-icon.svg.
  • Istnieją również „znane endpointy” (wielkość liter nie ma znaczenia), dla których dostarczono ikony. Jeśli name Twojego endpointu pasuje do poniższych nazw, powinieneś pominąć to pole:
    • Anyscale
    • APIpie
    • Cohere
    • Deepseek
    • Fajerwerki
    • groq
    • Helicone
    • Huggingface
    • Mistral
    • MLX
    • Moonshot
    • ollama
    • OpenRouter
    • Perplexity
    • Qwen
    • ShuttleAI
    • together.ai
    • Ujednolicenie
    • xai

models

Klucz:

KeyTypeDescriptionExample
modelsObjectKonfiguracja modeli.

Wymagane

Właściwości:

default

Klucz:

KeyTypeDescriptionExample
defaultArray of StringsTablica ciągów znaków wskazująca domyślne modele do użycia.If fetching models fails, these defaults are used as a fallback.

Wymagane

Przykład:

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

fetch

Klucz:

KeyTypeDescriptionExample
fetchBooleanGdy ustawiono na `true`, podejmuje próbę pobrania listy modeli z API.May cause slowdowns during initial use of the app if the response is delayed. Defaults to `false`.

Domyślnie: false

Przykład:

fetch: true

userIdQuery

Klucz:

KeyTypeDescriptionExample
userIdQueryBooleanGdy ustawiono na `true`, dodaje identyfikator użytkownika LibreChat jako parametr zapytania do żądania modeli API.

Domyślnie: false

Przykład:

userIdQuery: true

titleConvo

Klucz:

KeyTypeDescriptionExample
titleConvoBooleanWłącza tytułowanie konwersacji, gdy ustawiono na `true`.

Domyślnie: false

Przykład:

titleConvo: true

titleTiming

Klucz:

KeyTypeDescriptionExample
titleTimingStringOkreśla, kiedy generowane są tytuły konwersacji. Prawidłowe wartości: "immediate" lub "final".Defaults to "immediate".

Domyślnie: "immediate"

Dostępne wartości:

  • "immediate" - Generuje tytuł natychmiast po rozpoczęciu żądania, równolegle z odpowiedzią modelu, używając pierwszej wiadomości użytkownika.
  • "final" - Odracza generowanie tytułu do momentu zakończenia pełnej odpowiedzi. Zachowuje to starsze zachowanie (legacy behavior).

Przykład:

titleTiming: 'final'

titleMethod

Klucz:

KeyTypeDescriptionExample
titleMethodStringOkreśla metodę używaną do generowania tytułów konwersacji.Valid values: "completion" (default), "structured", "functions" (legacy alias for "structured")

Domyślnie: "completion"

Dostępne metody:

  • "completion" - Używa standardowego API completion bez narzędzi/funkcji. Kompatybilne z większością LLM.
  • "structured" - Używa ustrukturyzowanego wyjścia do generowania tytułów. Wymaga wsparcia ze strony dostawcy/modelu.
  • "functions" - Starszy alias dla "structured". Funkcjonalnie identyczny.

Przykład:

titleMethod: 'completion'

titleModel

Klucz:

KeyTypeDescriptionExample
titleModelStringOkreśla model używany do tytułów.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".

Domyślnie: "gpt-3.5-turbo"

Przykład:

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

titlePrompt

Klucz:

KeyTypeDescriptionExample
titlePromptStringNiestandardowy prompt do generowania tytułu. Musi zawierać symbol zastępczy {convo}.Allows full control over how titles are generated.

Domyślne:

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}

Uwagi:

  • Musi zawsze zawierać symbol zastępczy {convo}
  • Symbol zastępczy {convo} zostanie zastąpiony sformatowaną konwersacją

Przykład:

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

titlePromptTemplate

Klucz:

KeyTypeDescriptionExample
titlePromptTemplateStringSzablon formatowania zawartości konwersacji, który zastępuje {convo} w titlePrompt.Must include {input} and {output} placeholders.

Domyślnie: "User: {input}\nAI: {output}"

Uwagi:

  • Musi zawierać oba symbole zastępcze {input} oraz {output}
  • Określa, w jaki sposób konwersacja jest formatowana podczas wstawiania do titlePrompt

Przykład:

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

titleEndpoint

Klucz:

KeyTypeDescriptionExample
titleEndpointStringOkreśla alternatywny endpoint używany do generowania tytułów.Allows using a different model/endpoint for titles.

Domyślnie: Używa bieżącego niestandardowego endpoint.

Akceptowane wartości:

  • openAI
  • azureOpenAI
  • google
  • anthropic
  • bedrock
  • Inna niestandardowa nazwa endpoint

Przykład:

# 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

Klucz:

KeyTypeDescriptionExample
modelDisplayLabelStringEtykieta wyświetlana w wiadomościach obok ikony bieżącego modelu AI.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".

Domyślnie: "AI"

Przykład:

modelDisplayLabel: 'Mistral'

addParams

Klucz:

KeyTypeDescriptionExample
addParamsObject/DictionaryDodaje dodatkowe parametry do żądań. Wartościami mogą być ciągi znaków, liczby, wartości logiczne, tablice lub zagnieżdżone obiekty. Obsługuje przełączniki narzędzi dostawcy, takie jak `web_search: true` oraz `url_context: true` dla Google.Adds/Overrides parameters. Useful for specifying API-specific options.

Przykład:

addParams:
  safe_prompt: true
  max_tokens: 2048

Uwagi:

  • Pole addParams pozwala na dołączenie dodatkowych parametrów, które nie są częścią domyślnego ładunku (zobacz sekcję "Parametry domyślne"). Jest to szczególnie przydatne w przypadku opcji specyficznych dla danego API.

dropParams

Klucz:

KeyTypeDescriptionExample
dropParamsArray/List of StringsUsuwa domyślne parametry z żądań.Excludes specified default parameters. Useful for APIs that do not accept or recognize certain parameters.

Przykład:

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

Uwaga:

  • Pole dropParams pozwala na usunięcie "Parametrów domyślnych", które są wysyłane z każdym żądaniem. Jest to przydatne podczas pracy z API, które nie akceptują lub nie rozpoznają określonych parametrów.

customParams

Klucz:

KeyTypeDescriptionExample
customParamsObject/DictionaryDefiniuje niestandardowe zachowanie endpoint oraz metadane ustawień, które nie są częścią treści żądania dostawcy.Used for endpoint-specific configuration such as reasoning parameter shape.

Podklucze:

KeyTypeDescriptionExample
defaultParamsEndpointStringDomyślne ustawienia endpoint używane dla metadanych parametrów żądania. Domyślnie `custom`. Gdy ustawiono `provider: anthropic` i pominięto to pole, LibreChat używa zestawu parametrów Anthropic.defaultParamsEndpoint: custom
reasoningFormatStringOkreśla sposób przesyłania parametrów rozumowania do niestandardowych endpointów zgodnych z OpenAI. Prawidłowe wartości: `reasoning_effort`, `reasoning_object`, `disabled`.reasoningFormat: reasoning_object
reasoningKeyStringOkreśla, który klucz odpowiedzi jest odczytywany dla treści rozumowania dostawcy. Prawidłowe wartości: `reasoning` lub `reasoning_content`.reasoningKey: reasoning_content
includeReasoningContentBooleanOdtwarza `reasoning_content` dostawcy w turach wywołań narzędzi dla zgodnych z OpenAI niestandardowych endpoint, które tego wymagają.includeReasoningContent: true
includeReasoningHistoryBooleanRekonstruuje `reasoning_content` z utrwalonej historii konwersacji pomiędzy turami. Implikuje `includeReasoningContent`.includeReasoningHistory: true
paramDefinitionsArray/ListNiestandardowe definicje ustawień dla tego endpoint.See default parameter definitions.

Formaty rozumowania:

  • reasoning_effort - Wysyła starszy parametr reasoning_effort.
  • reasoning_object - Wysyła obiekt reasoning, taki jak { effort, summary }, dla dostawców, którzy korzystają z nowszego formatu zgodnego z OpenAI.
  • disabled - Pomija parametry rozumowania, nawet jeśli użytkownik lub Model Specs wybiorą rozumowanie.

Odtwarzanie rozumowania:

  • Użyj includeReasoningContent: true dla dostawców kompatybilnych z OpenAI, którzy wymagają, aby reasoning_content asystenta było odtwarzane podczas tur wywołań narzędzi (tool-call turns).
  • Używaj includeReasoningHistory: true tylko dla dostawców, którzy wymagają również reasoning_content zrekonstruowanego z utrwalonej historii w późniejszych turach, takich jak niektóre bramki Xiaomi MiMo lub kompatybilne z Kimi.

Uwaga dotycząca dostawcy Anthropic:

Użyj provider: anthropic, gdy niestandardowy endpoint powinien korzystać z natywnego API Anthropic Messages. Użyj customParams.defaultParamsEndpoint: anthropic bez provider tylko wtedy, gdy nadal potrzebujesz ścieżki niestandardowego endpointu kompatybilnego z OpenAI, ale chcesz uzyskać metadane parametrów i adaptację żądań w stylu Anthropic.

Przykład:

customParams:
  reasoningFormat: reasoning_object
  reasoningKey: reasoning_content
  includeReasoningContent: true

tokenConfig

Klucz:

KeyTypeDescriptionExample
tokenConfigObject/DictionaryDefiniuje okna kontekstowe specyficzne dla modelu oraz stawki za milion tokenów dla tego niestandardowego endpoint.Used by context usage, visible cost breakdowns, balance transactions, and multi-endpoint agent billing.

Każdy klucz to nazwa modelu. Każdy wpis modelu obsługuje:

KeyTypeDescriptionExample
promptNumberStawka tokenów promptu/wejściowych na milion tokenów.Required
completionNumberStawka tokenów wyjściowych/generowania na milion tokenów.Required
contextNumberMaksymalne okno kontekstowe dla modelu.Required
cacheReadNumberSzybkość odczytu danych wejściowych z pamięci podręcznej na milion tokenów.Optional
cacheWriteNumberSzybkość zapisu danych wejściowych w pamięci podręcznej na milion tokenów.Optional

Przykład:

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

Uwagi:

  • Stawki są wyrażone w USD za milion tokenów przed zastosowaniem jakiejkolwiek konwersji interface.currency na potrzeby wyświetlania.
  • Nazwa modelu musi być zgodna z wartością modelu wysyłaną przez niestandardowy endpoint.
  • W przypadku Agentów korzystających z wielu endpoint, podczas rejestrowania użycia i kosztów stosowana jest pasująca konfiguracja tokenów dla danego endpoint/model.

headers

Klucz:

KeyTypeDescriptionExample
headersObject/DictionaryDodaje dodatkowe nagłówki do żądań. Wszystkie wartości nagłówków muszą być ciągami znaków. Obsługuje dynamiczne podstawianie pól użytkownika za pomocą `{{LIBRECHAT_USER_*}}`, symbole zastępcze treści żądania za pomocą `{{LIBRECHAT_BODY_*}}` oraz zmienne środowiskowe za pomocą `${ENV_VAR}`.The `headers` object specifies custom headers for requests. Useful for authentication and setting content types.

Przykład:

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

Uwaga: Obsługuje dynamiczne wartości zmiennych środowiskowych, które używają formatu: "${VARIABLE_NAME}".

Gdy używane jest models.fetch: true, te nagłówki są również rozwiązywane i przekazywane do żądania listy modeli dla adresów bazowych kontrolowanych przez administratora. Skonfigurowany nagłówek Authorization ma pierwszeństwo przed rezerwowym apiKey punktu końcowego, co jest przydatne w przypadku serwerów proxy z obsługą autoryzacji, które zwracają listy modeli dla poszczególnych użytkowników. Jeśli skonfigurowano baseURL: "user_provided", LibreChat nie przekazuje skonfigurowanych szablonów nagłówków do miejsca docelowego podanego przez użytkownika. W przypadku provider: anthropic, nagłówki są przekazywane przez natywnego klienta Anthropic zamiast klienta zgodnego z OpenAI.

Dostępne symbole zastępcze pól użytkownika:

Symbol zastępczyPole użytkownikaTypOpis
{{LIBRECHAT_USER_ID}}idStringUnikalny identyfikator użytkownika
{{LIBRECHAT_USER_NAME}}nameStringWyświetlana nazwa użytkownika
{{LIBRECHAT_USER_USERNAME}}usernameStringNazwa użytkownika
{{LIBRECHAT_USER_EMAIL}}emailStringAdres e-mail użytkownika
{{LIBRECHAT_USER_PROVIDER}}providerStringDostawca uwierzytelniania (np. "email", "google", "github")
{{LIBRECHAT_USER_ROLE}}roleStringRola użytkownika (np. "user", "admin")
{{LIBRECHAT_USER_GOOGLEID}}googleIdStringIdentyfikator konta Google
{{LIBRECHAT_USER_FACEBOOKID}}facebookIdStringIdentyfikator konta Facebook
{{LIBRECHAT_USER_OPENIDID}}openidIdStringIdentyfikator konta OpenID
{{LIBRECHAT_USER_SAMLID}}samlIdStringIdentyfikator konta SAML
{{LIBRECHAT_USER_LDAPID}}ldapIdStringIdentyfikator konta LDAP
{{LIBRECHAT_USER_GITHUBID}}githubIdStringIdentyfikator konta GitHub
{{LIBRECHAT_USER_DISCORDID}}discordIdStringIdentyfikator konta Discord
{{LIBRECHAT_USER_APPLEID}}appleIdStringIdentyfikator konta Apple
{{LIBRECHAT_USER_EMAILVERIFIED}}emailVerifiedBoolean → StringStatus weryfikacji e-mail ("true" lub "false")
{{LIBRECHAT_USER_TWOFACTORENABLED}}twoFactorEnabledBoolean → StringStatus 2FA ("true" lub "false")
{{LIBRECHAT_USER_TERMSACCEPTED}}termsAcceptedBoolean → StringStatus akceptacji regulaminu ("true" lub "false")

Dostępne symbole zastępcze treści żądania (Request Body):

Symbol zastępczyPole treściTypOpis
{{LIBRECHAT_BODY_CONVERSATIONID}}conversationIdStringIdentyfikator bieżącej konwersacji
{{LIBRECHAT_BODY_PARENTMESSAGEID}}parentMessageIdStringIdentyfikator wiadomości nadrzędnej
{{LIBRECHAT_BODY_MESSAGEID}}messageIdStringIdentyfikator bieżącej wiadomości

Przykład użycia symboli zastępczych w treści żądania (request body):

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

directEndpoint

Klucz:

KeyTypeDescriptionExample
directEndpointBooleanGdy ustawiono na `true`, traktuje skonfigurowany `baseURL` jako endpoint completions, który ma być używany

Domyślnie: false

Przykład:

directEndpoint: true

titleMessageRole

  • Opcje: "system" | "user" | "assistant"

Klucz:

KeyTypeDescriptionExample
titleMessageRoleStringOkreśla wartość roli używaną w ładunku wiadomości do generowania tytułu. Musi być jedną z: `"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.

Domyślnie: "system"

Przykład:

titleMessageRole: 'user'

Jaka jest ta instrukcja?