+
+)
diff --git a/components/home/Hero.tsx b/components/home/Hero.tsx
new file mode 100644
index 0000000..f90caeb
--- /dev/null
+++ b/components/home/Hero.tsx
@@ -0,0 +1,71 @@
+import Link from 'next/link'
+import styles from './hero.module.css'
+
+export function Hero() {
+ const heroMap = {
+ headlineOne: 'Librechat',
+ headlineTwo: 'Every AI in One Place',
+ headlineThree: 'Built for Everyone',
+ subtitleOne:
+ 'LibreChat is a free, open source AI chat platform. This Web UI offers vast customization, supporting numerous AI providers, services, and integrations. Serves all AI Conversations in one place with a familiar interface, innovative enhancements, for as many users as you need.',
+ // subtitleTwo: '',
+ // subtitleThree: '',
+ // subtitleFour: '',
+ cta: 'Get Started',
+ }
+
+ return (
+
+ For a detailed comparison and FAQ, see our{' '}
+
+ pricing page
+
+ .
+
+ >
+ )}
+
+
+ )
+}
+
+const faqs = [
+ {
+ question: 'What is the LibreChat Admin Panel?',
+ answer:
+ 'The LibreChat Admin Panel is a powerful tool designed to provide administrators with extensive control and management capabilities over their LibreChat instance. It allows you to configure roles, manage users, access advanced analytics, and more.',
+ },
+ {
+ question: 'How can I access the Admin Panel?',
+ answer:
+ 'To access the LibreChat Admin Panel, you will need to subscribe to the paid plan that includes access to this feature. Once subscribed, you will receive credentials and instructions on how to access and utilize the Admin Panel.',
+ },
+ {
+ question: 'What features are available in the Admin Panel?',
+ answer:
+ 'The Admin Panel offers features such as role-based access control, project configurations, user management with real-time data, analytics, integration with external tools, and more. It serves as a comprehensive tool for managing your LibreChat environment efficiently.',
+ },
+ {
+ question: 'Is the Admin Panel included in the free plan?',
+ answer:
+ 'No, the Admin Panel is a premium feature available with paid subscriptions. The free plan of LibreChat includes core functionalities but does not grant access to the advanced capabilities offered by the Admin Panel.',
+ },
+ {
+ question: 'Can I customize the Admin Panel according to my needs?',
+ answer:
+ 'Yes, the Admin Panel allows for customization and configuration based on your specific requirements. You can set up custom roles, configure project settings, integrate with external services, and tailor the panel to suit your workflow.',
+ },
+]
+
+export function PricingFAQ() {
+ return (
+
+ )
+}
diff --git a/components/policies.tsx b/components/policies.tsx
new file mode 100644
index 0000000..6932ffa
--- /dev/null
+++ b/components/policies.tsx
@@ -0,0 +1,130 @@
+import { Link } from 'nextra-theme-docs'
+import { Button } from 'nextra/components'
+
+const PrivacyPolicy = () => {
+ return (
+
+
+
Privacy Policy for LibreChat
+
+
+ {`Effective Date: February 18, 2024
+
+This Privacy Policy outlines the types of personal information that is received and collected by LibreChat`}{' '}
+ https://librechat.ai
+ {` and how it is used.
+
+1. Information Collection
+
+We collect personal information when you interact with our site, including your name, email address, and payment information. This information is used for order processing and to place you on an email waitlist for feature updates.
+
+In addition to personal information, we use web cookies to enhance your experience on our site by understanding how our site is used.
+
+2. Use of Information
+
+The information we collect is used solely for the purposes specified: order processing and to inform you of feature updates. We value your privacy and do not share your personal information with third parties.
+
+3. Children's Privacy
+
+LibreChat is committed to protecting the privacy of children. We do not knowingly collect any personal information from children under the age of 13.
+
+4. Updates to This Policy
+
+We may update this privacy policy from time to time. When we do, we will notify you by email. We encourage you to periodically review this page for the latest information on our privacy practices.
+
+5. Contact Us
+
+If you have any questions about this Privacy Policy, please contact us at`}{' '}
+ contact@librechat.ai
+ {`.
+
+Your use of LibreChat indicates your agreement to this Privacy Policy.`}
+
+ {`Effective Date: February 18, 2024
+
+Welcome to LibreChat, the informational website for the open-source AI chat platform, available at `}{' '}
+ https://librechat.ai
+ {`. These Terms of Service ("Terms") govern your use of our website and the services we offer. By accessing or using the Website, you agree to be bound by these Terms and our Privacy Policy, accessible at `}{' '}
+ https://librechat.ai//privacy
+ {`.
+
+1. Ownership
+Upon purchasing a package from LibreChat, you are granted the right to download and use the code for accessing an admin panel for LibreChat. While you own the downloaded code, you are expressly prohibited from reselling, redistributing, or otherwise transferring the code to third parties without explicit permission from LibreChat.
+
+2. User Data
+We collect personal data, such as your name, email address, and payment information, as described in our Privacy Policy. This information is collected to provide and improve our services, process transactions, and communicate with you.
+
+3. Non-Personal Data Collection
+The Website uses cookies to enhance user experience, analyze site usage, and facilitate certain functionalities. By using the Website, you consent to the use of cookies in accordance with our Privacy Policy.
+
+4. Use of the Website
+You agree to use the Website only for lawful purposes and in a manner that does not infringe the rights of, restrict, or inhibit anyone else's use and enjoyment of the Website. Prohibited behavior includes harassing or causing distress or inconvenience to any person, transmitting obscene or offensive content, or disrupting the normal flow of dialogue within the Website.
+
+5. Governing Law
+These Terms shall be governed by and construed in accordance with the laws of the United States, without giving effect to any principles of conflicts of law.
+
+6. Changes to the Terms
+We reserve the right to modify these Terms at any time. We will notify users of any changes by email. Your continued use of the Website after such changes have been notified will constitute your consent to such changes.
+
+7. Contact Information
+If you have any questions about these Terms, please contact us at `}{' '}
+ contact@librechat.ai
+ {`.
+
+By using the Website, you acknowledge that you have read these Terms of Service and agree to be bound by them.`}
+
+ {`Effective Date: February 18, 2024
+
+1. What Are Cookies
+As is common practice with almost all professional websites, this site uses cookies, which are tiny files that are downloaded to your computer, to improve your experience. This page describes what information they gather, how we use it, and why we sometimes need to store these cookies. We will also share how you can prevent these cookies from being stored; however, this may downgrade or 'break' certain elements of the site's functionality.
+
+2. How We Use Cookies
+We use cookies for various reasons detailed below. Unfortunately, in most cases, there are no industry standard options for disabling cookies without completely disabling the functionality and features they add to this site. It is recommended that you leave on all cookies if you are not sure whether you need them or not, in case they are used to provide a service that you use.
+
+3. Disabling Cookies
+You can prevent the setting of cookies by adjusting the settings on your browser (see your browser Help for how to do this). Be aware that disabling cookies will affect the functionality of this and many other websites that you visit. Disabling cookies will usually result in also disabling certain functionality and features of this site. Therefore, it is recommended that you do not disable cookies.
+
+4. The Cookies We Set
+ - Site preferences cookies: In order to provide you with a great experience on this site, we provide the functionality to set your preferences for how this site runs when you use it. In order to remember your preferences, we need to set cookies so that this information can be called whenever you interact with a page that is affected by your preferences.
+ - Third-party cookies: In some special cases, we also use cookies provided by trusted third parties. The following section details which third-party cookies you might encounter through this site.
+
+ 5. Contact Information
+If you have any questions about these policies, please contact us at `}{' '}
+ contact@librechat.ai
+ {`.
+`}
+
+
+# 404: Page Not Found
+
+# 🤷
+
+[Submit an issue about broken links ↗](https://github.com/fuegovic/website-lc/issues/new?title=Found%20broken%20%60%2Fdocs%60%20link.%20Please%20fix!&labels=bug)
+
+
diff --git a/pages/README.md b/pages/README.md
new file mode 100644
index 0000000..5c6f91b
--- /dev/null
+++ b/pages/README.md
@@ -0,0 +1,26 @@
+### Author profiles
+
+- Profiles located in `pages\authors`
+ - create a mdx file named with your authorid
+ - look at the other profiles for examples
+- Authors Profile pics in: `public\images\people`
+- Supported socials for authors (react-social-icons):
+ 
+
+### Changelogs/Blog Headers example
+
+⚠️ Title, Screenshot and author is automatically populated in the changelog/blog
+
+```markdown
+---
+date: 2024-04-01
+title: LibreChat v0.7.0
+description: The v0.7.0 release of LibreChat
+authorid: danny
+ogImage: /images/changelog/2024-04-01-v0.7.0.png
+---
+
+import { ChangelogHeader } from "@/components/changelog/ChangelogHeader";
+
+
+```
\ No newline at end of file
diff --git a/pages/_app.tsx b/pages/_app.tsx
new file mode 100644
index 0000000..002dbd2
--- /dev/null
+++ b/pages/_app.tsx
@@ -0,0 +1,56 @@
+import '../style.css'
+import 'vidstack/styles/base.css'
+import '../src/overrides.css'
+import Script from 'next/script'
+import { useEffect } from 'react'
+import { useRouter } from 'next/router'
+import posthog from 'posthog-js'
+import { PostHogProvider } from 'posthog-js/react'
+import { CrispWidget } from '@/components/supportChat'
+import { Hubspot, hsPageView } from '@/components/analytics/hubspot'
+import { GeistSans } from 'geist/font/sans'
+import { Analytics } from '@vercel/analytics/react'
+import { SpeedInsights } from '@vercel/speed-insights/next'
+// import { GeistMono } from "geist/font/mono";
+
+export default function App({ Component, pageProps }) {
+ const router = useRouter()
+ useEffect(() => {
+ // Initialize PostHog
+ if (typeof window !== 'undefined') {
+ posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
+ api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://eu.posthog.com',
+ // Enable debug mode in development
+ loaded: (posthog) => {
+ if (process.env.NODE_ENV === 'development') posthog.debug()
+ },
+ })
+ }
+ // Track page views
+ const handleRouteChange = (path) => {
+ posthog.capture('$pageview')
+ hsPageView(path)
+ }
+ router.events.on('routeChangeComplete', handleRouteChange)
+ return () => {
+ router.events.off('routeChangeComplete', handleRouteChange)
+ }
+ }, [])
+ return (
+ //
+
+**LibreChat** is a free, open-source AI chat platform that empowers you to harness the capabilities of cutting-edge language models from multiple providers in a unified interface. With its vast customization options, innovative enhancements, and seamless integration of AI services, LibreChat offers an unparalleled conversational experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## What is LibreChat?
+
+LibreChat is an enhanced, open-source ChatGPT clone that brings together the latest advancements in AI technology. It serves as a centralized hub for all your AI conversations, providing a familiar, user-friendly interface enriched with advanced features and customization capabilities.
+
+## Why LibreChat?
+
+### 🔓 Open-Source and Free
+
+LibreChat is a completely open-source project, allowing you to freely use, modify, and distribute the software without any restrictions or paid subscriptions.
+
+### 🤖 Multi-Provider AI Support
+
+LibreChat supports a wide range of AI providers, including OpenAI, Azure, Anthropic, Google, and more. You can seamlessly switch between different models and leverage their unique capabilities.
+
+### 💻 Customizable and Extensible
+
+With its modular design and extensive customization options, LibreChat can be tailored to meet your specific needs. You can create and share custom presets, integrate plugins, and even contribute to the project's development.
+
+### 🌐 Multilingual Support
+
+LibreChat's user interface is available in multiple languages, ensuring accessibility and ease of use for a global audience.
+
+## Design Principles
+
+LibreChat adheres to the following key design principles:
+
+1. **User-Friendly Interface**: Inspired by the familiar ChatGPT UI, LibreChat offers a clean and intuitive layout, making it easy for users to engage with AI assistants.
+
+2. **Multimodal Conversations**: LibreChat supports multimodal conversations, allowing you to upload and analyze images, chat with files, and leverage advanced agent capabilities powered by AI models like GPT-4 Claude and Gemini Vision.
+
+3. **Extensibility**: With its plugin architecture and open-source nature, LibreChat encourages the development of custom extensions and integrations, enabling users to tailor the platform to their specific needs.
+
+4. **Privacy and Security**: LibreChat prioritizes privacy and security by offering secure authentication, moderation tools, and the ability to self-host the application.
+
+## Key Features
+
+- 🖥️ UI matching ChatGPT, including Dark mode, Streaming, and latest updates
+- 💬 Multimodal Chat: Upload and analyze images, chat with files, and leverage advanced agents with tools and API actions
+- 🌎 Multilingual UI: Support for multiple languages
+- 🤖 AI model selection: OpenAI, Azure, Anthropic, Google, and more
+- 💾 Create, save, and share custom presets
+- 🔄 Edit, resubmit, and continue messages with conversation branching
+- 📤 Export conversations in various formats (screenshots, markdown, text, JSON)
+- 🔍 Search all messages and conversations
+- 🔌 Plugin support for extended functionality (web access, image generation, etc.)
+- 👥 Multi-user support with secure authentication and moderation tools
+- ⚙️ Flexible deployment options (proxy, reverse proxy, Docker, and more)
+- 📖 Completely open-source and community-driven development
+
+## License
+
+Released under the MIT License.
+
+## Contact us
+
+
+ } />
+ } />
+ } />
+
+
+## 💖 This project exists in its current state thanks to all the people who contribute
+
+
+
+
diff --git a/pages/api/subscribe.ts b/pages/api/subscribe.ts
new file mode 100644
index 0000000..77f9dd0
--- /dev/null
+++ b/pages/api/subscribe.ts
@@ -0,0 +1,35 @@
+import validator from 'validator'
+import dbConnect from '@/utils/dbConnect'
+import Subscriber from '@/utils/Subscriber'
+
+export default async function handler(req, res) {
+ const { method, body } = req
+
+ if (method !== 'POST') {
+ return res.status(405).json({ message: 'Method Not Allowed' })
+ }
+
+ const { email } = body
+
+ if (!email || !validator.isEmail(email)) {
+ return res.status(422).json({ message: 'Valid email is required' })
+ }
+
+ try {
+ await dbConnect()
+
+ const existingSubscriber = await Subscriber.findOne({ email })
+
+ if (existingSubscriber) {
+ return res.status(409).json({ message: 'Email already subscribed' })
+ }
+
+ const newSubscriber = new Subscriber({ email })
+ await newSubscriber.save()
+
+ return res.status(201).json({ message: 'Subscription successful' })
+ } catch (error) {
+ console.error('Error:', error)
+ return res.status(500).json({ message: 'Subscription failed' })
+ }
+}
diff --git a/pages/api/unsubscribe.ts b/pages/api/unsubscribe.ts
new file mode 100644
index 0000000..73c14ba
--- /dev/null
+++ b/pages/api/unsubscribe.ts
@@ -0,0 +1,37 @@
+import dbConnect from '@/utils/dbConnect'
+import Subscriber from '@/utils/Subscriber'
+import validator from 'validator'
+
+export default async function handler(req, res) {
+ if (req.method === 'POST') {
+ const { email } = req.body
+
+ if (!validator.isEmail(email)) {
+ return res.status(400).json({ message: 'Invalid email format' })
+ }
+
+ try {
+ await dbConnect()
+ } catch (error) {
+ return res.status(500).json({ message: 'Database connection failed' })
+ }
+
+ try {
+ const updatedSubscriber = await Subscriber.findOneAndUpdate(
+ { email },
+ { status: 'unsubscribed' },
+ { new: true },
+ )
+
+ if (updatedSubscriber) {
+ res.status(200).json({ message: 'Unsubscription successful' })
+ } else {
+ res.status(404).json({ message: 'Subscriber not found' })
+ }
+ } catch (error) {
+ res.status(500).json({ message: 'Unsubscription failed' })
+ }
+ } else {
+ res.status(405).json({ message: 'Method Not Allowed' })
+ }
+}
diff --git a/pages/authors/_meta.ts b/pages/authors/_meta.ts
new file mode 100644
index 0000000..f008cec
--- /dev/null
+++ b/pages/authors/_meta.ts
@@ -0,0 +1,13 @@
+export default {
+ '*': {
+ display: 'hidden',
+ theme: {
+ toc: false,
+ sidebar: false,
+ pagination: true,
+ layout: 'default',
+ breadcrumb: false,
+ timestamp: false,
+ },
+ },
+}
diff --git a/pages/authors/anon.mdx b/pages/authors/anon.mdx
new file mode 100644
index 0000000..2b30755
--- /dev/null
+++ b/pages/authors/anon.mdx
@@ -0,0 +1,14 @@
+---
+title: Anonymous
+authorid: anon
+subtitle: (⌐■_■)
+name: Anon
+bio: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla litora ridiculus magna et etiam mi. Dolor etiam id elit morbi ipsum mauris. Non dapibus urna platea elementum fusce vulputate.
+ogImage: '/images/people/anon.png'
+socials:
+ email: mailto:contact@librechat.ai
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
diff --git a/pages/authors/berry.mdx b/pages/authors/berry.mdx
new file mode 100644
index 0000000..689cc7a
--- /dev/null
+++ b/pages/authors/berry.mdx
@@ -0,0 +1,17 @@
+---
+title: Berry
+authorid: berry
+name: 'Berry'
+subtitle: Collaborator for LibreChat
+bio: '// TODO: Become a software engineer !self_taught++; // Debugging life, coding solutions'
+ogImage: '/images/people/berry.png'
+socials:
+ GitHub: https://github.com/Berry-13
+ LinkedIn: https://www.linkedin.com/in/marco-beretta-berry/
+ X: https://x.com/berry13000
+ email: mailto:berry@librechat.ai
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
diff --git a/pages/authors/danny.mdx b/pages/authors/danny.mdx
new file mode 100644
index 0000000..e64a817
--- /dev/null
+++ b/pages/authors/danny.mdx
@@ -0,0 +1,17 @@
+---
+title: Danny
+authorid: danny
+subtitle: Founder and Maintainer of LibreChat
+name: 'Danny Avila'
+bio: Danny Avila is a software engineer passionate about AI and web development. His expertise in automating processes and data analysis has been applied across many roles, from operations to accounting. Danny's work demonstrates a commitment to meaningful technology and community-driven innovation.
+ogImage: '/images/people/danny.webp'
+socials:
+ GitHub: https://github.com/danny-avila
+ LinkedIn: https://www.linkedin.com/in/danny-avila/
+ X: https://x.com/lgtm_hbu
+ email: mailto:danny@librechat.ai
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
diff --git a/pages/authors/fuegovic.mdx b/pages/authors/fuegovic.mdx
new file mode 100644
index 0000000..4df5921
--- /dev/null
+++ b/pages/authors/fuegovic.mdx
@@ -0,0 +1,17 @@
+---
+title: Fuegovic
+authorid: fuegovic
+subtitle: Collaborator for LibreChat
+name: 'Fuegovic'
+bio: Fuegovic is a versatile artist known for creating captivating music across genres and actively contributing to open-source projects on GitHub.
+ogImage: '/images/people/fuegovic.png'
+socials:
+ GitHub: https://github.com/fuegovic
+ Spotify: https://open.spotify.com/artist/3ZfaxdODbE1NrfQYsGO92R
+ LinkedIn: https://www.linkedin.com/in/fuegovic/
+ email: mailto:fuegovic@librechat.ai
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
diff --git a/pages/authors/index.mdx b/pages/authors/index.mdx
new file mode 100644
index 0000000..31a8c1a
--- /dev/null
+++ b/pages/authors/index.mdx
@@ -0,0 +1,15 @@
+---
+title: Our Authors
+description: Get to know the talented writers behind our blog!
+---
+
+import AuthorPage from '@/components/Author/AuthorPage'
+
+
+
+import { Blog } from '@/components/CardIcons/Blog'
+
+
+
+
+
diff --git a/pages/authors/librechat.mdx b/pages/authors/librechat.mdx
new file mode 100644
index 0000000..53911a2
--- /dev/null
+++ b/pages/authors/librechat.mdx
@@ -0,0 +1,20 @@
+---
+title: LibreChat
+authorid: librechat
+subtitle: Every AI, For Everyone
+name: LibreChat
+bio: LibreChat is a free, open-source AI chat platform that empowers you to harness the capabilities of cutting-edge language models from multiple providers in a unified interface.
+ogImage: '/images/people/librechat.png'
+socials:
+ GitHub: https://github.librechat.ai
+ LinkedIn: https://linkedin.librechat.ai/
+ X: https://x.com/LibreChatAI
+ Discord: https://discord.librechat.ai
+ YouTube: https://www.youtube.com/@LibreChat
+ Status Page: https://status.librechat.ai
+ email: mailto:contact@librechat.ai
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
diff --git a/pages/blog.mdx b/pages/blog.mdx
new file mode 100644
index 0000000..9ef953d
--- /dev/null
+++ b/pages/blog.mdx
@@ -0,0 +1,15 @@
+---
+title: LibreChat's Blog
+description: The latest articles from LibreChat.
+---
+
+import { BlogIndex } from '@/components/blog/BlogIndex'
+import Link from 'next/link'
+
+
+
+
LibreChat's Blog
+
+
+
+
diff --git a/pages/blog/2023-08-18_podman.mdx b/pages/blog/2023-08-18_podman.mdx
new file mode 100644
index 0000000..d5f7808
--- /dev/null
+++ b/pages/blog/2023-08-18_podman.mdx
@@ -0,0 +1,277 @@
+---
+title: Podman Install
+date: 2023/08/18
+description: If you don't like docker compose, don't want a bare-metal installation, but still want to leverage the benefits from the isolation and modularity of containers...
+tags:
+ - install
+ - podman
+ - guide
+ogImage: /images/blog/2023-08-18_podman.png
+authorid: anon
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Podman Installation Guide
+
+If you don't like docker compose, don't want a bare-metal installation, but still want to leverage the benefits from the isolation and modularity of containers - this is the guide you should use.
+
+> Likewise, If you are actively developing LibreChat, aren't using the service productively (i.e production environments), you should avoid this guide and look to something easier to work with such as docker compose.
+
+**Important:** `docker` and `podman` commands are for the most part, interoperable and interchangeable. The code instructions below will use (and heavily favor) `podman`.
+
+## Creating the base image
+
+Since LibreChat is very active in development, it's recommended for now to build
+the image locally for the container you plan on using. Thankfully this is easy enough to do.
+
+In your target directory, run the following:
+
+```bash filename="Clone the LibreChat repository"
+git clone https://github.com/danny-avila/LibreChat
+```
+
+This will add a directory, `LibreChat` into your local environment.
+
+Without entering the `LibreChat` directory, add a script `./image.sh` with the following:
+
+> If you don't want to run this as a script, you can run the container command rather images
+
+```bash filename="Build the base container image for LibreChat"
+podman build --tag "librechat:local" --file ./LibreChat/Dockerfile
+```
+
+> Note: the downside of running a base container that has a live root is that image revisions need to be done manually. The easiest way is to remove and recreate the image when the container is no longer. If that's not possible for you, manually updating the image to increment versions can be done manually. Simply amend $image with the version you're building.
+
+> We'll document how to go about the update process more effectively further on. You wont need to remove your existing containers, or lose any data when updating.
+
+## Setting up the env file
+
+Execute the following command to create a env file solely for LibreChat containers:
+
+```bash filename="Copy env.example file to .env"
+cp ./LibreChat/.env.example .env
+```
+
+This will add the env file to the top level directory that we will create the containers, allowing us to pass it easily as via the `--env-file` command argument.
+
+Follow [this guide](/docs/configuration/pre_configured_ai) to populate the containers with the correct env values for various apis. There are other env values of interest that might be worth changing, documented within the env itself. Afterwords, edit the following lines in the `.env` file.
+
+```sh filename=".env"
+HOST=0.0.0.0
+MONGO_URI=mongodb://librechat-mongodb:27017/LibreChat
+MEILI_HOST=http://librechat-meilisearch:7700
+MEILI_NO_ANALYTICS=true
+```
+
+These values will be uses by some of our containers to correctly use container DNS, using the LibreChat network.
+
+## Creating a network for LibreChat
+
+If you're going about this the _manual_ way, it's likely safe to assume you're running more than a few different containers and services on your machine. One of the nice features offered by most container engines is that you don't need to have every single container exposed on the host network. This has the added benefit of not exposing your data and dependant services to other containers on your host.
+
+```bash filename="Create a network named librechat using podman"
+podman network create librechat
+```
+
+We will be using this network when creating our containers.
+
+## Creating dependant containers
+
+LibreChat currently uses mongoDB and meilisearch, so we'll also be creating those containers.
+
+## Mongodb
+
+Install and boot the mongodb container with the following command:
+
+```bash filename="Start mongodb container with network and volume settings"
+podman run \
+ --name="librechat-mongodb" \
+ --network=librechat \
+ -v "librechat-mongodb-data:/data/db" \
+ --detach \
+ docker.io/mongo \
+ mongod --noauth
+```
+
+## Meilisearch
+
+Install and boot the melisearch container with the following command:
+
+```bash filename="Install and boot the melisearch container"
+podman run \
+ --name="librechat-meilisearch" \
+ --network=librechat \
+ --env-file="./.env" \
+ -v "librechat-meilisearch-data:/meili_data" \
+ --detach \
+ docker.io/getmeili/meilisearch:v1.0;
+```
+
+## Starting LibreChat
+
+```bash filename="Start LibreChat"
+podman run \
+ --name="librechat" \
+ --network=librechat \
+ --env-file="./.env" \
+ -p 3080:3080 \
+ --detach \
+ librechat:local;
+```
+
+If you're using LibreChat behind another load balancer, you can omit the `-p` declaration, you can also attach the container to the same network by adding an additional network argument:
+
+```bash filename="Attach LibreChat to specific network"
+--network=librechat \
+```
+
+```bash filename="Attach to load balancer network"
+--network=mybalancernetwork \
+```
+
+As described by the original `-p` command argument, it would be possible to access librechat as `librechat:3080`, `mybalancernetwork` would be replaced with whatever network your balancer exists.
+
+## Auto-starting containers on boot (podman + Linux only)
+
+Podman has a declarative way to ensure that pod starts up automatically on system boot using systemd.
+
+To use this method you need to run the following commands:
+
+First, let's stop any running containers related to LibreChat:
+
+```bash filename="Stop LibreChat container"
+podman stop librechat
+```
+
+```bash filename="Stop LibreChat MongoDB container"
+podman stop librechat-mongodb
+```
+
+```bash filename="Stop LibreChat MeiliSearch container"
+podman stop librechat-meilisearch
+```
+
+Next, we'll update our user's systemd configuration to enable lingering. In systemd-based systems, when a user logs in and out, user-based services typically terminate themselves to save CPU, but since we're using rootless containers (which is podman's preferred way of running), we need to indicate that our user has permission to have user-locked services running after their session ends.
+
+```bash filename="Enable linger for the current user using loginctl"
+loginctl enable-linger $(whoami)
+```
+
+Next, we'll create a script somewhere in our `home` directory using a text editor. Let's call the script `./install.sh`
+
+```bash filename="./install.sh"
+#!/bin/bash
+# Install podman container as systemd container
+set -e
+name="$1";
+podman generate systemd --name "$name" > ~/.config/systemd/user/container-$name.service
+systemctl --user enable --now container-$name;
+```
+
+After saving, we'll update the script to be executable:
+
+```bash filename="Make installation script executable"
+chmod +x ./install.sh
+```
+
+Assuming we aren't running those LibreChat containers from before, we can enable on-boot services for each of them using the following:
+
+```bash filename="Install Librechat MongoDB"
+./install.sh librechat-mongodb
+```
+
+```bash filename="Install Librechat Meilisearch"
+./install.sh librechat-meilisearch
+```
+
+```bash filename="Install Librechat Application"
+./install.sh librechat
+```
+
+The containers (assuming everything was done to par), will be now running using the systemd layer instead of the podman layer. This means services will load on boot, but also means managing these containers is a little more manual and requires interacting with systemd instead of podman directly.
+
+For instance, instead of `podman stop {name}`, you would instead do `systemctl --user stop container-{name}` to perform maintenance (such as updates or backups). Likewise, if you need to start the service again you simply can run `systemctl --user start container-{name}`. If wanting to use auto-boot functionality, interacting with managed containers using podman can cause issues with systemd's fault tolerance as it can't correctly indicate the state of a container when interfered with.
+
+## Backing up volume containers (podman only)
+
+The podman containers above are using named volumes for persistent data, which means we can't simply copy files from one place to another. This has benefits though. In podman, we can simply backup the volume into a tape archive format (tarball). To do this, run the following commands:
+
+> It's recommended you stop the containers before running these commands.
+
+```bash filename="Backup Librechat Meilisearch Data"
+podman volume export librechat-meilisearch-data --output "librechat-meilisearch-backup-$(date +"%d-%m-%Y").tar"
+```
+
+```bash filename="Backup Librechat MongoDB Data"
+podman volume export librechat-mongodb-data --output "librechat-mongodb-backup-$(date +"%d-%m-%Y").tar"
+```
+
+These will leave archive files that you can do what you wish with, including reverting volumes to a previous state if needed. Refer to the **[official podman documentation](https://docs.podman.io/en/latest/markdown/podman-volume-import.1.html)** for how to do this.
+
+## Updating LibreChat
+
+LibreChat is still under development, so depending on published images isn't a huge viability at the moment. Instead, it's easier to update using git. Data persistence in librechat is managed outside of the main container, so it's rather simple to do an in-place update.
+
+In the parent directory containing the LibreChat repo:
+
+```bash filename="Update Git Repo"
+(cd LibreChat && git pull)
+```
+
+```bash filename="Stop Systemd Service"
+systemctl --user stop container-librechat
+```
+
+```bash filename="Remove Librechat Container"
+podman rm -f librechat
+```
+
+```bash filename="Destroy Local Image"
+podman rmi -f librechat:local
+```
+
+```bash filename="Rebuild Librechat Image"
+podman build --tag "librechat:local" --file ./LibreChat/Dockerfile
+```
+
+```bash filename="Recreate Liberchat Container"
+podman run --name="librechat" --network=librechat --env-file="./.env" -p 3080:3080 --detach librechat:local
+```
+
+```bash filename="Restart Systemd Service After Stopping Container"
+podman stop librechat && systemctl --user start container-librechat
+```
+
+---
+
+## Integrating the Configuration File in Podman Setup
+
+When using Podman for setting up LibreChat, you can also integrate the [`librechat.yaml` configuration file](/docs/configuration/librechat_yaml).
+
+This file allows you to define specific settings and AI endpoints, such as Mistral AI, tailoring the application to your needs.
+
+After creating your `.env` file as detailed in the previous steps, follow these instructions to integrate the `librechat.yaml` configuration:
+
+1. Place your `librechat.yaml` file in your project's root directory.
+2. Modify the Podman run command for the LibreChat container to include a volume argument that maps the `librechat.yaml` file inside the container. This can be done by adding the following line to your Podman run command:
+
+ ```bash filename="Specify Docker Volume Mapping"
+ -v "./librechat.yaml:/app/librechat.yaml"
+ ```
+
+For example, the modified Podman run command for starting LibreChat will look like this:
+
+It seems like there was a misunderstanding regarding your request as I provided the split commands earlier. To make it into one command, I would combine all the elements into a single command block:
+
+```bash filename="Run Docker Container with Specific Configuration"
+docker run --name="librechat" --network=librechat --env-file="./.env" -p 3080:3080 --detach librechat:local
+```
+
+By mapping the `librechat.yaml` file into the container, Podman ensures that your custom configurations are applied to LibreChat, enabling a tailored AI experience.
+
+Ensure that the `librechat.yaml` file is correctly formatted and contains valid settings.
+
+Any errors in this file might affect the functionality of LibreChat. For more information on configuring `librechat.yaml`, refer to the [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml).
diff --git a/pages/blog/2023-10-29_basic_auth.mdx b/pages/blog/2023-10-29_basic_auth.mdx
new file mode 100644
index 0000000..14c4a82
--- /dev/null
+++ b/pages/blog/2023-10-29_basic_auth.mdx
@@ -0,0 +1,79 @@
+---
+title: Reverse Proxy with Basic Authentication
+date: 2023/10/29
+description: Learn how to configure your server to enable Basic Auth while disabling it for the /api/ endpoint, ensuring LibreChat's own auth system can operate smoothly.
+tags:
+ - ReverseProxy
+ - BasicAuth
+ogImage: /images/blog/2023-10-29_basic_auth.png
+authorid: anon
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Using LibreChat behind a reverse proxy with Basic Authentication
+
+### Basic Authentication (Basic Auth)
+
+Basic Authentication is a simple authentication scheme built into the HTTP protocol. When a client sends a request to a server, the server can respond with a `401 Unauthorized` status code, prompting the client to provide a username and password. This username and password are then sent with subsequent requests in the HTTP header, encoded in Base64 format.
+
+For example, if the username is `Aladdin` and the password is `open sesame`, the client sends:
+
+```
+Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
+```
+
+Where `QWxhZGRpbjpvcGVuIHNlc2FtZQ==` is the Base64 encoding of `Aladdin:open sesame`.
+
+**Note**: Basic Auth is not considered very secure on its own because the credentials are sent in easily decodable Base64 format. It should always be used in conjunction with HTTPS to encrypt the credentials during transmission.
+
+### Reverse Proxy
+
+A reverse proxy is a server that sits between client devices and a web server, forwarding client requests to the web server and returning the server's responses back to the clients. This is useful for load balancing, caching, and, in this context, adding an additional layer of security or authentication.
+
+### The Issue with LibreChat and Basic Auth
+
+If LibreChat is behind a webserver acting as a reverse proxy with Basic Auth (a common scenario for casual users), LibreChat will not function properly without some extra configuration. You will connect to LibreChat, be prompted to enter Basic Auth credentials, enter your username/password, LibreChat will load, but then you will not get a response from the AI services.
+
+The reason is that LibreChat uses Bearer authentication when calling the backend API at domain.com/api. Because those calls will use Bearer rather than Basic auth, your webserver will view this as unauthenticated connection attempt and return 401.
+
+The solution is to enable Basic Auth, but disable it specifically for the /api/ endpoint. (it's safe because the API calls still require an authenticated user)
+
+You will therefore need to create a new rule that disables Basic Auth for /api/. This rule must be higher priority than the rule activating Basic Auth.
+
+### Nginx Configuration
+
+For example, for nginx, you might do:
+
+```yaml filename="nginx.conf"
+#https://librechat.domain.com
+server {
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ server_name librechat.*;
+ include /config/nginx/ssl.conf;
+
+ #all connections to librechat.domain.com require basic_auth
+ location / {
+ auth_basic "Access Restricted";
+ auth_basic_user_file /config/nginx/.htpasswd;
+ include /config/nginx/proxy_params.conf;
+ proxy_pass http://127.0.0.1:3080;
+ }
+
+ #...except for /api/, which will use LibreChat's own auth system
+ location ~ ^/api/ {
+ auth_basic off;
+ include /config/nginx/proxy_params.conf;
+ proxy_pass http://127.0.0.1:3080;
+ }
+}
+```
+
+The provided Nginx configuration sets up a server block for `librechat.domain.com`:
+
+1. **Basic Auth for All Requests**: The `location /` block sets up Basic Auth for all requests to `librechat.domain.com`. The `auth_basic` directive activates Basic Auth, and the `auth_basic_user_file` directive points to the file containing valid usernames and passwords.
+
+2. **Exception for `/api/` Endpoint**: The `location ~ ^/api/` block matches any URL path starting with `/api/`. For these requests, Basic Auth is turned off using `auth_basic off;`. This ensures that LibreChat's own authentication system can operate without interference.
\ No newline at end of file
diff --git a/pages/blog/2023-11-30_litellm.mdx b/pages/blog/2023-11-30_litellm.mdx
new file mode 100644
index 0000000..d1753c7
--- /dev/null
+++ b/pages/blog/2023-11-30_litellm.mdx
@@ -0,0 +1,411 @@
+---
+title: Using LibreChat with LiteLLM Proxy
+date: 2023/11/30
+description: LiteLLM is a proxy server that allows LibreChat to access and load balance across over 100 large language models (LLMs) from various providers.
+tags:
+ - litellm
+ - proxy
+ - llm
+ogImage: /images/blog/2023-11-30_litellm.png
+authorid: anon
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Using LibreChat with LiteLLM Proxy
+Use **[LiteLLM Proxy](https://docs.litellm.ai/docs/simple_proxy)** for:
+
+* Calling 100+ LLMs Huggingface/Bedrock/TogetherAI/etc. in the OpenAI ChatCompletions & Completions format
+* Load balancing - between Multiple Models + Deployments of the same model LiteLLM proxy can handle 1k+ requests/second during load tests
+* Authentication & Spend Tracking Virtual Keys
+
+## Start LiteLLM Proxy Server
+
+## 1. Uncomment desired sections in docker-compose.override.yml
+The override file contains sections for the below LiteLLM features
+
+Minimum working `docker-compose.override.yml` Example:
+
+```yaml filename="docker-compose.override.yml"
+
+ api:
+ volumes:
+ - type: bind
+ source: ./librechat.yaml
+ target: /app/librechat.yaml
+
+
+litellm:
+ image: ghcr.io/berriai/litellm:main-latest
+ volumes:
+ - ./litellm/litellm-config.yaml:/app/config.yaml
+ # NOTE: For Google - required auth "GOOGLE_APPLICATION_CREDENTIALS" envronment and volume mount
+ # This also means you need to add the `application_default_credentaials.json` file within ~/litellm
+ - ./litellm/application_default_credentials.json:/app/application_default_credentials.json
+ ports:
+ - "4000:8000"
+ command: [ "--config", "/app/config.yaml", "--port", "8000", "--num_workers", "8" ]
+ For Google - see above about required auth "GOOGLE_APPLICATION_CREDENTIALS" envronment and volume mount
+ environment:
+ GOOGLE_APPLICATION_CREDENTIALS: /app/application_default_credentials.json
+```
+
+### Caching with Redis
+Litellm supports in-memory, redis, and s3 caching. Note: Caching currently only works with exact matching.
+
+### Performance Monitoring with Langfuse
+Litellm supports various logging and observability options. The settings below will enable Langfuse which will provide a cache_hit tag showing which conversations used cache.
+
+## 2. Create a Config for LiteLLM proxy
+LiteLLM requires a configuration file in addition to the override file. Within LibreChat, this will be `litellm/litellm-config.yml`. The file
+below has the options to enable llm proxy to various providers, load balancing, Redis caching, and Langfuse monitoring. Review documentation for other configuration options.
+More information on LiteLLM configurations here: **[docs.litellm.ai/docs/simple_proxy](https://docs.litellm.ai/docs/simple_proxy)**
+
+### Working Example of incorporating OpenAI, Azure OpenAI, AWS Bedrock, and GCP
+
+Please note the `...` being a secret or a value you should not share (API key, custom tenant endpoint, etc)
+You can potentially use env variables for these too, ex: `api_key: "os.environ/AZURE_API_KEY" # does os.getenv("AZURE_API_KEY")`
+
+
+
+```yaml filename="litellm-config.yml"
+model_list:
+ # https://litellm.vercel.app/docs/proxy/quick_start
+
+ # Anthropic
+ - model_name: claude-3-haiku
+ litellm_params:
+ model: bedrock/anthropic.claude-3-haiku-20240307-v1:0
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: claude-3-sonnet
+ litellm_params:
+ model: bedrock/anthropic.claude-3-sonnet-20240229-v1:0
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: claude-3-opus
+ litellm_params:
+ model: bedrock/anthropic.claude-3-opus-20240229-v1:0
+ aws_region_name: us-west-2
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: claude-v2
+ litellm_params:
+ model: bedrock/anthropic.claude-v2:1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: claude-instant
+ litellm_params:
+ model: bedrock/anthropic.claude-instant-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # Llama
+ - model_name: llama2-13b
+ litellm_params:
+ model: bedrock/meta.llama2-13b-chat-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: llama2-70b
+ litellm_params:
+ model: bedrock/meta.llama2-70b-chat-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: llama3-8b
+ litellm_params:
+ model: bedrock/meta.llama3-8b-instruct-v1:0
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: llama3-70b
+ litellm_params:
+ model: bedrock/meta.llama3-70b-instruct-v1:0
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # Mistral
+ - model_name: mistral-7b-instruct
+ litellm_params:
+ model: bedrock/mistral.mistral-7b-instruct-v0:2
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: mixtral-8x7b-instruct
+ litellm_params:
+ model: bedrock/mistral.mixtral-8x7b-instruct-v0:1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: mixtral-large
+ litellm_params:
+ model: bedrock/mistral.mistral-large-2402-v1:0
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # Cohere
+ - model_name: cohere-command-v14
+ litellm_params:
+ model: bedrock/cohere.command-text-v14
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: cohere-command-light-v14
+ litellm_params:
+ model: bedrock/cohere.command-light-text-v14
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # AI21 Labs
+ - model_name: ai21-j2-mid
+ litellm_params:
+ model: bedrock/ai21.j2-mid-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: ai21-j2-ultra
+ litellm_params:
+ model: bedrock/ai21.j2-ultra-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # Amazon
+ - model_name: amazon-titan-lite
+ litellm_params:
+ model: bedrock/amazon.titan-text-lite-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ - model_name: amazon-titan-express
+ litellm_params:
+ model: bedrock/amazon.titan-text-express-v1
+ aws_region_name: us-east-1
+ aws_access_key_id: A...
+ aws_secret_access_key: ...
+
+ # Azure
+ - model_name: azure-gpt-4-turbo-preview
+ litellm_params:
+ model: azure/gpt-4-turbo-preview
+ api_base: https://tenant-name.openai.azure.com/
+ api_key: ...
+
+ - model_name: azure-gpt-3.5-turbo
+ litellm_params:
+ model: azure/gpt-35-turbo
+ api_base: https://tenant-name.openai.azure.com/
+ api_key: ...
+
+ - model_name: azure-gpt-4
+ litellm_params:
+ model: azure/gpt-4
+ api_base: https://tenant-name.openai.azure.com/
+ api_key: ...
+
+ - model_name: azure-gpt-3.5-turbo-16k
+ litellm_params:
+ model: azure/gpt-35-turbo-16k
+ api_base: https://tenant-name.openai.azure.com/
+ api_key: ...
+
+ - model_name: azure-gpt-4-32k
+ litellm_params:
+ model: azure/gpt-4-32k
+ api_base: https://tenant-name.openai.azure.com/
+ api_key: ...
+
+ # OpenAI
+ - model_name: gpt-4-turbo
+ litellm_params:
+ model: gpt-4-turbo
+ api_key: ...
+
+ - model_name: old-gpt-4-turbo-preview
+ litellm_params:
+ model: gpt-4-turbo-preview
+ api_key: ...
+
+ - model_name: gpt-3.5-turbo
+ litellm_params:
+ model: gpt-3.5-turbo
+ api_key: ...
+
+ - model_name: gpt-4
+ litellm_params:
+ model: gpt-4
+ api_key: ...
+
+ - model_name: gpt-3.5-turbo-16k
+ litellm_params:
+ model: gpt-3.5-turbo-16k
+ api_key: ...
+
+ - model_name: gpt-4-32k
+ litellm_params:
+ model: gpt-4-32k
+ api_key: ...
+
+ - model_name: gpt-4-vision-preview
+ litellm_params:
+ model: gpt-4-vision-preview
+ api_key: ...
+
+ # Google
+ # NOTE: For Google - see above about required auth "GOOGLE_APPLICATION_CREDENTIALS" environment and volume mount
+ - model_name: google-chat-bison
+ litellm_params:
+ model: vertex_ai/chat-bison
+ vertex_project: gcp-proj-name
+ vertex_location: us-central1
+
+ - model_name: google-chat-bison-32k
+ litellm_params:
+ model: vertex_ai/chat-bison-32k
+ vertex_project: gcp-proj-name
+ vertex_location: us-central1
+
+ - model_name: google-gemini-pro-1.0
+ litellm_params:
+ model: vertex_ai/gemini-pro
+ vertex_project: gcp-proj-name
+ vertex_location: us-central1
+
+ - model_name: google-gemini-pro-1.5-preview
+ litellm_params:
+ model: vertex_ai/gemini-1.5-pro-preview-0409
+ vertex_project: gcp-proj-name
+ vertex_location: us-central1
+
+# NOTE: It may be a good idea to comment out "success_callback", "cache", "cache_params" (both lines under) when you first start until this works!
+litellm_settings:
+ success_callback: ["langfuse"]
+ cache: True
+ cache_params:
+ type: "redis"
+ supported_call_types: ["acompletion", "completion", "embedding", "aembedding"]
+general_settings:
+ master_key: sk_live_SetToRandomValue
+```
+
+
+
+### Example of a few Different Options (ex: rpm, stream, ollama)
+
+
+
+```yaml filename="litellm-config.yml"
+model_list:
+ - model_name: gpt-3.5-turbo
+ litellm_params:
+ model: azure/gpt-turbo-small-eu
+ api_base: https://my-endpoint-europe-berri-992.openai.azure.com/
+ api_key:
+ rpm: 6 # Rate limit for this deployment: in requests per minute (rpm)
+ - model_name: gpt-3.5-turbo
+ litellm_params:
+ model: azure/gpt-turbo-small-ca
+ api_base: https://my-endpoint-canada-berri992.openai.azure.com/
+ api_key:
+ rpm: 6
+ - model_name: gpt-3.5-turbo
+ litellm_params:
+ model: azure/gpt-turbo-large
+ api_base: https://openai-france-1234.openai.azure.com/
+ api_key:
+ rpm: 1440
+ - model_name: mixtral
+ litellm_params:
+ model: openai/mixtral:8x7b-instruct-v0.1-q5_K_M # use openai/* for ollama's openai api compatibility
+ api_base: http://ollama:11434/v1
+ stream: True
+ - model_name: mistral
+ litellm_params:
+ model: openai/mistral # use openai/* for ollama's openai api compatibility
+ api_base: http://ollama:11434/v1
+ stream: True
+litellm_settings:
+ success_callback: ["langfuse"]
+ cache: True
+ cache_params:
+ type: "redis"
+ supported_call_types: ["acompletion", "completion", "embedding", "aembedding"]
+general_settings:
+ master_key: sk_live_SetToRandomValue
+```
+
+
+
+## 3. Configure LibreChat
+
+Use `librechat.yaml` [Configuration file (guide here)](./ai_endpoints.md) to add Reverse Proxies as separate endpoints.
+
+Here is an example config:
+
+```yaml filename="librechat.yaml"
+custom:
+ - name: "Lite LLM"
+ # A place holder - otherwise it becomes the default (OpenAI) key
+ # Provide the key instead in each "model" block within "litellm/litellm-config.yaml"
+ apiKey: "sk-from-config-file"
+ # See the required changes above in "Start LiteLLM Proxy Server" step.
+ baseURL: "http://host.docker.internal:4000"
+ # A "default" model to start new users with. The "fetch" will pull the rest of the available models from LiteLLM
+ # More or less this is "irrelevant", you can pick any model. Just pick one you have defined in LiteLLM.
+ models:
+ default: ["gpt-3.5-turbo"]
+ fetch: true
+ titleConvo: true
+ titleModel: "gpt-3.5-turbo"
+ summarize: false
+ summaryModel: "gpt-3.5-turbo"
+ forcePrompt: false
+ modelDisplayLabel: "Lite LLM"
+```
+
+## Why use LiteLLM?
+
+1. **Access to Multiple LLMs**: It allows calling over 100 LLMs from platforms like Huggingface, Bedrock, TogetherAI, etc., using OpenAI's ChatCompletions and Completions format.
+
+2. **Load Balancing**: Capable of handling over 1,000 requests per second during load tests, it balances load across various models and deployments.
+
+3. **Authentication & Spend Tracking**: The server supports virtual keys for authentication and tracks spending.
+
+Key components and features include:
+
+- **Installation**: Easy installation.
+- **Testing**: Testing features to route requests to specific models.
+- **Server Endpoints**: Offers multiple endpoints for chat completions, completions, embeddings, model lists, and key generation.
+- **Supported LLMs**: Supports a wide range of LLMs, including AWS Bedrock, Azure OpenAI, Huggingface, AWS Sagemaker, Anthropic, and more.
+- **Proxy Configurations**: Allows setting various parameters like model list, server settings, environment variables, and more.
+- **Multiple Models Management**: Configurations can be set up for managing multiple models with fallbacks, cooldowns, retries, and timeouts.
+- **Embedding Models Support**: Special configurations for embedding models.
+- **Authentication Management**: Features for managing authentication through virtual keys, model upgrades/downgrades, and tracking spend.
+- **Custom Configurations**: Supports setting model-specific parameters, caching responses, and custom prompt templates.
+- **Debugging Tools**: Options for debugging and logging proxy input/output.
+- **Deployment and Performance**: Information on deploying LiteLLM Proxy and its performance metrics.
+- **Proxy CLI Arguments**: A wide range of command-line arguments for customization.
+
+Overall, LiteLLM Server offers a comprehensive suite of tools for managing, deploying, and interacting with a variety of LLMs, making it a versatile choice for large-scale AI applications.
\ No newline at end of file
diff --git a/pages/blog/2023-11-30_mongoexpress.mdx b/pages/blog/2023-11-30_mongoexpress.mdx
new file mode 100644
index 0000000..52673ee
--- /dev/null
+++ b/pages/blog/2023-11-30_mongoexpress.mdx
@@ -0,0 +1,91 @@
+---
+title: MongoDB + Mongo Express
+date: 2023/11/30
+description: Learn how to set up Mongo Express, a user-friendly web interface, to securely access and manage your MongoDB database within a Docker environment.
+tags:
+ - MongoDB
+ - MongoExpress
+ - Docker
+ogImage: /images/blog/2023-11-30_mongoexpress.png
+authorid: librechat
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Securely Manage Your MongoDB Database with Mongo Express 🔑
+
+Dealing with databases can be a daunting task, especially when it comes to ensuring data security. In this blog post, we'll guide you through setting up Mongo Express, a user-friendly web-based interface that allows you to securely access and manage your MongoDB database within a Docker environment.
+
+## What is Mongo Express? 🤔
+
+Mongo Express is a powerful administrative tool that provides a convenient and intuitive way to interact with your MongoDB databases. With its sleek interface, you can easily browse, edit, and manage your data without the need for complex command-line operations.
+
+## Why Use Mongo Express in a Docker Environment? 🐳
+
+In a Docker environment, external ports for MongoDB are typically not exposed to the outside world, prioritizing data security. However, this can make it challenging to manage your database directly. That's where Mongo Express comes into play. By setting up Mongo Express within your Docker environment, you can safely access and manage your MongoDB database without compromising security.
+
+## Setting Up Mongo Express 🚀
+
+Now, let's dive into the steps required to set up Mongo Express in your Docker environment:
+
+1. **Create a Configuration File**: Start by creating a new file named `docker-compose.override.yml` in the same directory as your main `docker-compose.yml` file for LibreChat.
+
+2. **Add Mongo Express Configuration**: Copy the following configuration into the `docker-compose.override.yml` file:
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ mongo-express:
+ image: mongo-express
+ container_name: mongo-express
+ environment:
+ ME_CONFIG_MONGODB_SERVER: mongodb
+ ME_CONFIG_BASICAUTH_USERNAME: admin
+ ME_CONFIG_BASICAUTH_PASSWORD: password
+ ports:
+ - '8081:8081'
+ depends_on:
+ - mongodb
+ restart: always
+```
+
+3. **Set Strong Credentials**: Before using this configuration, replace `admin` and `password` with a unique and strong username and password for accessing Mongo Express. These credentials should be difficult to guess to prevent unauthorized access.
+
+4. **Launch Mongo Express**: Save the `docker-compose.override.yml` file and run the following command from the directory where your `docker-compose.yml` file is located to start Mongo Express along with your other Docker services:
+
+```sh filename="Launch the containers"
+docker compose up -d
+```
+
+5. **Access Mongo Express**: Once Mongo Express is up and running, access it by navigating to `http://localhost:8081` in your web browser. You'll need to enter the username and password you specified earlier.
+
+## Enhancing Security with Authentication (Optional) 🔒
+
+For added security, you can enable native authentication for your MongoDB database. Refer to the [MongoDB Authentication Guide](/docs/configuration/mongodb/mongodb_auth) for detailed instructions on setting up authentication.
+
+If you choose to enable authentication, ensure that the admin user has the necessary permissions, such as "clusterAdmin" and "readAnyDatabase." The guide provides step-by-step instructions for creating an admin user with the required permissions.
+
+## Removing Mongo Express 🗑️
+
+If you no longer need Mongo Express in your Docker environment, you can easily remove it by following these steps:
+
+1. Navigate to the directory containing your `docker-compose.yml` and `docker-compose.override.yml` files.
+
+2. Bring down the current Docker environment using the following command:
+
+```sh filename="Bring down the current Docker environment"
+docker compose down
+```
+
+3. Rename or delete the `docker-compose.override.yml` file, which contains the Mongo Express configuration. (or remove the Mongo Express section from it)
+
+4. Finally, bring your Docker environment back up without Mongo Express:
+
+```sh filename="Bring your Docker environment back up without Mongo Express"
+docker compose up -d
+```
+
+With these simple steps, you can streamline your database management process while maintaining a secure environment. Happy managing! 🎉
\ No newline at end of file
diff --git a/pages/blog/2024-02-19_2024_roadmap.mdx b/pages/blog/2024-02-19_2024_roadmap.mdx
new file mode 100644
index 0000000..80a8a98
--- /dev/null
+++ b/pages/blog/2024-02-19_2024_roadmap.mdx
@@ -0,0 +1,74 @@
+---
+title: LibreChat 2024 Roadmap
+date: 2024/02/19
+description: 'The 2024 roadmap for LibreChat, including the Assistants API integration and more.'
+tags:
+ - update
+ - roadmap
+ogImage: /images/blog/2024-02-19_2024_roadmap.webp
+authorid: danny
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+import Discord from '@/components/icons/discord'
+
+
+
+I'm excited to announce that the **Assistants API** integration is now live on the main branch! Be sure to read [the updated setup guide](https://docs.librechat.ai/install/configuration/ai_setup.html#assistants).
+
+This allows the creation of AI Assistants, offering features like code interpreter, knowledge retrieval of files, and tool execution very closely resembling GPTs.
+
+I would also like to announce the current **Roadmap for LibreChat.**
+
+### The 2024 Roadmap:
+
+- Admin Panel & Role Based Access Control (more info on this soon)
+
+
+ As configuration options grow, so does complexity. The main purpose of this update would be to
+ house many of these settings with an interface, to streamline customization and eliminate the need
+ of CLI commands, as well as more effectively manage users.
+
+
+- Assistants API Enhancements; **see roadmap in the discussion thread below**
+- Temporary Chats
+- Preset wizard (AI to help you make presets)
+- Add/delete messages anywhere in the conversation
+- Multiple response streaming
+- In-line text commands for using presets/assistants/switching endpoints
+- Native Local LLM integrations (Ollama to start)
+- Local RAG for extended file support for all endpoints
+- "Memory" for conversations
+- Improved Tooling for all Endpoints (not just Plugins)
+- Fine Tuning & LLM Feedback Data management
+
+I know this is ambitious but I believe this is all more than possible with everyone's continued support!
+
+I've made a **[Roadmap Feedback Form](https://forms.gle/KCHkeQCYSP9LAWLcA)** for those interested in sharing what they think!
+
+### **_Also, LibreChat is now officially 1 year old!_** 🎉🎉🎉
+
+---
+
+Discuss theses updates on Discord:
+
+
+ }
+ />
+ }
+ />
+ }
+ />
+
diff --git a/pages/blog/2024-03-02_ollama.mdx b/pages/blog/2024-03-02_ollama.mdx
new file mode 100644
index 0000000..9e4baac
--- /dev/null
+++ b/pages/blog/2024-03-02_ollama.mdx
@@ -0,0 +1,93 @@
+---
+title: Ollama
+date: 2024/02/19
+description: 'Learn how to run AI models locally using Ollama'
+tags:
+ - ollama
+ - guide
+ - LLM
+ogImage: /images/blog/2024-03-02_ollama.png
+authorid: librechat
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Unlock the Power of Ollama: Run Large Language Models on Your Local Hardware
+
+Are you tired of relying on cloud-based solutions to run your language models? Do you want to tap into the potential of large language models without breaking the bank? Look no further than Ollama, a revolutionary platform that lets you run large language models on your local hardware.
+
+## What Can Ollama Do?
+
+With Ollama, you can:
+
+* Run large language models on your local hardware, minus the hefty cloud computing costs
+* Host multiple models with ease
+* Dynamically load models upon request, streamlining your workflow
+
+## Getting Started with Ollama
+
+Ready to unlock the power of Ollama? Follow these simple steps to get started:
+
+### Install Ollama
+
+You have two options to install Ollama: via the Ollama app or using Docker.
+
+
+
+For Mac, Linux, and Windows users, follow the instructions on the [Ollama Download](https://ollama.com/download) page to get started. Ollama supports GPU acceleration on Nvidia, AMD, and Apple Metal, so you can harness the power of your local hardware.
+
+
+### Docker Install
+If you're already using LibreChat, you can add Ollama to your container stack using the `docker-compose.override.yml` file. Simply create the `docker-compose.override.yml` with the following content at the root of your LibreChat folder, then use the command `docker compose up -d {:sh}`:
+- See: [Docker Override](/docs/configuration/docker_override)
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+# USE LIBRECHAT CONFIG FILE
+ api:
+ volumes:
+ - type: bind
+ source: ./librechat.yaml
+ target: /app/librechat.yaml
+
+# ADD OLLAMA
+ ollama:
+ image: ollama/ollama:latest
+ deploy:
+ resources:
+ reservations:
+ devices:
+ - driver: nvidia
+ capabilities: [compute, utility]
+ ports:
+ - "11434:11434"
+ volumes:
+ - ./ollama:/root/.ollama
+```
+Once installed, you can access Ollama commands within the container using:
+ - `docker exec -it ollama /bin/bash {:bash}`.
+
+
+
+
+## Load Models in Ollama
+
+Now that you have Ollama installed, it's time to load your models. Here's how:
+
+1. Browse the [Ollama Library](https://ollama.ai/library) to explore available models.
+2. Copy the text from the Tags tab on the library website and paste it into your terminal. The command should begin with `ollama run {:bash}`.
+3. Check the model size to ensure it can run in GPU memory for optimal performance.
+4. Use `/bye{:bash}` to exit the terminal when you're done.
+
+## Configure LibreChat
+
+Finally, use your `librechat.yaml` configuration file to add Ollama as a separate endpoint. Follow our [Custom Endpoints & Configuration Guide](/docs/configuration/librechat_yaml) for a step-by-step walkthrough.
+
+With Ollama, you can unlock the full potential of large language models on your local hardware. Say goodbye to cloud computing costs and hello to faster, more efficient workflows.
+
+
+
diff --git a/pages/blog/2024-03-22_unraid_guide.mdx b/pages/blog/2024-03-22_unraid_guide.mdx
new file mode 100644
index 0000000..cd51aff
--- /dev/null
+++ b/pages/blog/2024-03-22_unraid_guide.mdx
@@ -0,0 +1,104 @@
+---
+date: 2024/03/22
+title: Install LibreChat using Unraid
+description: Comprehensive guide on how to install and setup LibreChat using the Unraid Community App
+tags:
+ - Unraid
+ - install
+ - guide
+authorid: anon
+ogImage: /images/blog/2024-03-22_unraid_guide.png
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+> Please be aware that this guide is specifically tailored for the LibreChat Unraid Community application. However, alternative installation methods for LibreChat on Unraid do exist, such as utilizing Portainer.
+
+## Intro
+
+I just set this up the other day and this is the guide I wish I had.
+
+Why do this? I assume a lot of us find ChatGPT useful, the audience here is likely programmers and it's been helpful for my projects. But \$21.50/mo (after taxes) is a steep monthly price for GPT 4 when my wife can't also use it on her account and when I maybe send it 50 or so commands a month, sometimes going a full month not using it.
+
+## The API pricing
+Here's the [OpenAI API pricing page](https://openai.com/pricing) it's a bit confusing as it's per 1M tokens. What are tokens? Honestly still not sure. But I do know that my average command uses about 500-800 tokens. The TL;DR is that at the time of writing I've found GPT 3.5 Turbo uses fractions of a penny per response, and GPT 4 Turbo uses about 1.5-2 cents per response. If you want to use DALL-E, it's 4-12 cents per image depending on quality. ("Turbo" seems to be a version that's "more powerful and cheaper"). This is in US Dollars, sorry, not sure about other currencies.
+
+The one catch is they don't bill you at the end of the month, you have to keep money in your account and use an auto-refill. The lowest you can set it is basically "when my wallet goes below \$5, top off to \$10".
+
+## Setup Prerequisites
+
+### MongoDB
+Go to the Community Apps store and search for MongoDB. I'm using the one maintained by Taddeusz. The default docker template is fine, no configuration needed, just note the port you use but the default is 27017. Install it, make sure to turn on autostart, and you're set.
+
+If you're interested in poking around, once you open the console you can run mongosh to enter Mongo Shell. From there you can check out the [MongoDB Manual](https://www.mongodb.com/docs/manual/reference/command/) for info on what to do. But a useful one is show dbs to see what databases exist. I'll talk more about this later.
+
+### OpenAI API Key
+If you have an OpenAI account, you can sign in on the [OpenAI Developer Platform](https://platform.openai.com/). You need a valid phone number to use the API. I believe they give you free credits, but long story short I didn't get those.
+
+On the left menu, go to Settings > Billing, to set up your payment method. As I mentioned previously, they'll ask you how many credits you want to buy right now (minimum \$5), at what threshold do you want to be charged (minimum \$5), and how much do you want to top off to (minimum \$10). I just set the minimums although I bought \$10 from the start. I believe it takes you to a monthly limit screen, but if not, under Usage on the left menu, you can set your Monthly Limit. I set mine to \$20. Once that threshold is hit, your API key stops working until the 1st of the next month.
+
+To get your API key, just go to API Keys on the left menu, hit Create New Secret Key, and give it a name. I named mine "LibreChat" and gave it All permissions. Save this API Key in a password manager or something because you won't be able to see it later, and once you enter it in your Docker Compose, you won't easily be able to retrieve it.
+
+## Setup LibreChat
+LibreChat is effectively a self hosted ChatGPT clone; it looks just like it. [Here is the GitHub](https://github.com/danny-avila/LibreChat). It has support for almost every feature of the traditional ChatGPT site, but it stores all the accounts and messages in a MongoDB database and utilizes the API instead.
+
+Go to Community Apps and search for LibreChat. At the time of writing there should only be one result, a container maintained by pureelectricity.
+
+The Docker compose file is where this gets tricky, there's a lot here. From top to bottom:
+
+- **Port UI** is just your Web UI port. I kept the default.
+
+- **Crypto Key**, **Crypto Initialization Vector**, **JWT Secret**, and **JWT Refresh Secret**.
+
+ These 4 we get all at once and honestly I'm still not sure what they are. LibreChat recommend [this Replit](https://replit.com/@daavila/crypto#index.js) to generate them. In order to run it, you need to create an account. I created one with my GitHub Login and then just deleted it once I was done. It should be fairly self explanatory (I also don't feel like making another account to write a more detailed guide), but once you run it, you'll see an output with `CREDS_KEY` which you'll put in `Crypto Key`, `CREDS_IV` which you'll put in `Crypto Initialization Vector`, `JWT_SECRET` which you'll put in `JWT Secret`, and `JWT_REFRESH_SECRET` which you'll put in `JWT Refresh Secret`. Great, the hard part is done.
+
+- Back to **MongoDB URI**. Here you'll put the location of your MongoDB instance in the following format: `mongodb://ip:port/database`. So since my server's local IP is `192.168.1.100` and I kept it at the default port of `27017`, I entered the following: `mongodb://192.168.1.100:27017/librechat`. But wait, I didn't create a librechat database! That's fine, it'll create one for you. You can actually name this whatever you want, but librechat makes the most sense.
+
+- Moving on, **Email From Address**, **Email Service Provider**, **Email Username**, and **Email Password** I kept blank. They're not required and I don't know what they do exactly. I assume it's for sending out emails during account creation, but unless you're spinning this up for dozens of people, I wouldn't worry about that stuff. My goal is just for my family to use it.
+
+- **OpenAI API Key**, enter your OpenAI key that you got earlier.
+
+- **Enable Email Login** set to `true`, **Enable Email Registration** set to `true`, **Enable Social Login** set to `false`, **Enable Social Registration** set to `false`. The app allows you to register or login via Email or Social (Google, GitHub, Discord, etc.) Once again, for my family just Email is fine. The account info saves to your local MongoDB instance, so you can enter a fake email upon registration if you even want. I'm assuming Social Login has more complexity and the potential for issues anyway.
+
+- **Client Domain** and **Server Domain**, I set both of these to my server's local IP address, so `192.168.1.100`. I assume if you're running this through a reverse proxy, you'd set it to whatever domain you use such as `librechat.mycoolserver.net` or whatever.
+
+- **Debug Logging Enabled** default to `False`,
+- **UID** default of `1000`, **GID** default of `1000`.
+
+Great! We're all done and it should run just fine, inshallah.
+
+## Using LibreChat
+The WebUI is very self explanatory. It seems like this is some live web app from OpenAI, but once again, this account stuff just saves to your MongoDB (I'll show you that later). So hit "Sign up", enter whatever fake or real info you want, then Login. Just note that it does regex your email field, so it has to have an @ and a ..
+
+You should now be greeted with a very familiar screen if you've used ChatGPT. The only new things here are that in the header there's a dropdown that might say gpt-3.5-turbo-1106 and upon clicking it, you get over a dozen options. The format of these models are essentially `gpt-[major version]-[flavor]-[minor version]`. As I mentioned previously, the turbo "flavors" or whatever you want to call them, are cheaper and apparently better. The ones that say vision have the ability to understand images, but may use a slightly older training data. Ones without a [minor version] will be using whatever latest minor version. I believe right now, *gpt-3.5-turbo-1106* and *gpt-3.5-turbo* are the same model, for example.
+
+The TL;DR is stick to *gpt-3.5-turbo* for extremely cheap, fractions of a penny, answers (this is the free model anyway), and stick to *gpt-4-turbo-preview* for better answers that cost about \$0.015-\$0.02 each, and use *gpt-4-vision-preview* if you want to ask it about understanding images (same price as prior). You can find detailed information about the models on the OpenAI Models Docs page.
+
+There's also a config button next to that drop down that I honestly haven't messed around with, the only one to note is the "Image Detail" slider which is used for DALL-E.
+
+To use DALL-E, click on the OpenAI drop down (left of the model drop down) and select "**Plugins**". A new drop down will appear to the right of the model drop down that says "None selected". Click that, click "**Plugin store**", and search for `DALL-E`. DALL-E is cheap and produces pretty bad images for about \$0.04 each. DALL-E 3 produces pretty impressive stuff for \$0.12 each (1024x1024 pixels). Hit install, and it may prompt you for your OpenAI API Key again, enter that in. Now you can select DALL-E and prompt some images. I'm not too sure how the GPT version affects the images, I believe it's just for understanding your prompt and relaying it to DALL-E. When an image is being generated you can click the DALL-E drop down that appears and it'll show you what it prompted DALL-E with. And as mentioned, the Image Detail config will give you a lower or higher quality image, the higher the quality the more expensive the image.
+
+## Looking inside MongoDB (Optional)
+This Docker doesn't utilize an appdata folder or anything, everything is just stored in MongoDB. To check out what's going on, open up your MongoDB Docker's console and type `mongosh` to enter the MongoDB Shell. You should now see a `test>` input. From here we can type show dbs to see all our databases. Don't worry about admin, config, or local, I don't know what they do either. Type use librechat to enter our LibreChat database. Now we can type show tables to see our various tables (think like Excel tables). The interesting ones to note are that every message we send is stored in messages and every user is stored in users. I guess if you want to make sure your kid isn't typing "generate boobs", you can snoop in the messages table. To see inside a table just type `db.[table].find()` so for every user we `type db.users.find()`. Now if for some reason you wanted to delete a user, you would type `db.[table].remove({ [criteria] })`. So for example, I want to delete the user with the username 'poop'. I would type `db.users.remove({ username: 'poop' })` and hit enter. The only thing to note is I believe poop's message and chat history will be persistent, unlinked data in other tables, but I wouldn't worry about cleaning it up.
+
+## Conclusion
+I hope this was helpful for someone! I can't comment on how more or less secure this is, as always there's concerns about generative AI privacy. If you're inputting sensitive customer data into an AI model, you're now training that model with that data and my understanding is that it could spit back out your data to someone else. Here's an article. I'm not a professional, just a skeptic, so do your own research.
+
+My main goal here was that both my wife and I can login to LibreChat, have our own users, and we can both enjoy using GPT 4 to do our grunt work without paying \$21.50/month each even if we barely used it that month.
+
+## Bonus Section! (Assistants)
+There's an interesting feature on the OpenAI Developer Portal that I've been messing around with called "Assistants". Here's the docs for that. In order to get Assistants to appear in your LibreChat instance, edit your Docker compose file, toggle on Advanced View, then hit "Add another Path, Port, Variable, Label or Device". I'll just list it out:
+
+- **Config Type**: Variable
+- **Name**: Assistants API Key
+- **Key**: ASSISTANTS_API_KEY
+- **Value**: [Your OpenAI API Key (yes we're entering it again)]
+- **Default Value**: [blank]
+- **Description**: [blank]
+- **Display**: Always
+- **Required**: No
+- **Password Mask**: Yes
+
+That's it! Assistants will appear as another option when you click on that OpenAI dropdown in the header, above Plugins.
\ No newline at end of file
diff --git a/pages/blog/2024-04-17_blog_guide.mdx b/pages/blog/2024-04-17_blog_guide.mdx
new file mode 100644
index 0000000..7ea4ef1
--- /dev/null
+++ b/pages/blog/2024-04-17_blog_guide.mdx
@@ -0,0 +1,101 @@
+---
+title: A Guide to Contributing to Our Blog
+date: 2024/05/31
+description: 'Want to share your insights and knowledge with our community? Learn how to contribute to our blog with this step-by-step guide!'
+tags:
+ - blog
+ - contributing
+ - guide
+authorid: fuegovic
+ogImage: /images/blog/2024-04-17_blog_guide.png
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Welcome, Aspiring Blog Contributors! 🙌
+
+Are you eager to share your expertise and insights with our vibrant community? Contributing to our blog is a fantastic way to do just that! In this beginner-friendly guide, we'll walk you through the process of creating your first blog post and making your mark on our platform. Let's dive in! 🌟
+
+## Step 1: Set Up Your Author Profile 👤
+
+Before you start crafting your blog post, you'll need to create an author profile. This helps our readers get to know the brilliant mind behind the content. Here's how:
+
+1. Create a new file in the `pages/authors` directory, following the format `authorid.mdx`.
+2. Add your profile picture to the `public/images/people` folder.
+3. Fill in the template with your details, including your name, bio, and social media links.
+
+
+ No worries! If you'd rather not create a personal profile, you can use the "anon" profile by adding `authorid: anon` to your blog post metadata.
+
+
+```mdx filename="authorid.mdx"
+---
+title: Your Name Profile
+authorid: your-authorid
+subtitle: Job Title or Short Description
+name: Your Name
+bio: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla litora ridiculus magna et etiam mi. Dolor etiam id elit morbi ipsum mauris. Non dapibus urna platea elementum fusce vulputate.
+ogImage: '/images/people/your-image.png'
+socials:
+ GitHub: https://github.librechat.ai
+ LinkedIn: https://linkedin.librechat.ai/
+ X: https://x.com/LibreChatAI
+ Discord: https://discord.librechat.ai
+---
+---
+
+import AuthorProfile from '@/components/Author/AuthorProfile'
+
+
+```
+
+## Step 2: Craft Your Blog Post ✍️
+
+Now, it's time to let your creativity flow! We use MDX for our blog posts, which allows you to seamlessly blend markdown and JSX. This means you can create interactive and engaging content by importing components like charts and alerts.
+
+To create your blog post:
+
+1. Place your post in the `pages/blog` directory, using the naming scheme `yyyy-mm-dd_short_title.mdx`.
+2. Add a thumbnail image to the `public/images/blog` folder, using the same name as your blog post file.
+3. Include the necessary metadata and header in your document, as shown in the example.
+4. Let your thoughts and ideas pour onto the page! 🎉
+
+ ```mdx filename="metadata and header"
+ ---
+
+ title: Your Awesome Title
+ date: 2024/01/01
+ description: "Short description of the blog post"
+ tags: - tag1 - tag2
+ authorid: your-authorid
+ ogImage: /images/blog/2024-01-01_your_awesome_title.png
+
+ ---
+
+ import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+ # Title
+ ...
+ ```
+
+## Step 3: Test and Submit Your Post 🚀
+
+Before submitting your blog post, it's crucial to ensure everything looks perfect. Take a moment to review your author profile, the blog landing page, and your post itself.
+
+To test your changes:
+
+1. Prepare the environment by running `pnpm install`.
+2. Start the development server with `pnpm dev`.
+3. Build the project using `pnpm build` and `pnpm start`.
+
+Once you're confident everything is in order, submit a pull request, and our team will review your contribution. We can't wait to see what you've created! 😊
+
+## Ready to Make Your Mark? 🎨
+
+Contributing to our blog is an exciting opportunity to showcase your knowledge, engage with our community, and make a lasting impact. By following this guide, you'll be well on your way to becoming a valued contributor.
+
+So, what are you waiting for? Grab your keyboard, let your ideas flow, and join us in creating content that informs, inspires, and connects. We're thrilled to have you on board! 🚀✨
\ No newline at end of file
diff --git a/pages/blog/2024-05-01_mlx.mdx b/pages/blog/2024-05-01_mlx.mdx
new file mode 100644
index 0000000..7180d20
--- /dev/null
+++ b/pages/blog/2024-05-01_mlx.mdx
@@ -0,0 +1,47 @@
+---
+title: LLMs on Apple Silicon with MLX
+date: 2024/05/01
+description: Unleash the power of Apple Silicon by running large language models locally with MLX.
+tags:
+ - apple
+ - LLM
+ - guide
+ - MLX
+ogImage: /images/blog/2024-05-01_mlx.png
+authorid: anon
+---
+
+import { BlogHeader } from '@/components/blog/BlogHeader'
+
+
+
+# Running Large Language Models on Apple Silicon with MLX
+
+In this post, we'll explore how to leverage the power of Apple Silicon hardware (M1, M2, M3) to run large language models locally using MLX. MLX is an open-source project that enables GPU acceleration on Apple's Metal backend, allowing you to harness the unified CPU/GPU memory for efficient model execution.
+
+## Installing MLX on macOS
+
+MLX supports GPU acceleration on Apple's Metal backend through the `mlx-lm` Python package. To get started, follow the instructions provided in the [mlx-lm package installation guide](https://github.com/ml-explore/mlx-examples/tree/main/llms).
+
+**Note**: MLX is currently supported only on Mac MX series devices.
+
+## Loading Models with MLX
+
+While MLX supports common HuggingFace models directly, it is recommended to use converted and quantized models provided by the [mlx-community](https://huggingface.co/mlx-community). These models have been optimized for efficient performance on Apple Silicon hardware, depending on your device's capabilities.
+
+To load a model with MLX, follow these steps:
+
+1. Browse the available models on [HuggingFace](https://huggingface.co/models?search=mlx-community).
+2. Copy the text from the model page in the format `/` (e.g., `mlx-community/Meta-Llama-3-8B-Instruct-4bit`).
+3. Check the model size. Models that can run in CPU/GPU unified memory tend to perform better.
+4. Follow the instructions to launch the model server [Run OpenAI Compatible Server Locally](https://github.com/ml-explore/mlx-examples/blob/main/llms/mlx_lm/SERVER.md) by running the command:
+
+ ```sh filename="Launch the model server"
+ mlx_lm.server --model /
+ ```
+
+## Configuring LibreChat
+
+To use MLX with LibreChat, you'll need to add it as a separate endpoint in the `librechat.yaml` configuration file. An example configuration for the Llama-3 model is provided. Follow the [Custom Endpoints & Configuration Guide](/docs/configuration/librechat_yaml) for more details.
+
+With MLX, you can now enjoy the benefits of running large language models locally on your Apple Silicon hardware, unlocking new possibilities for efficient and powerful natural language processing tasks.
\ No newline at end of file
diff --git a/pages/blog/_meta.ts b/pages/blog/_meta.ts
new file mode 100644
index 0000000..f1bc412
--- /dev/null
+++ b/pages/blog/_meta.ts
@@ -0,0 +1,12 @@
+export default {
+ '*': {
+ theme: {
+ toc: false,
+ sidebar: false,
+ pagination: true,
+ typesetting: 'article',
+ layout: 'default',
+ breadcrumb: false,
+ },
+ },
+}
diff --git a/pages/changelog.mdx b/pages/changelog.mdx
new file mode 100644
index 0000000..221fcdd
--- /dev/null
+++ b/pages/changelog.mdx
@@ -0,0 +1,22 @@
+---
+description: The latest release updates from LibreChat.
+---
+
+import { ChangelogIndex } from '@/components/changelog/ChangelogIndex'
+import { Header } from '@/components/Header'
+import Link from 'next/link'
+
+
diff --git a/pages/changelog/_meta.ts b/pages/changelog/_meta.ts
new file mode 100644
index 0000000..18ce7d9
--- /dev/null
+++ b/pages/changelog/_meta.ts
@@ -0,0 +1,8 @@
+export default {
+ '*': {
+ type: 'page',
+ theme: {
+ layout: 'default',
+ },
+ },
+}
diff --git a/pages/changelog/config_v1.0.0.mdx b/pages/changelog/config_v1.0.0.mdx
new file mode 100644
index 0000000..daa0211
--- /dev/null
+++ b/pages/changelog/config_v1.0.0.mdx
@@ -0,0 +1,37 @@
+---
+date: 2024/01/03
+title: ⚙️ Config v1.0.0
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+This initial release introduces a robust configuration schema using Zod for validation, designed to manage API endpoints and associated settings in a structured and type-safe manner.
+
+Features:
+
+1. **Endpoint Configuration Schema (`endpointSchema`)**:
+ - **Name Validation**: Ensures that the endpoint name is not one of the default `EModelEndpoint` values.
+ - **API Key**: Requires a string value for API key identification.
+ - **Base URL**: Requires a string value for the base URL of the endpoint.
+ - **Models Configuration**:
+ - **Default Models**: Requires an array of strings with at least one model specified.
+ - **Fetch Option**: Optional boolean to enable model fetching.
+ - **Additional Optional Settings**:
+ - **Title Convo**: Optional boolean to toggle conversation titles.
+ - **Title Method**: Optional choice between 'completion' and 'functions' methods.
+ - **Title Model**: Optional string for model specification in titles.
+ - **Summarize**: Optional boolean for enabling summary features.
+ - **Summary Model**: Optional string specifying the model used for summaries.
+ - **Force Prompt**: Optional boolean to force prompt inclusion.
+ - **Model Display Label**: Optional string for labeling the model in UI displays.
+
+2. **Main Configuration Schema (`configSchema`)**:
+ - **Version**: String to specify the config schema version.
+ - **Cache**: Boolean to toggle caching mechanisms.
+ - **Endpoints**:
+ - **Custom Endpoints**: Array of partially applied `endpointSchema` to allow custom endpoint configurations.
+ - Ensures strict object structure without additional properties.
\ No newline at end of file
diff --git a/pages/changelog/config_v1.01.mdx b/pages/changelog/config_v1.01.mdx
new file mode 100644
index 0000000..9b41eb0
--- /dev/null
+++ b/pages/changelog/config_v1.01.mdx
@@ -0,0 +1,12 @@
+---
+date: 2024/01/11
+title: ⚙️ Config v1.0.1
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added [`fileStrategy`](./custom_config.md#filestrategy) to custom config
\ No newline at end of file
diff --git a/pages/changelog/config_v1.02.mdx b/pages/changelog/config_v1.02.mdx
new file mode 100644
index 0000000..e08e5ac
--- /dev/null
+++ b/pages/changelog/config_v1.02.mdx
@@ -0,0 +1,14 @@
+---
+date: 2024/02/05
+title: ⚙️ Config v1.0.2
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added `userIdQuery` to custom endpoint [models](./custom_config.md#models) settings
+- Added [Registration Configuration](./custom_config.md#registration) settings
+- Added [`headers`](./custom_config.md#headers) to custom endpoint settings
\ No newline at end of file
diff --git a/pages/changelog/config_v1.03.mdx b/pages/changelog/config_v1.03.mdx
new file mode 100644
index 0000000..166b417
--- /dev/null
+++ b/pages/changelog/config_v1.03.mdx
@@ -0,0 +1,16 @@
+---
+date: 2024/02/13
+title: ⚙️ Config v1.0.3
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added [OpenAI Assistants configuration](./custom_config.md#assistants-endpoint-object-structure) settings
+- Added the following fields to custom endpoint settings:
+ - [`addParams`](./custom_config.md#addparams), [`dropParams`](./custom_config.md#dropparams)
+- Added [Rate Limit Configuration](./custom_config.md#ratelimits) settings
+- Added [File Configuration](./custom_config.md#fileconfig) settings
\ No newline at end of file
diff --git a/pages/changelog/config_v1.04.mdx b/pages/changelog/config_v1.04.mdx
new file mode 100644
index 0000000..a65f8eb
--- /dev/null
+++ b/pages/changelog/config_v1.04.mdx
@@ -0,0 +1,12 @@
+---
+date: 2024/03/09
+title: ⚙️ Config v1.0.4
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added initial [Azure OpenAI configuration](./custom_config.md#azure-openai-object-structure) settings
\ No newline at end of file
diff --git a/pages/changelog/config_v1.05.mdx b/pages/changelog/config_v1.05.mdx
new file mode 100644
index 0000000..6cb0b70
--- /dev/null
+++ b/pages/changelog/config_v1.05.mdx
@@ -0,0 +1,15 @@
+---
+date: 2024/03/14
+title: ⚙️ Config v1.0.5
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added [Azure OpenAI Assistants configuration](./custom_config.md#assistants) settings
+- Added initial [interface settings](./custom_config.md#interface-object-structure) (privacy policy & terms of service)
+- Added the following fields to the [Azure Group Config](./custom_config.md#group-object-structure):
+ - `serverless`, `addParams`, `dropParams`, `forcePrompt`
\ No newline at end of file
diff --git a/pages/changelog/config_v1.06.mdx b/pages/changelog/config_v1.06.mdx
new file mode 100644
index 0000000..82bdfad
--- /dev/null
+++ b/pages/changelog/config_v1.06.mdx
@@ -0,0 +1,13 @@
+---
+date: 2024/04/16
+title: ⚙️ Config v1.0.6
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added [`imageOutputType`](./custom_config.md#imageoutputtype) field to specify the output type for image generation.
+- Added [`secureImageLinks`](./custom_config.md#secureimagelinks) to optionally lock down access to generated images.
\ No newline at end of file
diff --git a/pages/changelog/config_v1.07.mdx b/pages/changelog/config_v1.07.mdx
new file mode 100644
index 0000000..c61c0c4
--- /dev/null
+++ b/pages/changelog/config_v1.07.mdx
@@ -0,0 +1,13 @@
+---
+date: 2024/04/25
+title: ⚙️ Config v1.0.7
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Removed `stop` from OpenAI/custom endpoint default parameters
+- Added `current_model` option for [`titleModel`](./custom_config.md#titlemodel) and [`summaryModel`](./custom_config.md#summarymodel) endpoint settings in order to use the active conversation's model for those methods.
\ No newline at end of file
diff --git a/pages/changelog/config_v1.08.mdx b/pages/changelog/config_v1.08.mdx
new file mode 100644
index 0000000..a17600a
--- /dev/null
+++ b/pages/changelog/config_v1.08.mdx
@@ -0,0 +1,21 @@
+---
+date: 2024/04/30
+title: ⚙️ Config v1.0.8
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added additional fields to [interface config](./custom_config.md#interface-object-structure) to toggle access to specific features:
+ - `endpointsMenu`, `modelSelect`, `parameters`, `sidePanel`, `presets`
+- Now ensures the following fields always have defaults set:
+ - `cache`, `imageOutputType`, `fileStrategy`, `registration`
+- Added [`modelSpecs`](./custom_config.md#model-specs-object-structure) for a configurable UI experience, simplifying model selection with specific presets and tools.
+- Added [`filteredTools`](./custom_config.md#filteredtools) to disable specific plugins/tools without any changes to the codebase
+ - Affects both `gptPlugins` and `assistants` endpoints
+- [`iconURL`](./custom_config.md#iconurl) can now be to set to one of the main endpoints to use existing project icons
+ - "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "gptPlugins"
+- Invalid YAML format is now logged for easier debugging
\ No newline at end of file
diff --git a/pages/changelog/config_v1.09.mdx b/pages/changelog/config_v1.09.mdx
new file mode 100644
index 0000000..9b5d535
--- /dev/null
+++ b/pages/changelog/config_v1.09.mdx
@@ -0,0 +1,13 @@
+---
+date: 2024/05/02
+title: ⚙️ Config v1.0.9
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- Added `conversationsImport` to [rateLimits](/docs/configuration/librechat_yaml/object_structure/config#ratelimits) along with the [new feature](https://github.com/danny-avila/LibreChat/pull/2355) for importing conversations from LibreChat, ChatGPT, and Chatbot UI.
+
diff --git a/pages/changelog/v0.5.0.mdx b/pages/changelog/v0.5.0.mdx
new file mode 100644
index 0000000..80a14ba
--- /dev/null
+++ b/pages/changelog/v0.5.0.mdx
@@ -0,0 +1,75 @@
+---
+date: 2023/06/10
+title: 🚀 LibreChat v0.5.0
+description: Introducing Plugins via LangChain 🦜️
+ogImage: /images/changelog/v0.5.0.png
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.4.8...v0.5.0
+
+#### The following contributors were crucial for this release: [@danny-avila](https://github.com/danny-avila) [@fuegovic](https://github.com/fuegovic) [@danorlando](https://github.com/danorlando) [@ClaraLeigh](https://github.com/ClaraLeigh) [@dncc89](https://github.com/dncc89)
+
+---
+
+**The new Plugins endpoint** opens the door to prompting LLMs in new ways other than traditional input/output prompting.
+
+The first step is using chain-of-thought prompting for using plugins/tools in a fashion mimicing the official ChatGPT Plugins feature.
+
+**More than this, you can use this endpoint for changing your conversation settings mid-conversation.** Unlike the official ChatGPT site and all other endpoints, you can switch models, presets, and settings mid-convo, even when you have no plugins selected. This is useful if you first want a creative response from GPT-4, and then a deterministic, lower cost response from GPT-3.
+
+Soon, you will be able to use Local LLMs, PaLM2 and HuggingFace models, all in this endpoint in the same modular manner.
+
+---
+
+## Immediate Roadmap
+
+- **Vector Indexing & Memory - Chat with Documents**
+ - Starting work
+- **Python API to utilize Most up-to-date Python Features/Tools (including Langchain & more)**
+ - already in progress: https://github.com/danny-avila/ai-services
+- **OpenAPI Support (ChatGPT plugins)**
+ - already in progress, testing working method
+- **Local LLM Support**
+ - in planning phase, methods already outlined
+- **HuggingFace Models Support**
+ - in planning phase, methods already outlined
+- **Code-Bison Compatibility**
+ - in planning phase, methods already outlined
+- **More tests and CI/CD pipeline**
+ - already in progress, multiple test suites across the full stack are added with this update
+
+ℹ️ If you would like to contribute to any of the above or in any other capacity, we will be adding all of these tasks & more to our GitHub Projects tab very soon. Please also join our [discord](https://discord.gg/CEe6vDg9Ky) for developer discussion.
+
+**Note:** You can now close registration by either omitting this env variable or setting it to false
+
+```sh
+ALLOW_REGISTRATION=true
+```
+
+## ⚠️ **Breaking Changes** ⚠️
+
+Note: These changes only apply to users who are updating from a previous version of the app.
+
+- We have simplified the configuration process by using a single `.env` file in the root folder instead of separate `/api/.env` and `/client/.env` files.
+- If you had installed a previous version, you can run `npm run upgrade` to automatically copy the content of both files to the new `.env` file and backup the old ones in the root dir.
+- If you are installing the project for the first time, it's recommend you run the installation script `npm run install` to guide your local setup (otherwise continue to use docker)
+- The docker-compose file had some changes. Review the new docker instructions to make sure you are setup properly. This is still the simplest and most effective method.
+- The upgrade script requires both `/api/.env` and `/client/.env` files to run properly. If you get an error about a missing client env file, just rename the `/client/.env.example` file to `/client/.env` and run the script again.
+- We have renamed the `OPENAI_KEY` variable to `OPENAI_API_KEY` to match the official documentation. The upgrade script should do this automatically for you, but please double-check that your key is correct in the new `.env` file.
+- After running the upgrade script, the `OPENAI_API_KEY` variable might be placed in a different section in the new `.env` file than before. This does not affect the functionality of the app, but if you want to keep it organized, you can look for it near the bottom of the file and move it to its usual section.
+
+##
+
+- For enhanced security, we are now asking for crypto keys for securely storing credentials in the `.env` file. Crypto keys are used to encrypt and decrypt sensitive data such as passwords and access keys. If you don't set them, the app will crash on startup.
+- You need to fill the following variables in the `.env` file with 32-byte (64 characters in hex) or 16-byte (32 characters in hex) values:
+ - `CREDS_KEY` (32-byte)
+ - `CREDS_IV` (16-byte)
+ - `JWT_SECRET` (32-byte, optional but recommended)
+- You can use this replit to generate some crypto keys quickly: https://replit.com/@daavila/crypto#index.js
+- Make sure you keep your crypto keys safe and don't share them with anyone.
diff --git a/pages/changelog/v0.5.1.mdx b/pages/changelog/v0.5.1.mdx
new file mode 100644
index 0000000..a53b913
--- /dev/null
+++ b/pages/changelog/v0.5.1.mdx
@@ -0,0 +1,56 @@
+---
+date: 2023/06/17
+title: 🚀 LibreChat v0.5.1
+description: OpenAI Functions, new models, scripts...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## **Features**:
+
+- Option to use new **OpenAI Functions** with Plugins Agent by [@danny-avila](https://github.com/danny-avila) in [#521](https://github.com/danny-avila/LibreChat/pull/521)
+- feat(OpenAI, PaLM): Add model support for **[new OpenAI models](https://openai.com/blog/function-calling-and-other-api-updates)** and **codechat-bison** by [@danny-avila](https://github.com/danny-avila) in [#516](https://github.com/danny-avila/LibreChat/pull/516)
+- Command line features: Create a user & more install options by [@ClaraLeigh](https://github.com/ClaraLeigh) in [#487](https://github.com/danny-avila/LibreChat/pull/487)
+- Feat/startup config api to handle Frontend environment variables more reliably by [@danorlando](https://github.com/danorlando) in [#518](https://github.com/danny-avila/LibreChat/pull/518)
+
+## **Bug Fixes**:
+
+- fix(logout.controller.js): destructure logoutUser function by [@danny-avila](https://github.com/danny-avila) in [#482](https://github.com/danny-avila/LibreChat/pull/482)
+- fix(DALL-E.js): should only use DALLE_API_KEY in all cases by [@danny-avila](https://github.com/danny-avila) in [#506](https://github.com/danny-avila/LibreChat/pull/506)
+- fix: prepare script no longer breaks local installation by [@danny-avila](https://github.com/danny-avila) in [#512](https://github.com/danny-avila/LibreChat/pull/512)
+- style(Input): remove unnecessary z-index class from input field by [@danny-avila](https://github.com/danny-avila) in [#522](https://github.com/danny-avila/LibreChat/pull/522)
+
+## **Documentation**:
+
+- docs: fix outdated references by [@fuegovic](https://github.com/fuegovic) in [#480](https://github.com/danny-avila/LibreChat/pull/480)
+- docs update by [@fuegovic](https://github.com/fuegovic) in [#508](https://github.com/danny-avila/LibreChat/pull/508)
+- Create HetznerUbuntuSetup.md by [@heathriel](https://github.com/heathriel) in [#492](https://github.com/danny-avila/LibreChat/pull/492)
+- docs: fix/update by [@fuegovic](https://github.com/fuegovic) in [#525](https://github.com/danny-avila/LibreChat/pull/525)
+
+## **Tests and Refactor**:
+
+- test: frontend jest ci/cd & minor fixes post-release by [@danny-avila](https://github.com/danny-avila) in [#478](https://github.com/danny-avila/LibreChat/pull/478)
+- refactor: Settings, General Tab & DialogTemplate to TS, Fix Conversation Clearing Bug, Add Tests by [@danny-avila](https://github.com/danny-avila) in [#485](https://github.com/danny-avila/LibreChat/pull/485)
+- tests(api): refactor to mock database and network operations by [@danny-avila](https://github.com/danny-avila) in [#494](https://github.com/danny-avila/LibreChat/pull/494)
+
+## **Docker and Dev Environment**:
+
+- Change prepare script to not run in CI mode and remove --ignore-scripts flag from workflow by [@danorlando](https://github.com/danorlando) in [#491](https://github.com/danny-avila/LibreChat/pull/491)
+- Update .dockerignore by [@thunderbug1](https://github.com/thunderbug1) in [#510](https://github.com/danny-avila/LibreChat/pull/510)
+- fix(nodemon): will now follow nodemonConfig in package file by [@danny-avila](https://github.com/danny-avila) in [#514](https://github.com/danny-avila/LibreChat/pull/514)
+- fully dockerized development with VS-code devcontainers by [@thunderbug1](https://github.com/thunderbug1) in [#524](https://github.com/danny-avila/LibreChat/pull/524)
+- Update stable_diffusion.md by [@thunderbug1](https://github.com/thunderbug1) in [#523](https://github.com/danny-avila/LibreChat/pull/523)
+- Update docker, Minor Styling fix by [@danny-avila](https://github.com/danny-avila) in [#528](https://github.com/danny-avila/LibreChat/pull/528)
+
+## **New Contributors**:
+
+- [@thunderbug1](https://github.com/thunderbug1) made their first contribution in [#510](https://github.com/danny-avila/LibreChat/pull/510)
+- [@heathriel](https://github.com/heathriel) made their first contribution in [#492](https://github.com/danny-avila/LibreChat/pull/492)
+
+> **Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.5.0...v0.5.1](https://github.com/danny-avila/LibreChat/compare/v0.5.0...v0.5.1)
diff --git a/pages/changelog/v0.5.2.mdx b/pages/changelog/v0.5.2.mdx
new file mode 100644
index 0000000..b4f4215
--- /dev/null
+++ b/pages/changelog/v0.5.2.mdx
@@ -0,0 +1,52 @@
+---
+date: 2023/06/27
+title: 🚀 LibreChat v0.5.2
+description: Functions Agent, OpenID , Docker Updates...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+**Features:**
+
+- feat(Functions Agent): use official langchain function executor/agent for better output handling by [@danny-avila](https://github.com/danny-avila) in [#538](https://github.com/danny-avila/LibreChat/pull/538)
+- feat(Plugins): change default agent to functions and skip completion by [@danny-avila](https://github.com/danny-avila) in [#544](https://github.com/danny-avila/LibreChat/pull/544)
+ - **This is the most token-efficient method of using plugins.** Docs on how to write plugins as functions coming soon.
+- OpenID Authentication by @bsu3338 in [#495](https://github.com/danny-avila/LibreChat/pull/495)
+
+**Build and Docker Updates:**
+
+- build(docker-compose.yml): change the image name to librechat by [@danny-avila](https://github.com/danny-avila) in [#530](https://github.com/danny-avila/LibreChat/pull/530)
+- [#531](https://github.com/danny-avila/LibreChat/pull/531): Create container.yml: build and push docker image upon tagging by @jinzishuai in [#536](https://github.com/danny-avila/LibreChat/pull/536)
+- feat: update Dockerfile to include curl by @jinzishuai in [#539](https://github.com/danny-avila/LibreChat/pull/539)
+
+**Style and UX:**
+
+- style: mobile optimizations, use fixed dialogs, and prevent auto-scroll for presets by [@danny-avila](https://github.com/danny-avila) in [#534](https://github.com/danny-avila/LibreChat/pull/534)
+- fix(SubmitButton.jsx): fix padding overlap of textarea by [@danny-avila](https://github.com/danny-avila) in [#540](https://github.com/danny-avila/LibreChat/pull/540)
+
+**Documentation & Logos:**
+
+- Update "logo" README.md by [@fuegovic](https://github.com/fuegovic) in [#535](https://github.com/danny-avila/LibreChat/pull/535)
+- MkDocs for Material by @bsu3338 in [#545](https://github.com/danny-avila/LibreChat/pull/545)
+- Enhanced Documentation: Added Cloudflare and Linode Setup by @Berry-13 in [#549](https://github.com/danny-avila/LibreChat/pull/549)
+- Minor OpenID Documentation Update by @bsu3338 in [#553](https://github.com/danny-avila/LibreChat/pull/553)
+- Add social sites to MkDocs by @bsu3338 in [#554](https://github.com/danny-avila/LibreChat/pull/554)
+
+**Refactoring and Fixes:**
+
+- refactor: update references from chatgpt-clone to LibreChat by [@fuegovic](https://github.com/fuegovic) in [#541](https://github.com/danny-avila/LibreChat/pull/541)
+- fix: [#546](https://github.com/danny-avila/LibreChat/pull/546) issue with closing registration by [@danorlando](https://github.com/danorlando) in [#547](https://github.com/danny-avila/LibreChat/pull/547)
+
+## New Contributors
+
+- [@jinzishuai](https://github.com/jinzishuai) made their first contribution in [#536](https://github.com/danny-avila/LibreChat/pull/536)
+- @bsu3338 made their first contribution in [#495](https://github.com/danny-avila/LibreChat/pull/495)
+- @Berry-13 made their first contribution in [#549](https://github.com/danny-avila/LibreChat/pull/549)
+
+**Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.5.1...v0.5.2](https://github.com/danny-avila/LibreChat/compare/v0.5.1...v0.5.2)
diff --git a/pages/changelog/v0.5.3.mdx b/pages/changelog/v0.5.3.mdx
new file mode 100644
index 0000000..380f2de
--- /dev/null
+++ b/pages/changelog/v0.5.3.mdx
@@ -0,0 +1,51 @@
+---
+date: 2023/07/06
+title: 🚀 LibreChat v0.5.3
+description: Auth, Azure, show/hide panel...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## Features
+
+- Added Github Login. by [@Berry-13](https://github.com/Berry-13) ([#578](https://github.com/danny-avila/LibreChat/pull/578))
+- Integrated Azure OpenAI as a separate Endpoint. by [@danny-avila](https://github.com/danny-avila) ([#532](https://github.com/danny-avila/LibreChat/pull/532))
+- Integrated Frontend/user provided credentials for the Plugins Endpoint. by [@danny-avila](https://github.com/danny-avila) ([#596](https://github.com/danny-avila/LibreChat/pull/596))
+- Developed feature: ChatGPT style show/hide panel button (panel state saved in local storage). by [@dncc89](https://github.com/dncc89) ([#575](https://github.com/danny-avila/LibreChat/pull/575), [#595](https://github.com/danny-avila/LibreChat/pull/595))
+- Enabled LaTeX for formatted math expression outputs. by [@danny-avila](https://github.com/danny-avila) ([#574](https://github.com/danny-avila/LibreChat/pull/574))
+- Prepped Admin panel: Moved data provider to shared package. by [@danorlando](https://github.com/danorlando) ([#582](https://github.com/danny-avila/LibreChat/pull/582))
+- Feat: Save Last Selected Bing Settings. by [@danny-avila](https://github.com/danny-avila) ([#587](https://github.com/danny-avila/LibreChat/pull/587))
+
+## Fixes
+
+- Fixed increase in password max length and acceptance of '-' for username in regex. by [@fuegovic](https://github.com/fuegovic) ([#564](https://github.com/danny-avila/LibreChat/pull/564))
+- Improved UX by Eliminating Screen Flicker in Message Creation. by [@danny-avila](https://github.com/danny-avila) ([#577](https://github.com/danny-avila/LibreChat/pull/577))
+- Fixed Azure Frontend "user_provided" Credentials. by [@danny-avila](https://github.com/danny-avila) ([#587](https://github.com/danny-avila/LibreChat/pull/587))
+- Hot-fix issue related to plugins refactoring, to retain message history and improve completion prompt handling in Plugins. by [@danny-avila](https://github.com/danny-avila) ([#597](https://github.com/danny-avila/LibreChat/pull/597))
+
+## Documentation
+
+- Fully Live Documentation at [https://docs.librechat.ai](https://docs.librechat.ai) by @bsu3338 @fuegovic @mjtechguy ([#568](https://github.com/danny-avila/LibreChat/pull/568))
+- Significant updates and enhancements in Documentation by @fuegovic and @jhcao23 ([#555](https://github.com/danny-avila/LibreChat/pull/555), [#594](https://github.com/danny-avila/LibreChat/pull/594), [#598](https://github.com/danny-avila/LibreChat/pull/598), [#569](https://github.com/danny-avila/LibreChat/pull/569))
+- Added Ngrok Documentation. by [@Berry-13](https://github.com/Berry-13) ([#586](https://github.com/danny-avila/LibreChat/pull/586))
+- Added Cloudflare tunnels documentation. by [@Berry-13](https://github.com/Berry-13) ([#592](https://github.com/danny-avila/LibreChat/pull/592))
+- Updated OpenID Login .env.example. by @bsu3338 ([#563](https://github.com/danny-avila/LibreChat/pull/563))
+
+## General updates
+
+- Refactored Client Classes for easier maintenance and modularity of AI model integrations. by [@danny-avila](https://github.com/danny-avila) ([#532](https://github.com/danny-avila/LibreChat/pull/532), [#591](https://github.com/danny-avila/LibreChat/pull/591))
+- Updated end-to-end tests. ([#579](https://github.com/danny-avila/LibreChat/pull/579))
+- Updated compose file to use auto-tagged GH container image. by [@danny-avila](https://github.com/danny-avila) ([#559](https://github.com/danny-avila/LibreChat/pull/559))
+- Implemented minor fixes. by [@danny-avila](https://github.com/danny-avila) and @danorlando ([#599](https://github.com/danny-avila/LibreChat/pull/599), [#590](https://github.com/danny-avila/LibreChat/pull/590))
+
+## New Contributors
+
+- Warm welcome to @jhcao23 for their first contribution! ([#594](https://github.com/danny-avila/LibreChat/pull/594))
+
+Full Changelog: [https://github.com/danny-avila/LibreChat/compare/v0.5.2...v0.5.3](https://github.com/danny-avila/LibreChat/compare/v0.5.2...v0.5.3)
diff --git a/pages/changelog/v0.5.4.mdx b/pages/changelog/v0.5.4.mdx
new file mode 100644
index 0000000..9186591
--- /dev/null
+++ b/pages/changelog/v0.5.4.mdx
@@ -0,0 +1,54 @@
+---
+date: 2023/07/14
+title: 🚀 LibreChat v0.5.4
+description: Anthropic, localization (i18n)...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+This is a big feature update and introduces Anthropic (Claude) models to the project, which have 100k context!
+
+## ✨ Features
+
+- Integrate Anthropic API. [#552](https://github.com/danny-avila/LibreChat/pull/552) by [@danorlando](https://github.com/danorlando) [@danny-avila](https://github.com/danny-avila)
+- Allow changing settings/presets mid-conversation for Anthropic, Google, OpenAI. [#636](https://github.com/danny-avila/LibreChat/pull/636) by [@danny-avila](https://github.com/danny-avila)
+- Generate Bing's title using Bing. [#612](https://github.com/danny-avila/LibreChat/pull/612) by [@HyunggyuJang](https://github.com/HyunggyuJang)
+- Implement localization (i18n) support. [#557](https://github.com/danny-avila/LibreChat/pull/557) by [@NoahDragon](https://github.com/NoahDragon)
+- Integrate Discord login. [#615](https://github.com/danny-avila/LibreChat/pull/615) by [@Berry-13](https://github.com/Berry-13)
+- Add feature to disable social logins, warning message if social login is disabled (default behavior). [#615](https://github.com/danny-avila/LibreChat/pull/615) [#635](https://github.com/danny-avila/LibreChat/pull/635)
+- Meilisearch: Add batch indexing functionality. [#606](https://github.com/danny-avila/LibreChat/pull/606) by [@HyunggyuJang](https://github.com/HyunggyuJang)
+
+## 🔧 Fixes
+
+- Improve Meilisearch syncing [#600](https://github.com/danny-avila/LibreChat/pull/600) by [@danny-avila](https://github.com/danny-avila)
+- Use user-provided OpenAI credential for browser plugin embedding. [#603](https://github.com/danny-avila/LibreChat/pull/603) by [@danny-avila](https://github.com/danny-avila)
+- Fix conversation titling. [#637](https://github.com/danny-avila/LibreChat/pull/637) by [@danny-avila](https://github.com/danny-avila)
+- Show censored message and fix toneStyle UI bug for BingAI. [#644](https://github.com/danny-avila/LibreChat/pull/644) by [@danny-avila](https://github.com/danny-avila)
+- Implement minor UI changes. [#643](https://github.com/danny-avila/LibreChat/pull/643) by [@techwithanirudh](https://github.com/techwithanirudh)
+
+## 📗 Documentation
+
+- Update Docker installation and configuration guide. [#601](https://github.com/danny-avila/LibreChat/pull/601) by [@ywkim](https://github.com/ywkim)
+- Update docker_install.md with new container URL. [#604](https://github.com/danny-avila/LibreChat/pull/604) by [@danny-avila](https://github.com/danny-avila)
+- Update documentation, fix some i8n issues, add Italian translation, and create a more realistic "chat.openai.com" login page. [#634](https://github.com/danny-avila/LibreChat/pull/634) by [@Berry-13](https://github.com/Berry-13)
+- Add instructions to deploy on render.com. [#638](https://github.com/danny-avila/LibreChat/pull/638) by [@fuegovic](https://github.com/fuegovic)
+- Fix typo in plugin docs. [#607](https://github.com/danny-avila/LibreChat/pull/607) by [@jhcao23](https://github.com/jhcao23)
+
+## ⚙️ General Updates
+
+- add multiple endpoint icons as SVG. [#600](https://github.com/danny-avila/LibreChat/pull/600) by [@danny-avila](https://github.com/danny-avila)
+- Update Bing chat icon. [#627](https://github.com/danny-avila/LibreChat/pull/627) by [@fuegovic](https://github.com/fuegovic)
+- Add linter step to the backend review workflow. [#625](https://github.com/danny-avila/LibreChat/pull/625) by [@danny-avila](https://github.com/danny-avila)
+
+## New Contributors
+
+- [@ywkim](https://github.com/ywkim) made their first contribution in [#601](https://github.com/danny-avila/LibreChat/pull/601)
+- [@NoahDragon](https://github.com/NoahDragon) made their first contribution in [#557](https://github.com/danny-avila/LibreChat/pull/557)
+
+**Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.5.3...v0.5.4](https://github.com/danny-avila/LibreChat/compare/v0.5.3...v0.5.4)
diff --git a/pages/changelog/v0.5.5.mdx b/pages/changelog/v0.5.5.mdx
new file mode 100644
index 0000000..1369dd5
--- /dev/null
+++ b/pages/changelog/v0.5.5.mdx
@@ -0,0 +1,36 @@
+---
+date: 2023/07/16
+title: 🚀 LibreChat v0.5.5
+description: ChatGPT Plugins...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+This update introduces ChatGPT Plugins (OpenAPI specs) for use with our Plugins endpoint! One of the main use cases we gain from integrating them to LibreChat is to allow use of official plugins with gpt-3.5 models, and without ChatGPT Plus. Read the [full documentation](https://github.com/danny-avila/LibreChat/blob/main/docs/features/plugins/chatgpt_plugins_openapi.md) to learn how to add/configure them, although I've included some.
+
+> Note: LibreChat's implementation is not 1:1 with ChatGPT's, depends on the [LangChainJS library](https://github.com/hwchase17/langchainjs), and is a working first pass. For more disclaimers on the limitations, [read here](https://github.com/danny-avila/LibreChat/blob/main/docs/features/plugins/chatgpt_plugins_openapi.md#disclaimers)
+
+
+
+## ✨ Features
+
+- feat: ChatGPT Plugins/OpenAPI specs for Plugins Endpoint by [@danny-avila](https://github.com/danny-avila) in [#620](https://github.com/danny-avila/LibreChat/pull/620)
+ - [Full documentation on this update](https://github.com/danny-avila/LibreChat/blob/main/docs/features/plugins/chatgpt_plugins_openapi.md)
+- style (Nav) : improve Nav transition for open/close by [@danny-avila](https://github.com/danny-avila) in [#652](https://github.com/danny-avila/LibreChat/pull/652)
+- feat (Meilisearch): disable anonymized analytics telemetry by default by [@danny-avila](https://github.com/danny-avila) in [#647](https://github.com/danny-avila/LibreChat/pull/647)
+
+## 🔧 Fixes
+
+- fix(Settings.jsx): fix Settings inputs losing focus to main textarea from 0.5.4 update by [@danny-avila](https://github.com/danny-avila) in [#646](https://github.com/danny-avila/LibreChat/pull/646)
+- fix: typo when including proxy for langchain by [@danny-avila](https://github.com/danny-avila) in [#653](https://github.com/danny-avila/LibreChat/pull/653)
+- fix: sharpness in Bing Chat icon by [@fuegovic](https://github.com/fuegovic) in [#648](https://github.com/danny-avila/LibreChat/pull/648)
+
+We are always looking for contributors at any skill level. **[Here's our roadmap,](https://github.com/users/danny-avila/projects/2)** see if there's anything you may want to tackle, or you can simply ask how you can contribute on **[discord](https://discord.librechat.ai/)**, especially if you have new ideas. This is a great project to contribute to if you've never contributed to an open source project before
+
+**Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.5.4...v0.5.5](https://github.com/danny-avila/LibreChat/compare/v0.5.4...v0.5.5)
diff --git a/pages/changelog/v0.5.6.mdx b/pages/changelog/v0.5.6.mdx
new file mode 100644
index 0000000..c71d0ab
--- /dev/null
+++ b/pages/changelog/v0.5.6.mdx
@@ -0,0 +1,66 @@
+---
+date: 2023/07/28
+title: 🚀 LibreChat v0.5.6
+description: update script, BIC, Enhanced MongoDB-MeiliSearch Syncing ...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## ✨ New Features
+
+- Add update script for clean update installations (supports local npm and docker) by [@danny-avila](https://github.com/danny-avila) and [@fuegovic](https://github.com/fuegovic) in [#673](https://github.com/danny-avila/LibreChat/pull/673) [#712](https://github.com/danny-avila/LibreChat/pull/712)
+ - After you update to the latest release, use `npm run update` in the root folder to update your local/docker builds.
+ - If you are on linux and need to use `sudo` for docker, run `npm run update:sudo`
+- Use Bing Image Creator (working on Chrome, MS Edge browsers) by [@fuegovic](https://github.com/fuegovic) in [#668](https://github.com/danny-avila/LibreChat/pull/668)
+- Added a leaner, alternative docker strategy and deployment compose file by [@danny-avila](https://github.com/danny-avila) in [#719](https://github.com/danny-avila/LibreChat/pull/719)
+ - to use it, run `docker-compose -f ./deploy-compose.yml up` from the root of the project directory.
+- Add more plugins to the Plugin store by [@fuegovic](https://github.com/fuegovic) in [#709](https://github.com/danny-avila/LibreChat/pull/709)
+- Build dev images on changes to api/client or manual trigger by [@danny-avila](https://github.com/danny-avila) in [#676](https://github.com/danny-avila/LibreChat/pull/676) [#715](https://github.com/danny-avila/LibreChat/pull/715) [#716](https://github.com/danny-avila/LibreChat/pull/716) [#717](https://github.com/danny-avila/LibreChat/pull/717) [#720](https://github.com/danny-avila/LibreChat/pull/720)
+- Enhanced MongoDB-MeiliSearch Syncing by [@danny-avila](https://github.com/danny-avila) in [#722](https://github.com/danny-avila/LibreChat/pull/722)
+- Fetch api for model list when `OPENAI_MODELS` env variable is not specified (useful for ChimeraGPT) by [@danny-avila](https://github.com/danny-avila) in [LibreChat](https://github.com/danny-avila/LibreChat)
+- Reverse Proxy support for Plugins by [@danny-avila](https://github.com/danny-avila) in [#691](https://github.com/danny-avila/LibreChat/pull/691)
+
+## 🐛 Fixes
+
+- Resolve null pointer exception in tokenizer management by [@ywkim](https://github.com/ywkim) in [#689](https://github.com/danny-avila/LibreChat/pull/689)
+- Oauth fixes for Cognito (OpenID) by [@Donavan](https://github.com/Donavan) in [#686](https://github.com/danny-avila/LibreChat/pull/686)
+- TypeError Issue in `db/indexSync.js`, and Search Pagination by [@danny-avila](https://github.com/danny-avila) in [#722](https://github.com/danny-avila/LibreChat/pull/722)
+- Clear convo bug from General Settings by [@danny-avila](https://github.com/danny-avila) in [#710](https://github.com/danny-avila/LibreChat/pull/710)
+
+## 📝 Documentation
+
+- Add "chatgpt_plugins_openapi.md" to readme.md and mkdocs by [@fuegovic](https://github.com/fuegovic) in [#655](https://github.com/danny-avila/LibreChat/pull/655)
+- Updates by [@fuegovic](https://github.com/fuegovic) in [#662](https://github.com/danny-avila/LibreChat/pull/662)
+- Add installation guide for free AI APIs (ChimeraGPT) by [@danny-avila](https://github.com/danny-avila) [@Berry-13](https://github.com/Berry-13) in [#692](https://github.com/danny-avila/LibreChat/pull/692) [#707](https://github.com/danny-avila/LibreChat/pull/707)
+- Improved ngrok installation and enhanced user_auth_system.md by [@Berry-13](https://github.com/Berry-13) in [#721](https://github.com/danny-avila/LibreChat/pull/721)
+
+## 🌐 Internationalization
+
+- Add localization support for endpoint pages components by [@NoahDragon](https://github.com/NoahDragon) in [#667](https://github.com/danny-avila/LibreChat/pull/667)
+- Italian localization support for endpoint pages components by [@Berry-13](https://github.com/Berry-13) in [#687](https://github.com/danny-avila/LibreChat/pull/687) [#697](https://github.com/danny-avila/LibreChat/pull/697)
+- Support localization for Nav components by [@NoahDragon](https://github.com/NoahDragon) in [#688](https://github.com/danny-avila/LibreChat/pull/688)
+- Language files: Spanish translation and Portuguese corrections for PR by [@itzraiss](https://github.com/itzraiss) in [#694](https://github.com/danny-avila/LibreChat/pull/694)
+
+## ⚙️ Other Changes
+
+- Add version number in UI by @fuegovic in [#704](https://github.com/danny-avila/LibreChat/pull/704)
+- Improve passport strategy handling in async/await manner by @danny-avila in [#682](https://github.com/danny-avila/LibreChat/pull/682)
+- Add a restart to melisearch in docker-compose.yml by @Donavan in [#684](https://github.com/danny-avila/LibreChat/pull/684)
+- Update langchain dependency to version 0.0.114 by @danny-avila in [#669](https://github.com/danny-avila/LibreChat/pull/669)
+- Organize the getting started menu by @Berry-13 in [#708](https://github.com/danny-avila/LibreChat/pull/708)
+- Nav/Conversation imports, add linting rules by @danny-avila in [#710](https://github.com/danny-avila/LibreChat/pull/710)
+- Remove data-provider and use npm package instead by @danny-avila in [#713](https://github.com/danny-avila/LibreChat/pull/713)
+- Update placeholder text for promptPrefix/system message by @danny-avila in [#656](https://github.com/danny-avila/LibreChat/pull/656)
+
+## New Contributors
+
+- @Donavan made their first contribution in [#684](https://github.com/danny-avila/LibreChat/pull/684)
+- @itzraiss made their first contribution in [#694](https://github.com/danny-avila/LibreChat/pull/694)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.5.5...v0.5.6
diff --git a/pages/changelog/v0.5.7.mdx b/pages/changelog/v0.5.7.mdx
new file mode 100644
index 0000000..223d17f
--- /dev/null
+++ b/pages/changelog/v0.5.7.mdx
@@ -0,0 +1,62 @@
+---
+date: 2023/08/09
+title: 🚀 LibreChat v0.5.7
+description: Many UI improvements, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## ✨ New Features
+
+- Settings/Presets UI Restructure, convert many files to TS by [@danny-avila](https://github.com/danny-avila) in [#740](https://github.com/danny-avila/LibreChat/pull/740)
+ - **This release includes many UI improvements** (200+ files changed), see the PR for all the exact changes
+ - In general, the UI is cleaner, matches the basic style of the official site more closely
+ - Special attention was given to dialogs/modals across all screen sizes and are now drastically optimized from before.
+ - Developer experience was also greatly improved, not least of all with type safety, but Endpoint settings are now extremely modular from what they were before, making existing code much more manageable, and future endpoint integrations much easier
+ - A majority of the frontend JS files were converted to TS, only a couple dozen left to go, and this project will be majority Typescript!
+- match toggle Nav animation to official site by [@danny-avila](https://github.com/danny-avila) in [#755](https://github.com/danny-avila/LibreChat/pull/755)
+- match scroll behavior and button styles more closely to official site [#761](https://github.com/danny-avila/LibreChat/pull/761)
+- Password reset via email by [@danorlando](https://github.com/danorlando) in [#730](https://github.com/danny-avila/LibreChat/pull/730)
+- Add a dropdown list in setting to allow change language. by [@NoahDragon](https://github.com/NoahDragon) in [#726](https://github.com/danny-avila/LibreChat/pull/726)
+- Add SearchBar to Nav by [@techwithanirudh](https://github.com/techwithanirudh) in [#760](https://github.com/danny-avila/LibreChat/pull/760)
+
+## 🌐 Internationalization
+
+- German translation by [@XHyperDEVX](https://github.com/XHyperDEVX) in [#772](https://github.com/danny-avila/LibreChat/pull/772)
+- French translation by [@fuegovic](https://github.com/fuegovic) in [#778](https://github.com/danny-avila/LibreChat/pull/778)
+
+## 🔧 Fixes
+
+- Fixed syntax error Translation.tsx by [@Berry-13](https://github.com/Berry-13) in [#731](https://github.com/danny-avila/LibreChat/pull/731)
+- Allow setting username in openIdStrategy by [@AndrejG82](https://github.com/AndrejG82) in [#744](https://github.com/danny-avila/LibreChat/pull/744)
+- Fixed issues surfaced from major refactor by [@danny-avila](https://github.com/danny-avila) in [#757](https://github.com/danny-avila/LibreChat/pull/757) [#764](https://github.com/danny-avila/LibreChat/pull/764) [#765](https://github.com/danny-avila/LibreChat/pull/765) [#766](https://github.com/danny-avila/LibreChat/pull/766)
+
+## 📝 Documentation
+
+- How-to on adding a language by [@Berry-13](https://github.com/Berry-13) in [#732](https://github.com/danny-avila/LibreChat/pull/732)
+- How-to setup on adding email service for password reset by [@Berry-13](https://github.com/Berry-13) in [#737](https://github.com/danny-avila/LibreChat/pull/737)
+- Added Azure Instructions (Terraform) to Cloud Deployments Guide by [@thunderbug1](https://github.com/thunderbug1) in [#738](https://github.com/danny-avila/LibreChat/pull/738)
+- General update by [@fuegovic](https://github.com/fuegovic) in [#781](https://github.com/danny-avila/LibreChat/pull/781)
+
+## ⚙️ Other Changes
+
+- Best practice for typing by [@danorlando](https://github.com/danorlando) in [#763](https://github.com/danny-avila/LibreChat/pull/763)
+- Use zod for better type safety by [@danny-avila](https://github.com/danny-avila) in [#761](https://github.com/danny-avila/LibreChat/pull/761)
+- Update index.html to replace ChatGPT Clone with LibreChat by [@fuegovic](https://github.com/fuegovic) in [#724](https://github.com/danny-avila/LibreChat/pull/724)
+- chore: add back data-provider to monorepo by [@danny-avila](https://github.com/danny-avila) in [#728](https://github.com/danny-avila/LibreChat/pull/728)
+- Plugins: remove initial "I'm thinking" step to make plugin use appear smarter/seamless. by [@danny-avila](https://github.com/danny-avila) in [#729](https://github.com/danny-avila/LibreChat/pull/729)
+- Added Integration workflow, which will help detect app-wide breaking changes by [@danny-avila](https://github.com/danny-avila) in [#771](https://github.com/danny-avila/LibreChat/pull/771)
+- Resolved several Vite warnings that would appear on frontend building by [@danny-avila](https://github.com/danny-avila) in [#779](https://github.com/danny-avila/LibreChat/pull/779)
+
+## New Contributors
+
+- [@AndrejG82](https://github.com/AndrejG82) made their first contribution in [#744](https://github.com/danny-avila/LibreChat/pull/744)
+- [@XHyperDEVX](https://github.com/XHyperDEVX) made their first contribution in [#772](https://github.com/danny-avila/LibreChat/pull/772)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.5.6...v0.5.7
diff --git a/pages/changelog/v0.5.8.mdx b/pages/changelog/v0.5.8.mdx
new file mode 100644
index 0000000..d9125ab
--- /dev/null
+++ b/pages/changelog/v0.5.8.mdx
@@ -0,0 +1,75 @@
+---
+date: 2023/08/28
+title: 🚀 LibreChat v0.5.8
+description: Continue Regenerating, Edit Messages, Plugins Improvements, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## ✨ New Features
+
+- GPT/Anthropic: Continue Regenerating & Generation Buttons by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/808)
+ - [Medium article](https://medium.com/@daniel-avila/reverse-engineering-chatgpt-the-continue-generating-function-5cb4194b0ea6) on how this works
+- Azure Cognitive Search Plugin by [@zentooo](https://github.com/danny-avila/LibreChat/pull/815)
+- Edit AI Messages, Edit Messages in Place 📝 by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/825)
+- facebook login by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/820)
+- Add Code Interpreter Plugin by [@ronith256](https://github.com/danny-avila/LibreChat/pull/837)
+ - This is one of a few plugins that "interpret" code as a plugin, not as a standalone mode like for ChatGPT
+ - A CodeInterpreter "mode" is in the project timeline after file support is fully developed.
+- Show Bing Scores by [@psarno](https://github.com/danny-avila/LibreChat/pull/814)
+- Disable Registration for Social logins by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/813)
+- Plugins: Improve OpenAPI handling, Show Multiple Plugins, & Other Improvements by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/845)
+
+## 🌐 Internationalization
+
+- Russian Translation by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/830)
+- Polish Translation by [@fuegovic](https://github.com/danny-avila/LibreChat/pull/840)
+- Update Chinese Translation by [@ztc1997](https://github.com/danny-avila/LibreChat/pull/846)
+
+## 🔧 Fixes
+
+- Scripts: remove --volumes flag from down commands by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/784)
+- Update username rules by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/787)
+- Corrected Registration Validation, Case-Insensitive Variable Handling, Playwright workflow by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/805)
+- CodeBlock.tsx fix copy-to-clipboard functionality on some browsers by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/806)
+- Reset password error by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/810)
+- PluginsClient.js fix ChatOpenAI Azure Config Issue by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/812)
+- HoverButtons light/dark styling to match official site by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/821)
+- Update social profile picture by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/792)
+- BingAI markdown and error formatting for final stream response by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/829)
+- Registration Make Username optional by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/831)
+- Fix Meilisearch error and refactor server index.js file by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/832)
+
+## 📝 Documentation
+
+- DigitalOcean Deployment by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/783)
+- Update chimeragpt docs by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/826)
+- Added podman installation instructions. Updated dockerfile to stub env by [@f1yn](https://github.com/danny-avila/LibreChat/pull/819)
+- Minor Updates by [@fuegovic](https://github.com/danny-avila/LibreChat/pull/841)
+- Showcase Third-party LibreChat "tools" in docs by [@fuegovic](https://github.com/danny-avila/LibreChat/pull/848)
+
+## ⚙️ Other Changes
+
+- Un-expose mongodb ports in compose files by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/786)
+- Comment out meilisearch ports in compose files by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/807)
+- Translation Fixes, Lint Error Corrections, and Additional Translations by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/788)
+- Convert 'export to screenshot' logic to TSX and use html-to-image by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/809)
+- Refactor(MessageHandler -> useServerStream): TS Conversion and Custom Hook for Server Streaming by [@danny-avila](https://github.com/danny-avila/LibreChat/pull/818)
+- Style(Dialog): Improved Close Button ("X") position by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/824)
+- style(NavLinks): Improved NavLinks animation and scale by [@Berry-13](https://github.com/danny-avila/LibreChat/pull/843)
+
+## New Contributors
+
+- [@psarno](https://github.com/psarno) made their first contribution in [#814](https://github.com/danny-avila/LibreChat/pull/814)
+- [@zentooo](https://github.com/zentooo) made their first contribution in [#815](https://github.com/danny-avila/LibreChat/pull/815)
+- [@f1yn](https://github.com/f1yn) made their first contribution in [#819](https://github.com/danny-avila/LibreChat/pull/819)
+- [@ztc1997](https://github.com/ztc1997) made their first contribution in [#846](https://github.com/danny-avila/LibreChat/pull/846)
+- [@ronith256](https://github.com/ronith256) made their first contribution in [#837](https://github.com/danny-avila/LibreChat/pull/837)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.5.7...v0.5.8
diff --git a/pages/changelog/v0.5.9.mdx b/pages/changelog/v0.5.9.mdx
new file mode 100644
index 0000000..090188a
--- /dev/null
+++ b/pages/changelog/v0.5.9.mdx
@@ -0,0 +1,88 @@
+---
+date: 2023/09/18
+title: 🚀 LibreChat v0.5.9
+description: Refresh Token, Automatic Moderation System, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+- **To update:** run `npm run update` from the project directory for a clean installation.
+ - **Prerequisites:** git and npm installed
+ - **Recommended:** clear localStorage and cookies
+
+### ⚠️ Breaking Change
+
+It's now required to set a **JWT_REFRESH_SECRET** in your .env file as of [#927](https://github.com/danny-avila/LibreChat/pull/927)
+
+> It's also recommended you update your `SESSION_EXPIRY` to a lower value and set `REFRESH_TOKEN_EXPIRY`
+> Default values: session expiry: 15 minutes, refresh token expiry: 7 days
+> _See **[.env.example](https://github.com/danny-avila/LibreChat/blob/1378eb5097b666a4add27923e47be73919957e5b/.env.example#L314)** for exact values in millisecond calculation_
+
+## 🛠️ New Features
+
+- 🛡️ Refresh Token for Improved Session Security by [@bsu3338](https://github.com/bsu3338) & [@danny-avila](https://github.com/danny-avila) in [#927](https://github.com/danny-avila/LibreChat/pull/927)
+- 🛡️ Message Rate Limiters, Violation Logging, & Ban System 🔨 by [@danny-avila](https://github.com/danny-avila) in [#903](https://github.com/danny-avila/LibreChat/pull/903)
+- 🛡️ Stricter AI Message Rendering to Prevent XSS by [@danny-avila](https://github.com/danny-avila) in [#893](https://github.com/danny-avila/LibreChat/pull/893)
+- 🛡️ Encrypt & Expire User Provided Keys, Rate Limiting by [@danny-avila](https://github.com/danny-avila) in [#874](https://github.com/danny-avila/LibreChat/pull/874)
+- OpenRouter Support & Improve Model Fetching ⇆ by [@danny-avila](https://github.com/danny-avila) in [#936](https://github.com/danny-avila/LibreChat/pull/936)
+- Add Confirm Dialog to Conversation Delete Button by [@Berry-13](https://github.com/Berry-13) in [#875](https://github.com/danny-avila/LibreChat/pull/875)
+- Bun Support 🥟 by [@danny-avila](https://github.com/danny-avila) in [#907](https://github.com/danny-avila/LibreChat/pull/907)
+- Icons for Chat Identification by [@Berry-13](https://github.com/Berry-13) in [#879](https://github.com/danny-avila/LibreChat/pull/879)
+- CodeBrew Plugin by [@Falven](https://github.com/Falven) in [#931](https://github.com/danny-avila/LibreChat/pull/931)
+- Auto-detect Browser language by [@Berry-13](https://github.com/Berry-13) in [#947](https://github.com/danny-avila/LibreChat/pull/947)
+
+## 🌐 Internationalization
+
+- Update Zh.tsx by [@yuanmu0814](https://github.com/yuanmu0814) in [#862](https://github.com/danny-avila/LibreChat/pull/862)
+- Italian Translation for User Provided Keys and Data Controls by [@Berry-13](https://github.com/Berry-13) in [#886](https://github.com/danny-avila/LibreChat/pull/886)
+- Updated Portuguese, Spanish translations by [@itzraiss](https://github.com/itzraiss) in [#857](https://github.com/danny-avila/LibreChat/pull/857), [#876](https://github.com/danny-avila/LibreChat/pull/876), [#888](https://github.com/danny-avila/LibreChat/pull/888), [#898](https://github.com/danny-avila/LibreChat/pull/898)
+- Japanese Translation by [@forestsource](https://github.com/forestsource) in [#895](https://github.com/danny-avila/LibreChat/pull/895)
+- Swedish Translation by [@yoHasse](https://github.com/yoHasse) in [#940](https://github.com/danny-avila/LibreChat/pull/940)
+
+## 🔧 Fixes
+
+- Match OpenAI Token Counting Strategy 🪙 by [@danny-avila](https://github.com/danny-avila) in [#945](https://github.com/danny-avila/LibreChat/pull/945)
+- Add More Translation Text & Minor UI Fixes by [@Berry-13](https://github.com/Berry-13) in [#861](https://github.com/danny-avila/LibreChat/pull/861)
+- Fix Docker Install Guide Broken Link by [@finnless](https://github.com/finnless) in [#877](https://github.com/danny-avila/LibreChat/pull/877)
+- Fix Various Broken Docker_compose_install.md Links in Docs by [@GovernmentPlates](https://github.com/GovernmentPlates) in [#882](https://github.com/danny-avila/LibreChat/pull/882)
+- Devcontainer Image and Networking by [@finnless](https://github.com/finnless) in [#891](https://github.com/danny-avila/LibreChat/pull/891)
+- Aborted Messages Not Saving by [@danny-avila](https://github.com/danny-avila) in [#894](https://github.com/danny-avila/LibreChat/pull/894)
+- Duplicate Key Error in Translation by [@danny-avila](https://github.com/danny-avila) in [#906](https://github.com/danny-avila/LibreChat/pull/906)
+- Module Resolution for Create-user Script 👤 by [@danny-avila](https://github.com/danny-avila) in [#935](https://github.com/danny-avila/LibreChat/pull/935)
+- Only Include Fields Defined by API Reference in Payload by [@danny-avila](https://github.com/danny-avila) in [#933](https://github.com/danny-avila/LibreChat/pull/933), [#938](https://github.com/danny-avila/LibreChat/pull/938)
+- Allow Latin-based Special Characters in Username by [@danny-avila](https://github.com/danny-avila) in [#969](https://github.com/danny-avila/LibreChat/pull/969)
+
+## 📝 Documentation
+
+- Make_your_own.md Formatting Fix for Mkdocs by [@danny-avila](https://github.com/danny-avila) in [#855](https://github.com/danny-avila/LibreChat/pull/855)
+- Hugging Face Deployment by [@fuegovic](https://github.com/fuegovic) in [#867](https://github.com/danny-avila/LibreChat/pull/867)
+- Free API Documentation Update by [@Berry-13](https://github.com/Berry-13) in [#902](https://github.com/danny-avila/LibreChat/pull/902)
+- Update Huggingface.md by [@fuegovic](https://github.com/fuegovic) in [#942](https://github.com/danny-avila/LibreChat/pull/942)
+
+## ⚙️ Other Changes
+
+- Enhance DB Schemas/Controllers and Improve E2E Tests by [@danny-avila](https://github.com/danny-avila) in [#966](https://github.com/danny-avila/LibreChat/pull/966)
+- Hide Source Map from Client by [@danny-avila](https://github.com/danny-avila) in [#905](https://github.com/danny-avila/LibreChat/pull/905)
+- Update: Install Script by [@fuegovic](https://github.com/fuegovic) in [#858](https://github.com/danny-avila/LibreChat/pull/858)
+- Bump Packages, Fix Langchain Peer Dep Issue by [@danny-avila](https://github.com/danny-avila) in [#883](https://github.com/danny-avila/LibreChat/pull/883)
+- Add Zod to All Workspaces as is Used Individually by Each by [@danny-avila](https://github.com/danny-avila) in [#884](https://github.com/danny-avila/LibreChat/pull/884)
+- Bump Data-provider by [@danny-avila](https://github.com/danny-avila) in [#885](https://github.com/danny-avila/LibreChat/pull/885)
+- Organize Root Directory Files 🧹 by [@danny-avila](https://github.com/danny-avila) in [#887](https://github.com/danny-avila/LibreChat/pull/887)
+- Remove Unused Dependencies 🧹 by [@danny-avila](https://github.com/danny-avila) in [#939](https://github.com/danny-avila/LibreChat/pull/939)
+- Refactor(.env.example) by [@Berry-13](https://github.com/Berry-13) in [#880](https://github.com/danny-avila/LibreChat/pull/880)
+- Initialize Ban Env Vars in JestSetup by [@danny-avila](https://github.com/danny-avila) in [#937](https://github.com/danny-avila/LibreChat/pull/937)
+
+## New Contributors
+
+- [@yuanmu0814](https://github.com/yuanmu0814) made their first contribution in [#862](https://github.com/danny-avila/LibreChat/pull/862)
+- [@finnless](https://github.com/finnless) made their first contribution in [#877](https://github.com/danny-avila/LibreChat/pull/877)
+- [@GovernmentPlates](https://github.com/GovernmentPlates) made their first contribution in [#882](https://github.com/danny-avila/LibreChat/pull/882)
+- [@forestsource](https://github.com/forestsource) made their first contribution in [#895](https://github.com/danny-avila/LibreChat/pull/895)
+- [@Falven](https://github.com/Falven) made their first contribution in [#931](https://github.com/danny-avila/LibreChat/pull/931)
+- [@yoHasse](https://github.com/yoHasse) made their first contribution in [#940](https://github.com/danny-avila/LibreChat/pull/940)
diff --git a/pages/changelog/v0.6.0-breaking-changes.mdx b/pages/changelog/v0.6.0-breaking-changes.mdx
new file mode 100644
index 0000000..c4c9846
--- /dev/null
+++ b/pages/changelog/v0.6.0-breaking-changes.mdx
@@ -0,0 +1,18 @@
+---
+date: 2023/10/23
+title: ⚠️ Breaking Changes v0.6.0+
+description: Breaking Changes for the v0.6.0+ release of LibreChat
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+
+
+- **Meilisearch Update**: Following the recent update to Meilisearch, an unused folder named `meili_data` may be present in your root directory. This folder is no longer required and can be **safely deleted** to free up space.
+- **New Indexing Data Location**: The indexing data has been relocated. It will now be stored in a new folder named `meili_data_v1.x`, where `1.x` represents the version of Meilisearch. For instance, with the current Meilisearch version `1.5`, the folder will be `meili_data_v1.5`.
+
+
diff --git a/pages/changelog/v0.6.0.mdx b/pages/changelog/v0.6.0.mdx
new file mode 100644
index 0000000..dc0e77b
--- /dev/null
+++ b/pages/changelog/v0.6.0.mdx
@@ -0,0 +1,78 @@
+---
+date: 2023/10/22
+title: 🚀 LibreChat v0.6.0
+description: Summarize, Titling Model, Token Usage Tracking & Optional Balance, and more...
+ogImage: /images/changelog/v0.6.0.png
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## ✨ New Features
+
+- Summarize messages in longer conversations (ConversationSummaryBufferMemory) by [@danny-avila](https://github.com/danny-avila) in [#973](https://github.com/danny-avila/LibreChat/pull/973)
+ > (Optional/Experimental) Enable message summarization by setting the following in your .env file:
+ > Note: this may affect response time when a summary is being generated. This saves you tokens in conversations with a lot of messages
+ > `OPENAI_SUMMARIZE=true`
+- Add Option to Disable Titling, Config Titling Model, and Title Prompt Improvements by [@danny-avila](https://github.com/danny-avila) in [#977](https://github.com/danny-avila/LibreChat/pull/977)
+- GPT-3.5-Turbo-Instruct Support & Model Fetching Refactor by [@danny-avila](https://github.com/danny-avila) in [#981](https://github.com/danny-avila/LibreChat/pull/981)
+- Accurate Token Usage Tracking & Optional Balance by [@danny-avila](https://github.com/danny-avila) in [#1018](https://github.com/danny-avila/LibreChat/pull/1018)
+ > Read more about the [Token Usage/Balance feature here](https://docs.librechat.ai/features/token_usage.html)
+- Plugin Search Functionality by [@walbercardoso](https://github.com/walbercardoso) in [#1007](https://github.com/danny-avila/LibreChat/pull/1007)
+- Initial Redis Support for Scalability by [@danny-avila](https://github.com/danny-avila) in [#1039](https://github.com/danny-avila/LibreChat/pull/1039)
+- New User setting to Auto-Scroll to Bottom of Conversation by [@Berry-13](https://github.com/Berry-13) in [#1049](https://github.com/danny-avila/LibreChat/pull/1049)
+
+## 🌐 Internationalization
+
+- Update Zh.tsx by [@liukaixiang817](https://github.com/liukaixiang817) in [#1019](https://github.com/danny-avila/LibreChat/pull/1019)
+- Improve Traditional Chinese Localization by [@PeterDaveHello](https://github.com/PeterDaveHello) in [#1055](https://github.com/danny-avila/LibreChat/pull/1055)
+- Korean Language Support by [@ywkim](https://github.com/ywkim) in [#1005](https://github.com/danny-avila/LibreChat/pull/1005)
+- Traditional Chinese Language Support by [@goodair220917](https://github.com/goodair220917) in [#1006](https://github.com/danny-avila/LibreChat/pull/1006)
+
+## 🔧 Fixes
+
+- SetOptions() Handling fix for ModelOptions by [@jordantgh](https://github.com/jordantgh) in [#975](https://github.com/danny-avila/LibreChat/pull/975)
+- Fixed LoginForm Max Length by [@danny-avila](https://github.com/danny-avila) in [#980](https://github.com/danny-avila/LibreChat/pull/980)
+- Cancel Automatic Scrolling During Message Stream on Mobile by [@danny-avila](https://github.com/danny-avila) in [#984](https://github.com/danny-avila/LibreChat/pull/984)
+- TextChat Scrollbar Space to allow selecting scrollbar, lower on the screen by [@danny-avila](https://github.com/danny-avila) in [#988](https://github.com/danny-avila/LibreChat/pull/988)
+- Fixed wrong Token Usage Rate for GPT-4 introduced in [#1018](https://github.com/danny-avila/LibreChat/pull/1018) by [@danny-avila](https://github.com/danny-avila) in [#1020](https://github.com/danny-avila/LibreChat/pull/1020)
+- OpenAIClient/PluginsClient Proxy Handling by [@danny-avila](https://github.com/danny-avila) in [#1029](https://github.com/danny-avila/LibreChat/pull/1029)
+- Chats now Correctly Render on Refresh/Visit by [@danny-avila](https://github.com/danny-avila) in [#1037](https://github.com/danny-avila/LibreChat/pull/1037)
+- SearchBar Debounce Fix by [@danny-avila](https://github.com/danny-avila) in [#1039](https://github.com/danny-avila/LibreChat/pull/1039)
+- BingAIClient Fix (now using [nodejs-gpt](https://github.com/danny-avila/nodejs-gpt)) by [@danny-avila](https://github.com/danny-avila) in [#1050](https://github.com/danny-avila/LibreChat/pull/1050) [#1063](https://github.com/danny-avila/LibreChat/pull/1063)
+- Set Correct Default Language Setting by [@Berry-13](https://github.com/Berry-13) in [#1061](https://github.com/danny-avila/LibreChat/pull/1061)
+- OpenAI Name Property Regex Conformance (no longer errors with Custom names in Presets) by [@danny-avila](https://github.com/danny-avila) in [#1076](https://github.com/danny-avila/LibreChat/pull/1076)
+- Fix `getLogStores` Property & 401 Error Refresh Token Handling by [@danny-avila](https://github.com/danny-avila) in [#1084](https://github.com/danny-avila/LibreChat/pull/1084)
+
+## 📝 Documentation
+
+- Utilize Meilisearch Using LibreChat in Render by [@itzraiss](https://github.com/itzraiss) in [#972](https://github.com/danny-avila/LibreChat/pull/972)
+- Update Render.md with Meilisearch Guide by [@danny-avila](https://github.com/danny-avila) in [#982](https://github.com/danny-avila/LibreChat/pull/982)
+- Docker Compose Install Command Fix by [@PeterDaveHello](https://github.com/PeterDaveHello) in [#1053](https://github.com/danny-avila/LibreChat/pull/1053)
+- Token Usage in README by [@Berry-13](https://github.com/Berry-13) in [#1060](https://github.com/danny-avila/LibreChat/pull/1060)
+- Meilisearch in Render & Email Password Reset Update by [@fuegovic](https://github.com/fuegovic) in [#1062](https://github.com/danny-avila/LibreChat/pull/1062)
+- README Update by [@Berry-13](https://github.com/Berry-13) in [#1086](https://github.com/danny-avila/LibreChat/pull/1086)
+
+## ⚙️ Other Changes
+
+- Bump Langchain by [@danny-avila](https://github.com/danny-avila) in [#979](https://github.com/danny-avila/LibreChat/pull/979)
+- Login Logs for Fail2Ban by [@Berry-13](https://github.com/Berry-13) in [#986](https://github.com/danny-avila/LibreChat/pull/986)
+- Icon & Favicon Adjustments, File Conversions, & Unit Tests by [@Berry-13](https://github.com/Berry-13) in [#987](https://github.com/danny-avila/LibreChat/pull/987)
+- PluginStoreDialog Refactor by [@Berry-13](https://github.com/Berry-13) in [#1047](https://github.com/danny-avila/LibreChat/pull/1047)
+- Docker-Compose UID/GID Setting by [@Berry-13](https://github.com/Berry-13) in [#1044](https://github.com/danny-avila/LibreChat/pull/1044)
+- Replace EndpointsConfig Recoil Store with React Query by [@danny-avila](https://github.com/danny-avila) in [#1085](https://github.com/danny-avila/LibreChat/pull/1085)
+
+## New Contributors
+
+- [@jordantgh](https://github.com/jordantgh) made their first contribution in [#975](https://github.com/danny-avila/LibreChat/pull/975)
+- [@goodair220917](https://github.com/goodair220917) made their first contribution in [#1006](https://github.com/danny-avila/LibreChat/pull/1006)
+- [@liukaixiang817](https://github.com/liukaixiang817) made their first contribution in [#1019](https://github.com/danny-avila/LibreChat/pull/1019)
+- [@walbercardoso](https://github.com/walbercardoso) made their first contribution in [#1007](https://github.com/danny-avila/LibreChat/pull/1007)
+- [@PeterDaveHello](https://github.com/PeterDaveHello) made their first contribution in [#1053](https://github.com/danny-avila/LibreChat/pull/1053)
+
+**Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.5.9...v0.6.0](https://github.com/danny-avila/LibreChat/compare/v0.5.9...v0.6.0)
diff --git a/pages/changelog/v0.6.1.mdx b/pages/changelog/v0.6.1.mdx
new file mode 100644
index 0000000..5147ab4
--- /dev/null
+++ b/pages/changelog/v0.6.1.mdx
@@ -0,0 +1,53 @@
+---
+date: 2023/11/16
+title: 🚀 LibreChat v0.6.1
+description: DALL-E-3, Custom Footer, Token Transaction, Ban-User Command, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+> Support for the old UI will become deprecated, but will still be available through the old route `/chat/new`. The new route will be `/c/new`
+
+## ✨ New Features as of v0.6.1
+
+- **DALL-E-3 Support:** Added support for DALL-E-3 including reverse proxy and system prompt configs for DALL-E-3 by [@danny-avila](https://github.com/danny-avila) in [#1147](https://github.com/danny-avila/LibreChat/pull/1147), [#1148](https://github.com/danny-avila/LibreChat/pull/1148) & [#1150](https://github.com/danny-avila/LibreChat/pull/1150)
+- **Toast Components:** Introduced Toast components, similar to ChatGPT's, and a Toast Provider to manage toasts higher in the DOM tree by [@danny-avila](https://github.com/danny-avila) in [#1108](https://github.com/danny-avila/LibreChat/pull/1108) & [#1110](https://github.com/danny-avila/LibreChat/pull/1110)
+- **Custom Footer Environment Variable:** Addition of `CUSTOM_FOOTER` env variable for footer customization by [@danny-avila](https://github.com/danny-avila) in [#1098](https://github.com/danny-avila/LibreChat/pull/1098)
+- **Azure OpenAI Enhancements:** Enabled switching Deployment Name by Model Name in AzureOpenAI by [@danny-avila](https://github.com/danny-avila) in [#1137](https://github.com/danny-avila/LibreChat/pull/1137)
+- **Token Transactions:** Added timestamps to transaction schema by [@danny-avila](https://github.com/danny-avila) in [#1123](https://github.com/danny-avila/LibreChat/pull/1123)
+- **Ban-User Command:** Implemented a command to ban users by [@Berry-13](https://github.com/Berry-13) in [#1121](https://github.com/danny-avila/LibreChat/pull/1121)
+
+## 🌐 Internationalization
+
+- **Multilingual Support:** Added Vietnamese, Brazilian Portuguese, Turkish, Russian, Italian, French, and Arabic translations by [@chokiproai](https://github.com/chokiproai), [@itzraiss](https://github.com/itzraiss), [@eniyiweb](https://github.com/eniyiweb), [@machinsoft](https://github.com/machinsoft), [@Berry-13](https://github.com/Berry-13), [@fuegovic](https://github.com/fuegovic), and [@QuitCool](https://github.com/QuitCool) in [#1129](https://github.com/danny-avila/LibreChat/pull/1129), [#1126](https://github.com/danny-avila/LibreChat/pull/1126), [#1168](https://github.com/danny-avila/LibreChat/pull/1168), [#1169](https://github.com/danny-avila/LibreChat/pull/1169), [#1175](https://github.com/danny-avila/LibreChat/pull/1175), [#1176](https://github.com/danny-avila/LibreChat/pull/1176) & [#1180](https://github.com/danny-avila/LibreChat/pull/1180)
+- **Update Chinese localization:** Improved Chinese and Traditional Chinese translations by [@liukaixiang817](https://github.com/liukaixiang817) and [@Super12138](https://github.com/Super12138) in [#1095](https://github.com/danny-avila/LibreChat/pull/1095) & [#1102](https://github.com/danny-avila/LibreChat/pull/1102)
+
+## 🔧 Fixes
+
+- **Bug Fixes and Optimizations:** Addressed various issues including data transformation, tag workflow, OpenRouter, typo fixes, endpoint handling, navigation issues, and ModelService.js conditional statement correctness by [@danny-avila](https://github.com/danny-avila), [@walbercardoso](https://github.com/walbercardoso), [@Berry-13](https://github.com/Berry-13) in [#1097](https://github.com/danny-avila/LibreChat/pull/1097), [#1105](https://github.com/danny-avila/LibreChat/pull/1105), [#1116](https://github.com/danny-avila/LibreChat/pull/1116), [#1141](https://github.com/danny-avila/LibreChat/pull/1141), [#1144](https://github.com/danny-avila/LibreChat/pull/1144) & [#1145](https://github.com/danny-avila/LibreChat/pull/1145)
+
+## 📝 Documentation
+
+- **Documentation Improvements:** Updated manuals and guides for various setups including Docker, Local Env, and reverse proxy configuration by [@danny-avila](https://github.com/danny-avila), [@Berry-13](https://github.com/Berry-13), [@fuegovic](https://github.com/fuegovic) in [#1117](https://github.com/danny-avila/LibreChat/pull/1117), [#1118](https://github.com/danny-avila/LibreChat/pull/1118), [#1132](https://github.com/danny-avila/LibreChat/pull/1132) & [#1153](https://github.com/danny-avila/LibreChat/pull/1153)
+
+## ⚙️ Other Changes
+
+- **Workflow and Style Enhancements:** Various changes including manual trigger of workflows, tag workflow adjustments, token rate support for newer models (1106), navigation updates, and graphical updates by [@danny-avila](https://github.com/danny-avila), [@Z1xus](https://github.com/Z1xus), [@Berry-13](https://github.com/Berry-13) in [#1099](https://github.com/danny-avila/LibreChat/pull/1099), [#1100](https://github.com/danny-avila/LibreChat/pull/1100), [#1146](https://github.com/danny-avila/LibreChat/pull/1146), [#1182](https://github.com/danny-avila/LibreChat/pull/1182) & [#1138](https://github.com/danny-avila/LibreChat/pull/1138)
+
+## New Contributors
+
+- [@Super12138](https://github.com/Super12138) made their first contribution in [#1102](https://github.com/danny-avila/LibreChat/pull/1102)
+- [@chokiproai](https://github.com/chokiproai) made their first contribution in [#1129](https://github.com/danny-avila/LibreChat/pull/1129)
+- [@otisdog8](https://github.com/otisdog8) made their first contribution in [#1151](https://github.com/danny-avila/LibreChat/pull/1151)
+- [@Cfomodz](https://github.com/Cfomodz) made their first contribution in [#1160](https://github.com/danny-avila/LibreChat/pull/1160)
+- [@snekkenull](https://github.com/snekkenull) made their first contribution in [#1152](https://github.com/danny-avila/LibreChat/pull/1152)
+- [@eniyiweb](https://github.com/eniyiweb) made their first contribution in [#1168](https://github.com/danny-avila/LibreChat/pull/1168)
+- [@machinsoft](https://github.com/machinsoft) made their first contribution in [#1169](https://github.com/danny-avila/LibreChat/pull/1169)
+- [@QuitCool](https://github.com/QuitCool) made their first contribution in [#1180](https://github.com/danny-avila/LibreChat/pull/1180)
+- [@Z1xus](https://github.com/Z1xus) made their first contribution in [#1182](https://github.com/danny-avila/LibreChat/pull/1182)
diff --git a/pages/changelog/v0.6.10-breaking-changes.mdx b/pages/changelog/v0.6.10-breaking-changes.mdx
new file mode 100644
index 0000000..94e4f39
--- /dev/null
+++ b/pages/changelog/v0.6.10-breaking-changes.mdx
@@ -0,0 +1,65 @@
+---
+date: 2024/02/17
+title: ⚠️ Breaking Changes v0.6.10+
+description: Breaking Changes for the v0.6.10+ release of LibreChat
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+
+ - **Meilisearch Update**: Following the recent update to Meilisearch, an unused folder named
+ `meili_data_v1.6` may be present in your root directory. This folder is no longer required and
+ **can be safely deleted** to free up space. - **New Indexing Data Location**: With the current
+ Meilisearch version `1.7.3`, the new indexing data location folder will be `meili_data_v1.7`.
+
+
+
+ - **Meilisearch Update**: Following the recent update to Meilisearch, an unused folder named
+ `meili_data_v1.5` may be present in your root directory. This folder is no longer required and
+ **can be safely deleted** to free up space. - **New Indexing Data Location**: With the current
+ Meilisearch version `1.6`, the new indexing data location folder will be `meili_data_v1.6`.
+
+
+
+ - Following to the shut down of "Ninja", the ChatGPTbrowser endpoint is no longer available in
+ LibreChat.
+
+
+
+We have made changes to the `docker-compose.yml` file to enhance the default behavior. Starting now, the file uses the pre-built image by default. If you prefer to build the image yourself, you'll need to utilize the override file to specify your custom build configuration.
+
+Here's an example of the `docker-compose.override.yml`:
+
+```yaml
+version: '3.4'
+
+services:
+ api:
+ image: librechat
+ build:
+ context: .
+ target: node
+```
+
+For more detailed information on using the `docker-compose.override.yaml`, please refer to our documentation: [docker_override](/docs/configuration/docker_override)
+
+
+
+
+During a recent license review, it was discovered that the Söhne fonts used in LibreChat require proper licensing for legal use. These fonts were added early in the project by a community contribution to mirror ChatGPT's aesthetic, but it was an oversight to allow them without proper knowledge.
+
+To address this issue, the Söhne fonts have been removed from the project and replaced with open-source alternatives, effective immediately in the latest version of the repository on GitHub. The relevant font foundry has been contacted to resolve the matter.
+
+All users and those who have forked LibreChat are required to update to the latest version to comply with font licensing laws. If you prefer to continue using the fonts, please follow the instructions provided [here](https://gist.github.com/danny-avila/e1d623e51b24cf0989865197bb788102).
+
+LibreChat remains committed to ensuring compliance, accessibility, and continuous improvement. The effort to match OpenAI's ChatGPT styling was well-intentioned but poorly executed, and moving forward, all aspects of the project will meet legal and permissive standards.
+
+We appreciate your understanding and cooperation in making these necessary adjustments. For updates or guidance on implementing these changes, please reach out.
+
+Thank you for your continued support of LibreChat.
+
+
diff --git a/pages/changelog/v0.6.10.mdx b/pages/changelog/v0.6.10.mdx
new file mode 100644
index 0000000..d55da6a
--- /dev/null
+++ b/pages/changelog/v0.6.10.mdx
@@ -0,0 +1,51 @@
+---
+date: 2024/02/16
+title: 🚀 LibreChat v0.6.10
+description: Font Update, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+## ⚠️ Important Update
+
+Dear LibreChat community,
+
+I'm reaching out to share a critical update about our project. Today I conducted a license review to ensure the project is in good standing. All was good with one exception. I learned that the Söhne fonts used in LibreChat require proper licensing for legal use. These were added early on in the project by a community contribution, for their design alignment with ChatGPT’s aesthetic, but it was my oversight in allowing them without proper knowledge.
+
+**Actions I've Taken:** I have removed the Söhne fonts from the project and replaced them with open-source alternatives. This change is effective immediately in the latest version of our repository on GitHub. I have promptly initiated contact with the relevant font foundry to discuss which licenses are most appropriate to purchase in LibreChat's situation and to come to a resolve.
+
+**Your Action Required:** For anyone who has used or forked LibreChat, please update to the latest version to comply with font licensing laws. If you prefer to continue using the Söhne fonts, you'll need to secure a license for yourself. Instructions for integrating licensed fonts post-purchase can be found [here](https://gist.github.com/danny-avila/e1d623e51b24cf0989865197bb788102).
+
+I will make another update once I receive communication from the font foundry for added clarification.
+
+**Next Steps:** I believe we can move forward and I'm willing to help anyone with this situation as needed. I am glad I reviewed the current state of dependencies, and I am committed to ensuring LibreChat remains compliant, accessible, and continues improving. To clarify, I was not contacted by the foundry, I simply learned about the issue in my review and am now seeking to rectify.
+
+The effort to match OpenAI's ChatGPT styling was well-intentioned but poorly executed, and moving forward, I'll ensure all aspects of our project meet legal and permissive standards.
+
+This is an uncomfortable situation to be in but I believe this is the right thing to do. I appreciate your understanding and cooperation for these necessary adjustments. For updates or guidance on making these changes, feel free to reach out.
+
+Thank you for your support of LibreChat.
+
+- [@danny-avila](https://github.com/danny-avila)
+
+## Other Changes since v0.6.9
+
+chore: Update Docker build and push actions by [@danny-avila](https://github.com/danny-avila) in [#1790](https://github.com/danny-avila/LibreChat/pull/1790)
+chore: add tag for `latest` for ci/cd docker builds by [@danny-avila](https://github.com/danny-avila) in [#1791](https://github.com/danny-avila/LibreChat/pull/1791)
+feat: Assistants API, General File Support, Side Panel, File Explorer by [@danny-avila](https://github.com/danny-avila) in [#1696](https://github.com/danny-avila/LibreChat/pull/1696)
+fix(data-provider): add openapi-types dependency by [@danny-avila](https://github.com/danny-avila) in [#1797](https://github.com/danny-avila/LibreChat/pull/1797)
+docs(assistants): Additional Setup & Tool Selection Info by [@danny-avila](https://github.com/danny-avila) in [#1798](https://github.com/danny-avila/LibreChat/pull/1798)
+docs: Enhance LibreChat Docker deployment guide by [@CXwudi](https://github.com/CXwudi) in [#1796](https://github.com/danny-avila/LibreChat/pull/1796)
+fix(Convo): Rename Title UX by [@walbercardoso](https://github.com/walbercardoso) in [#1793](https://github.com/danny-avila/LibreChat/pull/1793)
+chore: Improve Assistants Run Logging by [@danny-avila](https://github.com/danny-avila) in [#1801](https://github.com/danny-avila/LibreChat/pull/1801)
+fix: Reinstate Default Social Login Values by [@danny-avila](https://github.com/danny-avila) in [#1811](https://github.com/danny-avila/LibreChat/pull/1811)
+
+## New Contributors
+
+- [@CXwudi](https://github.com/CXwudi) made their first contribution in [#1796](https://github.com/danny-avila/LibreChat/pull/1796)
+
+**Full Changelog**: [https://github.com/danny-avila/LibreChat/compare/v0.6.9...v0.6.10](https://github.com/danny-avila/LibreChat/compare/v0.6.9...v0.6.10)
diff --git a/pages/changelog/v0.6.5.mdx b/pages/changelog/v0.6.5.mdx
new file mode 100644
index 0000000..083582b
--- /dev/null
+++ b/pages/changelog/v0.6.5.mdx
@@ -0,0 +1,57 @@
+---
+date: 2023/12/19
+title: 🚀 LibreChat v0.6.5
+description: UI Updates & Vision Support, Default Preset, Custom SMTP Server, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## ✨ New Features as of v0.6.5
+
+- **UI Updates & Vision Support:** Major updates to the UI to align with Official ChatGPT style and added initial support for GPT-4 Vision by [@danny-avila](https://github.com/danny-avila) in [#1190](https://github.com/danny-avila/LibreChat/pull/1190) & [#1203](https://github.com/danny-avila/LibreChat/pull/1203)
+- **Default Preset Selection:** Implemented default preset selection for conversations by [@danny-avila](https://github.com/danny-avila) in [#1275](https://github.com/danny-avila/LibreChat/pull/1275)
+- **Gemini Support & Google Updates:** Added support for Google Gemini Pro and Gemini Pro Vision. All Google Vertex AI text and chat models are now fully supported as well (PaLM 2 and Codey) by [@danny-avila](https://github.com/danny-avila) in [#1316](https://github.com/danny-avila/LibreChat/pull/1316) & [#1355](https://github.com/danny-avila/LibreChat/pull/1355)
+- **Azure Vision Support:** Implemented support for GPT-4 Vision through Azure OpenAI by [@danny-avila](https://github.com/danny-avila) in [#1389](https://github.com/danny-avila/LibreChat/pull/1389)
+- **ENDPOINTS Environment Variable:** Implemented ordering and disabling of endpoints with `ENDPOINTS` env variable by [@danny-avila](https://github.com/danny-avila) in [#1206](https://github.com/danny-avila/LibreChat/pull/1206)
+- **Reverse Proxy Modifications:** Now allows any reverse proxy URL to be configured. Reverse Proxy Support was also added for Anthropic by [@danny-avila](https://github.com/danny-avila) and @madonchik123 in [#1192](https://github.com/danny-avila/LibreChat/pull/1192) & [#1106](https://github.com/danny-avila/LibreChat/pull/1106)
+- **Custom SMTP Server Support:** Added the feature to use a custom SMTP server by @Pikaro in [#1219](https://github.com/danny-avila/LibreChat/pull/1219)
+
+## 🌐 Internationalization
+
+- **Multilingual Updates:** Updated Vietnamese, Portuguese, Spanish, Turkish, Russian, Dutch, and Japanese translations by @chokiproai, @itzraiss, @eniyiweb, @machinsoft, @Berry-13, and @KenTaniguchi-R in [#1200](https://github.com/danny-avila/LibreChat/pull/1200), [#1202](https://github.com/danny-avila/LibreChat/pull/1202), [#1195](https://github.com/danny-avila/LibreChat/pull/1195), [#1218](https://github.com/danny-avila/LibreChat/pull/1218), [#1251](https://github.com/danny-avila/LibreChat/pull/1251), [#1265](https://github.com/danny-avila/LibreChat/pull/1265) & [#1298](https://github.com/danny-avila/LibreChat/pull/1298)
+
+## 🔧 Fixes
+
+- **UI Fixes:** Completed numerous minor and broad UI fixes related to the new UI by [@danny-avila](https://github.com/danny-avila) and @Berry-13 in [#1197](https://github.com/danny-avila/LibreChat/pull/1197) & [#1199](https://github.com/danny-avila/LibreChat/pull/1199)
+- **Bug Fixes & Optimizations:** Addressed issues like Textarea Scroll fix, Error Handling; Fixed Correct Default Model Name in Response Sender, Endpoint Switching, Anthropic Client Issues, Token Credit Balance Issues, AzureAISearch Plugin Files; Prevented Image Auto-Rotation on Upload, Message Misrouting on Conversation Refresh, and ensured Message Send Requires Key by [@danny-avila](https://github.com/danny-avila), @jonas-w, and @itzraiss in [#1204](https://github.com/danny-avila/LibreChat/pull/1204), [#1217](https://github.com/danny-avila/LibreChat/pull/1217), [#1225](https://github.com/danny-avila/LibreChat/pull/1225), [#1226](https://github.com/danny-avila/LibreChat/pull/1226), [#1232](https://github.com/danny-avila/LibreChat/pull/1232), [#1237](https://github.com/danny-avila/LibreChat/pull/1237), [#1250](https://github.com/danny-avila/LibreChat/pull/1250), [#1278](https://github.com/danny-avila/LibreChat/pull/1278), [#1259](https://github.com/danny-avila/LibreChat/pull/1259), [#1281](https://github.com/danny-avila/LibreChat/pull/1281), [#1294](https://github.com/danny-avila/LibreChat/pull/1294), [#1324](https://github.com/danny-avila/LibreChat/pull/1324), [#1318](https://github.com/danny-avila/LibreChat/pull/1318) & [#1356](https://github.com/danny-avila/LibreChat/pull/1356)
+
+## 📝 Documentation
+
+- **Documentation Updates:** Updated guides and documentation for various aspects including `dotenv.md`, LiteLLM Proxy, MongoDB, and Facebook Updates by @fuegovic, @ishaan-jaff, @Berry-13 in [#1258](https://github.com/danny-avila/LibreChat/pull/1258), [#1247](https://github.com/danny-avila/LibreChat/pull/1247), [#1276](https://github.com/danny-avila/LibreChat/pull/1276), [#1307](https://github.com/danny-avila/LibreChat/pull/1307), [#1249](https://github.com/danny-avila/LibreChat/pull/1249), [#1312](https://github.com/danny-avila/LibreChat/pull/1312), [#1342](https://github.com/danny-avila/LibreChat/pull/1342), [#1347](https://github.com/danny-avila/LibreChat/pull/1347)
+
+## ⚙️ Other Changes
+
+- **Style and Enhanced Functionality:** Implemented various style and functionality modifications including: order and disable endpoints with ENDPOINTS env var, allow usage of custom SMTP server, prevent login feature (ALLOW_EMAIL_LOGIN), default preset selection in conversations, and open sidebar popup for new users by [@danny-avila](https://github.com/danny-avila), @Pikaro, @Berry-13 in [#1206](https://github.com/danny-avila/LibreChat/pull/1206), [#1219](https://github.com/danny-avila/LibreChat/pull/1219), [#1282](https://github.com/danny-avila/LibreChat/pull/1282), [#1275](https://github.com/danny-avila/LibreChat/pull/1275), [#1309](https://github.com/danny-avila/LibreChat/pull/1309), [#1308](https://github.com/danny-avila/LibreChat/pull/1308)
+
+## 👀 Upcoming Features
+
+- Assistants API integration and General File support are in active development
+- Better, more customizable, and easier System-wide Configuration for Endpoints/Models/Presets
+- **[Our full Roadmap](https://github.com/users/danny-avila/projects/2)**
+
+## New Contributors
+
+- [@madonchik123](https://github.com/madonchik123) made their first contribution in [#1106](https://github.com/danny-avila/LibreChat/pull/1106)
+- [@jonas-w](https://github.com/jonas-w) made their first contribution in [#1237](https://github.com/danny-avila/LibreChat/pull/1237)
+- [@Pikaro](https://github.com/Pikaro) made their first contribution in [#1219](https://github.com/danny-avila/LibreChat/pull/1219)
+- [@ishaan-jaff](https://github.com/ishaan-jaff) made their first contribution in [#1249](https://github.com/danny-avila/LibreChat/pull/1249)
+- [@KenTaniguchi-R](https://github.com/KenTaniguchi-R) made their first contribution in [#1298](https://github.com/danny-avila/LibreChat/pull/1298)
+- [@eburnette](https://github.com/eburnette) made their first contribution in [#1317](https://github.com/danny-avila/LibreChat/pull/1317)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.6.1...v0.6.5
diff --git a/pages/changelog/v0.6.6.mdx b/pages/changelog/v0.6.6.mdx
new file mode 100644
index 0000000..0e6a605
--- /dev/null
+++ b/pages/changelog/v0.6.6.mdx
@@ -0,0 +1,136 @@
+---
+date: 2024/01/19
+title: 🚀 LibreChat v0.6.6
+description: GitHub trending🎉, Customizing endpoints, Firebase, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+## 🏞️ Highlights
+
+
+
+
+
+- **LibreChat hit a major milestone and was featured on GitHub trending several days in a row!**
+- Thank you all who checked out this project, there are still more features to come and in active development!
+
+- **[Customizing endpoints is now possible (that follow OpenAI specs):](https://docs.librechat.ai/install/configuration/custom_config.html)**
+
+
+
+- **You can enable an experimental mode in Settings to switch Endpoints mid-conversation:**
+
+
+
+## :sparkles: New Features
+
+- 👮feat: moderation text by [@Berry-13](https://github.com/Berry-13) in [#1388](https://github.com/danny-avila/LibreChat/pull/1388)
+- 🔥🚀 feat: CDN (Firebase) & feat: account section by [@Berry-13](https://github.com/Berry-13) in [#1438](https://github.com/danny-avila/LibreChat/pull/1438)
+- 🚫🔍 feat: disallow search indexing by [@Berry-13](https://github.com/Berry-13) in [#1409](https://github.com/danny-avila/LibreChat/pull/1409)
+- 🐳 : Improving Docker Build by [@ineiti](https://github.com/ineiti) in [#1415](https://github.com/danny-avila/LibreChat/pull/1415)
+- 📃 feat: add `list-balances`, `remove-user`, and improve User scripts by [@ineiti](https://github.com/ineiti) in [#1418](https://github.com/danny-avila/LibreChat/pull/1418)
+- 📱feat: allow PWA by [@Berry-13](https://github.com/Berry-13) in [#1440](https://github.com/danny-avila/LibreChat/pull/1440)
+- 💫 feat: Config File & Custom Endpoints by [@danny-avila](https://github.com/danny-avila) in [#1474](https://github.com/danny-avila/LibreChat/pull/1474)
+- 🧪 feat: Experimental: Enable Switching Endpoints Mid-Conversation by [@danny-avila](https://github.com/danny-avila) in [#1483](https://github.com/danny-avila/LibreChat/pull/1483)
+- ✨ feat(saveImageFromUrl): Dynamic Extension Handling by [@danny-avila](https://github.com/danny-avila) in [#1514](https://github.com/danny-avila/LibreChat/pull/1514)
+- 🚀 Feat: Streamline File Strategies & GPT-4-Vision Settings by [@danny-avila](https://github.com/danny-avila) in [#1535](https://github.com/danny-avila/LibreChat/pull/1535)
+- ✏️ feat: LaTeX parsing for Messages by [@danny-avila](https://github.com/danny-avila) in [#1585](https://github.com/danny-avila/LibreChat/pull/1585)
+- 🖼️ feat(DALL-E): Azure OpenAI Support & New Config Variables by [@danny-avila](https://github.com/danny-avila) in [#1586](https://github.com/danny-avila/LibreChat/pull/1586)
+- 🎯 feat(config): Custom Endpoint Request Headers by [@danny-avila](https://github.com/danny-avila) in [#1588](https://github.com/danny-avila/LibreChat/pull/1588)
+- 🚀 feat: Add `OPENAI_ORGANIZATION` for all OpenAI Requests by [@danny-avila](https://github.com/danny-avila) in [#1590](https://github.com/danny-avila/LibreChat/pull/1590)
+- 🖌️ feat: Optional Display Username in Messages, Send/Stop Button Style, Localization by @itzraiss & @danny-avila in [#1592](https://github.com/danny-avila/LibreChat/pull/1592)
+- 🪶 feat: Add Support for Azure OpenAI Base URL by [@danny-avila](https://github.com/danny-avila) in [#1596](https://github.com/danny-avila/LibreChat/pull/1596)
+
+## :gear: Other Changes
+
+- 🔖 Chore: Update pull_request_template.md with Hard Link by [@danny-avila](https://github.com/danny-avila) in [#1417](https://github.com/danny-avila/LibreChat/pull/1417)
+- 🎨 style: Add Dynamic Height to Endpoint/Model Menus by [@danny-avila](https://github.com/danny-avila) in [#1480](https://github.com/danny-avila/LibreChat/pull/1480)
+- 🧹 chore: remove 'MEILI_HTTP_ADDR' by [@fuegovic](https://github.com/fuegovic) in [#1475](https://github.com/danny-avila/LibreChat/pull/1475)
+- 🗨️ refactor: Open New Tab for Ctrl+Click or Button Combo in NewChat by [@danny-avila](https://github.com/danny-avila) in [#1484](https://github.com/danny-avila/LibreChat/pull/1484)
+- 🐋 refactor: Mount Config File in Docker and Add to .dockerignore by [@danny-avila](https://github.com/danny-avila) in [#1493](https://github.com/danny-avila/LibreChat/pull/1493)
+- 🐳 : Further Docker build Cleanup & Docs Update by [@danny-avila](https://github.com/danny-avila) in [#1502](https://github.com/danny-avila/LibreChat/pull/1502)
+- 🔄 refactor(config): Move `connectWithTimeout` Outside of Helpers Module by [@danny-avila](https://github.com/danny-avila) in [#1513](https://github.com/danny-avila/LibreChat/pull/1513)
+- 🎨: Updated Plugins Search Bar by @itzraiss in [#1549](https://github.com/danny-avila/LibreChat/pull/1549)
+- 🪙 refactor: Update tokens.js for Added Context Buffer from Max by [@danny-avila](https://github.com/danny-avila) in [#1573](https://github.com/danny-avila/LibreChat/pull/1573)
+- 📜 refactor: Enhance Auto Scroll Speed and UseEffect Cleanup by [@danny-avila](https://github.com/danny-avila) in [#1591](https://github.com/danny-avila/LibreChat/pull/1591)
+
+## 🔧 Fixes
+
+- 🐛 fix: Prevent Unnecessary Cloning of Symbols in Log Object by [@danny-avila](https://github.com/danny-avila) in [#1455](https://github.com/danny-avila/LibreChat/pull/1455)
+- 🧹fix: Handle Abort Message Edge Cases by [@danny-avila](https://github.com/danny-avila) in [#1462](https://github.com/danny-avila/LibreChat/pull/1462)
+- 🛠️ fix: Minor Fixes in `Message`, `Ask/EditController`, `OpenAIClient`, and `countTokens` by [@danny-avila](https://github.com/danny-avila) in [#1463](https://github.com/danny-avila/LibreChat/pull/1463)
+- 🔧 fix(OpenAIClient): do not invoke abortCompletion on completion error by [@danny-avila](https://github.com/danny-avila) in [#1473](https://github.com/danny-avila/LibreChat/pull/1473)
+- 🔧 fix: langchain packages mismatch, mount config file for `deploy-compose.yaml`, silence config not found error by [@danny-avila](https://github.com/danny-avila) in [#1481](https://github.com/danny-avila/LibreChat/pull/1481)
+- 🛠️ fix: Error Message Parsing and ChatOpenAI credentials by [@danny-avila](https://github.com/danny-avila) in [#1482](https://github.com/danny-avila/LibreChat/pull/1482)
+- 🔧 fix: Improve Endpoint Handling and Address Edge Cases by [@danny-avila](https://github.com/danny-avila) in [#1486](https://github.com/danny-avila/LibreChat/pull/1486)
+- ⬆️ fix(SendButton): correct dark theme background when `enabled` by [@danny-avila](https://github.com/danny-avila) in [#1503](https://github.com/danny-avila/LibreChat/pull/1503)
+- 🛠️ fix: Custom Endpoint issues, Improve SSE Response Handling by [@danny-avila](https://github.com/danny-avila) in [#1510](https://github.com/danny-avila/LibreChat/pull/1510)
+- 🐛 fix: Load `dotenv` at Top of Call Stack by [@danny-avila](https://github.com/danny-avila) in [#1512](https://github.com/danny-avila/LibreChat/pull/1512)
+- 🔧 fix: Error Handling Improvements by [@danny-avila](https://github.com/danny-avila) in [#1518](https://github.com/danny-avila/LibreChat/pull/1518)
+- fix(getUserPluginAuthValue): throws error if no user matches by [@danny-avila](https://github.com/danny-avila) in [#1522](https://github.com/danny-avila/LibreChat/pull/1522)
+- 🐛 fix: Remove `resendImages`, `imageDetail` from `modelOptions` for Custom Endpoints by [@danny-avila](https://github.com/danny-avila) in [#1537](https://github.com/danny-avila/LibreChat/pull/1537)
+- 🏗️ fix(config): Resolve Paths Correctly for Helper Scripts on Linux and Windows by [@danny-avila](https://github.com/danny-avila) in [#1542](https://github.com/danny-avila/LibreChat/pull/1542)
+- 📕 fix: Update `document` Title based on `appTitle` and on "New Chat" by [@danny-avila](https://github.com/danny-avila) in [#1553](https://github.com/danny-avila/LibreChat/pull/1553)
+
+## :memo: Documentation
+
+- 🧹📚 docs: refactor and clean up by [@fuegovic](https://github.com/fuegovic) in [#1392](https://github.com/danny-avila/LibreChat/pull/1392)
+- 🪪mkdocs: social cards by [@fuegovic](https://github.com/fuegovic) in [#1428](https://github.com/danny-avila/LibreChat/pull/1428)
+- doc update: firebase.md by [@fuegovic](https://github.com/fuegovic) in [#1456](https://github.com/danny-avila/LibreChat/pull/1456)
+- docs: update pull_request_template.md by [@fuegovic](https://github.com/fuegovic) in [#1466](https://github.com/danny-avila/LibreChat/pull/1466)
+- docs: update the license to 2024. by [@Berry-13](https://github.com/Berry-13) in [#1501](https://github.com/danny-avila/LibreChat/pull/1501)
+- 🚆 docs: Add Sealos 1-Click Deployment by [@yangchuansheng](https://github.com/yangchuansheng) in [#1578](https://github.com/danny-avila/LibreChat/pull/1578)
+- 🚆docs: Railway support by [@Berry-13](https://github.com/Berry-13) in [#1529](https://github.com/danny-avila/LibreChat/pull/1529)
+- 📑 docs: Update Mistral AI API example about `dropParams` by [@danny-avila](https://github.com/danny-avila) in [#1538](https://github.com/danny-avila/LibreChat/pull/1538)
+- 🚆docs: update invalid env variables in hetzner ubuntu example by [@nicam](https://github.com/nicam) in [#1539](https://github.com/danny-avila/LibreChat/pull/1539)
+- 📔 docs: Update Render hosting Guide by [@tmendenhall](https://github.com/tmendenhall) in [#1528](https://github.com/danny-avila/LibreChat/pull/1528)
+- 📑 docs: fix mistral ai api example `safe_mode` --> `safe_prompt` by [@danny-avila](https://github.com/danny-avila) in [#1541](https://github.com/danny-avila/LibreChat/pull/1541)
+- 🧹 docs: update docker_override.md by [@eltociear](https://github.com/eltociear) in [#1546](https://github.com/danny-avila/LibreChat/pull/1546)
+- 🐳 docs: Update dotenv.md by [@ganeshkrishnan1](https://github.com/ganeshkrishnan1) in [#1564](https://github.com/danny-avila/LibreChat/pull/1564)
+
+## 🌐 Internationalization
+
+- French translations were updated by [@fuegovic](https://github.com/fuegovic) (PRs [#1444](https://github.com/danny-avila/LibreChat/pull/1444), [#1472](https://github.com/danny-avila/LibreChat/pull/1472), [#1595](https://github.com/danny-avila/LibreChat/pull/1595))
+- Russian by [@LedyBacer](https://github.com/LedyBacer) (#1413) and [@machinsoft](https://github.com/machinsoft) (#1457, #1517)
+- Italian by [@Berry-13](https://github.com/Berry-13) (#1414, #1594)
+- Portuguese by @itzraiss (#1461, #1505, #1523, #1593, #1549)
+- Indonesian by @wahitftry (#1563)
+- Chinese by @snekkenull (#1527)
+
+## ⚠️ Breaking Changes
+
+- **DALL-E Update**: user-provided keys for DALL-E are now specific to each DALL-E version, i.e.: `DALLE3_API_KEY` and `DALLE2_API_KEY`
+- Note: `DALLE_API_KEY` will work for both DALL-E-3 and DALL-E-2 when the admin provides the credential; in other words, this may only affect your users if DALLE_API_KEY is not set in the `.env` file. In this case, they will simply have to "uninstall" the plugin, and provide their API key again.
+- Unused legacy code will soon be removed from the repo (mainly on the client side)
+
+## 👀 Upcoming Features
+
+- Assistants API integration and General File support continue to be in active development, ETA: end of January
+- Prompt-engineering-focused features such as adding/removing messages at any point.
+- Better, more customizable, and easier System-wide Configuration for Endpoints/Models/Presets
+- [Our full Roadmap](https://github.com/users/danny-avila/projects/2)
+
+## New Contributors
+
+- [@LedyBacer](https://github.com/LedyBacer) made their first contribution in [#1413](https://github.com/danny-avila/LibreChat/pull/1413)
+- [@ineiti](https://github.com/ineiti) made their first contribution in [#1418](https://github.com/danny-avila/LibreChat/pull/1418)
+- [@nicam](https://github.com/nicam) made their first contribution in [#1539](https://github.com/danny-avila/LibreChat/pull/1539)
+- [@tmendenhall](https://github.com/tmendenhall) made their first contribution in [#1528](https://github.com/danny-avila/LibreChat/pull/1528)
+- [@eltociear](https://github.com/eltociear) made their first contribution in [#1546](https://github.com/danny-avila/LibreChat/pull/1546)
+- [@ganeshkrishnan1](https://github.com/ganeshkrishnan1) made their first contribution in [#1564](https://github.com/danny-avila/LibreChat/pull/1564)
+- [@wahitftry](https://github.com/wahitftry) made their first contribution in [#1563](https://github.com/danny-avila/LibreChat/pull/1563)
+- [@yangchuansheng](https://github.com/yangchuansheng) made their first contribution in [#1578](https://github.com/danny-avila/LibreChat/pull/1578)
+
+**Full Changelog**: [Compare v0.6.5...v0.6.6](https://github.com/danny-avila/LibreChat/compare/v0.6.5...v0.6.6)
diff --git a/pages/changelog/v0.6.9-breaking-changes.mdx b/pages/changelog/v0.6.9-breaking-changes.mdx
new file mode 100644
index 0000000..86c46b0
--- /dev/null
+++ b/pages/changelog/v0.6.9-breaking-changes.mdx
@@ -0,0 +1,72 @@
+---
+date: 2024/02/14
+title: ⚠️ Breaking Changes v0.6.9+
+description: Breaking Changes for the v0.6.9+ release of LibreChat
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+
+
+```sh filename="Endpoints"
+# ENDPOINTS=openAI,assistants,azureOpenAI,bingAI,chatGPTBrowser,google,gptPlugins,anthropic
+```
+
+```sh filename="OpenAI models"
+# OPENAI_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-0301,gpt-3.5-turbo,gpt-4,gpt-4-0613,gpt-4-vision-preview,gpt-3.5-turbo-0613,gpt-3.5-turbo-16k-0613,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview,gpt-3.5-turbo-1106,gpt-3.5-turbo-instruct,gpt-3.5-turbo-instruct-0914,gpt-3.5-turbo-16k
+```
+
+```sh filename="Assistants API"
+#====================#
+# Assistants API #
+#====================#
+
+ASSISTANTS_API_KEY=user_provided
+# ASSISTANTS_BASE_URL=
+# ASSISTANTS_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-16k-0613,gpt-3.5-turbo-16k,gpt-3.5-turbo,gpt-4,gpt-4-0314,gpt-4-32k-0314,gpt-4-0613,gpt-3.5-turbo-0613,gpt-3.5-turbo-1106,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview
+```
+
+```sh filename="Plugin models"
+# PLUGIN_MODELS=gpt-4,gpt-4-turbo-preview,gpt-4-0125-preview,gpt-4-1106-preview,gpt-4-0613,gpt-3.5-turbo,gpt-3.5-turbo-0125,gpt-3.5-turbo-1106,gpt-3.5-turbo-0613
+```
+
+```sh filename="Birthday Hat
+# SHOW_BIRTHDAY_ICON=true
+```
+
+```sh filename="DALL·E"
+# DALL·E
+#----------------
+# DALLE_API_KEY=
+# DALLE3_API_KEY=
+# DALLE2_API_KEY=
+# DALLE3_SYSTEM_PROMPT=
+# DALLE2_SYSTEM_PROMPT=
+# DALLE_REVERSE_PROXY=
+# DALLE3_BASEURL=
+# DALLE2_BASEURL=
+
+# DALL·E (via Azure OpenAI)
+# Note: requires some of the variables above to be set
+#----------------
+# DALLE3_AZURE_API_VERSION=
+# DALLE2_AZURE_API_VERSION=
+```
+
+
+
+
+ - A new method to use the ChatGPT endpoint is now documented. It uses "Ninja" - For more info: -
+ ~~[Ninja Deployment Guide]()~~ - [Ninja GitHub repo](https://github.com/gngpp/ninja/tree/main)
+
+
+
+ - Since PandoraNext has shut down, the ChatGPTbrowser endpoint is no longer available in
+ LibreChat. - For more info: -
+ [https://github.com/danny-avila/LibreChat/discussions/1663](https://github.com/danny-avila/LibreChat/discussions/1663#discussioncomment-8314025)
+ - [https://linux.do/t/topic/1051](https://linux.do/t/topic/1051)
+
diff --git a/pages/changelog/v0.6.9.mdx b/pages/changelog/v0.6.9.mdx
new file mode 100644
index 0000000..e675083
--- /dev/null
+++ b/pages/changelog/v0.6.9.mdx
@@ -0,0 +1,127 @@
+---
+date: 2024/02/13
+title: 🚀 LibreChat v0.6.9
+description: Happy Birthday LibreChat! 🎂, Infinite Scrolling, Security Enhancements, and more...
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+# What's Changed
+
+Here's the updated version of your text with the requested changes:
+
+## 🏞️ Highlights
+
+- **Happy Birthday LibreChat!** LibreChat is now officially 1-year old!
+- **Infinite Scrolling:** Scroll down to load more conversations, now sorted by date and usage.
+- **Docker**
+ - **Builds for ARM64v8:** Ensuring compatibility with a wider range of hardware, including Raspberry Pi and other ARM-based systems.
+ - **Docker Hub Images:** Pre-built images are now available on [@librechat](https://hub.docker.com/u/librechat) along with [@danny-avila](https://github.com/danny-avila?tab=packages&repo_name=LibreChat)
+- **GPT-4 & GPT-3.5 Turbo/0125 Model Support:** The latest GPT models are now supported.
+- **Security Enhancements:** Continuous improvements to security measures to protect user data and privacy.
+- **OpenRouter:** Now dynamically uses OpenRouter token cost for all of their models to update Token credit balance
+- The Assistants API integration will be merged to main shortly after this release, as this release marks a "latest stable release" before a huge update.
+
+## ✨ New Features
+
+- feat: allow only certain domain by [@Berry-13](https://github.com/Berry-13) in [#1562](https://github.com/danny-avila/LibreChat/pull/1562)
+- feat: PWA on iOS by [@fuegovic](https://github.com/fuegovic) in [#1602](https://github.com/danny-avila/LibreChat/pull/1602)
+- feat: Nginx SSL Secure Config by [@bsu3338](https://github.com/bsu3338) in [#1615](https://github.com/danny-avila/LibreChat/pull/1615)
+- feat: Add Health Check Route to Backend by [@danny-avila](https://github.com/danny-avila) in [#1623](https://github.com/danny-avila/LibreChat/pull/1623)
+- feat: Support for GPT-4 Turbo/0125 Models by [@danny-avila](https://github.com/danny-avila) in [#1643](https://github.com/danny-avila/LibreChat/pull/1643)
+- feat: ScrolltoBottom & Mobile Improvements; Translation Update by [@itzraiss](https://github.com/itzraiss) in [#1651](https://github.com/danny-avila/LibreChat/pull/1651)
+- feat: Log Custom Config File and Add Known Model Limits to Custom Endpoint by [@danny-avila](https://github.com/danny-avila) in [#1657](https://github.com/danny-avila/LibreChat/pull/1657)
+- feat: Security Enhancements by [@danny-avila](https://github.com/danny-avila) in [#1681](https://github.com/danny-avila/LibreChat/pull/1681)
+- feat: Support for GPT-3.5 Turbo/0125 Model by [@danny-avila](https://github.com/danny-avila) in [#1704](https://github.com/danny-avila/LibreChat/pull/1704)
+- feat: Use OpenRouter Model Data for Token Cost and Context by [@danny-avila](https://github.com/danny-avila) in [#1703](https://github.com/danny-avila/LibreChat/pull/1703)
+- style: Infinite Scroll Nav and Sort Convos by Date/Usage by [@danny-avila](https://github.com/danny-avila) in [#1708](https://github.com/danny-avila/LibreChat/pull/1708)
+- feat: User ID in Model Query; chore: cleanup ModelService by [@danny-avila](https://github.com/danny-avila) in [#1753](https://github.com/danny-avila/LibreChat/pull/1753)
+- feat: Support Alternate API Keys for Plugins by [@danny-avila](https://github.com/danny-avila) in [#1760](https://github.com/danny-avila/LibreChat/pull/1760)
+- feat: Push Container Images to DockerHub by [@danny-avila](https://github.com/danny-avila) in [#1762](https://github.com/danny-avila/LibreChat/pull/1762)
+- happy birthday LibreChat by [@Berry-13](https://github.com/Berry-13) in [#1768](https://github.com/danny-avila/LibreChat/pull/1768)
+
+## ⚙️ Other Changes
+
+- refactor: auth; style: match OpenAI; feat: custom social login order by [@Berry-13](https://github.com/Berry-13) in [#1421](https://github.com/danny-avila/LibreChat/pull/1421)
+- Clean Up OpenAI Config and Show 'Set Azure Key' for Plugins by [@danny-avila](https://github.com/danny-avila) in [#1649](https://github.com/danny-avila/LibreChat/pull/1649)
+- style: Settings UI Enhancements for Mobile by [@machinsoft](https://github.com/machinsoft) in [#1721](https://github.com/danny-avila/LibreChat/pull/1721)
+- refactor(convoSchema): index `updatedAt` field by [@danny-avila](https://github.com/danny-avila) in [#1732](https://github.com/danny-avila/LibreChat/pull/1732)
+- style: Circular Streaming Cursor by [@itzraiss](https://github.com/itzraiss) in [#1736](https://github.com/danny-avila/LibreChat/pull/1736)
+- chore: Refactor Update Script to Utilize Docker Compose v2 by [@danny-avila](https://github.com/danny-avila) in [#1752](https://github.com/danny-avila/LibreChat/pull/1752)
+- style: Update conversation history groups by [@trevorswanson](https://github.com/trevorswanson) in [#1770](https://github.com/danny-avila/LibreChat/pull/1770)
+- ci: Fix Conversation Grouping Tests by [@danny-avila](https://github.com/danny-avila) in [#1773](https://github.com/danny-avila/LibreChat/pull/1773)
+
+## 🔧 Fixes
+
+- fix: Converted the getter `name` and `description` of Azure AI Search Plugin to a property by [@zentooo](https://github.com/zentooo) in [#1599](https://github.com/danny-avila/LibreChat/pull/1599)
+- fix(Root.tsx): Update styling to use `h-dvh` instead of `h-screen` by [@danny-avila](https://
+
+github.com/danny-avila) in [#1608](https://github.com/danny-avila/LibreChat/pull/1608)
+
+- feat: CI Docker builds for arm64v8 by [@fidoriel](https://github.com/fidoriel) in [#1607](https://github.com/danny-avila/LibreChat/pull/1607)
+- fix: Preserve Dollar Signs in Code Blocks for LaTeX Parsing by [@danny-avila](https://github.com/danny-avila) in [#1612](https://github.com/danny-avila/LibreChat/pull/1612)
+- fix: Bump `@langchain/google-genai` to Address Chinese Text Bug by [@danny-avila](https://github.com/danny-avila) in [#1654](https://github.com/danny-avila/LibreChat/pull/1654)
+- fix: Avatar Check in User Auth by [@ineiti](https://github.com/ineiti) in [#1677](https://github.com/danny-avila/LibreChat/pull/1677)
+- fix: Re-order System Message to Top for Mistral API Payloads by [@danny-avila](https://github.com/danny-avila) in [#1678](https://github.com/danny-avila/LibreChat/pull/1678)
+- fix: Pass Base64 to Gemini Vision Payload when using CDN URLs by [@danny-avila](https://github.com/danny-avila) in [#1705](https://github.com/danny-avila/LibreChat/pull/1705)
+- fix(getModelMaxTokens): Retrieve Correct Context Tokens for Azure OpenAI by [@danny-avila](https://github.com/danny-avila) in [#1710](https://github.com/danny-avila/LibreChat/pull/1710)
+- fix: Patch incorrect Package Installation by [@danny-avila](https://github.com/danny-avila) in [#1720](https://github.com/danny-avila/LibreChat/pull/1720)
+- fix: Update `.devcontainer` Files by [@ryohei-kamiya](https://github.com/ryohei-kamiya) in [#1712](https://github.com/danny-avila/LibreChat/pull/1712)
+- fix: socialLogins default value by [@danny-avila](https://github.com/danny-avila) in [#1730](https://github.com/danny-avila/LibreChat/pull/1730)
+- fix: Minor Plugins Improvements by [@danny-avila](https://github.com/danny-avila) in [#1766](https://github.com/danny-avila/LibreChat/pull/1766)
+
+## 📝 Documentation
+
+- docs: Update litellm.md to add Ollama by [@bsu3338](https://github.com/bsu3338) in [#1616](https://github.com/danny-avila/LibreChat/pull/1616)
+- docs: Update litellm.md with Redis and Langfuse by [@bsu3338](https://github.com/bsu3338) in [#1618](https://github.com/danny-avila/LibreChat/pull/1618)
+- docs: Update `multilingual_information.md` by [@jo-s-eph](https://github.com/jo-s-eph) in [#1622](https://github.com/danny-avila/LibreChat/pull/1622)
+- docs update: remove ChatGPTbrowser and other small fixes by [@fuegovic](https://github.com/fuegovic) in [#1686](https://github.com/danny-avila/LibreChat/pull/1686)
+- docs: add `copilot-gpt4-service` AI setup info by [@zimmra](https://github.com/zimmra) in [#1695](https://github.com/danny-avila/LibreChat/pull/1695)
+- docs: Ninja - ChatGPT-browser reverse proxy by [@fuegovic](https://github.com/fuegovic) in [#1697](https://github.com/danny-avila/LibreChat/pull/1697)
+- README.md: update button layout by [@fuegovic](https://github.com/fuegovic) in [#1709](https://github.com/danny-avila/LibreChat/pull/1709)
+- docs: How to Authenticate MongoDB by [@danny-avila](https://github.com/danny-avila) in [#1724](https://github.com/danny-avila/LibreChat/pull/1724)
+- docs: Formatting Fix by [@danny-avila](https://github.com/danny-avila) in [#1725](https://github.com/danny-avila/LibreChat/pull/1725)
+- docs: Formatting Fix by [@fuegovic](https://github.com/fuegovic) in [#1726](https://github.com/danny-avila/LibreChat/pull/1726)
+- docs: Add deploy to Zeabur button and guide by [@yuaanlin](https://github.com/yuaanlin) in [#1727](https://github.com/danny-avila/LibreChat/pull/1727)
+- docs: fix link pointing to dotenv guide by [@Nihisil](https://github.com/Nihisil) in [#1739](https://github.com/danny-avila/LibreChat/pull/1739)
+- update dotenv.md by [@fuegovic](https://github.com/fuegovic) in [#1740](https://github.com/danny-avila/LibreChat/pull/1740)
+- docs: Ollama Documentation Update by [@bsu3338](https://github.com/bsu3338) in [#1756](https://github.com/danny-avila/LibreChat/pull/1756)
+- docs: update to compose v2 by [@fuegovic](https://github.com/fuegovic) in [#1767](https://github.com/danny-avila/LibreChat/pull/1767)
+- update custom_config.md by [@fuegovic](https://github.com/fuegovic) in [#1774](https://github.com/danny-avila/LibreChat/pull/1774)
+- docs: clarifications - override file & balance/token count by [@fuegovic](https://github.com/fuegovic) in [#1783](https://github.com/danny-avila/LibreChat/pull/1783)
+
+## 🌐 Internationalization
+
+- Update indonesian translation by [@wahitftry](https://github.com/wahitftry) in [#1601](https://github.com/danny-avila/LibreChat/pull/1601)
+- Update Japanese translation by [@Kakenyan](https://github.com/Kakenyan) in [#1666](https://github.com/danny-avila/LibreChat/pull/1666)
+- Update German Translations by [@marlonka
+
+](https://github.com/marlonka) in [#1683](https://github.com/danny-avila/LibreChat/pull/1683)
+
+## 👀 Upcoming Features
+
+- Assistants API will release shortly after this tag.
+- Admin Panel (more info on this soon)
+- Enhanced Prompt Engineering
+ - Create a Preset wizard
+ - Add/delete messages anywhere in the conversation
+ - Multiple response streaming
+- In-line text commands for using presets/assistants/switching endpoints
+
+## New Contributors
+
+- [@fidoriel](https://github.com/fidoriel) made their first contribution in [#1607](https://github.com/danny-avila/LibreChat/pull/1607)
+- [@jo-s-eph](https://github.com/jo-s-eph) made their first contribution in [#1622](https://github.com/danny-avila/LibreChat/pull/1622)
+- [@Kakenyan](https://github.com/Kakenyan) made their first contribution in [#1666](https://github.com/danny-avila/LibreChat/pull/1666)
+- [@zimmra](https://github.com/zimmra) made their first contribution in [#1695](https://github.com/danny-avila/LibreChat/pull/1695)
+- [@marlonka](https://github.com/marlonka) made their first contribution in [#1683](https://github.com/danny-avila/LibreChat/pull/1683)
+- [@ryohei-kamiya](https://github.com/ryohei-kamiya) made their first contribution in [#1712](https://github.com/danny-avila/LibreChat/pull/1712)
+- [@yuaanlin](https://github.com/yuaanlin) made their first contribution in [#1727](https://github.com/danny-avila/LibreChat/pull/1727)
+- [@Nihisil](https://github.com/Nihisil) made their first contribution in [#1739](https://github.com/danny-avila/LibreChat/pull/1739)
+- [@trevorswanson](https://github.com/trevorswanson) made their first contribution in [#1770](https://github.com/danny-avila/LibreChat/pull/1770)
+
+**Full Changelog**: [v0.6.6...v0.6.9](https://github.com/danny-avila/LibreChat/compare/v0.6.6...v0.6.9)
diff --git a/pages/changelog/v0.7.0-breaking-changes.mdx b/pages/changelog/v0.7.0-breaking-changes.mdx
new file mode 100644
index 0000000..bfb2654
--- /dev/null
+++ b/pages/changelog/v0.7.0-breaking-changes.mdx
@@ -0,0 +1,145 @@
+---
+date: 2024/04/02
+title: ⚠️ Breaking Changes v0.7.0+
+description: Breaking Changes for the v0.7.0+ release of LibreChat
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+
+Client-facing error messages now display this warning asking to contact the admin.
+
+For the full error consult the console logs or the additional logs located in `./logs`
+
+
+
+
+
+
+ - The full logs are now in `./logs` (they are still in `./api/logs` for local, non-docker
+ installations)
+
+
+
+ - **[Google Search Plugin]()**: Changed the environment variable for this plugin from
+ `GOOGLE_API_KEY` to `GOOGLE_SEARCH_API_KEY` due to a conflict with the Google Generative AI
+ library pulling this variable automatically. If you are using this plugin, please update your
+ `.env` file accordingly.
+
+
+
+ - **RAG API Update**: The default Docker compose files now include a Python API and Vector
+ Database for RAG (Retrieval-Augmented Generation). Read more about this in the **[RAG API
+ page]()**
+
+
+
+
+```sh filename="➕ JSON Logging"
+#===============#
+# JSON Logging #
+#===============#
+
+# Use when process console logs in cloud deployment like GCP/AWS
+CONSOLE_JSON=false
+```
+
+```sh filename="➕ LibreChat.yaml path"
+#===============#
+# Configuration #
+#===============#
+# Use an absolute path, a relative path, or a URL
+
+# CONFIG_PATH="/alternative/path/to/librechat.yaml"
+```
+
+```sh filename="❌ chatGPTBrowser was removed"
+# ENDPOINTS=openAI,assistants,azureOpenAI,bingAI,google,gptPlugins,anthropic
+```
+
+```sh filename="➕ Added placeholders for Known Endpoints"
+#===================================#
+# Known Endpoints - librechat.yaml #
+#===================================#
+# https://docs.librechat.ai/install/configuration/ai_endpoints.html
+
+# GROQ_API_KEY=
+# SHUTTLEAI_KEY=
+# OPENROUTER_KEY=
+# MISTRAL_API_KEY=
+# ANYSCALE_API_KEY=
+# FIREWORKS_API_KEY=
+# PERPLEXITY_API_KEY=
+# TOGETHERAI_API_KEY=
+```
+
+```sh filename="✨ Update Anthropic models"
+# ANTHROPIC_MODELS=claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307,claude-2.1,claude-2,claude-1.2,claude-1,claude-1-100k,claude-instant-1,claude-instant-1-100k
+```
+
+```sh filename="❌ Azure env config now deprecated"
+#============#
+# Azure #
+#============#
+
+
+# Note: these variables are DEPRECATED
+# Use the `librechat.yaml` configuration for `azureOpenAI` instead
+# You may also continue to use them if you opt out of using the `librechat.yaml` configuration
+
+# AZURE_OPENAI_DEFAULT_MODEL=gpt-3.5-turbo # Deprecated
+# AZURE_OPENAI_MODELS=gpt-3.5-turbo,gpt-4 # Deprecated
+# AZURE_USE_MODEL_AS_DEPLOYMENT_NAME=TRUE # Deprecated
+# AZURE_API_KEY= # Deprecated
+# AZURE_OPENAI_API_INSTANCE_NAME= # Deprecated
+# AZURE_OPENAI_API_DEPLOYMENT_NAME= # Deprecated
+# AZURE_OPENAI_API_VERSION= # Deprecated
+# AZURE_OPENAI_API_COMPLETIONS_DEPLOYMENT_NAME= # Deprecated
+# AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME= # Deprecated
+# PLUGINS_USE_AZURE="true" # Deprecated
+## v0.6.10+ (-dev build)
+```
+
+```sh filename="❌ Removed ChatGPT"
+#============#
+# ChatGPT #
+#============#
+
+CHATGPT_TOKEN=
+CHATGPT_MODELS=text-davinci-002-render-sha
+# CHATGPT_REVERSE_PROXY=
+```
+
+```sh filename="✨ Assistants now set to "user_provided" by default"
+ASSISTANTS_API_KEY=user_provided
+```
+
+```sh filename="⚠️ GOOGLE_API_KEY renamed GOOGLE_SEARCH_API_KEY="
+GOOGLE_SEARCH_API_KEY=
+```
+
+```sh filename="➕ Tavily and Traversaal API keys"
+# Tavily
+#-----------------
+TAVILY_API_KEY=
+
+# Traversaal
+#-----------------
+TRAVERSAAL_API_KEY=
+```
+
+```sh filename="➕ Moderation, illegal model request score"
+ILLEGAL_MODEL_REQ_SCORE=5
+```
+
+```sh filename="➕ OpenID Auth update"
+OPENID_REQUIRED_ROLE=
+OPENID_REQUIRED_ROLE_TOKEN_KIND=
+OPENID_REQUIRED_ROLE_PARAMETER_PATH=
+```
+
+
diff --git a/pages/changelog/v0.7.0.mdx b/pages/changelog/v0.7.0.mdx
new file mode 100644
index 0000000..1aaff78
--- /dev/null
+++ b/pages/changelog/v0.7.0.mdx
@@ -0,0 +1,197 @@
+---
+date: 2024/04/01
+title: 🚀 LibreChat v0.7.0
+description: The v0.7.0 release of LibreChat
+ogImage: /images/changelog/v0.7.0.png
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+- **To update:** For an efficient transition, please run:
+
+```sh filename="Update"
+npm run update
+```
+
+from the project directory.
+
+- **Prerequisites:** git and npm need to be installed on your machine
+- **Recommended:** Clear your browser's local storage and cookies before initiating
+
+### 🏞️ Highlights
+
+- Introduced Anthropic's Claude 3 & Vision support.
+- Introduced pre-built Docker images by default for streamlined deployment.
+- Updated UI theme and frontend optimizations, mainly for the chat input and editing messages.
+- Added "Chat with Files" (RAG API + Vector Database solution) for OpenAI, Azure OpenAI, Custom Endpoints, Anthropic, and Google.
+- Added Azure OpenAI configuration through "librechat.yaml" to allow seamless switching of regions/deployments per model selection.
+- Implemented balance tracking, Azure support, fixed API actions, message streaming, vision support, and additional tools for Assistants.
+
+### ✨ New Features
+
+- 🛡️ Model Validation Middleware by [@danny-avila](https://github.com/danny-avila) in [#1841](https://github.com/danny-avila/LibreChat/pull/1841)
+- 📋 Accumulate Text Parts to Clipboard for Assistant Outputs by [@danny-avila](https://github.com/danny-avila) in [#1847](https://github.com/danny-avila/LibreChat/pull/1847)
+- 🔧 optional librechat.yaml path via environment variable by [@ndrsfel](https://github.com/ndrsfel) in [#1858](https://github.com/danny-avila/LibreChat/pull/1858)
+- 🐋 docker pre-built image by default by [@fuegovic](https://github.com/fuegovic) in [#1860](https://github.com/danny-avila/LibreChat/pull/1860)
+- 🅰️ Azure Config to Allow Different Deployments per Model by [@danny-avila](https://github.com/danny-avila) in [#1863](https://github.com/danny-avila/LibreChat/pull/1863)
+- 🎨 Create Avatars of Initials Locally by [@danny-avila](https://github.com/danny-avila) in [#1869](https://github.com/danny-avila/LibreChat/pull/1869)
+- 🔗 NavLinks customization for Help & Faq URL by [@Berry-13](https://github.com/Berry-13) in [#1872](https://github.com/danny-avila/LibreChat/pull/1872)
+- 🅰️ Azure AI Studio, Models as a Service Support by [@danny-avila](https://github.com/danny-avila) in [#1902](https://github.com/danny-avila/LibreChat/pull/1902)
+- 🤖 add multiple known endpoints by [@fuegovic](https://github.com/fuegovic) in [#1917](https://github.com/danny-avila/LibreChat/pull/1917)
+- 🌍 Extend regex to support international usernames by [@fuegovic](https://github.com/fuegovic) in [#1918](https://github.com/danny-avila/LibreChat/pull/1918)
+- 🔗 User Provided Base URL for OpenAI endpoints by [@danny-avila](https://github.com/danny-avila) in [#1919](https://github.com/danny-avila/LibreChat/pull/1919)
+- 📝 Improved Textarea Functionality by [@danny-avila](https://github.com/danny-avila) in [#1942](https://github.com/danny-avila/LibreChat/pull/1942)
+- 👤 Show Default Icon if No Avatar or Username provided by [@danny-avila](https://github.com/danny-avila) in [#1943](https://github.com/danny-avila/LibreChat/pull/1943)
+- 🖥️ Match STDOUT Logs with Debug File Logs by [@danny-avila](https://github.com/danny-avila) in [#1944](https://github.com/danny-avila/LibreChat/pull/1944)
+- 🔎 update meilisearch to v1.6 / 0.37.0 by [@fuegovic](https://github.com/fuegovic) in [#1981](https://github.com/danny-avila/LibreChat/pull/1981)
+- 🤖 Anthropic: Claude 3 & Vision Support by [@danny-avila](https://github.com/danny-avila) in [#1984](https://github.com/danny-avila/LibreChat/pull/1984)
+- 🔎 Traversaal Search Tool by [@danny-avila](https://github.com/danny-avila) in [#1991](https://github.com/danny-avila/LibreChat/pull/1991)
+- 🅰️ Azure OpenAI Assistants API Support by [@danny-avila](https://github.com/danny-avila) in [#1992](https://github.com/danny-avila/LibreChat/pull/1992)
+- 🔍 Add Google Search Tool for Assistants by [@walbercardoso](https://github.com/walbercardoso) in [#1994](https://github.com/danny-avila/LibreChat/pull/1994)
+- 🌐 librechat.yaml from URL by [@danny-avila](https://github.com/danny-avila) in [#2064](https://github.com/danny-avila/LibreChat/pull/2064)
+- 📜 Customize Privacy Policy & Terms of Service by [@f1yn](https://github.com/f1yn) in [#2091](https://github.com/danny-avila/LibreChat/pull/2091)
+- 🪙 Assistants Token Balance & other improvements by [@danny-avila](https://github.com/danny-avila) in [#2114](https://github.com/danny-avila/LibreChat/pull/2114)
+- 🔧 Share Assistant Actions between Users by [@danny-avila](https://github.com/danny-avila) in [#2116](https://github.com/danny-avila/LibreChat/pull/2116)
+- 🔧 Actions: Allow Multiple Actions from Same Domain per Assistant by [@danny-avila](https://github.com/danny-avila) in [#2120](https://github.com/danny-avila/LibreChat/pull/2120)
+- 🔍 Filter MultiSelect and SelectDropDown (+variants) + CSS fixes for Scrollbar by [@danny-avila](https://github.com/danny-avila) in [#2138](https://github.com/danny-avila/LibreChat/pull/2138)
+- 🗃️ General File Support for OpenAI, Azure, Custom, Anthropic and Google (RAG) by [@danny-avila](https://github.com/danny-avila) in [#2143](https://github.com/danny-avila/LibreChat/pull/2143)
+- 💽 Add CONSOLE_JSON for deploying to GCP K8S env by [@idachev](https://github.com/idachev) in [#2146](https://github.com/danny-avila/LibreChat/pull/2146)
+- 🚀 Add ShuttleAI as Known Endpoint by [@herumes](https://github.com/herumes) in [#2152](https://github.com/danny-avila/LibreChat/pull/2152)
+- 🚀 Assistants Streaming by [@danny-avila](https://github.com/danny-avila) in [#2159](https://github.com/danny-avila/LibreChat/pull/2159)
+- 📂 RAG Improvements\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2169](https://github.com/danny-avila/LibreChat/pull/2169)
+- 🎉 Optimizations and Anthropic Title Generation\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2184](https://github.com/danny-avila/LibreChat/pull/2184)
+- 👓 Vision Support for Assistants\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2195](https://github.com/danny-avila/LibreChat/pull/2195)
+- 🚀 Add GitHub Actions Workflow for Generating Docs Embeddings\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2216](https://github.com/danny-avila/LibreChat/pull/2216)
+- 💽 Add Script for User Stats\*\* by [@idachev](https://github.com/idachev) in [PR #2224](https://github.com/danny-avila/LibreChat/pull/2224)
+- ⬇️ Assistant File Downloads\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2234](https://github.com/danny-avila/LibreChat/pull/2234)
+- 🐳 RAG for Default Docker Compose Files + Docs Update\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2246](https://github.com/danny-avila/LibreChat/pull/2246)
+- 🚀 Add CLI Helper Scripts to API Container Image\*\* by [@danny-avila](https://github.com/danny-avila) in [PR #2257](https://github.com/danny-avila/LibreChat/pull/2257)
+
+### ⚙️ Other Changes
+
+- 🐋 Add Docker Compose Build Latest Main Image workflow by [@danny-avila](https://github.com/danny-avila) in [#1819](https://github.com/danny-avila/LibreChat/pull/1819)
+- 🔗 Add Stable Discord and Homepage Links by [@danny-avila](https://github.com/danny-avila) in [#1835](https://github.com/danny-avila/LibreChat/pull/1835)
+- 📤 Utilize "intermediateReply" when "message.content" is Empty by [@danny-avila](https://github.com/danny-avila) in [#1837](https://github.com/danny-avila/LibreChat/pull/1837)
+- 🛠️ Model Loading and Custom Endpoint Error Handling by [@danny-avila](https://github.com/danny-avila) in [#1849](https://github.com/danny-avila/LibreChat/pull/1849)
+- 🔥bump firebase dependency by [@danny-avila](https://github.com/danny-avila) in [#1900](https://github.com/danny-avila/LibreChat/pull/1900)
+- 🛠️ Abort AI Requests on Close & Remove Verbose Logs for Plugins by [@danny-avila](https://github.com/danny-avila) in [#1914](https://github.com/danny-avila/LibreChat/pull/1914)
+- 🛠️ make apiKey and baseURL pairings more versatile by [@danny-avila](https://github.com/danny-avila) in [#1985](https://github.com/danny-avila/LibreChat/pull/1985)
+- 💾 Update .env.example by [@fuegovic](https://github.com/fuegovic) in [#2004](https://github.com/danny-avila/LibreChat/pull/2004)
+- 🖊️fix deployment guides by [@fuegovic](https://github.com/fuegovic) in [#2021](https://github.com/danny-avila/LibreChat/pull/2021)
+- 🪅 update groq models and librechat.example.yaml by [@fuegovic](https://github.com/fuegovic) in [#2031](https://github.com/danny-avila/LibreChat/pull/2031)
+- 📧 update email templates by [@fuegovic](https://github.com/fuegovic) in [#2057](https://github.com/danny-avila/LibreChat/pull/2057)
+- ✍️ Optimize Text Input & Enhance UX by [@danny-avila](https://github.com/danny-avila) in [#2058](https://github.com/danny-avila/LibreChat/pull/2058)
+- 🧹 remove unused import by [@badcom](https://github.com/badcom) in [#2072](https://github.com/danny-avila/LibreChat/pull/2072)
+- 📋 add requirements.txt to documentation, to ease maintenance by [@ido777](https://github.com/ido777) in [#2122](https://github.com/danny-avila/LibreChat/pull/2122)
+- 🔬 Add Circular Dependency Check to "backend-review" by [@danny-avila](https://github.com/danny-avila) in [#2149](https://github.com/danny-avila/LibreChat/pull/2149)
+- 🐋 Cleanup Dockerfile by [@danny-avila](https://github.com/danny-avila) in [#2156](https://github.com/danny-avila/LibreChat/pull/2156)
+- 🔎 bump meilisearch v1.7 / v0.38.0 by [@fuegovic](https://github.com/fuegovic) in [#2175](https://github.com/danny-avila/LibreChat/pull/2175)
+- 🧹 Update Docker Docs & Make "cache" field Optional for Custom Config by [@danny-avila](https://github.com/danny-avila) in [#2211](https://github.com/danny-avila/LibreChat/pull/2211)
+- 🔍 Clean Up Documentation by [@danny-avila](https://github.com/danny-avila) in [#2217](https://github.com/danny-avila/LibreChat/pull/2217) [#2218](https://github.com/danny-avila/LibreChat/pull/2218) [#2219](https://github.com/danny-avila/LibreChat/pull/2219) [#2220](https://github.com/danny-avila/LibreChat/pull/2220)
+- ⚓ Fallback to Default Models if Fetch Fails by [@danny-avila](https://github.com/danny-avila) in [#2236](https://github.com/danny-avila/LibreChat/pull/2236)
+- ⚓ Stricter Default Model Fallback by [@danny-avila](https://github.com/danny-avila) in [#2239](https://github.com/danny-avila/LibreChat/pull/2239)
+
+### 🎨 Styling
+
+- 🖌️ Update Light/Dark UI Themes by [@Berry-13](https://github.com/Berry-13) in [#1754](https://github.com/danny-avila/LibreChat/pull/1754)
+- ⬤ Uniform Display of Result-Streaming Cursor by [@danny-avila](https://github.com/danny-avila) in [#1842](https://github.com/danny-avila/LibreChat/pull/1842)
+- 🖌️ auth dark theme by [@Berry-13](https://github.com/Berry-13) in [#1862](https://github.com/danny-avila/LibreChat/pull/1862)
+- 🖌️ update dialog position by [@Berry-13](https://github.com/Berry-13) in [#1999](https://github.com/danny-avila/LibreChat/pull/1999)
+- 🔧 Improve UI and UX with Style Fixes and Code Refactors by [@danny-avila](https://github.com/danny-avila) in [#2002](https://github.com/danny-avila/LibreChat/pull/2002)
+- 🖌️ Minor UI Updates by [@machinsoft](https://github.com/machinsoft) in [#2011](https://github.com/danny-avila/LibreChat/pull/2011)
+- 🔲 HoverButton UI adjustment, change code font by [@SailFlorve](https://github.com/SailFlorve) in [#2017](https://github.com/danny-avila/LibreChat/pull/2017)
+- 🔧 SidePanel: Center buttons when collapsed by [@walbercardoso](https://github.com/walbercardoso) in [#2045](https://github.com/danny-avila/LibreChat/pull/2045)
+- ⛔ Auth Error and Preset Items Styling by [@machinsoft](https://github.com/machinsoft) in [#2069](https://github.com/danny-avila/LibreChat/pull/2069)
+- 🧊 Adjust Endpoint Icons by [@danny-avila](https://github.com/danny-avila) in [#2070](https://github.com/danny-avila/LibreChat/pull/2070)
+- 🎨 Privacy Policy & Terms of Service by [@fuegovic](https://github.com/fuegovic) in [#2111](https://github.com/danny-avila/LibreChat/pull/2111)
+- 🖌️ Improve Dark Theme Accessibility by [@Berry-13](https://github.com/Berry-13) in [#2125](https://github.com/danny-avila/LibreChat/pull/2125)
+- 🔧 Fix Convo Fade Effect by [@walbercardoso](https://github.com/walbercardoso) in [#2147](https://github.com/danny-avila/LibreChat/pull/2147)
+- 🌑 File Manager: Localize and Update Dark Mode Stylings by [@danny-avila](https://github.com/danny-avila) in [#2155](https://github.com/danny-avila/LibreChat/pull/2155)
+- 🎨 Refine SidePanel and Textarea Styling by [@danny-avila](https://github.com/danny-avila) in [#2209](https://github.com/danny-avila/LibreChat/pull/2209)
+- 🎨 Ensure Side Panel state Remains on Refresh by [@danny-avila](https://github.com/danny-avila) in [#2210](https://github.com/danny-avila/LibreChat/pull/2210)
+
+### 🔧 Fixes
+
+- 🔀 Endpoint Type Mismatch when Switching Conversations by [@danny-avila](https://github.com/danny-avila) in [#1834](https://github.com/danny-avila/LibreChat/pull/1834)
+- 🐛 Preserve Default Model in Message Requests by [@danny-avila](https://github.com/danny-avila) in [#1857](https://github.com/danny-avila/LibreChat/pull/1857)
+- 🗨️ Prevent Resetting Title to 'New Chat' on Follow-Up Message by [@danny-avila](https://github.com/danny-avila) in [#1870](https://github.com/danny-avila/LibreChat/pull/1870)
+- 🔀 Correct Expected Behavior for Modular Chat Feature by [@danny-avila](https://github.com/danny-avila) in [#1871](https://github.com/danny-avila/LibreChat/pull/1871)
+- 🍞 Minor fixes and improved Bun support by [@danny-avila](https://github.com/danny-avila) in [#1916](https://github.com/danny-avila/LibreChat/pull/1916)
+- 🛠️ RunManager, AssistantService and useContentHandler Issues by [@danny-avila](https://github.com/danny-avila) in [#1920](https://github.com/danny-avila/LibreChat/pull/1920)
+- 🔧 useTextarea: duplicate text when pasting on chromium by [@Berry-13](https://github.com/Berry-13) in [#1951](https://github.com/danny-avila/LibreChat/pull/1951)
+- 🔧 EditMessage: duplicate text when pasting by [@Berry-13](https://github.com/Berry-13) in [#1970](https://github.com/danny-avila/LibreChat/pull/1970)
+- 🧩 Plugins: Keep User "agentModel" and Model Validation by [@danny-avila](https://github.com/danny-avila) in [#1972](https://github.com/danny-avila/LibreChat/pull/1972)
+- 🧪 ci: update failing "initializeClient" tests with new expected values by [@danny-avila](https://github.com/danny-avila) in [#1982](https://github.com/danny-avila/LibreChat/pull/1982)
+- 👥 assistants: Improve Error handling by [@danny-avila](https://github.com/danny-avila) in [#2012](https://github.com/danny-avila/LibreChat/pull/2012)
+- 🖼️ Clipboard Files & File Name Issues by [@danny-avila](https://github.com/danny-avila) in [#2015](https://github.com/danny-avila/LibreChat/pull/2015)
+- 🔧 ThemeContext: themes don't auto-update; refresh required by [@Berry-13](https://github.com/Berry-13) in [#2037](https://github.com/danny-avila/LibreChat/pull/2037)
+- 🔧 Convo Corners & Updated Colors by [@itzraiss](https://github.com/itzraiss) in [#2046](https://github.com/danny-avila/LibreChat/pull/2046)
+- 🤖 assistants: Default Capabilities and Retrieval Models by [@danny-avila](https://github.com/danny-avila) in [#2102](https://github.com/danny-avila/LibreChat/pull/2102)
+- 🖊️ MessageContent: typo "censored" by [@Berry-13](https://github.com/Berry-13) in [#2112](https://github.com/danny-avila/LibreChat/pull/2112)
+- 🔧 Remove "Unique" Index from Actions Model and Initialize Empty Actions for Deletion by [@danny-avila](https://github.com/danny-avila) in [#2118](https://github.com/danny-avila/LibreChat/pull/2118)
+- 🪰 Azure Parsing and Assistants Payload by [@danny-avila](https://github.com/danny-avila) in [#2133](https://github.com/danny-avila/LibreChat/pull/2133)
+- 📧 Correct Handling of Self-Signed Certificates in "sendEmail" by [@danny-avila](https://github.com/danny-avila) in [#2148](https://github.com/danny-avila/LibreChat/pull/2148)
+- 🔧 menu: Menu Item Filter Improvements by [@f1yn](https://github.com/f1yn) in [#2153](https://github.com/danny-avila/LibreChat/pull/2153)
+- 🐋 Dockerfile: add additional deps., handle permissions, "--no-audit" flag on install by [@danny-avila](https://github.com/danny-avila) in [#2157](https://github.com/danny-avila/LibreChat/pull/2157)
+- 🔧 assistants: Vision minor fix & Add Docs by [@danny-avila](https://github.com/danny-avila) in [#2196](https://github.com/danny-avila/LibreChat/pull/2196)
+- 🌟 Handle Assistants Edge Cases, Improve Filter Styling by [@danny-avila](https://github.com/danny-avila) in [#2201](https://github.com/danny-avila/LibreChat/pull/2201)
+- 🐞 client: Prevent Async Reset of Latest Message by [@danny-avila](https://github.com/danny-avila) in [#2203](https://github.com/danny-avila/LibreChat/pull/2203)
+- 🗨️ useSSE: Prevent 'New Chat' Title after Regenerating Initial Message by [@danny-avila](https://github.com/danny-avila) in [#2238](https://github.com/danny-avila/LibreChat/pull/2238)
+- 🌍 Translations: Map Partial "langCode" and Add Unit Tests by [@danny-avila](https://github.com/danny-avila) in [#2240](https://github.com/danny-avila/LibreChat/pull/2240)
+- 🔧 Improve Assistants File Citation & Download Handling by [@danny-avila](https://github.com/danny-avila) in [#2248](https://github.com/danny-avila/LibreChat/pull/2248)
+- 🎨 Optimize StableDiffusion API Tool and Fix for Assistants Usage by [@danny-avila](https://github.com/danny-avila) in [#2253](https://github.com/danny-avila/LibreChat/pull/2253)
+- 🐞 Handle Garbled Chinese Characters in File Upload by [@pxz2016](https://github.com/pxz2016) in [#2261](https://github.com/danny-avila/LibreChat/pull/2261)
+- 🐞 Handle Empty Model Error in Assistants Form by [@danny-avila](https://github.com/danny-avila) in [#2265](https://github.com/danny-avila/LibreChat/pull/2265)
+- 📋 Ensure Textarea Resizes in Clipboard Edge Case by [@danny-avila](https://github.com/danny-avila) in [#2268](https://github.com/danny-avila/LibreChat/pull/2268)
+
+### 📝 Documentation
+
+- 📝 add env changes to breaking_changes.md and minor fixes by [@fuegovic](https://github.com/fuegovic) in [#1812](https://github.com/danny-avila/LibreChat/pull/1812)
+- 🐋 update breaking_changes.md by [@fuegovic](https://github.com/fuegovic) in [#1864](https://github.com/danny-avila/LibreChat/pull/1864)
+- ✏️ add tavily to env.example and dotenv.md by [@fuegovic](https://github.com/fuegovic) in [#1866](https://github.com/danny-avila/LibreChat/pull/1866)
+- 📒 Add newline for list to be correctly rendered in docs UI by [@arnoan](https://github.com/arnoan) in [#1873](https://github.com/danny-avila/LibreChat/pull/1873)
+- 🤖 Add Groq and other Compatible AI Endpoints by [@danny-avila](https://github.com/danny-avila) in [#1915](https://github.com/danny-avila/LibreChat/pull/1915)
+- 🐳 experimental: Dev Image Workflow & Remove Unused Code by [@danny-avila](https://github.com/danny-avila) in [#1928](https://github.com/danny-avila/LibreChat/pull/1928)
+- 🔎 update meilisearch instruction by [@fuegovic](https://github.com/fuegovic) in [#1930](https://github.com/danny-avila/LibreChat/pull/1930)
+- 📝 Separate LiteLLM and Ollama Documentation by [@bsu3338](https://github.com/bsu3338) in [#1948](https://github.com/danny-avila/LibreChat/pull/1948)
+- 🦙 add Ollama to index and update icon by [@fuegovic](https://github.com/fuegovic) in [#1967](https://github.com/danny-avila/LibreChat/pull/1967)
+- 🥷 remove ninja and chatgptBrowser by [@fuegovic](https://github.com/fuegovic) in [#1973](https://github.com/danny-avila/LibreChat/pull/1973)
+- 📝 update Anthropic models + Traversaal by [@fuegovic](https://github.com/fuegovic) in [#1995](https://github.com/danny-avila/LibreChat/pull/1995)
+- 📝 additions to deployment guide by [@ido777](https://github.com/ido777) in [#2001](https://github.com/danny-avila/LibreChat/pull/2001)
+- 🌊 refactor DigitalOcean guide by [@ido777](https://github.com/ido777) in [#2006](https://github.com/danny-avila/LibreChat/pull/2006)
+- ✏️ Railway, Traefik, and Improvements by [@fuegovic](https://github.com/fuegovic) in [#2060](https://github.com/danny-avila/LibreChat/pull/2060)
+- 📑 update .env.example by [@fuegovic](https://github.com/fuegovic) in [#2109](https://github.com/danny-avila/LibreChat/pull/2109)
+- 📖 Update ShuttleAI Fibonacci Image by [@herumes](https://github.com/herumes) in [#2160](https://github.com/danny-avila/LibreChat/pull/2160)
+- 📚 Fix Broken Links by [@fkohrt](https://github.com/fkohrt) in [#2171](https://github.com/danny-avila/LibreChat/pull/2171)
+- 📖 Add details for Azure OpenAI Assistants by [@fkohrt](https://github.com/fkohrt) in [#2173](https://github.com/danny-avila/LibreChat/pull/2173)
+- 🧑💻 Update General Docs and Contribution Guidelines by [@fuegovic](https://github.com/fuegovic) in [#2194](https://github.com/danny-avila/LibreChat/pull/2194)
+- 🔗 Fix Link to Code of Conduct by [@s2terminal](https://github.com/s2terminal) in [#2206](https://github.com/danny-avila/LibreChat/pull/2206)
+- ✏️ update dotenv.md by [@fuegovic](https://github.com/fuegovic) in [#2226](https://github.com/danny-avila/LibreChat/pull/2226)
+
+### 🌐 Internationalization
+
+- 🌍 : Update Portuguese Translations by [@itzraiss](https://github.com/itzraiss) in [#1867](https://github.com/danny-avila/LibreChat/pull/1867)
+- 🌍 : Add Hebrew Translation by [@ido777](https://github.com/ido777) in [#1953](https://github.com/danny-avila/LibreChat/pull/1953)
+- 🌍 : Update Russian Translation by [@virtuman](https://github.com/virtuman) in [#2061](https://github.com/danny-avila/LibreChat/pull/2061)
+- 🌍 : Update Chinese Translations by [@SailFlorve](https://github.com/SailFlorve) in [#2098](https://github.com/danny-avila/LibreChat/pull/2098)
+- 🌍 : Updated & Added new Portuguese and Spanish Translations by [@itzraiss](https://github.com/itzraiss) in [#2228](https://github.com/danny-avila/LibreChat/pull/2228)
+
+### New Contributors
+
+- [@arnoan](https://github.com/arnoan) made their first contribution in [#1873](https://github.com/danny-avila/LibreChat/pull/1873)
+- [@ndrsfel](https://github.com/ndrsfel) made their first contribution in [#1858](https://github.com/danny-avila/LibreChat/pull/1858)
+- [@ido777](https://github.com/ido777) made their first contribution in [#1953](https://github.com/danny-avila/LibreChat/pull/1953)
+- [@badcom](https://github.com/badcom) made their first contribution in [#2072](https://github.com/danny-avila/LibreChat/pull/2072)
+- [@virtuman](https://github.com/virtuman) made their first contribution in [#2061](https://github.com/danny-avila/LibreChat/pull/2061)
+- [@SailFlorve](https://github.com/SailFlorve) made their first contribution in [#2098](https://github.com/danny-avila/LibreChat/pull/2098)
+- [@herumes](https://github.com/herumes) made their first contribution in [#2152](https://github.com/danny-avila/LibreChat/pull/2152)
+- [@fkohrt](https://github.com/fkohrt) made their first contribution in [#2171](https://github.com/danny-avila/LibreChat/pull/2171)
+- [@s2terminal](https://github.com/s2terminal) made their first contribution in [#2206](https://github.com/danny-avila/LibreChat/pull/2206)
+- [@idachev](https://github.com/idachev) made their first contribution in [#2146](https://github.com/danny-avila/LibreChat/pull/2146)
+- [@pxz2016](https://github.com/pxz2016) made their first contribution in [#2261](https://github.com/danny-avila/LibreChat/pull/2261)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.6.10...v0.7.0`;
diff --git a/pages/changelog/v0.7.1.mdx b/pages/changelog/v0.7.1.mdx
new file mode 100644
index 0000000..d114bfd
--- /dev/null
+++ b/pages/changelog/v0.7.1.mdx
@@ -0,0 +1,124 @@
+---
+date: 2024/04/23
+title: 🚀 LibreChat v0.7.1
+description: The v0.7.1 release of LibreChat
+ogImage: /images/changelog/v0.7.1.webp
+---
+
+import { ChangelogHeader } from '@/components/changelog/ChangelogHeader'
+
+
+
+---
+
+### 🏞️ Highlights
+
+- Cohere AI, Gemini 1.5, and extensive Vertex AI support
+- Introduction of Side panel usage for all Endpoints
+- Major PWA and Textarea improvements
+
+### 👀 What's Next
+
+- System-wide Custom model Options via librechat.yaml
+- Import conversations from ChatGPT, LibreChat, and Chatbot UI
+
+**Track upcoming changes:** https://github.com/danny-avila/LibreChat/milestone/4
+
+### ✨ New Features
+
+- Required OpenID Role by [@danny-avila](https://github.com/danny-avila) in [2279](https://github.com/danny-avila/LibreChat/pull/2279)
+- Cohere AI support as Custom Endpoint by [@danny-avila](https://github.com/danny-avila) in [2328](https://github.com/danny-avila/LibreChat/pull/2328), [2329](https://github.com/danny-avila/LibreChat/pull/2329)
+- Enhance Message Editing with File Resubmission by [@danny-avila](https://github.com/danny-avila) in [2347](https://github.com/danny-avila/LibreChat/pull/2347)
+- Title Improvements by [@danny-avila](https://github.com/danny-avila) in [2363](https://github.com/danny-avila/LibreChat/pull/2363)
+- Model & Assistants Combobox for Side Panel by [@danny-avila](https://github.com/danny-avila) in [2380](https://github.com/danny-avila/LibreChat/pull/2380)
+- Update Context Limits by [@danny-avila](https://github.com/danny-avila) in [2381](https://github.com/danny-avila/LibreChat/pull/2381)
+- Gemini 1.5 Support (+Vertex AI) by [@danny-avila](https://github.com/danny-avila) in [2383](https://github.com/danny-avila/LibreChat/pull/2383)
+- Authenticated Image Requests by [@danny-avila](https://github.com/danny-avila) in [2389](https://github.com/danny-avila/LibreChat/pull/2389)
+- Add 'EnterToSend' Option & Update Br. Translation 🇧🇷 by [@danny-avila](https://github.com/danny-avila) in [2413](https://github.com/danny-avila/LibreChat/pull/2413)
+- Added PWA Setup & Manual Chunks via Vite by [@danny-avila](https://github.com/danny-avila) in [2477](https://github.com/danny-avila/LibreChat/pull/2477)
+
+### ⚙️ Other Changes
+
+- Optimize client build by caching npm install step by [@ochen1](https://github.com/ochen1) in [2275](https://github.com/danny-avila/LibreChat/pull/2275)
+- converted translation files to ".ts" by [@berry-13](https://github.com/berry-13) in [2288](https://github.com/danny-avila/LibreChat/pull/2288)
+- Optimize ModelsConfig Query Cache by [@danny-avila](https://github.com/danny-avila) in [2330](https://github.com/danny-avila/LibreChat/pull/2330)
+- Attempt Default Preset Fix & Other Changes by [@danny-avila](https://github.com/danny-avila) in [2342](https://github.com/danny-avila/LibreChat/pull/2342)
+- Assistant File Downloads by [@danny-avila](https://github.com/danny-avila) in [2364](https://github.com/danny-avila/LibreChat/pull/2364)
+- Conversation List Behavior after Deletion by [@danny-avila](https://github.com/danny-avila) in [2414](https://github.com/danny-avila/LibreChat/pull/2414)
+- Make Image URL Security Optional by [@danny-avila](https://github.com/danny-avila) in [2415](https://github.com/danny-avila/LibreChat/pull/2415)
+- update .env.example by [@fuegovic](https://github.com/fuegovic) in [2449](https://github.com/danny-avila/LibreChat/pull/2449)
+- Use Strategy Functions for Avatars by [@danny-avila](https://github.com/danny-avila) in [2467](https://github.com/danny-avila/LibreChat/pull/2467)
+- Consolidate Logic & Issue more Warnings by [@danny-avila](https://github.com/danny-avila) in [2468](https://github.com/danny-avila/LibreChat/pull/2468)
+- Display Client-facing Errors by [@danny-avila](https://github.com/danny-avila) in [2476](https://github.com/danny-avila/LibreChat/pull/2476)
+- Add ".env.test" for "backend-review.yml" by [@danny-avila](https://github.com/danny-avila) in [2501](https://github.com/danny-avila/LibreChat/pull/2501)
+
+### 🎨 Styling
+
+- CodeAnalyze, WrenchIcon and ImageGen SVG Animations by [@walbercardoso](https://github.com/walbercardoso) in [2348](https://github.com/danny-avila/LibreChat/pull/2348), [2382](https://github.com/danny-avila/LibreChat/pull/2382)
+- Remove Plugins Icon Background by [@mawburn](https://github.com/mawburn) in [2368](https://github.com/danny-avila/LibreChat/pull/2368)
+- update CodeSherpa icon by [@Passerby1011](https://github.com/Passerby1011) in [2417](https://github.com/danny-avila/LibreChat/pull/2417)
+
+### 🔧 Fixes
+
+- Create Necessary Directories at Build time by [@lazka](https://github.com/lazka) in [2277](https://github.com/danny-avila/LibreChat/pull/2277)
+- remove userId filter from "loadActionSets" & Docs Update by [@danny-avila](https://github.com/danny-avila) in [2286](https://github.com/danny-avila/LibreChat/pull/2286)
+- Correct Unwanted Newlines after Undo in Textarea by [@danny-avila](https://github.com/danny-avila) in [2289](https://github.com/danny-avila/LibreChat/pull/2289)
+- Catch "deleteVectors" Errors & Update RAG API docs by [@danny-avila](https://github.com/danny-avila) in [2299](https://github.com/danny-avila/LibreChat/pull/2299)
+- Balance and Token Usage Improvements by [@danny-avila](https://github.com/danny-avila) in [2350](https://github.com/danny-avila/LibreChat/pull/2350)
+- Minor Fixes and Refactors by [@danny-avila](https://github.com/danny-avila) in [2388](https://github.com/danny-avila/LibreChat/pull/2388)
+- OIDC Username Array Edge Case by [@ventz](https://github.com/ventz) in [2394](https://github.com/danny-avila/LibreChat/pull/2394)
+- Update "maxOutputTokens" Condition by [@danny-avila](https://github.com/danny-avila) in [2434](https://github.com/danny-avila/LibreChat/pull/2434)
+- Ensure "imageOutputType" is Always Defined by [@danny-avila](https://github.com/danny-avila) in [2438](https://github.com/danny-avila/LibreChat/pull/2438)
+- Merge Textarea Ref with Form for Simplified Handling by [@danny-avila](https://github.com/danny-avila) in [2456](https://github.com/danny-avila/LibreChat/pull/2456)
+- Minor Assistants Endpoint Fixes by [@danny-avila](https://github.com/danny-avila) in [2472](https://github.com/danny-avila/LibreChat/pull/2472)
+- Handle Long Domain Names & Other Minor chores by [@danny-avila](https://github.com/danny-avila) in [2475](https://github.com/danny-avila/LibreChat/pull/2475)
+- Resolve Proper Dependencies to fix Application Error by [@danny-avila](https://github.com/danny-avila) in [2488](https://github.com/danny-avila/LibreChat/pull/2488)
+- Allow Code Filetypes and Suppress Known Vite Warnings by [@danny-avila](https://github.com/danny-avila) in [2492](https://github.com/danny-avila/LibreChat/pull/2492)
+
+### 📝 Documentation
+
+- Remove Google Domains Reference by [@illgitthat](https://github.com/illgitthat) in [2267](https://github.com/danny-avila/LibreChat/pull/2267)
+- Note on 'host.docker.internal' for Ollama Config by [@kinnla](https://github.com/kinnla) in [2274](https://github.com/danny-avila/LibreChat/pull/2274)
+- Update NagaAI by [@ZentixUA](https://github.com/ZentixUA) in [2278](https://github.com/danny-avila/LibreChat/pull/2278)
+- Fix Link to Docker Compose Override File by [@h4de5](https://github.com/h4de5) in [2287](https://github.com/danny-avila/LibreChat/pull/2287)
+- Update Ollama + LiteLLM Instructions by [@mariusgau](https://github.com/mariusgau) in [2302](https://github.com/danny-avila/LibreChat/pull/2302)
+- fixed Traefik web layout by [@ventz](https://github.com/ventz) in [2305](https://github.com/danny-avila/LibreChat/pull/2305)
+- Correct Google OAuth Callback URL Example by [@peaster](https://github.com/peaster) in [2311](https://github.com/danny-avila/LibreChat/pull/2311)
+- Update "traefik.md" - Documentation Fix for edge case race condition by [@ventz](https://github.com/ventz) in [2322](https://github.com/danny-avila/LibreChat/pull/2322)
+- Working Examples for LiteLLM, Docker, LibreChat and LiteLLM models for AWS, Azure, GCP by [@ventz](https://github.com/ventz) in [2323](https://github.com/danny-avila/LibreChat/pull/2323)
+- Reflect correct LiteLLM baseURL when using docker-compose by [@dlaporte](https://github.com/dlaporte) in [2324](https://github.com/danny-avila/LibreChat/pull/2324)
+- Add Note to "nginx.md" by [@chrislbrown84](https://github.com/chrislbrown84) in [2341](https://github.com/danny-avila/LibreChat/pull/2341)
+- Default Value Warnings & Docker Docs Update by [@danny-avila](https://github.com/danny-avila) in [2343](https://github.com/danny-avila/LibreChat/pull/2343)
+- Add claude haiku to example anthropic models by [@jp789](https://github.com/jp789) in [2391](https://github.com/danny-avila/LibreChat/pull/2391)
+- env changes v0.6.10→v0.7.0+ by [@fuegovic](https://github.com/fuegovic) in [2442](https://github.com/danny-avila/LibreChat/pull/2442)
+- update docker_compose_install.md by [@fuegovic](https://github.com/fuegovic) in [2447](https://github.com/danny-avila/LibreChat/pull/2447)
+- Remove duplicate information by [@iamNoah1](https://github.com/iamNoah1) in [2451](https://github.com/danny-avila/LibreChat/pull/2451)
+- llama3 by [@fuegovic](https://github.com/fuegovic) in [2470](https://github.com/danny-avila/LibreChat/pull/2470)
+- remove "copilot-gpt4-service" by [@fuegovic](https://github.com/fuegovic) in [2491](https://github.com/danny-avila/LibreChat/pull/2491)
+
+### 🌐 Internationalization
+
+- Add new Japanese Localization entries by [@happy-ryo](https://github.com/happy-ryo) in [2282](https://github.com/danny-avila/LibreChat/pull/2282)
+- Update Chinese Translation by [@HundSimon](https://github.com/HundSimon) in [2351](https://github.com/danny-avila/LibreChat/pull/2351)
+- Update German Translations by [@marlonka](https://github.com/marlonka) in [2409](https://github.com/danny-avila/LibreChat/pull/2409)
+
+## New Contributors
+* [@ZentixUA](https://github.com/ZentixUA) made their first contribution in [2278](https://github.com/danny-avila/LibreChat/pull/2278)
+* [@lazka](https://github.com/lazka) made their first contribution in [2277](https://github.com/danny-avila/LibreChat/pull/2277)
+* [@kinnla](https://github.com/kinnla) made their first contribution in [2274](https://github.com/danny-avila/LibreChat/pull/2274)
+* [@illgitthat](https://github.com/illgitthat) made their first contribution in [2267](https://github.com/danny-avila/LibreChat/pull/2267)
+* [@h4de5](https://github.com/h4de5) made their first contribution in [2287](https://github.com/danny-avila/LibreChat/pull/2287)
+* [@happy-ryo](https://github.com/happy-ryo) made their first contribution in [2282](https://github.com/danny-avila/LibreChat/pull/2282)
+* [@ventz](https://github.com/ventz) made their first contribution in [2305](https://github.com/danny-avila/LibreChat/pull/2305)
+* [@mariusgau](https://github.com/mariusgau) made their first contribution in [2302](https://github.com/danny-avila/LibreChat/pull/2302)
+* [@ochen1](https://github.com/ochen1) made their first contribution in [2275](https://github.com/danny-avila/LibreChat/pull/2275)
+* [@peaster](https://github.com/peaster) made their first contribution in [2311](https://github.com/danny-avila/LibreChat/pull/2311)
+* [@dlaporte](https://github.com/dlaporte) made their first contribution in [2324](https://github.com/danny-avila/LibreChat/pull/2324)
+* [@chrislbrown84](https://github.com/chrislbrown84) made their first contribution in [2341](https://github.com/danny-avila/LibreChat/pull/2341)
+* [@HundSimon](https://github.com/HundSimon) made their first contribution in [2351](https://github.com/danny-avila/LibreChat/pull/2351)
+* [@mawburn](https://github.com/mawburn) made their first contribution in [2368](https://github.com/danny-avila/LibreChat/pull/2368)
+* [@jp789](https://github.com/jp789) made their first contribution in [2391](https://github.com/danny-avila/LibreChat/pull/2391)
+* [@iamNoah1](https://github.com/iamNoah1) made their first contribution in [2451](https://github.com/danny-avila/LibreChat/pull/2451)
+* [@Passerby1011](https://github.com/Passerby1011) made their first contribution in [2417](https://github.com/danny-avila/LibreChat/pull/2417)
+
+**Full Changelog**: https://github.com/danny-avila/LibreChat/compare/v0.7.0...v0.7.1`;
\ No newline at end of file
diff --git a/pages/cookie.mdx b/pages/cookie.mdx
new file mode 100644
index 0000000..bbbcf19
--- /dev/null
+++ b/pages/cookie.mdx
@@ -0,0 +1,129 @@
+---
+title: Cookie Policy
+note: //TODO Generate new cookie policy once published
+---
+
+
+**COOKIE POLICY**
+
+
+
+**Last updated May 05, 2024**
+
+
+This Cookie Policy explains how LibreChat ("**Company**," "**we**," "**us**," and "**our**") uses cookies and similar technologies to recognize you when you visit our website at [https://librechat.ai](https://librechat.ai) ("**Website**"). It explains what these technologies are and why we use them, as well as your rights to control our use of them.
+
+
+
+In some cases we may use cookies to collect personal information, or that becomes personal information if we combine it with other information.
+
+
+
+**What are cookies?**
+
+
+
+Cookies are small data files that are placed on your computer or mobile device when you visit a website. Cookies are widely used by website owners in order to make their websites work, or to work more efficiently, as well as to provide reporting information.
+
+
+
+Cookies set by the website owner (in this case, LibreChat) are called "first-party cookies." Cookies set by parties other than the website owner are called "third-party cookies." Third-party cookies enable third-party features or functionality to be provided on or through the website (e.g., advertising, interactive content, and analytics). The parties that set these third-party cookies can recognize your computer both when it visits the website in question and also when it visits certain other websites.
+
+
+
+**Why do we use cookies?**
+
+
+
+We use first- and third-party cookies for several reasons. Some cookies are required for technical reasons in order for our Website to operate, and we refer to these as "essential" or "strictly necessary" cookies. Other cookies also enable us to track and target the interests of our users to enhance the experience on our Online Properties. Third parties serve cookies through our Website for advertising, analytics, and other purposes. This is described in more detail below.
+
+
+
+**How can I control cookies?**
+
+
+
+You have the right to decide whether to accept or reject cookies. You can exercise your cookie rights by setting your preferences in the Cookie Consent Manager. The Cookie Consent Manager allows you to select which categories of cookies you accept or reject. Essential cookies cannot be rejected as they are strictly necessary to provide you with services.
+
+
+
+The Cookie Consent Manager can be found in the notification banner and on our website. If you choose to reject cookies, you may still use our website though your access to some functionality and areas of our website may be restricted. You may also set or amend your web browser controls to accept or refuse cookies.
+
+
+
+The specific types of first- and third-party cookies served through our Website and the purposes they perform are described in the table below (please note that the specific cookies served may vary depending on the specific Online Properties you visit):
+
+
+
+
+**How can I control cookies on my browser?**
+
+
+
+As the means by which you can refuse cookies through your web browser controls vary from browser to browser, you should visit your browser's help menu for more information. The following is information about how to manage cookies on the most popular browsers:
+
+* [Chrome](https://support.google.com/chrome/answer/95647#zippy=%2Callow-or-block-cookies)
+* [Internet Explorer](https://support.microsoft.com/en-us/windows/delete-and-manage-cookies-168dab11-0753-043d-7c16-ede5947fc64d)
+* [Firefox](https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-desktop?redirectslug=enable-and-disable-cookies-website-preferences&redirectlocale=en-US)
+* [Safari](https://support.apple.com/en-ie/guide/safari/sfri11471/mac)
+* [Edge](https://support.microsoft.com/en-us/windows/microsoft-edge-browsing-data-and-privacy-bb8174ba-9d73-dcf2-9b4a-c582b4e640dd)
+* [Opera](https://help.opera.com/en/latest/web-preferences/)
+
+In addition, most advertising networks offer you a way to opt out of targeted advertising. If you would like to find out more information, please visit:
+
+* [Digital Advertising Alliance](http://www.aboutads.info/choices/)
+* [Digital Advertising Alliance of Canada](https://youradchoices.ca/)
+* [European Interactive Digital Advertising Alliance](http://www.youronlinechoices.com/)
+
+
+
+**What about other tracking technologies, like web beacons?**
+
+
+Cookies are not the only way to recognize or track visitors to a website. We may use other, similar technologies from time to time, like web beacons (sometimes called "tracking pixels" or "clear gifs"). These are tiny graphics files that contain a unique identifier that enables us to recognize when someone has visited our Website or opened an email including them. This allows us, for example, to monitor the traffic patterns of users from one page within a website to another, to deliver or communicate with cookies, to understand whether you have come to the website from an online advertisement displayed on a third-party website, to improve site performance, and to measure the success of email marketing campaigns. In many instances, these technologies are reliant on cookies to function properly, and so declining cookies will impair their functioning.
+
+
+
+**Do you use Flash cookies or Local Shared Objects?**
+
+
+
+Websites may also use so-called "Flash Cookies" (also known as Local Shared Objects or "LSOs") to, among other things, collect and store information about your use of our services, fraud prevention, and for other site operations.
+
+
+
+If you do not want Flash Cookies stored on your computer, you can adjust the settings of your Flash player to block Flash Cookies storage using the tools contained in the [Website Storage Settings Panel](http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html). You can also control Flash Cookies by going to the [Global Storage Settings Panel](http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html) and following the instructions (which may include instructions that explain, for example, how to delete existing Flash Cookies (referred to "information" on the Macromedia site), how to prevent Flash LSOs from being placed on your computer without your being asked, and (for Flash Player 8 and later) how to block Flash Cookies that are not being delivered by the operator of the page you are on at the time).
+
+
+
+Please note that setting the Flash Player to restrict or limit acceptance of Flash Cookies may reduce or impede the functionality of some Flash applications, including, potentially, Flash applications used in connection with our services or online content.
+
+
+
+**Do you serve targeted advertising?**
+
+
+
+Third parties may serve cookies on your computer or mobile device to serve advertising through our Website. These companies may use information about your visits to this and other websites in order to provide relevant advertisements about goods and services that you may be interested in. They may also employ technology that is used to measure the effectiveness of advertisements. They can accomplish this by using cookies or web beacons to collect information about your visits to this and other sites in order to provide relevant advertisements about goods and services of potential interest to you. The information collected through this process does not enable us or them to identify your name, contact details, or other details that directly identify you unless you choose to provide these.
+
+
+
+**How often will you update this Cookie Policy?**
+
+
+
+We may update this Cookie Policy from time to time in order to reflect, for example, changes to the cookies we use or for other operational, legal, or regulatory reasons. Please therefore revisit this Cookie Policy regularly to stay informed about our use of cookies and related technologies.
+
+
+
+The date at the top of this Cookie Policy indicates when it was last updated.
+
+
+
+**Where can I get further information?**
+
+
+
+If you have any questions about our use of cookies or other technologies, please email us at contact@librechat.ai.
+
+
diff --git a/pages/demo.mdx b/pages/demo.mdx
new file mode 100644
index 0000000..662efca
--- /dev/null
+++ b/pages/demo.mdx
@@ -0,0 +1,3 @@
+https://demo.librechat.cfd/
+
+place holder document used so the demo entry in the top menu doesn't look selected at all time
\ No newline at end of file
diff --git a/pages/docs/_meta.ts b/pages/docs/_meta.ts
new file mode 100644
index 0000000..c21959a
--- /dev/null
+++ b/pages/docs/_meta.ts
@@ -0,0 +1,17 @@
+export default {
+ index: 'Get Started',
+ local: 'Local Installation',
+ remote: 'Remote Hosting',
+ configuration: 'Configuration',
+ user_guides: 'User Guides',
+ contributing: {
+ // "title": "Contributing",
+ type: 'separator',
+ },
+ development: 'Development',
+ documentation: 'Documentation',
+ other: {
+ // "title": "Other",
+ type: 'separator',
+ },
+}
diff --git a/pages/docs/configuration/_meta.ts b/pages/docs/configuration/_meta.ts
new file mode 100644
index 0000000..79be7b6
--- /dev/null
+++ b/pages/docs/configuration/_meta.ts
@@ -0,0 +1,8 @@
+export default {
+ index: 'Intro',
+ authentication: 'Authentication',
+ librechat_yaml: 'librechat.yaml',
+ mongodb: 'MongoDB',
+ pre_configured_ai: 'Pre-Configured AIs',
+ tools: 'Tools and Plugins',
+}
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/_meta.ts b/pages/docs/configuration/authentication/OAuth2-OIDC/_meta.ts
new file mode 100644
index 0000000..5577acc
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/_meta.ts
@@ -0,0 +1,16 @@
+export default {
+ index: 'Intro',
+ OAuth2: {
+ type: 'separator',
+ },
+ discord: 'Discord',
+ facebook: 'Facebook',
+ github: 'GitHub',
+ google: 'Google',
+ OIDC: {
+ type: 'separator',
+ },
+ aws: 'AWS Cognito',
+ azure: 'Azure Entra/AD',
+ keycloak: 'Keycloak',
+}
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/aws.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/aws.mdx
new file mode 100644
index 0000000..60f330f
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/aws.mdx
@@ -0,0 +1,113 @@
+---
+title: AWS Cognito
+description: Learn how to configure LibreChat to use AWS Cognito for user authentication.
+---
+
+# AWS Cognito
+
+## Create a new User Pool in Cognito
+
+- Visit: **[https://console.aws.amazon.com/cognito/](https://console.aws.amazon.com/cognito/)**
+- Sign in as Root User
+- Click on `Create user pool`
+
+
+
+## Configure sign-in experience
+
+Your Cognito user pool sign-in options should include `User Name` and `Email`.
+
+
+
+## Configure Security Requirements
+
+You can configure the password requirements now if you desire
+
+
+
+## Configure sign-up experience
+
+Choose the attributes required at signup. The minimum required is `name`. If you want to require users to use their full name at sign up use: `given_name` and `family_name` as required attributes.
+
+
+
+## Configure message delivery
+
+Send email with Cognito can be used for free for up to 50 emails a day
+
+
+
+## Integrate your app
+
+Select `Use Cognitio Hosted UI` and chose a domain name
+
+
+
+Set the app type to `Confidential client`
+Make sure `Generate a client secret` is set.
+Set the `Allowed callback URLs` to `https://YOUR_DOMAIN/oauth/openid/callback`
+
+
+
+Under `Advanced app client settings` make sure `Profile` is included in the `OpenID Connect scopes` (in the bottom)
+
+
+
+## Review and create
+You can now make last minute changes, click on `Create user pool` when you're done reviewing the configuration
+
+
+
+
+
+
+
+
+
+## Get your environment variables
+
+1. Open your User Pool
+
+
+
+2. The `User Pool ID` and your AWS region will be used to construct the `OPENID_ISSUER` (see below)
+
+
+
+
+3. Go to the `App Integrations` tab
+
+
+
+4. Open the app client
+
+
+
+5. Toggle `Show Client Secret`
+
+
+
+- Use the `Client ID` for `OPENID_CLIENT_ID`
+
+- Use the `Client secret` for `OPENID_CLIENT_SECRET`
+
+- Generate a random string for the `OPENID_SESSION_SECRET`
+
+> The `OPENID_SCOPE` and `OPENID_CALLBACK_URL` are pre-configured with the correct values
+
+6. Open the `.env` file at the root of your LibreChat folder and add the following variables with the values you copied:
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+OPENID_CLIENT_ID=Your client ID
+OPENID_CLIENT_SECRET=Your client secret
+OPENID_ISSUER=https://cognito-idp.[AWS REGION].amazonaws.com/[USER POOL ID]/.well-known/openid-configuration
+OPENID_SESSION_SECRET=Any random string
+OPENID_SCOPE=openid profile email
+OPENID_CALLBACK_URL=/oauth/openid/callback
+```
+7. Save the .env file
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/azure.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/azure.mdx
new file mode 100644
index 0000000..ac23e81
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/azure.mdx
@@ -0,0 +1,58 @@
+---
+title: Azure Entra
+description: Learn how to configure LibreChat to use Azure Entra for user authentication.
+---
+
+# OpenID with Azure Entra
+
+1. Go to the [Azure Portal](https://portal.azure.com/) and sign in with your account.
+2. In the search box, type "Azure Entra" and click on it.
+3. On the left menu, click on App registrations and then on New registration.
+4. Give your app a name and select Web as the platform type.
+5. In the Redirect URI field, enter `http://localhost:3080/oauth/openid/callback` and click on Register.
+
+
+
+6. You will see an Overview page with some information about your app. Copy the Application (client) ID and the
+Directory (tenant) ID and save them somewhere.
+
+
+
+7. On the left menu, click on Authentication and check the boxes for Access tokens and ID tokens under Implicit
+grant and hybrid flows.
+
+
+
+8. On the left menu, click on Certificates & Secrets and then on New client secret. Give your secret a
+name and an expiration date and click on Add. You will see a Value column with your secret. Copy it and
+save it somewhere. Don't share it with anyone!
+
+
+
+9. If you want to restrict access by groups you should add the groups claim to the token. To do this, go to
+Token configuration and click on Add group claim. Select the groups you want to include in the token and click on Add.
+
+
+
+10. Open the .env file in your project folder and add the following variables with the values you copied:
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+OPENID_CLIENT_ID=Your Application (client) ID
+OPENID_CLIENT_SECRET=Your client secret
+OPENID_ISSUER=https://login.microsoftonline.com/Your Directory (tenant ID)/v2.0/
+OPENID_SESSION_SECRET=Any random string
+OPENID_SCOPE=openid profile email #DO NOT CHANGE THIS
+OPENID_CALLBACK_URL=/oauth/openid/callback # this should be the same for everyone
+
+# If you want to restrict access by groups
+OPENID_REQUIRED_ROLE_TOKEN_KIND=id
+OPENID_REQUIRED_ROLE_PARAMETER_PATH="roles"
+OPENID_REQUIRED_ROLE="Your Group Name"
+```
+11. Save the .env file
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
+
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/discord.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/discord.mdx
new file mode 100644
index 0000000..83eef9d
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/discord.mdx
@@ -0,0 +1,48 @@
+---
+title: Discord
+description: Learn how to configure LibreChat to use Discord for user authentication.
+---
+
+# Discord
+
+## Create a new Discord Application
+
+- Go to **[Discord Developer Portal](https://discord.com/developers)**
+
+- Create a new Application and give it a name
+
+
+
+## Discord Application Configuration
+
+- In the OAuth2 general settings add a valid redirect URL:
+ - Example for localhost: `http://localhost:3080/oauth/discord/callback`
+ - Example for a domain: `https://example.com/oauth/discord/callback`
+
+
+
+- In `Default Authorization Link`, select `In-app Authorization` and set the scopes to `applications.commands`
+
+
+
+- Save changes and reset the Client Secret
+
+
+
+
+## .env Configuration
+
+- Paste your `Client ID` and `Client Secret` in the `.env` file:
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+DISCORD_CLIENT_ID=your_client_id
+DISCORD_CLIENT_SECRET=your_client_secret
+DISCORD_CALLBACK_URL=/oauth/discord/callback
+```
+
+- Save the `.env` file
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/facebook.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/facebook.mdx
new file mode 100644
index 0000000..829a8b2
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/facebook.mdx
@@ -0,0 +1,82 @@
+---
+title: Facebook
+description: Learn how to configure LibreChat to use Facebook for user authentication.
+---
+
+# Facebook - WIP
+
+> ⚠️ **Warning: Work in progress, not currently functional**
+
+> ❗ Note: Facebook Authentication will not work from `localhost`
+
+## Create a Facebook Application
+
+- Go to the **[Facebook Developer Portal](https://developers.facebook.com/)**
+
+- Click on "My Apps" in the header menu
+
+
+
+- Create a new application
+
+
+
+- Select "Authenticate and request data from users with Facebook Login"
+
+
+
+- Choose "No, I'm not creating a game"
+
+
+
+- Provide an `app name` and `App contact email` and click `Create app`
+
+
+
+## Facebook Application Configuration
+
+- In the side menu, select "Use cases" and click "Customize" under "Authentication and account creation."
+
+
+
+- Add the `email permission`
+
+
+
+- Now click `Go to settings`
+
+
+
+- Ensure that `Client OAuth login`, `Web OAuth login` and `Enforce HTTPS` are **enabled**.
+
+
+
+- Add a `Valid OAuth Redirect URIs` and "Save changes"
+ - Example for a domain: `https://example.com/oauth/facebook/callback`
+
+
+
+- Click `Go back` and select `Basic` in the `App settings` tab
+
+
+
+- Click "Show" next to the App secret.
+
+
+
+## .env Configuration
+
+- Copy the `App ID` and `App Secret` and paste them into the `.env` file as follows:
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+FACEBOOK_CLIENT_ID=your_app_id
+FACEBOOK_CLIENT_SECRET=your_app_secret
+FACEBOOK_CALLBACK_URL=/oauth/facebook/callback
+```
+
+- Save the `.env` file.
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/github.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/github.mdx
new file mode 100644
index 0000000..21b1de9
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/github.mdx
@@ -0,0 +1,64 @@
+---
+title: GitHub
+description: Learn how to configure LibreChat to use GitHub for user authentication.
+---
+
+# GitHub
+
+## Create a GitHub Application
+
+- Go to your **[Github Developer settings](https://github.com/settings/apps)**
+- Create a new Github app
+
+
+
+## GitHub Application Configuration
+
+- Give it a `GitHub App name` and set your `Homepage URL`
+ - Example for localhost: `http://localhost:3080`
+ - Example for a domain: `https://example.com`
+
+
+
+- Add a valid `Callback URL`:
+ - Example for localhost: `http://localhost:3080/oauth/github/callback`
+ - Example for a domain: `https://example.com/oauth/github/callback`
+
+
+
+- Uncheck the box labeled `Active` in the `Webhook` section
+
+
+
+- Scroll down to `Account permissions` and set `Email addresses` to `Access: Read-only`
+
+
+
+
+
+- Click on `Create GitHub App`
+
+
+
+## .env Configuration
+
+- Click `Generate a new client secret`
+
+
+
+- Copy the `Client ID` and `Client Secret` in the `.env` file
+
+
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+GITHUB_CLIENT_ID=your_client_id
+GITHUB_CLIENT_SECRET=your_client_secret
+GITHUB_CALLBACK_URL=/oauth/github/callback
+```
+
+- Save the `.env` file
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/google.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/google.mdx
new file mode 100644
index 0000000..b4ccd9b
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/google.mdx
@@ -0,0 +1,96 @@
+---
+title: Google
+description: Learn how to configure LibreChat to use Google for user authentication.
+---
+
+# Google
+
+## Create a Google Application
+
+- Visit: **[Google Cloud Console](https://cloud.google.com)** and open the `Console`
+
+
+
+- Create a New Project and give it a name
+
+
+
+
+
+## Google Application Configuration
+
+- Select the project you just created and go to `APIs and Services`
+
+
+
+
+
+- Select `Credentials` and click `CONFIGURE CONSENT SCREEN`
+
+
+
+- Select `External` then click `CREATE`
+
+
+
+- Fill in your App information
+
+> Note: You can get a logo from your LibreChat folder here: `docs\assets\favicon_package\android-chrome-192x192.png`
+
+
+
+- Configure your `App domain` and add your `Developer contact information` then click `SAVE AND CONTINUE`
+
+
+
+- Configure the `Sopes`
+ - Add `email`,`profile` and `openid`
+ - Click `UPDATE` and `SAVE AND CONTINUE`
+
+
+
+
+
+- Click `SAVE AND CONTINUE`
+- Review your app and go back to dashboard
+
+- Go back to the `Credentials` tab, click on `+ CREATE CREDENTIALS` and select `OAuth client ID`
+
+
+
+- Select `Web application` and give it a name
+
+
+
+- Configure the `Authorized JavaScript origins`, you can add both your domain and localhost if you desire
+ - Example for localhost: `http://localhost:3080`
+ - Example for a domain: `https://example.com`
+
+
+
+- Add a valid `Authorized redirect URIs`
+ - Example for localhost: `http://localhost:3080/oauth/google/callback`
+ - Example for a domain: `https://example.com/oauth/google/callback`
+
+
+
+## .env Configuration
+
+- Click `CREATE` and copy your `Client ID` and `Client secret`
+
+
+
+- Add them to your `.env` file:
+
+```bash filename=".env"
+DOMAIN_CLIENT=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+DOMAIN_SERVER=https://your-domain.com # use http://localhost:3080 if not using a custom domain
+
+GOOGLE_CLIENT_ID=your_client_id
+GOOGLE_CLIENT_SECRET=your_client_secret
+GOOGLE_CALLBACK_URL=/oauth/google/callback
+```
+
+- Save the `.env` file
+
+> Note: If using docker, run `docker compose up -d` to apply the .env configuration changes
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/index.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/index.mdx
new file mode 100644
index 0000000..c85c4c7
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Intro
+description: How to configure Social Authentication for LibreChat
+---
+
+# Social Authentication
+
+This section will cover how to configure OAuth2 and OpenID Connect with LibreChat
+
+
+
+
+
+
+
+
+
+
+
+## OAuth2
+ - [Discord](/docs/configuration/authentication/OAuth2-OIDC/discord)
+ - [Facebook](/docs/configuration/authentication/OAuth2-OIDC/facebook)
+ - [GitHub](/docs/configuration/authentication/OAuth2-OIDC/github)
+ - [Google](/docs/configuration/authentication/OAuth2-OIDC/google)
+## OpenID Connect
+ - [AWS Cognito](/docs/configuration/authentication/OAuth2-OIDC/aws)
+ - [Azure Entra/AD](/docs/configuration/authentication/OAuth2-OIDC/azure)
+ - [Keycloak](/docs/configuration/authentication/OAuth2-OIDC/keycloak)
\ No newline at end of file
diff --git a/pages/docs/configuration/authentication/OAuth2-OIDC/keycloak.mdx b/pages/docs/configuration/authentication/OAuth2-OIDC/keycloak.mdx
new file mode 100644
index 0000000..8773f5f
--- /dev/null
+++ b/pages/docs/configuration/authentication/OAuth2-OIDC/keycloak.mdx
@@ -0,0 +1,67 @@
+---
+title: Keycloak
+description: Learn how to configure LibreChat to use Keycloak for user authentication.
+---
+
+# Keycloak
+
+1. **Access Keycloak Admin Console:**
+- Open the Keycloak Admin Console in your web browser. This is usually
+found at a URL like `http://localhost:8080/auth/admin/`.
+
+2. **Create a Realm (if necessary):**
+- If you don't already have a realm for your application, create one. Click on 'Add Realm' and give it a name.
+
+3. **Create a Client:**
+- Within your realm, click on 'Clients' and then 'Create'.
+- Enter a client ID and select 'openid-connect' as the Client Protocol.
+- Set 'Client Authentication' to 'On'.
+- In 'Valid Redirect URIs', enter `http://localhost:3080/oauth/openid/callback` or the appropriate URI for
+your application.
+
+
+
+
+
+
+
+
+4. **Configure Client:**
+- After creating the client, you will be redirected to its settings page.
+- Note the 'Client ID' and 'Secret' from the 'Credentials' tab – you'll need these for your application.
+
+
+
+
+5. **Add Roles (Optional):**
+If you want to restrict access to users with specific roles, you can define roles in Keycloak and assign them to users.
+- Go to the 'Roles' tab in your client or realm (depending on where you want to define the roles).
+- Create a new role that matches the value you have in `OPENID_REQUIRED_ROLE`.
+
+
+
+6. **Assign Roles to Users (Optional):**
+- Go to 'Users', select a user, and go to the 'Role Mappings' tab.
+- Assign the appropriate role (that matches `OPENID_REQUIRED_ROLE`) to the user.
+
+
+
+7. **Get path of roles list inside token (Optional):**
+- Decode your jwtToken from OpenID provider and determine path for roles list inside access token. For example, if you are
+ using Keycloak, the path is `realm_access.roles`.
+- Put this path in `OPENID_REQUIRED_ROLE_PARAMETER_PATH` variable in `.env` file.
+- By parameter `OPENID_REQUIRED_ROLE_TOKEN_KIND` you can specify which token kind you want to use.
+ Possible values are `access` and `id`.
+
+8. **Update Your Project's Configuration:**
+- Open the `.env` file in your project folder and add the following variables:
+ ```bash filename=".env"
+ OPENID_ISSUER=http://localhost:8080/auth/realms/[YourRealmName]
+ OPENID_CLIENT_ID=[YourClientID]
+ OPENID_CLIENT_SECRET=[YourClientSecret]
+ OPENID_CALLBACK_URL=http://localhost:3080/oauth/openid/callback
+ OPENID_SCOPE="openid profile email"
+ OPENID_REQUIRED_ROLE=[YourRequiredRole]
+ OPENID_REQUIRED_ROLE_TOKEN_KIND=(access|id)
+ OPENID_REQUIRED_ROLE_PARAMETER_PATH="realm_access.roles"
+ ```
diff --git a/pages/docs/configuration/authentication/_meta.ts b/pages/docs/configuration/authentication/_meta.ts
new file mode 100644
index 0000000..62aacc4
--- /dev/null
+++ b/pages/docs/configuration/authentication/_meta.ts
@@ -0,0 +1,3 @@
+export default {
+ index: 'Intro',
+}
diff --git a/pages/docs/configuration/authentication/index.mdx b/pages/docs/configuration/authentication/index.mdx
new file mode 100644
index 0000000..aaca0f4
--- /dev/null
+++ b/pages/docs/configuration/authentication/index.mdx
@@ -0,0 +1,96 @@
+---
+title: Authentication System
+description: This guide explains how to use the user authentication system of LibreChat, which offers secure and easy email and social logins. You will learn how to set up sign up, log in, password reset, and more.
+---
+
+# Basic Configuration:
+
+## General
+
+For a quick overview, refer to the user guide provided here: [Authentication](/docs/user_guides/authentication)
+
+Here's an overview of the general configuration.
+
+
+
+> **Note:** OpenID does not support the ability to disable only registration.
+
+>> **Quick Tip:** Even with registration disabled, add users directly to the database using `npm run create-user`. If you can't get npm to work, try `sudo docker exec -ti LibreChat sh` first to "ssh" into the container.
+>> **Quick Tip:** To delete a user, you can run `docker-compose exec api npm run delete-user email@domain.com`
+
+
+
+
+## Session Expiry and Refresh Token
+
+- Default values: session expiry: 15 minutes, refresh token expiry: 7 days
+ - For more information: **[GitHub PR #927 - Refresh Token](https://github.com/danny-avila/LibreChat/pull/927)**
+
+
+
+``` mermaid
+sequenceDiagram
+ Client->>Server: Login request with credentials
+ Server->>Passport: Use authentication strategy (e.g., 'local', 'google', etc.)
+ Passport-->>Server: User object or false/error
+ Note over Server: If valid user...
+ Server->>Server: Generate access and refresh tokens
+ Server->>Database: Store hashed refresh token
+ Server-->>Client: Access token and refresh token
+ Client->>Client: Store access token in HTTP Header and refresh token in HttpOnly cookie
+ Client->>Server: Request with access token from HTTP Header
+ Server-->>Client: Requested data
+ Note over Client,Server: Access token expires
+ Client->>Server: Request with expired access token
+ Server-->>Client: Unauthorized
+ Client->>Server: Request with refresh token from HttpOnly cookie
+ Server->>Database: Retrieve hashed refresh token
+ Server->>Server: Compare hash of provided refresh token with stored hash
+ Note over Server: If hashes match...
+ Server-->>Client: New access token and refresh token
+ Client->>Server: Retry request with new access token
+ Server-->>Client: Requested data
+```
+
+## JWT Secret and Refresh Secret
+
+- You should use new secure values. The examples given are 32-byte keys (64 characters in hex).
+ - Use this replit to generate some quickly: **[JWT Keys](https://replit.com/@daavila/crypto#index.js)**
+
+
+
+---
+
+## Automated Moderation System (optional)
+
+The Automated Moderation System is enabled by default. It uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+
+To set up the mod system, review [the setup guide](/docs/configuration/mod_system).
+
+> *Please Note: If you want this to work in development mode, you will need to create a file called `.env.development` in the root directory and set `DOMAIN_CLIENT` to `http://localhost:3090` or whatever port is provided by vite when runnning `npm run frontend-dev`*
+
diff --git a/pages/docs/configuration/authentication/password_reset.mdx b/pages/docs/configuration/authentication/password_reset.mdx
new file mode 100644
index 0000000..97654cb
--- /dev/null
+++ b/pages/docs/configuration/authentication/password_reset.mdx
@@ -0,0 +1,81 @@
+---
+title: Password Reset
+description: This guide explains how to configure the secure email password reset. You can configure it to work with various email services, including Gmail and custom mail servers.
+---
+
+# Email and Password Reset
+For a quick overview, refer to the user guide provided here: [Password Reset](/docs/user_guides/password_reset)
+
+## General setup
+
+**Basic Configuration**
+
+If you want to use one of the predefined services, configure only these variables:
+For more info about supported email services: https://community.nodemailer.com/2-0-0-beta/setup-smtp/well-known-services/
+
+
+
+**Advanced Configuration**
+
+If you want to use a generic SMTP service or need advanced configuration for one of the predefined providers, configure these variables as well:
+
+
+
+
+**Failing to perform either of the below setups will result in LibreChat using the unsecured password reset! This allows anyone to reset any password on your server immediately, without mail being sent at all!**
+
+
+## Setup with Gmail
+
+To set up Gmail, follow these steps:
+
+1. Create a Google Account and enable 2-step verification.
+2. In the **[Google Account settings](https://myaccount.google.com/)**, click on the "Security" tab and open "2-step verification."
+3. Scroll down and open "App passwords." Choose "Mail" for the app and select "Other" for the device, then give it a random name.
+4. Click on "Generate" to create a password, and copy the generated password.
+5. In the `.env` file, modify the variables as follows:
+
+
+
+## Setup with custom mail server
+
+To set up a custom mail server, follow these steps:
+
+1. Gather your SMTP login data from your provider. The steps are different for each, but they will usually list values for all variables.
+2. In the `.env` file, modify the variables as follows, assuming some sensible example values:
+
+
diff --git a/pages/docs/configuration/docker_override.mdx b/pages/docs/configuration/docker_override.mdx
new file mode 100644
index 0000000..a137519
--- /dev/null
+++ b/pages/docs/configuration/docker_override.mdx
@@ -0,0 +1,102 @@
+---
+title: Docker Override
+description: "How to Use the Docker Compose Override File: In Docker Compose, an override file is a powerful feature that allows you to modify the default configuration provided by the main `docker-compose.yml` without the need to directly edit or duplicate the whole file."
+---
+
+# How to Use the Docker Compose Override File
+
+In Docker Compose, an override file is a powerful feature that allows you to modify the default configuration provided by the main `docker-compose.yml` without the need to directly edit or duplicate the whole file. The primary use of the override file is for local development customizations, and Docker Compose merges the configurations of the `docker-compose.yml` and the `docker-compose.override.yml` files when you run `docker compose up`.
+
+Here's a quick guide on how to use the `docker-compose.override.yml`:
+
+> Note: Please consult the `docker-compose.override.yml.example` for more examples
+
+See the official docker documentation for more info:
+
+- **[docker docs - understanding-multiple-compose-files](https://docs.docker.com/compose/multiple-compose-files/extends/#understanding-multiple-compose-files)**
+- **[docker docs - merge-compose-files](https://docs.docker.com/compose/multiple-compose-files/merge/#merge-compose-files)**
+- **[docker docs - specifying-multiple-compose-files](https://docs.docker.com/compose/reference/#specifying-multiple-compose-files)**
+
+## Step 1: Create a `docker-compose.override.yml` file
+
+If you don't already have a `docker-compose.override.yml` file, you can create one by copying the example override content:
+
+```bash filename="Copying the example override file"
+cp docker-compose.override.yml.example docker-compose.override.yml
+```
+
+This file will be picked up by Docker Compose automatically when you run docker-compose commands.
+
+## Step 2: Edit the override file
+
+Open your `docker-compose.override.yml` file with vscode or any text editor.
+
+Make your desired changes by uncommenting the relevant sections and customizing them as needed.
+
+> Warning: You can only specify every service name once (api, mongodb, meilisearch, ...) If you want to override multiple settings in one service you will have to edit accordingly.
+
+### Examples
+
+If you want to make sure Docker can use your `librechat.yaml` file for [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml), it would look like this:
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+```
+
+Or, if you want to locally build the image for the `api` service, use the LibreChat config file, and use the older Mongo that doesn't requires AVX support, your `docker-compose.override.yml` might look like this:
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+ image: librechat
+ build:
+ context: .
+ target: node
+
+ mongodb:
+ image: mongo:4.4.18
+```
+
+> Note: Be cautious if you expose ports for MongoDB or Meilisearch to the public, as it can make your data vulnerable.
+
+## Step 3: Apply the changes
+
+To apply your configuration changes, simply run Docker Compose as usual. Docker Compose automatically takes into account both the `docker-compose.yml` and the `docker-compose.override.yml` files:
+
+```bash filename="Apply the changes"
+docker compose up -d
+```
+
+## Step 4: Verify the changes
+
+After starting your services with the modified configuration, you can verify that the changes have been applied using the `docker ps` command to list the running containers and their properties, such as ports.
+
+## Important Considerations
+
+- **Order of Precedence**: Values defined in the override file take precedence over those specified in the original `docker-compose.yml` file.
+- **Security**: When customizing ports and publicly exposing services, always be conscious of the security implications. Avoid using defaults for production or sensitive environments.
+
+By following these steps and considerations, you can easily and safely modify your Docker Compose configuration without altering the original `docker-compose.yml` file, making it simpler to manage and maintain different environments or local customizations.
+
+
+## `deploy-compose.yml`
+
+To use an override file with a non-default Docker Compose file, such as `deploy-compose.yml`, you will have to explicitly specify both files when running Docker Compose commands.
+
+Docker Compose allows you to specify multiple `-f` or `--file` options to include multiple compose files, where settings in later files override or add to those in the first.
+
+If you use `deploy-compose.yml` as your main Docker Compose configuration and you have an override file named `docker-compose.override.yml` (you can name the override file whatever you want, but you may have this specific file already), you would run Docker Compose commands like so:
+
+```bash
+docker compose -f deploy-compose.yml -f docker-compose.override.yml pull
+docker compose -f deploy-compose.yml -f docker-compose.override.yml up
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/dotenv.mdx b/pages/docs/configuration/dotenv.mdx
new file mode 100644
index 0000000..fa8d73c
--- /dev/null
+++ b/pages/docs/configuration/dotenv.mdx
@@ -0,0 +1,885 @@
+---
+title: Environment Variables
+description: Comprehensive guide for configuring your application's environment with the `.env` file. This document is your one-stop resource for understanding and customizing the environment variables that will shape your application's behavior in different contexts.
+---
+
+# .env File Configuration
+Welcome to the comprehensive guide for configuring your application's environment with the `.env` file. This document is your one-stop resource for understanding and customizing the environment variables that will shape your application's behavior in different contexts.
+
+While the default settings provide a solid foundation for a standard `docker` installation, delving into this guide will unveil the full potential of LibreChat. This guide empowers you to tailor LibreChat to your precise needs. Discover how to adjust language model availability, integrate social logins, manage the automatic moderation system, and much more. It's all about giving you the control to fine-tune LibreChat for an optimal user experience.
+
+> **Reminder: Please restart LibreChat for the configuration changes to take effect**
+
+Alternatively, you can create a new file named `docker-compose.override.yml` in the same directory as your main `docker-compose.yml` file for LibreChat, where you can set your .env variables as needed under `environment`, or modify the default configuration provided by the main `docker-compose.yml`, without the need to directly edit or duplicate the whole file.
+
+For more info see:
+
+- Our quick guide:
+ - **[Docker Override](/docs/configuration/docker_override)**
+
+- The official docker documentation:
+ - **[docker docs - understanding-multiple-compose-files](https://docs.docker.com/compose/multiple-compose-files/extends/#understanding-multiple-compose-files)**
+ - **[docker docs - merge-compose-files](https://docs.docker.com/compose/multiple-compose-files/merge/#merge-compose-files)**
+ - **[docker docs - specifying-multiple-compose-files](https://docs.docker.com/compose/reference/#specifying-multiple-compose-files)**
+
+- You can also view an example of an override file for LibreChat in your LibreChat folder and on GitHub:
+ - **[docker-compose.override.example](https://github.com/danny-avila/LibreChat/blob/main/docker-compose.override.yml.example)**
+
+---
+
+## Server Configuration
+
+### Port
+
+- The server listens on a specific port.
+- The `PORT` environment variable sets the port where the server listens. By default, it is set to `3080`.
+
+
+
+
+
+### MongoDB Database
+
+- Change this to your MongoDB URI if different. You should also add `LibreChat` or your own `APP_TITLE` as the database name in the URI.
+
+
+
+For example:
+
+* If you are using an online database, the URI format is `mongodb+srv://:@/?`. Your `MONGO_URI` should look like this: `mongodb+srv://username:password@host.mongodb.net/LibreChat?retryWrites=true` (`retryWrites=true` is the only option you need when using the online database)
+
+See also:
+
+* [MongoDB Atlas](/docs/configuration/mongodb/mongodb_atlas) for instructions on how to create an online MongoDB Atlas database (useful for use without Docker)
+* [MongoDB Community Server](/docs/configuration/mongodb/mongodb_community) for instructions on how to create a local MongoDB database (without Docker)
+* [MongoDB Authentication](/docs/configuration/mongodb/mongodb_auth) To enable explicit authentication for MongoDB in Docker.
+* [Manage your database with Mongo Express](/blog/2023-11-30_mongoexpress) for securely accessing your Docker MongoDB database
+
+### Application Domains
+
+To configure LibreChat for local use or custom domain deployment, set the following environment variables:
+
+
+
+When deploying LibreChat to a custom domain, replace `http://localhost:3080` with your deployed URL
+- e.g. `https://librechat.example.com`.
+
+### Prevent Public Search Engines Indexing
+
+By default, your website will not be indexed by public search engines (e.g. Google, Bing, …). This means that people will not be able to find your website through these search engines. If you want to make your website more visible and searchable, you can change the following setting to `false`
+
+
+
+❗**Note:** This method is not guaranteed to work for all search engines, and some search engines may still index your website or web page for other purposes, such as caching or archiving. Therefore, you should not rely solely on this method to protect sensitive or confidential information on your website or web page.
+
+### Logging
+
+LibreChat has built-in central logging, see [Logging System](/docs/configuration/logging) for more info.
+
+#### Log Files
+
+* Debug logging is enabled by default and crucial for development.
+* To report issues, reproduce the error and submit logs from `./api/logs/debug-%DATE%.log` at: **[LibreChat GitHub Issues](https://github.com/danny-avila/LibreChat/issues)**
+* Error logs are stored in the same location.
+
+#### Environment Variables
+
+
+
+Note:
+* `DEBUG_LOGGING` can be used with either `DEBUG_CONSOLE` or `CONSOLE_JSON` but not both.
+* `DEBUG_CONSOLE` and `CONSOLE_JSON` are mutually exclusive.
+* `CONSOLE_JSON`: When handling console logs in cloud deployments (such as GCP or AWS), enabling this will dump the logs with a UTC timestamp and format them as JSON.
+ * See: [feat: Add CONSOLE_JSON](https://github.com/danny-avila/LibreChat/pull/2146)
+
+Note: `DEBUG_CONSOLE` is not recommended, as the outputs can be quite verbose, and so it's disabled by default.
+
+### Permission
+> UID and GID are numbers assigned by Linux to each user and group on the system. If you have permission problems, set here the UID and GID of the user running the Docker Compose command. The applications in the container will run with these UID/GID.
+
+
+
+### Configuration Path - `librechat.yaml`
+Specify an alternative location for the LibreChat configuration file.
+You may specify an **absolute path**, a **relative path**, or a **URL**. The filename in the path is flexible and does not have to be `librechat.yaml`; any valid configuration file will work.
+
+> **Note**: If you prefer LibreChat to search for the configuration file in the root directory (which is the default behavior), simply leave this option commented out.
+
+
+
+## Endpoints
+In this section, you can configure the endpoints and models selection, their API keys, and the proxy and reverse proxy settings for the endpoints that support it.
+
+### General Config
+Uncomment `ENDPOINTS` to customize the available endpoints in LibreChat.
+
+
+
+### Known Endpoints - `librechat.yaml`
+- see also: [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml)
+
+
+
+> **Note:** Must be compatible with the Anthropic Endpoint. Also, Claude 2 and Claude 3 models perform best at this task, with `claude-3-haiku` models being the cheapest.
+
+### BingAI
+Bing, also used for Sydney, jailbreak, and Bing Image Creator, see: [Bing Access token](./ai_setup.md#bingai) and [Bing Jailbreak](../../features/bing_jailbreak.md)
+
+Follow these instructions to get your Bing access token (it's best to use the full cookie string for that purpose): **[Bing Access Token](./ai_setup.md#bingai)**
+
+
+
+Note: It is recommended to leave it as "user_provided" and provide the token from the WebUI.
+
+### Google
+Follow these instructions to setup the [Google Endpoint](/docs/configuration/pre_configured_ai/google)
+
+
+
+### OpenAI
+
+See: [OpenAI Setup](/docs/configuration/pre_configured_ai/openai)
+
+
+
+
+
+
+- The API keys are "user_provided" through the webUI when commented out or empty. Do not set them to "user_provided", either provide the API key or leave them blank/commented out.
+
+
+
+**Note:** Make sure the `gptPlugins` endpoint is set in the [`ENDPOINTS`](#endpoints) environment variable if it was configured before.
+
+
+### Credentials Configuration
+
+To securely store credentials, you need a fixed key and IV. You can set them here for prod and dev environments.
+
+
+
+
+**Warning:** If you don't set `CREDS_KEY` and `CREDS_IV`, the app will crash on startup.
+- You can use this [Key Generator](/toolkit/creds_generator) to generate them quickly.
+
+
+#### Azure AI Search
+This plugin supports searching Azure AI Search for answers to your questions. See: [Azure AI Search](/docs/configuration/tools/azure_ai_search)
+
+
+
+#### DALL-E:
+
+**API Keys:**
+ Note: if you have PROXY set, it will be used for DALL-E calls also, which is universal for the app.
+
+
+#### DALL-E (Azure)
+
+Here's the updated layout for the DALL-E configuration options:
+
+#### DALL-E:
+
+**API Keys:**
+
+
+**Reverse Proxy Settings:**
+.openai.azure.com/openai/deployments//'],
+ ['DALLE2_BASEURL', 'string', 'The base URL for DALL-E 2 API endpoints.','# DALLE2_BASEURL=https://.openai.azure.com/openai/deployments//'],
+ ]}
+/>
+
+**Azure OpenAI Integration (Optional):**
+
+
+Remember to replace placeholder text with actual prompts or instructions and provide your actual API keys if you choose to include them directly in the file (though managing sensitive keys outside of the codebase is a best practice). Always review and respect OpenAI's usage policies when embedding API keys in software.
+
+> Note: if you have PROXY set, it will be used for DALL-E calls also, which is universal for the app.
+
+#### Google Search
+
+See detailed instructions here: **[Google Search](/docs/configuration/tools/google_search)**
+
+**Environment Variables:**
+
+
+
+#### SerpAPI
+
+**Description:** SerpApi is a real-time API to access Google search results (not as performant)
+
+**Environment Variables:**
+
+
+
+#### Stable Diffusion (Automatic1111)
+
+See detailed instructions here: **[Stable Diffusion](/docs/configuration/tools/stable_diffusion)**
+
+**Description:** Use `http://127.0.0.1:7860` with local install and `http://host.docker.internal:7860` for docker
+
+**Environment Variables:**
+
+
+
+### Tavily
+
+Get your API key here: **[https://tavily.com/#api](https://tavily.com/#api)**
+
+**Environment Variables:**
+
+
+
+### Traversaal
+
+**Description:** LLM-enhanced search tool.
+
+Get API key here: **https://api.traversaal.ai/dashboard**
+
+**Environment Variables:**
+
+
+
+#### WolframAlpha
+
+See detailed instructions here: **[Wolfram Alpha](/docs/configuration/tools/wolfram)**
+
+**Environment Variables:**
+
+
+
+#### Zapier
+
+**Description:** - You need a Zapier account. Get your API key from here: **[Zapier](https://nla.zapier.com/credentials/)**
+- Create allowed actions - Follow step 3 in this getting start guide from Zapier
+
+**Note:** Zapier is known to be finicky with certain actions. Writing email drafts is probably the best use of it.
+
+**Environment Variables:**
+
+
+
+## Search (Meilisearch)
+
+Enables search in messages and conversations:
+
+
+
+> Note: If you're not using docker, it requires the installation of the free self-hosted Meilisearch or a paid remote plan
+
+To disable anonymized telemetry analytics for MeiliSearch for absolute privacy, set to true:
+
+
+
+For the API server to connect to the search server. Replace '0.0.0.0' with 'meilisearch' if serving MeiliSearch with docker-compose.
+
+
+
+This master key must be at least 16 bytes, composed of valid UTF-8 characters. MeiliSearch will throw an error and refuse to launch if no master key is provided or if it is under 16 bytes. MeiliSearch will suggest a secure autogenerated master key. This is a ready-made secure key for docker-compose, you can replace it with your own.
+
+
+
+## User System
+This section contains the configuration for:
+
+ - [Automated Moderation](#moderation)
+ - [Balance/Token Usage](#balance)
+ - [Registration and Social Logins](#registration-and-login)
+ - [Email Password Reset](#email-password-reset)
+
+Here is the rewritten content in MDX format with improvements:
+
+### Moderation
+The Automated Moderation System uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+
+see: **[Automated Moderation](/docs/configuration/mod_system)**
+
+#### Basic Moderation Settings
+
+
+#### Score for each violation
+
+
+> Note: Non-browser access and Illegal model requests are almost always nefarious as it means a 3rd party is attempting to access the server through an automated script.
+
+
+#### Message rate limiting (per user & IP)
+
+
+
+#### Limiters
+
+> Note: You can utilize both limiters, but default is to limit by IP only.
+
+##### IP Limiter:
+
+
+
+##### User Limiter:
+
+
+
+### Balance
+
+The following enables user balances for the OpenAI/Plugins endpoints, which you can add manually or you will need to build out a balance accruing system for users.
+
+see: **[Token Usage](/docs/configuration/token_usage)**
+
+
+
+#### Managing Balances
+
+- Run `npm run add-balance` to manually add balances.
+- You can also specify the email and token credit amount to add, e.g.: `npm run add-balance example@example.com 1000`
+- Run `npm run list-balances` to list the balance of every user.
+
+> **Note:** 1000 credits = $0.001 (1 mill USD)
+
+
+### Registration and Login
+see: **[Authentication System](/docs/configuration/authentication)**
+
+
+
+
+
+
+
+
+
+
+
+- General Settings:
+
+
+
+> **Quick Tip:** Even with registration disabled, add users directly to the database using `npm run create-user`.
+> **Quick Tip:** With registration disabled, you can delete a user with `npm run delete-user email@domain.com`.
+
+- Session and Refresh Token Settings:
+
+
+
+- For more information: **[Refresh Token](https://github.com/danny-avila/LibreChat/pull/927)**
+
+- JWT Settings:
+
+You should use new secure values. The examples given are 32-byte keys (64 characters in hex).
+Use this replit to generate some quickly: **[JWT Keys](/toolkit/creds_generator)**
+
+
+
+### Social Logins
+For more details: [OAuth2-OIDC](/docs/configuration/authentication/OAuth2-OIDC)
+
+#### [Discord Authentication](/docs/configuration/authentication/OAuth2-OIDC/discord)
+
+For more information: **[Discord](/docs/configuration/authentication/OAuth2-OIDC/discord)**
+
+
+
+#### [Facebook Authentication](/docs/configuration/authentication/OAuth2-OIDC/facebook)
+
+For more information: **[Facebook Authentication](/docs/configuration/authentication/OAuth2-OIDC/facebook)**
+
+
+
+#### [GitHub Authentication](/docs/configuration/authentication/OAuth2-OIDC/github)
+
+For more information: **[GitHub Authentication](/docs/configuration/authentication/OAuth2-OIDC/github)**
+
+
+
+#### [Google Authentication](/docs/configuration/authentication/OAuth2-OIDC/google)
+
+For more information: **[Google Authentication](/docs/configuration/authentication/OAuth2-OIDC/google)**
+
+
+
+#### [OpenID Connect](/docs/configuration/authentication/OAuth2-OIDC#openid-connect)
+
+For more information:
+ - [AWS Cognito](/docs/configuration/authentication/OAuth2-OIDC/aws)
+ - [Azure Entra/AD](/docs/configuration/authentication/OAuth2-OIDC/azure)
+ - [Keycloak](/docs/configuration/authentication/OAuth2-OIDC/keycloak)
+
+
+
+### Email Password Reset
+
+Email is used for password reset. See: **[Email Password Reset](/docs/configuration/authentication/password_reset)**
+
+**Important Note**: All of the service or host, username, and password, and the From address must be set for email to work.
+
+> **Warning**: If using `EMAIL_SERVICE`, **do NOT** set the extended connection parameters:
+> HOST, PORT, ENCRYPTION, ENCRYPTION_HOSTNAME, ALLOW_SELFSIGNED.
+> Failing to set valid values here will result in LibreChat using the unsecured password reset!
+
+See: **[nodemailer well-known-services](https://community.nodemailer.com/2-0-0-beta/setup-smtp/well-known-services/)**
+
+
+
+### Firebase CDN
+
+See: **[Firebase CDN Configuration](/docs/configuration/firebase)**
+
+
+- If you are using Firebase as your file storage strategy, make sure to set the `file_strategy` option to `firebase` in your `librechat.yaml` configuration file. - For more information on configuring the `librechat.yaml` file, please refer to the YAML Configuration Guide: [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml)
+
+
+
+
+### UI
+
+#### Help and FAQ Button
+
+
+
+**Behaviour:**
+
+* If `HELP_AND_FAQ_URL` is empty or commented, the button is enabled.
+* If `HELP_AND_FAQ_URL` is set to a URL (e.g., `https://example.com`), the button is enabled and links to that URL.
+* If `HELP_AND_FAQ_URL` is set to `/`, the button is disabled.
+
+#### App Title and Footer
+
+
+
+**Behaviour:**
+
+* Uncomment `CUSTOM_FOOTER` to add a custom footer.
+* Uncomment and leave `CUSTOM_FOOTER` empty to remove the footer.
+
+#### Birthday Hat
+
+
+
+**Behaviour:**
+
+* The birthday hat icon will show automatically on February 11th (LibreChat's birthday).
+* Set `SHOW_BIRTHDAY_ICON` to `false` to disable the birthday hat.
+* Set `SHOW_BIRTHDAY_ICON` to `true` to enable the birthday hat all the time.
+
+### Other
+
+#### Redis
+
+**Note:** Redis support is experimental, and you may encounter some problems when using it.
+
+**Important:** If using Redis, you should flush the cache after changing any LibreChat settings.
+
+ **Anyscale API key:** [anyscale.com/credentials](https://app.endpoints.anyscale.com/credentials)
+
+**Notes:**
+
+- **Known:** icon provided, fetching list of models is recommended.
+
+```yaml filename="librechat.yaml"
+ - name: "Anyscale"
+ apiKey: "${ANYSCALE_API_KEY}"
+ baseURL: "https://api.endpoints.anyscale.com/v1"
+ models:
+ default: [
+ "meta-llama/Llama-2-7b-chat-hf",
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "meta-llama/Llama-2-7b-chat-hf"
+ summarize: false
+ summaryModel: "meta-llama/Llama-2-7b-chat-hf"
+ forcePrompt: false
+ modelDisplayLabel: "Anyscale"
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/apipie.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/apipie.mdx
new file mode 100644
index 0000000..80a6c4b
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/apipie.mdx
@@ -0,0 +1,87 @@
+---
+title: APIpie
+description: Example configuration for APIpie
+---
+
+# [APIpie](https://apipie.ai/)
+
+> **APIpie API key:** [apipie.ai/dashboard/profile/api-keys](https://apipie.ai/dashboard/profile/api-keys)
+
+**Notes:**
+
+- **Known:** icon provided, fetching list of models is recommended as API token rates and pricing used for token credit balances when models are fetched.
+
+- **Known issue:**
+ - Fetching list of models is not supported.
+ - Your success may vary with conversation titling
+ - Stream isn't currently supported (but is planned as of April 24, 2024)
+
+
+This python script can fetch and order the llm models for you. The output will be saved in models.txt, formated in a way that should make it easier for you to include in the yaml config.
+
+```py filename="fetch.py"
+import json
+import requests
+
+def fetch_and_order_models():
+ # API endpoint
+ url = "https://apipie.ai/models"
+
+ # headers as per request example
+ headers = {"Accept": "application/json"}
+
+ # request parameters
+ params = {"type": "llm"}
+
+ # make request
+ response = requests.get(url, headers=headers, params=params)
+
+ # parse JSON response
+ data = response.json()
+
+ # extract an ordered list of unique model IDs
+ model_ids = sorted(set([model["id"] for model in data]))
+
+ # write result to a text file
+ with open("models.txt", "w") as file:
+ json.dump(model_ids, file, indent=2)
+
+# execute the function
+if __name__ == "__main__":
+ fetch_and_order_models()
+```
+
+
+```yaml filename="librechat.yaml"
+ # APIpie
+ - name: "APIpie"
+ apiKey: "${APIPIE_API_KEY}"
+ baseURL: "https://apipie.ai/v1/"
+ models:
+ default: [
+ "gpt-4",
+ "gpt-4-turbo",
+ "gpt-3.5-turbo",
+ "claude-3-opus",
+ "claude-3-sonnet",
+ "claude-3-haiku",
+ "llama-3-70b-instruct",
+ "llama-3-8b-instruct",
+ "gemini-pro-1.5",
+ "gemini-pro",
+ "mistral-large",
+ "mistral-medium",
+ "mistral-small",
+ "mistral-tiny",
+ "mixtral-8x22b",
+ ]
+ fetch: false
+ titleConvo: true
+ titleModel: "claude-3-haiku"
+ summarize: false
+ summaryModel: "claude-3-haiku"
+ dropParams: ["stream"]
+ modelDisplayLabel: "APIpie"
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/azure.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/azure.mdx
new file mode 100644
index 0000000..ee7bb6a
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/azure.mdx
@@ -0,0 +1,570 @@
+---
+title: Azure OpenAI
+description: Comprehensive guide for configuring Azure OpenAI through the `librechat.yaml` file AKA the LibreChat Config file. This document is your one-stop resource for understanding and customizing Azure settings and models.
+---
+
+# Azure OpenAI
+
+**Azure OpenAI Integration for LibreChat**
+
+LibreChat boasts compatibility with Azure OpenAI API services, treating the endpoint as a first-class citizen. To properly utilize Azure OpenAI within LibreChat, it's crucial to configure the [`librechat.yaml` file](./custom_config.md#azure-openai-object-structure) according to your specific needs. This document guides you through the essential setup process which allows seamless use of multiple deployments and models with as much flexibility as needed.
+
+## Example
+
+Here's a quick snapshot of what a comprehensive configuration might look like, including many of the options and features discussed below.
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ # Endpoint-level configuration
+ titleModel: "llama-70b-chat"
+ plugins: true
+ assistants: true
+ groups:
+ # Group-level configuration
+ - group: "my-resource-westus"
+ apiKey: "${WESTUS_API_KEY}"
+ instanceName: "my-resource-westus"
+ version: "2024-03-01-preview"
+ # Model-level configuration
+ models:
+ gpt-4-vision-preview:
+ deploymentName: gpt-4-vision-preview
+ version: "2024-03-01-preview"
+ gpt-3.5-turbo:
+ deploymentName: gpt-35-turbo
+ gpt-4-1106-preview:
+ deploymentName: gpt-4-1106-preview
+ # Group-level configuration
+ - group: "mistral-inference"
+ apiKey: "${AZURE_MISTRAL_API_KEY}"
+ baseURL: "https://Mistral-large-vnpet-serverless.region.inference.ai.azure.com/v1/chat/completions"
+ serverless: true
+ # Model-level configuration
+ models:
+ mistral-large: true
+ # Group-level configuration
+ - group: "my-resource-sweden"
+ apiKey: "${SWEDEN_API_KEY}"
+ instanceName: "my-resource-sweden"
+ deploymentName: gpt-4-1106-preview
+ version: "2024-03-01-preview"
+ assistants: true
+ # Model-level configuration
+ models:
+ gpt-4-turbo: true
+```
+
+Here's another working example configured according to the specifications of the [Azure OpenAI Endpoint Configuration Docs:](/docs/configuration/librechat_yaml/object_structure/azure_openai)
+
+Each level of configuration is extensively detailed in their respective sections:
+
+1. [Endpoint-level config](#endpoint-level-configuration)
+
+2. [Group-level config](#group-level-configuration)
+
+3. [Model-level config](#model-level-configuration)
+
+## Setup
+
+1. **Open `librechat.yaml` for Editing**: Use your preferred text editor or IDE to open and edit the `librechat.yaml` file.
+
+ - Optional: use a remote or custom file path with the following environment variable:
+
+ ```sh filename=".env"
+ CONFIG_PATH="/alternative/path/to/librechat.yaml"
+ ```
+
+2. **Configure Azure OpenAI Settings**: Follow the detailed structure outlined below to populate your Azure OpenAI settings appropriately. This includes specifying API keys, instance names, model groups, and other essential configurations.
+
+3. **Make sure to Remove Legacy Settings**: If you are using any of the [legacy configurations](#legacy-setup), be sure to remove. The LibreChat server will also detect these and remind you.
+
+4. **Save Your Changes**: After accurately inputting your settings, save the `librechat.yaml` file.
+
+5. **Restart LibreChat**: For the changes to take effect, restart your LibreChat application. This ensures that the updated configurations are loaded and utilized.
+
+## Required Fields
+
+To properly integrate Azure OpenAI with LibreChat, specific fields must be accurately configured in your `librechat.yaml` file. These fields are validated through a combination of custom and environmental variables to ensure the correct setup. Here are the detailed requirements based on the validation process:
+
+## Endpoint-Level Configuration
+
+Here's the conversion of the provided settings into the new option table format:
+
+#### Global Azure Settings:
+
+**Title and Conversation Settings:**
+
+
+**Group Configuration:**
+
+
+**Custom Order (Optional):**
+
+
+Please note that the `customOrder` option is commented out, as it was mentioned as optional in the original text.
+
+Here's an example of how you can configure these endpoint-level settings in your `librechat.yaml` file:
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ titleModel: "gpt-3.5-turbo-1106"
+ plugins: true
+ assistants: true
+ summarize: true
+ summaryModel: "gpt-3.5-turbo-1106"
+ titleConvo: true
+ titleMethod: "functions"
+ groups:
+ # ... (group-level and model-level configurations)
+```
+
+## Group-Level Configuration
+
+This is a breakdown of the fields configurable as defined for the Custom Config (`librechat.yaml`) file. For more information on each field, see the [Azure OpenAI section in the Custom Config Docs](./custom_config.md#azure-openai-object-structure).
+
+Group-Level Configuration:
+Group Identification:
+
+
+Authentication:
+
+
+Azure OpenAI Instance:
+
+
+Deployment Configuration:
+
+
+Advanced Settings:
+
+
+Model Configuration:
+
+
+Here's an example of a group-level configuration in the librechat.yaml file
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ # ... (endpoint-level configurations)
+ groups:
+ - group: "my-resource-group"
+ apiKey: "${AZURE_API_KEY}"
+ instanceName: "my-instance"
+ deploymentName: "gpt-35-turbo"
+ version: "2023-03-15-preview"
+ baseURL: "https://my-instance.openai.azure.com/"
+ additionalHeaders:
+ CustomHeader: "HeaderValue"
+ addParams:
+ max_tokens: 2048
+ temperature: 0.7
+ dropParams:
+ - "frequency_penalty"
+ - "presence_penalty"
+ forcePrompt: false
+ models:
+ # ... (model-level configurations)
+```
+
+## Model-Level Configuration
+
+Within each group, the `models` field contains a mapping of model identifiers to their configurations:
+
+Model Identification:
+
+
+Model Configuration:
+
+
+Serverless Inference Endpoints:
+
+
+- The **model identifier must match its corresponding OpenAI model name** in order for it to properly reflect its known context limits and/or function in the case of vision. For example, if you intend to use gpt-4-vision, it must be configured like so:
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ # ... (endpoint-level configurations)
+ groups:
+ # ... (group-level configurations)
+ - group: "example_group"
+ models:
+ # Model identifiers must match OpenAI Model name (can be a partial match)
+ gpt-4-vision-preview:
+ # Object setting: must include at least "deploymentName" and/or "version"
+ deploymentName: "arbitrary-deployment-name"
+ version: "2024-02-15-preview" # version can be any that supports vision
+ # Boolean setting, must be "true"
+ gpt-4-turbo: true
+```
+
+- See [Model Deployments](#model-deployments) for more examples.
+
+- If a model is set to `true`, it implies using the group-level `deploymentName` and `version` for this model. Both must be defined at the group level in this case.
+
+- If a model is configured as an object, it can specify its own `deploymentName` and `version`. If these are not provided, the model inherits the group's `deploymentName` and `version`.
+
+- If the group represents a [serverless inference endpoint](#serverless-inference-endpoints), the singular model should be set to `true` to add it to the models list.
+
+### Special Considerations
+
+1. **Unique Names**: Both model and group names must be unique across the entire configuration. Duplicate names lead to validation failures.
+
+2. **Missing Required Fields**: Lack of required `deploymentName` or `version` either at the group level (for boolean-flagged models) or within the models' configurations (if not inheriting or explicitly specified) will result in validation errors, unless the group represents a [serverless inference endpoint](#serverless-inference-endpoints).
+
+3. **Environment Variable References**: The configuration supports environment variable references (e.g., `${VARIABLE_NAME}`). Ensure that all referenced variables are present in your environment to avoid runtime errors. The absence of defined environment variables referenced in the config will cause errors.`${INSTANCE_NAME}` and `${DEPLOYMENT_NAME}` are unique placeholders, and do not correspond to environment variables, but instead correspond to the instance and deployment name of the currently selected model. It is not recommended you use `INSTANCE_NAME` and `DEPLOYMENT_NAME` as environment variable names to avoid any potential conflicts.
+
+4. **Error Handling**: Any issues in the config, like duplicate names, undefined environment variables, or missing required fields, will invalidate the setup and generate descriptive error messages aiming for prompt resolution. You will not be allowed to run the server with an invalid configuration.
+
+5. **Model identifiers**: An unknown model (to the project) can be used as a model identifier, but it must match a known model to reflect its known context length, which is crucial for message/token handling; e.g., `gpt-7000` will be valid but default to a 4k token limit, whereas `gpt-4-turbo` will be recognized as having a 128k context limit.
+
+Applying these setup requirements thoughtfully will ensure a correct and efficient integration of Azure OpenAI services with LibreChat through the `librechat.yaml` configuration. Always validate your configuration against the latest schema definitions and guidelines to maintain compatibility and functionality.
+
+
+### Model Deployments
+
+The list of models available to your users are determined by the model groupings specified in your [`azureOpenAI` endpoint config.](./custom_config.md#models_1)
+
+For example:
+
+```yaml filename="librechat.yaml"
+# Example Azure OpenAI Object Structure
+endpoints:
+ azureOpenAI:
+ groups:
+ - group: "my-westus" # arbitrary name
+ apiKey: "${WESTUS_API_KEY}"
+ instanceName: "actual-instance-name" # name of the resource group or instance
+ version: "2023-12-01-preview"
+ models:
+ gpt-4-vision-preview:
+ deploymentName: gpt-4-vision-preview
+ version: "2024-02-15-preview"
+ gpt-3.5-turbo: true
+ - group: "my-eastus"
+ apiKey: "${EASTUS_API_KEY}"
+ instanceName: "actual-eastus-instance-name"
+ deploymentName: gpt-4-turbo
+ version: "2024-02-15-preview"
+ models:
+ gpt-4-turbo: true
+```
+
+The above configuration would enable `gpt-4-vision-preview`, `gpt-3.5-turbo` and `gpt-4-turbo` for your users in the order they were defined.
+
+### Using Assistants with Azure
+
+To enable use of Assistants with Azure OpenAI, there are 2 main steps.
+
+1) Set the `assistants` field at the [Endpoint-level](#endpoint-level-configuration) to `true`, like so:
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ # Enable use of Assistants with Azure
+ assistants: true
+```
+
+2) Add the `assistants` field to all groups compatible with Azure's Assistants API integration.
+
+- At least one of your group configurations must be compatible.
+- You can check the [compatible regions and models in the Azure docs here](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models#assistants-preview).
+- The version must also be "2024-02-15-preview" or later, preferably later for access to the latest features.
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ assistants: true
+ groups:
+ - group: "my-sweden-group"
+ apiKey: "${SWEDEN_API_KEY}"
+ instanceName: "actual-instance-name"
+ # Mark this group as assistants compatible
+ assistants: true
+ # version must be "2024-02-15-preview" or later
+ version: "2024-03-01-preview"
+ models:
+ # ... (model-level configuration)
+```
+
+**Notes:**
+
+- If you mark multiple regions as assistants-compatible, assistants you create will be aggregated across regions to the main assistant selection list.
+- Files you upload to Azure OpenAI, whether at the message or assistant level, will only be available in the region the current assistant's model is part of.
+ - For this reason, it's recommended you use only one region or resource group for Azure OpenAI Assistants, or you will experience an error.
+ - Uploading to "OpenAI" is the default behavior for official `code_interpeter` and `retrieval` capabilities.
+- Downloading files that assistants generate will soon be supported.
+- If the `ASSISTANTS_API_KEY` is still set to `user_provided` in your environment file `.env`, comment it out.
+- As of March 14th 2024, retrieval and streaming are not supported through Azure OpenAI.
+ - To avoid any errors with retrieval while it's not supported, it's recommended to disable the capability altogether through the `assistants` endpoint config:
+
+ ```yaml filename="librechat.yaml"
+ endpoints:
+ assistants:
+ # "retrieval" omitted.
+ capabilities: ["code_interpreter", "actions", "tools"]
+ ```
+
+ - By default, all capabilities are enabled.
+
+### Using Plugins with Azure
+
+To use the Plugins endpoint with Azure OpenAI, you need a deployment supporting **[function calling](https://techcommunity.microsoft.com/t5/azure-ai-services-blog/function-calling-is-now-available-in-azure-openai-service/ba-p/3879241)**. Otherwise, you need to set "Functions" off in the Agent settings. When you are not using "functions" mode, it's recommend to have "skip completion" off as well, which is a review step of what the agent generated.
+
+To use Azure with the Plugins endpoint, make sure the field `plugins` is set to `true` in your Azure OpenAI endpoing config:
+
+```yaml filename="librechat.yaml"
+# Example Azure OpenAI Object Structure
+endpoints:
+ azureOpenAI:
+ plugins: true # <------- Set this
+ groups:
+ # omitted for brevity
+```
+
+Configuring the `plugins` field will configure Plugins to use Azure models.
+
+**NOTE**: The current configuration through `librechat.yaml` uses the primary model you select from the frontend for Plugin use, which is not usually how it works without Azure, where instead the "Agent" model is used. The Agent model setting can be ignored when using Plugins through Azure.
+
+### Using a Specified Base URL with Azure
+
+The base URL for Azure OpenAI API requests can be dynamically configured. This is useful for proxying services such as [Cloudflare AI Gateway](https://developers.cloudflare.com/ai-gateway/providers/azureopenai/), or if you wish to explicitly override the baseURL handling of the app.
+
+LibreChat will use the baseURL field for your Azure model grouping, which can include placeholders for the Azure OpenAI API instance and deployment names.
+
+In the configuration, the base URL can be customized like so:
+
+```yaml filename="librechat.yaml"
+# librechat.yaml file, under an Azure group:
+endpoints:
+ azureOpenAI:
+ groups:
+ - group: "group-with-custom-base-url"
+ baseURL: "https://example.azure-api.net/${INSTANCE_NAME}/${DEPLOYMENT_NAME}"
+
+# OR
+ baseURL: "https://${INSTANCE_NAME}.openai.azure.com/openai/deployments/${DEPLOYMENT_NAME}"
+
+# Cloudflare example
+ baseURL: "https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/azure-openai/${INSTANCE_NAME}/${DEPLOYMENT_NAME}"
+```
+
+**NOTE**: `${INSTANCE_NAME}` and `${DEPLOYMENT_NAME}` are unique placeholders, and do not correspond to environment variables, but instead correspond to the instance and deployment name of the currently selected model. It is not recommended you use INSTANCE_NAME and DEPLOYMENT_NAME as environment variable names to avoid any potential conflicts.
+
+**You can also omit the placeholders completely and simply construct the baseURL with your credentials:**
+
+```yaml filename="librechat.yaml"
+ baseURL: "https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/azure-openai/my-secret-instance/my-deployment"
+```
+**Lastly, you can specify the entire baseURL through a custom environment variable**
+
+```yaml filename="librechat.yaml"
+ baseURL: "${MY_CUSTOM_BASEURL}"
+```
+
+
+### Enabling Auto-Generated Titles with Azure
+
+To enable titling for Azure, set `titleConvo` to `true`.
+
+```yaml filename="librechat.yaml"
+# Example Azure OpenAI Object Structure
+endpoints:
+ azureOpenAI:
+ titleConvo: true # <------- Set this
+ groups:
+ # omitted for brevity
+```
+
+**You can also specify the model to use for titling, with `titleModel`** provided you have configured it in your group(s).
+
+```yaml filename="titleModel"
+ titleModel: "gpt-3.5-turbo"
+```
+
+**Note**: "gpt-3.5-turbo" is the default value, so you can omit it if you want to use this exact model and have it configured. If not configured and `titleConvo` is set to `true`, the titling process will result in an error and no title will be generated. You can also set this to dynamically use the current model by setting it to `current_model`.
+
+```yaml filename="titleModel"
+ titleModel: "current_model"
+```
+
+### Using GPT-4 Vision with Azure
+
+To use Vision (image analysis) with Azure OpenAI, you need to make sure `gpt-4-vision-preview` is a specified model [in one of your groupings](#model-deployments)
+
+This will work seamlessly as it does with the [OpenAI endpoint](./ai_setup.md#openai) (no need to select the vision model, it will be switched behind the scenes)
+
+### Generate images with Azure OpenAI Service (DALL-E)
+
+| Model ID | Feature Availability | Max Request (characters) |
+|----------|----------------------|-------------------------|
+| dalle2 | East US | 1000 |
+| dalle3 | Sweden Central | 4000 |
+
+- First you need to create an Azure resource that hosts DALL-E
+ - At the time of writing, dall-e-3 is available in the `SwedenCentral` region, dall-e-2 in the `EastUS` region.
+- Then, you need to deploy the image generation model in one of the above regions.
+ - Read the [Azure OpenAI Image Generation Quickstart Guide](https://learn.microsoft.com/en-us/azure/ai-services/openai/dall-e-quickstart) for further assistance
+- Configure your environment variables based on Azure credentials:
+
+Here's the updated layout for the DALL-E configuration options:
+
+#### DALL-E:
+
+**API Keys:**
+
+
+**Reverse Proxy Settings:**
+.openai.azure.com/openai/deployments//'],
+ ['DALLE2_BASEURL', 'string', 'The base URL for DALL-E 2 API endpoints.','# DALLE2_BASEURL=https://.openai.azure.com/openai/deployments//'],
+ ]}
+/>
+
+**Azure OpenAI Integration (Optional):**
+
+
+Remember to replace placeholder text with actual prompts or instructions and provide your actual API keys if you choose to include them directly in the file (though managing sensitive keys outside of the codebase is a best practice). Always review and respect OpenAI's usage policies when embedding API keys in software.
+
+> Note: if you have PROXY set, it will be used for DALL-E calls also, which is universal for the app.
+
+### Serverless Inference Endpoints
+
+Through the `librechat.yaml` file, you can configure Azure AI Studio serverless inference endpoints to access models from the [Azure Model Catalog.](https://ai.azure.com/explore) Only a model identifier, `baseURL`, and `apiKey` are needed along with the `serverless` field to indicate the special handling these endpoints need.
+
+- You will need to follow the instructions in the compatible model cards to set up **MaaS** ("Models as a Service") access on Azure AI Studio.
+
+ - For reference, here are 2 known compatible model cards:
+
+ - [Mistral-large](https://aka.ms/aistudio/landing/mistral-large) | [Llama-2-70b-chat](https://aka.ms/aistudio/landing/Llama-2-70b-chat)
+
+- You can also review [the technical blog for the "Mistral-large" model release](https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/mistral-large-mistral-ai-s-flagship-llm-debuts-on-azure-ai/ba-p/4066996) for more info.
+
+- Then, you will need to add them to your azureOpenAI config in the librechat.yaml file.
+
+- Here are my example configurations for both Mistral-large and LLama-2-70b-chat:
+
+```yaml filename="librechat.yaml"
+endpoints:
+ azureOpenAI:
+ groups:
+# serverless examples
+ - group: "mistral-inference"
+ apiKey: "${AZURE_MISTRAL_API_KEY}" # arbitrary env var name
+ baseURL: "https://Mistral-large-vnpet-serverless.region.inference.ai.azure.com/v1/chat/completions"
+ serverless: true
+ models:
+ mistral-large: true
+ - group: "llama-70b-chat"
+ apiKey: "${AZURE_LLAMA2_70B_API_KEY}" # arbitrary env var name
+ baseURL: "https://Llama-2-70b-chat-qmvyb-serverless.region.inference.ai.azure.com/v1/chat/completions"
+ serverless: true
+ models:
+ llama-70b-chat: true
+```
+
+**Notes**:
+
+- Make sure to add the appropriate suffix for your deployment, either "/v1/chat/completions" or "/v1/completions"
+- If using "/v1/completions" (without "chat"), you need to set the `forcePrompt` field to `true` in your [group config.](#group-level-configuration)
+- Compatibility with LibreChat relies on parity with OpenAI API specs, which at the time of writing, are typically **"Pay-as-you-go"** or "Models as a Service" (MaaS) deployments on Azure AI Studio, that are OpenAI-SDK-compatible with either v1/completions or v1/chat/completions endpoint handling.
+- At the moment, only ["Mistral-large"](https://azure.microsoft.com/en-us/blog/microsoft-and-mistral-ai-announce-new-partnership-to-accelerate-ai-innovation-and-introduce-mistral-large-first-on-azure/) and [LLama-2 Chat models](https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/announcing-llama-2-inference-apis-and-hosted-fine-tuning-through/ba-p/3979227) are compatible from the Azure model catalog. You can filter by "Chat completion" under inference tasks to see the full list; however, real time endpoint models have not been tested.
+- These serverless inference endpoint/models are likely not compatible with OpenAI function calling, which enables the use of Plugins. As they have yet been tested, they are available on the Plugins endpoint, although they are not expected to work.
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/cohere.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/cohere.mdx
new file mode 100644
index 0000000..9fb3b09
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/cohere.mdx
@@ -0,0 +1,37 @@
+---
+title: Cohere
+description: Example configuration for Cohere
+---
+
+# [Cohere](https://cohere.com/)
+
+> Cohere API key: [dashboard.cohere.com](https://dashboard.cohere.com/)
+
+**Notes:**
+
+- **Known:** icon provided.
+- Experimental: does not follow OpenAI-spec, uses a new method for endpoint compatibility, shares some similarities and parameters.
+- For a full list of Cohere-specific parameters, see the [Cohere API documentation](https://docs.cohere.com/reference/chat).
+- Note: The following parameters are recognized between OpenAI and Cohere. Most are removed in the example config below to prefer Cohere's default settings:
+ - `stop`: mapped to `stopSequences`
+ - `top_p`: mapped to `p`, different min/max values
+ - `frequency_penalty`: mapped to `frequencyPenalty`, different min/max values
+ - `presence_penalty`: mapped to `presencePenalty`, different min/max values
+ - `model`: shared, included by default.
+ - `stream`: shared, included by default.
+ - `max_tokens`: shared, mapped to `maxTokens`, not included by default.
+
+
+```yaml filename="librechat.yaml"
+ - name: "cohere"
+ apiKey: "${COHERE_API_KEY}"
+ baseURL: "https://api.cohere.ai/v1"
+ models:
+ default: ["command-r","command-r-plus","command-light","command-light-nightly","command","command-nightly"]
+ fetch: false
+ modelDisplayLabel: "cohere"
+ titleModel: "command"
+ dropParams: ["stop", "user", "frequency_penalty", "presence_penalty", "temperature", "top_p"]
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/fireworks.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/fireworks.mdx
new file mode 100644
index 0000000..0068817
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/fireworks.mdx
@@ -0,0 +1,33 @@
+---
+title: Fireworks
+description: Example configuration for Fireworks
+---
+
+# [Fireworks](https://fireworks.ai/)
+
+> Fireworks API key: [fireworks.ai/api-keys](https://fireworks.ai/api-keys)
+
+**Notes:**
+
+- **Known:** icon provided, fetching list of models is recommended.
+- - API may be strict for some models, and may not allow fields like `user`, in which case, you should use [`dropParams`.](./custom_config.md#dropparams)
+
+```yaml filename="librechat.yaml"
+ - name: "Fireworks"
+ apiKey: "${FIREWORKS_API_KEY}"
+ baseURL: "https://api.fireworks.ai/inference/v1"
+ models:
+ default: [
+ "accounts/fireworks/models/mixtral-8x7b-instruct",
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "accounts/fireworks/models/llama-v2-7b-chat"
+ summarize: false
+ summaryModel: "accounts/fireworks/models/llama-v2-7b-chat"
+ forcePrompt: false
+ modelDisplayLabel: "Fireworks"
+ dropParams: ["user"]
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/groq.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/groq.mdx
new file mode 100644
index 0000000..b3cee6b
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/groq.mdx
@@ -0,0 +1,36 @@
+---
+title: Groq
+description: Example configuration for Groq
+---
+
+# [Groq](https://wow.groq.com/)
+
+> groq API key: [wow.groq.com](https://console.groq.com/keys)
+
+**Notes:**
+
+- **Known:** icon provided.
+
+- **Temperature:** If you set a temperature value of 0, it will be converted to 1e-8. If you run into any issues, please try setting the value to a float32 greater than 0 and less than or equal to 2.
+
+- Groq is currently free but rate limited: 10 queries/minute, 100/hour.
+
+```yaml filename="librechat.yaml"
+ - name: "groq"
+ apiKey: "${GROQ_API_KEY}"
+ baseURL: "https://api.groq.com/openai/v1/"
+ models:
+ default: [
+ "llama3-70b-8192",
+ "llama3-8b-8192",
+ "llama2-70b-4096",
+ "mixtral-8x7b-32768",
+ "gemma-7b-it",
+ ]
+ fetch: false
+ titleConvo: true
+ titleModel: "mixtral-8x7b-32768"
+ modelDisplayLabel: "groq"
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/index.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/index.mdx
new file mode 100644
index 0000000..84e289f
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/index.mdx
@@ -0,0 +1,14 @@
+---
+title: AI Endpoints
+description: This section lists known, compatible AI Endpoints with example setups for the `librechat.yaml` AKA the LibreChat Custom Config file.
+---
+
+# Compatible AI Endpoints
+
+## Intro
+
+This section lists known, compatible AI Endpoints with example setups for the `librechat.yaml` file, also known as the [Custom Config](/docs/configuration/librechat_yaml) file.
+
+In all of the examples, arbitrary environment variable names are defined but you can use any name you wish, as well as changing the value to `user_provided` to allow users to submit their own API key from the web UI.
+
+Some of the endpoints are marked as **Known,** which means they might have special handling and/or an icon already provided in the app for you.
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/litellm.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/litellm.mdx
new file mode 100644
index 0000000..9128dd3
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/litellm.mdx
@@ -0,0 +1,28 @@
+---
+title: LiteLLM
+description: Example configuration for LiteLLM
+---
+
+# [LiteLLM](https://docs.litellm.ai/docs/)
+
+**Notes:**
+
+- Reference [Using LibreChat with LiteLLM Proxy](/blog/2023-11-30_litellm) for configuration.
+
+```yaml filename="librechat.yaml"
+ - name: "LiteLLM"
+ apiKey: "sk-from-config-file"
+ baseURL: "http://localhost:8000/v1"
+ # if using LiteLLM example in docker-compose.override.yml.example, use "http://litellm:8000/v1"
+ models:
+ default: ["gpt-3.5-turbo"]
+ fetch: true
+ titleConvo: true
+ titleModel: "gpt-3.5-turbo"
+ summarize: false
+ summaryModel: "gpt-3.5-turbo"
+ forcePrompt: false
+ modelDisplayLabel: "LiteLLM"
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/mistral.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/mistral.mdx
new file mode 100644
index 0000000..4fdafe1
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/mistral.mdx
@@ -0,0 +1,34 @@
+---
+title: Mistral
+description: Example configuration for Mistral
+---
+
+# [Mistral AI](https://mistral.ai/)
+
+> Mistral API key: [console.mistral.ai](https://console.mistral.ai/)
+
+**Notes:**
+
+- **Known:** icon provided, special handling of message roles: system message is only allowed at the top of the messages payload.
+
+- API is strict with unrecognized parameters and errors are not descriptive (usually "no body")
+
+ - The use of [`dropParams`](/docs/configuration/librechat_yaml/object_structure/custom_endpoint#dropparams) to drop "user", "frequency_penalty", "presence_penalty" params is required.
+ - `stop` is no longer included as a default parameter, so there is no longer a need to include it in [`dropParams`](/docs/configuration/librechat_yaml/object_structure/custom_endpoint#dropparams), unless you would like to completely prevent users from configuring this field.
+
+- Allows fetching the models list, but be careful not to use embedding models for chat.
+
+```yaml filename="librechat.yaml"
+ - name: "Mistral"
+ apiKey: "${MISTRAL_API_KEY}"
+ baseURL: "https://api.mistral.ai/v1"
+ models:
+ default: ["mistral-tiny", "mistral-small", "mistral-medium", "mistral -large-latest"]
+ fetch: true
+ titleConvo: true
+ titleModel: "mistral-tiny"
+ modelDisplayLabel: "Mistral"
+ dropParams: ["stop", "user", "frequency_penalty", "presence_penalty"]
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/mlx.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/mlx.mdx
new file mode 100644
index 0000000..f3807ad
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/mlx.mdx
@@ -0,0 +1,37 @@
+---
+title: Apple MLX
+description: Example configuration for Apple MLX
+---
+
+# [Apple MLX](https://github.com/ml-explore/mlx)
+
+> [MLX OpenAI Compatibility](https://github.com/ml-explore/mlx-examples/blob/main/llms/mlx_lm/SERVER.md)
+
+**Notes:**
+
+- **Known:** icon provided.
+
+- API is mostly strict with unrecognized parameters.
+- Support only one model at a time, otherwise you'll need to run a different endpoint with a different `baseURL`.
+
+```yaml filename="librechat.yaml"
+ - name: "MLX"
+ apiKey: "mlx"
+ baseURL: "http://localhost:8080/v1/"
+ models:
+ default: [
+ "Meta-Llama-3-8B-Instruct-4bit"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "current_model"
+ summarize: false
+ summaryModel: "current_model"
+ forcePrompt: false
+ modelDisplayLabel: "Apple MLX"
+ addParams:
+ max_tokens: 2000
+ "stop": [
+ "<|eot_id|>"
+ ]
+```
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx
new file mode 100644
index 0000000..abb854a
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx
@@ -0,0 +1,97 @@
+---
+title: Ollama
+description: Example configuration for Ollama
+---
+
+# [Ollama](https://ollama.com/)
+
+> Ollama API key: Required but ignored - [Ollama OpenAI Compatibility](https://github.com/ollama/ollama/blob/main/docs/openai.md)
+
+**Notes:**
+
+- **Known:** icon provided.
+- Download models with ollama run command. See [Ollama Library](https://ollama.com/library)
+- It's recommend to use the value "current_model" for the `titleModel` to avoid loading more than 1 model per conversation.
+ - Doing so will dynamically use the current conversation model for the title generation.
+- The example includes a top 5 popular model list from the Ollama Library, which was last updated on March 1, 2024, for your convenience.
+
+```yaml filename="librechat.yaml"
+ - name: "Ollama"
+ apiKey: "ollama"
+ # use 'host.docker.internal' instead of localhost if running LibreChat in a docker container
+ baseURL: "http://localhost:11434/v1/chat/completions"
+ models:
+ default: [
+ "llama2",
+ "mistral",
+ "codellama",
+ "dolphin-mixtral",
+ "mistral-openorca"
+ ]
+ # fetching list of models is supported but the `name` field must start
+ # with `ollama` (case-insensitive), as it does in this example.
+ fetch: true
+ titleConvo: true
+ titleModel: "current_model"
+ summarize: false
+ summaryModel: "current_model"
+ forcePrompt: false
+ modelDisplayLabel: "Ollama"
+```
+
+
+
+Note: Once `stop` was removed from the [default parameters](/docs/configuration/librechat_yaml/object_structure/default_params), the issue highlighted below should no longer exist.
+
+However, in case you experience the behavior where `llama3` does not stop generating, add this `addParams` block to the config:
+
+```yaml filename="librechat.yaml"
+- name: "Ollama"
+ apiKey: "ollama"
+ baseURL: "http://host.docker.internal:11434/v1/"
+ models:
+ default: [
+ "llama3"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "current_model"
+ summarize: false
+ summaryModel: "current_model"
+ forcePrompt: false
+ modelDisplayLabel: "Ollama"
+ addParams:
+ "stop": [
+ "<|start_header_id|>",
+ "<|end_header_id|>",
+ "<|eot_id|>",
+ "<|reserved_special_token"
+ ]
+```
+
+If you are only using `llama3` with **Ollama**, it's fine to set the `stop` parameter at the config level via `addParams`.
+
+However, if you are using multiple models, it's now recommended to add stop sequences from the frontend via conversation parameters and presets.
+
+For example, we can omit `addParams`:
+
+```yaml filename="librechat.yaml"
+- name: "Ollama"
+ apiKey: "ollama"
+ baseURL: "http://host.docker.internal:11434/v1/"
+ models:
+ default: [
+ "llama3:latest",
+ "mistral"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "current_model"
+ modelDisplayLabel: "Ollama"
+```
+
+And use these settings (best to also save it):
+
+
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/openrouter.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/openrouter.mdx
new file mode 100644
index 0000000..2b3a230
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/openrouter.mdx
@@ -0,0 +1,35 @@
+---
+title: Openrouter
+description: Example configuration for Openrouter
+---
+
+# [Openrouter](https://openrouter.ai/)
+
+> OpenRouter API key: [openrouter.ai/keys](https://openrouter.ai/keys)
+
+**Notes:**
+
+- **Known:** icon provided, fetching list of models is recommended as API token rates and pricing used for token credit balances when models are fetched.
+
+- `stop` is no longer included as a default parameter, so there is no longer a need to include it in [`dropParams`](./custom_config.md#dropparams), unless you would like to completely prevent users from configuring this field.
+
+- **Known issue:** you should not use `OPENROUTER_API_KEY` as it will then override the `openAI` endpoint to use OpenRouter as well.
+
+```yaml
+ - name: "OpenRouter"
+ # For `apiKey` and `baseURL`, you can use environment variables that you define.
+ # recommended environment variables:
+ apiKey: "${OPENROUTER_KEY}" # NOT OPENROUTER_API_KEY
+ baseURL: "https://openrouter.ai/api/v1"
+ models:
+ default: ["meta-llama/llama-3-70b-instruct"]
+ fetch: true
+ titleConvo: true
+ titleModel: "meta-llama/llama-3-70b-instruct"
+ # Recommended: Drop the stop parameter from the request as Openrouter models use a variety of stop tokens.
+ dropParams: ["stop"]
+ modelDisplayLabel: "OpenRouter"
+```
+
+
+
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/perplexity.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/perplexity.mdx
new file mode 100644
index 0000000..6daa54e
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/perplexity.mdx
@@ -0,0 +1,39 @@
+---
+title: Perplexity
+description: Example configuration for Perplexity
+---
+
+# [Perplexity](https://www.perplexity.ai)
+
+> Perplexity API key: [perplexity.ai/settings/api](https://www.perplexity.ai/settings/api)
+
+**Notes:**
+
+- **Known:** icon provided.
+- **Known issue:** fetching list of models is not supported.
+- API may be strict for some models, and may not allow fields like `stop` and `frequency_penalty` may cause an error when set to 0, in which case, you should use [`dropParams`.](./custom_config.md#dropparams)
+- The example includes a model list, which was last updated on February 27, 2024, for your convenience.
+
+```yaml
+ - name: "Perplexity"
+ apiKey: "${PERPLEXITY_API_KEY}"
+ baseURL: "https://api.perplexity.ai/"
+ models:
+ default: [
+ "mistral-7b-instruct",
+ "sonar-small-chat",
+ "sonar-small-online",
+ "sonar-medium-chat",
+ "sonar-medium-online"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "sonar-medium-chat"
+ summarize: false
+ summaryModel: "sonar-medium-chat"
+ forcePrompt: false
+ dropParams: ["stop", "frequency_penalty"]
+ modelDisplayLabel: "Perplexity"
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/shuttleai.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/shuttleai.mdx
new file mode 100644
index 0000000..249d311
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/shuttleai.mdx
@@ -0,0 +1,32 @@
+---
+title: ShuttleAI
+description: Example configuration for ShuttleAI
+---
+
+# [ShuttleAI](https://shuttleai.app/)
+
+> ShuttleAI API key: [shuttleai.app/keys](https://shuttleai.app/keys)
+
+**Notes:**
+
+- **Known:** icon provided, fetching list of models is recommended.
+
+```yaml
+ - name: "ShuttleAI"
+ apiKey: "${SHUTTLEAI_API_KEY}"
+ baseURL: "https://api.shuttleai.app/v1"
+ models:
+ default: [
+ "shuttle-1", "shuttle-turbo"
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "gemini-pro"
+ summarize: false
+ summaryModel: "llama-summarize"
+ forcePrompt: false
+ modelDisplayLabel: "ShuttleAI"
+ dropParams: ["user"]
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/ai_endpoints/togetherai.mdx b/pages/docs/configuration/librechat_yaml/ai_endpoints/togetherai.mdx
new file mode 100644
index 0000000..ac2ad11
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/ai_endpoints/togetherai.mdx
@@ -0,0 +1,74 @@
+---
+title: together.ai
+description: Example configuration for together.ai
+---
+
+# [together.ai](https://api.together.xyz/)
+
+> together.ai API key: [api.together.xyz/settings/api-keys](https://api.together.xyz/settings/api-keys)
+
+**Notes:**
+
+- **Known:** icon provided.
+- **Known issue:** fetching list of models is not supported.
+- The example includes a model list, which was last updated on February 27, 2024, for your convenience.
+
+```yaml
+ - name: "together.ai"
+ apiKey: "${TOGETHERAI_API_KEY}"
+ baseURL: "https://api.together.xyz"
+ models:
+ default: [
+ "zero-one-ai/Yi-34B-Chat",
+ "Austism/chronos-hermes-13b",
+ "DiscoResearch/DiscoLM-mixtral-8x7b-v2",
+ "Gryphe/MythoMax-L2-13b",
+ "lmsys/vicuna-13b-v1.5",
+ "lmsys/vicuna-7b-v1.5",
+ "lmsys/vicuna-13b-v1.5-16k",
+ "codellama/CodeLlama-13b-Instruct-hf",
+ "codellama/CodeLlama-34b-Instruct-hf",
+ "codellama/CodeLlama-70b-Instruct-hf",
+ "codellama/CodeLlama-7b-Instruct-hf",
+ "togethercomputer/llama-2-13b-chat",
+ "togethercomputer/llama-2-70b-chat",
+ "togethercomputer/llama-2-7b-chat",
+ "NousResearch/Nous-Capybara-7B-V1p9",
+ "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO",
+ "NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT",
+ "NousResearch/Nous-Hermes-Llama2-70b",
+ "NousResearch/Nous-Hermes-llama-2-7b",
+ "NousResearch/Nous-Hermes-Llama2-13b",
+ "NousResearch/Nous-Hermes-2-Yi-34B",
+ "openchat/openchat-3.5-1210",
+ "Open-Orca/Mistral-7B-OpenOrca",
+ "togethercomputer/Qwen-7B-Chat",
+ "snorkelai/Snorkel-Mistral-PairRM-DPO",
+ "togethercomputer/alpaca-7b",
+ "togethercomputer/falcon-40b-instruct",
+ "togethercomputer/falcon-7b-instruct",
+ "togethercomputer/GPT-NeoXT-Chat-Base-20B",
+ "togethercomputer/Llama-2-7B-32K-Instruct",
+ "togethercomputer/Pythia-Chat-Base-7B-v0.16",
+ "togethercomputer/RedPajama-INCITE-Chat-3B-v1",
+ "togethercomputer/RedPajama-INCITE-7B-Chat",
+ "togethercomputer/StripedHyena-Nous-7B",
+ "Undi95/ReMM-SLERP-L2-13B",
+ "Undi95/Toppy-M-7B",
+ "WizardLM/WizardLM-13B-V1.2",
+ "garage-bAInd/Platypus2-70B-instruct",
+ "mistralai/Mistral-7B-Instruct-v0.1",
+ "mistralai/Mistral-7B-Instruct-v0.2",
+ "mistralai/Mixtral-8x7B-Instruct-v0.1",
+ "teknium/OpenHermes-2-Mistral-7B",
+ "teknium/OpenHermes-2p5-Mistral-7B",
+ "upstage/SOLAR-10.7B-Instruct-v1.0"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "togethercomputer/llama-2-7b-chat"
+ summarize: false
+ summaryModel: "togethercomputer/llama-2-7b-chat"
+ forcePrompt: false
+ modelDisplayLabel: "together.ai"
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/example.mdx b/pages/docs/configuration/librechat_yaml/example.mdx
new file mode 100644
index 0000000..bfce9b5
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/example.mdx
@@ -0,0 +1,424 @@
+# Example
+
+## Clean Example
+
+
+
+This example config includes all documented endpoints (Except Azure, LiteLLM, MLX, and Ollama, which all require additional configurations)
+
+```yaml filename="librechat.yaml"
+version: 1.0.8
+
+cache: true
+
+interface:
+ # Privacy policy settings
+ privacyPolicy:
+ externalUrl: 'https://librechat.ai/privacy-policy'
+ openNewTab: true
+
+ # Terms of service
+ termsOfService:
+ externalUrl: 'https://librechat.ai/tos'
+ openNewTab: true
+
+registration:
+ socialLogins: ["discord", "facebook", "github", "google", "openid"]
+
+endpoints:
+ custom:
+
+ # Anyscale
+ - name: "Anyscale"
+ apiKey: "${ANYSCALE_API_KEY}"
+ baseURL: "https://api.endpoints.anyscale.com/v1"
+ models:
+ default: [
+ "meta-llama/Llama-2-7b-chat-hf",
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "meta-llama/Llama-2-7b-chat-hf"
+ summarize: false
+ summaryModel: "meta-llama/Llama-2-7b-chat-hf"
+ forcePrompt: false
+ modelDisplayLabel: "Anyscale"
+
+ # APIpie
+ - name: "APIpie"
+ apiKey: "${APIPIE_API_KEY}"
+ baseURL: "https://apipie.ai/v1/"
+ models:
+ default: [
+ "gpt-4",
+ "gpt-4-turbo",
+ "gpt-3.5-turbo",
+ "claude-3-opus",
+ "claude-3-sonnet",
+ "claude-3-haiku",
+ "llama-3-70b-instruct",
+ "llama-3-8b-instruct",
+ "gemini-pro-1.5",
+ "gemini-pro",
+ "mistral-large",
+ "mistral-medium",
+ "mistral-small",
+ "mistral-tiny",
+ "mixtral-8x22b",
+ ]
+ fetch: false
+ titleConvo: true
+ titleModel: "gpt-3.5-turbo"
+ dropParams: ["stream"]
+
+ #cohere
+ - name: "cohere"
+ apiKey: "${COHERE_API_KEY}"
+ baseURL: "https://api.cohere.ai/v1"
+ models:
+ default: ["command-r","command-r-plus","command-light","command-light-nightly","command","command-nightly"]
+ fetch: false
+ modelDisplayLabel: "cohere"
+ titleModel: "command"
+ dropParams: ["stop", "user", "frequency_penalty", "presence_penalty", "temperature", "top_p"]
+
+ # Fireworks
+ - name: "Fireworks"
+ apiKey: "${FIREWORKS_API_KEY}"
+ baseURL: "https://api.fireworks.ai/inference/v1"
+ models:
+ default: [
+ "accounts/fireworks/models/mixtral-8x7b-instruct",
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "accounts/fireworks/models/llama-v2-7b-chat"
+ summarize: false
+ summaryModel: "accounts/fireworks/models/llama-v2-7b-chat"
+ forcePrompt: false
+ modelDisplayLabel: "Fireworks"
+ dropParams: ["user"]
+
+ # groq
+ - name: "groq"
+ apiKey: "${GROQ_API_KEY}"
+ baseURL: "https://api.groq.com/openai/v1/"
+ models:
+ default: [
+ "llama2-70b-4096",
+ "llama3-70b-8192",
+ "llama3-8b-8192",
+ "mixtral-8x7b-32768",
+ "gemma-7b-it",
+ ]
+ fetch: false
+ titleConvo: true
+ titleModel: "mixtral-8x7b-32768"
+ modelDisplayLabel: "groq"
+
+ # Mistral AI API
+ - name: "Mistral"
+ apiKey: "${MISTRAL_API_KEY}"
+ baseURL: "https://api.mistral.ai/v1"
+ models:
+ default: [
+ "mistral-tiny",
+ "mistral-small",
+ "mistral-medium",
+ "mistral-large-latest"
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "mistral-tiny"
+ modelDisplayLabel: "Mistral"
+ dropParams: ["stop", "user", "frequency_penalty", "presence_penalty"]
+
+ # OpenRouter.ai
+ - name: "OpenRouter"
+ apiKey: "${OPENROUTER_KEY}"
+ baseURL: "https://openrouter.ai/api/v1"
+ models:
+ default: ["openai/gpt-3.5-turbo"]
+ fetch: true
+ titleConvo: true
+ titleModel: "gpt-3.5-turbo"
+ summarize: false
+ summaryModel: "gpt-3.5-turbo"
+ forcePrompt: false
+ modelDisplayLabel: "OpenRouter"
+
+ # Perplexity
+ - name: "Perplexity"
+ apiKey: "${PERPLEXITY_API_KEY}"
+ baseURL: "https://api.perplexity.ai/"
+ models:
+ default: [
+ "mistral-7b-instruct",
+ "sonar-small-chat",
+ "sonar-small-online",
+ "sonar-medium-chat",
+ "sonar-medium-online"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "sonar-medium-chat"
+ summarize: false
+ summaryModel: "sonar-medium-chat"
+ forcePrompt: false
+ dropParams: ["stop", "frequency_penalty"]
+ modelDisplayLabel: "Perplexity"
+
+ # ShuttleAI API
+ - name: "ShuttleAI"
+ apiKey: "${SHUTTLEAI_API_KEY}"
+ baseURL: "https://api.shuttleai.app/v1"
+ models:
+ default: [
+ "shuttle-1", "shuttle-turbo"
+ ]
+ fetch: true
+ titleConvo: true
+ titleModel: "gemini-pro"
+ summarize: false
+ summaryModel: "llama-summarize"
+ forcePrompt: false
+ modelDisplayLabel: "ShuttleAI"
+ dropParams: ["user"]
+
+ # together.ai
+ - name: "together.ai"
+ apiKey: "${TOGETHERAI_API_KEY}"
+ baseURL: "https://api.together.xyz"
+ models:
+ default: [
+ "zero-one-ai/Yi-34B-Chat",
+ "Austism/chronos-hermes-13b",
+ "DiscoResearch/DiscoLM-mixtral-8x7b-v2",
+ "Gryphe/MythoMax-L2-13b",
+ "lmsys/vicuna-13b-v1.5",
+ "lmsys/vicuna-7b-v1.5",
+ "lmsys/vicuna-13b-v1.5-16k",
+ "codellama/CodeLlama-13b-Instruct-hf",
+ "codellama/CodeLlama-34b-Instruct-hf",
+ "codellama/CodeLlama-70b-Instruct-hf",
+ "codellama/CodeLlama-7b-Instruct-hf",
+ "togethercomputer/llama-2-13b-chat",
+ "togethercomputer/llama-2-70b-chat",
+ "togethercomputer/llama-2-7b-chat",
+ "NousResearch/Nous-Capybara-7B-V1p9",
+ "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO",
+ "NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT",
+ "NousResearch/Nous-Hermes-Llama2-70b",
+ "NousResearch/Nous-Hermes-llama-2-7b",
+ "NousResearch/Nous-Hermes-Llama2-13b",
+ "NousResearch/Nous-Hermes-2-Yi-34B",
+ "openchat/openchat-3.5-1210",
+ "Open-Orca/Mistral-7B-OpenOrca",
+ "togethercomputer/Qwen-7B-Chat",
+ "snorkelai/Snorkel-Mistral-PairRM-DPO",
+ "togethercomputer/alpaca-7b",
+ "togethercomputer/falcon-40b-instruct",
+ "togethercomputer/falcon-7b-instruct",
+ "togethercomputer/GPT-NeoXT-Chat-Base-20B",
+ "togethercomputer/Llama-2-7B-32K-Instruct",
+ "togethercomputer/Pythia-Chat-Base-7B-v0.16",
+ "togethercomputer/RedPajama-INCITE-Chat-3B-v1",
+ "togethercomputer/RedPajama-INCITE-7B-Chat",
+ "togethercomputer/StripedHyena-Nous-7B",
+ "Undi95/ReMM-SLERP-L2-13B",
+ "Undi95/Toppy-M-7B",
+ "WizardLM/WizardLM-13B-V1.2",
+ "garage-bAInd/Platypus2-70B-instruct",
+ "mistralai/Mistral-7B-Instruct-v0.1",
+ "mistralai/Mistral-7B-Instruct-v0.2",
+ "mistralai/Mixtral-8x7B-Instruct-v0.1",
+ "teknium/OpenHermes-2-Mistral-7B",
+ "teknium/OpenHermes-2p5-Mistral-7B",
+ "upstage/SOLAR-10.7B-Instruct-v1.0"
+ ]
+ fetch: false # fetching list of models is not supported
+ titleConvo: true
+ titleModel: "togethercomputer/llama-2-7b-chat"
+ summarize: false
+ summaryModel: "togethercomputer/llama-2-7b-chat"
+ forcePrompt: false
+ modelDisplayLabel: "together.ai"
+```
+
+
+
+## Example with Comments
+
+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.
+
+
+
+```yaml filename="librechat.yaml"
+# For more information, see the Configuration Guide:
+# https://docs.librechat.ai/install/configuration/custom_config.html
+
+# Configuration version (required)
+version: 1.0.8
+
+# Cache settings: Set to true to enable caching
+cache: true
+
+# Custom interface configuration
+interface:
+ # Privacy policy settings
+ privacyPolicy:
+ externalUrl: 'https://librechat.ai/privacy-policy'
+ openNewTab: true
+
+ # Terms of service
+ termsOfService:
+ externalUrl: 'https://librechat.ai/tos'
+ openNewTab: true
+
+# Example Registration Object Structure (optional)
+registration:
+ socialLogins: ['github', 'google', 'discord', 'openid', 'facebook']
+ # allowedDomains:
+ # - "gmail.com"
+
+# 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
+# conversationsImport:
+# ipMax: 100
+# ipWindowInMinutes: 60 # Rate limit window for conversation imports per IP
+# userMax: 50
+# userWindowInMinutes: 60 # Rate limit window for conversation imports per user
+
+# Definition of custom endpoints
+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"]
+ # # (optional) Models that support retrieval, will default to latest known OpenAI models that support the feature
+ # retrievalModels: ["gpt-4-turbo-preview"]
+ # # (optional) Assistant Capabilities available to all users. Omit the ones you wish to exclude. Defaults to list below.
+ # capabilities: ["code_interpreter", "retrieval", "actions", "tools", "image_vision"]
+ custom:
+ # Groq Example
+ - name: 'groq'
+ apiKey: '${GROQ_API_KEY}'
+ baseURL: 'https://api.groq.com/openai/v1/'
+ models:
+ default: [
+ "llama3-70b-8192",
+ "llama3-8b-8192",
+ "llama2-70b-4096",
+ "mixtral-8x7b-32768",
+ "gemma-7b-it",
+ ]
+ fetch: false
+ titleConvo: true
+ titleModel: 'mixtral-8x7b-32768'
+ modelDisplayLabel: 'groq'
+
+ # Mistral AI Example
+ - name: 'Mistral' # Unique name for the endpoint
+ # For `apiKey` and `baseURL`, you can use environment variables that you define.
+ # recommended environment variables:
+ apiKey: '${MISTRAL_API_KEY}'
+ baseURL: 'https://api.mistral.ai/v1'
+
+ # Models configuration
+ models:
+ # List of default models to use. At least one value is required.
+ default: ['mistral-tiny', 'mistral-small', 'mistral-medium']
+ # Fetch option: Set to true to fetch models from API.
+ fetch: true # Defaults to false.
+
+ # Optional configurations
+
+ # Title Conversation setting
+ titleConvo: true # Set to true to enable title conversation
+
+ # Title Method: Choose between "completion" or "functions".
+ # titleMethod: "completion" # Defaults to "completion" if omitted.
+
+ # Title Model: Specify the model to use for titles.
+ titleModel: 'mistral-tiny' # Defaults to "gpt-3.5-turbo" if omitted.
+
+ # Summarize setting: Set to true to enable summarization.
+ # summarize: false
+
+ # Summary Model: Specify the model to use if summarization is enabled.
+ # summaryModel: "mistral-tiny" # Defaults to "gpt-3.5-turbo" if omitted.
+
+ # Force Prompt setting: If true, sends a `prompt` parameter instead of `messages`.
+ # forcePrompt: false
+
+ # The label displayed for the AI model in messages.
+ modelDisplayLabel: 'Mistral' # Default is "AI" when not set.
+
+ # Add additional parameters to the request. Default params will be overwritten.
+ # addParams:
+ # safe_prompt: true # This field is specific to Mistral AI: https://docs.mistral.ai/api/
+
+ # Drop Default params parameters from the request. See default params in guide linked below.
+ # 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']
+
+ # OpenRouter Example
+ - name: 'OpenRouter'
+ # For `apiKey` and `baseURL`, you can use environment variables that you define.
+ # recommended environment variables:
+ # Known issue: you should not use `OPENROUTER_API_KEY` as it will then override the `openAI` endpoint to use OpenRouter as well.
+ apiKey: '${OPENROUTER_KEY}'
+ baseURL: 'https://openrouter.ai/api/v1'
+ models:
+ default: ['meta-llama/llama-3-70b-instruct']
+ fetch: true
+ titleConvo: true
+ titleModel: 'meta-llama/llama-3-70b-instruct'
+ # Recommended: Drop the stop parameter from the request as Openrouter models use a variety of stop tokens.
+ dropParams: ['stop']
+ modelDisplayLabel: 'OpenRouter'
+
+# 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
+# See the Custom Configuration Guide for more information:
+# https://docs.librechat.ai/install/configuration/custom_config.html
+```
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/index.mdx b/pages/docs/configuration/librechat_yaml/index.mdx
new file mode 100644
index 0000000..01be7d7
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/index.mdx
@@ -0,0 +1,36 @@
+---
+title: Custom Config
+description: Comprehensive guides for configuring the `librechat.yaml` file AKA the LibreChat Config file. This section is your one-stop resource for understanding and customizing endpoints & other integrations.
+weight: -11
+---
+
+# Intro
+
+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.
+
+## Key Features
+
+- **Endpoint Integration**: Seamlessly integrate with a variety of AI providers compliant with OpenAI API standards, including Mistral AI, reverse proxies, and more.
+- **Advanced Customization**: Configure file handling, rate limiting, user registration, and interface elements to align with your preferences and requirements.
+- **Model Specifications**: Define detailed model configurations, presets, and behaviors to deliver a tailored AI experience.
+- **Assistants Integration**: Leverage the power of OpenAI's Assistants, with options to customize capabilities, polling intervals, and timeouts.
+- **Azure OpenAI Support**: Integrate with Azure OpenAI Service, enabling access to multiple deployments, region models, and serverless inference endpoints.
+
+
+
+
+
+
+
+
+
+
+
+
+Future updates will streamline configuration further by migrating some settings from your [.env file](/docs/configuration/dotenv) to `librechat.yaml`.
+
+Stay tuned for ongoing enhancements to customize your LibreChat instance!
+
+**Note:** To verify your YAML config, you can use the [YAML Validator](/toolkit/yaml_checker) or other online tools like [yamlchecker.com](https://yamlchecker.com/)
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/_meta.ts b/pages/docs/configuration/librechat_yaml/object_structure/_meta.ts
new file mode 100644
index 0000000..7cd80f7
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/_meta.ts
@@ -0,0 +1,12 @@
+export default {
+ config: 'Config',
+ file_config: 'File Config',
+ interface: 'Interface',
+ model_specs: 'Model Specs',
+ registration: 'Registration',
+ assistants_endpoint: 'Assistants Endpoint',
+ custom_endpoint: 'Custom Endpoint',
+ azure_openai: 'Azure OpenAI',
+ model_config: 'Model Config',
+ default_params: 'Default Parameters',
+}
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/assistants_endpoint.mdx b/pages/docs/configuration/librechat_yaml/object_structure/assistants_endpoint.mdx
new file mode 100644
index 0000000..38c42a9
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/assistants_endpoint.mdx
@@ -0,0 +1,139 @@
+# Assistants Endpoint Object Structure
+
+## Example
+
+```yaml filename="Assistants Endpoint"
+endpoints:
+ assistants:
+ disableBuilder: false
+ pollIntervalMs: 500
+ timeoutMs: 10000
+ # Use either `supportedIds` or `excludedIds` but not both
+ supportedIds: ["asst_supportedAssistantId1", "asst_supportedAssistantId2"]
+ # excludedIds: ["asst_excludedAssistantId"]
+ # (optional) Models that support retrieval, will default to latest known OpenAI models that support the feature
+ # retrievalModels: ["gpt-4-turbo-preview"]
+ # (optional) Assistant Capabilities available to all users. Omit the ones you wish to exclude. Defaults to list below.
+ # capabilities: ["code_interpreter", "retrieval", "actions", "tools", "image_vision"]
+```
+> 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.
+
+## disableBuilder
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / assistants / disableBuilder"
+disableBuilder: false
+```
+
+## pollIntervalMs
+
+**Key:**
+
+
+**Default:** `750`
+
+**Example:**
+```yaml filename="endpoints / assistants / pollIntervalMs"
+pollIntervalMs: 500
+```
+
+## timeoutMs
+
+**Key:**
+
+
+**Default:** `180000`
+
+**Example:**
+```yaml filename="endpoints / assistants / timeoutMs"
+timeoutMs: 10000
+```
+**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
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / assistants / supportedIds"
+supportedIds:
+ - "asst_supportedAssistantId1"
+ - "asst_supportedAssistantId2"
+```
+
+## excludedIds
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / assistants / excludedIds"
+excludedIds:
+ - "asst_excludedAssistantId1"
+ - "asst_excludedAssistantId2"
+```
+
+## retrievalModels
+
+**Key:**
+
+
+**Default:** `[]` (uses the latest known OpenAI models that support retrieval)
+
+**Example:**
+```yaml filename="endpoints / assistants / retrievalModels"
+retrievalModels:
+ - "gpt-4-turbo-preview"
+```
+
+## capabilities
+
+**Key:**
+
+
+**Default:** `["code_interpreter", "image_vision", "retrieval", "actions", "tools"]`
+
+**Example:**
+```yaml filename="endpoints / assistants / capabilities"
+capabilities:
+ - "code_interpreter"
+ - "retrieval"
+ - "actions"
+ - "tools"
+ - "image_vision"
+```
+**Note:** This field is optional. If omitted, the default behavior is to include all the capabilities listed in the example.
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/azure_openai.mdx b/pages/docs/configuration/librechat_yaml/object_structure/azure_openai.mdx
new file mode 100644
index 0000000..a39b669
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/azure_openai.mdx
@@ -0,0 +1,276 @@
+# Azure OpenAI Object Structure
+
+Integrating Azure OpenAI Service with your application allows you to seamlessly utilize multiple deployments and region models hosted by Azure OpenAI. This section details how to configure the Azure OpenAI endpoint for your needs.
+
+**[For a detailed guide on setting up Azure OpenAI configurations, click here](/docs/configuration/librechat_yaml/ai_endpoints/azure)**
+
+## Example Configuration
+
+```yaml filename="Example Azure OpenAI Object Structure"
+endpoints:
+ azureOpenAI:
+ titleModel: "gpt-4-turbo"
+ plugins: true
+ groups:
+ - group: "my-westus" # arbitrary name
+ apiKey: "${WESTUS_API_KEY}"
+ instanceName: "actual-instance-name" # name of the resource group or instance
+ version: "2023-12-01-preview"
+ # baseURL: https://prod.example.com
+ # additionalHeaders:
+ # X-Custom-Header: value
+ models:
+ gpt-4-vision-preview:
+ deploymentName: gpt-4-vision-preview
+ version: "2024-02-15-preview"
+ gpt-3.5-turbo:
+ deploymentName: gpt-35-turbo
+ gpt-3.5-turbo-1106:
+ deploymentName: gpt-35-turbo-1106
+ gpt-4:
+ deploymentName: gpt-4
+ gpt-4-1106-preview:
+ deploymentName: gpt-4-1106-preview
+ - group: "my-eastus"
+ apiKey: "${EASTUS_API_KEY}"
+ instanceName: "actual-eastus-instance-name"
+ deploymentName: gpt-4-turbo
+ version: "2024-02-15-preview"
+ baseURL: "https://gateway.ai.cloudflare.com/v1/cloudflareId/azure/azure-openai/${INSTANCE_NAME}/${DEPLOYMENT_NAME}" # uses env variables
+ additionalHeaders:
+ X-Custom-Header: value
+ models:
+ gpt-4-turbo: true
+```
+
+## plugins
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="plugins"
+plugins: true
+```
+
+## assistants
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / assistants"
+assistants: true
+```
+
+## groups
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Note:** [See example above.](#example-configuration)
+
+
+## Group Object Structure
+
+Each item under `groups` is part of a list of records, each with the following fields:
+
+### group
+
+**Key:**
+
+
+**Required:** yes
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / group"
+"group": "my-westus"
+```
+
+### apiKey
+
+**Key:**
+
+
+**Required:** yes
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / apiKey"
+apiKey: "${WESTUS_API_KEY}"
+```
+
+### instanceName
+
+**Key:**
+
+
+**Required:** yes
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / instanceName"
+instanceName: "my-westus"
+```
+
+
+### version
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / version"
+version: "2023-12-01-preview"
+```
+
+### baseURL
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / baseURL"
+baseURL: "https://prod.example.com"
+```
+
+### additionalHeaders
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / additionalHeaders"
+additionalHeaders:
+ X-Custom-Header: ${YOUR_SECRET_CUSTOM_VARIABLE}
+```
+
+### serverless
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / serverless"
+serverless: true
+```
+
+### addParams
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / addParams"
+addParams:
+ safe_prompt: true
+```
+
+### dropParams
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / dropParams"
+dropParams: ["stop", "user", "frequency_penalty", "presence_penalty"]
+```
+
+### forcePrompt
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / forcePrompt"
+forcePrompt: false
+```
+
+### models
+
+**Key:**
+
+
+**Default:** Not specified
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / models"
+models:
+ gpt-4-vision-preview:
+ deploymentName: "arbitrary-deployment-name"
+ version: "2024-02-15-preview"
+```
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/config.mdx b/pages/docs/configuration/librechat_yaml/object_structure/config.mdx
new file mode 100644
index 0000000..ab0c7a0
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/config.mdx
@@ -0,0 +1,222 @@
+# Config Structure
+
+**Note:** Fields not specifically mentioned as required are optional.
+
+## version
+- **required**
+
+
+
+## cache
+
+
+
+## fileStrategy
+
+
+
+## filteredTools
+
+
+
+- **Notes**:
+ - Affects both `gptPlugins` and `assistants` endpoints
+ - You can find the names of the tools to filter in [`api/app/clients/tools/manifest.json`](https://github.com/danny-avila/LibreChat/blob/main/api/app/clients/tools/manifest.json)
+ - Use the `pluginKey` value
+ - Also, any listed under the ".well-known" directory [`api/app/clients/tools/.well-known`](https://github.com/danny-avila/LibreChat/blob/main/api/app/clients/tools/.well-known)
+ - Use the `name_for_model` value
+
+## secureImageLinks
+
+
+
+## imageOutputType
+
+- **Note**: Case-sensitive. Google endpoint only supports "jpeg" and "png" output types.
+- **Options**: "png" | "webp" | "jpeg"
+
+
+
+## fileConfig
+
+**Key:**
+
+
+**Subkeys:**
+
+
+see: [File Config Object Structure](/docs/configuration/librechat_yaml/object_structure/file_config)
+
+## rateLimits
+
+**Key:**
+
+
+**Subkeys:**
+
+
+**fileUploads Subkeys:**
+
+
+**conversationsImport Subkeys:**
+
+
+ - **Example**:
+ ```yaml filename="rateLimits"
+ rateLimits:
+ fileUploads:
+ ipMax: 100
+ ipWindowInMinutes: 60
+ userMax: 50
+ userWindowInMinutes: 60
+ conversationsImport:
+ ipMax: 100
+ ipWindowInMinutes: 60
+ userMax: 50
+ userWindowInMinutes: 60
+ ```
+
+## registration
+
+**Key:**
+
+
+**Subkeys:**
+
+
+see also:
+- [socialLogins](/docs/configuration/librechat_yaml/object_structure/registration#sociallogins),
+- [alloweddomains](/docs/configuration/librechat_yaml/object_structure/registration#alloweddomains),
+- [Registration Object Structure](/docs/configuration/librechat_yaml/object_structure/registration)
+
+## interface
+
+**Key:**
+
+
+**Subkeys:**
+
+
+see: [Interface Object Structure](/docs/configuration/librechat_yaml/object_structure/interface)
+
+## modelSpecs
+
+**Key:**
+
+
+**Subkeys:**
+
+
+see: [Model Specs Object Structure](/docs/configuration/librechat_yaml/object_structure/model_specs)
+
+## endpoints
+
+**Key:**
+
+
+**Subkeys:**
+
+
+see: [Full Custom Endpoint Object Structure](/docs/configuration/librechat_yaml/object_structure/custom_endpoint)
+see: [Full Azure OpenAI Endpoint Object Structure](/docs/configuration/librechat_yaml/object_structure/azure_openai)
+see: [Full Assistants Endpoint Object Structure](/docs/configuration/librechat_yaml/object_structure/assistants_endpoint)
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx b/pages/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx
new file mode 100644
index 0000000..bb8971c
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx
@@ -0,0 +1,348 @@
+# Custom Endpoint Object Structure
+Each endpoint in the `custom` array should have the following structure:
+
+## Example
+
+```yaml filename="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", "mistral-large-latest"]
+ titleConvo: true
+ titleModel: "mistral-tiny"
+ modelDisplayLabel: "Mistral"
+ # 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"]
+```
+
+## name
+
+**Key:**
+
+
+**Required**
+
+**Example:**
+```yaml filename="endpoints / custom / name"
+name: "Mistral"
+```
+
+## apiKey
+
+**Key:**
+
+
+**Required**
+
+**Example:**
+```yaml filename="endpoints / custom / apiKey"
+apiKey: "${MISTRAL_API_KEY}"
+```
+or
+```yaml filename="endpoints / custom / apiKey"
+apiKey: "your_api_key"
+```
+or
+```yaml filename="endpoints / custom / apiKey"
+apiKey: "user_provided"
+```
+
+## baseURL
+
+**Key:**
+
+
+**Required**
+
+**Example:**
+```yaml filename="endpoints / custom / baseURL"
+baseURL: "https://api.mistral.ai/v1"
+```
+or
+```yaml filename="endpoints / custom / baseURL"
+baseURL: "${MISTRAL_BASE_URL}"
+```
+or
+```yaml filename="endpoints / custom / baseURL"
+baseURL: "user_provided"
+```
+
+## iconURL
+
+**Key:**
+
+
+**Default:** `""`
+
+**Example:**
+```yaml filename="endpoints / custom / iconURL"
+iconURL: https://github.com/danny-avila/LibreChat/raw/main/docs/assets/LibreChat.svg
+```
+**Notes:**
+
+* If you want to use existing project icons, define the endpoint `name` as one of the main endpoints (case-sensitive):
+ - "openAI" | "azureOpenAI" | "google" | "anthropic" | "assistants" | "gptPlugins"
+* There are also "known endpoints" (case-insensitive), which have icons provided. If your endpoint `name` matches the following names, you should omit this field:
+ - "Mistral"
+ - "OpenRouter"
+ - "Groq"
+ - "APIpie"
+ - "Anyscale"
+ - "Fireworks"
+ - "Perplexity"
+ - "together.ai"
+ - "Ollama"
+ - "MLX"
+
+## models
+
+**Key:**
+
+
+**Required**
+
+**Properties:**
+
+### default
+
+**Key:**
+
+
+**Required**
+
+**Example:**
+```yaml filename="endpoints / custom / models / default"
+default:
+ - "mistral-tiny"
+ - "mistral-small"
+ - "mistral-medium"
+```
+
+### fetch
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / custom / models / fetch"
+fetch: true
+```
+
+### userIdQuery
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / custom / models / userIdQuery"
+userIdQuery: true
+```
+
+## titleConvo
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / custom / titleConvo"
+titleConvo: true
+```
+
+## titleMethod
+
+**Key:**
+
+
+**Default:** `"completion"`
+
+**Example:**
+```yaml filename="endpoints / custom / titleMethod"
+titleMethod: "completion"
+```
+
+## titleModel
+
+**Key:**
+
+
+**Default:** `"gpt-3.5-turbo"`
+
+**Example:**
+```yaml filename="endpoints / custom / titleModel"
+titleModel: "mistral-tiny"
+```
+or
+```yaml filename="endpoints / custom / titleModel"
+titleModel: "current_model"
+```
+
+## summarize
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / custom / summarize"
+summarize: false
+```
+
+## summaryModel
+
+**Key:**
+
+
+**Default:** `"gpt-3.5-turbo"`
+
+**Example:**
+```yaml filename="endpoints / custom / summaryModel"
+summaryModel: "mistral-tiny"
+```
+
+## forcePrompt
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="endpoints / custom / forcePrompt"
+forcePrompt: false
+```
+
+## modelDisplayLabel
+
+**Key:**
+
+
+**Default:** `"AI"`
+
+**Example:**
+```yaml filename="endpoints / custom / modelDisplayLabel"
+modelDisplayLabel: "Mistral"
+```
+
+## addParams
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / custom / addParams"
+addParams:
+ safe_prompt: true
+```
+
+## dropParams
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / custom / dropParams"
+dropParams:
+ - "stop"
+ - "user"
+ - "frequency_penalty"
+ - "presence_penalty"
+```
+**Note:** For a list of default parameters sent with every request, see the ["Default Parameters"](/docs/configuration/librechat_yaml/object_structure/default_params) section.
+
+## headers
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / custom / headers"
+headers:
+ x-api-key: "${ENVIRONMENT_VARIABLE}"
+ Content-Type: "application/json"
+```
+**Note:** Supports dynamic environment variable values, which use the format: `"${VARIABLE_NAME}"`.
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/default_params.mdx b/pages/docs/configuration/librechat_yaml/object_structure/default_params.mdx
new file mode 100644
index 0000000..43cab32
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/default_params.mdx
@@ -0,0 +1,33 @@
+# Default Parameters
+
+Custom endpoints share logic with the OpenAI endpoint, and thus have default parameters tailored to the OpenAI API.
+
+```yaml filename="Default Parameters"
+{
+ "model": "your-selected-model",
+ "temperature": 1,
+ "top_p": 1,
+ "presence_penalty": 0,
+ "frequency_penalty": 0,
+ "user": "LibreChat_User_ID",
+ "stream": true,
+ "messages": [
+ {
+ "role": "user",
+ "content": "hi how are you",
+ },
+ ],
+}
+```
+
+### Breakdown
+- `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,
+- `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 [Custom Endpoint Object Structure](/docs/configuration/librechat_yaml/object_structure/custom_endpoint).
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/file_config.mdx b/pages/docs/configuration/librechat_yaml/object_structure/file_config.mdx
new file mode 100644
index 0000000..cc574e5
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/file_config.mdx
@@ -0,0 +1,184 @@
+# File Config Object Structure
+
+## Overview
+
+The `fileConfig` object allows you to configure file handling settings for the application, including size limits and MIME type restrictions. This section provides a detailed breakdown of the `fileConfig` object structure.
+
+There are 3 main fields under `fileConfig`:
+
+ - `endpoints`
+ - `serverFileSizeLimit`
+ - `avatarSizeLimit`
+
+**Notes:**
+
+- At the time of writing, the Assistants endpoint [supports filetypes from this list](https://platform.openai.com/docs/assistants/tools/supported-files).
+- OpenAI, Azure OpenAI, Google, and Custom endpoints support files through the [RAG API.](../../features/rag_api.md)
+- 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 filename="fileConfig"
+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
+```
+
+## serverFileSizeLimit
+
+
+
+```yaml filename="fileConfig / serverFileSizeLimit"
+fileConfig:
+ serverFileSizeLimit: 1000
+```
+
+
+## avatarSizeLimit
+
+
+
+```yaml filename="fileConfig / avatarSizeLimit"
+fileConfig:
+ avatarSizeLimit: 2
+```
+
+## endpoints
+
+
+
+**Description:** Each object under endpoints is a record that can have the following settings:
+
+### 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.
+
+## disabled
+
+
+
+**Default:** `false`
+
+```yaml filename="fileConfig / endpoints / {endpoint_record} / disabled"
+openAI:
+ disabled: true
+```
+
+## fileLimit
+
+**Key:**
+
+
+**Default:** Varies by endpoint
+
+```yaml filename="fileConfig / endpoints / {endpoint_record} / fileLimit"
+assistants:
+ fileLimit: 5
+```
+
+## fileSizeLimit
+
+**Key:**
+
+
+**Default:** Varies by endpoint
+
+```yaml filename="fileConfig / endpoints / {endpoint_record} / fileSizeLimit"
+YourCustomEndpointName:
+ fileSizeLimit: 1000
+```
+
+## totalSizeLimit
+
+**Key:**
+
+
+**Default:** Varies by endpoint
+
+```yaml filename="fileConfig / endpoints / {endpoint_record} / totalSizeLimit"
+assistants:
+ totalSizeLimit: 50
+```
+
+## supportedMimeTypes
+
+**Key:**
+
+
+**Default:** Varies by endpoint
+
+```yaml filename="fileConfig / endpoints / {endpoint_record} / supportedMimeTypes"
+assistants:
+ supportedMimeTypes:
+ - "image/.*"
+ - "application/pdf"
+```
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx b/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx
new file mode 100644
index 0000000..d19917b
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/interface.mdx
@@ -0,0 +1,157 @@
+# Interface Object Structure
+
+## Overview
+
+The `interface` object allows for customization of various user interface elements within the application, including visibility and behavior settings for components such as menus, panels, and links. This section provides a detailed breakdown of the `interface` object structure.
+
+There are 7 main fields under `interface`:
+
+ - `privacyPolicy`
+ - `termsOfService`
+ - `endpointsMenu`
+ - `modelSelect`
+ - `parameters`
+ - `sidePanel`
+ - `presets`
+
+**Notes:**
+
+- The `interface` configurations are applied globally within the application.
+- Default values are provided for most settings but can be overridden based on specific requirements or conditions.
+- Conditional logic in the application can further modify these settings based on other configurations like model specifications.
+
+## Example
+
+```yaml filename="interface"
+interface:
+ privacyPolicy:
+ externalUrl: "https://example.com/privacy"
+ openNewTab: true
+ termsOfService:
+ externalUrl: "https://example.com/terms"
+ openNewTab: true
+ endpointsMenu: true
+ modelSelect: false
+ parameters: true
+ sidePanel: true
+ presets: false
+```
+
+## privacyPolicy
+
+**Key:**
+
+
+**Sub-keys:**
+
+
+## termsOfService
+
+**Key:**
+
+
+**Sub-keys:**
+
+
+## endpointsMenu
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="interface / endpointsMenu"
+interface:
+ endpointsMenu: false
+```
+
+## modelSelect
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="interface / modelSelect"
+interface:
+ modelSelect: true
+```
+
+## parameters
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="interface / parameters"
+interface:
+ parameters: false
+```
+
+## sidePanel
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="interface / sidePanel"
+interface:
+ sidePanel: true
+```
+
+## presets
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="interface / presets"
+interface:
+ presets: true
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/model_config.mdx b/pages/docs/configuration/librechat_yaml/object_structure/model_config.mdx
new file mode 100644
index 0000000..6c54348
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/model_config.mdx
@@ -0,0 +1,66 @@
+# Model Config Structure
+
+Each item under `models` is part of a list of records, either a boolean value or Object:
+
+**When specifying a model as an object:**
+
+An object allows for detailed configuration of the model, including its `deploymentName` and/or `version`. This mode is used for more granular control over the models, especially when working with multiple versions or deployments under one instance or resource group.
+
+**Example**:
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / models / {model_item=Object}"
+models:
+ gpt-4-vision-preview:
+ deploymentName: "gpt-4-vision-preview"
+ version: "2024-02-15-preview"
+```
+
+**Notes:**
+- **Deployment Names** and **Versions** are critical for ensuring that the correct model is used.
+ - Double-check these values for accuracy to prevent unexpected behavior.
+
+### deploymentName
+
+**Key:**
+
+
+**Required:** yes
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / models / {model_item=Object} / deploymentName"
+deploymentName: "gpt-4-vision-preview"
+```
+
+## version
+
+**Key:**
+
+
+**Required:** yes
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / models / {model_item=Object} / version"
+version: "2024-02-15-preview"
+```
+
+**Enabling a Model with Default Group Configuration**
+
+**Key:**
+
+
+**Example:**
+```yaml filename="endpoints / azureOpenAI / groups / {group_item} / models"
+models:
+ gpt-4-turbo: true
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/model_specs.mdx b/pages/docs/configuration/librechat_yaml/object_structure/model_specs.mdx
new file mode 100644
index 0000000..fe9a258
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/model_specs.mdx
@@ -0,0 +1,293 @@
+# Model Specs Object Structure
+
+## **Overview**
+
+The `modelSpecs` object helps you provide a simpler UI experience for AI models within your application.
+
+There are 3 main fields under `modelSpecs`:
+
+ - `enforce` (optional; default: false)
+ - `prioritize` (optional; default: true)
+ - `list` (required)
+
+**Notes:**
+
+- If `enforce` is set to true, model specifications can potentially conflict with other interface settings such as `endpointsMenu`, `modelSelect`, `presets`, and `parameters`.
+- The `list` array contains detailed configurations for each model, including presets that dictate specific behaviors, appearances, and capabilities.
+- If interface fields are not specified, having a list of model specs will disable the following interface elements:
+ - `endpointsMenu`
+ - `modelSelect`
+ - `parameters`
+ - `presets`
+- If you would like to enable these interface elements along with model specs, you can set them to `true` in the `interface` object.
+
+## Example
+
+```yaml filename="modelSpecs"
+modelSpecs:
+ enforce: true
+ prioritize: true
+ list:
+ - name: "commander_01"
+ label: "Commander in Chief"
+ description: "An AI roleplaying as the 50th President."
+ iconURL: "https://example.com/icon.jpg"
+ preset: {Refer to the detailed preset configuration example below}
+```
+
+## enforce
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="modelSpecs / enforce"
+modelSpecs:
+ enforce: true
+```
+
+## prioritize
+
+**Key:**
+
+
+**Default:** `true`
+
+**Example:**
+```yaml filename="modelSpecs / prioritize"
+modelSpecs:
+ prioritize: false
+```
+
+## list
+
+**Key:**
+
+
+Each spec object in the `list` can have the following settings:
+
+### **Overview**
+
+ - `name`
+ - Unique identifier for the model.
+ - `label`
+ - A user-friendly name or label for the model, shown in the header dropdown.
+ - `description`
+ - A brief description of the model and its intended use or role, shown in the header dropdown menu.
+ - `iconURL`
+ - URL or a predefined endpoint name for the model's icon.
+ - `default`
+ - Specifies if this model spec is the default selection, to be auto-selected on every new chat.
+ - `showIconInMenu`
+ - Controls whether the model's icon appears in the header dropdown menu.
+ - `showIconInHeader`
+ - Controls whether the model's icon appears in the header dropdown button, left of its name.
+ - `preset`
+ - Detailed preset configurations that define the behavior and capabilities of the model (see preset object structure section below for more details).
+
+## Preset Object Structure
+
+The preset field for a modelSpec list item is made up of a comprehensive configuration blueprint for AI models within the system. It is designed to specify the operational settings of AI models, tailoring their behavior, outputs, and interactions with other system components and endpoints.
+
+### modelLabel
+
+**Key:**
+
+
+**Default:** `None`
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / modelLabel"
+preset:
+ modelLabel: "Customer Support Bot"
+```
+
+### endpoint
+
+**Key:**
+
+
+**Default:** `None`
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / endpoint"
+preset:
+ endpoint: "openAI"
+```
+
+### greeting
+
+**Key:**
+
+
+**Default:** `None`
+
+**Example:**
+
+```yaml filename="modelSpecs / list / {spec_item} / preset / greeting"
+preset:
+ greeting: "Hello! How can I assist you today?"
+```
+
+### promptPrefix
+
+**Key:**
+
+
+**Default:** `None`
+
+**Example:**
+
+```yaml filename="modelSpecs / list / {spec_item} / preset / promptPrefix"
+preset:
+ promptPrefix: "As a financial advisor, ..."
+```
+
+### model_options
+
+> These settings control the stochastic nature and behavior of model responses, affecting creativity, relevance, and variability.
+
+**Key:**
+
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / model_options"
+preset:
+ temperature: 0.7
+ top_p: 0.9
+```
+
+### resendFiles
+
+**Key:**
+
+
+**Default:** `false`
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / resendFiles"
+preset:
+ resendFiles: true
+```
+
+### imageDetail
+
+**Key:**
+
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / imageDetail"
+preset:
+ imageDetail: "high"
+```
+
+### agentOptions
+
+**Key:**
+
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / agentOptions"
+preset:
+ agentOptions:
+ agent: "functions"
+ skipCompletion: false
+ model: "gpt-4-turbo"
+ temperature: 0.5
+```
+
+### tools
+
+**Key:**
+
+
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / tools"
+preset:
+ tools: ["dalle", "tavily_search_results_json", "azure-ai-search", "traversaal_search"]
+```
+**Notes:**
+
+- At the moment, only tools that have credentials provided for them via .env file can be used with modelSpecs, unless the user already had the tool installed.
+- You can find the names of the tools to filter in [api/app/clients/tools/manifest.json](https://github.com/danny-avila/LibreChat/blob/main/api/app/clients/tools/manifest.json)
+ - Use the `pluginKey` value
+- Also, any listed under the ".well-known" directory [api/app/clients/tools/.well-known](https://github.com/danny-avila/LibreChat/blob/main/api/app/clients/tools/.well-known)
+ - Use the `name_for_model` value
+
+## assistant_options
+
+**Key:**
+
+
+**Example:**
+```yaml filename="modelSpecs / list / {spec_item} / preset / assistant_options"
+preset:
+ assistant_id: "asst_98765"
+ instructions: "Please handle customer queries regarding order status."
+```
diff --git a/pages/docs/configuration/librechat_yaml/object_structure/registration.mdx b/pages/docs/configuration/librechat_yaml/object_structure/registration.mdx
new file mode 100644
index 0000000..8c4e411
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/object_structure/registration.mdx
@@ -0,0 +1,45 @@
+# Registration Object Structure
+
+## Example
+
+```yaml filename="Registration Object Structure"
+# Example Registration Object Structure
+registration:
+ socialLogins: ["google", "facebook", "github", "discord", "openid"]
+ allowedDomains:
+ - "gmail.com"
+ - "protonmail.com"
+```
+
+## socialLogins
+
+**Key:**
+
+
+
+**Example:**
+```yaml filename="registration / socialLogins"
+socialLogins: ["google", "facebook", "github", "discord", "openid"]
+```
+
+## allowedDomains
+
+**Key:**
+
+
+**Required**
+
+**Example:**
+```yaml filename="registration / allowedDomains"
+allowedDomains:
+ - "gmail.com"
+ - "protonmail.com"
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/librechat_yaml/setup.mdx b/pages/docs/configuration/librechat_yaml/setup.mdx
new file mode 100644
index 0000000..09d17e5
--- /dev/null
+++ b/pages/docs/configuration/librechat_yaml/setup.mdx
@@ -0,0 +1,39 @@
+# 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](/docs/configuration/librechat_yaml/example) 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, Groq and Openrouter.
+
+**Note:** You can set an alternate filepath for the `librechat.yaml` file through an environment variable:
+
+```bash filename=".env"
+CONFIG_PATH="/alternative/path/to/librechat.yaml"
+```
+
+## 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 filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+```
+
+- **Note:** If you are using `CONFIG_PATH` for an alternative filepath for this file, make sure to specify it accordingly.
+
+- Start docker again, and you should see your config file settings apply
+
+```bash filename="Restart the containers"
+docker compose up
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/logging.mdx b/pages/docs/configuration/logging.mdx
new file mode 100644
index 0000000..5360e39
--- /dev/null
+++ b/pages/docs/configuration/logging.mdx
@@ -0,0 +1,77 @@
+---
+title: Logging System
+description: This doc explains how to use the logging feature of LibreChat, which saves error and debug logs in the `/api/logs` folder. You can use these logs to troubleshoot issues, monitor your server, and report bugs. You can also disable debug logs if you want to save space.
+---
+
+### General
+
+LibreChat has central logging built into its backend (api).
+
+- With the **docker** install, log files are saved in `/logs`
+
+
+
+
+
+
+
+
+
+
+
+- With the **npm** install, log files are saved in `/api/logs`
+
+
+
+
+
+
+
+
+
+
+
+
+
+Error logs are saved by default. Debug logs are enabled by default but can be turned off if not desired.
+
+This allows you to monitor your server through external tools that inspect log files, such as **[the ELK stack](https://aws.amazon.com/what-is/elk-stack/)**.
+
+Debug logs are essential for developer work and fixing issues. If you encounter any problems running LibreChat, reproduce as close as possible, and **[report the issue](https://github.com/danny-avila/LibreChat/issues)** with your logs found in `./api/logs/debug-%DATE%.log`.
+
+Errors logs are also saved in the same location: `./api/logs/error-%DATE%.log`. If you have meilisearch configured, there is a separate log file for this as well.
+
+
+Note: Logs are rotated on a 14-day basis, so you will generate one error log file, one debug log file, and one meiliSync log file per 14 days.
+Errors will also be present in debug log files as well, but provide stack traces and more detail in the error log files.
+
+
+### Setup
+
+- Toggle debug logs with the following environment variable. By default, even if you never set this variable, debug logs will be generated, but you have the option to disable them by setting it to `FALSE`.
+
+
+
+> Note: it's recommended to disable debug logs in a production environment.
+
+- For verbose server output in the console/terminal, you can set the following to `TRUE`:
+
+
+
+This is not recommended however, as the outputs can be quite verbose. It's disabled by default and should be enabled sparingly.
+
+- When handling console logs in cloud deployments (such as GCP or AWS), enabling this will dump the logs with a UTC timestamp and format them as JSON.
+
+
diff --git a/pages/docs/configuration/meilisearch.mdx b/pages/docs/configuration/meilisearch.mdx
new file mode 100644
index 0000000..7de5013
--- /dev/null
+++ b/pages/docs/configuration/meilisearch.mdx
@@ -0,0 +1,61 @@
+---
+title: Meilisearch
+description: Setting up MeiliSearch for LibreChat
+---
+
+# Setting up MeiliSearch for LibreChat
+- See: [Search feature in LibreChat](/docs/user_guides/search) for a quick overview.
+
+MeiliSearch is a powerful, open-source search engine that enhances LibreChat's functionality by enabling full-text search, typo tolerance, and instant search results for past conversations.
+
+Follow these steps to set up MeiliSearch for LibreChat:
+
+## 1. Download MeiliSearch
+ - Go to the MeiliSearch GitHub releases page: https://github.com/meilisearch/meilisearch/releases
+ - Download the latest version of MeiliSearch for your operating system (e.g., `meilisearch-linux-amd64.tar.gz` for Linux, `meilisearch-macos-amd64` for macOS, or `meilisearch-windows-amd64.zip` for Windows).
+
+## 2. Extract/Install MeiliSearch
+ - Linux/macOS: Extract the downloaded archive to a directory of your choice.
+ - Windows: Extract the ZIP file to a directory of your choice.
+
+## 3. Make the MeiliSearch Binary Executable (Linux/macOS)
+ - Open a terminal and navigate to the directory where you extracted MeiliSearch.
+ - Run the following command to make the binary executable:
+ ```sh filename="Make the MeiliSearch Binary Executable"
+ chmod +x meilisearch
+ ```
+
+## 4. Generate a Master Key
+ - Open a terminal (or Command Prompt on Windows) and navigate to the MeiliSearch directory.
+ - Run the following command to generate a Master Key:
+ ```sh filename="Generate a Master Key"
+ ./meilisearch --generate-master-key
+ ```
+ - Copy the generated Master Key as you'll need it later.
+
+## 5. Start MeiliSearch
+ - In the same terminal, run the following command to start MeiliSearch, replacing `` with the Master Key you generated in the previous step:
+ ```sh filename="Start MeiliSearch"
+ ./meilisearch --master-key=
+ ```
+ - MeiliSearch will now start running on the default port (`7700`).
+
+## 6. Update LibreChat's Environment Variables
+ - Open the `.env` file in the root directory of your LibreChat project.
+ - Add or update the following lines with your MeiliSearch configuration:
+
+ ```sh filename=".env"
+ SEARCH=true
+ MEILI_NO_ANALYTICS=true
+ MEILI_HOST=http://localhost:7700
+ MEILI_MASTER_KEY=
+ ```
+
+ - Replace `` with the Master Key you generated earlier.
+
+## 7. Start/Restart LibreChat
+ - Start or restart your LibreChat application.
+
+That's it! With MeiliSearch set up and configured, LibreChat should now have the Conversation search feature enabled, allowing users to perform full-text searches, benefit from typo tolerance, and experience instant search results for their past conversations.
+
+Note: Make sure to keep the MeiliSearch process running in the background for the search functionality to work correctly. You may want to set up a script or service to keep MeiliSearch running persistently.
\ No newline at end of file
diff --git a/pages/docs/configuration/mod_system.mdx b/pages/docs/configuration/mod_system.mdx
new file mode 100644
index 0000000..46928e4
--- /dev/null
+++ b/pages/docs/configuration/mod_system.mdx
@@ -0,0 +1,109 @@
+---
+title: Automated Moderation
+description: Configuration of the Automated Moderation System. This uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+---
+
+# Automated Moderation System (optional)
+The Automated Moderation System uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+
+In production, you should have Cloudflare or some other DDoS protection in place to really protect the server from excessive requests, but these changes will largely protect you from the single or several bad actors targeting your deployed instance for proxying.
+
+**For further details, refer to the user guide provided here: [Automated Moderation](/docs/user_guides/mod_system)**
+
+## Setup
+
+The following are all of the related env variables to make use of and configure the mod system. Note this is also found in the [/.env.example](https://github.com/danny-avila/LibreChat/blob/main/.env.example) file, to be set in your own `.env` file.
+
+**Note:** currently, most of these values are configured through the .env file, but they may soon migrate to be exclusively configured from the [`librechat.yaml` config file](/docs/configuration/librechat_yaml/object_structure/config#ratelimits).
+
+### Violation, Interval, Duration
+
+
+
+### The score for each violation
+
+
+
+### Login and registration rate limiting.
+
+
+
+### Message rate limiting
+
+
+
+> Note: You can utilize both limiters, but default is to limit by IP only.
+
+#### Message rate limiting (per IP)
+
+
+
+#### Message rate limiting (per User)
+
+
+
+#### Illegal model requests
+
+> Note: Illegal model requests are almost always nefarious as it means a 3rd party is attempting to access the server through an automated script. For this, I recommend a relatively high score, no less than 5.
+
+
+
+## OpenAI text moderation
+
+
+
+
+Note that this might not work with all reverse proxies:
+
+
+**Note:** If you're using LibreChat with Docker, you'll need to utilize the `docker-compose.override.yml` file. This override file allows you to prevent the installation of the included MongoDB instance. Instead, your LibreChat Docker container will use the online MongoDB Atlas database you've just set up. For more information on using the override file, please refer to our [Docker Override Guide](/docs/configuration/docker_override).
+
+
diff --git a/pages/docs/configuration/mongodb/mongodb_auth.mdx b/pages/docs/configuration/mongodb/mongodb_auth.mdx
new file mode 100644
index 0000000..47e3399
--- /dev/null
+++ b/pages/docs/configuration/mongodb/mongodb_auth.mdx
@@ -0,0 +1,364 @@
+---
+title: MongoDB Authentication
+description: Setup authentication on your docker mongodb with the docker-compose.override.yml file
+---
+
+# MongoDB Authentication (Docker)
+
+This guide will demonstrate how to use the `docker-compose.override.yml` file to allows us to enable explicit authentication for MongoDB.
+
+For more info about the override file, please consult: [Docker Compose Override](/docs/configuration/docker_override)
+
+**Notes:**
+
+- The default configuration is secure by blocking external port access, but we can take it a step further with access credentials.
+- As noted by the developers of MongoDB themselves, authentication in MongoDB is fairly complex. We will be taking a simple approach that will be good enough for most cases, especially for existing configurations of LibreChat. To learn more about how mongodb authentication works with docker, see here: https://hub.docker.com/_/mongo/
+- This guide focuses exclusively on terminal-based setup procedures.
+- While the steps outlined may also be applicable to Docker Desktop environments, or with non-Docker, local MongoDB, or other container setups, details specific to those scenarios are not provided.
+
+**There are 3 basic steps:**
+
+- Create an admin user within your mongodb container
+- Enable authentication and create a "readWrite" user for "LibreChat"
+- Configure the MONGO_URI with newly created user
+
+## TL;DR
+
+These are all the necessary commands if you'd like to run through these quickly or for reference:
+
+
+
+```bash filename="Shut down container initially"
+docker compose down
+```
+
+```bash filename="Start MongoDB container"
+docker compose up -d mongodb
+```
+
+```bash filename="Open MongoDB shell on 'chat-mongodb' container"
+docker exec -it chat-mongodb mongosh
+```
+
+```bash filename="Switch to admin database"
+use admin
+```
+
+```bash filename="Create new admin user"
+db.createUser({ user: "adminUser", pwd: "securePassword", roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"] })
+```
+
+```bash filename="Exit MongoDB shell"
+exit
+```
+
+```bash filename="Shut down container after setup"
+docker compose down
+```
+
+```bash filename="Restart MongoDB container with authentication"
+docker compose up -d mongodb
+```
+
+```bash filename="Log into MongoDB shell with credentials"
+docker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase admin
+```
+
+```bash filename="Switch to LibreChat database"
+use LibreChat
+```
+
+```bash filename="Create user in LibreChat database"
+db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
+```
+
+```bash filename="Exit MongoDB shell after creating user"
+exit
+```
+
+```bash filename="Shut down container after user creation"
+docker compose down
+```
+
+```bash filename="Start all services with final settings"
+docker compose up
+```
+
+
+### Example
+
+Example `docker-compose.override.yml` file using the [`librechat.yaml` config file](/docs/configuration/librechat_yaml), [MongoDB Authentication](/docs/configuration/mongodb/mongodb_auth), and `mongo-express` for [managing your MongoDB database](/blog/2023-11-30_mongoexpress):
+
+
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+ environment:
+ - MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChat
+ mongodb:
+ command: mongod --auth
+ mongo-express:
+ image: mongo-express
+ container_name: mongo-express
+ environment:
+ ME_CONFIG_MONGODB_SERVER: mongodb
+ ME_CONFIG_BASICAUTH_USERNAME: admin
+ ME_CONFIG_BASICAUTH_PASSWORD: password
+ ME_CONFIG_MONGODB_URL: 'mongodb://adminUser:securePassword@mongodb:27017'
+ ME_CONFIG_MONGODB_ADMINUSERNAME: adminUser
+ ME_CONFIG_MONGODB_ADMINPASSWORD: securePassword
+ ports:
+ - '8081:8081'
+ depends_on:
+ - mongodb
+ restart: always
+```
+
+
+## Step 1: Creating an Admin User
+
+First, we must stop the default containers from running, and only run the mongodb container.
+
+```bash filename="Stop all running containers"
+docker compose down
+```
+
+```bash filename="Start mongodb container in detached mode"
+docker compose up -d mongodb
+```
+
+> Note: The `-d` flag detaches the current terminal instance as the container runs in the background. If you would like to see the mongodb log outputs, omit it and continue in a separate terminal.
+
+Once running, we will enter the container's terminal and execute `mongosh`:
+
+```bash filename="Connect to the MongoDB shell"
+docker exec -it chat-mongodb mongosh
+```
+You should see the following output:
+
+```bash filename="Output"
+~/LibreChat$ docker exec -it chat-mongodb mongosh
+Current Mongosh Log ID: 65bfed36f7d7e3c2b01bcc3d
+Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.1
+Using MongoDB: 7.0.4
+Using Mongosh: 2.1.1
+
+For mongosh info see: https://docs.mongodb.com/mongodb-shell/
+
+test>
+```
+
+Optional: While we're here, we can disable telemetry for mongodb if desired, which is anonymous usage data collected and sent to MongoDB periodically:
+
+Execute the command below.
+
+> Notes:
+> - All subsequent commands should be run in the current terminal session, regardless of the environment (Docker, Linux, `mongosh`, etc.)
+> - I will represent the actual terminal view with # example input/output or simply showing the output in some cases
+
+Command:
+
+```bash filename="Disable Telemetry"
+disableTelemetry()
+```
+
+Example input/output:
+
+```bash filename="example input/output"
+test> disableTelemetry()
+Telemetry is now disabled.
+```
+
+Now, we must access the admin database, which mongodb creates by default to create our admin user:
+
+```bash filename="Switch to Admin Database"
+use admin
+```
+
+> switched to db admin
+
+Replace the credentials as desired and keep in your secure records for the rest of the guide.
+
+Run command to create the admin user:
+
+```bash filename="Create Admin User"
+db.createUser({ user: "adminUser", pwd: "securePassword", roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"] })
+```
+
+You should see an "ok" output.
+
+You can also confirm the admin was created by running `show users`:
+
+```bash filename="example input/output"
+admin> show users
+[
+ {
+ _id: 'admin.adminUser',
+ userId: UUID('86e90441-b5b7-4043-9662-305540dfa6cf'),
+ user: 'adminUser',
+ db: 'admin',
+ roles: [
+ { role: 'userAdminAnyDatabase', db: 'admin' },
+ { role: 'readWriteAnyDatabase', db: 'admin' }
+ ],
+ mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
+ }
+]
+```
+
+:warning: **Important:** if you are using `mongo-express` to [manage your database (guide here)](../../features/manage_your_database.md), you need the additional permissions for the `mongo-express` service to run correctly:
+
+```bash filename="Grant Roles to Admin User"
+db.grantRolesToUser("adminUser", ["clusterAdmin", "readAnyDatabase"])
+```
+
+Exit the Mongosh/Container Terminal by running `exit`:
+```bash filename="Exit the Mongosh/Container Terminal"
+admin> exit
+```
+
+And shut down the running container:
+```bash filename="Shut down the running container"
+docker compose down
+```
+
+## Step 2: Enabling Authentication and Creating a User with `readWrite` Access
+
+We must now create/edit the `docker-compose.override.yml` file to enable authentication for our mongodb container. You can use this configuration to start or reference:
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml # Optional for using the librechat config file.
+ mongodb:
+ command: mongod --auth # <--- Add this to enable authentication
+```
+
+After configuring the override file as above, run the mongodb container again:
+
+```bash filename="Start the MongoDB container"
+docker compose up -d mongodb
+```
+
+And access mongosh as the admin user:
+
+```bash filename="Connect to MongoDB container using mongo shell"
+docker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase admin
+```
+
+Confirm you are authenticated:
+```bash filename="Check MongoDB Connection Status Command"
+db.runCommand({ connectionStatus: 1 })
+```
+
+```bash filename="example input/output"
+test> db.runCommand({ connectionStatus: 1 })
+{
+ authInfo: {
+ authenticatedUsers: [ { user: 'adminUser', db: 'admin' } ],
+ authenticatedUserRoles: [
+ { role: 'readWriteAnyDatabase', db: 'admin' },
+ { role: 'userAdminAnyDatabase', db: 'admin' }
+ ]
+ },
+ ok: 1
+}
+test>
+```
+
+Switch to the "LibreChat" database
+
+> Note: This the default database unless you changed it via the MONGO_URI; default URI: `MONGO_URI=mongodb://mongodb:27017/LibreChat`
+
+```bash filename="Switch to the LibreChat database"
+use LibreChat
+```
+
+Now we'll create the actual credentials to be used by our Mongo connection string, which will be limited to read/write access of the "LibreChat" database. As before, replace the example with your desired credentials:
+
+`db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });`
+
+You should see an "ok" output again.
+
+You can verify the user creation with the `show users` command.
+
+Exit the Mongosh/Container Terminal again with `exit`, and bring the container down:
+
+```bash filename="End the current shell session"
+exit
+```
+
+```bash filename="Stop the current Docker Compose services"
+docker compose down
+```
+
+I had an issue where the newly created user would not persist after creating it. To solve this, I simply repeated the steps to ensure it was created. Here they are for your convenience:
+
+```bash filename="Shut down container"
+docker compose down
+```
+
+```bash filename="Start Mongo container"
+docker compose up -d mongodb
+```
+
+```bash filename="Access MongoDB shell as admin"
+docker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase admin
+```
+
+```bash filename="Switch to LibreChat database"
+use LibreChat
+```
+
+```bash filename="Show current users in LibreChat database"
+show users
+```
+
+```bash filename="Create a new user in LibreChat database"
+db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
+```
+
+If it's still not persisting, you can try running the commands with all containers running, but note that the `LibreChat` container will be in an error/retrying state.
+
+## Step 3: Update the `MONGO_URI` to Use the New Credentials
+
+Finally, we add the new connection string with our newly created credentials to our `docker-compose.override.yml` file under the `api` service:
+
+```yaml filename="docker-compose.override.yml"
+ environment:
+ - MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChat
+```
+
+So our override file looks like this now:
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+ environment:
+ - MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChat
+ mongodb:
+ command: mongod --auth
+```
+
+You should now run `docker compose up` successfully authenticated with read/write access to the LibreChat database
+
+Example successful connection:
+```bash filename="successful connection example"
+LibreChat | 2024-02-04 20:59:43 info: Server listening on all interfaces at port 3080. Use http://localhost:3080 to access it
+chat-mongodb | {"t":{"$date":"2024-02-04T20:59:53.880+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"192.168.160.4:58114","uuid":{"uuid":{"$uuid":"027bdc7b-a3f4-429a-80ee-36cd172058ec"}},"connectionId":17,"connectionCount":10}}
+```
+
+If you're having Authentication errors, run the last part of Step 2 again. I'm not sure why it's finicky but it will work after a few tries.
+
diff --git a/pages/docs/configuration/mongodb/mongodb_community.mdx b/pages/docs/configuration/mongodb/mongodb_community.mdx
new file mode 100644
index 0000000..a5ec4ab
--- /dev/null
+++ b/pages/docs/configuration/mongodb/mongodb_community.mdx
@@ -0,0 +1,67 @@
+---
+title: "MongoDB Community Server"
+description: "Setting up a MongoDB Community Server for your LibreChat database."
+---
+
+# Setting Up a MongoDB Community Server
+
+## 1. Download MongoDB Community Server
+- Go to the official MongoDB website: [https://www.mongodb.com/try/download/community](https://www.mongodb.com/try/download/community)
+- Select your operating system and download the appropriate package.
+
+## 2. Install MongoDB Community Server
+Follow the installation instructions for your operating system to install MongoDB Community Server.
+
+## 3. Create a Data Directory
+MongoDB requires a data directory to store its data files. Create a directory on your system where you want to store the MongoDB data files (e.g., `/path/to/data/directory`).
+
+## 4. Start the MongoDB Server
+- Open a terminal or command prompt.
+- Navigate to the MongoDB installation directory (e.g., `/path/to/mongodb/bin`).
+- Run the following command to start the MongoDB server, replacing `/path/to/data/directory` with the path to the data directory you created in Step 3:
+
+```sh filename="Start the MongoDB Server"
+./mongod --dbpath=/path/to/data/directory
+```
+
+## 5. Configure MongoDB for Remote Access (Optional)
+If you plan to access the MongoDB server from a remote location (e.g., a different machine or a LibreChat instance hosted elsewhere), you need to configure MongoDB for remote access:
+
+- Create a configuration file (e.g., `/path/to/mongodb/config/mongodb.conf`) with the following content:
+
+```yaml filename="mongodb.conf"
+# Network interfaces
+net:
+ port: 27017
+ bindIp: 0.0.0.0
+```
+- Stop the MongoDB server if it's running.
+- Start the MongoDB server with the configuration file:
+
+```yaml filename="Start the MongoDB server"
+./mongod --config /path/to/mongodb/config/mongodb.conf
+```
+
+## 6. Get the Connection String
+The connection string for your MongoDB Community Server will be in the following format:
+
+```sh filename="Connection String"
+mongodb://[hostname]:[port]
+```
+Replace `[hostname]` with the IP address or hostname of the machine where MongoDB is running, and `[port]` with the port number (usually 27017).
+
+## 7. Update the .env File
+- In your LibreChat project, open the `.env` file.
+- Find the `MONGO_URI` variable and paste your connection string:
+
+```sh filename=".env"
+MONGO_URI=mongodb://[hostname]:[port]
+```
+
+That's it! You've now set up a MongoDB Community Server for LibreChat. Your LibreChat application should be able to connect to the local MongoDB instance using the connection string you provided.
+
+## Note about Docker
+
+
+**Note:** If you're using LibreChat with Docker, you'll need to utilize the `docker-compose.override.yml` file. This override file allows you to prevent the installation of the included MongoDB instance. Instead, your LibreChat Docker container will use the local MongoDB Community Server database you've just set up. For more information on using the override file, please refer to our [Docker Override Guide](/docs/configuration/docker_override).
+
diff --git a/pages/docs/configuration/pre_configured_ai/_meta.ts b/pages/docs/configuration/pre_configured_ai/_meta.ts
new file mode 100644
index 0000000..62aacc4
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/_meta.ts
@@ -0,0 +1,3 @@
+export default {
+ index: 'Intro',
+}
diff --git a/pages/docs/configuration/pre_configured_ai/anthropic.mdx b/pages/docs/configuration/pre_configured_ai/anthropic.mdx
new file mode 100644
index 0000000..a4ef771
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/anthropic.mdx
@@ -0,0 +1,15 @@
+# Anthropic
+
+- Create an account at **[https://console.anthropic.com/](https://console.anthropic.com/)**
+- Go to **[https://console.anthropic.com/account/keys](https://console.anthropic.com/account/keys)** and get your api key
+- You will need to set the following environment variable to your key or you can set it to `user_provided` for users to provide their own.
+
+```bash filename=".env"
+ANTHROPIC_API_KEY=user_provided
+```
+
+- You can determine which models you would like to have available with `ANTHROPIC_MODELS`.
+
+```bash filename=".env"
+ANTHROPIC_MODELS=claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307,claude-2.1,claude-2,claude-1.2,claude-1,claude-1-100k,claude-instant-1,claude-instant-1-100k
+```
\ No newline at end of file
diff --git a/pages/docs/configuration/pre_configured_ai/assistants.mdx b/pages/docs/configuration/pre_configured_ai/assistants.mdx
new file mode 100644
index 0000000..6aef8b8
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/assistants.mdx
@@ -0,0 +1,42 @@
+# Assistants
+
+- The [Assistants API by OpenAI](https://platform.openai.com/docs/assistants/overview) has a dedicated endpoint.
+- The Assistants API enables the creation of AI assistants, offering functionalities like code interpreter, knowledge retrieval of files, and function execution.
+ - [Read here for an in-depth documentation](https://platform.openai.com/docs/assistants/overview) of the feature, how it works, what it's capable of.
+- As with the regular [OpenAI API](/docs/configuration/pre_configured_ai/openai), go to **[https://platform.openai.com/account/api-keys](https://platform.openai.com/account/api-keys)** to get a key.
+- You will need to set the following environment variable to your key or you can set it to `user_provided` for users to provide their own.
+
+```bash filename=".env"
+ASSISTANTS_API_KEY=your-key
+```
+
+- You can determine which models you would like to have available with `ASSISTANTS_MODELS`; otherwise, the models list fetched from OpenAI will be used (only Assistants API compatible models will be shown).
+
+```bash filename=".env"
+ASSISTANTS_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-16k-0613,gpt-3.5-turbo-16k,gpt-3.5-turbo,gpt-4,gpt-4-0314,gpt-4-32k-0314,gpt-4-0613,gpt-3.5-turbo-0613,gpt-3.5-turbo-1106,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview
+```
+
+- If necessary, you can also set an alternate base URL instead of the official one with `ASSISTANTS_BASE_URL`, which is similar to the OpenAI counterpart `OPENAI_REVERSE_PROXY`
+
+```bash filename=".env"
+ASSISTANTS_BASE_URL=http://your-alt-baseURL:3080/
+```
+
+- There is additional, optional configuration, depending on your needs, such as disabling the assistant builder UI, that are available via the [`librechat.yaml` custom config file](./custom_config.md#assistants-endpoint-object-structure):
+ - Control the visibility and use of the builder interface for assistants. [More info](/docs/configuration/librechat_yaml/object_structure/assistants_endpoint#disablebuilder)
+ - Specify the polling interval in milliseconds for checking run updates or changes in assistant run states. [More info](/docs/configuration/librechat_yaml/object_structure/assistants_endpoint#pollintervalms)
+ - Set the timeout period in milliseconds for assistant runs. Helps manage system load by limiting total run operation time. [More info](/docs/configuration/librechat_yaml/object_structure/assistants_endpoint#timeoutms)
+ - Specify which assistant Ids are supported or excluded [More info](/docs/configuration/librechat_yaml/object_structure/assistants_endpoint#supportedids)
+
+
+
+**Notes:**
+- At the time of writing, only the following models support the [Retrieval](https://platform.openai.com/docs/assistants/tools/knowledge-retrieval) capability:
+ - gpt-3.5-turbo-0125
+ - gpt-4-0125-preview
+ - gpt-4-turbo-preview
+ - gpt-4-1106-preview
+ - gpt-3.5-turbo-1106
+- Vision capability is not yet supported.
+- If you have previously set the [`ENDPOINTS` value in your .env file](./dotenv.md#endpoints), you will need to add the value `assistants`
+
\ No newline at end of file
diff --git a/pages/docs/configuration/pre_configured_ai/google.mdx b/pages/docs/configuration/pre_configured_ai/google.mdx
new file mode 100644
index 0000000..5042897
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/google.mdx
@@ -0,0 +1,118 @@
+# Google
+
+For the Google Endpoint, you can either use the **Generative Language API** (for Gemini models), or the **Vertex AI API** (for Gemini, PaLM2 & Codey models).
+
+The Generative Language API uses an API key, which you can get from **Google AI Studio**.
+
+For Vertex AI, you need a Service Account JSON key file, with appropriate access configured.
+
+Instructions for both are given below.
+
+## Generative Language API (Gemini)
+
+**[See here for Gemini API pricing and rate limits](https://ai.google.dev/pricing)**
+
+⚠️ While Google models are free, they are using your input/output to help improve the model, with data de-identified from your Google Account and API key.
+⚠️ During this period, your messages “may be accessible to trained reviewers.”
+
+To use Gemini models through Google AI Studio, you'll need an API key. If you don't already have one, create a key in Google AI Studio.
+
+Get an API key here: **[makersuite.google.com](https://makersuite.google.com/app/apikey)**
+
+Once you have your key, provide the key in your .env file, which allows all users of your instance to use it.
+
+```bash filename=".env"
+GOOGLE_KEY=mY_SeCreT_w9347w8_kEY
+```
+
+Or, you can make users provide it from the frontend by setting the following:
+```bash filename=".env"
+GOOGLE_KEY=user_provided
+```
+
+Since fetching the models list isn't yet supported, you should set the models you want to use in the .env file.
+
+For your convenience, these are the latest models as of 4/15/24 that can be used with the Generative Language API:
+
+```bash filename=".env"
+GOOGLE_MODELS=gemini-1.0-pro,gemini-1.0-pro-001,gemini-1.0-pro-latest,gemini-1.0-pro-vision-latest,gemini-1.5-pro-latest,gemini-pro,gemini-pro-vision
+```
+
+
+Notes:
+- A gemini-pro model or `gemini-pro-vision` are required in your list for attaching images.
+- Using LibreChat, PaLM2 and Codey models can only be accessed through Vertex AI, not the Generative Language API.
+ - Only models that support the `generateContent` method can be used natively with LibreChat + the Gen AI API.
+- Selecting `gemini-pro-vision` for messages with attachments is not necessary as it will be switched behind the scenes for you
+- Since `gemini-pro-vision`does not accept non-attachment messages, messages without attachments are automatically switched to use `gemini-pro` (otherwise, Google responds with an error)
+- With the Google endpoint, you cannot use both Vertex AI and Generative Language API at the same time. You must choose one or the other.
+- Some PaLM/Codey models and `gemini-pro-vision` may fail when `maxOutputTokens` is set to a high value. If you encounter this issue, try reducing the value through the conversation parameters.
+
+
+Setting `GOOGLE_KEY=user_provided` in your .env file sets both the Vertex AI Service Account JSON key file and the Generative Language API key to be provided from the frontend like so:
+
+
+
+## Vertex AI
+
+**[See here for Vertex API pricing and rate limits](https://cloud.google.com/vertex-ai/generative-ai/pricing)**
+
+To setup Google LLMs (via Google Cloud Vertex AI), first, signup for Google Cloud: **[cloud.google.com](https://cloud.google.com/)**
+
+You can usually get **$300 starting credit**, which makes this option free for 90 days.
+
+## 1. Once signed up, Enable the Vertex AI API on Google Cloud:
+ - Go to **[Vertex AI page on Google Cloud console](https://console.cloud.google.com/vertex-ai)**
+ - Click on `Enable API` if prompted
+## 2. Create a Service Account with Vertex AI role:
+ - **[Click here to create a Service Account](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create?walkthrough_id=iam--create-service-account#step_index=1)**
+ - **Select or create a project**
+ - ### Enter a service account ID (required), name and description are optional
+ - 
+ - ### Click on "Create and Continue" to give at least the "Vertex AI User" role
+ - 
+ - **Click on "Continue/Done"**
+## 3. Create a JSON key to Save in your Project Directory:
+ - **Go back to [the Service Accounts page](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts)**
+ - **Select your service account**
+ - ### Click on "Keys"
+ - 
+ - ### Click on "Add Key" and then "Create new key"
+ - 
+ - **Choose JSON as the key type and click on "Create"**
+ - **Download the key file and rename it as 'auth.json'**
+ - **Save it within the project directory, in `/api/data/`**
+ - 
+
+**Saving your JSON key file in the project directory which allows all users of your LibreChat instance to use it.**
+
+Alternatively, you can make users provide it from the frontend by setting the following:
+
+```bash filename=".env"
+# Note: this configures both the Vertex AI Service Account JSON key file
+# and the Generative Language API key to be provided from the frontend.
+GOOGLE_KEY=user_provided
+```
+
+Since fetching the models list isn't yet supported, you should set the models you want to use in the .env file.
+
+For your convenience, these are the latest models as of 4/15/24 that can be used with the Generative Language API:
+
+```bash filename=".env"
+GOOGLE_MODELS=gemini-1.5-pro-preview-0409,gemini-1.0-pro-vision-001,gemini-pro,gemini-pro-vision,chat-bison,chat-bison-32k,codechat-bison,codechat-bison-32k,text-bison,text-bison-32k,text-unicorn,code-gecko,code-bison,code-bison-32k
+```
+
+
+If you're using docker and want to provide the `auth.json` file, you will need to also mount the volume in docker-compose.override.yml
+
+```yaml filename="docker-compose.override.yml"
+version: '3.4'
+
+services:
+ api:
+ volumes:
+ - type: bind
+ source: ./api/data/auth.json
+ target: /app/api/data/auth.json
+```
+
\ No newline at end of file
diff --git a/pages/docs/configuration/pre_configured_ai/index.mdx b/pages/docs/configuration/pre_configured_ai/index.mdx
new file mode 100644
index 0000000..90aaeb3
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/index.mdx
@@ -0,0 +1,27 @@
+---
+title: AI Setup
+description: Configuration guides for setting up pre-configured AI providers in LibreChat
+---
+
+# Pre-Configured AI Setup
+
+This section provides detailed configuration guides to help you set up various AI providers and their respective APIs and credentials in LibreChat.
+
+## Endpoints Configuration
+
+The term "Endpoints" refers to the AI provider, configuration, or API that you need to set up and integrate with LibreChat. Each endpoint has its own configuration process, which may involve obtaining API keys, credentials, or following specific setup instructions.
+
+The following guides are available to help you configure different endpoints:
+
+- **[OpenAI Configuration Guide](/docs/configuration/pre_configured_ai/openai)**: Learn how to set up and integrate the OpenAI API with LibreChat.
+- **[Google Configuration Guide](/docs/configuration/pre_configured_ai/google)**: Follow the steps to configure the Google AI services for use with LibreChat.
+- **[Anthropic Configuration Guide](/docs/configuration/pre_configured_ai/anthropic)**: Discover how to integrate the Anthropic AI models with LibreChat.
+- **[Assistants Configuration Guide](/docs/configuration/pre_configured_ai/assistants)**: Explore how to enable and configure OpenAI's Assistants with LibreChat.
+
+## Custom Endpoint Configuration
+
+The **[librechat.yaml Configuration Guides](/docs/configuration/librechat_yaml)** provides detailed instructions on how to configure custom endpoints within LibreChat.
+
+In addition to the pre-configured endpoints, the librechat config file allows you to add and configure custom endpoints. This includes integrating with AI providers like Ollama, Mistral AI, Openrouter, and a multitude of other third-party services.
+
+By following these configuration guides, you can seamlessly integrate various AI providers, unlock their capabilities, and enhance your LibreChat experience with the power of multiple AI models and services.
\ No newline at end of file
diff --git a/pages/docs/configuration/pre_configured_ai/openai.mdx b/pages/docs/configuration/pre_configured_ai/openai.mdx
new file mode 100644
index 0000000..ac8ef72
--- /dev/null
+++ b/pages/docs/configuration/pre_configured_ai/openai.mdx
@@ -0,0 +1,24 @@
+# OpenAI
+
+To get your OpenAI API key, you need to:
+
+- Go to **[https://platform.openai.com/account/api-keys](https://platform.openai.com/account/api-keys)**
+- Create an account or log in with your existing one
+- Add a payment method to your account
+- Go to https://platform.openai.com/api-keys to get a key.
+- You will need to set the following environment variable to your key or you can set it to `user_provided` for users to provide their own.
+
+```bash filename=".env"
+OPENAI_API_KEY=user_provided
+```
+
+- You can determine which models you would like to have available with `OPENAI_MODELS`; otherwise, the models list fetched from OpenAI will be used
+
+```bash filename=".env"
+OPENAI_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-0301,gpt-3.5-turbo,gpt-4,gpt-4-0613,gpt-4-vision-preview,gpt-3.5-turbo-0613,gpt-3.5-turbo-16k-0613,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview,gpt-3.5-turbo-1106,gpt-3.5-turbo-instruct,gpt-3.5-turbo-instruct-0914,gpt-3.5-turbo-16k
+```
+
+**Notes:**
+
+- Selecting a vision model for messages with attachments is not necessary as it will be switched behind the scenes for you. If you didn't outright select a vision model, it will only be used for the vision request and you should still see the non-vision model you had selected after the request is successful
+- OpenAI Vision models allow for messages without attachments
\ No newline at end of file
diff --git a/pages/docs/configuration/rag_api.mdx b/pages/docs/configuration/rag_api.mdx
new file mode 100644
index 0000000..e2f943d
--- /dev/null
+++ b/pages/docs/configuration/rag_api.mdx
@@ -0,0 +1,101 @@
+---
+title: RAG API
+description: Configure Retrieval-Augmented Generation (RAG) API for document indexing and retrieval using Langchain and FastAPI. This API integrates with LibreChat to provide context-aware responses based on user-uploaded files.
+---
+
+# RAG API Configuration
+
+**For further details, refer to the user guide provided here: [RAG API Presentation](/docs/user_guides/rag_api)**
+
+---
+
+**Currently, this feature is available to all Custom Endpoints, OpenAI, Azure OpenAi, Anthropic, and Google.**
+
+OpenAI Assistants have their own implementation of RAG through the "Retrieval" capability. Learn more about it [here.](https://platform.openai.com/docs/assistants/tools/knowledge-retrieval)
+
+It will still be useful to implement usage of the RAG API with the Assistants API since OpenAI charges for both file storage, and use of "Retrieval," and will be introduced in a future update.
+
+Plugins support is not enabled as the whole "plugin/tool" framework will get a complete rework soon, making tools available to most endpoints (ETA Summer 2024).
+
+**Still confused about RAG?** [Read the RAG API Presentation](/docs/user_guides/rag_api#what-is-rag) explaining the general concept in more detail with a link to a helpful video.
+
+## Setup
+
+To set up the RAG API with LibreChat, follow these steps:
+
+### Docker Setup
+
+For Docker, the setup is configured for you in both the default `docker-compose.yml` and `deploy-compose.yml` files, and you will just need to make sure you are using the latest docker image and compose files. Make sure to read the [Updating LibreChat guide for Docker](../install/installation/docker_compose_install.md#updating-librechat) if you are unsure how to update your Docker instance.
+
+Docker uses the "lite" image of the RAG API by default, which only supports remote embeddings, leveraging embeddings proccesses from OpenAI or a remote service you have configured for HuggingFace/Ollama.
+
+Local embeddings are supported by changing the image used by the default compose file, from `ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest` to `ghcr.io/danny-avila/librechat-rag-api-dev:latest`.
+
+As always, make these changes in your update URLs [Docker Compose Override File](/docs/configuration/docker_override). You can find an example for exactly how to change the image in `docker-compose.override.yml.example` at the root of the project.
+
+If you wish to see an example of a compose file that only includes the PostgresQL + PGVector database and the Python API, see `rag.yml` file at the root of the project.
+
+**Important:** When using the default docker setup, the .env file, where configuration options can be set for the RAG API, is shared between LibreChat and the RAG API.
+
+### Local Setup
+
+Local, non-container setup is more hands-on, and for this you can refer to the [RAG API repo.](https://github.com/danny-avila/rag_api/)
+
+In a local setup, you will need to manually set the `RAG_API_URL` in your LibreChat `.env` file to where it's available from your setup.
+
+This contrasts Docker, where is already set in the default `docker-compose.yml` file.
+
+## Configuration
+
+The RAG API provides several configuration options that can be set using environment variables from an `.env` file accessible to the API. Most of them are optional, asides from the credentials/paths necessary for the provider you configured. In the default setup, only `RAG_OPENAI_API_KEY` is required.
+
+
+When using the default docker setup, the .env file is shared between LibreChat and the RAG API. For this reason, it's important to define the needed variables shown in the [RAG API readme.md](https://github.com/danny-avila/rag_api/blob/main/README.md)
+
+
+Here are some notable configurations:
+
+- `RAG_OPENAI_API_KEY`: The API key for OpenAI API Embeddings (if using default settings).
+ - Note: `OPENAI_API_KEY` will work but `RAG_OPENAI_API_KEY` will override it in order to not conflict with the LibreChat credential.
+- `RAG_PORT`: The port number where the API server will run. Defaults to port 8000.
+- `RAG_HOST`: The hostname or IP address where the API server will run. Defaults to "0.0.0.0"
+- `COLLECTION_NAME`: The name of the collection in the vector store. Default is "testcollection".
+- `CHUNK_SIZE`: The size of the chunks for text processing. Default is "1500".
+- `CHUNK_OVERLAP`: The overlap between chunks during text processing. Default is "100".
+- `EMBEDDINGS_PROVIDER`: The embeddings provider to use. Options are "openai", "azure", "huggingface", "huggingfacetei", or "ollama". Default is "openai".
+- `EMBEDDINGS_MODEL`: The specific embeddings model to use from the configured provider. Default is dependent on the provider; for "openai", the model is "text-embedding-3-small".
+
+There are several more configuration options.
+
+For a complete list and their descriptions, please refer to the [RAG API repo.](https://github.com/danny-avila/rag_api/)
+
+## Usage
+
+Once the RAG API is set up and running, it seamlessly integrates with LibreChat. When a user uploads files to a conversation, the RAG API indexes those files and uses them to provide context-aware responses.
+
+**To utilize the RAG API effectively:**
+
+1. Ensure that the necessary files are uploaded to the conversation in LibreChat. If `RAG_API_URL` is not configured, or is not reachable, the file upload will fail.
+2. As the user interacts with the chatbot, the RAG API will automatically retrieve relevant information from the indexed files based on the user's input.
+3. The retrieved information will be used to augment the user's prompt, enabling LibreChat to generate more accurate and contextually relevant responses.
+4. Craft your prompts carefully when you attach files as the default behavior is to query the vector store upon every new message to a conversation with a file attached.
+ - You can disable the default behavior by toggling the "Resend Files" option to an "off" state, found in the conversation settings.
+ - Doing so allows for targeted file queries, making it so that the "retrieval" will only be done when files are explicitly attached to a message.
+ - 
+5. You only have to upload a file once to use it multiple times for RAG.
+ - You can attach uploaded/indexed files to any new message or conversation using the Side Panel:
+ - 
+ - Note: The files must be in the "Host" storage, as "OpenAI" files are treated differently and exclusive to Assistants. In other words, they must not have been uploaded when the Assistants endpoint was selected and active. You can view and manage your files by clicking here from the Side Panel.
+ - 
+
+
+## Troubleshooting
+
+If you encounter any issues while setting up or using the RAG API, consider the following:
+
+- Double-check that all the required environment variables are correctly set in your `.env` file.
+- Ensure that the vector database is properly configured and accessible.
+- Verify that the OpenAI API key or other necessary credentials are valid.
+- Check both the LibreChat and RAG API logs for any error messages or warnings.
+
+If the problem persists, please refer to the RAG API documentation or seek assistance from the LibreChat community on GitHub Discussions or Discord.
diff --git a/pages/docs/configuration/token_usage.mdx b/pages/docs/configuration/token_usage.mdx
new file mode 100644
index 0000000..0b91b3a
--- /dev/null
+++ b/pages/docs/configuration/token_usage.mdx
@@ -0,0 +1,104 @@
+---
+title: Token Usage
+description: This covers how to track and control your token usage for the OpenAI/Plugins endpoints in LibreChat. You will learn how to view your transactions, enable user balances, and add credits to your account.
+---
+# Token Usage
+
+As of `v6.0.0`, LibreChat accurately tracks token usage for the OpenAI/Plugins endpoints.
+This can be viewed in your database's "Transactions" collection.
+
+In the future, you will be able to toggle viewing how much a conversation has cost you.
+
+Currently, you can limit user token usage by enabling user balances. To enables token credit limiting for the OpenAI/Plugins endpoints, set the following .env variable:
+
+
+
+
+You manually add user balance, or you will need to build out a balance-accruing system for users. This may come as a feature to the app whenever an admin dashboard is introduced.
+
+```bash filename="To manually add balances, run the following command (npm required):"
+npm run add-balance
+```
+
+```bash filename="You can also specify the email and token credit amount to add, e.g.:"
+npm run add-balance danny@librechat.ai 1000
+```
+
+This works well to track your own usage for personal use; 1000 credits = $0.001 (1 mill USD)
+
+## Listing of balances
+
+```bash filename="To see the balances of your users, you can run:"
+npm run list-balances
+```
+
+## Notes
+
+- With summarization enabled, you will be blocked from making an API request if the cost of the content that you need to summarize + your messages payload exceeds the current balance
+- Counting Prompt tokens is really accurate for OpenAI calls, but not 100% for plugins (due to function calling). It is really close and conservative, meaning its count may be higher by 2-5 tokens.
+- The system allows deficits incurred by the completion tokens. It only checks if you have enough for the prompt Tokens, and is pretty lenient with the completion. The graph below details the logic
+- The above said, plugins are checked at each generation step, since the process works with multiple API calls. Anything the LLM has generated since the initial user prompt is shared to the user in the error message as seen below.
+- There is a 150 token buffer for titling since this is a 2 step process, that averages around 200 total tokens. In the case of insufficient funds, the titling is cancelled before any spend happens and no error is thrown.
+
+
+
+## More details
+source: [LibreChat/discussions/1640](https://github.com/danny-avila/LibreChat/discussions/1640#discussioncomment-8251970)
+
+> "rawAmount": -000, // what's this?
+
+Raw amount of tokens as counted per the tokenizer algorithm.
+
+> "tokenValue": -00000, // what's this?
+
+Token credits value. 1000 credits = $0.001 (1 mill USD)
+
+> "rate": 00, // what's this?
+
+The rate at which tokens are charged as credits.
+
+For example, gpt-3.5-turbo-1106 has a rate of 1 for user prompt (input) and 2 for completion (output)
+
+| Model | Input | Output |
+|-----------------------|----------------------|----------------------|
+| gpt-3.5-turbo-1106 | $0.0010 / 1K tokens | $0.0020 / 1K tokens |
+
+
+Given the provided example:
+```sh
+ "rawAmount": -137
+ "tokenValue": -205.5
+ "rate": 1.5
+```
+
+```math
+\text{Token Value} = (\text{Raw Amount of Tokens}) \times (\text{Rate})
+```
+
+```math
+137 \times 1.5 = 205.5
+```
+
+And to get the real amount of USD spend based on **Token Value**:
+
+```math
+\frac{\text{Token Value}}{1,000,000} = \left(\frac{\text{Raw Amount of Tokens} \times \text{Rate}}{1,000,000}\right)
+```
+
+```math
+\frac{205.5}{1,000,000} = \$0.0002055 \text{ USD}
+```
+
+The relevant file for editing rates is found in `api/models/tx.js`
+
+There will be more customization for this soon from the `librechat.yaml` file.
+
+## Preview
+
+
+
+
\ No newline at end of file
diff --git a/pages/docs/configuration/tools/_meta.ts b/pages/docs/configuration/tools/_meta.ts
new file mode 100644
index 0000000..62aacc4
--- /dev/null
+++ b/pages/docs/configuration/tools/_meta.ts
@@ -0,0 +1,3 @@
+export default {
+ index: 'Intro',
+}
diff --git a/pages/docs/configuration/tools/azure_ai_search.mdx b/pages/docs/configuration/tools/azure_ai_search.mdx
new file mode 100644
index 0000000..2059f9e
--- /dev/null
+++ b/pages/docs/configuration/tools/azure_ai_search.mdx
@@ -0,0 +1,143 @@
+---
+title: Azure AI Search
+description: How to configure Azure AI Search for answers to your questions with assistance from GPT.
+---
+# Azure AI Search Plugin
+Through the plugins endpoint, you can use Azure AI Search for answers to your questions with assistance from GPT.
+
+## Configurations
+
+### Required
+
+To get started, you need to get a Azure AI Search endpoint URL, index name, and a API Key. You can then define these as follows in your `.env` file:
+
+```env
+AZURE_AI_SEARCH_SERVICE_ENDPOINT="..."
+AZURE_AI_SEARCH_INDEX_NAME="..."
+AZURE_AI_SEARCH_API_KEY="..."
+```
+Or you need to get an Azure AI Search endpoint URL, index name, and an API Key. You can define them during the installation of the plugin.
+
+### AZURE_AI_SEARCH_SERVICE_ENDPOINT
+
+This is the URL of the search endpoint. It can be obtained from the top page of the search service in the Cognitive Search management console (e.g., `https://example.search.windows.net`).
+
+### AZURE_AI_SEARCH_INDEX_NAME
+
+This is the name of the index to be searched (e.g., `hotels-sample-index`).
+
+### AZURE_AI_SEARCH_API_KEY
+
+This is the authentication key to use when utilizing the search endpoint. Please issue it from the management console. Use the Value, not the name of the authentication key.
+
+# Introduction to tutorial
+
+## Create or log in to your account on Azure Portal
+
+**1.** Visit **[https://azure.microsoft.com/en-us/](https://azure.microsoft.com/en-us/)** and click on `Get started` or `Try Azure for Free` to create an account and sign in.
+
+**2.** Choose pay per use or Azure Free with $200.
+
+
+
+## Create the Azure AI Search service
+
+**1.** Access your control panel.
+
+**2.** Click on `Create a resource`.
+
+
+
+**3.** Search for `Azure Search` in the bar and press enter.
+
+
+
+**4.** Now, click on `Create`.
+
+**5.** Configure the basics settings, create a new or select an existing Resource Group, name the Service Name with a name of your preference, and then select the location.
+
+
+
+**6.** Click on `Change Pricing Tier`.
+
+
+
+Now select the free option or select your preferred option (may incur charges).
+
+
+
+**7.** Click on `Review + create` and wait for the resource to be created.
+
+
+
+## Create your index
+
+**1.** Click on `Import data`.
+
+
+
+**2.** Follow the Microsoft tutorial: **[https://learn.microsoft.com/en-us/azure/search/search-get-started-portal](https://learn.microsoft.com/en-us/azure/search/search-get-started-portal)**, after finishing, save the name given to the index somewhere.
+
+**3.** Now you have your `AZURE_AI_SEARCH_INDEX_NAME`, copy and save it in a local safe place.
+
+## Get the Endpoint
+
+**1.** In the `Url:` you have your `AZURE_AI_SEARCH_SERVICE_ENDPOINT`, copy and save it in a local safe place.
+
+
+
+**2.** On the left panel, click on `keys`.
+
+
+
+**3.** Click on `Add` and insert a name for your key.
+
+**4.** Copy the key to get `AZURE_AI_SEARCH_API_KEY`.
+
+
+
+# Configure in LibreChat:
+
+**1.** Access the Plugins and click to install Azure AI Search.
+
+
+
+**2.** Fill in the Endpoint, Index Name, and API Key, and click on `Save`.
+
+# Conclusion
+
+
+
+Now, you will be able to conduct searches using Azure AI Search. Congratulations! 🎉🎉
+
+## Optional
+
+The following are configuration values that are not required but can be specified as parameters during a search.
+
+If there are concerns that the search result data may be too large and exceed the prompt size, consider reducing the size of the search result data by using AZURE_AI_SEARCH_SEARCH_OPTION_TOP and AZURE_AI_SEARCH_SEARCH_OPTION_SELECT.
+
+For details on each parameter, please refer to the following document:
+**[https://learn.microsoft.com/en-us/rest/api/searchservice/search-documents](https://learn.microsoft.com/en-us/rest/api/searchservice/search-documents)**
+
+```env
+AZURE_AI_SEARCH_API_VERSION=2023-10-01-Preview
+AZURE_AI_SEARCH_SEARCH_OPTION_QUERY_TYPE=simple
+AZURE_AI_SEARCH_SEARCH_OPTION_TOP=3
+AZURE_AI_SEARCH_SEARCH_OPTION_SELECT=field1, field2, field3
+```
+
+#### AZURE_AI_SEARCH_API_VERSION
+
+Specify the version of the search API. When using new features such as semantic search or vector search, you may need to specify the preview version. The default value is `2023-11-1`.
+
+#### AZURE_AI_SEARCH_SEARCH_OPTION_QUERY_TYPE
+
+Specify `simple` or `full`. The default value is `simple`.
+
+#### AZURE_AI_SEARCH_SEARCH_OPTION_TOP
+
+Specify the number of items to search for. The default value is 5.
+
+#### AZURE_AI_SEARCH_SEARCH_OPTION_SELECT
+
+Specify the fields of the index to be retrieved, separated by commas. Please note that these are not the fields to be searched.
diff --git a/pages/docs/configuration/tools/google_search.mdx b/pages/docs/configuration/tools/google_search.mdx
new file mode 100644
index 0000000..5185c39
--- /dev/null
+++ b/pages/docs/configuration/tools/google_search.mdx
@@ -0,0 +1,65 @@
+---
+title: Google Search
+description: How to set up and use the Google Search Plugin, which allows you to query Google with GPT's help.
+---
+
+# Google Search Plugin
+Through the plugins endpoint, you can use google search for answers to your questions with assistance from GPT! To get started, you need to get a Google Custom Search API key, and a Google Custom Search Engine ID. You can then define these as follows in your `.env` file:
+```env
+GOOGLE_SEARCH_API_KEY="...."
+GOOGLE_CSE_ID="...."
+```
+
+You first need to create a programmable search engine and get the search engine ID: **[https://developers.google.com/custom-search/docs/tutorial/creatingcse](https://developers.google.com/custom-search/docs/tutorial/creatingcse)**
+
+Then you can get the API key, click the "Get a key" button on this page: **[https://developers.google.com/custom-search/v1/introduction](https://developers.google.com/custom-search/v1/introduction)**
+
+### 1\. Go to the [Programmable Search Engine docs](https://developers.google.com/custom-search/docs/tutorial/creatingcse) to get a Search engine ID
+
+
+
+### 2\. Click on "Control Panel" under "Defining a Programmable Engine in Control Panel"
+
+
+Click to sign in(make a Google acct if you do not have one):
+
+
+
+
+### 3\. Register yourself a new account/Login to the Control Panel
+
+
+After logging in, you will be redirected to the Control Panel to create a new search engine:
+
+
+
+
+### 4\. Create a new search engine
+
+
+Fill in a name, select to "Search the entire web" and hit "Create":
+
+
+
+
+### 5\. Copy your Search engine ID to your .env file
+
+
+
+
+### 6\. Go to [custom-search docs](https://developers.google.com/custom-search/v1/introduction) to get a Google search API key
+
+
+### 7\. Click "Get a Key":
+
+
+
+
+### 8\. Name your project and agree to the Terms of Service
+
+
+
+
+### 9\. Copy your Google search API key to your .env file
+
+
diff --git a/pages/docs/configuration/tools/index.mdx b/pages/docs/configuration/tools/index.mdx
new file mode 100644
index 0000000..de4347c
--- /dev/null
+++ b/pages/docs/configuration/tools/index.mdx
@@ -0,0 +1,43 @@
+---
+title: Tools and Plugins
+description: Tools and Plugins setup instructions
+---
+
+# Tools and Plugins
+
+**Note:** A new approach has been devised to revamp the handling of tools and plugins from scratch. The plan is to prioritize implementation for Assistants initially, followed by creating a new agent system that seamlessly integrates with various endpoints such as Anthropic, Google, and others.
+
+## Setup Instructions:
+
+### Azure AI Search
+- [Azure AI Search](/docs/configuration/tools/azure_ai_search)
+
+### Google Search
+- [Google Search](/docs/configuration/tools/google_search)
+
+### Stable Diffusion
+- [Stable Diffusion](/docs/configuration/tools/stable_diffusion)
+
+### Wolfram|Alpha
+- [Wolfram|Alpha](/docs/configuration/tools/wolfram)
+
+### DALL-E
+- You just need an OpenAI key, and it's made distinct from your main API key to make Chats but it can be the same one
+
+### Zapier
+- You need a Zapier account. Get your **[API key from here](https://nla.zapier.com/credentials/)** after you've made an account
+ - Create allowed actions - Follow step 3 in this **[Start Here guide](https://nla.zapier.com/start/)** from Zapier
+ - ⚠️ NOTE: zapier is known to be finicky with certain actions. I found that writing email drafts is probably the best use of it
+
+### Browser/Scraper
+- This is not to be confused with 'browsing' on chat.openai.com (which is technically a plugin suite or multiple plugins)
+ - This plugin uses OpenAI embeddings so an OpenAI key is necessary, similar to DALL-E, and it's made distinct from your main API key to make Chats but it can be the same one
+ - This plugin will simply scrape html, and will not work with dynamic Javascript pages as that would require a more involved solution
+ - A better solution for 'browsing' is planned but can't guarantuee when
+ - This plugin is best used in combination with google so it doesn't hallucinate webpages to visit
+
+### SerpAPI
+- An alternative to Google search but not as performant in my opinion
+ - You can get an API key here: **[https://serpapi.com/dashboard](https://serpapi.com/dashboard)**
+ - For free tier, you are limited to 100 queries/month
+ - With google, you are limited to 100/day for free, which is a better deal, and any after may cost you a few pennies
diff --git a/pages/docs/configuration/tools/stable_diffusion.mdx b/pages/docs/configuration/tools/stable_diffusion.mdx
new file mode 100644
index 0000000..7dd9bd8
--- /dev/null
+++ b/pages/docs/configuration/tools/stable_diffusion.mdx
@@ -0,0 +1,76 @@
+---
+title: Stable Diffusion
+description: How to set up and configure the Stable Diffusion plugin
+---
+
+# Stable Diffusion Plugin
+
+To use Stable Diffusion with this project, you will either need to download and install **[AUTOMATIC1111 - Stable Diffusion WebUI](https://github.com/AUTOMATIC1111/stable-diffusion-webui)** or, for a dockerized deployment, you can also use **[stable-diffusion-webui-docker](https://github.com/AbdBarho/stable-diffusion-webui-docker)**
+
+With the docker deployment you can skip step 2 and step 3, use the setup instructions from their repository instead.
+
+- Note: you need a compatible GPU ("CPU-only" is possible but very slow). Nvidia is recommended, but there is no clear resource on incompatible GPUs. Any decent GPU should work.
+
+### 1. Follow download and installation instructions from **[stable-diffusion-webui readme](https://github.com/AUTOMATIC1111/stable-diffusion-webui)**
+
+### 2. Edit your run script settings
+
+#### Windows
+
+ - Edit your **webui-user.bat** file by adding the following line before the call command:
+- `set COMMANDLINE_ARGS=--api`
+
+ - Your .bat file should like this with all other settings default
+ ```shell
+ @echo off
+
+ set PYTHON=
+ set GIT=
+ set VENV_DIR=
+ set COMMANDLINE_ARGS=--api
+
+ call webui.bat
+ ```
+#### Others (not tested but should work)
+
+ - Edit your **webui-user.sh** file by adding the following line:
+ - `export COMMANDLINE_ARGS="--api"`
+
+ - Your .sh file should like this with all other settings default
+ ```bash
+
+ export COMMANDLINE_ARGS="--api"
+
+ #!/bin/bash
+ #########################################################
+ # Uncomment and change the variables below to your need:#
+ #########################################################
+
+ # ...rest
+ ```
+
+### 3. Run Stable Diffusion (either .sh or .bat file according to your operating system)
+
+### 4. In the app, select the plugins endpoint, open the plugins store, and install Stable Diffusion
+> **Note: The default port for Gradio is `7860`. If you changed it, please update the value accordingly.**
+
+#### Docker Install
+- Use `SD_WEBUI_URL=http://host.docker.internal:7860` in the `.env` file
+- Or `http://host.docker.internal:7860` from the webui
+
+#### Local Install
+- Use `SD_WEBUI_URL=http://127.0.0.1:7860` in the `.env` file
+- Or `http://127.0.0.1:7860` from the webui
+
+
+#### Select the plugins endpoint
+
+
+
+#### Open the Plugin store and Install Stable Diffusion
+
+
+
+
+### 5. Select the plugin and enjoy!
+
diff --git a/pages/docs/configuration/tools/wolfram.mdx b/pages/docs/configuration/tools/wolfram.mdx
new file mode 100644
index 0000000..ccddcde
--- /dev/null
+++ b/pages/docs/configuration/tools/wolfram.mdx
@@ -0,0 +1,31 @@
+---
+title: Wolfram|Alpha
+description: How to set up and configure the Wolfram Alpha plugin
+---
+
+# Wolfram Alpha Plugin
+
+An AppID must be supplied in all calls to the Wolfram|Alpha API.
+
+- Note: Wolfram API calls are limited to 100 calls/day and 2000/month for regular users.
+
+### Make an account
+- Visit: **[products.wolframalpha.com/api/](https://products.wolframalpha.com/api/)** to create your account
+
+### Get your AppID
+- Go to the **[Developer Portal](https://developer.wolframalpha.com/portal/myapps/)** click on `Get an AppID`.
+
+### Configure it in LibreChat
+- Select the plugins endpoint
+
+- Open the Plugin store
+
+- Install Wolfram and Provide your AppID
+
+
+> Alternatively: you (the admin) can set the value in `\.env` to bypass the prompt: `WOLFRAM_APP_ID=your_app_id`
+
+
+### Select the plugin and enjoy!
+
+
diff --git a/pages/docs/development/_meta.ts b/pages/docs/development/_meta.ts
new file mode 100644
index 0000000..f2feef0
--- /dev/null
+++ b/pages/docs/development/_meta.ts
@@ -0,0 +1,26 @@
+export default {
+ index: 'Intro',
+ get_started: 'Get Started',
+ translation: 'Translation',
+ tools_and_plugins: 'Tools and Plugins',
+ testing: 'Testing',
+ debugging: 'Debugging (WIP)',
+ technical_docs: {
+ // "title": "Contributing",
+ type: 'separator',
+ },
+ architecture: 'Project Architecture (WIP)',
+ guidelines: {
+ type: 'page',
+ title: 'Contributor Guidelines',
+ href: 'https://github.com/danny-avila/LibreChat/blob/main/.github/CONTRIBUTING.md',
+ newWindow: true,
+ },
+ conventions: 'Coding Conventions',
+ security: {
+ type: 'page',
+ title: 'Security Policy',
+ href: 'https://github.com/danny-avila/LibreChat/blob/main/.github/SECURITY.md',
+ newWindow: true,
+ },
+}
diff --git a/pages/docs/development/architecture.mdx b/pages/docs/development/architecture.mdx
new file mode 100644
index 0000000..b05c5ee
--- /dev/null
+++ b/pages/docs/development/architecture.mdx
@@ -0,0 +1,8 @@
+---
+title: Project Architecture
+description: (WIP) Contributions are welcome
+---
+
+# Project Architecture
+
+
diff --git a/pages/docs/development/conventions.mdx b/pages/docs/development/conventions.mdx
new file mode 100644
index 0000000..f101163
--- /dev/null
+++ b/pages/docs/development/conventions.mdx
@@ -0,0 +1,109 @@
+---
+title: Code Standards and Conventions
+description: This guide covers the best practices for JavaScript coding, such as following the Airbnb Style Guide, using CommonJS modules, structuring the API using Express, Mongoose, and services, and testing and documenting the code using Jest, Supertest, Playwright, JSDoc, and TypeScript.
+---
+
+# Coding Conventions
+
+## Node.js API Server
+
+### General Guidelines
+
+- Follow the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) for general JavaScript coding conventions.
+- Use "clean code" principles, such as keeping functions and modules small, adhering to the single responsibility principle, and writing expressive and readable code.
+- Use meaningful and descriptive variable and function names.
+- Prioritize code readability and maintainability over brevity.
+- Use the provided .eslintrc and .prettierrc files for consistent code formatting.
+- Use CommonJS modules (require/exports) for Node.js modules.
+- Organize and modularize the codebase using separate files for different concerns.
+
+### API Design
+
+- Follow RESTful principles when designing APIs.
+- Use meaningful and descriptive names for routes, controllers, services, and models.
+- Use appropriate HTTP methods (GET, POST, PUT, DELETE) for each route.
+- Use proper status codes and response structures for consistent API responses (ie. 2xx for success, 4xx for bad request from client, 5xx for server error, etc.).
+- Use try-catch blocks to catch and handle exceptions gracefully.
+- Implement proper error handling and consistently return appropriate error responses.
+- Use the logging system included in the `utils` directory to log important events and errors.
+- Do JWT-based, stateless authentication using the `requireJWTAuth` middleware.
+
+### File Structure
+
+_Note: The API is undergoing a refactor to separate out the code for improved separation of concerns, testability, and maintainability. Any new APIs must follow the structure using the auth system as an example, which separates out the routes, controllers, services, and models into separate files._
+
+#### Routes
+
+Specifies each http request method, any middleware to be used, and the controller function to be called for each route.
+
+- Define routes using the Express Router in separate files for each resource or logical grouping.
+- Use descriptive route names and adhere to RESTful conventions.
+- Keep routes concise and focused on a single responsibility.
+- Prefix all routes with the /api namespace.
+
+#### Controllers
+
+Contains the logic for each route, including calling the appropriate service functions and returning the appropriate response status code and JSON body.
+
+- Create a separate controller file for each route to handle the request/response logic.
+- Name controller files using the PascalCase convention and append "Controller" to the file name (e.g., UserController.js).
+- Use controller methods to encapsulate logic related to the route handling.
+- Keep controllers thin by delegating complex operations to service or model files.
+
+#### Services
+
+Contains complex business logic or operations shared across multiple controllers.
+
+- Name service files using the PascalCase convention and append "Service" to the file name (e.g., AuthService.js).
+- Avoid tightly coupling services to specific models or databases for better reusability.
+- Maintain a single responsibility principle within each service.
+
+#### Models
+
+Defines Mongoose models to represent data entities and their relationships.
+
+- Use singular, PascalCase names for model files and their associated collections (e.g., User.js and users collection).
+- Include only the necessary fields, indexes, and validations in the models.
+- Keep models independent of the API layer by avoiding direct references to request/response objects.
+
+### Database Access (MongoDB and Mongoose)
+
+- Use Mongoose ([https://mongoosejs.com](https://mongoosejs.com)) as the MongoDB ODM.
+- Create separate model files for each entity and ensure clear separation of concerns.
+- Use Mongoose schema validation to enforce data integrity.
+- Handle database connections efficiently and avoid connection leaks.
+- Use Mongoose query builders to create concise and readable database queries.
+
+### Testing and Documentation
+
+_Note: the repo currently lacks sufficient automated unit and integration tests for both the client and the API. This is a great first issue for new contributors wanting to familiarize with the codebase._
+
+- Write unit tests for all critical and complex functionalities using Jest.
+- Write integration tests for all API endpoints using Supertest.
+- Write end-to-end tests for all client-side functionalities using Playwright.
+- Use descriptive test case and function names to clearly express the test's purpose.
+- Document the code using JSDoc comments to provide clear explanations of functions, parameters, and return types. (WIP)
+
+---
+
+## React Client
+
+### General TypeScript and React Best Practices
+
+- Use [TypeScript best practices](https://onesignal.com/blog/effective-typescript-for-react-applications/) to benefit from static typing and improved tooling.
+- Group related files together within folders.
+- Name components using the PascalCase convention.
+- Use concise and descriptive names that accurately reflect the component's purpose.
+- Split complex components into smaller, reusable ones when appropriate.
+- Keep the rendering logic within components minimal.
+- Extract reusable parts into separate functions or hooks.
+- Apply prop type definitions using TypeScript types or interfaces.
+- Use form validation where appropriate. (note: we use [React Hook Form](https://react-hook-form.com/) for form validation and submission)
+
+### Data Services
+
+Use the conventions found in the `data-provider` directory for handling data services. For more information, see [this article](https://www.danorlandoblog.com/building-data-services-for-librechat-with-react-query/) which describes the methodology used.
+
+### State Management
+
+Use [Recoil](https://recoiljs.org/) for state management, but _DO NOT pollute the global state with unnecessary data_. Instead, use local state or props for data that is only used within a component or passed down from parent to child.
diff --git a/pages/docs/development/debugging.mdx b/pages/docs/development/debugging.mdx
new file mode 100644
index 0000000..2286717
--- /dev/null
+++ b/pages/docs/development/debugging.mdx
@@ -0,0 +1,10 @@
+---
+title: Debugging
+description: (WIP) Contributions are welcome
+---
+
+# Debugging (WIP)
+
+
+
+see also: [Logging System](/docs/configuration/logging)
\ No newline at end of file
diff --git a/pages/docs/development/get_started.mdx b/pages/docs/development/get_started.mdx
new file mode 100644
index 0000000..89207ca
--- /dev/null
+++ b/pages/docs/development/get_started.mdx
@@ -0,0 +1,185 @@
+---
+title: Getting Started
+description: Learn how to contribute using GitHub Desktop, VS Code extensions, and Git rebase.
+---
+
+# Getting Started for Contributors
+
+## Requirements
+
+- [Git](https://git-scm.com/downloads) (Essential)
+- [Node.js](https://nodejs.org/en/download) (Essential, use the LTS version)
+- [Git LFS](https://git-lfs.com/) (Useful for larger files)
+- [GitHub Desktop](https://desktop.github.com/) (Optional)
+- [VSCode](https://code.visualstudio.com/Download) (Recommended Source-code Editor)
+
+### Recommended VSCode Extensions
+
+Install these extensions in VS Code:
+
+- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
+- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
+- [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
+
+## Prepare the Environment
+
+### GitHub
+
+- Fork the LibreChat repository: [https://github.com/danny-avila/LibreChat/fork](https://github.com/danny-avila/LibreChat/fork)
+
+- Create a branch on your fork, name it properly, and link it to the original repository.
+
+
+ 
+ 
+ 
+
+
+- Download your new branch to your local PC
+
+```sh filename="Download your LibreChat branch"
+git clone -b branch-name https://github.com/username/LibreChat.git
+```
+
+> Replace `branch-name` and `username` with your details
+
+### Open in VS Code
+
+- After cloning your branch:
+ ```sh filename="Navigate to LibreChat folder"
+ cd LibreChat
+ ```
+ ```sh filename="Open in VS Code"
+ code .
+ ```
+
+### Prepare LibreChat
+
+- Open the terminal in VS Code with `ctrl{:kbd}`+`shift{:kbd}`+`` `{:kbd}``
+
+ > Alternatively, use `ctrl{:kbd}`+`j{:kbd}` to open the bottom pane and select the terminal.
+
+- ```sh filename="Install LibreChat dependencies"
+ npm ci
+ ```
+- ```sh filename="Build Frontend"
+ npm run frontend
+ ```
+
+- .env Configuration
+ - Create the `.env` file. If you don't have one, duplicate `.env.example` and configure it.
+
+
+ The default values in `.env.example` are usually fine, except for `MONGO_URI`. Provide your own.
+ Use [MongoDB Community Server](https://www.mongodb.com/try/download/community) or [MongoDB Atlas
+ Cloud](https://www.mongodb.com/cloud/atlas/register).
+
+
+### Development Workflow
+
+For efficient work on LibreChat, use these commands:
+
+- **Starting Backend:**
+
+ - Use `npm run backend` for normal operation.
+ - For active development, use `npm run backend:dev` to monitor changes.
+ - Access at `http://localhost:3080/`.
+
+- **Running Frontend in Development Mode:**
+
+ - **Ensure backend is running.**
+ - Use `npm run frontend:dev` to monitor frontend changes.
+ - View at `http://localhost:3090/`.
+
+
+ - For real-time updates during frontend development, run `npm run frontend:dev` to avoid
+ restarting both frontend and backend on port 3090. - Set `DEBUG_CONSOLE` to true in `.env` for
+ verbose server output in the console.
+
+
+## Local Testing
+
+Before submission, test your updates locally, see: [Perform Tests Locally](/docs/development/testing)
+
+By running tests, ensure your contributions are robust and ready for integration.
+
+## Commit, Push, Pull Request (PR)
+
+### Make a Commit
+
+**Commits** mark logical checkpoints in development. Include clear messages explaining changes.
+
+**Example:**
+
+```bash filename=" "
+git add .
+git commit -m "Add login functionality"
+```
+
+### Push Changes
+
+**Push** changes to the remote repository after completing a feature or fixing an issue.
+
+**Example:**
+
+```bash filename=" "
+git push origin feature-branch-name
+```
+
+### Create a Pull Request (PR)
+
+**Pull Request** merges changes from a feature branch into the main branch.
+
+1. Pull latest changes from main branch and resolve conflicts.
+2. Push updated feature branch.
+3. Ensure code follows project guidelines.
+
+**Example:**
+
+```bash filename=" "
+git checkout main
+git pull origin main
+git checkout feature-branch-name
+git merge main
+# Resolve conflicts if any
+git push origin feature-branch-name
+# Open PR on GitHub
+```
+
+Access your repository in a browser and click "Contribute"
+
+
+
+ Provide a detailed PR description explaining changes and their value. Reference related issues.
+
+
+
+ Use GitHub Desktop to track changes.
+ 
+
+
+
+ If `git commit` fails due to ESLint errors, understand and fix the issue.
+
+
+## Revert Commits Safely
+
+To undo changes in a feature branch, follow these steps cautiously:
+
+- ```bash filename="1. Update local repository from feature branch:"
+ git pull origin feature-branch-name
+ ```
+
+- ```bash filename="2. Review commit history to determine commits to revert:"
+ git log
+ ```
+
+- ```bash filename="3. Start an interactive rebase for 'N' commits to revert:"
+ git rebase -i HEAD~N
+ ```
+
+ > Replace `pick` with `drop` for commits to remove. Save and exit editor.
+
+- ```bash filename="4. Force push changes to remote repository:"
+ git push --force origin feature-branch-name
+ ```
diff --git a/pages/docs/development/index.mdx b/pages/docs/development/index.mdx
new file mode 100644
index 0000000..e2365f0
--- /dev/null
+++ b/pages/docs/development/index.mdx
@@ -0,0 +1,22 @@
+---
+title: Intro
+description: LibreChat's introduction to development
+---
+
+# Introduction
+
+While Docker is our preferred method for installing LibreChat due to its ease of setting up and consistency across different environments, **we strongly recommend using `npm{:hack}` for development purposes.** This recommendation is based on several advantages that npm offers for developers:
+
+- **Faster Iteration:** npm allows for quicker iteration cycles during development. Changes made to the codebase can be immediately reflected without the need to rebuild the entire Docker image, leading to a more efficient development process.
+- **Direct Dependency Management:** Using npm gives developers direct control over the dependencies. It's easier to install, update, or remove packages, and manage project dependencies in real-time, which is crucial for development.
+- **Simplified Debugging:** Debugging is more straightforward with npm, as developers can directly interact with the code and tools without the abstraction layer that Docker introduces. This direct interaction facilitates easier identification and resolution of issues.
+- **Native Environment:** Developing with npm allows the application to run in its native environment on your machine. This can help in catching environment-specific issues early in the development cycle.
+
+
+ - 📚 If you're new to concepts like **repositories**, **pull requests (PRs)**, **forks**, and **branches**, start with the official GitHub documentation:
+ - **[Getting Started - About Collaborative Development Models](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models)**
+ - 👥 Our contributor guidelines can be found at:
+ - **[Contributor Guidelines](https://github.com/danny-avila/LibreChat/blob/main/.github/CONTRIBUTING.md)**
+ - 💻 To learn more about our coding standards see:
+ - **[Coding Conventions](/docs/development/conventions)**
+
diff --git a/pages/docs/development/testing.mdx b/pages/docs/development/testing.mdx
new file mode 100644
index 0000000..25ed7fe
--- /dev/null
+++ b/pages/docs/development/testing.mdx
@@ -0,0 +1,25 @@
+---
+title: Testing During Development
+description: How to locally test the app during development.
+---
+
+# Locally test the app during development
+
+## Local Unit Tests
+
+Before submitting your updates, it's crucial to verify they pass all unit tests. Follow these steps to run tests locally:
+
+- Copy your `.env.example` file in the `/api` folder and rename it to `.env`
+ ```bash filename="create a /api/.env file"
+ cp .env.example ./api/.env
+ ```
+
+- Add `NODE_ENV=CI` to your `/api/.env` file
+- `npm run test:client`
+- `npm run test:api`
+
+
+ When executed locally, this API unit test is expected to fail. This should be the only error
+ encountered.
+ 
+
diff --git a/pages/docs/development/tools_and_plugins.mdx b/pages/docs/development/tools_and_plugins.mdx
new file mode 100644
index 0000000..fd2a9a0
--- /dev/null
+++ b/pages/docs/development/tools_and_plugins.mdx
@@ -0,0 +1,349 @@
+---
+title: Tools and Plugins
+description: This doc shows you how to create custom plugins for LibreChat by extending the LangChain `Tool` class. You will learn how to use different APIs and functions with your plugins, and how to integrate them with the LangChain framework.
+---
+
+# Making your own Tools/Plugins
+
+
+Please refer to the most recents tools used with assistants in `api/app/clients/tools/structured/` since plugins will be deprecated in favor of tools in the near future
+
+
+Creating custom plugins for this project involves extending the `Tool` class from the `langchain/tools` module.
+
+**Note:** I will use the word plugin interchangeably with tool, as the latter is specific to LangChain, and we are mainly conforming to the library.
+
+You are essentially creating DynamicTools in LangChain speak. See the **[LangChainJS docs](https://js.langchain.com/docs/modules/agents/tools/dynamic)** for more info.
+
+This guide will walk you through the process of creating your own custom plugins, using the `StableDiffusionAPI` and `WolframAlphaAPI` tools as examples.
+
+When using the Functions Agent (the default mode for plugins), tools are converted to **[OpenAI functions](https://openai.com/blog/function-calling-and-other-api-updates)**; in any case, plugins/tools are invoked conditionally based on the LLM generating a specific format that we parse.
+
+The most common implementation of a plugin is to make an API call based on the natural language input from the AI, but there is virtually no limit in programmatic use case.
+
+---
+
+
+## Key Takeaways
+
+Here are the key takeaways for creating your own plugin:
+
+**1.** [**Import Required Modules:**](#step-1-import-required-modules) Import the necessary modules for your plugin, including the `Tool` class from `langchain/tools` and any other modules your plugin might need.
+
+**2.** [**Define Your Plugin Class:**](#step-2-define-your-tool-class) Define a class for your plugin that extends the `Tool` class. Set the `name` and `description` properties in the constructor. If your plugin requires credentials or other variables, set them from the fields parameter or from a method that retrieves them from your process environment. Note: if your plugin requires long, detailed instructions, you can add a `description_for_model` property and make `description` more general.
+
+**3.** [**Define Helper Methods:**](#step-3-define-helper-methods) Define helper methods within your class to handle specific tasks if needed.
+
+**4.** [**Implement the `_call` Method:**](#step-4-implement-the-_call-method) Implement the `_call` method where the main functionality of your plugin is defined. This method is called when the language model decides to use your plugin. It should take an `input` parameter and return a result. If an error occurs, the function should return a string representing an error, rather than throwing an error. If your plugin requires multiple inputs from the LLM, read the [StructuredTools](#StructuredTools) section.
+
+**5.** [**Export Your Plugin and Import into handleTools.js:**](#step-5-export-your-plugin-and-import-into-handletoolsjs) Export your plugin and import it into `handleTools.js`. Add your plugin to the `toolConstructors` object in the `loadTools` function. If your plugin requires more advanced initialization, add it to the `customConstructors` object.
+
+**6.** [**Export YourPlugin into index.js:**](#step-6-export-your-plugin-into-indexjs) Export your plugin into `index.js` under `tools`. Add your plugin to the `module.exports` of the `index.js`, so you also need to declare it as `const` in this file.
+
+**7.** [**Add Your Plugin to manifest.json:**]( #step-7-add-your-plugin-to-manifestjson) Add your plugin to `manifest.json`. Follow the strict format for each of the fields of the "plugin" object. If your plugin requires authentication, add those details under `authConfig` as an array. The `pluginKey` should match the class `name` of the Tool class you made, and the `authField` prop must match the process.env variable name.
+
+Remember, the key to creating a custom plugin is to extend the `Tool` class and implement the `_call` method. The `_call` method is where you define what your plugin does. You can also define helper methods and properties in your class to support the functionality of your plugin.
+
+**Note: You can find all the files mentioned in this guide in the `.\api\app\langchain\tools` folder.**
+
+---
+
+## StructuredTools
+
+**Multi-Input Plugins**
+
+If you would like to make a plugin that would benefit from multiple inputs from the LLM, instead of a singular input string as we will review, you need to make a LangChain **[StructuredTool](https://blog.langchain.dev/structured-tools/)** instead. A detailed guide for this is in progress, but for now, you can look at how I've made StructuredTools in this directory: `api\app\clients\tools\structured\`. This guide is foundational to understanding StructuredTools, and it's recommended you continue reading to better understand LangChain tools first. The blog linked above is also helpful once you've read through this guide.
+
+---
+
+## Step 1: Import Required Modules
+
+Start by importing the necessary modules. This will include the `Tool` class from `langchain/tools` and any other modules your tool might need. For example:
+
+```javascript
+const { Tool } = require('langchain/tools');
+// ... whatever else you need
+```
+
+## Step 2: Define Your Tool Class
+
+Next, define a class for your plugin that extends the `Tool` class. The class should have a constructor that calls the `super()` method and sets the `name` and `description` properties. These properties will be used by the language model to determine when to call your tool and with what parameters.
+
+**Important:** you should set credentials/necessary variables from the fields parameter, or alternatively from a method that gets it from your process environment
+```javascript
+class StableDiffusionAPI extends Tool {
+ constructor(fields) {
+ super();
+ this.name = 'stable-diffusion';
+ this.url = fields.SD_WEBUI_URL || this.getServerURL(); // <--- important!
+ this.description = `You can generate images with 'stable-diffusion'. This tool is exclusively for visual content...`;
+ }
+ ...
+}
+```
+
+**Optional:** As of v0.5.8, when using Functions, you can add longer, more detailed instructions, with the `description_for_model` property. When doing so, it's recommended you make the `description` property more generalized to optimize tokens. Each line in this property is prefixed with `// ` to mirror how the prompt is generated for ChatGPT (chat.openai.com). This format more closely aligns to the prompt engineering of official ChatGPT plugins.
+
+```js
+// ...
+ this.description_for_model = `// Generate images and visuals using text with 'stable-diffusion'.
+// Guidelines:
+// - ALWAYS use {{"prompt": "7+ detailed keywords", "negative_prompt": "7+ detailed keywords"}} structure for queries.
+// - Visually describe the moods, details, structures, styles, and/or proportions of the image. Remember, the focus is on visual attributes.
+// - Craft your input by "showing" and not "telling" the imagery. Think in terms of what you'd want to see in a photograph or a painting.
+// - Here's an example for generating a realistic portrait photo of a man:
+// "prompt":"photo of a man in black clothes, half body, high detailed skin, coastline, overcast weather, wind, waves, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3"
+// "negative_prompt":"semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, out of frame, low quality, ugly, mutation, deformed"
+// - Generate images only once per human query unless explicitly requested by the user`;
+ this.description = 'You can generate images using text with \'stable-diffusion\'. This tool is exclusively for visual content.';
+// ...
+```
+
+Within the constructor, note that we're getting a sensitive variable from either the fields object or from the **getServerURL** method we define to access an environment variable.
+
+```js
+this.url = fields.SD_WEBUI_URL || this.getServerURL();
+```
+
+Any credentials necessary are passed through `fields` when the user provides it from the frontend; otherwise, the admin can "authorize" the plugin for all users through environment variables. All credentials passed from the frontend are encrypted.
+
+```js
+// It's recommended you follow this convention when accessing environment variables.
+ getServerURL() {
+ const url = process.env.SD_WEBUI_URL || '';
+ if (!url) {
+ throw new Error('Missing SD_WEBUI_URL environment variable.');
+ }
+ return url;
+ }
+```
+
+## Step 3: Define Helper Methods
+
+You can define helper methods within your class to handle specific tasks if needed. For example, the `StableDiffusionAPI` class includes methods like `replaceNewLinesWithSpaces`, `getMarkdownImageUrl`, and `getServerURL` to handle various tasks.
+
+```javascript
+class StableDiffusionAPI extends Tool {
+ ...
+ replaceNewLinesWithSpaces(inputString) {
+ return inputString.replace(/\r\n|\r|\n/g, ' ');
+ }
+ ...
+}
+```
+
+## Step 4: Implement the `_call` Method
+
+The `_call` method is where the main functionality of your plugin is implemented. This method is called when the language model decides to use your plugin. It should take an `input` parameter and return a result.
+
+> In a basic Tool, the LLM will generate one string value as an input. If your plugin requires multiple inputs from the LLM, read the **[StructuredTools](#StructuredTools)** section.
+
+```javascript
+class StableDiffusionAPI extends Tool {
+ ...
+ async _call(input) {
+ // Your tool's functionality goes here
+ ...
+ return this.result;
+ }
+}
+```
+
+**Important:** The _call function is what will the agent will actually call. When an error occurs, the function should, when possible, return a string representing an error, rather than throwing an error. This allows the error to be passed to the LLM and the LLM can decide how to handle it. If an error is thrown, then execution of the agent will stop.
+
+## Step 5: Export Your Plugin and import into handleTools.js
+
+
+**This process will be somewhat automated in the future, as long as you have your plugin/tool in api\app\langchain\tools**
+
+```javascript
+// Export
+module.exports = StableDiffusionAPI;
+```
+
+```js
+/* api\app\langchain\tools\handleTools.js */
+const StableDiffusionAPI = require('./StableDiffusion');
+...
+```
+
+In handleTools.js, find the beginning of the `loadTools` function and add your plugin/tool to the toolConstructors object.
+
+```js
+const loadTools = async ({ user, model, tools = [], options = {} }) => {
+ const toolConstructors = {
+ calculator: Calculator,
+ google: GoogleSearchAPI,
+ wolfram: WolframAlphaAPI,
+ 'dall-e': OpenAICreateImage,
+ 'stable-diffusion': StableDiffusionAPI // <----- Newly Added. Note: the key is the 'name' provided in the class.
+ // We will now refer to this name as the `pluginKey`
+ };
+```
+
+If your Tool class requires more advanced initialization, you would add it to the customConstructors object.
+
+The default initialization can be seen in the `loadToolWithAuth` function, and most custom plugins should be initialized this way.
+
+Here are a few customConstructors, which have varying initializations
+
+```javascript
+ const customConstructors = {
+ browser: async () => {
+ let openAIApiKey = process.env.OPENAI_API_KEY;
+ if (!openAIApiKey) {
+ openAIApiKey = await getUserPluginAuthValue(user, 'OPENAI_API_KEY');
+ }
+ return new WebBrowser({ model, embeddings: new OpenAIEmbeddings({ openAIApiKey }) });
+ },
+ // ...
+ plugins: async () => {
+ return [
+ new HttpRequestTool(),
+ await AIPluginTool.fromPluginUrl(
+ "https://www.klarna.com/.well-known/ai-plugin.json", new ChatOpenAI({ openAIApiKey: options.openAIApiKey, temperature: 0 })
+ ),
+ ]
+ }
+ };
+```
+
+## Step 6: Export your Plugin into index.js
+
+Find the `index.js` under `api/app/clients/tools`. You need to put your plugin into the `module.exports`, to make it compile, you will also need to declare your plugin as `consts`:
+
+```js
+const StructuredSD = require('./structured/StableDiffusion');
+const StableDiffusionAPI = require('./StableDiffusion');
+...
+module.exports = {
+ ...
+ StableDiffusionAPI,
+ StructuredSD,
+ ...
+}
+```
+
+## Step 7: Add your Plugin to manifest.json
+
+**This process will be somehwat automated in the future along with step 5, as long as you have your plugin/tool in api\app\langchain\tools, and your plugin can be initialized with the default method**
+
+```json
+ {
+ "name": "Calculator",
+ "pluginKey": "calculator",
+ "description": "Perform simple and complex mathematical calculations.",
+ "icon": "https://i.imgur.com/RHsSG5h.png",
+ "isAuthRequired": "false",
+ "authConfig": []
+ },
+ {
+ "name": "Stable Diffusion",
+ "pluginKey": "stable-diffusion",
+ "description": "Generate photo-realistic images given any text input.",
+ "icon": "https://i.imgur.com/Yr466dp.png",
+ "authConfig": [
+ {
+ "authField": "SD_WEBUI_URL",
+ "label": "Your Stable Diffusion WebUI API URL",
+ "description": "You need to provide the URL of your Stable Diffusion WebUI API. For instructions on how to obtain this, see Our Docs."
+ }
+ ]
+ },
+```
+
+Each of the fields of the "plugin" object are important. Follow this format strictly. If your plugin requires authentication, you will add those details under `authConfig` as an array since there could be multiple authentication variables. See the Calculator plugin for an example of one that doesn't require authentication, where the authConfig is an empty array (an array is always required).
+
+**Note:** as mentioned earlier, the `pluginKey` matches the class `name` of the Tool class you made.
+**Note:** the `authField` prop must match the process.env variable name
+
+Here is an example of a plugin with more than one credential variable
+
+```json
+ [
+ {
+ "name": "Google",
+ "pluginKey": "google",
+ "description": "Use Google Search to find information about the weather, news, sports, and more.",
+ "icon": "https://i.imgur.com/SMmVkNB.png",
+ "authConfig": [
+ {
+ "authField": "GOOGLE_CSE_ID",
+ "label": "Google CSE ID",
+ "description": "This is your Google Custom Search Engine ID. For instructions on how to obtain this, see Our Docs."
+ },
+ {
+ "authField": "GOOGLE_SEARCH_API_KEY",
+ "label": "Google API Key",
+ "description": "This is your Google Custom Search API Key. For instructions on how to obtain this, see Our Docs."
+ }
+ ]
+ },
+```
+
+## Example: WolframAlphaAPI Tool
+
+Here's another example of a custom tool, the `WolframAlphaAPI` tool. This tool uses the `axios` module to make HTTP requests to the Wolfram Alpha API.
+
+```javascript
+const axios = require('axios');
+const { Tool } = require('langchain/tools');
+
+class WolframAlphaAPI extends Tool {
+ constructor(fields) {
+ super();
+ this.name = 'wolfram';
+ this.apiKey = fields.WOLFRAM_APP_ID || this.getAppId();
+ this.description = `Access computation, math, curated knowledge & real-time data through wolframAlpha...`;
+ }
+
+ async fetchRawText(url) {
+ try {
+ const response = await axios.get(url, { responseType: 'text' });
+ return response.data;
+ } catch (error) {
+ console.error(`Error fetching raw text: ${error}`);
+ throw error
+
+ }
+ }
+
+ getAppId() {
+ const appId = process.env.WOLFRAM_APP_ID || '';
+ if (!appId) {
+ throw new Error('Missing WOLFRAM_APP_ID environment variable.');
+ }
+ return appId;
+ }
+
+ createWolframAlphaURL(query) {
+ const formattedQuery = query.replaceAll(/`/g, '').replaceAll(/\n/g, ' ');
+ const baseURL = 'https://www.wolframalpha.com/api/v1/llm-api';
+ const encodedQuery = encodeURIComponent(formattedQuery);
+ const appId = this.apiKey || this.getAppId();
+ const url = `${baseURL}?input=${encodedQuery}&appid=${appId}`;
+ return url;
+ }
+
+ async _call(input) {
+ try {
+ const url = this.createWolframAlphaURL(input);
+ const response = await this.fetchRawText(url);
+ return response;
+ } catch (error) {
+ if (error.response && error.response.data) {
+ console.log('Error data:', error.response.data);
+ return error.response.data;
+ } else {
+ console.log(`Error querying Wolfram Alpha`, error.message);
+ return 'There was an error querying Wolfram Alpha.';
+ }
+ }
+ }
+}
+
+module.exports = WolframAlphaAPI;
+```
+
+In this example, the `WolframAlphaAPI` class has helper methods like `fetchRawText`, `getAppId`, and `createWolframAlphaURL` to handle specific tasks. The `_call` method makes an HTTP request to the Wolfram Alpha API and returns the response.
+
diff --git a/pages/docs/development/translation.mdx b/pages/docs/development/translation.mdx
new file mode 100644
index 0000000..5fb82fb
--- /dev/null
+++ b/pages/docs/development/translation.mdx
@@ -0,0 +1,128 @@
+---
+title: Contribute a Translation
+description: How to add a new language to LibreChat.
+---
+
+# How to add a new language to LibreChat 🌍
+
+## Minimum Requirements:
+
+1. Good knowledge of the language (some terms may undergo significant changes during translation)
+2. A text editor is required. While options like Notepad or Notepad++ are available, it is recommended to use **[VSCode](https://code.visualstudio.com/download)** as it is more suitable for this task..
+
+## Language Translation
+
+### Preparation
+
+Fork the [LibreChat repository](https://github.librechat.ai) and download it using git clone. See: [Getting Started - GitHub](/docs/development/get_started#github)
+
+### Add your language to `Translation.ts`:
+
+- Navigate to the `client\src\localization` folder and open the `Translation.ts` file
+
+- At the beginning of the code, add your language below all the others in this format:
+
+ `import Language-name from './languages/** ';`
+
+ Example (English):`import English from './languages/Eng';`
+
+- Further down in the code, add in the language mapping, the following:
+
+ `'**-**': LanguageName,`
+
+> Replace `**-**` with the local identifier of your language (ask ChatGPT or search it on Google).
+> Replace `LanguageName` with the name of your language.
+
+Example (English): `'en-US': English,`
+
+### Create your new language file
+
+- Go into the `client\src\localization\languages` folder and create a file named as follows: `**.tsx`
+
+ Example: `Eng.tsx`
+
+- Copy all the content from `Eng.tsx` into your file and modify it as follows:
+
+ ```ts filename="Eng.tsx"
+ // your-language-name phrases
+
+ export default {
+ com_ui_examples: 'Examples',
+ // more translations here...
+ ```
+
+ **Translate only the part after the `:`.**
+ Example:
+
+ ```ts filename="**.tsx (new language)"
+ // my-language phrases
+
+ export default {
+ com_ui_examples: 'This is a translated example',
+ // Add more translations here
+ }
+ ```
+
+
+ Do not modify the `com_...` part
+
+
+
+ - Delete the Language list after `com_nav_setting_general: 'General',` near the bottom of the file
+ (You do not need to translate the individual language names) - Do not delete
+ `com_nav_setting_data: 'Data controls'` (you need to translate it)
+
+
+### Add your language to `Eng.tsx`
+
+Open `Eng.tsx` and add your language to the language list in the bottom of the document.
+
+### Add your language to the menu
+
+- Navigate to the file `client\src\components\Nav\SettingsTabs\General.tsx`.
+- Add your language to the `LangSelector` variable in the following way:
+
+ ```ts filename="LangSelector"
+ export const LangSelector = ({
+ //other code
+
+ //other languages...
+
+
+
+ );
+ };
+ ```
+
+
+ `**-**` is the local identifier of your language and `com_nav_lang_your-language-name` stands for
+ the name of your language. Example: `com_nav_lang_english` or `com_nav_lang_italian`
+
+
+**You should only need to add one line of code:**
+
+```ts
+
+```
+
+### Summary
+
+If you followed everything you should have **one new file** and **3 modified files**:
+
+```bash
+ new file: client/src/localization/languages/**.tsx <-----new language
+ modified: client/src/components/Nav/SettingsTabs/General.tsx
+ modified: client/src/localization/Translation.ts
+ modified: client/src/localization/languages/Eng.tsx
+```
+
+You can confirm this by using the following command: `git status`
+
+### Commit and create a new PR
+
+See: [Make a PR](/docs/development/get_started#create-a-pull-request-pr)
+
+
+ - Answer all the questions, and in the "Type of Change" section, check `- [x] Translation update`
+ - **Delete irrelevant comments** from the PR template - Create a pull request 😎
+
diff --git a/pages/docs/documentation/_meta.ts b/pages/docs/documentation/_meta.ts
new file mode 100644
index 0000000..7a52327
--- /dev/null
+++ b/pages/docs/documentation/_meta.ts
@@ -0,0 +1,5 @@
+export default {
+ index: 'Contributing to the Docs',
+ examples: 'Docs Components',
+ syntax_highlighting: 'Syntax Highlighting',
+}
diff --git a/pages/docs/documentation/examples.mdx b/pages/docs/documentation/examples.mdx
new file mode 100644
index 0000000..319cb04
--- /dev/null
+++ b/pages/docs/documentation/examples.mdx
@@ -0,0 +1,838 @@
+---
+title: Docs Components Examples
+description: Explore the various components available on the website that you can seamlessly incorporate into your contributions to the blog and documentation.
+---
+
+
+import {
+ ArrowRight,
+ ArrowUp,
+ SvgBox,
+ Brush,
+ SvgCards,
+ ChevronRight,
+ Close,
+ Cloud,
+ Code,
+ Diagram,
+ Dropper,
+ File,
+ Files,
+ SvgFolderTree,
+ Formula,
+ Gear,
+ Globe,
+ IdCard,
+ Lightning,
+ SvgLink,
+ Markdown,
+ Newsletter,
+ One,
+ Picture,
+ Rows,
+ Search,
+ Sort,
+ Stars,
+ SvgSwitch,
+ SvgTable,
+ Terminal,
+ Warning,
+} from '@/components/svg'
+
+import { Feature, Features } from '@/components/features'
+
+# Docs Components Examples
+
+## Carousel
+
+
+
+
+
+
+
+
+
+
+
+ ```tsx copy filename="carousel"
+
+
+
+
+
+ ```
+
+This example demonstrates how to use the `Carousel` component with the following props:
+
+- `autoplay`: Enables autoplay for the carousel.
+- `animationDuration="1500"`: Sets the animation duration to 1500 milliseconds.
+- `showControls`: Shows the previous and next controls for the carousel.
+- `showBullets`: Shows the bullet navigation for the carousel.
+- `perView="3"`: Displays three slides at a time in the carousel.
+
+Inside the `Carousel` component, you can place any content you want to display as slides. In this example, we're using `` elements with source paths to `slide1.jpg`, `slide2.jpg`, and `slide3.jpg`.
+
+
+
+
+## Callouts
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fermentum dapibus diam lacinia curabitur nullam habitasse etiam.
+ Aliquam dolor nostra himenaeos ullamcorper duis venenatis laoreet.
+ Netus dictum hac donec risus adipiscing tempus ultrices. Vivamus eros volutpat suscipit mi a lacus volutpat.
+
+Dolor semper vehicula cras convallis id sociosqu lacus. At ligula porta habitasse nunc ridiculus odio litora.
+Vestibulum suscipit nisi urna montes conubia fringilla nascetur. Turpis rutrum nunc ad elementum molestie interdum curae.
+Integer euismod mi luctus proin habitant interdum proin.
+
+Litora dui mus cum condimentum mus eget suscipit. Tellus phasellus duis phasellus elementum vitae pretium et.
+Netus habitasse tincidunt semper nullam sociosqu nisl mollis. Est hendrerit nulla ante fusce faucibus convallis vulputate.
+Metus imperdiet fusce id rhoncus urna ridiculus sem.
+
+
+
+
+```tsx copy filename="callout"
+
+ - The type comes with a color scheme and default emoji
+ - "title" is optional
+ - "emoji" is optional
+ - "collapsible" is only added when the collapsible feature is wanted
+
+```
+
+
+
+
+
+
+
+{' '}
+
+
+ undefined or unsupported `type` default to this color scheme
+
+
+{' '}
+
+
+ this is a default callout
+
+
+{' '}
+
+
+ this is a example callout
+
+
+{' '}
+
+
+ this is a note callout
+
+
+{' '}
+
+
+ this is a abstract callout
+
+
+{' '}
+
+
+ this is a info callout
+
+
+{' '}
+
+
+ this is a tip callout
+
+
+{' '}
+
+
+ this is a success callout
+
+
+{' '}
+
+
+ this is a question callout
+
+
+{' '}
+
+
+ this is a warning callout
+
+
+{' '}
+
+
+ this is a error callout
+
+
+{' '}
+
+
+ this is a danger callout
+
+
+{' '}
+
+
+ this is a bug callout
+
+
+
+ this is a quote callout
+
+
+
+```tsx copy filename="callout"
+
+ - The type comes with a color scheme and default emoji
+ - "title" is optional
+ - "emoji" is optional
+ - "collapsible" is only added when the collapsible feature is wanted
+
+```
+
+
+
+
+
+## Option Table
+
+
+
+
+
+
+
+```mdx filename="Option Table"
+
+```
+
+
+
+## File Tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+- ``: Represents a folder. It can hold nested Folder or File components.
+- ``: Represents a file. This component only requires a name prop, which determines the file name displayed in the UI.
+- `name`: This determines the name of the file or folder as displayed in the UI.
+- `defaultOpen`: This shows the initial state of a Folder. If it is set to true, the Folder will be expanded when first rendered.
+- `open`: If this prop is passed to a Folder, it will always be open regardless of user interaction. This is useful when you want to maintain certain sections of the file tree exposed.
+- `active`: When this prop is used in a File, the file name will be highlighted. This is handy when you want to show users which file is currently active or selected.
+
+```tsx copy filename="file-tree.tsx"
+
+
+
+
+
+
+
+
+
+
+```
+
+[Source Code ↗](https://github.com/shuding/nextra/blob/main/packages/nextra/src/components/file-tree.tsx)
+
+
+
+
+## Cards
+
+
+
+
+
+
+
+ } title="ArrowRight" href="/" />
+ } title="ArrowUp" href="/" />
+ } title="SvgBox" href="/" />
+ } title="Brush" href="/" />
+ } title="SvgCards" href="/" />
+ } title="ChevronRight" href="/" />
+ } title="Close" href="/" />
+ } title="Cloud" href="/" />
+ } title="Code" href="/" />
+ } title="Diagram" href="/" />
+ } title="Dropper" href="/" />
+ } title="File" href="/" />
+ } title="Files" href="/" />
+ } title="SvgFolderTree" href="/" />
+ } title="Formula" href="/" />
+ } title="Gear" href="/" />
+ } title="Globe" href="/" />
+ } title="IdCard" href="/" />
+ } title="Lightning" href="/" />
+ } title="Link" href="/" />
+ } title="Markdown" href="/" />
+ } title="Newsletter" href="/" />
+ } title="One" href="/" />
+ } title="Picture" href="/" />
+ } title="Rows" href="/" />
+ } title="Search" href="/" />
+ } title="Sort" href="/" />
+ } title="Stars" href="/" />
+ } title="SvgSwitch" href="/" />
+ } title="SvgTable" href="/" />
+ } title="Terminal" href="/" />
+ } title="Warning" href="/" />
+
+
+
+
+
+
+```tsx copy filename="Card Array"
+import { Code } from '@/components/svg/'
+;
+ } title="Code" href="/" />
+
+```
+
+
+
+
+
+
+
+
+
+{' '}
+
+} title="ArrowRight" href="/" />
+} title="ArrowUp" href="/" />
+} title="SvgBox" href="/" />
+} title="Brush" href="/" />
+} title="SvgCards" href="/" />
+} title="ChevronRight" href="/" />
+} title="Close" href="/" />
+} title="Cloud" href="/" />
+} title="Code" href="/" />
+} title="Diagram" href="/" />
+} title="Dropper" href="/" />
+} title="File" href="/" />
+} title="Files" href="/" />
+} title="SvgFolderTree" href="/" />
+} title="Formula" href="/" />
+} title="Gear" href="/" />
+} title="Globe" href="/" />
+} title="IdCard" href="/" />
+} title="Lightning" href="/" />
+} title="Link" href="/" />
+} title="Markdown" href="/" />
+} title="Newsletter" href="/" />
+} title="One" href="/" />
+} title="Picture" href="/" />
+} title="Rows" href="/" />
+} title="Search" href="/" />
+} title="Sort" href="/" />
+} title="Stars" href="/" />
+} title="SvgSwitch" href="/" />
+} title="SvgTable" href="/" />
+} title="Terminal" href="/" />
+} title="Warning" href="/" />
+
+
+
+
+
+```tsx copy filename="Single Cards"
+import { Code } from '@/components/svg/'
+;} title="Code" href="/" />
+```
+
+
+
+
+
+
+
+## Default Button
+
+
+
+ Open LibreChat's website in a new tab:
+
+{' '}
+
+
+
+Open LibreChat's website in the current tab:
+
+{' '}
+
+
+
+And here's a button with Alert:
+
+
+
+
+
+ ```tsx copy filename="button"
+
+
+{' '}
+
+
+
+
+ ```
+ [Source Code ↗]()
+
+
+
+
+## Features
+
+
+
+
+
+ This is a feature with a link.
+
+
+ This is a medium "lightOnly" feature occupying two spaces.
+
+
+ This is a large feature with "centered" attribute.
+
+
+ 
+
+
+
+
+
+
+
+This example showcases the usage of the `` and `` components for displaying feature sections. The `` component can be customized with different props such as `href` for linking, `medium` or `large` for size, `lightOnly` for light mode only, and `centered` for centering the content.
+
+The provided code includes a mix of Markdown content and the `` section. Inside the `` section, there are four `` components with different configurations to demonstrate different use cases.
+
+```tsx copy filename="features"
+import { Feature, Features } from '@/components/features'
+;
+ This is a feature with a link.
+
+ This is a medium "lightOnly" feature occupying two spaces.
+
+
+ This is a large feature with "centered" attribute.
+
+ 
+
+```
+
+[Source: ./components/features/]()
+
+
+
+
+## Simple Tabs
+
+
+
+
+
+ **React** is a JavaScript library for building user interfaces.
+
+
+ **Vue** is a progressive JavaScript framework for building user interfaces.
+
+
+ **Angular** is a platform for building mobile and desktop web applications.
+
+
+
+
+
+ ```tsx copy filename="simple-tabs"
+
+
+ **React** is a JavaScript library for building user interfaces.
+
+
+ **Vue** is a progressive JavaScript framework for building user interfaces.
+
+
+ **Angular** is a platform for building mobile and desktop web applications.
+
+
+ ```
+ [Source Code ↗](https://github.com/shuding/nextra/blob/main/packages/nextra/src/components/tabs.tsx)
+
+
+
+---
+
+In this example, we have a single `` component with three tabs: "React", "Vue", and "Angular". Each tab contains a brief description of the respective technology.
+
+The `items` prop on the `` component is an array of strings that represents the labels for each tab. The content for each tab is placed inside the corresponding `` component.
+
+This demonstrates a straightforward usage of the `` component without any nesting.
+
+## Nested Tabs
+
+This example demonstrates how to create nested tabs using the `` and `` components. The outer `` component has two tabs: "Fruit" and "Vegetable". Inside each of these tabs, there are nested tabs for specific fruits and vegetables.
+
+The `items` prop on the `` component is an array of strings that represents the labels for each tab. The content for each tab is placed inside the corresponding `` component.
+
+
+
+
+
+
+
+ Apple is a fruit.
+
+
+ Orange is a fruit.
+
+
+
+
+
+
+ Carrot is a vegetable.
+
+
+ Broccoli is a vegetable.
+
+
+
+
+
+
+
+ ```tsx copy filename="nested-tabs"
+
+
+
+
+ **Content for 1a**
+
+
+ **Content for 2a**
+
+
+
+
+
+
+ **Content for 1b**
+
+
+ **Content for 2b**
+
+
+
+
+ ```
+ [Source Code ↗](https://github.com/shuding/nextra/blob/main/packages/nextra/src/components/tabs.tsx)
+
+
+
+## Video
+
+
+
+
+
+
+
+ ```tsx copy filename="video"
+
+ ```
+
+
+
+## Steps
+
+
+
+
+
+
+- Step 1: example - Step 2: example - Step 3: example - Step 4: example
+
+
+
+
+
+[Source Code ↗](https://github.com/shuding/nextra/blob/main/packages/nextra/src/components/steps.tsx)
+
+```tsx copy filename="steps.tsx"
+- Step 1: example - Step 2: example - Step 3: example - Step 4: example
+```
+
+
+
diff --git a/pages/docs/documentation/index.mdx b/pages/docs/documentation/index.mdx
new file mode 100644
index 0000000..4473823
--- /dev/null
+++ b/pages/docs/documentation/index.mdx
@@ -0,0 +1,134 @@
+---
+title: Intro
+description: Comprehensive guide on how to contribute to our documentation
+---
+
+# Contributing to the Documentation
+
+Contributions to the documentation are welcome! This guide explains how to contribute to the LibreChat documentation by writing and formatting new documentation. Our website is built with Nextra 3 and our docs use the `.mdx` format (augmented markdown).
+
+### When to Write a Doc vs. a Blog Post
+
+
+Consider publishing a blog post when a document is an extension of an existing one, relates to a specific situation, or requires external maintenance (features not actively used by the team).
+
+**See: [Contributing to Blog](/blog/2024-04-17_blog_guide)**
+
+
+
+## Creating New Documents
+
+To create a new document:
+
+- Use the `.mdx` file extension (see [MDX documentation](https://mdxjs.com/) for more info).
+- Name files using **lowercase letters** and **underscores** (e.g., `documentation_guidelines.mdx`).
+- Place new documents in the relevant folder/sub-folder under `./docs`.
+- Add the document to the table of contents in the `_meta.ts` file of the folder where your document is located. If you don't add it, it will be alphabetically sorted after the ordered docs.
+
+## Markdown Formatting Guidelines
+
+- Use headings and subheadings with `#`, `##`, and `###`.
+ - Use `#` for the document title (**only one main title per document is allowed**).
+ - Use `##` for main sections.
+ - Use `###` for sub-sections within a section.
+- Use `**` to make text **bold** and highlight important information (do not use in place of a heading).
+- Use URL paths to link to other documents (e.g., `/docs/documentation` points the current [doc](/docs/documentation)).
+- You can use HTML, TS, and JS to add additional features to a document.
+- Ensure any HTML has closing tags (e.g., `` or ``).
+- Do not use HTML comments; instead, use [Markdown comments](https://gist.github.com/jonikarppinen/47dc8c1d7ab7e911f4c9?permalink_comment_id=4272770#gistcomment-4272770) **only if the text is actually hidden**.
+
+### Docs Resources
+
+
+
+See some integrated components examples:
+
+- [Components Examples](/docs/documentation/examples)
+
+For more information, refer to:
+
+- [Nextra](https://nextra.site/docs/docs-theme/start)
+- [Nextra 3](https://the-guild.dev/blog/nextra-3#intro)
+- [MDX](https://mdxjs.com/)
+
+
+
+## Document Metadata
+
+Add metadata to the header of your document using the following format:
+
+> Note: The `ogImage` field is optional and can be omitted altogether. It is used to specify the image that will be displayed when sharing your document on social media platforms.
+
+```yaml filename="metadata example:"
+---
+title: Document Title
+description: This description will be used in social cards and search engine results.
+ogImage: /images/docs//image.png (optional)
+---
+```
+
+## Assets
+
+Whenever possible, upload assets (e.g., images) to GitHub instead of storing them in the `/public` folder. This helps keep your repository organized and makes it easier to manage your assets.
+
+### Images
+
+**Note In the followng example:**
+ - I provided screenshots for both lihgt and dark mode.
+ - I used `Image from 'next/image'` wich gave me 4x improvement on the image file size for better performances.
+
+see the following example in action here: [User Guides](/docs/user_guides)
+
+```mdx filename="Example"
+import Image from 'next/image'
+
+
+
+
+
+
+
+
+
+
+```
+
+### How to Upload Images and Videos on GitHub
+
+
+ - Go to the LibreChat repository
+ - Find a random conversation or PR
+ - Paste an image from your clipboard into the text input box. It will automatically be converted into a URL.
+ - Copy and paste the resulting URL in your document. (Then exit the page without actually posting the comment.😉)
+
+ 
+
+
+
+
+ - Upload directly from the web UI:
+
+ 
+
+
+
+## Test the Docs
+
+
+### Review carefully before submitting your PR
+
+Before submitting a PR for your blog post, **always** test to ensure everything looks and functions as intended.
+
+#### Check the following:
+
+- Your new document(s) for layout, accuracy and completeness
+- The document's position in the Table of Contents (ToC)
+- The image and link in your document
+
+#### To test:
+
+1. Prepare the environment by running `pnpm install`
+2. Start the dev server with `pnpm dev`
+3. Test the build by running `pnpm build` followed by `pnpm start`
+
+
diff --git a/pages/docs/documentation/syntax_highlighting.mdx b/pages/docs/documentation/syntax_highlighting.mdx
new file mode 100644
index 0000000..8f34af1
--- /dev/null
+++ b/pages/docs/documentation/syntax_highlighting.mdx
@@ -0,0 +1,473 @@
+---
+title: Syntax Highlighting
+description: All about syntax highlighting
+---
+
+# Syntax Highlighting
+
+Nextra uses [Shiki](https://shiki.matsu.io) to do syntax highlighting at build time. It's very reliable and performant. For example, adding this in your Markdown file:
+
+````md filename="Markdown"
+```js
+console.log('hello, world')
+```
+````
+
+Result in this:
+
+```js
+console.log('hello, world')
+```
+
+## Features
+
+### Inlined Code
+
+Inlined syntax highlighting like `let x = 1{:jsx}` is also supported via the `{:}` syntax:
+
+
+
+ Inlined syntax highlighting is also supported: `let x = 1{:jsx}`
+
+
+
+```md filename="Markdown"
+Inlined syntax highlighting is also supported: `let x = 1{:jsx}`
+```
+
+
+
+### Filenames and Titles
+
+You can add a filename or a title to your code blocks by adding a `filename` attribute:
+
+Renders:
+
+
+
+ ```js filename="example.js"
+ console.log('hello, world')
+ ```
+
+
+
+````md filename="Markdown"
+```js filename="example.js"
+console.log('hello, world')
+```
+````
+
+
+
+### Highlighting Lines
+
+You can highlight specific lines of code by adding a `{}` attribute to the code block:
+
+
+
+ ```js {1,4-5}
+ import { useState } from 'react'
+
+function Counter() {
+const [count, setCount] = useState(0)
+return
+}
+
+`````
+
+
+
+````md filename="Markdown"
+```js {1,4-5}
+import { useState } from 'react'
+
+function Counter() {
+const [count, setCount] = useState(0)
+return
+}
+`````
+
+`````
+
+
+
+### Highlighting Substrings
+
+You can highlight specific substrings of code by adding a `//` attribute to the code block:
+
+
+
+ ```js /useState/
+ import { useState } from 'react'
+
+ function Counter() {
+ const [count, setCount] = useState(0)
+ return
+ }
+ ```
+
+
+
+````md filename="Markdown"
+```ts /useState/
+import { useState } from 'react'
+
+function Counter() {
+ const [count, setCount] = useState(0)
+ return
+}
+```
+`````
+
+
+
+
+You can highlight only a part of the occurrences of that substring by adding a number it: `/str/1`, or multiple: `/str/1-3`, `/str/1,3`.
+
+### Line Numbers
+
+You can add line numbers to your code blocks by adding a `showLineNumbers` attribute:
+
+
+
+```ts showLineNumbers
+import { useState } from 'react'
+
+function Counter() {
+const [count, setCount] = useState(0)
+return
+}
+
+`````
+
+
+
+````md filename="Markdown"
+```ts showLineNumbers
+import { useState } from 'react'
+
+function Counter() {
+ const [count, setCount] = useState(0)
+ return
+}
+`````
+
+`````
+
+
+
+### ANSI Highlighting
+
+You can highlight ANSI escape codes:
+
+
+
+ ```ansi filename="ANSI escape codes"
+ [0m [0;32m✓[0m [0;2msrc/[0mindex[0;2m.test.ts (1)[0m
+ [0;2m Test Files [0m [0;1;32m1 passed[0;98m (1)[0m
+ [0;2m Tests [0m [0;1;32m1 passed[0;98m (1)[0m
+ [0;2m Start at [0m 23:32:41
+ [0;2m Duration [0m 11ms
+ [42;1;39;0m PASS [0;32m Waiting for file changes...[0m
+ [0;2mpress [0;1mh[0;2m to show help, press [0;1mq[0;2m to quit
+ ```
+
+
+
+````md filename="Markdown"
+```ansi filename="ANSI escape codes"
+[0m [0;32m✓[0m [0;2msrc/[0mindex[0;2m.test.ts (1)[0m
+ [0;2m Test Files [0m [0;1;32m1 passed[0;98m (1)[0m
+ [0;2m Tests [0m [0;1;32m1 passed[0;98m (1)[0m
+ [0;2m Start at [0m 23:32:41
+ [0;2m Duration [0m 11ms
+ [42;1;39;0m PASS [0;32m Waiting for file changes...[0m
+ [0;2mpress [0;1mh[0;2m to show help, press [0;1mq[0;2m to quit
+```
+`````
+
+
+
+
+## Supported Languages
+
+Check [this list](https://github.com/shikijs/shiki/blob/main/docs/languages.md) for all supported languages.
+
+## Customize the Theme
+
+Nextra uses CSS variables to define the colors for tokens. You can inject a [global CSS](https://nextjs.org/docs/basic-features/built-in-css-support#adding-a-global-stylesheet) to customize them under light/dark themes. For example this is the default tokens and you can override any of these:
+
+```css filename="styles.css"
+:root {
+ --shiki-color-text: #414141;
+ --shiki-color-background: transparent;
+ --shiki-token-constant: #1976d2;
+ --shiki-token-string: #22863a;
+ --shiki-token-comment: #aaa;
+ --shiki-token-keyword: #d32f2f;
+ --shiki-token-parameter: #ff9800;
+ --shiki-token-function: #6f42c1;
+ --shiki-token-string-expression: #22863a;
+ --shiki-token-punctuation: #212121;
+ --shiki-token-link: #22863a;
+}
+
+.dark {
+ --shiki-color-text: #d1d1d1;
+ --shiki-token-constant: #79b8ff;
+ --shiki-token-string: #ffab70;
+ --shiki-token-comment: #6b737c;
+ --shiki-token-keyword: #f97583;
+ --shiki-token-parameter: #ff9800;
+ --shiki-token-function: #b392f0;
+ --shiki-token-string-expression: #4bb74a;
+ --shiki-token-punctuation: #bbb;
+ --shiki-token-link: #ffab70;
+}
+```
+
+## With Dynamic Content
+
+Since syntax highlighting is done at build time, you can't use dynamic content in your code blocks. However, since MDX is very powerful there is a workaround via client JS. For example:
+
+
+
+
+import { useEffect, useRef } from 'react'
+
+export function DynamicCode({ children }) {
+ const ref = useRef()
+ const tokenRef = useRef()
+ // Find the corresponding token from the DOM
+ useEffect(() => {
+ if (ref.current) {
+ const token = [...ref.current.querySelectorAll('code span')].find(
+ (el) => el.innerText === '1',
+ )
+ tokenRef.current = token
+ }
+ }, [])
+ return (
+ <>
+
diff --git a/pages/docs/local/_meta.ts b/pages/docs/local/_meta.ts
new file mode 100644
index 0000000..1e40d5f
--- /dev/null
+++ b/pages/docs/local/_meta.ts
@@ -0,0 +1,5 @@
+export default {
+ index: 'Intro',
+ docker: 'Docker',
+ npm: 'npm',
+}
diff --git a/pages/docs/local/docker.mdx b/pages/docs/local/docker.mdx
new file mode 100644
index 0000000..acb3465
--- /dev/null
+++ b/pages/docs/local/docker.mdx
@@ -0,0 +1,80 @@
+---
+title: Docker
+description: How to install LibreChat locally with Docker
+---
+
+# Local Installation of LibreChat with Docker
+
+For most scenarios, Docker Compose is the recommended installation method due to its simplicity, ease of use, and reliability.
+
+## Prerequisites
+
+- [`Git`](https://git-scm.com/downloads)
+- [`Docker`](https://www.docker.com/products/docker-desktop/)
+
+---
+
+## Installation Steps
+
+Follow these steps to set up LibreChat with the default configuration:
+
+```bash filename="Clone the Repository"
+git clone https://github.com/danny-avila/LibreChat.git
+```
+
+```bash filename="Navigate to the LibreChat Directory"
+cd LibreChat
+```
+
+```bash filename="Create a .env File from .env.example"
+cp .env.example .env
+```
+
+> **Note:** **If you're using Windows, you might need to use `copy` instead of `cp`.**
+
+```sh filename="Start LibreChat"
+docker compose up -d
+```
+
+
+ **Visit [http://localhost:3080/](http://localhost:3080/)**
+
+
+## Update LibreChat
+
+The following commands will fetch the latest LibreChat project changes, including any necessary changes to the docker compose files, as well as the latest prebuilt images.
+
+> **Note:** you may need to prefix commands with sudo according to your environment permissions.
+
+```bash filename="Stop the running container(s)""
+docker compose down
+```
+
+```bash filename="Pull latest project changes"
+git pull
+```
+
+```bash filename="Pull the latest LibreChat image""
+docker compose pull
+```
+
+```bash filename="Start LibreChat"
+docker compose up
+```
+
+## Additional Setup
+
+Unlock additional features by exploring our configuration guides to learn how to set up:
+
+- Custom endpoints
+- Other advanced configuration options
+- And more
+
+This will enable you to customize your LibreChat experience with optional features.
+
+**see also:**
+- [Docker Override](/docs/configuration/docker_override)
+- [User Authentication System Setup](/docs/configuration/authentication)
+- [AI Setup](/docs/configuration/pre_configured_ai)
+- [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml)
+- [Manage Your MongoDB Database](/blog/2023-11-30_mongoexpress)
\ No newline at end of file
diff --git a/pages/docs/local/index.mdx b/pages/docs/local/index.mdx
new file mode 100644
index 0000000..a7ca1b7
--- /dev/null
+++ b/pages/docs/local/index.mdx
@@ -0,0 +1,27 @@
+---
+title: Intro
+description: How to install LibreChat locally
+---
+
+import { DockerIcon, NpmIcon } from '@/components/svg/'
+
+# Install LibreChat Locally
+
+**We recommend using `Docker Compose{:hack}` to install LibreChat**, as it is the easiest, simplest, and most reliable method for getting started. With Docker, you can quickly spin up a container that includes everything you need to run LibreChat, including MongoDB, MeiliSearch, as well as the rag_api & vectordb for file support across all endpoints. This approach ensures consistency across different environments and eliminates the need for manual setup of dependencies, making it ideal for most use cases.
+
+Alternatively, you can install LibreChat using the `npm{:zig}` install method. However, this method requires manual setup of MongoDB, MeiliSearch, and the "rag_api + vectordb" dependencies, which can be time-consuming and error-prone.
+
+Whether you choose the Docker or npm install method, we have detailed instructions to help you get started with LibreChat.
+
+
diff --git a/pages/docs/local/npm.mdx b/pages/docs/local/npm.mdx
new file mode 100644
index 0000000..4b6ed03
--- /dev/null
+++ b/pages/docs/local/npm.mdx
@@ -0,0 +1,107 @@
+---
+title: Docker
+description: How to install LibreChat locally using npm
+---
+
+# Install LibreChat Locally Using npm
+
+## Prerequisites
+
+- Node.js 18+: [https://nodejs.org/en/download](https://nodejs.org/en/download)
+- Git: https://git-scm.com/download/
+- MongoDB (Atlas or Community Server)
+ - [MongoDB Atlas](https://www.mongodb.com/try)
+ - [MongoDB Community Server](https://www.mongodb.com/try/download/community)
+
+## Installation Steps
+
+### Preparation
+
+Run the following commands in your terminal:
+
+```bash filename="Clone the Repository"
+git clone https://github.com/danny-avila/LibreChat.git
+```
+
+```bash filename="Navigate to the LibreChat Directory"
+cd LibreChat
+```
+
+```bash filename="Create a .env File from .env.example"
+cp .env.example .env
+```
+
+> **Note:** **If you're using Windows 10, you might need to use `copy` instead of `cp`.**
+
+```bash filename="Update the MONGO_URI"
+Important: Edit the newly created `.env` file to update the `MONGO_URI` with your own MongoDB instance URI.
+```
+
+
+ Edit the newly created `.env` file to update the `MONGO_URI` with your own
+
+
+### Build and Start
+
+Once you've completed the preparation steps, run the following commands:
+
+```bash filename="Install dependencies"
+npm ci
+```
+
+```bash filename="Build the Frontend"
+npm run frontend
+```
+
+```bash filename="Start LibreChat!"
+npm run backend
+```
+
+
+ **Visit [http://localhost:3080/](http://localhost:3080/)**
+
+
+
+ - Next time you want to start LibreChat, you only need to execute `npm run backend`
+
+
+## Update LibreChat
+
+To update LibreChat to the latest version, run the following commands:
+
+
+ First, stop LibreChat (if you haven't already).
+
+
+```bash filename="Pull latest project changes"
+git pull
+```
+
+```bash filename="Update dependencies"
+npm ci
+```
+
+```bash filename="Rebuild the Frontend"
+npm run frontend
+```
+
+```bash filename="Start LibreChat!"
+npm run backend
+```
+
+## Additional Setup
+
+Unlock additional features by exploring our configuration guides to learn how to set up:
+
+- Meilisearch integration
+- RAG API connectivity
+- Custom endpoints
+- Other advanced configuration options
+- And more
+
+This will enable you to customize your LibreChat experience with optional features.
+
+**see also:**
+- [User Authentication System Setup](/docs/configuration/authentication)
+- [AI Setup](/docs/configuration/pre_configured_ai)
+- [Custom Endpoints & Configuration](/docs/configuration/librechat_yaml)
\ No newline at end of file
diff --git a/pages/docs/remote/_meta.ts b/pages/docs/remote/_meta.ts
new file mode 100644
index 0000000..255972c
--- /dev/null
+++ b/pages/docs/remote/_meta.ts
@@ -0,0 +1,15 @@
+export default {
+ index: 'Intro',
+ digitalocean: 'Digital Ocean',
+ docker_linux: 'Docker (Remote Linux)',
+ huggingface: 'Hugging Face',
+ railway: 'Railway',
+ tunnels_proxies: {
+ // "title": "Contributing",
+ type: 'separator',
+ },
+ cloudflare: 'Cloudflare',
+ nginx: 'Nginx',
+ ngrok: 'ngrok',
+ traefik: 'Traefik',
+}
diff --git a/pages/docs/remote/cloudflare.mdx b/pages/docs/remote/cloudflare.mdx
new file mode 100644
index 0000000..365af6e
--- /dev/null
+++ b/pages/docs/remote/cloudflare.mdx
@@ -0,0 +1,73 @@
+---
+title: Cloudflare
+description: Quick Guide to Domain Registration and Cloudflare Tunnel Configuration
+---
+
+# Comprehensive Guide to Domain Registration and Configuring Cloudflare Tunnel
+
+## Registering Your Domain
+
+### Step 1: Choose Your Domain Name
+- Select a domain name that aligns with your brand identity and is memorable. Avoid complex spellings.
+- Use online tools from domain registrars like Cloudflare, Namecheap, GoDaddy, etc., to check if your preferred domain name is available.
+
+### Step 2: Select a Domain Registrar
+- Evaluate registrars based on their pricing, customer support, additional features (such as email, SSL certificates), and user reviews.
+- Pay special attention to privacy protection services (WHOIS privacy), as this helps keep your personal information private.
+
+### Step 3: Purchase and Register the Domain
+- Follow the registrar's purchase process, which involves providing your contact information and completing the payment.
+- Thoroughly read the terms of service and note the domain's expiration date to avoid unexpected lapses.
+
+## Configuring Cloudflare Tunnels
+
+### Step 1: Add Your Domain to Cloudflare
+- If your domain was purchased via Cloudflare, this step is skipped as your domain is already configured to use Cloudflare's nameservers.
+- Log into your Cloudflare account and add your new domain. Follow the instructions to replace your domain's nameservers with those provided by Cloudflare, which is necessary for activating Cloudflare's services.
+
+### Step 3: Create a Tunnel
+
+
+
+ 
+
+
+ 
+
+
+ 
+
+
+
+
+
+#### Name your Tunnel
+
+
+
+#### Install Cloudflare's `cloudflared` on Your Server
+
+
+
+
+- For continuous operation, consider setting up `cloudflared` to run as a service on your system. This ensures the tunnel remains active after reboots and crashes.
+
+
+- Download and install the [`cloudflared`](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) tool from Cloudflare's official site onto your server. This software will facilitate the secure connection between your domain and the internal services.
+- Authenticate `cloudflared` using your Cloudflare account credentials to link it to your domain.
+
+#### Configure your Tunnel
+
+- Initiate a tunnel using either the Cloudflare dashboard under the "Tunnels" section
+
+
+
+
+### Step 6: Verify the Tunnel
+- Test the connection by accessing your domain/subdomain in a web browser, ensuring it resolves to your server via the Cloudflare Tunnel without errors.
+- Monitor your tunnel's performance and status directly from the Cloudflare dashboard under the "Tunnels" section.
+
+
+
+## Conclusion
+By securing your domain registration and configuring a Cloudflare Tunnel, you strengthen the security and reliability of connecting to your network services. Regularly review and update your domain and tunnel settings to adapt to any new requirements or changes in network configuration. Stay proactive about maintaining your online presence and security stance.
\ No newline at end of file
diff --git a/pages/docs/remote/digitalocean.mdx b/pages/docs/remote/digitalocean.mdx
new file mode 100644
index 0000000..5fcfb0d
--- /dev/null
+++ b/pages/docs/remote/digitalocean.mdx
@@ -0,0 +1,126 @@
+---
+title: DigitalOcean
+description: These instructions are designed for someone starting from scratch for a Docker Installation on a remote Ubuntu server using one of the cheapest tiers (6 USD/mo)
+---
+
+# Digital Ocean Setup
+
+> These instructions + the [docker guide]() are designed for someone starting from scratch for a Docker Installation on a remote Ubuntu server. You can skip to any point that is useful for you. There are probably more efficient/scalable ways, but this guide works really great for my personal use case.
+
+**There are many ways to go about this, but I will present to you the best and easiest methods I'm aware of. These configurations can vary based on your liking or needs.**
+
+Digital Ocean is a great option for deployment: you can benefit off a **free [200 USD credit](https://m.do.co/c/4486923fcf00)** (for 60 days), and one of the cheapest tiers (6 USD/mo) will work for LibreChat in a low-stress, minimal-user environment. Should your resource needs increase, you can always upgrade very easily.
+
+Digital Ocean is also my preferred choice for testing deployment, as it comes with useful resource monitoring and server access tools right out of the box.
+
+**Using the following Digital Ocean link will directly support the project by helping me cover deployment costs with credits!**
+
+## **Click the banner to get a $200 credit and to directly support LibreChat!**
+
+_You are free to use this credit as you wish!_
+
+[](https://www.digitalocean.com/?refcode=4486923fcf00&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)
+
+_Note: you will need a credit card or PayPal to sign up. I'm able to use a prepaid debit card through PayPal for my billing_
+
+## Table of Contents
+
+- **[Part I: Starting from Zero](#part-i-starting-from-zero)**
+ - [1. DigitalOcean signup](#1-click-here-or-on-the-banner-above-to-get-started-on-digitalocean)
+ - [2. Access console](#2-access-your-droplet-console)
+ - [3. Console user setup](#3-once-you-have-logged-in-immediately-create-a-new-non-root-user)
+ - [4. Firewall Setup](#4-firewall-setup)
+- **[Part II: Installing Docker & Other Dependencies](#part-ii-installing-docker-and-other-dependencies)**
+
+## Part I: Starting from Zero:
+
+### **1. [Click here](https://m.do.co/c/4486923fcf00) or on the banner above to get started on DigitalOcean**
+
+Once you're logged in, you will be greeted with a [nice welcome screen](https://cloud.digitalocean.com/welcome).
+
+
+
+### **a) Click on ["Explore our control panel"](https://cloud.digitalocean.com/projects) or simply navigate to the [Projects page](https://cloud.digitalocean.com/projects)**
+
+Server instances are called **"droplets"** in digitalocean, and they are organized under **"Projects."**
+
+### **b) Click on "Spin up a Droplet" to start the setup**
+
+
+
+Adjust these settings based on your needs, as I'm selecting the bare minimum/cheapest options that will work.
+
+- **Choose Region/Datacenter:** closest to you and your users
+- **Choose an image:** Ubuntu 22.04 (LTS) x64
+- **Choose Size:** Shared CPU, Basic Plan
+ - CPU options: Regular, 6 USD/mo option (0.009 USD/hour, 1 GB RAM / 1 CPU / 25 GB SSD / 1000 GB transfer)
+ - No additional storage
+- **Choose Authentication Method:** Password option is easiest but up to you
+ - Alternatively, you can setup traditional SSH.
+- **Recommended:** Add improved metrics monitoring and alerting (free)
+ - You might be able to get away with the $4/mo option by not selecting this, but not yet tested
+- **Finalize Details:**
+ - Change the hostname to whatever you like, everything else I leave default (1 droplet, no tags)
+ - Finally, click "Create Droplet"
+
+
+
+After creating the droplet, it will now spin up with a progress bar.
+
+### **2. Access your droplet console**
+
+Once it's spun up, **click on the droplet** and click on the Console link on the right-hand side to start up the console.
+
+
+
+
+
+Launching the Droplet console this way is the easiest method but you can also SSH if you set it up in the previous step.
+
+To keep this guide simple, I will keep it easy and continue with the droplet console. Here is an [official DigitalOcean guide for SSH](https://docs.digitalocean.com/products/droplets/how-to/connect-with-ssh/) if you are interested. As mentioned before, the [Hetzner guide](./hetzner_ubuntu.md) has good instructions for this that can apply here.
+
+### **3. Once you have logged in, immediately create a new, non-root user:**
+
+**Note:** you should remove the greater/less than signs anytime you see them in this guide
+
+```bash
+# example: adduser danny
+adduser
+# you will then be prompted for a password and user details
+```
+
+Once you are done, run the following command to elevate the user
+
+```bash
+# example: usermod -aG sudo danny
+usermod -aG sudo
+```
+
+**Make sure you have done this correctly by double-checking you have sudo permissions:**
+
+```bash
+getent group sudo | cut -d: -f4
+```
+
+**Switch to the new user**
+
+```bash
+# example: su - danny
+su -
+```
+
+### **4. Firewall Setup**
+
+It's highly recommended you setup a simple firewall for your setup.
+
+Click on your droplet from the projects page again, and goto the Networking tab on the left-hand side under your ipv4:
+
+
+
+Create a firewall, add your droplet to it, and add these inbound rules (will work for this guide, but configure as needed)
+
+
+
+---
+
+This concludes the initial setup. For the subsequent steps, please proceed to the next guide:**[Docker Deployment Guide](/docs/remote/docker_linux)**, which will walk you through the remaining installation process.
diff --git a/pages/docs/remote/docker_linux.mdx b/pages/docs/remote/docker_linux.mdx
new file mode 100644
index 0000000..6c1fd73
--- /dev/null
+++ b/pages/docs/remote/docker_linux.mdx
@@ -0,0 +1,438 @@
+---
+title: Docker (Remote Linux)
+description: These instructions are designed for someone starting from scratch for a Docker Installation on a remote Ubuntu server
+---
+
+# Ubuntu Docker Deployment Guide
+
+In order to use this guide you need a remote computer or VM deployed. While you can use this guide with a local installation, keep in mind that it was originally written for cloud deployment.
+
+> ⚠️ This guide was originally designed for [Digital Ocean](/docs/remote/digitalocean), so you may have to modify the instruction for other platforms, but the main idea remains unchanged.
+
+## Part I: Installing Docker and Other Dependencies:
+
+There are many ways to setup Docker on Linux systems. I'll walk you through the best and the recommended way [based on this guide](https://www.smarthomebeginner.com/install-docker-on-ubuntu-22-04/).
+
+> Note that the "Best" way for Ubuntu docker installation does not mean the "fastest" or the "easiest". It means, the best way to install it for long-term benefit (i.e. faster updates, security patches, etc.).
+
+### **1. Update and Install Docker Dependencies**
+
+First, let's update our packages list and install the required docker dependencies.
+
+```bash
+sudo apt update
+```
+
+Then, use the following command to install the dependencies or pre-requisite packages.
+
+```bash
+sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
+```
+
+#### **Installation Notes**
+
+- Input "Y" for all [Y/n] (yes/no) terminal prompts throughout this entire guide.
+- After the first [Y/n] prompt, you will get the first of a few **purple screens** asking to restart services.
+ - Each time this happens, you can safely press ENTER for the default, already selected options:
+
+
+
+- If at any point your droplet console disconnects, do the following and then pick up where you left off:
+ - Access the console again as indicated above
+ - Switch to the user you created with `su - `
+
+### **2. Add Docker Repository to APT Sources**
+
+While installing Docker Engine from Ubuntu repositories is easier, adding official docker repository gives you faster updates. Hence why this is the recommended method.
+
+First, let us get the GPG key which is needed to connect to the Docker repository. To that, use the following command.
+
+```bash
+curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
+```
+
+Next, add the repository to the sources list. While you can also add it manually, the command below will do it automatically for you.
+
+```bash
+echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+```
+
+The above command will automatically fill in your release code name (jammy for 22.04, focal for 20.04, and bionic for 18.04).
+
+Finally, refresh your packages again.
+
+```bash
+sudo apt update
+```
+
+If you forget to add the GPG key, then the above step would fail with an error message. Otherwise, let's get on with installing Docker on Ubuntu.
+
+### **3. Install Docker**
+
+> What is the difference between docker.io and docker-ce?
+
+> docker.io is the docker package that is offered by some popular Linux distributions (e.g. Ubuntu/Debian). docker-ce on the other hand, is the docker package from official Docker repository. Typically docker-ce more up-to-date and preferred.
+
+We will now install the docker-ce (and not docker.io package)
+
+```bash
+sudo apt install docker-ce
+```
+
+Purple screen means press ENTER. :)
+
+Recommended: you should make sure the created user is added to the docker group for seamless use of commands:
+
+```bash
+sudo usermod -aG docker $USER
+```
+
+Now let's reboot the system to make sure all is well.
+
+```bash
+sudo reboot
+```
+
+After rebooting, if using the browser droplet console, you can click reload and wait to get back into the console.
+
+
+
+**Reminder:** Any time you reboot with `sudo reboot`, you should switch to the user you setup as before with `su - `.
+
+### **4. Verify that Docker is Running on Ubuntu**
+
+There are many ways to check if Docker is running on Ubuntu. One way is to use the following command:
+
+```bash
+sudo systemctl status docker
+```
+
+You should see an output that says **active (running)** for status.
+
+
+
+Exit this log by pressing CTRL (or CMD) + C.
+
+### **5. Install the Latest Version of Docker Compose**
+
+The version of docker-compose packaged with the Linux distribution is probably old and will not work for us.
+
+Checking the releases on the [Docker Compose GitHub](https://github.com/docker/compose/releases), the last release is v2.26.1 (as of 4/6/24).
+
+You will have to manually download and install it. But fear not, it is quite easy.
+
+First, download the latest version of Docker Compose using the following command:
+
+```bash
+sudo curl -L https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
+```
+
+Next, make it executable using the following command:
+
+```bash
+sudo chmod +x /usr/local/bin/docker-compose
+```
+
+Docker Compose should now be installed on your Ubuntu system. Let's check to be sure.
+
+```bash
+docker-compose -v
+# output should be: Docker Compose version v2.20.2
+```
+
+If you get a permission denied error, like I did, reboot/switch to your created user again, and run `sudo chmod +x /usr/local/bin/docker-compose` again
+
+#### Note on Docker Compose Commands
+
+As of Docker Compose v2, `docker-compose` is now `docker compose`. This guide will use the old commands for now, but you should be aware of this change and that `docker compose` is often preferred.
+
+### **6. As part of this guide, I will recommend you have git and npm installed:**
+
+Though not technically required, having git and npm will make installing/updating very simple:
+
+```bash
+sudo apt install git nodejs npm
+```
+
+Cue the matrix lines.
+
+You can confirm these packages installed successfully with the following:
+
+```bash
+git --version
+node -v
+npm -v
+```
+
+
+
+> Note: this will install some pretty old versions, for npm in particular. For the purposes of this guide, however, this is fine, but this is just a heads up in case you try other things with node in the droplet. Do look up a guide for getting the latest versions of the above as necessary.
+
+**Ok, now that you have set up the Droplet, you will now setup the app itself**
+
+---
+
+## Part II: Setup LibreChat
+
+### **1. Clone down the repo**
+
+From the _droplet_ commandline (as your user, not root):
+
+```bash
+# clone down the repository
+git clone https://github.com/danny-avila/LibreChat.git
+
+# enter the project directory
+cd LibreChat/
+```
+
+### **2. Create LibreChat Config and Environment files**
+
+#### Config (librechat.yaml) File
+
+Next, we create the [LibreChat Config file](../install/configuration/custom_config.md), AKA `librechat.yaml`, allowing for customization of the app's settings as well as [custom endpoints](../install/configuration/ai_endpoints.md).
+
+Whether or not you want to customize the app further, it's required for the `deploy-compose.yml` file we are using, so we can create one with the bare-minimum value to start:
+
+```bash
+nano librechat.yaml
+```
+
+You will enter the editor screen, and you can paste the following:
+
+```yaml
+# For more information, see the Configuration Guide:
+# https://docs.librechat.ai/install/configuration/custom_config.html
+
+# Configuration version (required)
+version: 1.0.5
+# This setting caches the config file for faster loading across app lifecycle
+cache: true
+```
+
+Exit the editor with `CTRL + X`, then `Y` to save, and `ENTER` to confirm.
+
+#### Environment (.env) File
+
+The default values are enough to get you started and running the app, allowing you to provide your credentials from the web app.
+
+```bash
+# Copies the example file as your global env file
+cp .env.example .env
+```
+
+However, it's **highly recommended** you adjust the "secret" values from their default values for added security. The API startup logs will warn you if you don't.
+
+For conveninence, you can fork & run this replit to generate your own values:
+
+[https://replit.com/@daavila/crypto#index.js](https://replit.com/@daavila/crypto#index.js)
+
+```bash
+nano .env
+
+# FIND THESE VARIABLES AND REPLACE THEIR DEFAULT VALUES!
+
+# Must be a 16-byte IV (32 characters in hex)
+
+CREDS_IV=e2341419ec3dd3d19b13a1a87fafcbfb
+
+# Must be 32-byte keys (64 characters in hex)
+
+CREDS_KEY=f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0
+JWT_SECRET=16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef
+JWT_REFRESH_SECRET=eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418
+```
+
+If you'd like to provide any credentials for all users of your instance to consume, you should add them while you're still editing this file:
+
+```bash
+OPENAI_API_KEY=sk-yourKey
+```
+
+As before, exit the editor with `CTRL + X`, then `Y` to save, and `ENTER` to confirm.
+
+**That's it!**
+
+For thorough configuration, however, you should edit your .env file as needed, and do read the comments in the file and the resources below.
+
+```bash
+# if editing the .env file
+nano .env
+```
+
+This is one such env variable to be mindful of. This disables external signups, in case you would like to set it after you've created your account.
+
+```shell
+ALLOW_REGISTRATION=false
+```
+
+**Resources:**
+- [Tokens/Apis/etc](/docs/configuration/pre_configured_ai)
+- [User/Auth System](/docs/configuration/authentication)
+
+### **3. Start docker**
+
+```bash
+# should already be running, but just to be safe
+sudo systemctl start docker
+
+# confirm docker is running
+docker info
+```
+
+Now we can start the app container. For the first time, we'll use the full command and later we can use a shorthand command
+
+```bash
+sudo docker-compose -f ./deploy-compose.yml up -d
+```
+
+
+
+It's safe to close the terminal if you wish -- the docker app will continue to run.
+
+> Note: this is using a special compose file optimized for this deployed environment. If you would like more configuration here, you should inspect the deploy-compose.yml and Dockerfile.multi files to see how they are setup. We are not building the image in this environment since it's not enough RAM to properly do so. Instead, we pull the latest dev-api image of librechat, which is automatically built after each push to main.
+
+> If you are setting up a domain to be used with LibreChat, this compose file is using the nginx file located in client/nginx.conf. Instructions on this below in part V.
+
+### **4. Once the app is running, you can access it at `http://yourserverip`**
+
+#### Go back to the droplet page to get your server ip, copy it, and paste it into your browser!
+
+
+
+#### Sign up, log in, and enjoy your own privately hosted, remote LibreChat :)
+
+
+
+
+
+## Part III: Updating LibreChat
+
+I've made this step pretty painless, provided everything above was installed successfully and you haven't edited the git history.
+
+> Note: If you are working on an edited branch, with your own commits, for example, such as with edits to client/nginx.conf, you should inspect config/deployed-update.js to run some of the commands manually as you see fit. See part V for more on this.
+
+Run the following for an automated update
+
+```bash
+npm run update:deployed
+```
+
+**Stopping the docker container**
+
+```bash
+npm run stop:deployed
+```
+
+> This simply runs `docker-compose -f ./deploy-compose.yml down`
+
+**Starting the docker container**
+
+```bash
+npm run start:deployed
+```
+
+> This simply runs `docker-compose -f ./deploy-compose.yml up -d`
+
+**Check active docker containers**
+
+```bash
+docker ps
+```
+
+You can update manually without the scripts if you encounter issues.
+
+```bash filename="Stop the running container(s)""
+docker compose -f ./deploy-compose.yml down
+```
+
+```bash filename="Pull latest project changes"
+git pull
+```
+
+```bash filename="Pull the latest LibreChat image""
+docker compose -f ./deploy-compose.yml pull
+```
+
+```bash filename="Start LibreChat"
+docker compose -f ./deploy-compose.yml up
+```
+
+## Part IV: Editing the NGINX file (for custom domains and advanced configs)
+
+In case you would like to edit the NGINX file for whatever reason, such as pointing your server to a custom domain, use the following:
+
+```bash filename="First, stop the active instance if running"
+npm run stop:deployed
+```
+```bash filename="now you can safely edit"
+nano client/nginx.conf
+```
+
+I won't be walking you through custom domain setup or any other changes to NGINX, you can look into the [Cloudflare guide](/docs/remote/cloudflare), the [Traefik guide](/docs/remote/traefik) or the [NGINX guide](/docs/remote/nginx) to get you started with custom domains.
+
+However, I will show you what to edit on the LibreChat side for a custom domain with this setup.
+
+Since NGINX is being used as a proxy pass by default, I only edit the following:
+
+```shell
+# before
+server_name localhost;
+
+# after
+server_name custom.domain.com;
+```
+
+> Note: this works because the deploy-compose.yml file is using NGINX by default, unlike the main docker-compose.yml file. As always, you can configure the compose files as you need.
+
+Now commit these changes to a separate branch:
+
+```bash
+# create a new branch
+# example: git checkout -b edit
+git checkout -b
+
+# stage all file changes
+git add .
+```
+
+To commit changes to a git branch, you will need to identify yourself on git. These can be fake values, but if you would like them to sync up with GitHub, should you push this branch to a forked repo of LibreChat, use your GitHub email
+
+```bash
+# these values will work if you don't care what they are
+git config --global user.email "you@example.com"
+git config --global user.name "Your Name"
+
+# Now you can commit the change
+git commit -m "edited nginx.conf"
+```
+
+Updating on an edited branch will work a little differently now
+
+```bash
+npm run rebase:deployed
+```
+
+You should be all set!
+
+> **Warning** You will experience merge conflicts if you start significantly editing the branch and this is not recommended unless you know what you're doing
+
+> Note that any changes to the code in this environment won't be reflected because the compose file is pulling the docker images built automatically by GitHub
+
+## Part V: Use the Latest Stable Release instead of Latest Main Branch
+
+By default, this setup will pull the latest updates to the main branch of Librechat. If you would rather have the latest "stable" release, which is defined by the [latest tags](https://github.com/danny-avila/LibreChat/releases), you will need to edit deploy-compose.yml and commit your changes exactly as above in Part V. Be aware that you won't benefit from the latest feature as soon as they come if you do so.
+
+Let's edit `deploy-compose.yml`:
+
+```bash
+nano deploy-compose.yml
+```
+
+Change `librechat-dev-api` to `librechat-api`:
+
+```yaml
+image: ghcr.io/danny-avila/librechat-api:latest
+```
+
+Stage and commit as in Part V, and you're all set!
\ No newline at end of file
diff --git a/pages/docs/remote/huggingface.mdx b/pages/docs/remote/huggingface.mdx
new file mode 100644
index 0000000..cce046f
--- /dev/null
+++ b/pages/docs/remote/huggingface.mdx
@@ -0,0 +1,91 @@
+---
+title: HuggingFace
+description: Easily deploy LibreChat on Hugging Face Spaces
+---
+
+# Hugging Face Deployment
+
+## Create and Configure your Database (Required)
+
+The first thing you need is to create a MongoDB Atlas Database and get your connection string.
+
+Follow the instructions in this document: **[MongoDB Atlas](/docs/configuration/mongodb/mongodb_atlas)**
+
+## Getting Started
+
+**1.** Login or Create an account on **[Hugging Face](https://huggingface.co/)**
+
+**2.** Visit **[https://huggingface.co/spaces/LibreChat/template](https://huggingface.co/spaces/LibreChat/template)** and click on `Duplicate this Space` to copy the LibreChat template into your profile.
+
+> Note: It is normal for this template to have a runtime error, you will have to configure it using the following guide to make it functional.
+
+ 
+
+**3.** Name your Space and Fill the `Secrets` and `Variables`
+
+ >You can also decide here to make it public or private
+
+ 
+
+You will need to fill these values:
+
+| Secrets | Values |
+| --- | --- |
+| MONGO_URI | * use the string aquired in the previous step |
+| OPENAI_API_KEY | `user_provided` |
+| BINGAI_TOKEN | `user_provided` |
+| CHATGPT_TOKEN | `user_provided` |
+| ANTHROPIC_API_KEY | `user_provided` |
+| GOOGLE_KEY | `user_provided` |
+| CREDS_KEY | * see bellow |
+| CREDS_IV | * see bellow |
+| JWT_SECRET | * see bellow |
+| JWT_REFRESH_SECRET | * see bellow |
+
+> ⬆️ **Leave the value field blank for any endpoints that you wish to disable.**
+
+> ⚠️ setting the API keys and token to `user_provided` allows you to provide them safely from the webUI
+
+> * For `CREDS_KEY`, `CREDS_IV` and `JWT_SECRET` use this tool: **[Credentials Generator]/toolkit/creds_generator)**
+> * Run the tool a second time and use the new `JWT_SECRET` value for the `JWT_REFRESH_SECRET`
+
+| Variables | Values |
+| --- | --- |
+| APP_TITLE | LibreChat |
+| ALLOW_REGISTRATION | true |
+
+
+## Deployment
+
+**1.** When you're done filling the `secrets` and `variables`, click `Duplicate Space` in the bottom of that window
+
+ 
+
+
+**2.** The project will now build, this will take a couple of minutes
+
+ 
+
+
+**3.** When ready, `Building` will change to `Running`
+
+ 
+
+ And you will be able to access LibreChat!
+
+ 
+
+## Update
+ To update LibreChat, simply select `Factory Reboot` from the ⚙️Settings menu
+
+ 
+
+
+## Conclusion
+ You can now access it with from the current URL. If you want to access it without the Hugging Face overlay, you can modify this URL template with your info:
+
+ `https://username-projectname.hf.space/`
+
+ e.g. `https://cooluser-librechat.hf.space/`
+
+**🎉 Congratulation, you've sucessfully deployed LibreChat on Hugging Face! 🤗**
diff --git a/pages/docs/remote/index.mdx b/pages/docs/remote/index.mdx
new file mode 100644
index 0000000..9204916
--- /dev/null
+++ b/pages/docs/remote/index.mdx
@@ -0,0 +1,148 @@
+---
+title: Intro
+description: Introduction to deploying LibreChat, offering a comparison of various hosting and network services
+---
+
+# Deployment Introduction
+
+Welcome to the introductory guide for deploying LibreChat. This document provides an initial overview, featuring a comparison table and references to detailed guides, ensuring a thorough understanding of deployment strategies.
+
+In this guide, you will explore various options to efficiently deploy LibreChat in a variety of environments, customized to meet your specific requirements.
+
+Here's a nicely formatted version of the text you provided:
+
+## Minimum Requirements
+
+The minimum requirements for running LibreChat:
+
+- 1 GiB RAM
+- 1 vCPU
+
+**Note:** With everything enabled, you might consider increasing the RAM to 2GB for smoother operation.
+
+## Comparative Table
+
+> Note that the "Recommended" label indicates that these services are well-documented, widely used within the community, or have been successfully deployed by a significant number of users. As a result, we're able to offer better support for deploying LibreChat on these services
+
+### Hosting Services
+
+| **Service** | **Domain** | **Pros** | **Cons** | **Comments** | **Recommended** |
+|--------------------------------------------|---------------------------|------------------------------------------------------------|----------------------------------------|---------------------------------------------------------|-------------------------|
+| [DigitalOcean](/docs/remote/digitalocean) | Cloud Infrastructure | Intuitive interface, stable pricing | Smaller network footprint | Optimal for enthusiasts & small to medium businesses | ✅ Well Known, Reliable |
+| [HuggingFace](/docs/remote/huggingface) | AI/ML Solutions | ML/NLP specialization | Focused on ML applications | Excellent for AI/ML initiatives | ✅ Free |
+| [Railway](/docs/remote/railway) | App Deployment | Simplified app deployment | Limited access to containers | Very easy to get started | ✅ Easy |
+
+### Network Services
+
+| **Service** | **Domain** | **Pros** | **Cons** | **Comments** |
+|---------------------------------------|-----------------------------|-----------------------------------------------------|--------------------------------------------------|-------------------------------------------------|
+| [Cloudflare](/docs/remote/cloudflare) | Web Performance & Security | Global CDN, DDoS protection, ease of use | Customer support can be slow | Top choice for security enhancements |
+| [Nginx](/docs/remote/nginx) | Web Server, Reverse Proxy | High performance, stability, resource efficiency | Manual setup, limited extensions | Widely used for hosting due to its performance |
+| [ngrok](/docs/remote/ngrok) | Secure Tunneling | Easy to use, free tier available, secure tunneling | Requires client download, complex domain routing | Handy for local development tests |
+| [Traefik](/docs/remote/traefik) | Reverse Proxy, Load Balancer| Automatic service discovery, native cluster support | Configuration can be complex for beginners | Ideal for microservices and dynamic environments|
+
+
+
+**Cloudflare** is known for its extensive network that speeds up and secures internet services, with an intuitive user interface and robust security options on premium plans.
+
+**Ngrok** is praised for its simplicity and the ability to quickly expose local servers to the internet, making it ideal for demos and testing.
+
+**Nginx** is a high-performance web server that is efficient in handling resources and offers stability. It does, however, require manual setup and has fewer modules and extensions compared to other servers.
+
+**Traefik** is renowned for its automatic configuration updates and ease of deployment in container environments, appealing to DevOps for its integration with various back-ends and dynamic reconfiguration. It thrives in microservices architectures but may pose challenges for those new to cloud-native technologies.
+
+## Cloud Vendor Integration and Configuration
+
+The integration level with cloud vendors varies: from platforms enabling single-click LibreChat deployments like [Railway](/docs/remote/railway), through platforms leveraging Infrastructure as Code tools such as Azure with Terraform, to more traditional VM setups requiring manual configuration, exemplified by [DigitalOcean](digitalocean.md), Linode, and Hetzner.
+
+## Essential Security Considerations
+
+Venturing into the digital landscape reveals numerous threats to the security and integrity of your online assets. To safeguard your digital domain, it is crucial to implement robust security measures.
+
+When deploying applications on a global scale, it is essential to consider the following key factors to ensure the protection of your digital assets:
+
+1. Encrypting data in transit: Implementing HTTPS with SSL certificates is vital to protect your data from interception and eavesdropping attacks.
+2. Global accessibility implications: Understand the implications of deploying your application globally, including the legal and compliance requirements that vary by region.
+3. Secure configuration: Ensure that your application is configured securely, including the use of secure protocols, secure authentication, and authorization mechanisms.
+
+If you choose to use IaaS or Tunnel services for your deployment, you may need to utilize a reverse proxy such as [Nginx](/docs/remote/nginx), [Traefik](/docs/remote/traefik) or [Cloudflare](/docs/remote/cloudflare) to name a few.
+
+Investing in the appropriate security measures is crucial to safeguarding your digital assets and ensuring the success of your global deployment.
+
+## Choosing the Cloud vendor (e.g. platform)
+
+Choosing a cloud vendor, for the "real deployment" is crucial as it impacts cost, performance, security, and scalability. You should consider factors such as data center locations, compliance with industry standards, compatibility with existing tools, and customer support.
+
+There is a lot of options that differ in many aspects. In this section you can find some options that the team and the community uses that can help you in your first deployment.
+Once you gain more knowledge on your application usage and audience you will probably be in a position to decide what cloud vendor fits you the best for the long run.
+
+As said the cloud providers / platforms differ in many aspects. For our purpose we can assume that in our context your main concerns is will ease of use, security and (initial) cost. In case that you have more concerns like scaling, previous experience with any of the platforms or any other specific feature then you probably know better what platform fit's you and you can jump directly to the information that you are seeking without following any specific guide.
+
+## Choosing the Right Deployment Option for Your Needs
+
+The deployment options are listed in order from most effort and control to least effort and control
+
+> Each deployment option has its advantages and disadvantages, and the choice ultimately depends on the specific needs of your project.
+
+### 1. IaaS (Infrastructure as a Service)
+
+Infrastructure as a Service (IaaS) refers to a model of cloud computing that provides fundamental computing resources, such as virtual servers, network, and storage, on a pay-per-use basis. IaaS allows organizations to rent and access these resources over the internet, without the need for investing in and maintaining physical hardware. This model provides scalability, flexibility, and cost savings, as well as the ability to quickly and easily deploy and manage infrastructure resources in response to changing business needs.
+
+- [DigitalOcean](/docs/remote/digitalocean): User-friendly interface with predictable pricing.
+- Linode: Renowned for excellent customer support and straightforward pricing.
+- Hetzner: Prioritizes privacy and cost-effectiveness, ideal for European-centric deployments.
+
+#### For Iaas we recommend Docker Compose
+
+**Why Docker Compose?** We recommend Docker Compose for consistent deployments. This guide clearly outlines each step for easy deployment: [Docker - Linux remote install guide](/docs/remote/docker_linux)
+
+**Note:** There are two docker compose files in the repo
+
+1. **Development Oriented docker compose `docker-compose.yml`**
+2. **Deployment Oriented docker compose `deploy-compose.yml`**
+
+The main difference is that `deploy-compose.yml` includes Nginx, making its configuration internal to Docker.
+
+> Look at the [Nginx Guide](/docs/remote/nginx) for more information
+
+### 2. IaC (Infrastructure as Code)
+
+Infrastructure as Code (IaC) refers to the practice of managing and provisioning computing infrastructures through machine-readable definition files, as opposed to physical hardware configuration or interactive configuration tools. This approach promotes reproducibility, disposability, and scalability, particularly in modern cloud environments. IaC allows for the automation of infrastructure deployment, configuration, and management, resulting in faster, more consistent, and more reliable provisioning of resources.
+
+- Azure: Comprehensive services suitable for enterprise-level deployments
+
+**Note:** Digital Ocean, Linode, Hetzner also support IaC. While we lack a specific guide, you can try to adapt the adapt the Azure Guide for Terraform and help us contribute to its enhancement.
+
+### 3. PaaS (Platform as a Service)
+
+Platform as a Service (PaaS) is a model of cloud computing that offers a development and deployment environment in the cloud. It provides a platform for developers to build, test, and deploy applications, without the need for managing the underlying infrastructure. PaaS typically includes a range of resources such as databases, middleware, and development tools, enabling users to deliver simple cloud-based apps to sophisticated enterprise applications. This model allows for faster time-to-market, lower costs, and easier maintenance and scaling, as the service provider is responsible for maintaining the infrastructure, and the customer can focus on building, deploying and managing their applications.
+
+- [Hugging Face](/docs/remote/huggingface): Tailored for machine learning and NLP projects.
+- Render: Simplifies deployments with integrated CI/CD pipelines.
+- Heroku: Optimal for startups and quick deployment scenarios.
+
+### 4. One Click Deployment (PaaS)
+
+- [Railway](/docs/remote/railway): Popular one-click deployment solution
+- Zeabur: Pioneering effortless one-click deployment solutions.
+
+## Other / Network Services
+
+### 1. Tunneling
+
+Tunneling services allow you to expose a local development server to the internet, making it accessible via a public URL. This is particularly useful for sharing work, testing, and integrating with third-party services. It allows you to deploy your development computer for testing or for on-prem installation.
+
+- [Ngrok](/docs/remote/ngrok): Facilitates secure local tunneling to the internet.
+- [Cloudflare](/docs/remote/cloudflare): Enhances web performance and security.
+
+### 2. DNS Service
+
+- Cloudflare DNS service is used to manage and route internet traffic to the correct destinations, by translating human-readable domain names into machine-readable IP addresses. Cloudflare is a provider of this service, offering a wide range of features such as security, performance, and reliability. The Cloudflare DNS service provides a user-friendly interface for managing DNS records, and offers advanced features such as traffic management, DNSSEC, and DDoS protection.
+
+see also: [Cloudflare Guide](/docs/remote/cloudflare)
+
+## Conclusion
+
+In conclusion, the introduction of our deployment guide provides an overview of the various options and considerations for deploying LibreChat. It is important to carefully evaluate your needs and choose the path that best aligns with your organization's goals and objectives. Whether you prioritize ease of use, security, or affordability, our guide provides the necessary information to help you successfully deploy LibreChat and achieve your desired outcome. We hope that this guide will serve as a valuable resource for you throughout your deployment journey.
+
+Remember, our community is here to assist. Should you encounter challenges or have queries, our [Discord channel](https://discord.librechat.ai) and [troubleshooting discussion](https://github.com/danny-avila/LibreChat/discussions/categories/troubleshooting) are excellent resources for support and advice.
diff --git a/pages/docs/remote/nginx.mdx b/pages/docs/remote/nginx.mdx
new file mode 100644
index 0000000..241d7b4
--- /dev/null
+++ b/pages/docs/remote/nginx.mdx
@@ -0,0 +1,137 @@
+---
+title: Secure Deployment with Nginx
+description: Step-by-step guide for securing your LibreChat deployment with Nginx as a reverse proxy and HTTPS
+---
+
+# Secure Deployment with Nginx
+
+This guide covers the essential steps for securing your LibreChat deployment with an SSL/TLS certificate for HTTPS, setting up Nginx as a reverse proxy, and configuring your domain.
+
+## Prerequisites
+
+1. A cloud server (e.g., AWS, Google Cloud, Azure, Digital Ocean).
+2. A registered domain name.
+3. Terminal access to your cloud server.
+4. Node.js and NPM installed on your server.
+
+## Initial Setup
+
+### Pointing Your Domain to Your Server
+
+Before proceeding with certificate acquisition, point your domain to your cloud server's IP address. This step is foundational and must precede SSL certificate setup due to the time DNS records may require to propagate globally.
+
+1. Log in to your domain registrar's control panel.
+2. Navigate to DNS settings.
+3. Create an `A record` pointing your domain to the IP address of your cloud server.
+4. Wait for the DNS changes to propagate globally (you can check by pinging your domain: `ping your_domain.com`).
+
+## Obtain an SSL/TLS Certificate
+
+To secure your LibreChat application with HTTPS, you'll need an SSL/TLS certificate. Let's Encrypt offers free certificates:
+
+1. Install Certbot:
+ - For Ubuntu: `sudo apt-get install certbot python3-certbot-nginx`
+ - For CentOS: `sudo yum install certbot python2-certbot-nginx`
+
+2. Obtain the Certificate:
+ - Run `sudo certbot --nginx` to obtain and install the certificate automatically for Nginx.
+ - Follow the on-screen instructions. Certbot will ask for information and complete the validation process.
+ - Once successful, Certbot will store your certificate files.
+
+## Set Up Nginx as a Reverse Proxy
+
+Nginx acts as a reverse proxy, forwarding client requests to your LibreChat application. There are two deployment options:
+
+### Option A: Using the `deploy-compose.yml` Docker Compose (Recommended)
+
+The `deploy-compose.yml` file includes an Nginx container and uses the `client/nginx.conf` file for Nginx configuration. However, since `sudo certbot --nginx` extracts the certificate to the host configuration, you need to duplicate the certificate to the Docker containers.
+
+1. Update `client/nginx.conf` with your domain and certificate paths.
+2. Update `deploy-compose.yml` in the `client` section to mount the certificate files from the host:
+
+```yaml
+client:
+ # ...
+ volumes:
+ - ./client/nginx.conf:/etc/nginx/conf.d/default.conf
+ - /etc/letsencrypt/live/:/etc/letsencrypt/live/
+ - /etc/letsencrypt/archive/:/etc/letsencrypt/archive/
+ - /etc/letsencrypt/options-ssl-nginx.conf:/etc/letsencrypt/options-ssl-nginx.conf
+ - /etc/letsencrypt/ssl-dhparams.pem:/etc/letsencrypt/ssl-dhparams.pem
+```
+
+3. Stop any running instance: `npm run stop:deployed`
+4. Commit the changes to a new Git branch.
+5. Rebase the deployed instance: `npm run rebase:deployed`
+
+### Option B: Host-based Deployment without Docker
+
+If you're not using Docker, you can install and configure Nginx directly on the host:
+
+1. Install Nginx:
+ - Ubuntu: `sudo apt-get install nginx`
+ - CentOS: `sudo yum install nginx`
+
+2. Start Nginx: `sudo systemctl start nginx`
+
+3. Open the Nginx configuration file: `sudo nano /etc/nginx/sites-available/default`
+
+4. Replace the file content with the following, ensuring to replace `your_domain.com` with your domain and `app_port` with your application's port:
+
+```nginx filename="/etc/nginx/sites-available/default"
+server {
+ listen 80;
+ server_name your_domain.com;
+
+ location / {
+ proxy_pass http://localhost:app_port;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection 'upgrade';
+ proxy_set_header Host $host;
+ proxy_cache_bypass $http_upgrade;
+ }
+}
+```
+
+5. Check the Nginx configuration: `sudo nginx -t`
+6. Reload Nginx: `sudo systemctl reload nginx`
+
+## Run the Application
+
+1. Navigate to your application's directory:
+
+```bash filename="Replace 'LibreChat' with your actual application directory.
+cd LibreChat
+```
+
+2. Start your application using Docker Compose:
+
+```bash filename="Start your application"
+sudo docker-compose -f ./deploy-compose.yml up -d
+```
+
+## Web Application Firewall
+
+Nginx can be configured to act as a web application firewall (WAF) by leveraging the OWASP Core Rule Set (CRS), which provides a robust set of rules to protect against common web application vulnerabilities and attacks. Using OWASP CRS with Nginx can enhance the security of your LibreChat deployment by adding an additional layer of protection.
+
+1. Install OWASP CRS:
+
+ - Ubuntu: `sudo apt-get install nginx-modsecurity-crs`
+
+2. Enable ModSecurity in Nginx:
+ - Open your Nginx configuration file (e.g., `/etc/nginx/nginx.conf`).
+ - Add the following lines inside the `http` block:
+
+ ```yaml filename="nginx.conf"
+ modsecurity on;
+ modsecurity_rules_file /usr/share/nginx/modsecurity-crs/nginx-modsecurity.conf;
+ ```
+
+3. Configure OWASP CRS:
+ - The OWASP CRS package typically includes a configuration file (e.g., `/etc/nginx/modsecurity.d/nginx-modsecurity.conf`) where you can adjust various settings and rulesets based on your requirements.
+
+4. Reload Nginx:
+ - `sudo systemctl reload nginx`
+
+By enabling OWASP CRS in your Nginx configuration, you can leverage the comprehensive set of rules provided by the project to detect and mitigate various web application vulnerabilities and attacks, such as SQL injection, cross-site scripting (XSS), remote file inclusion, and more.
\ No newline at end of file
diff --git a/pages/docs/remote/ngrok.mdx b/pages/docs/remote/ngrok.mdx
new file mode 100644
index 0000000..eba6e7c
--- /dev/null
+++ b/pages/docs/remote/ngrok.mdx
@@ -0,0 +1,51 @@
+---
+title: ngrok
+description: Use Ngrok to tunnel your local server to the internet.
+---
+
+# Ngrok Installation
+
+To use ngrok for tunneling your local server to the internet, follow these steps:
+
+## Sign up
+
+1. Go to **[https://ngrok.com/](https://ngrok.com/)** and sign up for an account.
+
+## Docker Installation
+
+1. Copy your auth token from: **[https://dashboard.ngrok.com/get-started/your-authtoken](https://dashboard.ngrok.com/get-started/your-authtoken)**
+2. Open a terminal and run the following command: `docker run -d -it -e NGROK_AUTHTOKEN= ngrok/ngrok http 80`
+
+## Windows Installation
+
+1. Download the ZIP file from: **[https://ngrok.com/download](https://ngrok.com/download)**
+2. Extract the contents of the ZIP file using 7zip or WinRar.
+3. Run `ngrok.exe`.
+4. Copy your auth token from: **[https://dashboard.ngrok.com/get-started/your-authtoken](https://dashboard.ngrok.com/get-started/your-authtoken)**
+5. In the `ngrok.exe` terminal, run the following command: `ngrok config add-authtoken `
+6. If you haven't done so already, start LibreChat normally.
+7. In the `ngrok.exe` terminal, run the following command: `ngrok http 3080`
+
+You will see a link that can be used to access LibreChat.
+
+
+## Linux Installation
+
+1. Copy the command from: **[https://ngrok.com/download](https://ngrok.com/download)** choosing the **correct** architecture.
+2. Run the command in the terminal
+3. Copy your auth token from: **[https://dashboard.ngrok.com/get-started/your-authtoken](https://dashboard.ngrok.com/get-started/your-authtoken)**
+4. run the following command: `ngrok config add-authtoken `
+5. If you haven't done so already, start LibreChat normally.
+6. run the following command: `ngrok http 3080`
+
+## Mac Installation
+
+1. Download the ZIP file from: **[https://ngrok.com/download](https://ngrok.com/download)**
+2. Extract the contents of the ZIP file using a suitable Mac application like Unarchiver.
+3. Open Terminal.
+4. Navigate to the directory where you extracted ngrok using the `cd` command.
+5. Run ngrok by typing `./ngrok`.
+6. Copy your auth token from: **[https://dashboard.ngrok.com/get-started/your-authtoken](https://dashboard.ngrok.com/get-started/your-authtoken)**
+7. In the terminal where you ran ngrok, enter the following command: `ngrok authtoken `
+8. If you haven't done so already, start LibreChat normally.
+9. In the terminal where you ran ngrok, enter the following command: `./ngrok http 3080`
diff --git a/pages/docs/remote/railway.mdx b/pages/docs/remote/railway.mdx
new file mode 100644
index 0000000..a8023f4
--- /dev/null
+++ b/pages/docs/remote/railway.mdx
@@ -0,0 +1,54 @@
+---
+title: Railway (one-click)
+description: Deploying LibreChat on Railway
+---
+
+# Deploying LibreChat on Railway (One-Click Install)
+
+Railway provides a one-click install option for deploying LibreChat, making the process even simpler. Here's how you can do it:
+
+## Steps
+
+### **Visit the LibreChat repository**
+
+Go to the [LibreChat repository](https://github.com/danny-avila/LibreChat) on GitHub.
+
+### **Click the "Deploy on Railway" button**
+
+
+
+(The button is also available in the repository's README file)
+
+### **Log in or sign up for Railway**
+
+If you're not already logged in to Railway, you'll be prompted to log in or sign up for a free account.
+
+### **Configure environment variables**
+
+Railway will automatically detect the required environment variables for LibreChat. Review the configuration of the three containers and click `Save Config` after reviewing each of them.
+
+
+
+The default configuration will get you started, but for more advanced features, you can consult our documentation on the subject: [Environment Variables](/docs/configuration/dotenv)
+
+### **Deploy**
+
+Once you've filled in the required environment variables, click the "Deploy" button. Railway will handle the rest, including setting up a PostgreSQL database and building/deploying your LibreChat instance.
+
+
+
+### **Access your LibreChat instance**
+
+After the deployment is successful, Railway will provide you with a public URL where you can access your LibreChat instance.
+
+That's it! You have successfully deployed LibreChat on Railway using the one-click install process. You can now start using and customizing your LibreChat instance as needed.
+
+## Additional Tips
+
+- Regularly check the LibreChat repository for updates and redeploy your instance to receive the latest features and bug fixes.
+
+For more detailed instructions and troubleshooting, refer to the official LibreChat documentation and the Railway guides.
\ No newline at end of file
diff --git a/pages/docs/remote/traefik.mdx b/pages/docs/remote/traefik.mdx
new file mode 100644
index 0000000..24e19d5
--- /dev/null
+++ b/pages/docs/remote/traefik.mdx
@@ -0,0 +1,92 @@
+---
+title: Traefik
+description: Learn how to use Traefik as a reverse proxy and load balancer to expose your LibreChat instance securely over HTTPS with automatic SSL/TLS certificate management.
+---
+
+# Using Traefik with LibreChat on Docker
+
+[Traefik](https://traefik.io/) is a modern HTTP reverse proxy and load balancer that makes it easy to deploy and manage your services. If you're running LibreChat on Docker, you can use Traefik to expose your instance securely over HTTPS with automatic SSL certificate management.
+
+## Prerequisites
+
+- Docker and Docker Compose installed on your system
+- A domain name pointing to your server's IP address
+
+## Configuration
+
+### Create a Docker network for Traefik
+
+ ```bash filename="Create a Docker network for Traefik"
+ docker network create web
+ ```
+
+### Configure Traefik and LibreChat
+
+ In your docker-compose.override.yml file, add the following configuration:
+
+```yaml filename="docker-compose.override.yml"
+version: '3'
+
+services:
+ api:
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.librechat.rule=Host(`your.domain.name`)"
+ - "traefik.http.routers.librechat.entrypoints=websecure"
+ - "traefik.http.routers.librechat.tls.certresolver=leresolver"
+ - "traefik.http.services.librechat.loadbalancer.server.port=3080"
+ networks:
+ - librechat_default
+ volumes:
+ - ./librechat.yaml:/app/librechat.yaml
+
+ traefik:
+ image: traefik:v2.9
+ ports:
+ - "80:80"
+ - "443:443"
+ volumes:
+ - "/var/run/docker.sock:/var/run/docker.sock:ro"
+ - "./letsencrypt:/letsencrypt"
+ networks:
+ - librechat_default
+ command:
+ - "--log.level=DEBUG"
+ - "--api.insecure=true"
+ - "--providers.docker=true"
+ - "--providers.docker.exposedbydefault=false"
+ - "--entrypoints.web.address=:80"
+ - "--entrypoints.websecure.address=:443"
+ - "--certificatesresolvers.leresolver.acme.tlschallenge=true"
+ - "--certificatesresolvers.leresolver.acme.email=your@email.com"
+ - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
+
+# other configs here #
+
+# NOTE: This needs to be at the bottom of your docker-compose.override.yml
+networks:
+ web:
+ external: true
+ librechat_default:
+ external: true
+```
+
+ Replace `your@email.com` with your email address for Let's Encrypt certificate notifications.
+
+ see: [Docker Override](/docs/configuration/docker_override) for more info.
+
+### Start the containers
+
+ ```bash filename="Start the containers"
+ docker-compose up -d
+ ```
+
+ This will start Traefik and LibreChat containers. Traefik will automatically obtain an SSL/TLS certificate from Let's Encrypt and expose your LibreChat instance securely over HTTPS.
+
+You can now access your LibreChat instance at `https://your.domain.name`. Traefik will handle SSL/TLS termination and reverse proxy requests to your LibreChat container.
+
+## Additional Notes
+
+- The Traefik configuration listens on ports 80 and 443 for HTTP and HTTPS traffic, respectively. Ensure that these ports are open on your server's firewall.
+- Traefik stores SSL/TLS certificates in the `./letsencrypt` directory on your host machine. You may want to back up this directory periodically.
+- For more advanced configuration options, refer to the official Traefik documentation: [https://doc.traefik.io/](https://doc.traefik.io/)
diff --git a/pages/docs/user_guides/_meta.ts b/pages/docs/user_guides/_meta.ts
new file mode 100644
index 0000000..62aacc4
--- /dev/null
+++ b/pages/docs/user_guides/_meta.ts
@@ -0,0 +1,3 @@
+export default {
+ index: 'Intro',
+}
diff --git a/pages/docs/user_guides/ai_overview.mdx b/pages/docs/user_guides/ai_overview.mdx
new file mode 100644
index 0000000..6412ce5
--- /dev/null
+++ b/pages/docs/user_guides/ai_overview.mdx
@@ -0,0 +1,30 @@
+---
+title: AI Overview
+description: Understand the pre-configured endpoints in LibreChat
+---
+
+# AI Overview
+
+LibreChat allows you to configure and integrate various AI providers, APIs, and their corresponding credentials. This enables you to utilize different AI models, settings, and functionalities based on your needs and requirements.
+
+## Key Concepts
+
+- **Endpoints**: An endpoint refers to an AI provider, configuration, or API that determines the available models and settings for a chat request. Examples include OpenAI, Google, Plugins, Anthropic, and others.
+
+- **Presets**: A preset is a saved combination of an endpoint, model, and conversation settings. You can create and manage multiple presets to suit different use cases.
+
+- **Default Endpoint**: If you have multiple endpoints configured, you can specify a default endpoint to be used when creating a new conversation.
+
+- **Default Preset**: Similarly, you can set a default preset to be used automatically when starting a new conversation.
+
+## Functionality
+
+1. **AI Providers**: Set up various pre-configured AI providers by providing the necessary credentials and API keys.
+
+2. **Manage Endpoints**: Enable or disable different endpoints based on your requirements.
+
+3. **Create and Manage Presets**: Define and save specific combinations of endpoints, models, and conversation settings as presets.
+
+4. **Set Default Endpoint and Preset**: Specify a default endpoint and preset to streamline the process of starting new conversations. Here's a video to demonstrate: **[Setting a Default Preset](https://github.com/danny-avila/LibreChat/assets/110412045/bbde830f-18d9-4884-88e5-1bd8f7ac585d)**
+
+5. **Customize Configurations**: Explore advanced configuration options, such as adding custom endpoints like Ollama, Mistral AI or Openrouter.
diff --git a/pages/docs/user_guides/authentication.mdx b/pages/docs/user_guides/authentication.mdx
new file mode 100644
index 0000000..7b9e6ed
--- /dev/null
+++ b/pages/docs/user_guides/authentication.mdx
@@ -0,0 +1,30 @@
+---
+title: Authentication System
+description: Quick overview of the user authentication system of LibreChat, which offers secure and easy email and social logins.
+---
+
+# User Authentication System
+
+LibreChat has a user authentication system that allows users to sign up and log in securely and easily. The system is scalable and can handle a large number of concurrent users without compromising performance or security.
+
+By default, we have email signup and login enabled, which means users can create an account using their email address and a password. They can also reset their password if they forget it.
+
+Additionally, our system can integrate social logins from various platforms such as Google, GitHub, Discord, OpenID, and more. This means users can log in using their existing accounts on these platforms, without having to create a new account or remember another password.
+
+**For further details, refer to the configuration guides provided here: [Authentication](/docs/configuration/authentication)**
+
+
+- When you run the app for the first time, you need to create a new account by clicking on "Sign up" on the login page. The first account you make will be the admin account. The admin account doesn't have any special features right now, but it might be useful for the admin dashboard to manage other users later.
+- The first account created should ideally be a local account (email and password).
+
+
+
+
+
+ 
+
+
+
+ 
+
+
\ No newline at end of file
diff --git a/pages/docs/user_guides/fork.mdx b/pages/docs/user_guides/fork.mdx
new file mode 100644
index 0000000..8029ad3
--- /dev/null
+++ b/pages/docs/user_guides/fork.mdx
@@ -0,0 +1,117 @@
+---
+title: Forking Messages and Conversations
+description: A guide on how to use the "Fork Messages/Conversations" feature in our app to create new conversations from specific messages with desired behavior.
+---
+
+import Image from 'next/image'
+
+# Forking Messages and Conversations
+
+
+
+The "Fork Messages and Conversations" feature can be incredibly useful for various reasons:
+
+1. **Focused discussions:** Sometimes, during a conversation with an AI, users may want to explore a specific subtopic or idea without losing the context of the main conversation. By forking a conversation from a specific message, users can create a separate discussion thread that focuses solely on that particular aspect while maintaining the original conversation intact.
+
+2. **Branching scenarios:** In some cases, users may want to explore different paths or scenarios based on a specific message. The forking feature allows users to create multiple branches from a single point in the conversation, enabling them to investigate various outcomes or possibilities without affecting the main conversation flow.
+
+3. **Preserving context:** When forking a conversation, users can choose to include visible messages, related branches, or all messages up to a specific point. This helps maintain the necessary context for the forked conversation, ensuring that the AI has sufficient information to provide relevant and accurate responses.
+
+4. **Collaboration and sharing:** Users may want to share specific parts of a conversation with others without revealing the entire chat history. By forking a conversation from a specific message, users can create a standalone discussion that can be easily shared with colleagues or friends, allowing for collaboration or seeking input on a particular topic.
+
+5. **Organizing thoughts:** In lengthy conversations with an AI, users may generate multiple ideas or topics that deserve further exploration. The forking feature allows users to organize their thoughts by creating separate conversation threads for each idea, making it easier to revisit and develop them independently.
+
+6. **Experimenting with different approaches:** Users may want to test different approaches or prompts to see how the AI responds. By forking a conversation, users can experiment with various strategies without disrupting the main conversation, comparing the outcomes, and learning from the AI's responses.
+
+Overall, that feature in Librechat empowers users to have more control over their conversations, explore ideas in depth, and maintain organized and focused discussions with the AI assistant.
+
+## Forking Options
+
+Use these settings to fork messages with the desired behavior.
+
+Forking refers to creating a new conversation that starts/ends from specific messages in the current conversation, creating a copy according to the options selected.
+
+The "target message" refers to either the message the popup was opened from, or, if you check "Start fork here", the latest message in the conversation.
+
+
+### Visible messages only:
+This option forks only the visible messages; in other words, the direct path to the target message, without any branches.
+
+
+
+
+
+
+
+
+
+
+
+
+### Include related branches:
+This option forks the visible messages, along with related branches; in other words, the direct path to the target message, including branches along the path.
+
+
+
+
+
+
+
+
+
+
+
+### Include all to/from here (default):
+This option forks all messages leading up to the target message, including its neighbors; in other words, all message branches, whether or not they are visible or along the same path, are included.
+
+
+
+
+
+
+
+
+
+
+
+## Additional Options
+
+- **Start fork here:** If checked, forking will commence from this message to the latest message in the conversation, according to the behavior selected above.
+
+
+
+
+
+
+
+
+
+
+
+- **Remember:** Check to remember the options you select for future usage, making it quicker to fork conversations as preferred.
+
+
+
+
+
+
+
+
+
+
+
+- Alternatively you can control the default behavior in the settings menu:
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/docs/user_guides/import_convos.mdx b/pages/docs/user_guides/import_convos.mdx
new file mode 100644
index 0000000..567a93d
--- /dev/null
+++ b/pages/docs/user_guides/import_convos.mdx
@@ -0,0 +1,36 @@
+---
+title: Import Conversations
+description: Conversations Import allows user to import conversations exported from other GPT chat applications. Currently, we support importing conversations from ChatGPT, ChatbotUI v1, and LibreChat itself.
+---
+# Import Conversations
+
+Conversations Import allows user to import conversations exported from other GPT chat applications. Currently, we support importing conversations from [ChatGPT](https://chatgpt.com/), [ChatbotUI v1](https://github.com/mckaywrigley/chatbot-ui/tree/b865b0555f53957e96727bc0bbb369c9eaecd83b?tab=readme-ov-file#legacy-code), and LibreChat itself.
+
+The Import functionality is available in the "Settings" -> "Data Controls" section.
+
+## How to import conversations from Chat GPT
+
+1. Follow the [ChatGPT export instructions](https://help.openai.com/en/articles/7260999-how-do-i-export-my-chatgpt-history-and-data) to export your conversations.
+2. You should get a link to download archive in you email.
+3. Download the archive. It should be a zip file with random name like: _d119d98bb3711aff7a2c73bcc7ea53d96c984650d8f7e033faef78386a9907-2024-01-01-10-30-00.zip_
+4. Extract the content of the zip file.
+5. Navigate to LibreChat Settings -> Data Controls
+
+
+ 
+
+
+
+ 
+
+
+6. Click on the "Import" button and select `conversations.json` file from the extracted archive. It will start importing the conversations.
+7. Shortly you will get a notification that the import is complete.
+
+
+
+## Sharing on Discord
+
+Join us on [discord](https://discord.librechat.ai) and see our **[#presets](https://discord.com/channels/1086345563026489514/1093249324797935746)** channel where thousands of presets are shared by users worldwide. Check out pinned posts for popular presets!
\ No newline at end of file
diff --git a/pages/docs/user_guides/index.mdx b/pages/docs/user_guides/index.mdx
new file mode 100644
index 0000000..fb40225
--- /dev/null
+++ b/pages/docs/user_guides/index.mdx
@@ -0,0 +1,20 @@
+---
+title: Intro
+description: Collection of "user guides" providing an overview of various features offered by LibreChat
+---
+
+import Image from 'next/image'
+
+# User Guides
+
+Whether you're a new user or looking to explore more advanced features, this comprehensive collection is designed to help you navigate through the various functionalities of LibreChat seamlessly.
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/docs/user_guides/mod_system.mdx b/pages/docs/user_guides/mod_system.mdx
new file mode 100644
index 0000000..294efe4
--- /dev/null
+++ b/pages/docs/user_guides/mod_system.mdx
@@ -0,0 +1,36 @@
+---
+title: Automated Moderation
+description: The Automated Moderation System uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+---
+
+## Automated Moderation System (optional)
+The Automated Moderation System uses a scoring mechanism to track user violations. As users commit actions like excessive logins, registrations, or messaging, they accumulate violation scores. Upon reaching a set threshold, the user and their IP are temporarily banned. This system ensures platform security by monitoring and penalizing rapid or suspicious activities.
+
+In production, you should have Cloudflare or some other DDoS protection in place to really protect the server from excessive requests, but these changes will largely protect you from the single or several bad actors targeting your deployed instance for proxying.
+
+### Notes
+
+- Uses Caching for basic security and violation logging (bans, concurrent messages, exceeding rate limits)
+ - In the near future, I will add **Redis** support for production instances, which can be easily injected into the current caching setup
+- Exceeding any of the rate limiters (login/registration/messaging) is considered a violation, default score is 1
+- Non-browser origin is a violation
+- Default score for each violation is configurable
+- Enabling any of the limiters and/or bans enables caching/logging
+- Violation logs can be found in the data folder, which is created when logging begins: `librechat/data`
+ - **Only violations are logged**
+ - `violations.json` keeps track of the total count for each violation per user
+ - `logs.json` records each individual violation per user
+- Ban logs are stored in MongoDB under the `logs` collection. They are transient as they only exist for the ban duration
+ - If you would like to remove a ban manually, you would have to remove them from the database manually and restart the server
+ - **Redis** support is also planned for this.
+
+### Rate Limiters
+
+The project's current rate limiters are as follows (see below under setup for default values):
+
+- Login and registration rate limiting
+- `Optional:{:hack}` Concurrent Message limiting (only X messages at a time per user)
+- `Optional:{:hack}` Message limiting (how often a user can send a message, configurable by IP and User)
+- `Optional:{:hack}` File Upload limiting (configurable through [`librechat.yaml` config file](/docs/configuration/librechat_yaml/object_structure/config#ratelimits))
+
+**For further details, refer to the configuration guide provided here: [Automated Moderation](/docs/configuration/mod_system)**
\ No newline at end of file
diff --git a/pages/docs/user_guides/mongodb.mdx b/pages/docs/user_guides/mongodb.mdx
new file mode 100644
index 0000000..6a681b8
--- /dev/null
+++ b/pages/docs/user_guides/mongodb.mdx
@@ -0,0 +1,43 @@
+---
+title: MongoDB
+description: Why LibreChat Uses MongoDB
+---
+
+# Why LibreChat Uses MongoDB
+
+MongoDB, a popular NoSQL database, was chosen as the core database for LibreChat due to its flexibility, scalability, and ability to handle diverse data structures efficiently. Here are some key reasons why MongoDB is an excellent fit for LibreChat:
+
+
+
+
+
+## 1. Flexible Data Model
+MongoDB's document-based data model allows for storing and retrieving data in a flexible and dynamic manner. Unlike traditional relational databases, MongoDB doesn't require a fixed schema, making it easier to adapt to changing data requirements. This flexibility is essential for LibreChat, as it needs to store various types of data, such as conversation histories, user profiles, presets, API keys, and more, without being constrained by a rigid table structure.
+
+## 2. Efficient Storage of Conversation Histories
+One of the primary use cases for LibreChat is to store and retrieve conversation histories. MongoDB's ability to store nested data structures as JSON-like documents makes it an excellent choice for storing conversation histories, which can include complex data structures like messages, timestamps, and metadata.
+
+## 3. Secure Storage of Sensitive Data
+LibreChat handles sensitive data, such as API keys and encrypted user passwords. MongoDB's built-in support for data encryption at rest and in transit ensures that this sensitive information remains secure and protected from unauthorized access.
+
+## 4. Horizontal Scalability
+As LibreChat grows and attracts more users, its data storage requirements will increase. MongoDB's horizontal scalability allows for scaling out by adding more servers to a cluster, providing the ability to handle larger amounts of data and higher traffic loads without compromising performance.
+
+## 5. Cross-Device Accessibility
+LibreChat aims to provide a seamless experience across multiple devices, allowing users to access their data and conversation histories from different devices. MongoDB's replication and sharding capabilities ensure that data is consistently available and accessible, enabling users to pick up their conversations where they left off, regardless of the device they're using.
+
+## 6. Developer Productivity
+MongoDB's intuitive query language and rich ecosystem of tools and libraries contribute to faster development cycles and increased developer productivity. This aligns well with LibreChat's goal of being an open-source project, fostering collaboration and contributions from the developer community.
+
+By leveraging MongoDB's strengths, LibreChat can efficiently manage and store diverse data structures, ensure data security and availability, and provide a seamless cross-device experience for its users. MongoDB's flexibility, scalability, and developer-friendly features make it an ideal choice for powering the core functionalities of LibreChat.
+
+
+## Note
+
+
+**Note:** If you're running LibreChat on a processor that doesn't have SSE4.2, AVX support, or other required CPU features, you'll need to use an older but compatible version of MongoDB with the Docker installation. Specifically, you should use the `mongo:4.4.18` image, which is compatible with processors without these features.
+
+To use this older MongoDB version with the LibreChat Docker installation, you'll need to utilize the `docker-compose.override.yml` file. This override file allows you to specify the MongoDB version you want to use, overriding the default version included in the main `docker-compose.yml` file.
+
+For more information on using the `docker-compose.override.yml` file and configuring an older MongoDB version for your Docker installation, please refer to our [Docker Override Configuration Guide](/docs/configuration/docker_override).
+
\ No newline at end of file
diff --git a/pages/docs/user_guides/password_reset.mdx b/pages/docs/user_guides/password_reset.mdx
new file mode 100644
index 0000000..a505d06
--- /dev/null
+++ b/pages/docs/user_guides/password_reset.mdx
@@ -0,0 +1,27 @@
+---
+title: Password Reset
+description: This feature enables email-based password reset functionality for your LibreChat server.
+---
+
+# Email and Password Reset
+
+
+
+
+
+## Overview
+
+This feature enables email-based password reset functionality for your LibreChat server. You can configure it to work with various email services, including Gmail and custom mail servers.
+
+## Key Features
+
+* Supports multiple email services, including Gmail and custom mail servers
+* Allows for basic and advanced configuration options
+* Enables email-based password reset functionality for your LibreChat server
+
+## Setup Options
+
+* Basic Configuration: Use predefined services with minimal configuration
+* Advanced Configuration: Configure generic SMTP services or customize settings for predefined providers
+
+**For further details, refer to the configuration guides provided here: [Password Reset](/docs/configuration/authentication/password_reset)**
\ No newline at end of file
diff --git a/pages/docs/user_guides/plugins.mdx b/pages/docs/user_guides/plugins.mdx
new file mode 100644
index 0000000..2b3dbe6
--- /dev/null
+++ b/pages/docs/user_guides/plugins.mdx
@@ -0,0 +1,55 @@
+---
+title: Plugins
+description: This doc introduces the plugins endpoint, which enables you to use different LLMs and tools with more flexibility and control. You can change your settings and plugins on the fly, and use plugins to access various sources of information and assistance.
+---
+# Plugins Endpoint
+
+
+
+
+The plugins endpoint opens the door to prompting LLMs in new ways other than traditional input/output prompting.
+
+The first step is using chain-of-thought prompting & **["agency"](https://zapier.com/blog/ai-agent/)** for using plugins/tools in a fashion mimicing the official ChatGPT Plugins feature.
+
+More than this, you can use this endpoint for changing your conversation settings mid-conversation. Unlike the official ChatGPT site and all other endpoints, you can switch models, presets, and settings mid-convo, even when you have no plugins selected. This is useful if you first want a creative response from GPT-4, and then a deterministic, lower cost response from GPT-3. Soon, you will be able to use Google, HuggingFace, local models, all in this or a similar endpoint in the same modular manner.
+
+## Using Plugins
+
+The LLM process when using Plugins is illustrated below.
+
+
+
+**When you open the settings with the Plugins endpoint selected, you will view the default settings for the Completion Phase.**
+
+Clicking on **"Show Agent Settings"** will allow you to modify parameters for the thinking phase
+
+
+
+---
+
+
+
+- You can specify which plugins you would like to select from by installing/uninstalling them in the Plugin store
+
+## Notes
+- Every additional plugin selected will increase your token usage as there are detailed instructions the LLM needs for each one
+- For best use, be selective with plugins per message and narrow your requests as much as possible
+- If you need help coming up with a good plugin prompt, ask the LLM for suggestions before using one!
+- Chain-of-thought prompting (plugin use) will always be more expensive than regular input/output prompting, so be sure it meets your need.
+- Currently, the cheapest use will be to use gpt-3.5 for both phases
+- From my testing, the best "bang for your buck" will be to use gpt-3.5 for the thinking phase, and gpt-4 for completion.
+- Adding to above, if you ask for a poem and an image at the same time, it may work, but both may suffer in quality
+ - Instead, ask for a poem first with creative settings
+ - Then, ask for a good prompt for Stable Diffusion based on the poem
+ - Finally, use the Stable Diffusion plugin by referencing the pre-generated prompt
+- Presets are only available when no Plugins are selected as the final review of the thinking phase has a specific system message.
+
+## Showcase
+
+
+
+
+
+## Configuration
+
+See our Tools and Plugins configuration guides for more info: [Tools and Plugins Configuration](/docs/configuration/tools)
diff --git a/pages/docs/user_guides/presets.mdx b/pages/docs/user_guides/presets.mdx
new file mode 100644
index 0000000..df2ceab
--- /dev/null
+++ b/pages/docs/user_guides/presets.mdx
@@ -0,0 +1,91 @@
+---
+title: Presets
+description: The "presets" feature in LibreChat is a powerful tool that allows users to save and load predefined settings for their conversations. Users can import and export these presets as JSON files, set a default preset, and share them with others on Discord.
+---
+# Guide to Using the "Presets" Feature
+
+The "presets" feature in our app is a powerful tool that allows users to save and load predefined settings for their conversations. Users can import and export these presets as JSON files, set a default preset, and share them with others on Discord.
+
+
+
+## Create a Preset:
+
+- Go in the model settings
+
+
+
+- Choose the model, give it a name, some custom instructions, and adjust the parameters if needed
+
+
+
+- Test it
+
+
+
+- Go back in the model advanced settings, and tweak it if needed. When you're happy with the result, click on `Save As Preset` (from the model advanced settings)
+
+
+
+- Give it a proper name, and click save
+
+
+
+- Now you can select it from the preset menu!
+
+
+
+## Parameters Explained:
+
+- **Preset Name:**
+ - This is where you name your preset for easy identification.
+
+- **Endpoint:**
+ - Choose the endpoint, such as openAI, that you want to use for processing the conversation.
+
+- **Model:**
+ - Select the model like `gpt-3.5-turbo` that will be used for generating responses.
+
+- **Custom Name:**
+ - Optionally provide a custom name for your preset. This is the name that will be shown in the UI when using it.
+
+- **Custom Instructions:**
+ - Define instructions or guidelines that will be displayed before each prompt to guide the user in providing input.
+
+- **Temperature:**
+ - Adjust this parameter to control the randomness of the model's output. A higher value makes the output more random, while a lower value makes it more focused and deterministic.
+
+- **Top P:**
+ - Control the nucleus sampling parameter to influence the diversity of generated text. Lower values make text more focused while higher values increase diversity.
+
+- **Frequency Penalty:**
+ - Use this setting to penalize frequently occurring tokens and promote diversity in responses.
+
+- **Presence Penalty:**
+ - Adjust this parameter to penalize new tokens that are introduced into responses, controlling repetition and promoting consistency.
+
+## Importing/Exporting Presets
+
+You can easily import or export presets as JSON files by clicking on either 'Import' or 'Export' buttons respectively. This allows you to share your customized settings with others or switch between different configurations quickly.
+
+
+
+To export a preset, first go in the preset menu, then click on the button to edit the selected preset
+
+
+
+Then in the bottom of the preset settings you'll have the option to export it.
+
+
+
+
+
+## Setting Default Preset
+
+Choose a preset as default so it loads automatically whenever you start a new conversation. This saves time if you often use specific settings.
+
+
+
+
+## Sharing on Discord
+
+Join us on [discord](https://discord.librechat.ai) and see our **[#presets ](https://discord.com/channels/1086345563026489514/1093249324797935746)** channel where thousands of presets are shared by users worldwide. Check out pinned posts for popular presets!
\ No newline at end of file
diff --git a/pages/docs/user_guides/rag_api.mdx b/pages/docs/user_guides/rag_api.mdx
new file mode 100644
index 0000000..9df74e6
--- /dev/null
+++ b/pages/docs/user_guides/rag_api.mdx
@@ -0,0 +1,73 @@
+---
+title: RAG API (Chat with Files)
+description: Retrieval-Augmented Generation (RAG) API for document indexing and retrieval using Langchain and FastAPI. This API integrates with LibreChat to provide context-aware responses based on user-uploaded files.
+---
+
+# RAG API
+
+The **RAG (Retrieval-Augmented Generation) API** is a powerful tool that integrates with LibreChat to provide context-aware responses based on user-uploaded files.
+
+It leverages LangChain, PostgresQL + PGVector, and Python FastAPI to index and retrieve relevant documents, enhancing the conversational experience.
+
+**For further details, refer to the configuration guide provided here: [RAG API Configuration](/docs/configuration/rag_api)**
+
+
+
+---
+
+**Currently, this feature is available to all Custom Endpoints, OpenAI, Azure OpenAi, Anthropic, and Google.**
+
+OpenAI Assistants have their own implementation of RAG through the "Retrieval" capability. Learn more about it [here.](https://platform.openai.com/docs/assistants/tools/knowledge-retrieval)
+
+It will still be useful to implement usage of the RAG API with the Assistants API since OpenAI charges for both file storage, and use of "Retrieval," and will be introduced in a future update.
+
+Plugins support is not enabled as the whole "plugin/tool" framework will get a complete rework soon, making tools available to most endpoints (ETA Summer 2024).
+
+**Still confused about RAG?** [Read the section I wrote below](#what-is-rag) explaining the general concept in more detail with a link to a helpful video.
+
+## What is RAG?
+
+RAG, or Retrieval-Augmented Generation, is an AI framework designed to improve the quality and accuracy of responses generated by large language models (LLMs). It achieves this by grounding the LLM on external sources of knowledge, supplementing the model's internal representation of information.
+
+
+## Features
+
+- **Document Indexing**: The RAG API indexes user-uploaded files, creating embeddings for efficient retrieval.
+- **Semantic Search**: It performs semantic search over the indexed documents to find the most relevant information based on the user's input.
+- **Context-Aware Responses**: By augmenting the user's prompt with retrieved information, the API enables LibreChat to generate more accurate and contextually relevant responses.
+- **Asynchronous Processing**: The API supports asynchronous operations for improved performance and scalability.
+- **Flexible Configuration**: It allows customization of various parameters such as chunk size, overlap, and embedding models.
+
+### Key Benefits of RAG
+
+1. **Access to up-to-date and reliable facts**: RAG ensures that the LLM has access to the most current and reliable information by retrieving relevant facts from an external knowledge base.
+2. **Transparency and trust**: Users can access the model's sources, allowing them to verify the accuracy of the generated responses and build trust in the system.
+3. **Reduced data leakage and hallucinations**: By grounding the LLM on a set of external, verifiable facts, RAG reduces the chances of the model leaking sensitive data or generating incorrect or misleading information.
+4. **Lower computational and financial costs**: RAG reduces the need for continuous training and updating of the model's parameters, potentially lowering the computational and financial costs of running LLM-powered chatbots in an enterprise setting.
+
+### How RAG Works
+
+RAG consists of two main phases: retrieval and content generation.
+
+1. **Retrieval Phase**: Algorithms search for and retrieve snippets of information relevant to the user's prompt or question from an external knowledge base. In an open-domain, consumer setting, these facts can come from indexed documents on the internet. In a closed-domain, enterprise setting, a narrower set of sources are typically used for added security and reliability.
+2. **Generative Phase**: The retrieved external knowledge is appended to the user's prompt and passed to the LLM. The LLM then draws from the augmented prompt and its internal representation of its training data to synthesize a tailored, engaging answer for the user. The answer can be passed to a chatbot with links to its sources.
+
+### Challenges and Ongoing Research
+
+While RAG is currently one of the best-known tools for grounding LLMs on the latest, verifiable information and lowering the costs of constant retraining and updating, it's not perfect. Some challenges include:
+
+1. **Recognizing unanswerable questions**: LLMs need to be explicitly trained to recognize questions they can't answer based on the available information. This may require fine-tuning on thousands of examples of answerable and unanswerable questions.
+2. **Improving retrieval and generation**: Ongoing research focuses on innovating at both ends of the RAG process: improving the retrieval of the most relevant information possible to feed the LLM, and optimizing the structure of that information to obtain the richest responses from the LLM.
+
+In summary, RAG is a powerful framework that enhances the capabilities of LLMs by grounding them on external, verifiable knowledge. It helps to ensure more accurate, up-to-date, and trustworthy responses while reducing the costs associated with continuous model retraining. As research in this area progresses, we can expect further improvements in the quality and efficiency of LLM-powered conversational AI systems.
+
+For a more detailed explanation of RAG, you can watch this informative video by IBM on Youtube:
+
+
+
+
+## Conclusion
+
+The RAG API is a powerful addition to LibreChat, enabling context-aware responses based on user-uploaded files. By leveraging Langchain and FastAPI, it provides efficient document indexing, retrieval, and generation capabilities. With its flexible configuration options and seamless integration, the RAG API enhances the conversational experience in LibreChat.
+
+For more detailed information on the RAG API, including API endpoints, request/response formats, and advanced configuration, please refer to the official RAG API documentation.
diff --git a/pages/docs/user_guides/search.mdx b/pages/docs/user_guides/search.mdx
new file mode 100644
index 0000000..6427e66
--- /dev/null
+++ b/pages/docs/user_guides/search.mdx
@@ -0,0 +1,18 @@
+---
+title: Search
+description: Quickly search in past conversations with LibreChat's integrated Meilisearch
+---
+
+LibreChat has integrated **Meilisearch** to enhance the user experience by providing a fast and efficient way to search through past conversations. Meilisearch is a powerful, open-source search engine that is known for its speed and ease of use, making it an excellent choice for applications like LibreChat that require quick access to a large volume of data.
+
+
+
+
+
+
+The integration allows users to:
+- Perform **full-text searches** on their conversation history.
+- Utilize **typo-tolerance** for more forgiving search queries.
+- Experience **instant results** as they type, thanks to Meilisearch's as-you-type search capabilities.
+
+This feature significantly improves the functionality of LibreChat, making it easier for users to find specific messages or topics within their chat history. It's a testament to the platform's commitment to providing a seamless and user-friendly experience. For those interested in the technical details or implementation, further information can be found in the [Meilisearch Configuration Guide](/docs/configuration/meilisearch).
diff --git a/pages/index.mdx b/pages/index.mdx
new file mode 100644
index 0000000..cf1f3e6
--- /dev/null
+++ b/pages/index.mdx
@@ -0,0 +1,8 @@
+---
+title: 'LibreChat'
+description: 'Free, open source AI chat platform - Every AI in One Place, Built for Everyone'
+---
+
+import { Home } from '../components/home'
+
+
diff --git a/pages/pricing.mdx b/pages/pricing.mdx
new file mode 100644
index 0000000..9adec38
--- /dev/null
+++ b/pages/pricing.mdx
@@ -0,0 +1,7 @@
+---
+description: Effortless pricing designed for every project size. Initiate your journey with our Starter plan starting at $29, featuring essential tools for effective administration without initial payment requirements.
+---
+
+import Pricing from '@/components/home/Pricing'
+
+
diff --git a/pages/privacy.mdx b/pages/privacy.mdx
new file mode 100644
index 0000000..bb62696
--- /dev/null
+++ b/pages/privacy.mdx
@@ -0,0 +1,823 @@
+**PRIVACY POLICY**
+
+
+**Last updated May 05, 2024**
+
+
+This privacy notice for LibreChat ("**we**," "**us**," or "**our**"), describes how and why we might collect, store, use, and/or share ("**process**") your information when you use our services ("**Services**"), such as when you:
+
+* Visit our website at [https://librechat.ai](https://librechat.ai), or any website of ours that links to this privacy notice
+
+* Engage with us in other related ways, including any sales, marketing, or events
+
+**Questions or concerns?** Reading this privacy notice will help you understand your privacy rights and choices. If you do not agree with our policies and practices, please do not use our Services. If you still have any questions or concerns, please contact us at contact@librechat.ai.
+
+
+**SUMMARY OF KEY POINTS**
+
+
+**_This summary provides key points from our privacy notice, but you can find out more details about any of these topics by clicking the link following each key point or by using our_** [**_table of contents_**](#toc) **_below to find the section you are looking for._**
+
+
+**What personal information do we process?** When you visit, use, or navigate our Services, we may process personal information depending on how you interact with us and the Services, the choices you make, and the products and features you use. Learn more about [personal information you disclose to us](#personalinfo).
+
+
+**Do we process any sensitive personal information?** We do not process sensitive personal information.
+
+
+**Do we receive any information from third parties?** We do not receive any information from third parties.
+
+
+**How do we process your information?** We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent. We process your information only when we have a valid legal reason to do so. Learn more about [how we process your information](#infouse).
+
+
+**In what situations and with which parties do we share personal information?** We may share information in specific situations and with specific third parties. Learn more about [when and with whom we share your personal information](#whoshare).
+
+
+**How do we keep your information safe?** We have organizational and technical processes and procedures in place to protect your personal information. However, no electronic transmission over the internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Learn more about [how we keep your information safe](#infosafe).
+
+
+**What are your rights?** Depending on where you are located geographically, the applicable privacy law may mean you have certain rights regarding your personal information. Learn more about [your privacy rights](#privacyrights).
+
+
+**How do you exercise your rights?** The easiest way to exercise your rights is by submitting a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0), or by contacting us. We will consider and act upon any request in accordance with applicable data protection laws.
+
+
+Want to learn more about what we do with any information we collect? [Review the privacy notice in full](#toc).
+
+
+**TABLE OF CONTENTS**
+
+
+[1\. WHAT INFORMATION DO WE COLLECT?](#1-what-information-do-we-collect)
+
+[2\. HOW DO WE PROCESS YOUR INFORMATION?](#2-how-do-we-process-your-information)
+
+[3\. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR PERSONAL INFORMATION?](#3-what-legal-bases-do-we-rely-on-to-process-your-information)
+
+[4\. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?](#4-when-and-with-whom-do-we-share-your-personal-information)
+
+[5\. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?](#5-do-we-use-cookies-and-other-tracking-technologies)
+
+[6\. HOW LONG DO WE KEEP YOUR INFORMATION?](#6-how-long-do-we-keep-your-information)
+
+[7\. HOW DO WE KEEP YOUR INFORMATION SAFE?](#7-how-do-we-keep-your-information-safe)
+
+[8\. DO WE COLLECT INFORMATION FROM MINORS?](#8-do-we-collect-information-from-minors)
+
+[9\. WHAT ARE YOUR PRIVACY RIGHTS?](#9-what-are-your-privacy-rights)
+
+[10\. CONTROLS FOR DO-NOT-TRACK FEATURES](#10-controls-for-do-not-track-features)
+
+[11\. DO UNITED STATES RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?](#11-do-united-states-residents-have-specific-privacy-rights)
+
+[12\. DO OTHER REGIONS HAVE SPECIFIC PRIVACY RIGHTS?](#12-do-other-regions-have-specific-privacy-rights)
+
+[13\. DO WE MAKE UPDATES TO THIS NOTICE?](#13-do-we-make-updates-to-this-notice)
+
+[14\. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?](#14-how-can-you-contact-us-about-this-notice)
+
+[15\. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?](#15-how-can-you-review-update-or-delete-the-data-we-collect-from-you)
+
+
+#### **1\. WHAT INFORMATION DO WE COLLECT?**
+
+
+**Personal information you disclose to us**
+
+
+**_In Short:_** _We collect personal information that you provide to us._
+
+
+We collect personal information that you voluntarily provide to us when you express an interest in obtaining information about us or our products and Services, when you participate in activities on the Services, or otherwise when you contact us.
+
+
+**Personal Information Provided by You.** The personal information that we collect depends on the context of your interactions with us and the Services, the choices you make, and the products and features you use. The personal information we collect may include the following:
+
+* names
+
+* email addresses
+
+**Sensitive Information.** We do not process sensitive information.
+
+
+All personal information that you provide to us must be true, complete, and accurate, and you must notify us of any changes to such personal information.
+
+
+**Information automatically collected**
+
+
+**_In Short:_** _Some information — such as your Internet Protocol (IP) address and/or browser and device characteristics — is collected automatically when you visit our Services._
+
+
+We automatically collect certain information when you visit, use, or navigate the Services. This information does not reveal your specific identity (like your name or contact information) but may include device and usage information, such as your IP address, browser and device characteristics, operating system, language preferences, referring URLs, device name, country, location, information about how and when you use our Services, and other technical information. This information is primarily needed to maintain the security and operation of our Services, and for our internal analytics and reporting purposes.
+
+Like many businesses, we also collect information through cookies and similar technologies. You can find out more about this in our Cookie Notice: [https://librechat.ai/cookie](https://librechat.ai/cookie).
+
+
+The information we collect includes:
+
+* _Log and Usage Data._ Log and usage data is service-related, diagnostic, usage, and performance information our servers automatically collect when you access or use our Services and which we record in log files. Depending on how you interact with us, this log data may include your IP address, device information, browser type, and settings and information about your activity in the Services (such as the date/time stamps associated with your usage, pages and files viewed, searches, and other actions you take such as which features you use), device event information (such as system activity, error reports (sometimes called "crash dumps"), and hardware settings).
+
+* _Device Data._ We collect device data such as information about your computer, phone, tablet, or other device you use to access the Services. Depending on the device used, this device data may include information such as your IP address (or proxy server), device and application identification numbers, location, browser type, hardware model, Internet service provider and/or mobile carrier, operating system, and system configuration information.
+
+* _Location Data._ We collect location data such as information about your device's location, which can be either precise or imprecise. How much information we collect depends on the type and settings of the device you use to access the Services. For example, we may use GPS and other technologies to collect geolocation data that tells us your current location (based on your IP address). You can opt out of allowing us to collect this information either by refusing access to the information or by disabling your Location setting on your device. However, if you choose to opt out, you may not be able to use certain aspects of the Services.
+
+
+#### **2\. HOW DO WE PROCESS YOUR INFORMATION?**
+
+
+**_In Short:_** _We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent._
+
+
+**We process your personal information for a variety of reasons, depending on how you interact with our Services, including:**
+
+* **To deliver and facilitate delivery of services to the user.** We may process your information to provide you with the requested service.
+
+* **To respond to user inquiries/offer support to users.** We may process your information to respond to your inquiries and solve any potential issues you might have with the requested service.
+
+* **To enable user-to-user communications.** We may process your information if you choose to use any of our offerings that allow for communication with another user.
+
+* **To save or protect an individual's vital interest.** We may process your information when necessary to save or protect an individual’s vital interest, such as to prevent harm.
+
+
+#### **3\. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION?**
+
+
+_**In Short:** We only process your personal information when we believe it is necessary and we have a valid legal reason (i.e., legal basis) to do so under applicable law, like with your consent, to comply with laws, to provide you with services to enter into or fulfill our contractual obligations, to protect your rights, or to fulfill our legitimate business interests._
+
+
+_**If you are located in the EU or UK, this section applies to you.**_
+
+
+The General Data Protection Regulation (GDPR) and UK GDPR require us to explain the valid legal bases we rely on in order to process your personal information. As such, we may rely on the following legal bases to process your personal information:
+
+* **Consent.** We may process your information if you have given us permission (i.e., consent) to use your personal information for a specific purpose. You can withdraw your consent at any time. Learn more about [withdrawing your consent](#withdrawconsent).
+
+* **Performance of a Contract.** We may process your personal information when we believe it is necessary to fulfill our contractual obligations to you, including providing our Services or at your request prior to entering into a contract with you.
+
+* **Legal Obligations.** We may process your information where we believe it is necessary for compliance with our legal obligations, such as to cooperate with a law enforcement body or regulatory agency, exercise or defend our legal rights, or disclose your information as evidence in litigation in which we are involved.
+
+
+* **Vital Interests.** We may process your information where we believe it is necessary to protect your vital interests or the vital interests of a third party, such as situations involving potential threats to the safety of any person.
+
+**_If you are located in Canada, this section applies to you._**
+
+We may process your information if you have given us specific permission (i.e., express consent) to use your personal information for a specific purpose, or in situations where your permission can be inferred (i.e., implied consent). You can [withdraw your consent](#withdrawconsent) at any time.
+
+
+In some exceptional cases, we may be legally permitted under applicable law to process your information without your consent, including, for example:
+
+* If collection is clearly in the interests of an individual and consent cannot be obtained in a timely way
+
+* For investigations and fraud detection and prevention
+
+* For business transactions provided certain conditions are met
+
+* If it is contained in a witness statement and the collection is necessary to assess, process, or settle an insurance claim
+
+* For identifying injured, ill, or deceased persons and communicating with next of kin
+
+* If we have reasonable grounds to believe an individual has been, is, or may be victim of financial abuse
+
+* If it is reasonable to expect collection and use with consent would compromise the availability or the accuracy of the information and the collection is reasonable for purposes related to investigating a breach of an agreement or a contravention of the laws of Canada or a province
+
+* If disclosure is required to comply with a subpoena, warrant, court order, or rules of the court relating to the production of records
+
+* If it was produced by an individual in the course of their employment, business, or profession and the collection is consistent with the purposes for which the information was produced
+
+* If the collection is solely for journalistic, artistic, or literary purposes
+
+* If the information is publicly available and is specified by the regulations
+
+
+#### **4\. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?**
+
+
+**_In Short:_** _We may share information in specific situations described in this section and/or with the following third parties._
+
+
+We may need to share your personal information in the following situations:
+
+* **Business Transfers.** We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.
+
+
+
+#### **5\. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?**
+
+
+
+**_In Short:_** _We may use cookies and other tracking technologies to collect and store your information._
+
+
+
+We may use cookies and similar tracking technologies (like web beacons and pixels) to access or store information. Specific information about how we use such technologies and how you can refuse certain cookies is set out in our Cookie Notice: [https://librechat.ai/cookie](https://librechat.ai/cookie).
+
+
+
+#### **6\. HOW LONG DO WE KEEP YOUR INFORMATION?**
+
+
+
+**_In Short:_** _We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law._
+
+
+
+We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal requirements).
+
+
+
+When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize such information, or, if this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.
+
+
+
+#### **7\. HOW DO WE KEEP YOUR INFORMATION SAFE?**
+
+
+
+#### **_In Short:_** _We aim to protect your personal information through a system of organizational and technical security measures._
+
+
+
+We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our Services is at your own risk. You should only access the Services within a secure environment.
+
+
+
+#### **8\. DO WE COLLECT INFORMATION FROM MINORS?**
+
+
+
+**_In Short:_** _We do not knowingly collect data from or market to children under 18 years of age._
+
+
+
+We do not knowingly solicit data from or market to children under 18 years of age. By using the Services, you represent that you are at least 18 or that you are the parent or guardian of such a minor and consent to such minor dependent’s use of the Services. If we learn that personal information from users less than 18 years of age has been collected, we will deactivate the account and take reasonable measures to promptly delete such data from our records. If you become aware of any data we may have collected from children under age 18, please contact us at contact@librechat.ai.
+
+
+
+#### **9\. WHAT ARE YOUR PRIVACY RIGHTS?**
+
+
+
+**_In Short:_** _In some regions, such as the European Economic Area (EEA), United Kingdom (UK), Switzerland, and Canada, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time._
+
+
+
+In some regions (like the EEA, UK, Switzerland, and Canada), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; (iv) if applicable, to data portability; and (v) not to be subject to automated decision-making. In certain circumstances, you may also have the right to object to the processing of your personal information. You can make such a request by contacting us by using the contact details provided in the section "[HOW CAN YOU CONTACT US ABOUT THIS NOTICE?](#contact)" below.
+
+
+
+We will consider and act upon any request in accordance with applicable data protection laws.
+
+If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your [Member State data protection authority](https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm) or [UK data protection authority](https://ico.org.uk/make-a-complaint/data-protection-complaints/data-protection-complaints/).
+
+
+
+If you are located in Switzerland, you may contact the [Federal Data Protection and Information Commissioner](https://www.edoeb.admin.ch/edoeb/en/home.html).
+
+
+
+**Withdrawing your consent:** If we are relying on your consent to process your personal information, which may be express and/or implied consent depending on the applicable law, you have the right to withdraw your consent at any time. You can withdraw your consent at any time by contacting us by using the contact details provided in the section "[HOW CAN YOU CONTACT US ABOUT THIS NOTICE?](#contact)" below.
+
+
+
+However, please note that this will not affect the lawfulness of the processing before its withdrawal nor, when applicable law allows, will it affect the processing of your personal information conducted in reliance on lawful processing grounds other than consent.
+
+
+
+**Opting out of marketing and promotional communications:** You can unsubscribe from our marketing and promotional communications at any time by clicking on the unsubscribe link in the emails that we send, or by contacting us using the details provided in the section "[HOW CAN YOU CONTACT US ABOUT THIS NOTICE?](#contact)" below. You will then be removed from the marketing lists. However, we may still communicate with you — for example, to send you service-related messages that are necessary for the administration and use of your account, to respond to service requests, or for other non-marketing purposes.
+
+
+
+**Cookies and similar technologies:** Most Web browsers are set to accept cookies by default. If you prefer, you can usually choose to set your browser to remove cookies and to reject cookies. If you choose to remove cookies or reject cookies, this could affect certain features or services of our Services. For further information, please see our Cookie Notice: [https://librechat.ai/cookie](https://librechat.ai/cookie).
+
+
+
+If you have questions or comments about your privacy rights, you may email us at contact@librechat.ai.
+
+
+
+#### **10\. CONTROLS FOR DO-NOT-TRACK FEATURES**
+
+
+
+Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting you can activate to signal your privacy preference not to have data about your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that automatically communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice.
+
+
+
+#### **11\. DO UNITED STATES RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?**
+
+
+
+**_In Short:_** _If you are a resident of California, Colorado, Connecticut, Utah or Virginia, you are granted specific rights regarding access to your personal information._
+
+
+**What categories of personal information do we collect?**
+
+
+
+We have collected the following categories of personal information in the past twelve (12) months:
+
+
+
+**Category**
+
+**Examples**
+
+**Collected**
+
+A. Identifiers
+
+Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name
+
+
+
+YES
+
+
+
+B. Personal information as defined in the California Customer Records statute
+
+Name, contact information, education, employment, employment history, and financial information
+
+
+
+NO
+
+
+
+C. Protected classification characteristics under state or federal law
+
+Gender and date of birth
+
+
+
+NO
+
+
+
+D. Commercial information
+
+Transaction information, purchase history, financial details, and payment information
+
+
+
+NO
+
+
+
+E. Biometric information
+
+Fingerprints and voiceprints
+
+
+
+NO
+
+
+
+F. Internet or other similar network activity
+
+Browsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems, and advertisements
+
+
+
+NO
+
+
+G. Geolocation data
+
+Device location
+
+
+
+YES
+
+
+
+H. Audio, electronic, visual, thermal, olfactory, or similar information
+
+Images and audio, video or call recordings created in connection with our business activities
+
+
+NO
+
+
+
+I. Professional or employment-related information
+
+Business contact details in order to provide you our Services at a business level or job title, work history, and professional qualifications if you apply for a job with us
+
+
+
+NO
+
+
+
+J. Education Information
+
+Student records and directory information
+
+
+
+NO
+
+
+
+K. Inferences drawn from collected personal information
+
+Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristics
+
+
+
+NO
+
+
+
+L. Sensitive personal Information
+
+
+
+NO
+
+
+
+We will use and retain the collected personal information as needed to provide the Services or for:
+
+* Category A - As long as the user has an account with us
+
+* Category G - As long as the user has an account with us
+
+We may also collect other personal information outside of these categories through instances where you interact with us in person, online, or by phone or mail in the context of:
+
+* Receiving help through our customer support channels;
+
+* Participation in customer surveys or contests; and
+
+* Facilitation in the delivery of our Services and to respond to your inquiries.
+
+**How do we use and share your personal information?**
+
+
+
+Learn about how we use your personal information in the section, "[HOW DO WE PROCESS YOUR INFORMATION?](#infouse)"
+
+
+
+**Will your information be shared with anyone else?**
+
+
+
+We may disclose your personal information with our service providers pursuant to a written contract between us and each service provider. Learn more about how we disclose personal information to in the section, "[WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?](#whoshare)"
+
+
+
+We may use your personal information for our own business purposes, such as for undertaking internal research for technological development and demonstration. This is not considered to be "selling" of your personal information.
+
+
+We have not disclosed, sold, or shared any personal information to third parties for a business or commercial purpose in the preceding twelve (12) months. We will not sell or share personal information in the future belonging to website visitors, users, and other consumers.
+
+
+
+**California Residents**
+
+
+
+California Civil Code Section 1798.83, also known as the "Shine The Light" law permits our users who are California residents to request and obtain from us, once a year and free of charge, information about categories of personal information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which we shared personal information in the immediately preceding calendar year. If you are a California resident and would like to make such a request, please submit your request in writing to us using the contact information provided below.
+
+
+
+If you are under 18 years of age, reside in California, and have a registered account with the Services, you have the right to request removal of unwanted data that you publicly post on the Services. To request removal of such data, please contact us using the contact information provided below and include the email address associated with your account and a statement that you reside in California. We will make sure the data is not publicly displayed on the Services, but please be aware that the data may not be completely or comprehensively removed from all our systems (e.g., backups, etc.).
+
+
+
+**CCPA Privacy Notice**
+
+
+
+This section applies only to California residents. Under the California Consumer Privacy Act (CCPA), you have the rights listed below.
+
+
+
+The California Code of Regulations defines a "residents" as:
+
+
+
+(1) every individual who is in the State of California for other than a temporary or transitory purpose and
+
+(2) every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose
+
+
+
+All other individuals are defined as "non-residents."
+
+
+
+If this definition of "resident" applies to you, we must adhere to certain rights and obligations regarding your personal information.
+
+
+
+**Your rights with respect to your personal data**
+
+
+
+Right to request deletion of the data — Request to delete
+
+
+
+You can ask for the deletion of your personal information. If you ask us to delete your personal information, we will respect your request and delete your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, our compliance requirements resulting from a legal obligation, or any processing that may be required to protect against illegal activities.
+
+
+
+Right to be informed — Request to know
+
+
+
+Depending on the circumstances, you have a right to know:
+
+* whether we collect and use your personal information;
+
+* the categories of personal information that we collect;
+
+* the purposes for which the collected personal information is used;
+
+* whether we sell or share personal information to third parties;
+
+* the categories of personal information that we sold, shared, or disclosed for a business purpose;
+
+* the categories of third parties to whom the personal information was sold, shared, or disclosed for a business purpose;
+
+* the business or commercial purpose for collecting, selling, or sharing personal information; and
+
+* the specific pieces of personal information we collected about you.
+
+In accordance with applicable law, we are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request.
+
+
+
+Right to Non-Discrimination for the Exercise of a Consumer’s Privacy Rights
+
+
+
+We will not discriminate against you if you exercise your privacy rights.
+
+
+
+Right to Limit Use and Disclosure of Sensitive Personal Information
+
+
+
+We do not process consumer's sensitive personal information.
+
+
+
+Verification process
+
+
+
+Upon receiving your request, we will need to verify your identity to determine you are the same person about whom we have the information in our system. These verification efforts require us to ask you to provide information so that we can match it with information you have previously provided us. For instance, depending on the type of request you submit, we may ask you to provide certain information so that we can match the information you provide with the information we already have on file, or we may contact you through a communication method (e.g., phone or email) that you have previously provided to us. We may also use other verification methods as the circumstances dictate.
+
+
+
+We will only use personal information provided in your request to verify your identity or authority to make the request. To the extent possible, we will avoid requesting additional information from you for the purposes of verification. However, if we cannot verify your identity from the information already maintained by us, we may request that you provide additional information for the purposes of verifying your identity and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as we finish verifying you.
+
+
+
+Other privacy rights
+
+* You may object to the processing of your personal information.
+
+* You may request correction of your personal data if it is incorrect or no longer relevant, or ask to restrict the processing of the information.
+
+* You can designate an authorized agent to make a request under the CCPA on your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on your behalf in accordance with the CCPA.
+
+* You may request to opt out from future selling or sharing of your personal information to third parties. Upon receiving an opt-out request, we will act upon the request as soon as feasibly possible, but no later than fifteen (15) days from the date of the request submission.
+
+* We will honor your opt-out preferences if you enact the [Global Privacy Control](https://globalprivacycontrol.org/) (GPC) opt-out signal on your browser.
+
+To exercise these rights, you can contact us by submitting a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0), by email at contact@librechat.ai, or by referring to the contact details at the bottom of this document. If you have a complaint about how we handle your data, we would like to hear from you.
+
+
+
+**Colorado Residents**
+
+
+
+This section applies only to Colorado residents. Under the Colorado Privacy Act (CPA), you have the rights listed below. However, these rights are not absolute, and in certain cases, we may decline your request as permitted by law.
+
+* Right to be informed whether or not we are processing your personal data
+
+* Right to access your personal data
+
+* Right to correct inaccuracies in your personal data
+
+* Right to request deletion of your personal data
+
+* Right to obtain a copy of the personal data you previously shared with us
+
+* Right to opt out of the processing of your personal data if it is used for targeted advertising, the sale of personal data, or profiling in furtherance of decisions that produce legal or similarly significant effects ("profiling")
+
+To submit a request to exercise these rights described above, please email contact@librechat.ai or submit a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0).
+
+
+
+If we decline to take action regarding your request and you wish to appeal our decision, please email us at contact@librechat.ai. Within forty-five (45) days of receipt of an appeal, we will inform you in writing of any action taken or not taken in response to the appeal, including a written explanation of the reasons for the decisions.
+
+
+
+**Connecticut Residents**
+
+
+
+This section applies only to Connecticut residents. Under the Connecticut Data Privacy Act (CTDPA), you have the rights listed below. However, these rights are not absolute, and in certain cases, we may decline your request as permitted by law.
+
+* Right to be informed whether or not we are processing your personal data
+
+* Right to access your personal data
+
+* Right to correct inaccuracies in your personal data
+
+* Right to request deletion of your personal data
+
+* Right to obtain a copy of the personal data you previously shared with us
+
+* Right to opt out of the processing of your personal data if it is used for targeted advertising, the sale of personal data, or profiling in furtherance of decisions that produce legal or similarly significant effects ("profiling")
+
+To submit a request to exercise these rights described above, please email contact@librechat.ai or submit a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0).
+
+
+
+If we decline to take action regarding your request and you wish to appeal our decision, please email us at contact@librechat.ai. Within sixty (60) days of receipt of an appeal, we will inform you in writing of any action taken or not taken in response to the appeal, including a written explanation of the reasons for the decisions.
+
+
+
+**Utah Residents**
+
+
+
+This section applies only to Utah residents. Under the Utah Consumer Privacy Act (UCPA), you have the rights listed below. However, these rights are not absolute, and in certain cases, we may decline your request as permitted by law.
+
+* Right to be informed whether or not we are processing your personal data
+
+* Right to access your personal data
+
+* Right to request deletion of your personal data
+
+* Right to obtain a copy of the personal data you previously shared with us
+
+* Right to opt out of the processing of your personal data if it is used for targeted advertising or the sale of personal data
+
+To submit a request to exercise these rights described above, please email contact@librechat.ai or submit a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0).
+
+
+
+**Virginia Residents**
+
+
+
+Under the Virginia Consumer Data Protection Act (VCDPA):
+
+
+
+"Consumer" means a natural person who is a resident of the Commonwealth acting only in an individual or household context. It does not include a natural person acting in a commercial or employment context.
+
+
+
+"Personal data" means any information that is linked or reasonably linkable to an identified or identifiable natural person. "Personal data" does not include de-identified data or publicly available information.
+
+
+
+"Sale of personal data" means the exchange of personal data for monetary consideration.
+
+
+
+If this definition of "consumer" applies to you, we must adhere to certain rights and obligations regarding your personal data.
+
+
+
+Your rights with respect to your personal data
+
+* Right to be informed whether or not we are processing your personal data
+
+* Right to access your personal data
+
+* Right to correct inaccuracies in your personal data
+
+* Right to request deletion of your personal data
+
+* Right to obtain a copy of the personal data you previously shared with us
+
+* Right to opt out of the processing of your personal data if it is used for targeted advertising, the sale of personal data, or profiling in furtherance of decisions that produce legal or similarly significant effects ("profiling")
+
+Exercise your rights provided under the Virginia VCDPA
+
+
+
+You may contact us by email at contact@librechat.ai or submit a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0).
+
+
+
+If you are using an authorized agent to exercise your rights, we may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on your behalf.
+
+
+
+Verification process
+
+
+
+We may request that you provide additional information reasonably necessary to verify you and your consumer's request. If you submit the request through an authorized agent, we may need to collect additional information to verify your identity before processing your request.
+
+
+
+Upon receiving your request, we will respond without undue delay, but in all cases, within forty-five (45) days of receipt. The response period may be extended once by forty-five (45) additional days when reasonably necessary. We will inform you of any such extension within the initial 45-day response period, together with the reason for the extension.
+
+
+
+Right to appeal
+
+
+
+If we decline to take action regarding your request, we will inform you of our decision and reasoning behind it. If you wish to appeal our decision, please email us at contact@librechat.ai. Within sixty (60) days of receipt of an appeal, we will inform you in writing of any action taken or not taken in response to the appeal, including a written explanation of the reasons for the decisions. If your appeal is denied, you may contact the [Attorney General to submit a complaint](https://www.oag.state.va.us/consumer-protection/index.php/file-a-complaint).
+
+
+
+#### **12\. DO OTHER REGIONS HAVE SPECIFIC PRIVACY RIGHTS?**
+
+
+
+_**In Short:** You may have additional rights based on the country you reside in._
+
+
+
+**Australia** **and** **New Zealand**
+
+
+
+We collect and process your personal information under the obligations and conditions set by Australia's Privacy Act 1988 and New Zealand's Privacy Act 2020 (Privacy Act).
+
+
+
+This privacy notice satisfies the notice requirements defined in both Privacy Acts, in particular: what personal information we collect from you, from which sources, for which purposes, and other recipients of your personal information.
+
+
+
+If you do not wish to provide the personal information necessary to fulfill their applicable purpose, it may affect our ability to provide our services, in particular:
+
+* offer you the products or services that you want
+
+* respond to or help with your requests
+
+At any time, you have the right to request access to or correction of your personal information. You can make such a request by contacting us by using the contact details provided in the section "[HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?](#request)"
+
+
+
+If you believe we are unlawfully processing your personal information, you have the right to submit a complaint about a breach of the Australian Privacy Principles to the [Office of the Australian Information Commissioner](https://www.oaic.gov.au/privacy/privacy-complaints/lodge-a-privacy-complaint-with-us) and a breach of New Zealand's Privacy Principles to the [Office of New Zealand Privacy Commissioner](https://www.privacy.org.nz/your-rights/making-a-complaint/).
+
+
+
+**Republic of South Africa**
+
+
+
+At any time, you have the right to request access to or correction of your personal information. You can make such a request by contacting us by using the contact details provided in the section "[HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?](#request)"
+
+
+
+If you are unsatisfied with the manner in which we address any complaint with regard to our processing of personal information, you can contact the office of the regulator, the details of which are:
+
+
+
+[The Information Regulator (South Africa)](https://inforegulator.org.za/)
+
+General enquiries: [enquiries@inforegulator.org.za](mailto:enquiries@inforegulator.org.za)
+
+Complaints (complete POPIA/PAIA form 5): [PAIAComplaints@inforegulator.org.za](mailto:PAIAComplaints@inforegulator.org.za) & [POPIAComplaints@inforegulator.org.za](mailto:POPIAComplaints@inforegulator.org.za)
+
+
+
+#### **13\. DO WE MAKE UPDATES TO THIS NOTICE?**
+
+
+
+_**In Short:** Yes, we will update this notice as necessary to stay compliant with relevant laws._
+
+
+
+We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.
+
+
+
+#### **14\. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?**
+
+
+
+If you have questions or comments about this notice, you may email us at contact@librechat.ai.
+
+
+
+
+
+#### **15\. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?**
+
+
+Based on the applicable laws of your country, you may have the right to request access to the personal information we collect from you, change that information, or delete it. To request to review, update, or delete your personal information, please fill out and submit a [data subject access request](https://app.termly.io/notify/1aad42fd-be0a-4908-9b93-73ef6db220d0).
diff --git a/pages/subscribe.mdx b/pages/subscribe.mdx
new file mode 100644
index 0000000..d4f9480
--- /dev/null
+++ b/pages/subscribe.mdx
@@ -0,0 +1,7 @@
+
+
+import SubscribeForm from '@/components/Newsletter/SubscribeForm'
+
+
+
+
diff --git a/pages/toolkit/_meta.ts b/pages/toolkit/_meta.ts
new file mode 100644
index 0000000..070f97f
--- /dev/null
+++ b/pages/toolkit/_meta.ts
@@ -0,0 +1,5 @@
+export default {
+ index: 'Intro',
+ creds_generator: 'Credentials Generator',
+ yaml_checker: 'YAML Validator',
+}
diff --git a/pages/toolkit/creds_generator.mdx b/pages/toolkit/creds_generator.mdx
new file mode 100644
index 0000000..646002f
--- /dev/null
+++ b/pages/toolkit/creds_generator.mdx
@@ -0,0 +1,3 @@
+import CredsGenerator from '@/components/tools/CredentialsGeneratorBox'
+
+
\ No newline at end of file
diff --git a/pages/toolkit/index.mdx b/pages/toolkit/index.mdx
new file mode 100644
index 0000000..c4f95d8
--- /dev/null
+++ b/pages/toolkit/index.mdx
@@ -0,0 +1,18 @@
+# ToolKit
+
+## 🔐 Credentials Generator
+First up is the 'Credentials Generator,' a handy tool that effortlessly generates secure crypto keys and JWT secrets.
+These keys are crucial for securing sensitive environment variables like `CREDS_KEY`, `CREDS_IV`, `JWT_SECRET`, and `JWT_REFRESH_SECRET`.
+
+
+
+
+
+
+## 🔍 YAML Validator (beta)
+Additionally, we present the beta version of our YAML Validator, designed to validate both your librechat.yaml and docker-compose.override.yml files, ensuring smooth sailing as you configure your LibreChat environment.
+
+
+
+
+
diff --git a/pages/toolkit/yaml_checker.mdx b/pages/toolkit/yaml_checker.mdx
new file mode 100644
index 0000000..e7f7f3a
--- /dev/null
+++ b/pages/toolkit/yaml_checker.mdx
@@ -0,0 +1,7 @@
+import YAMLChecker from '@/components/tools/yamlChecker'
+
+This tool is currently in its beta testing phase. If you encounter any issues or have any doubts, please validate your results using https://yamlchecker.com/.
+
+---
+
+
\ No newline at end of file
diff --git a/pages/tos.mdx b/pages/tos.mdx
new file mode 100644
index 0000000..dfdd8d5
--- /dev/null
+++ b/pages/tos.mdx
@@ -0,0 +1,7 @@
+---
+title: Terms of Services
+---
+
+import { TermsOfServices } from '@/components/policies'
+
+
diff --git a/pages/unsubscribe.mdx b/pages/unsubscribe.mdx
new file mode 100644
index 0000000..a19756b
--- /dev/null
+++ b/pages/unsubscribe.mdx
@@ -0,0 +1,7 @@
+
+
+import UnsubscribeForm from '@/components/Newsletter/UnsubscribeForm'
+
+
+
+