mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
* feat: assistant name/icon in Landing & Header * feat: assistname in textarea placeholder, and use `Assistant` as default name * feat: display non-image files in user messages * fix: only render files if files.length is > 0 * refactor(config -> file-config): move file related configuration values to separate module, add excel types * chore: spreadsheet file rendering * fix(Landing): dark mode style for Assistant Name * refactor: move progress incrementing to own hook, start smaller, cap near limit \(1\) * refactor(useContentHandler): add empty Text part if last part was completed tool or image * chore: add accordion trigger border styling for dark mode * feat: Assistant Builder model selection * chore: use Spinner when Assistant is mutating * fix(get/assistants): return correct response object `AssistantListResponse` * refactor(Spinner): pass size as prop * refactor: make assistant crud mutations optimistic, add types for options * chore: remove assistants route and view * chore: move assistant builder components to separate directory * feat(ContextButton): delete Assistant via context button/dialog, add localization * refactor: conditionally show use and context menu buttons, add localization for create assistant * feat: save side panel states to localStorage * style(SidePanel): improve avatar menu and assistant select styling for dark mode * refactor: make NavToggle reusable for either side (left or right), add SidePanel Toggle with ability to close it completely * fix: resize handle and navToggle behavior * fix(/avatar/:assistant_id): await `deleteFile` and assign unique name to uploaded image * WIP: file UI components from PR #576 * refactor(OpenAIMinimalIcon): pass className * feat: formatDate helper fn * feat: DataTableColumnHeader * feat: add row selection, formatted row values, number of rows selected * WIP: add files to Side panel temporarily * feat: `LB_QueueAsyncCall`: Leaky Bucket queue for external APIs, use in `processDeleteRequest` * fix(TFile): correct `source` type with `FileSources` * fix(useFileHandling): use `continue` instead of return when iterating multiple files, add file type to extendedFile * chore: add generic setter type * refactor(processDeleteRequest): settle promises to prevent rejections from processing deletions, log errors * feat: `useFileDeletion` to reuse file deletion logic * refactor(useFileDeletion): make `setFiles` an optional param and use object as param * feat: useDeleteFilesFromTable * feat: use real `files` data and add deletion action to data table * fix(Table): make headers sticky * feat: add dynamic filtering for columns; only show to user Host or OpenAI storage type * style(DropdownMenu): replace `slate` with `gray` * style(DataTable): apply dark mode themes and other misc styling * style(Columns): add color to OpenAI Storage option * refactor(FileContainer): make file preview reusable * refactor(Images): make image preview reusable * refactor(FilePreview): make file prop optional for FileIcon and FilePreview, fix relative style * feat(Columns): add file/image previews, set a minimum size to show for file size in bytes * WIP: File Panel with real files and formatted * feat: open files dialog from panel * style: file data table mobile and general column styling fixes * refactor(api/files): return files sorted by the most recently updated * refactor: provide fileMap through context to prevent re-selecting files to map in different areas; remove unused imports commented out in PanelColumns * refactor(ExtendFile): make File type optional, add `attached` to prevent attached files from being deleted on remove, make Message.files a partial TFile type * feat: attach files through file panel * refactor(useFileHandling): move files to the start of cache list when uploaded * refactor(useDeleteFilesMutation): delete files from cache when successfully deleted from server * fix(FileRow): handle possible edge case of duplication due to attaching recently uploaded file * style(SidePanel): make resize grip border transparent, remove unnecessary styling on close sidepanel button * feat: action utilities and tests * refactor(actions): add `ValidationResult` type and change wording for no server URL found * refactor(actions): check for empty server URL * fix(data-provider): revert tsconfig to fix type issue resolution * feat(client): first pass of actions input for assistants * refactor(FunctionSignature): change method to output object instead of string * refactor(models/Assistant): add actions field to schema, use searchParams object for methods, and add `getAssistant` * feat: post actions input first pass - create new Action document - add actions to Assistant DB document - create /action/:assistant_id POST route - pass more props down from PanelSwitcher, derive assistant_id from switcher - move privacy policy to ActionInput - reset data on input change/validation - add `useUpdateAction` - conform FunctionSignature type to FunctionTool - add action, assistant doc, update hook related types * refactor: optimize assistant/actions relationship - past domain in metadata as hostname and not a URL - include domain in tool name - add `getActions` for actions retrieval by user - add `getAssistants` for assistant docs retrieval by user - add `assistant_id` to Action schema - move actions to own module as a subroute to `api/assistants` - add `useGetActionsQuery` and `useGetAssistantDocsQuery` hooks - fix Action type def * feat: show assistant actions in assistant builder * feat: switch to actions on action click, editing action styling * fix: add Assistant state for builder panel to allow immediate selection of newly created assistants as well as retaining the current assistant when switching to a different panel within the builder * refactor(SidePanel/NavToggle): offset less from right when SidePanel is completely collapsed * chore: rename `processActions` -> `processRequiredActions` * chore: rename Assistant API Action to RequiredAction * refactor(actions): avoid nesting actual API params under generic `requestBody` to optimize LLM token usage * fix(handleTools): avoid calling `validTool` if not defined, add optional param to skip the loading of specs, which throws an error in the context of assistants * WIP: working first pass of toolCalls generated from openapi specs * WIP: first pass ToolCall styling * feat: programmatic iv encryption/decryption helpers * fix: correct ActionAuth types/enums, and define type for AuthForm * feat: encryption/decryption helpers for Action AuthMetadata * refactor(getActions): remove sensitive fields from query response * refactor(POST/actions): encrypt and remove sensitive fields from mutation response * fix(ActionService): change ESM import to CJS * feat: frontend auth handling for actions + optimistic update on action update/creation * refactor(actions): use the correct variables and types for setAuth method * refactor: POST /:assistant_id action can now handle updating an existing action, add `saved_auth_fields` to determine when user explicitly saves new auth creds. only send auth metadata if user explicitly saved fields * refactor(createActionTool): catch errors and send back meaningful error message, add flag to `getActions` to determine whether to retrieve sensitive values or not * refactor(ToolService): add `action` property to ToolCall PartMetadata to determine if the tool call was an action, fix parsing function name issue with actionDelimiter * fix(ActionRequest): use URL class to correctly join endpoint parts for `execute` call * feat: delete assistant actions * refactor: conditionally show Available actions * refactor: show `retrieval` and `code_interpreter` as Capabilities, swap `Switch` for `Checkbox` * chore: remove shadow-stroke from messages * WIP: first pass of Assistants Knowledge attachments * refactor: remove AssistantsProvider in favor of FormProvider, fix selectedAssistant re-render bug, map Assistant file_ids to files via fileMap, initialize Knowledge component with mapped files if any exist * fix: prevent deleting files on assistant file upload * chore: remove console.log * refactor(useUploadFileMutation): update files and assistants cache on upload * chore: disable oauth option as not supported yet * feat: cancel assistant runs * refactor: initialize OpenAI client with helper function, resolve all related circular dependencies * fix(DALL-E): initialization * fix(process): openai client initialization * fix: select an existing Assistant when the active one is deleted * chore: allow attaching files for assistant endpoint, send back relevant OpenAI error message when uploading, deconstruct openAI initialization correctly, add `message_file` to formData when a file is attached to the message but not the assistant * fix: add assistant_id on newConvo * fix(initializeClient): import fix * chore: swap setAssistant for setOption in useEffect * fix(DALL-E): add processFileURL to loadTools call * chore: add customConfig to debug logs * feat: delete threads on convo delete * chore: replace Assistants icon * chore: remove console.dir() in `abortRun` * feat(AssistantService): accumulate text values from run in openai.responseText * feat: titling for assistants endpoint * chore: move panel file components to appropriate directory, add file checks for attaching files, change icon for Attach Files * refactor: add localizations to tools, plugins, add condition for adding/remove user plugins so tool selections don't affect this value * chore: disable `import from url` action for now * chore: remove textMimeTypes from default fileConfig for now * fix: catch tool errors and send as outputs with error messages * fix: React warning about button as descendant of button * style: retrieval and cancelled icon * WIP: pass isSubmitting to Parts, use InProgressCall to display cancelled tool calls correctly, show domain/function name * fix(meilisearch): fix `postSaveHook` issue where indexing expects a mongo document, and join all text content parts for meili indexing * ci: fix dall-e tests * ci: fix client tests * fix: button types in actions panel * fix: plugin auth form persisting across tool selections * fix(ci): update AppService spec with `loadAndFormatTools` * fix(clearConvos): add id check earlier on * refactor(AssistantAvatar): set previewURL dynamically when emtadata.avatar changes * feat(assistants): addTitle cache setting * fix(useSSE): resolve rebase conflicts * fix: delete mutation * style(SidePanel): make grip visible on active and hover, invisible otherwise * ci: add data-provider tests to workflow, also update eslint/tsconfig to recognize specs, and add `text/csv` to fileConfig * fix: handle edge case where auth object is undefined, and log errors * refactor(actions): resolve schemas, add tests for resolving refs, import specs from separate file for tests * chore: remove comment * fix(ActionsInput): re-render bug when initializing states with action fields * fix(patch/assistant): filter undefined tools * chore: add logging for errors in assistants routes * fix(updateAssistant): map actions to functions to avoid overwriting * fix(actions): properly handle GET paths * fix(convos): unhandled delete thread exception * refactor(AssistantService): pass both thread_id and conversationId when sending intermediate assistant messages, remove `mapMessagesToSteps` from AssistantService * refactor(useSSE): replace all messages with runMessages and pass latestMessageId to abortRun; fix(checkMessageGaps): include tool calls when syncing messages * refactor(assistants/chat): invoke `createOnTextProgress` after thread creation * chore: add typing * style: sidepanel styling * style: action tool call domain styling * feat(assistants): default models, limit retrieval to certain models, add env variables to to env.example * feat: assistants api key in EndpointService * refactor: set assistant model to conversation on assistant switch * refactor: set assistant model to conversation on assistant select from panel * fix(retrieveAndProcessFile): catch attempt to download file with `assistant` purpose which is not allowed; add logging * feat: retrieval styling, handling, and logging * chore: rename ASSISTANTS_REVERSE_PROXY to ASSISTANTS_BASE_URL * feat: FileContext for file metadata * feat: context file mgmt and filtering * style(Select): hover/rounded changes * refactor: explicit conversation switch, endpoint dependent, through `useSelectAssistant`, which does not create new chat if current endpoint is assistant endpoint * fix(AssistantAvatar): make empty previewURL if no avatar present * refactor: side panel mobile styling * style: merge tool and action section, optimize mobile styling for action/tool buttons * fix: localStorage issues * fix(useSelectAssistant): invoke react query hook directly in select hook as Map was not being updated in time * style: light mode fixes * fix: prevent sidepanel nav styling from shifting layout up * refactor: change default layout (collapsed by default) * style: mobile optimization of DataTable * style: datatable * feat: client-side hide right-side panel * chore(useNewConvo): add partial typing for preset * fix(useSelectAssistant): pass correct model name by using template as preset * WIP: assistant presets * refactor(ToolService): add native solution for `TavilySearchResults` and log tool output errors * refactor: organize imports and use native TavilySearchResults * fix(TavilySearchResults): stringify result * fix(ToolCall): show tool call outputs when not an action * chore: rename Prompt Prefix to custom instructions (in user facing text only) * refactor(EditPresetDialog): Optimize setting title by debouncing, reset preset on dialog close to avoid state mixture * feat: add `presetOverride` to overwrite active conversation settings when saving a Preset (relevant for client side updates only) * feat: Assistant preset settings (client-side) * fix(Switcher): only set assistant_id and model if current endpoint is Assistants * feat: use `useDebouncedInput` for updating conversation settings, starting with EditPresetDialog title setting and Assistant instructions setting * feat(Assistants): add instructions field to settings * feat(chat/assistants): pass conversation settings to run body * wip: begin localization and only allow actions if the assistant is created * refactor(AssistantsPanel): knowledge localization, allow tools on creation * feat: experimental: allow 'priming' values before assistant is created, that would normally require an assistant_id to be defined * chore: trim console logs and make more meaningful * chore: toast messages * fix(ci): date test * feat: create file when uploading Assistant Avatar * feat: file upload rate limiting from custom config with dynamic file route initialization * refactor: use file upload limiters on post routes only * refactor(fileConfig): add endpoints field for endpoint specific fileconfigs, add mergeConfig function, add tests * refactor: fileConfig route, dynamic multer instances used on all '/' and '/images' POST routes, data service and query hook * feat: supportedMimeTypesSchema, test for array of regex * feat: configurable file config limits * chore: clarify assistants file knowledge prereq. * chore(useTextarea): default to localized 'Assistant' if assistant name is empty * feat: configurable file limits and toggle file upload per endpoint * fix(useUploadFileMutation): prevent updating assistant.files cache if file upload is a message_file attachment * fix(AssistantSelect): set last selected assistant only when timeout successfully runs * refactor(queries): disable assistant queries if assistants endpoint is not enabled * chore(Switcher): add localization * chore: pluralize `assistant` for `EModelEndpoint key and value * feat: show/hide assistant UI components based on endpoint availability; librechat.yaml config for disabling builder section and setting polling/timeout intervals * fix(compactEndpointSchemas): use EModelEndpoint for schema access * feat(runAssistant): use configured values from `librechat.yaml` for `pollIntervalMs` and `timeout` * fix: naming issue * wip: revert landing * 🎉 happy birthday LibreChat (#1768) * happy birthday LibreChat * Refactor endpoint condition in Landing component * Update birthday message in Eng.tsx * fix(/config): avoid nesting ternaries * refactor(/config): check birthday --------- Co-authored-by: Danny Avila <messagedaniel@protonmail.com> * fix: landing * fix: landing * fix(useMessageHelpers): hardcoded check to use EModelEndpoint instead * fix(ci): convo test revert to main * fix(assistants/chat): fix issue where assistant_id was being saved as model for convo * chore: added logging, promises racing to prevent longer timeouts, explicit setting of maxRetries and timeouts, robust catching of invalid abortRun params * refactor: use recoil state for `showStopButton` and only show for assistants endpoint after syncing conversation data * refactor: optimize abortRun strategy using localStorage, refactor `abortConversation` to use async/await and await the result, refactor how the abortKey cache is set for runs * fix(checkMessageGaps): assign `assistant_id` to synced messages if defined; prevents UI from showing blank assistant for cancelled messages * refactor: re-order sequence of chat route, only allow aborting messages after run is created, cancel abortRun if there was a cancelling error (likely due already cancelled in chat route), and add extra logging * chore(typedefs): add httpAgent type to OpenAIClient * refactor: use custom implementation of retrieving run with axios to allow for timing out run query * fix(waitForRun): handle timed out run retrieval query * refactor: update preset conditions: - presets will retain settings when a different endpoint is selected; for existing convos, either when modular or is assistant switch - no longer use `navigateToConvo` on preset select * fix: temporary calculator hack as expects string input when invoked * fix: cancel abortRun only when cancelling error is a result of the run already being cancelled * chore: remove use of `fileMaxSizeMB` and total counterpart (redundant) * docs: custom config documentation update * docs: assistants api setup and dotenv, new custom config fields * refactor(Switcher): make Assistant switcher sticky in SidePanel * chore(useSSE): remove console log of data and message index * refactor(AssistantPanel): button styling and add secondary select button to bottom of panel * refactor(OpenAIClient): allow passing conversationId to RunManager through titleConvo and initializeLLM to properly record title context tokens used in cases where conversationId was not defined by the client * feat(assistants): token tracking for assistant runs * chore(spendTokens): improve logging * feat: support/exclude specific assistant Ids * chore: add update `librechat.example.yaml`, optimize `AppService` handling, new tests for `AppService`, optimize missing/outdate config logging * chore: mount docker logs to root of project * chore: condense axios errors * chore: bump vite * chore: vite hot reload fix using latest version * chore(getOpenAIModels): sort instruct models to the end of models list * fix(assistants): user provided key * fix(assistants): user provided key, invalidate more queries on revoke --------- Co-authored-by: Marco Beretta <81851188+Berry-13@users.noreply.github.com>
725 lines
27 KiB
Markdown
725 lines
27 KiB
Markdown
---
|
|
title: 🖥️ Custom Endpoints & Config
|
|
description: Comprehensive guide for configuring the `librechat.yaml` file AKA the LibreChat Config file. This document is your one-stop resource for understanding and customizing endpoints & other integrations.
|
|
weight: -10
|
|
---
|
|
|
|
# LibreChat Configuration Guide
|
|
|
|
Welcome to the guide for configuring the **librechat.yaml** file in LibreChat.
|
|
|
|
This file enables the integration of custom AI endpoints, enabling you to connect with any AI provider compliant with OpenAI API standards.
|
|
|
|
This includes providers like [Mistral AI](https://docs.mistral.ai/platform/client/), as well as reverse proxies that facilitate access to OpenAI servers, adding them alongside existing endpoints like Anthropic.
|
|
|
|

|
|
|
|
Future updates will streamline configuration further by migrating some settings from [your `.env` file](./dotenv.md) to `librechat.yaml`.
|
|
|
|
Stay tuned for ongoing enhancements to customize your LibreChat instance!
|
|
|
|
> Note: To verify your YAML config, you can use online tools like [yamlchecker.com](https://yamlchecker.com/)
|
|
|
|
**Note:** To verify your YAML config, you can use online tools like [yamlchecker.com](https://yamlchecker.com/)
|
|
|
|
## Setup
|
|
|
|
**The `librechat.yaml` file should be placed in the root of the project where the .env file is located.**
|
|
|
|
You can copy the [example config file](#example-config) as a good starting point while reading the rest of the guide.
|
|
|
|
The example config file has some options ready to go for Mistral AI and Openrouter.
|
|
|
|
## Docker Setup
|
|
|
|
For Docker, you need to make use of an [override file](./docker_override.md), named `docker-compose.override.yml`, to ensure the config file works for you.
|
|
|
|
- First, make sure your containers stop running with `docker compose down`
|
|
- Create or edit existing `docker-compose.override.yml` at the root of the project:
|
|
|
|
```yaml
|
|
# For more details on the override file, see the Docker Override Guide:
|
|
# https://docs.librechat.ai/install/configuration/docker_override.html
|
|
|
|
version: '3.4'
|
|
|
|
services:
|
|
api:
|
|
volumes:
|
|
- ./librechat.yaml:/app/librechat.yaml
|
|
```
|
|
|
|
- Start docker again, and you should see your config file settings apply
|
|
```bash
|
|
docker compose up # no need to rebuild
|
|
```
|
|
|
|
## Example Config
|
|
|
|
```yaml
|
|
version: 1.0.3
|
|
cache: true
|
|
# fileStrategy: "firebase" # If using Firebase CDN
|
|
fileConfig:
|
|
endpoints:
|
|
assistants:
|
|
fileLimit: 5
|
|
fileSizeLimit: 10 # Maximum size for an individual file in MB
|
|
totalSizeLimit: 50 # Maximum total size for all files in a single request in MB
|
|
supportedMimeTypes:
|
|
- "image/.*"
|
|
- "application/pdf"
|
|
openAI:
|
|
disabled: true # Disables file uploading to the OpenAI endpoint
|
|
default:
|
|
totalSizeLimit: 20
|
|
YourCustomEndpointName:
|
|
fileLimit: 2
|
|
fileSizeLimit: 5
|
|
serverFileSizeLimit: 100 # Global server file size limit in MB
|
|
avatarSizeLimit: 2 # Limit for user avatar image size in MB
|
|
rateLimits:
|
|
fileUploads:
|
|
ipMax: 100
|
|
ipWindowInMinutes: 60 # Rate limit window for file uploads per IP
|
|
userMax: 50
|
|
userWindowInMinutes: 60 # Rate limit window for file uploads per user
|
|
registration:
|
|
socialLogins: ["google", "facebook", "github", "discord", "openid"]
|
|
allowedDomains:
|
|
- "example.com"
|
|
- "anotherdomain.com"
|
|
endpoints:
|
|
assistants:
|
|
disableBuilder: false # Disable Assistants Builder Interface by setting to `true`
|
|
pollIntervalMs: 750 # Polling interval for checking assistant updates
|
|
timeoutMs: 180000 # Timeout for assistant operations
|
|
# Should only be one or the other, either `supportedIds` or `excludedIds`
|
|
supportedIds: ["asst_supportedAssistantId1", "asst_supportedAssistantId2"]
|
|
# excludedIds: ["asst_excludedAssistantId"]
|
|
custom:
|
|
- name: "Mistral"
|
|
apiKey: "${MISTRAL_API_KEY}"
|
|
baseURL: "https://api.mistral.ai/v1"
|
|
models:
|
|
default: ["mistral-tiny", "mistral-small", "mistral-medium"]
|
|
fetch: true # Attempt to dynamically fetch available models
|
|
userIdQuery: false
|
|
iconURL: "https://example.com/mistral-icon.png"
|
|
titleConvo: true
|
|
titleMethod: "completion"
|
|
titleModel: "mistral-tiny"
|
|
summarize: true
|
|
summaryModel: "mistral-summary"
|
|
forcePrompt: false
|
|
modelDisplayLabel: "Mistral AI"
|
|
addParams:
|
|
safe_prompt: true
|
|
dropParams:
|
|
- "stop"
|
|
- "user"
|
|
- "presence_penalty"
|
|
- "frequency_penalty"
|
|
# headers:
|
|
# x-custom-header: "${CUSTOM_HEADER_VALUE}"
|
|
- name: "OpenRouter"
|
|
apiKey: "${OPENROUTER_API_KEY}"
|
|
baseURL: "https://openrouter.ai/api/v1"
|
|
models:
|
|
default: ["gpt-3.5-turbo"]
|
|
fetch: false
|
|
titleConvo: true
|
|
titleModel: "gpt-3.5-turbo"
|
|
summarize: false
|
|
forcePrompt: false
|
|
modelDisplayLabel: "OpenRouter"
|
|
dropParams:
|
|
- "frequency_penalty"
|
|
```
|
|
|
|
This example configuration file sets up LibreChat with detailed options across several key areas:
|
|
|
|
- **Caching**: Enabled to improve performance.
|
|
- **File Handling**:
|
|
- **File Strategy**: Commented out but hints at possible integration with Firebase for file storage.
|
|
- **File Configurations**: Customizes file upload limits and allowed MIME types for different endpoints, including a global server file size limit and a specific limit for user avatar images.
|
|
- **Rate Limiting**: Defines thresholds for the maximum number of file uploads allowed per IP and user within a specified time window, aiming to prevent abuse.
|
|
- **Registration**:
|
|
- Allows registration from specified social login providers and email domains, enhancing security and user management.
|
|
- **Endpoints**:
|
|
- **Assistants**: Configures the assistants' endpoint with a polling interval and a timeout for operations, and provides an option to disable the builder interface.
|
|
- **Custom Endpoints**:
|
|
- Configures two external AI service endpoints, Mistral and OpenRouter, including API keys, base URLs, model handling, and specific feature toggles like conversation titles, summarization, and parameter adjustments.
|
|
- For Mistral, it enables dynamic model fetching, applies additional parameters for safe prompts, and explicitly drops unsupported parameters.
|
|
- For OpenRouter, it sets up a basic configuration without dynamic model fetching and specifies a model for conversation titles.
|
|
|
|
## Config Structure
|
|
|
|
**Note:** Fields not specifically mentioned as required are optional.
|
|
|
|
### Version
|
|
- **Key**: `version`
|
|
- **Type**: String
|
|
- **Description**: Specifies the version of the configuration file.
|
|
- **Example**: `version: 1.0.1`
|
|
- **Required**
|
|
|
|
### Cache Settings
|
|
- **Key**: `cache`
|
|
- **Type**: Boolean
|
|
- **Description**: Toggles caching on or off. Set to `true` to enable caching.
|
|
- **Example**: `cache: true`
|
|
|
|
### File Strategy
|
|
- **Key**: `fileStrategy`
|
|
- **Type**: String = "local" | ["firebase"](../../features/firebase.md)
|
|
- **Description**: Determines where to save user uploaded/generated files. Defaults to `"local"` if omitted.
|
|
- **Example**: `fileStrategy: "firebase"`
|
|
|
|
### File Configuration
|
|
- **Key**: `fileConfig`
|
|
- **Type**: Object
|
|
- **Description**: Configures file handling settings for the application, including size limits and MIME type restrictions.
|
|
|
|
- **Sub-Key**: `endpoints`
|
|
- **Type**: Record/Object
|
|
- **Description**: Specifies file handling configurations for individual endpoints, allowing customization per endpoint basis.
|
|
- [Endpoint File Config Object Structure](#endpoint-file-config-object-structure)
|
|
|
|
- **Sub-Key**: `serverFileSizeLimit`
|
|
- **Type**: Number
|
|
- **Description**: The maximum file size (in MB) that the server will accept. Applies globally across all endpoints unless overridden by endpoint-specific settings.
|
|
|
|
- **Sub-Key**: `avatarSizeLimit`
|
|
- **Type**: Number
|
|
- **Description**: Maximum size (in MB) for user avatar images.
|
|
|
|
### Rate Limiting
|
|
|
|
- **Key**: `rateLimits`
|
|
- **Type**: Object
|
|
- **Description**: Defines rate limiting policies to prevent abuse by limiting the number of requests.
|
|
- **Sub-Key**: `fileUploads`
|
|
- **Type**: Object
|
|
- **Description**: Configures rate limits specifically for file upload operations.
|
|
- **Sub-Key**: `ipMax`
|
|
- **Type**: Number
|
|
- **Description**: Maximum number of uploads allowed per IP address per window.
|
|
- **Sub-Key**: `ipWindowInMinutes`
|
|
- **Type**: Number
|
|
- **Description**: Time window in minutes for the IP-based upload limit.
|
|
- **Sub-Key**: `userMax`
|
|
- **Type**: Number
|
|
- **Description**: Maximum number of uploads allowed per user per window.
|
|
- **Sub-Key**: `userWindowInMinutes`
|
|
- **Type**: Number
|
|
- **Description**: Time window in minutes for the user-based upload limit.
|
|
|
|
- **Example**:
|
|
```yaml
|
|
rateLimits:
|
|
fileUploads:
|
|
ipMax: 100
|
|
ipWindowInMinutes: 60
|
|
userMax: 50
|
|
userWindowInMinutes: 60
|
|
```
|
|
|
|
### Registration
|
|
- **Key**: `registration`
|
|
- **Type**: Object
|
|
- **Description**: Configures registration-related settings for the application.
|
|
- **Sub-Key**: `socialLogins`
|
|
- [More info](#socialLogins)
|
|
- **Sub-Key**: `allowedDomains`
|
|
- [More info](#allowedDomains)
|
|
- [Registration Object Structure](#registration-object-structure)
|
|
|
|
### Endpoints
|
|
- **Key**: `endpoints`
|
|
- **Type**: Object
|
|
- **Description**: Defines custom API endpoints for the application.
|
|
- **Sub-Key**: `assistants`
|
|
- **Type**: Object
|
|
- **Description**: Assistants endpoint-specific configuration.
|
|
- **Sub-Key**: `disableBuilder`
|
|
- **Description**: Controls the visibility and use of the builder interface for assistants.
|
|
- [More info](#disablebuilder)
|
|
- **Sub-Key**: `pollIntervalMs`
|
|
- **Description**: Specifies the polling interval in milliseconds for checking run updates or changes in assistant run states.
|
|
- [More info](#pollintervalms)
|
|
- **Sub-Key**: `timeoutMs`
|
|
- **Description**: Sets a timeout in milliseconds for assistant runs. Helps manage system load by limiting total run operation time.
|
|
- [More info](#timeoutMs)
|
|
- **Sub-Key**: `supportedIds`
|
|
- **Description**: List of supported assistant Ids. Use this or `excludedIds` but not both.
|
|
- [More info](#supportedIds)
|
|
- **Sub-Key**: `excludedIds`
|
|
- **Description**: List of excluded assistant Ids. Use this or `supportedIds` but not both (the `excludedIds` field will be ignored if so).
|
|
- [More info](#excludedIds)
|
|
- [Full Assistants Endpoint Object Structure](#assistants-endpoint-object-structure)
|
|
- **Sub-Key**: `custom`
|
|
- **Type**: Array of Objects
|
|
- **Description**: Each object in the array represents a unique endpoint configuration.
|
|
- [Full Custom Endpoint Object Structure](#custom-endpoint-object-structure)
|
|
- **Required**
|
|
|
|
## Endpoint File Config Object Structure
|
|
|
|
### **Overview**
|
|
|
|
- `disabled`: Whether file handling is disabled for the endpoint.
|
|
- `fileLimit`: The maximum number of files allowed per upload request.
|
|
- `fileSizeLimit`: The maximum size for a single file. In units of MB (e.g. use `20` for 20 megabytes)
|
|
- `totalSizeLimit`: The total maximum size for all files in a single request. In units of MB (e.g. use `20` for 20 megabytes)
|
|
- `supportedMimeTypes`: A list of [Regular Expressions](https://en.wikipedia.org/wiki/Regular_expression) specifying what MIME types are allowed for upload. This can be customized to restrict file types.
|
|
|
|
**Notes:**
|
|
|
|
- At the time of writing, the Assistants endpoint [supports filetypes from this list](https://platform.openai.com/docs/assistants/tools/supported-files).
|
|
- The OpenAI, Azure OpenAI, Google, and Custom endpoints only suppport images.
|
|
- Any other endpoints not mentioned, like Plugins, do not support file uploads (yet).
|
|
- The Assistants endpoint has a defined endpoint value of `assistants`. All other endpoints use the defined value `default`
|
|
- For non-assistants endpoints, you can adjust file settings for all of them under `default`
|
|
- If you'd like to adjust settings for a specific endpoint, you can list their corresponding endpoint names:
|
|
- `assistants` (does not use `default` as it has defined defaults separate from the others.)
|
|
- `openAI`
|
|
- `azureOpenAI`
|
|
- `google`
|
|
- `YourCustomEndpointName`
|
|
- You can omit values, in which case, the app will use the default values as defined per endpoint type listed below.
|
|
- LibreChat counts 1 megabyte as follows: `1 x 1024 x 1024`
|
|
|
|
### Example
|
|
|
|
```yaml
|
|
fileConfig:
|
|
endpoints:
|
|
assistants:
|
|
fileLimit: 5
|
|
fileSizeLimit: 10
|
|
totalSizeLimit: 50
|
|
supportedMimeTypes:
|
|
- "image/.*"
|
|
- "application/pdf"
|
|
openAI:
|
|
disabled: true
|
|
default:
|
|
totalSizeLimit: 20
|
|
YourCustomEndpointName:
|
|
fileLimit: 5
|
|
fileSizeLimit: 1000
|
|
supportedMimeTypes:
|
|
- "image/.*"
|
|
serverFileSizeLimit: 1000
|
|
avatarSizeLimit: 2
|
|
```
|
|
|
|
### **disabled**:
|
|
|
|
> Indicates whether file uploading is disabled for a specific endpoint.
|
|
|
|
- Type: Boolean
|
|
- Default: `false` (i.e., uploading is enabled by default)
|
|
- Example:
|
|
```yaml
|
|
openAI:
|
|
disabled: true
|
|
```
|
|
- **Note**: Setting this to `true` prevents any file uploads to the specified endpoint, overriding any other file-related settings.
|
|
|
|
### **fileLimit**:
|
|
|
|
> The maximum number of files allowed in a single upload request.
|
|
|
|
- Type: Integer
|
|
- Default: Varies by endpoint
|
|
- Example:
|
|
```yaml
|
|
assistants:
|
|
fileLimit: 5
|
|
```
|
|
- **Note**: Helps control the volume of uploads and manage server load.
|
|
|
|
### **fileSizeLimit**:
|
|
|
|
> The maximum size allowed for each individual file, specified in megabytes (MB).
|
|
|
|
- Type: Integer
|
|
- Default: Varies by endpoint
|
|
- Example:
|
|
```yaml
|
|
YourCustomEndpointName:
|
|
fileSizeLimit: 1000
|
|
```
|
|
- **Note**: This limit ensures that no single file exceeds the specified size, allowing for better resource allocation and management.
|
|
|
|
### **totalSizeLimit**:
|
|
|
|
> The total maximum size allowed for all files in a single request, specified in megabytes (MB).
|
|
|
|
- Type: Integer
|
|
- Default: Varies by endpoint
|
|
- Example:
|
|
```yaml
|
|
assistants:
|
|
totalSizeLimit: 50
|
|
```
|
|
- **Note**: This setting is crucial for preventing excessive bandwidth and storage usage by any single upload request.
|
|
|
|
### **supportedMimeTypes**:
|
|
|
|
> A list of regular expressions defining the MIME types permitted for upload.
|
|
|
|
- Type: Array of Strings
|
|
- Default: Varies by endpoint
|
|
- Example:
|
|
```yaml
|
|
assistants:
|
|
supportedMimeTypes:
|
|
- "image/.*"
|
|
- "application/pdf"
|
|
```
|
|
- **Note**: This allows for precise control over the types of files that can be uploaded. Invalid regex is ignored.
|
|
|
|
### **serverFileSizeLimit**:
|
|
|
|
> The global maximum size for any file uploaded to the server, specified in megabytes (MB).
|
|
|
|
- Type: Integer
|
|
- Example:
|
|
```yaml
|
|
fileConfig:
|
|
serverFileSizeLimit: 1000
|
|
```
|
|
- **Note**: Acts as an overarching limit for file uploads across all endpoints, ensuring that no file exceeds this size server-wide.
|
|
|
|
### **avatarSizeLimit**:
|
|
|
|
> The maximum size allowed for avatar images, specified in megabytes (MB).
|
|
|
|
- Type: Integer
|
|
- Example:
|
|
```yaml
|
|
fileConfig:
|
|
avatarSizeLimit: 2
|
|
```
|
|
- **Note**: Specifically tailored for user avatar uploads, allowing for control over image sizes to maintain consistent quality and loading times.
|
|
|
|
## Registration Object Structure
|
|
|
|
```yaml
|
|
# Example Registration Object Structure
|
|
registration:
|
|
socialLogins: ["google", "facebook", "github", "discord", "openid"]
|
|
allowedDomains:
|
|
- "gmail.com"
|
|
- "protonmail.com"
|
|
```
|
|
|
|
### **socialLogins**:
|
|
|
|
> Defines the available social login providers and their display order.
|
|
|
|
- Type: Array of Strings
|
|
- Example:
|
|
```yaml
|
|
socialLogins: ["google", "facebook", "github", "discord", "openid"]
|
|
```
|
|
- **Note**: The order of the providers in the list determines their appearance order on the login/registration page. Each provider listed must be [properly configured](./user_auth_system.md#social-authentication-setup-and-configuration) within the system to be active and available for users. This configuration allows for a tailored authentication experience, emphasizing the most relevant or preferred social login options for your user base.
|
|
|
|
### **allowedDomains**:
|
|
|
|
> A list specifying allowed email domains for registration.
|
|
|
|
- Type: Array of Strings
|
|
- Example:
|
|
```yaml
|
|
allowedDomains:
|
|
- "gmail.com"
|
|
- "protonmail.com"
|
|
```
|
|
- **Required**
|
|
- **Note**: Users with email domains not listed will be restricted from registering.
|
|
|
|
Given the additional details and correction regarding `supportedMimeTypes` being a list of regex strings and the omission of the `assistantEndpoint` configuration, let's revise and add the necessary documentation sections.
|
|
|
|
## Assistants Endpoint Object Structure
|
|
|
|
### Example
|
|
|
|
```yaml
|
|
endpoints:
|
|
assistants:
|
|
disableBuilder: false
|
|
pollIntervalMs: 500
|
|
timeoutMs: 10000
|
|
# Use either `supportedIds` or `excludedIds` but not both
|
|
supportedIds: ["asst_supportedAssistantId1", "asst_supportedAssistantId2"]
|
|
# excludedIds: ["asst_excludedAssistantId"]
|
|
```
|
|
> This configuration enables the builder interface for assistants, sets a polling interval of 500ms to check for run updates, and establishes a timeout of 10 seconds for assistant run operations.
|
|
|
|
In addition to custom endpoints, you can configure settings specific to the assistants endpoint.
|
|
|
|
### **disableBuilder**:
|
|
|
|
> Controls the visibility and use of the builder interface for assistants.
|
|
|
|
- **Type**: Boolean
|
|
- **Example**: `disableBuilder: false`
|
|
- **Description**: When set to `true`, disables the builder interface for the assistant, limiting direct manual interaction.
|
|
- **Note**: Defaults to `false` if omitted.
|
|
|
|
### **pollIntervalMs**:
|
|
|
|
> Specifies the polling interval in milliseconds for checking run updates or changes in assistant run states.
|
|
|
|
- **Type**: Integer
|
|
- **Example**: `pollIntervalMs: 500`
|
|
- **Description**: Specifies the polling interval in milliseconds for checking assistant run updates.
|
|
- **Note**: Defaults to `750` if omitted.
|
|
|
|
### **timeoutMs**:
|
|
|
|
> Defines the maximum time in milliseconds that an assistant can run before the request is cancelled.
|
|
|
|
- **Type**: Integer
|
|
- **Example**: `timeoutMs: 10000`
|
|
- **Description**: Sets a timeout in milliseconds for assistant runs. Helps manage system load by limiting total run operation time.
|
|
- **Note**: Defaults to 3 minutes (180,000 ms). Run operation times can range between 50 seconds to 2 minutes but also exceed this. If the `timeoutMs` value is exceeded, the run will be cancelled.
|
|
|
|
### **supportedIds**:
|
|
|
|
> List of supported assistant Ids
|
|
|
|
- Type: Array/List of Strings
|
|
- **Description**: List of supported assistant Ids. Use this or `excludedIds` but not both (the `excludedIds` field will be ignored if so).
|
|
- **Example**: `supportedIds: ["asst_supportedAssistantId1", "asst_supportedAssistantId2"]`
|
|
|
|
### **excludedIds**:
|
|
|
|
> List of excluded assistant Ids
|
|
|
|
- Type: Array/List of Strings
|
|
- **Description**: List of excluded assistant Ids. Use this or `supportedIds` but not both (the `excludedIds` field will be ignored if so).
|
|
- **Example**: `excludedIds: ["asst_excludedAssistantId1", "asst_excludedAssistantId2"]`
|
|
|
|
## Custom Endpoint Object Structure
|
|
Each endpoint in the `custom` array should have the following structure:
|
|
|
|
### Example
|
|
|
|
```yaml
|
|
# Example Endpoint Object Structure
|
|
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"]
|
|
titleConvo: true
|
|
titleModel: "mistral-tiny"
|
|
summarize: false
|
|
summaryModel: "mistral-tiny"
|
|
forcePrompt: false
|
|
modelDisplayLabel: "Mistral"
|
|
addParams:
|
|
safe_prompt: true
|
|
# 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"]
|
|
```
|
|
|
|
### **name**:
|
|
|
|
> A unique name for the endpoint.
|
|
|
|
- Type: String
|
|
- Example: `name: "Mistral"`
|
|
- **Required**
|
|
- **Note**: Will be used as the "title" in the Endpoints Selector
|
|
|
|
### **apiKey**:
|
|
|
|
> Your API key for the service. Can reference an environment variable, or allow user to provide the value.
|
|
|
|
- Type: String (apiKey | `"user_provided"`)
|
|
- Example: `apiKey: "${MISTRAL_API_KEY}"` | `apiKey: "your_api_key"` | `apiKey: "user_provided"`
|
|
- **Required**
|
|
- **Note**: It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`
|
|
|
|
### **baseURL**:
|
|
|
|
> Base URL for the API. Can reference an environment variable, or allow user to provide the value.
|
|
|
|
- Type: String (baseURL | `"user_provided"`)
|
|
- Example: `baseURL: "https://api.mistral.ai/v1"` | `baseURL: "${MISTRAL_BASE_URL}"` | `baseURL: "user_provided"`
|
|
- **Required**
|
|
- **Note**: It's highly recommended to use the env. variable reference for this field, i.e. `${YOUR_VARIABLE}`
|
|
|
|
### **iconURL**:
|
|
|
|
> The URL to use as the Endpoint Icon.
|
|
|
|
- Type: Boolean
|
|
- Example: `iconURL: https://github.com/danny-avila/LibreChat/raw/main/docs/assets/LibreChat.svg`
|
|
- **Note**: The following are "known endpoints" (case-insensitive), which have icons provided for them. If your endpoint `name` matches the following names, you should omit this field:
|
|
- "Mistral"
|
|
- "OpenRouter"
|
|
|
|
### **models**:
|
|
|
|
> Configuration for models.
|
|
|
|
- **Required**
|
|
- **default**: An array of strings indicating the default models to use. At least one value is required.
|
|
- Type: Array of Strings
|
|
- Example: `default: ["mistral-tiny", "mistral-small", "mistral-medium"]`
|
|
- **Note**: If fetching models fails, these defaults are used as a fallback.
|
|
- **fetch**: When set to `true`, attempts to fetch a list of models from the API.
|
|
- Type: Boolean
|
|
- Example: `fetch: true`
|
|
- **Note**: May cause slowdowns during initial use of the app if the response is delayed. Defaults to `false`.
|
|
- **userIdQuery**: When set to `true`, adds the LibreChat user ID as a query parameter to the API models request.
|
|
- Type: Boolean
|
|
- Example: `userIdQuery: true`
|
|
|
|
### **titleConvo**:
|
|
|
|
> Enables title conversation when set to `true`.
|
|
|
|
- Type: Boolean
|
|
- Example: `titleConvo: true`
|
|
|
|
### **titleMethod**:
|
|
|
|
> Chooses between "completion" or "functions" for title method.
|
|
|
|
- Type: String (`"completion"` | `"functions"`)
|
|
- Example: `titleMethod: "completion"`
|
|
- **Note**: Defaults to "completion" if omitted.
|
|
|
|
### **titleModel**:
|
|
|
|
> Specifies the model to use for titles.
|
|
|
|
- Type: String
|
|
- Example: `titleModel: "mistral-tiny"`
|
|
- **Note**: Defaults to "gpt-3.5-turbo" if omitted. May cause issues if "gpt-3.5-turbo" is not available.
|
|
|
|
### **summarize**:
|
|
|
|
> Enables summarization when set to `true`.
|
|
|
|
- Type: Boolean
|
|
- Example: `summarize: false`
|
|
- **Note**: This feature requires an OpenAI Functions compatible API
|
|
|
|
### **summaryModel**:
|
|
|
|
> Specifies the model to use if summarization is enabled.
|
|
|
|
- Type: String
|
|
- Example: `summaryModel: "mistral-tiny"`
|
|
- **Note**: Defaults to "gpt-3.5-turbo" if omitted. May cause issues if "gpt-3.5-turbo" is not available.
|
|
|
|
### **forcePrompt**:
|
|
|
|
> If `true`, sends a `prompt` parameter instead of `messages`.
|
|
|
|
- Type: Boolean
|
|
- Example: `forcePrompt: false`
|
|
- **Note**: This combines all messages into a single text payload, [following OpenAI format](https://github.com/pvicente/openai-python/blob/main/chatml.md), and
|
|
|
|
uses the `/completions` endpoint of your baseURL rather than `/chat/completions`.
|
|
|
|
### **modelDisplayLabel**:
|
|
|
|
> The label displayed in messages next to the Icon for the current AI model.
|
|
|
|
- Type: String
|
|
- Example: `modelDisplayLabel: "Mistral"`
|
|
- **Note**: The display order is:
|
|
- 1. Custom name set via preset (if available)
|
|
- 2. Label derived from the model name (if applicable)
|
|
- 3. This value, `modelDisplayLabel`, is used if the above are not specified. Defaults to "AI".
|
|
|
|
### **addParams**:
|
|
|
|
> Adds additional parameters to requests.
|
|
|
|
- Type: Object/Dictionary
|
|
- **Description**: Adds/Overrides parameters. Useful for specifying API-specific options.
|
|
- **Example**:
|
|
```yaml
|
|
addParams:
|
|
safe_prompt: true
|
|
```
|
|
|
|
### **dropParams**:
|
|
|
|
> Removes [default parameters](#default-parameters) from requests.
|
|
|
|
- Type: Array/List of Strings
|
|
- **Description**: Excludes specified [default parameters](#default-parameters). Useful for APIs that do not accept or recognize certain parameters.
|
|
- **Example**: `dropParams: ["stop", "user", "frequency_penalty", "presence_penalty"]`
|
|
- **Note**: For a list of default parameters sent with every request, see the ["Default Parameters"](#default-parameters) Section below.
|
|
|
|
### **headers**:
|
|
|
|
> Adds additional headers to requests. Can reference an environment variable
|
|
|
|
- Type: Object/Dictionary
|
|
- **Description**: The `headers` object specifies custom headers for requests. Useful for authentication and setting content types.
|
|
- **Example**:
|
|
- **Note**: Supports dynamic environment variable values, which use the format: `"${VARIABLE_NAME}"`
|
|
```yaml
|
|
headers:
|
|
x-api-key: "${ENVIRONMENT_VARIABLE}"
|
|
Content-Type: "application/json"
|
|
```
|
|
|
|
### Additional Notes
|
|
- Ensure that all URLs and keys are correctly specified to avoid connectivity issues.
|
|
|
|
### Default Parameters
|
|
|
|
Custom endpoints share logic with the OpenAI endpoint, and thus have default parameters tailored to the OpenAI API.
|
|
|
|
```json
|
|
{
|
|
"model": "your-selected-model",
|
|
"temperature": 1,
|
|
"top_p": 1,
|
|
"presence_penalty": 0,
|
|
"frequency_penalty": 0,
|
|
"stop": [
|
|
"||>",
|
|
"\nUser:",
|
|
"<|diff_marker|>",
|
|
],
|
|
"user": "LibreChat_User_ID",
|
|
"stream": true,
|
|
"messages": [
|
|
{
|
|
"role": "user",
|
|
"content": "hi how are you",
|
|
},
|
|
],
|
|
}
|
|
```
|
|
### Breakdown of Default Params
|
|
- `model`: The selected model from list of models.
|
|
- `temperature`: Defaults to `1` if not provided via preset,
|
|
- `top_p`: Defaults to `1` if not provided via preset,
|
|
- `presence_penalty`: Defaults to `0` if not provided via preset,
|
|
- `frequency_penalty`: Defaults to `0` if not provided via preset,
|
|
- `stop`: Sequences where the AI will stop generating further tokens. By default, uses the start token (`||>`), the user label (`\nUser:`), and end token (`<|diff_marker|>`). Up to 4 sequences can be provided to the [OpenAI API](https://platform.openai.com/docs/api-reference/chat/create#chat-create-stop)
|
|
- `user`: A unique identifier representing your end-user, which can help OpenAI to [monitor and detect abuse](https://platform.openai.com/docs/api-reference/chat/create#chat-create-user).
|
|
- `stream`: If set, partial message deltas will be sent, like in ChatGPT. Otherwise, generation will only be available when completed.
|
|
- `messages`: [OpenAI format for messages](https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages); the `name` field is added to messages with `system` and `assistant` roles when a custom name is specified via preset.
|
|
|
|
**Note:** The `max_tokens` field is not sent to use the maximum amount of tokens available, which is default OpenAI API behavior. Some alternate APIs require this field, or it may default to a very low value and your responses may appear cut off; in this case, you should add it to `addParams` field as shown in the [Endpoint Object Structure](#endpoint-object-structure).
|
|
|