From 1ac33f1434b00cedc0ab422f23953eb1e0ad6881 Mon Sep 17 00:00:00 2001 From: Mike Fortman Date: Tue, 28 Oct 2025 12:56:06 -0500 Subject: [PATCH 01/25] cleanup onboarding --- frontend/src/app/new-onboarding/page.tsx | 44 ------------------- .../app/onboarding/components/advanced.tsx | 1 - .../components/onboarding-content.tsx | 0 .../components/onboarding-step.tsx | 0 .../components/onboarding-upload.tsx | 0 .../components/progress-bar.tsx | 0 frontend/src/components/chat-renderer.tsx | 4 +- 7 files changed, 2 insertions(+), 47 deletions(-) delete mode 100644 frontend/src/app/new-onboarding/page.tsx rename frontend/src/app/{new-onboarding => onboarding}/components/onboarding-content.tsx (100%) rename frontend/src/app/{new-onboarding => onboarding}/components/onboarding-step.tsx (100%) rename frontend/src/app/{new-onboarding => onboarding}/components/onboarding-upload.tsx (100%) rename frontend/src/app/{new-onboarding => onboarding}/components/progress-bar.tsx (100%) diff --git a/frontend/src/app/new-onboarding/page.tsx b/frontend/src/app/new-onboarding/page.tsx deleted file mode 100644 index 9c1aeec7..00000000 --- a/frontend/src/app/new-onboarding/page.tsx +++ /dev/null @@ -1,44 +0,0 @@ -"use client"; - -import { Suspense, useState } from "react"; -import { DoclingHealthBanner } from "@/components/docling-health-banner"; -import { ProtectedRoute } from "@/components/protected-route"; -import { OnboardingContent } from "./components/onboarding-content"; -import { ProgressBar } from "./components/progress-bar"; - -const TOTAL_STEPS = 4; - -function NewOnboardingPage() { - const [currentStep, setCurrentStep] = useState(0); - - const handleStepComplete = () => { - if (currentStep < TOTAL_STEPS - 1) { - setCurrentStep(currentStep + 1); - } - }; - - return ( -
- - - {/* Chat-like content area */} -
-
- -
- - -
-
- ); -} - -export default function ProtectedNewOnboardingPage() { - return ( - - Loading...}> - - - - ); -} diff --git a/frontend/src/app/onboarding/components/advanced.tsx b/frontend/src/app/onboarding/components/advanced.tsx index d44e5c7a..b73993b7 100644 --- a/frontend/src/app/onboarding/components/advanced.tsx +++ b/frontend/src/app/onboarding/components/advanced.tsx @@ -37,7 +37,6 @@ export function AdvancedOnboarding({ languageModel !== undefined && setLanguageModel !== undefined; - const updatedOnboarding = process.env.UPDATED_ONBOARDING === "true"; return ( diff --git a/frontend/src/app/new-onboarding/components/onboarding-content.tsx b/frontend/src/app/onboarding/components/onboarding-content.tsx similarity index 100% rename from frontend/src/app/new-onboarding/components/onboarding-content.tsx rename to frontend/src/app/onboarding/components/onboarding-content.tsx diff --git a/frontend/src/app/new-onboarding/components/onboarding-step.tsx b/frontend/src/app/onboarding/components/onboarding-step.tsx similarity index 100% rename from frontend/src/app/new-onboarding/components/onboarding-step.tsx rename to frontend/src/app/onboarding/components/onboarding-step.tsx diff --git a/frontend/src/app/new-onboarding/components/onboarding-upload.tsx b/frontend/src/app/onboarding/components/onboarding-upload.tsx similarity index 100% rename from frontend/src/app/new-onboarding/components/onboarding-upload.tsx rename to frontend/src/app/onboarding/components/onboarding-upload.tsx diff --git a/frontend/src/app/new-onboarding/components/progress-bar.tsx b/frontend/src/app/onboarding/components/progress-bar.tsx similarity index 100% rename from frontend/src/app/new-onboarding/components/progress-bar.tsx rename to frontend/src/app/onboarding/components/progress-bar.tsx diff --git a/frontend/src/components/chat-renderer.tsx b/frontend/src/components/chat-renderer.tsx index d20864a8..1e410ee8 100644 --- a/frontend/src/components/chat-renderer.tsx +++ b/frontend/src/components/chat-renderer.tsx @@ -8,8 +8,8 @@ import { useGetConversationsQuery, } from "@/app/api/queries/useGetConversationsQuery"; import type { Settings } from "@/app/api/queries/useGetSettingsQuery"; -import { OnboardingContent } from "@/app/new-onboarding/components/onboarding-content"; -import { ProgressBar } from "@/app/new-onboarding/components/progress-bar"; +import { OnboardingContent } from "@/app/onboarding/components/onboarding-content"; +import { ProgressBar } from "@/app/onboarding/components/progress-bar"; import { AnimatedConditional } from "@/components/animated-conditional"; import { Header } from "@/components/header"; import { Navigation } from "@/components/navigation"; From c8740437073f44b4c3b3482f8726efef34c41a0a Mon Sep 17 00:00:00 2001 From: Mendon Kissling <59585235+mendonk@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:26:13 -0400 Subject: [PATCH 02/25] install-and-onboarding --- docs/docs/get-started/install.mdx | 32 ++++++++++++----------- docs/docs/get-started/what-is-openrag.mdx | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/docs/get-started/install.mdx b/docs/docs/get-started/install.mdx index d8fa252f..d7faaabb 100644 --- a/docs/docs/get-started/install.mdx +++ b/docs/docs/get-started/install.mdx @@ -9,7 +9,7 @@ import PartialOnboarding from '@site/docs/_partial-onboarding.mdx'; [Install the OpenRAG Python wheel](#install-python-wheel), and then run the [OpenRAG Terminal User Interface(TUI)](#setup) to start your OpenRAG deployment with a guided setup process. -The OpenRAG Terminal User Interface (TUI) allows you to set up, configure, and monitor your OpenRAG deployment directly from the terminal, on any operating system. +The OpenRAG Terminal User Interface (TUI) allows you to set up, configure, and monitor your OpenRAG deployment directly from the terminal. ![OpenRAG TUI Interface](@site/static/img/OpenRAG_TUI_2025-09-10T13_04_11_757637.svg) @@ -102,10 +102,12 @@ If the TUI detects OAuth credentials, it enforces the **Advanced Setup** path. 1. To install OpenRAG with **Basic Setup**, click **Basic Setup** or press 1. 2. Click **Generate Passwords** to generate passwords for OpenSearch and Langflow. + Only the **OpenSearch Admin Password** and **OpenAI API key** are required. + To generate the optional **Langflow Admin Password**, click **Generate Password**. 3. Paste your OpenAI API key in the OpenAI API key field. 4. Click **Save Configuration**. Your passwords are saved in the `.env` file used to start OpenRAG. - 5. To start OpenRAG, click **Start Container Services**. + 5. To start OpenRAG, click **Start All Services**. Startup pulls container images and runs them, so it can take some time. When startup is complete, the TUI displays the following: ```bash @@ -127,14 +129,14 @@ If the TUI detects OAuth credentials, it enforces the **Advanced Setup** path. These are the URLs your OAuth provider will redirect back to after user sign-in. Register these redirect values with your OAuth provider as they are presented in the TUI. 6. Click **Save Configuration**. - 7. To start OpenRAG, click **Start Container Services**. + 7. To start OpenRAG, click **Start All Services**. Startup pulls container images and runs them, so it can take some time. When startup is complete, the TUI displays the following: ```bash Services started successfully Command completed successfully ``` - 8. To open the OpenRAG application, click **Open App**, press 6, or navigate to `http://localhost:3000`. + 8. To open the OpenRAG application, click **Open App**. You are presented with your provider's OAuth sign-in screen. After sign-in, you are redirected to the redirect URI. @@ -159,9 +161,9 @@ If the TUI detects OAuth credentials, it enforces the **Advanced Setup** path. After installation, the TUI can deploy, manage, and upgrade your OpenRAG containers. -### Start container services +### Start all services -Click **Start Container Services** to start the OpenRAG containers. +Click **Start All Services** to start the OpenRAG containers. The TUI automatically detects your container runtime, and then checks if your machine has compatible GPU support by checking for `CUDA`, `NVIDIA_SMI`, and Docker/Podman runtime support. This check determines which Docker Compose file OpenRAG uses. The TUI then pulls the images and deploys the containers with the following command. ```bash @@ -170,15 +172,6 @@ docker compose up -d If images are missing, the TUI runs `docker compose pull`, then runs `docker compose up -d`. -### Start native services - -A "native" service in OpenRAG refers to a service run natively on your machine, and not within a container. -The `docling serve` process is a native service in OpenRAG, because it's a document processing service that is run on your local machine, and controlled separately from the containers. - -To start or stop `docling serve` or any other native services, in the TUI main menu, click **Start Native Services** or **Stop Native Services**. - -To view the status, port, or PID of a native service, in the TUI main menu, click [Status](#status). - ### Status The **Status** menu displays information on your container deployment. @@ -207,6 +200,15 @@ When the first command is complete, OpenRAG removes any additional Docker object docker system prune -f ``` +### Native services status + +A "native" service in OpenRAG refers to a service run locally on your machine, and not within a container. +The `docling serve` process is a native service in OpenRAG, because it's a document processing service that is run on your local machine, and controlled separately from the containers. + +To start or stop `docling serve` or any other native services, in the TUI Status menu, click **Stop** or **Restart**. + +To view the status, port, or PID of a native service, in the TUI main menu, click [Status](#status). + ## Diagnostics The **Diagnostics** menu provides health monitoring for your container runtimes and monitoring of your OpenSearch security. \ No newline at end of file diff --git a/docs/docs/get-started/what-is-openrag.mdx b/docs/docs/get-started/what-is-openrag.mdx index 129d2df9..ee227db9 100644 --- a/docs/docs/get-started/what-is-openrag.mdx +++ b/docs/docs/get-started/what-is-openrag.mdx @@ -7,7 +7,7 @@ OpenRAG is an open-source package for building agentic RAG systems that integrat OpenRAG connects and amplifies three popular, proven open-source projects into one powerful platform: -* [Langflow](https://docs.langflow.org): Langflow is a popular tool for building and deploying AI agents and MCP servers. It supports all major LLMs, vector databases, and a growing library of AI tools. +* [Langflow](https://docs.langflow.org): Langflow is a versatile tool for building and deploying AI agents and MCP servers. It supports all major LLMs, vector databases, and a growing library of AI tools. * [OpenSearch](https://docs.opensearch.org/latest/): OpenSearch is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data. From 37b1fa47ddb4fc45b8c4dbd263933d817a103bdc Mon Sep 17 00:00:00 2001 From: Mendon Kissling <59585235+mendonk@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:55:44 -0400 Subject: [PATCH 03/25] new-onboarding --- docs/docs/_partial-onboarding.mdx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/docs/_partial-onboarding.mdx b/docs/docs/_partial-onboarding.mdx index 6fc5c87e..c956eb53 100644 --- a/docs/docs/_partial-onboarding.mdx +++ b/docs/docs/_partial-onboarding.mdx @@ -17,17 +17,19 @@ Choose one LLM provider and complete only those steps: 3. To load 2 sample PDFs, enable **Sample dataset**. This is recommended, but not required. 4. Click **Complete**. - 5. Continue with the [Quickstart](/quickstart). + 5. To complete the onboarding tasks, click **What is OpenRAG**, and then click **Add a Document**. + 6. Continue with the [Quickstart](/quickstart). - 1. Complete the fields for **watsonx.ai API Endpoint**, **IBM API key**, and **IBM Project ID**. + 1. Complete the fields for **watsonx.ai API Endpoint**, **IBM Project ID**, and **IBM API key**. These values are found in your IBM watsonx deployment. 2. Under **Advanced settings**, select your **Embedding Model** and **Language Model**. 3. To load 2 sample PDFs, enable **Sample dataset**. This is recommended, but not required. 4. Click **Complete**. - 5. Continue with the [Quickstart](/quickstart). + 5. To complete the onboarding tasks, click **What is OpenRAG**, and then click **Add a Document**. + 6. Continue with the [Quickstart](/quickstart). @@ -42,6 +44,7 @@ Choose one LLM provider and complete only those steps: 3. To load 2 sample PDFs, enable **Sample dataset**. This is recommended, but not required. 4. Click **Complete**. - 5. Continue with the [Quickstart](/quickstart). + 5. To complete the onboarding tasks, click **What is OpenRAG**, and then click **Add a Document**. + 6. Continue with the [Quickstart](/quickstart). \ No newline at end of file From d63fcb38433ce04036c3bbcec7e54be8129bcbed Mon Sep 17 00:00:00 2001 From: Lucas Oliveira <62335616+lucaseduoli@users.noreply.github.com> Date: Tue, 28 Oct 2025 18:06:29 -0300 Subject: [PATCH 04/25] fix: fix loading states, flickering and positioning on onboarding (#323) * Removed background from dog * Changed loading providers to be on tab * Fixed case on add a document button * fixed dog icon flickering * Changed size of animated processing icon on tab trigger * fixed max height on onboarding * Fixed animated steps size * Changed skip overview design * disable autocomplete --- frontend/components/logo/dog-icon.tsx | 16 +- .../app/chat/components/assistant-message.tsx | 2 +- .../src/app/chat/components/chat-input.tsx | 438 +++++++++--------- .../components/animated-provider-steps.tsx | 4 +- .../onboarding/components/onboarding-card.tsx | 120 +++-- .../onboarding/components/onboarding-step.tsx | 2 +- .../components/onboarding-upload.tsx | 2 +- .../onboarding/components/progress-bar.tsx | 6 +- .../app/onboarding/components/tab-trigger.tsx | 33 ++ frontend/src/components/chat-renderer.tsx | 4 +- .../ui/animated-processing-icon.tsx | 4 +- 11 files changed, 330 insertions(+), 301 deletions(-) create mode 100644 frontend/src/app/onboarding/components/tab-trigger.tsx diff --git a/frontend/components/logo/dog-icon.tsx b/frontend/components/logo/dog-icon.tsx index ca53eabb..613bcd92 100644 --- a/frontend/components/logo/dog-icon.tsx +++ b/frontend/components/logo/dog-icon.tsx @@ -7,29 +7,29 @@ const DogIcon = ({ disabled = false, stroke, ...props }: DogIconProps) => { // CSS for the stepped animation states const animationCSS = ` - .state1 { animation: showState1 600ms infinite; } - .state2 { animation: showState2 600ms infinite; } - .state3 { animation: showState3 600ms infinite; } - .state4 { animation: showState4 600ms infinite; } + .state1 { animation: showDogState1 600ms infinite; } + .state2 { animation: showDogState2 600ms infinite; } + .state3 { animation: showDogState3 600ms infinite; } + .state4 { animation: showDogState4 600ms infinite; } - @keyframes showState1 { + @keyframes showDogState1 { 0%, 24.99% { opacity: 1; } 25%, 100% { opacity: 0; } } - @keyframes showState2 { + @keyframes showDogState2 { 0%, 24.99% { opacity: 0; } 25%, 49.99% { opacity: 1; } 50%, 100% { opacity: 0; } } - @keyframes showState3 { + @keyframes showDogState3 { 0%, 49.99% { opacity: 0; } 50%, 74.99% { opacity: 1; } 75%, 100% { opacity: 0; } } - @keyframes showState4 { + @keyframes showDogState4 { 0%, 74.99% { opacity: 0; } 75%, 100% { opacity: 1; } } diff --git a/frontend/src/app/chat/components/assistant-message.tsx b/frontend/src/app/chat/components/assistant-message.tsx index 2ed8c168..9abcc7e8 100644 --- a/frontend/src/app/chat/components/assistant-message.tsx +++ b/frontend/src/app/chat/components/assistant-message.tsx @@ -46,7 +46,7 @@ export function AssistantMessage({ > +
( fileInputRef.current?.click(); }, })); - + const handleFilePickerChange = (e: React.ChangeEvent) => { const files = e.target.files; if (files && files.length > 0) { @@ -92,242 +91,247 @@ export const ChatInput = forwardRef( }; return ( -
-
- {/* Outer container - flex-col to stack file preview above input */} -
- {/* File Preview Section - Always above */} - {uploadedFile && ( - { - onFileSelected(null); - }} - /> - )} +
+ + {/* Outer container - flex-col to stack file preview above input */} +
+ {/* File Preview Section - Always above */} + {uploadedFile && ( + { + onFileSelected(null); + }} + /> + )} - {/* Main Input Container - flex-row or flex-col based on textarea height */} -
40 ? 'flex-col' : 'flex-row items-center' - }`}> - {/* Filter + Textarea Section */} -
40 ? 'w-full' : 'flex-1'}`}> - {textareaHeight <= 40 && ( - selectedFilter ? ( - { - setSelectedFilter(null); - setIsFilterHighlighted(false); - }} - /> - ) : ( - - ) - )} -
- setTextareaHeight(height)} - maxRows={7} - minRows={1} - placeholder="Ask a question..." - disabled={loading} - className={`w-full text-sm bg-transparent focus-visible:outline-none resize-none`} - rows={1} + {/* Main Input Container - flex-row or flex-col based on textarea height */} +
40 ? "flex-col" : "flex-row items-center" + }`} + > + {/* Filter + Textarea Section */} +
40 ? "w-full" : "flex-1"}`} + > + {textareaHeight <= 40 && + (selectedFilter ? ( + { + setSelectedFilter(null); + setIsFilterHighlighted(false); + }} /> -
-
- - {/* Action Buttons Section */} -
40 ? 'justify-between w-full' : ''}`}> - {textareaHeight > 40 && ( - selectedFilter ? ( - { - setSelectedFilter(null); - setIsFilterHighlighted(false); - }} - /> - ) : ( - - ) - )} -
+ ) : ( + ))} +
+ setTextareaHeight(height)} + maxRows={7} + autoComplete="off" + minRows={1} + placeholder="Ask a question..." + disabled={loading} + className={`w-full text-sm bg-transparent focus-visible:outline-none resize-none`} + rows={1} + /> +
+
+ + {/* Action Buttons Section */} +
40 ? "justify-between w-full" : ""}`} + > + {textareaHeight > 40 && + (selectedFilter ? ( + { + setSelectedFilter(null); + setIsFilterHighlighted(false); + }} + /> + ) : ( -
+ ))} +
+ +
- +
+ - { - setIsFilterDropdownOpen(open); - }} - > - {anchorPosition && ( - -
- - )} - { - // Prevent auto focus on the popover content - e.preventDefault(); - // Keep focus on the input + { + setIsFilterDropdownOpen(open); + }} + > + {anchorPosition && ( + -
- {filterSearchTerm && ( -
- Searching: @{filterSearchTerm} -
- )} - {availableFilters.length === 0 ? ( -
- No knowledge filters available -
- ) : ( - <> - {!filterSearchTerm && ( - - )} - {availableFilters - .filter((filter) => - filter.name - .toLowerCase() - .includes(filterSearchTerm.toLowerCase()), - ) - .map((filter, index) => ( - - ))} - {availableFilters.filter((filter) => +
+ + )} + { + // Prevent auto focus on the popover content + e.preventDefault(); + // Keep focus on the input + }} + > +
+ {filterSearchTerm && ( +
+ Searching: @{filterSearchTerm} +
+ )} + {availableFilters.length === 0 ? ( +
+ No knowledge filters available +
+ ) : ( + <> + {!filterSearchTerm && ( + + )} + {availableFilters + .filter((filter) => filter.name .toLowerCase() .includes(filterSearchTerm.toLowerCase()), - ).length === 0 && - filterSearchTerm && ( -
- No filters match "{filterSearchTerm}" + ) + .map((filter, index) => ( +
- - - -
+ {selectedFilter?.id === filter.id && ( + + )} + + ))} + {availableFilters.filter((filter) => + filter.name + .toLowerCase() + .includes(filterSearchTerm.toLowerCase()), + ).length === 0 && + filterSearchTerm && ( +
+ No filters match "{filterSearchTerm}" +
+ )} + + )} +
+ + + +
); }, ); diff --git a/frontend/src/app/onboarding/components/animated-provider-steps.tsx b/frontend/src/app/onboarding/components/animated-provider-steps.tsx index b97113dc..fecf2c72 100644 --- a/frontend/src/app/onboarding/components/animated-provider-steps.tsx +++ b/frontend/src/app/onboarding/components/animated-provider-steps.tsx @@ -80,7 +80,7 @@ export function AnimatedProviderSteps({
-
+
void; @@ -191,84 +192,77 @@ const OnboardingCard = ({ > -
- -
- OpenAI + > + +
+ OpenAI + -
- -
- IBM watsonx.ai + > + +
+ IBM watsonx.ai + -
- -
- Ollama + > + +
+ Ollama + - - {isLoadingModels && ( - -
-
-
- )} -
- -
diff --git a/frontend/src/app/onboarding/components/onboarding-step.tsx b/frontend/src/app/onboarding/components/onboarding-step.tsx index 8670009f..f6bfd963 100644 --- a/frontend/src/app/onboarding/components/onboarding-step.tsx +++ b/frontend/src/app/onboarding/components/onboarding-step.tsx @@ -74,7 +74,7 @@ export function OnboardingStep({
) : ( icon || ( -
+
{ onClick={handleUploadClick} disabled={isUploading} > - {isUploading ? "Uploading..." : "Add a Document"} +
{isUploading ? "Uploading..." : "Add a document"}
{currentStep > 0 && onSkip && ( )} diff --git a/frontend/src/app/onboarding/components/tab-trigger.tsx b/frontend/src/app/onboarding/components/tab-trigger.tsx new file mode 100644 index 00000000..fdd6721d --- /dev/null +++ b/frontend/src/app/onboarding/components/tab-trigger.tsx @@ -0,0 +1,33 @@ +import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon"; +import { cn } from "@/lib/utils"; + +export function TabTrigger({ + children, + selected, + isLoading, +}: { + children: React.ReactNode; + selected: boolean; + isLoading: boolean; +}) { + return ( +
+
+ +
+
+ {children} +
+
+ ); +} diff --git a/frontend/src/components/chat-renderer.tsx b/frontend/src/components/chat-renderer.tsx index 1e410ee8..71d913e7 100644 --- a/frontend/src/components/chat-renderer.tsx +++ b/frontend/src/components/chat-renderer.tsx @@ -156,7 +156,7 @@ export function ChatRenderer({ }} className={cn( "flex h-full w-full max-w-full max-h-full items-center justify-center overflow-hidden", - !showLayout && "absolute", + !showLayout && "absolute max-h-[calc(100vh-190px)]", showLayout && !isOnChatPage && "bg-background", )} > @@ -199,7 +199,7 @@ export function ChatRenderer({ initial={{ opacity: 0, y: 20 }} animate={{ opacity: showLayout ? 0 : 1, y: showLayout ? 20 : 0 }} transition={{ duration: ANIMATION_DURATION, ease: "easeOut" }} - className={cn("absolute bottom-10 left-0 right-0")} + className={cn("absolute bottom-6 left-0 right-0")} > Date: Tue, 28 Oct 2025 17:08:12 -0400 Subject: [PATCH 05/25] quickstart --- docs/docs/_partial-onboarding.mdx | 4 +++- docs/docs/get-started/quickstart.mdx | 22 +++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/docs/_partial-onboarding.mdx b/docs/docs/_partial-onboarding.mdx index c956eb53..3f2de8fb 100644 --- a/docs/docs/_partial-onboarding.mdx +++ b/docs/docs/_partial-onboarding.mdx @@ -3,7 +3,9 @@ import TabItem from '@theme/TabItem'; ## Application onboarding -The first time you start OpenRAG, whether using the TUI or a `.env` file, you must complete application onboarding. +The first time you start OpenRAG, whether using the TUI or a `.env` file, it's recommended that you complete application onboarding. + +To skip onboarding, click **Skip onboarding**. Values from onboarding can be changed later in the OpenRAG **Settings** page. diff --git a/docs/docs/get-started/quickstart.mdx b/docs/docs/get-started/quickstart.mdx index 80259617..92ed71c8 100644 --- a/docs/docs/get-started/quickstart.mdx +++ b/docs/docs/get-started/quickstart.mdx @@ -7,7 +7,7 @@ import Icon from "@site/src/components/icon/icon"; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -Get started with OpenRAG by loading your knowledge, swapping out your language model, and then chatting with the OpenRAG API. +Get started with OpenRAG by loading your knowledge, swapping out your language model, and then chatting with the Langflow API. ## Prerequisites @@ -17,20 +17,20 @@ Get started with OpenRAG by loading your knowledge, swapping out your language m 1. In OpenRAG, click