From f3a70601a8dfe7b69015aa5654ae418af41ec4d9 Mon Sep 17 00:00:00 2001
From: mendonk
Date: Thu, 6 Nov 2025 23:06:52 +0000
Subject: [PATCH] deploy: 2aecfc570c1c2408f329bea18cafcd9fb868c0d5
---
404.html | 2 +-
agents/index.html | 2 +-
assets/js/0ba6a408.b13d5c3c.js | 1 -
assets/js/0ba6a408.ec0daa75.js | 1 +
.../{d0314b07.4768a2d8.js => d0314b07.3e530fee.js} | 2 +-
assets/js/eb5b356a.78d86cdb.js | 1 +
assets/js/eb5b356a.958ebb96.js | 1 -
assets/js/runtime~main.b10676c8.js | 1 +
assets/js/runtime~main.fd8892b4.js | 1 -
get-started/docker/index.html | 2 +-
index.html | 2 +-
ingestion/index.html | 2 +-
install/index.html | 8 +++++---
knowledge/index.html | 12 ++++++++++--
quickstart/index.html | 2 +-
reference/configuration/index.html | 2 +-
support/troubleshoot/index.html | 8 ++++++--
17 files changed, 32 insertions(+), 18 deletions(-)
delete mode 100644 assets/js/0ba6a408.b13d5c3c.js
create mode 100644 assets/js/0ba6a408.ec0daa75.js
rename assets/js/{d0314b07.4768a2d8.js => d0314b07.3e530fee.js} (64%)
create mode 100644 assets/js/eb5b356a.78d86cdb.js
delete mode 100644 assets/js/eb5b356a.958ebb96.js
create mode 100644 assets/js/runtime~main.b10676c8.js
delete mode 100644 assets/js/runtime~main.fd8892b4.js
diff --git a/404.html b/404.html
index aeb47b2f..76608875 100644
--- a/404.html
+++ b/404.html
@@ -4,7 +4,7 @@
OpenRAG
-
+
diff --git a/agents/index.html b/agents/index.html
index 546fbe91..3cc0f921 100644
--- a/agents/index.html
+++ b/agents/index.html
@@ -4,7 +4,7 @@
Langflow in OpenRAG | OpenRAG
-
+
diff --git a/assets/js/0ba6a408.b13d5c3c.js b/assets/js/0ba6a408.b13d5c3c.js
deleted file mode 100644
index 0c497e0c..00000000
--- a/assets/js/0ba6a408.b13d5c3c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[571],{3227:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>p,contentTitle:()=>h,default:()=>x,frontMatter:()=>a,metadata:()=>i,toc:()=>u});const i=JSON.parse('{"id":"core-components/knowledge","title":"OpenSearch in OpenRAG","description":"OpenRAG uses OpenSearch for its vector-backed knowledge store.","source":"@site/docs/core-components/knowledge.mdx","sourceDirName":"core-components","slug":"/knowledge","permalink":"/knowledge","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/core-components/knowledge.mdx","tags":[],"version":"current","frontMatter":{"title":"OpenSearch in OpenRAG","slug":"/knowledge"},"sidebar":"tutorialSidebar","previous":{"title":"Langflow in OpenRAG","permalink":"/agents"},"next":{"title":"Docling in OpenRAG","permalink":"/ingestion"}}');var t=s(4848),o=s(8453),r=s(1610),l=s(1470),d=s(9365),c=s(3782);const a={title:"OpenSearch in OpenRAG",slug:"/knowledge"},h=void 0,p={},u=[{value:"Authentication and document access",id:"auth",level:2},{value:"Ingest knowledge",id:"ingest-knowledge",level:2},{value:"Direct file ingestion",id:"direct-file-ingestion",level:3},{value:"Ingest files through OAuth connectors",id:"oauth-ingestion",level:3},{value:"Explore knowledge",id:"explore-knowledge",level:2},...c.RM,{value:"Create knowledge filters",id:"create-knowledge-filters",level:2},{value:"OpenRAG default configuration",id:"openrag-default-configuration",level:2}];function g(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["OpenRAG uses ",(0,t.jsx)(n.a,{href:"https://docs.opensearch.org/latest/",children:"OpenSearch"})," for its vector-backed knowledge store.\nThis is a specialized database for storing and retrieving embeddings, which helps your Agent efficiently find relevant information.\nOpenSearch provides powerful hybrid search capabilities with enterprise-grade security and multi-tenancy support."]}),"\n",(0,t.jsx)(n.h2,{id:"auth",children:"Authentication and document access"}),"\n",(0,t.jsxs)(n.p,{children:["OpenRAG supports two authentication modes based on how you ",(0,t.jsx)(n.a,{href:"/install",children:"install OpenRAG"}),", and which mode you choose affects document access."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"No-auth mode (Basic Setup)"}),": This mode uses a single anonymous JWT token for OpenSearch authentication, so documents uploaded to the ",(0,t.jsx)(n.code,{children:"documents"})," index by one user are visible to all other users on the OpenRAG server."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth mode (Advanced Setup)"}),": Each OpenRAG user is granted a JWT token, and each document is tagged with user ownership. Documents are filtered by user ownership, ensuring users only see documents they uploaded or have access to."]}),"\n",(0,t.jsx)(n.h2,{id:"ingest-knowledge",children:"Ingest knowledge"}),"\n",(0,t.jsxs)(n.p,{children:["OpenRAG supports knowledge ingestion through direct file uploads and OAuth connectors.\nTo configure the knowledge ingestion pipeline parameters, see ",(0,t.jsx)(n.a,{href:"/ingestion",children:"Docling Ingestion"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"direct-file-ingestion",children:"Direct file ingestion"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow uses Langflow's ",(0,t.jsxs)(n.a,{href:"https://docs.langflow.org/components-data#file",children:[(0,t.jsx)(n.strong,{children:"File"})," component"]})," to split and embed files loaded from your local machine into the OpenSearch database."]}),"\n",(0,t.jsxs)(n.p,{children:["The default path to your local folder is mounted from the ",(0,t.jsx)(n.code,{children:"./documents"})," folder in your OpenRAG project directory to the ",(0,t.jsx)(n.code,{children:"/app/documents/"})," directory inside the Docker container. Files added to the host or the container will be visible in both locations. To configure this location, modify the ",(0,t.jsx)(n.strong,{children:"Documents Paths"})," variable in either the TUI's ",(0,t.jsx)(n.a,{href:"/install#setup",children:"Advanced Setup"})," menu or in the ",(0,t.jsx)(n.code,{children:".env"})," used by Docker Compose."]}),"\n",(0,t.jsxs)(n.p,{children:["To load and process a single file from the mapped location, click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"File","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"File"}),".\nThe file is loaded into your OpenSearch database, and appears in the Knowledge page."]}),"\n",(0,t.jsxs)(n.p,{children:["To load and process a directory from the mapped location, click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"Folder","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Folder"}),".\nThe files are loaded into your OpenSearch database, and appear in the Knowledge page."]}),"\n",(0,t.jsxs)(n.p,{children:["To add files directly to a chat session, click ",(0,t.jsx)(r.A,{name:"Plus","aria-hidden":"true"})," in the chat input and select the files you want to include. Files added this way are processed and made available to the agent for the current conversation, and are not permanently added to the knowledge base."]}),"\n",(0,t.jsx)(n.h3,{id:"oauth-ingestion",children:"Ingest files through OAuth connectors"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG supports Google Drive, OneDrive, and Sharepoint as OAuth connectors for seamless document synchronization."}),"\n",(0,t.jsx)(n.p,{children:"OAuth integration allows individual users to connect their personal cloud storage accounts to OpenRAG. Each user must separately authorize OpenRAG to access their own cloud storage files. When a user connects a cloud service, they are redirected to authenticate with that service provider and grant OpenRAG permission to sync documents from their personal cloud storage."}),"\n",(0,t.jsx)(n.p,{children:"Before users can connect their cloud storage accounts, you must configure OAuth credentials in OpenRAG. This requires registering OpenRAG as an OAuth application with a cloud provider and obtaining client ID and secret keys for each service you want to support."}),"\n",(0,t.jsx)(n.p,{children:"To add an OAuth connector to OpenRAG, do the following.\nThis example uses Google OAuth.\nIf you wish to use another provider, add the secrets to another provider."}),"\n",(0,t.jsxs)(l.A,{groupId:"Installation type",children:[(0,t.jsx)(d.A,{value:"TUI",label:"TUI",default:!0,children:(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["If OpenRAG is running, stop it with ",(0,t.jsx)(n.strong,{children:"Status"})," > ",(0,t.jsx)(n.strong,{children:"Stop Services"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Add the OAuth provider's client and secret key in the ",(0,t.jsx)(n.a,{href:"/install#setup",children:"Advanced Setup"})," menu."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save Configuration"}),".\nThe TUI generates a new ",(0,t.jsx)(n.code,{children:".env"})," file with your OAuth values."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Start Container Services"}),"."]}),"\n"]})}),(0,t.jsx)(d.A,{value:".env",label:".env",children:(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Stop the Docker deployment."}),"\n",(0,t.jsxs)(n.li,{children:["Add the OAuth provider's client and secret key in the ",(0,t.jsx)(n.code,{children:".env"})," file for Docker Compose.","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"GOOGLE_OAUTH_CLIENT_ID='YOUR_OAUTH_CLIENT_ID'\nGOOGLE_OAUTH_CLIENT_SECRET='YOUR_OAUTH_CLIENT_SECRET'\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Save your ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(n.li,{children:"Start the Docker deployment."}),"\n"]})})]}),"\n",(0,t.jsxs)(n.p,{children:["The OpenRAG frontend at ",(0,t.jsx)(n.code,{children:"http://localhost:3000"})," now redirects to an OAuth callback login page for your OAuth provider.\nA successful authentication opens OpenRAG with the required scopes for your connected storage."]}),"\n",(0,t.jsx)(n.p,{children:"To add knowledge from an OAuth-connected storage provider, do the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then select the storage provider, for example, ",(0,t.jsx)(n.strong,{children:"Google Drive"}),".\nThe ",(0,t.jsx)(n.strong,{children:"Add Cloud Knowledge"})," page opens."]}),"\n",(0,t.jsxs)(n.li,{children:["To add files or folders from the connected storage, click ",(0,t.jsx)(n.strong,{children:"Add Files"}),".\nSelect the files or folders you want and click ",(0,t.jsx)(n.strong,{children:"Select"}),".\nYou can select multiple files."]}),"\n",(0,t.jsxs)(n.li,{children:["When your files are selected, click ",(0,t.jsx)(n.strong,{children:"Ingest Files"}),".\nThe ingestion process may take some time, depending on the size of your documents."]}),"\n",(0,t.jsx)(n.li,{children:"When ingestion is complete, your documents are available in the Knowledge screen."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"explore-knowledge",children:"Explore knowledge"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Knowledge"})," page lists the documents OpenRAG has ingested into the OpenSearch vector database's ",(0,t.jsx)(n.code,{children:"documents"})," index."]}),"\n",(0,t.jsxs)(n.p,{children:["To explore your current knowledge, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),".\nClick on a document to display the chunks derived from splitting the default documents into the vector database."]}),"\n",(0,t.jsxs)(n.p,{children:["Documents are processed with the default ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow, so if you want to split your documents differently, edit the ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow."]}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"create-knowledge-filters",children:"Create knowledge filters"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG includes a knowledge filter system for organizing and managing document collections.\nKnowledge filters are saved search configurations that allow you to create custom views of your document collection. They store search queries, filter criteria, and display settings that can be reused across different parts of OpenRAG."}),"\n",(0,t.jsx)(n.p,{children:"Knowledge filters help agents work more efficiently with large document collections by focusing their context within relevant documents sets."}),"\n",(0,t.jsx)(n.p,{children:"To create a knowledge filter, do the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge Filters"}),".\nThe ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane appears."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enter a ",(0,t.jsx)(n.strong,{children:"Name"})," and ",(0,t.jsx)(n.strong,{children:"Description"}),", and then click ",(0,t.jsx)(n.strong,{children:"Create Filter"}),".\nA new filter is created with default settings that match all documents."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To modify the filter, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then click your new filter to edit it in the ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane."]}),"\n",(0,t.jsx)(n.p,{children:"The following filter options are configurable."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Search Query"}),': Enter text for semantic search, such as "financial reports from Q4".']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Data Sources"}),": Select specific data sources or folders to include."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Document Types"}),": Filter by file type."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Owners"}),": Filter by who uploaded the documents."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Connectors"}),": Filter by connector types, such as local upload or Google Drive."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Response Limit"}),": Set maximum number of results. The default is ",(0,t.jsx)(n.code,{children:"10"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Score Threshold"}),": Set minimum relevance score. The default score is ",(0,t.jsx)(n.code,{children:"0"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["When you're done editing the filter, click ",(0,t.jsx)(n.strong,{children:"Update Filter"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To apply the filter to OpenRAG globally, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then select the filter to apply. One filter can be enabled at a time."]}),"\n",(0,t.jsxs)(n.p,{children:["To apply the filter to a single chat session, in the ",(0,t.jsx)(r.A,{name:"MessageSquare","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Chat"})," window, click ",(0,t.jsx)(r.A,{name:"Funnel","aria-hidden":"true"}),", and then select the filter to apply."]}),"\n",(0,t.jsxs)(n.p,{children:["To delete the filter, in the ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane, click ",(0,t.jsx)(n.strong,{children:"Delete Filter"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"openrag-default-configuration",children:"OpenRAG default configuration"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG automatically detects and configures the correct vector dimensions for embedding models, ensuring optimal search performance and compatibility."}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of supported models is available at ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/services/models_service.py",children:[(0,t.jsx)(n.code,{children:"models_service.py"})," in the OpenRAG repository"]}),"."]}),"\n",(0,t.jsx)(n.p,{children:"You can use custom embedding models by specifying them in your configuration."}),"\n",(0,t.jsxs)(n.p,{children:["If you use an unknown embedding model, OpenRAG will automatically fall back to ",(0,t.jsx)(n.code,{children:"1536"})," dimensions and log a warning. The system will continue to work, but search quality may be affected if the actual model dimensions differ from ",(0,t.jsx)(n.code,{children:"1536"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The default embedding dimension is ",(0,t.jsx)(n.code,{children:"1536"})," and the default model is ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For models with known vector dimensions, see ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:[(0,t.jsx)(n.code,{children:"settings.py"})," in the OpenRAG repository"]}),"."]})]})}function x(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},3782:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>r});var i=s(4848),t=s(8453),o=s(1610);const r=[];function l(e){const n={a:"a",p:"p",strong:"strong",...(0,t.R)(),...e.components};return(0,i.jsxs)(n.p,{children:["All flows included with OpenRAG are designed to be modular, performant, and provider-agnostic.\nTo modify a flow, click ",(0,i.jsx)(o.A,{name:"Settings2","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Settings"}),", and click ",(0,i.jsx)(n.strong,{children:"Edit in Langflow"}),".\nOpenRAG's visual editor is based on the ",(0,i.jsx)(n.a,{href:"https://docs.langflow.org/concepts-overview",children:"Langflow visual editor"}),", so you can edit your flows to match your specific use case."]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/0ba6a408.ec0daa75.js b/assets/js/0ba6a408.ec0daa75.js
new file mode 100644
index 00000000..0608fe4a
--- /dev/null
+++ b/assets/js/0ba6a408.ec0daa75.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[571],{3227:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>h,default:()=>x,frontMatter:()=>a,metadata:()=>i,toc:()=>p});const i=JSON.parse('{"id":"core-components/knowledge","title":"OpenSearch in OpenRAG","description":"OpenRAG uses OpenSearch for its vector-backed knowledge store.","source":"@site/docs/core-components/knowledge.mdx","sourceDirName":"core-components","slug":"/knowledge","permalink":"/knowledge","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/core-components/knowledge.mdx","tags":[],"version":"current","frontMatter":{"title":"OpenSearch in OpenRAG","slug":"/knowledge"},"sidebar":"tutorialSidebar","previous":{"title":"Langflow in OpenRAG","permalink":"/agents"},"next":{"title":"Docling in OpenRAG","permalink":"/ingestion"}}');var t=s(4848),o=s(8453),r=s(1610),l=s(1470),d=s(9365),c=s(3782);const a={title:"OpenSearch in OpenRAG",slug:"/knowledge"},h=void 0,u={},p=[{value:"Authentication and document access",id:"auth",level:2},{value:"Ingest knowledge",id:"ingest-knowledge",level:2},{value:"Direct file ingestion",id:"direct-file-ingestion",level:3},{value:"Ingest files through OAuth connectors",id:"oauth-ingestion",level:3},{value:"Monitor ingestion tasks",id:"monitor-ingestion-tasks",level:2},{value:"Explore knowledge",id:"explore-knowledge",level:2},...c.RM,{value:"Create knowledge filters",id:"create-knowledge-filters",level:2},{value:"OpenRAG default configuration",id:"openrag-default-configuration",level:2}];function g(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["OpenRAG uses ",(0,t.jsx)(n.a,{href:"https://docs.opensearch.org/latest/",children:"OpenSearch"})," for its vector-backed knowledge store.\nThis is a specialized database for storing and retrieving embeddings, which helps your Agent efficiently find relevant information.\nOpenSearch provides powerful hybrid search capabilities with enterprise-grade security and multi-tenancy support."]}),"\n",(0,t.jsx)(n.h2,{id:"auth",children:"Authentication and document access"}),"\n",(0,t.jsxs)(n.p,{children:["OpenRAG supports two authentication modes based on how you ",(0,t.jsx)(n.a,{href:"/install",children:"install OpenRAG"}),", and which mode you choose affects document access."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"No-auth mode (Basic Setup)"}),": This mode uses a single anonymous JWT token for OpenSearch authentication, so documents uploaded to the ",(0,t.jsx)(n.code,{children:"documents"})," index by one user are visible to all other users on the OpenRAG server."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth mode (Advanced Setup)"}),": Each OpenRAG user is granted a JWT token, and each document is tagged with user ownership. Documents are filtered by user ownership, ensuring users only see documents they uploaded or have access to."]}),"\n",(0,t.jsx)(n.h2,{id:"ingest-knowledge",children:"Ingest knowledge"}),"\n",(0,t.jsxs)(n.p,{children:["OpenRAG supports knowledge ingestion through direct file uploads and OAuth connectors.\nTo configure the knowledge ingestion pipeline parameters, see ",(0,t.jsx)(n.a,{href:"/ingestion",children:"Docling Ingestion"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"direct-file-ingestion",children:"Direct file ingestion"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow uses Langflow's ",(0,t.jsxs)(n.a,{href:"https://docs.langflow.org/components-data#file",children:[(0,t.jsx)(n.strong,{children:"File"})," component"]})," to split and embed files loaded from your local machine into the OpenSearch database."]}),"\n",(0,t.jsxs)(n.p,{children:["The default path to your local folder is mounted from the ",(0,t.jsx)(n.code,{children:"./documents"})," folder in your OpenRAG project directory to the ",(0,t.jsx)(n.code,{children:"/app/documents/"})," directory inside the Docker container. Files added to the host or the container will be visible in both locations. To configure this location, modify the ",(0,t.jsx)(n.strong,{children:"Documents Paths"})," variable in either the TUI's ",(0,t.jsx)(n.a,{href:"/install#setup",children:"Advanced Setup"})," menu or in the ",(0,t.jsx)(n.code,{children:".env"})," used by Docker Compose."]}),"\n",(0,t.jsxs)(n.p,{children:["To load and process a single file from the mapped location, click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"File","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"File"}),".\nThe file is loaded into your OpenSearch database, and appears in the Knowledge page."]}),"\n",(0,t.jsxs)(n.p,{children:["To load and process a directory from the mapped location, click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"Folder","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Folder"}),".\nThe files are loaded into your OpenSearch database, and appear in the Knowledge page."]}),"\n",(0,t.jsxs)(n.p,{children:["To add files directly to a chat session, click ",(0,t.jsx)(r.A,{name:"Plus","aria-hidden":"true"})," in the chat input and select the files you want to include. Files added this way are processed and made available to the agent for the current conversation, and are not permanently added to the knowledge base."]}),"\n",(0,t.jsx)(n.h3,{id:"oauth-ingestion",children:"Ingest files through OAuth connectors"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG supports Google Drive, OneDrive, and Sharepoint as OAuth connectors for seamless document synchronization."}),"\n",(0,t.jsx)(n.p,{children:"OAuth integration allows individual users to connect their personal cloud storage accounts to OpenRAG. Each user must separately authorize OpenRAG to access their own cloud storage files. When a user connects a cloud service, they are redirected to authenticate with that service provider and grant OpenRAG permission to sync documents from their personal cloud storage."}),"\n",(0,t.jsx)(n.p,{children:"Before users can connect their cloud storage accounts, you must configure OAuth credentials in OpenRAG. This requires registering OpenRAG as an OAuth application with a cloud provider and obtaining client ID and secret keys for each service you want to support."}),"\n",(0,t.jsx)(n.p,{children:"To add an OAuth connector to OpenRAG, do the following.\nThis example uses Google OAuth.\nIf you wish to use another provider, add the secrets to another provider."}),"\n",(0,t.jsxs)(l.A,{groupId:"Installation type",children:[(0,t.jsx)(d.A,{value:"TUI",label:"TUI",default:!0,children:(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["If OpenRAG is running, stop it with ",(0,t.jsx)(n.strong,{children:"Status"})," > ",(0,t.jsx)(n.strong,{children:"Stop Services"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Add the OAuth provider's client and secret key in the ",(0,t.jsx)(n.a,{href:"/install#setup",children:"Advanced Setup"})," menu."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Save Configuration"}),".\nThe TUI generates a new ",(0,t.jsx)(n.code,{children:".env"})," file with your OAuth values."]}),"\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Start Container Services"}),"."]}),"\n"]})}),(0,t.jsx)(d.A,{value:".env",label:".env",children:(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Stop the Docker deployment."}),"\n",(0,t.jsxs)(n.li,{children:["Add the OAuth provider's client and secret key in the ",(0,t.jsx)(n.code,{children:".env"})," file for Docker Compose.","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"GOOGLE_OAUTH_CLIENT_ID='YOUR_OAUTH_CLIENT_ID'\nGOOGLE_OAUTH_CLIENT_SECRET='YOUR_OAUTH_CLIENT_SECRET'\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Save your ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(n.li,{children:"Start the Docker deployment."}),"\n"]})})]}),"\n",(0,t.jsxs)(n.p,{children:["The OpenRAG frontend at ",(0,t.jsx)(n.code,{children:"http://localhost:3000"})," now redirects to an OAuth callback login page for your OAuth provider.\nA successful authentication opens OpenRAG with the required scopes for your connected storage."]}),"\n",(0,t.jsx)(n.p,{children:"To add knowledge from an OAuth-connected storage provider, do the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Click ",(0,t.jsx)(n.strong,{children:"Add Knowledge"}),", and then select the storage provider, for example, ",(0,t.jsx)(n.strong,{children:"Google Drive"}),".\nThe ",(0,t.jsx)(n.strong,{children:"Add Cloud Knowledge"})," page opens."]}),"\n",(0,t.jsxs)(n.li,{children:["To add files or folders from the connected storage, click ",(0,t.jsx)(n.strong,{children:"Add Files"}),".\nSelect the files or folders you want and click ",(0,t.jsx)(n.strong,{children:"Select"}),".\nYou can select multiple files."]}),"\n",(0,t.jsxs)(n.li,{children:["When your files are selected, click ",(0,t.jsx)(n.strong,{children:"Ingest Files"}),".\nThe ingestion process may take some time, depending on the size of your documents."]}),"\n",(0,t.jsx)(n.li,{children:"When ingestion is complete, your documents are available in the Knowledge screen."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If ingestion fails, click ",(0,t.jsx)(n.strong,{children:"Status"})," to view the logged error."]}),"\n",(0,t.jsx)(n.h2,{id:"monitor-ingestion-tasks",children:"Monitor ingestion tasks"}),"\n",(0,t.jsxs)(n.p,{children:["When you upload files, process folders, or sync documents, OpenRAG processes them as background tasks.\nA badge appears on the ",(0,t.jsx)(r.A,{name:"Bell","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Tasks"})," icon when there are active tasks running.\nTo open the Tasks menu, click ",(0,t.jsx)(r.A,{name:"Bell","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Tasks"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Active Tasks"})," shows tasks that are currently processing.\nA ",(0,t.jsx)(n.strong,{children:"Pending"})," task is queued and waiting to start, a ",(0,t.jsx)(n.strong,{children:"Running"})," task is actively processing files, and a ",(0,t.jsx)(n.strong,{children:"Processing"})," task is performing ingestion operations. For each active task, you can find the task ID, start time, duration, the number of files processed so far, and the total files."]}),"\n",(0,t.jsxs)(n.p,{children:["You can cancel active tasks by clicking ",(0,t.jsx)(r.A,{name:"X","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Cancel"}),". Canceling a task stops processing immediately and marks the task as failed."]}),"\n",(0,t.jsx)(n.h2,{id:"explore-knowledge",children:"Explore knowledge"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Knowledge"})," page lists the documents OpenRAG has ingested into the OpenSearch vector database's ",(0,t.jsx)(n.code,{children:"documents"})," index."]}),"\n",(0,t.jsxs)(n.p,{children:["To explore your current knowledge, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),".\nClick on a document to display the chunks derived from splitting the default documents into the vector database."]}),"\n",(0,t.jsxs)(n.p,{children:["Documents are processed with the default ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow, so if you want to split your documents differently, edit the ",(0,t.jsx)(n.strong,{children:"Knowledge Ingest"})," flow."]}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"create-knowledge-filters",children:"Create knowledge filters"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG includes a knowledge filter system for organizing and managing document collections.\nKnowledge filters are saved search configurations that allow you to create custom views of your document collection. They store search queries, filter criteria, and display settings that can be reused across different parts of OpenRAG."}),"\n",(0,t.jsx)(n.p,{children:"Knowledge filters help agents work more efficiently with large document collections by focusing their context within relevant documents sets."}),"\n",(0,t.jsx)(n.p,{children:"To create a knowledge filter, do the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then click ",(0,t.jsx)(r.A,{name:"Plus","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge Filters"}),".\nThe ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane appears."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Enter a ",(0,t.jsx)(n.strong,{children:"Name"})," and ",(0,t.jsx)(n.strong,{children:"Description"}),", and then click ",(0,t.jsx)(n.strong,{children:"Create Filter"}),".\nA new filter is created with default settings that match all documents."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To modify the filter, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then click your new filter to edit it in the ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane."]}),"\n",(0,t.jsx)(n.p,{children:"The following filter options are configurable."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Search Query"}),': Enter text for semantic search, such as "financial reports from Q4".']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Data Sources"}),": Select specific data sources or folders to include."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Document Types"}),": Filter by file type."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Owners"}),": Filter by who uploaded the documents."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Connectors"}),": Filter by connector types, such as local upload or Google Drive."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Response Limit"}),": Set maximum number of results. The default is ",(0,t.jsx)(n.code,{children:"10"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Score Threshold"}),": Set minimum relevance score. The default score is ",(0,t.jsx)(n.code,{children:"0"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["When you're done editing the filter, click ",(0,t.jsx)(n.strong,{children:"Update Filter"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To apply the filter to OpenRAG globally, click ",(0,t.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Knowledge"}),", and then select the filter to apply. One filter can be enabled at a time."]}),"\n",(0,t.jsxs)(n.p,{children:["To apply the filter to a single chat session, in the ",(0,t.jsx)(r.A,{name:"MessageSquare","aria-hidden":"true"})," ",(0,t.jsx)(n.strong,{children:"Chat"})," window, click ",(0,t.jsx)(r.A,{name:"Funnel","aria-hidden":"true"}),", and then select the filter to apply."]}),"\n",(0,t.jsxs)(n.p,{children:["To delete the filter, in the ",(0,t.jsx)(n.strong,{children:"Knowledge Filter"})," pane, click ",(0,t.jsx)(n.strong,{children:"Delete Filter"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"openrag-default-configuration",children:"OpenRAG default configuration"}),"\n",(0,t.jsx)(n.p,{children:"OpenRAG automatically detects and configures the correct vector dimensions for embedding models, ensuring optimal search performance and compatibility."}),"\n",(0,t.jsxs)(n.p,{children:["The complete list of supported models is available at ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/services/models_service.py",children:[(0,t.jsx)(n.code,{children:"models_service.py"})," in the OpenRAG repository"]}),"."]}),"\n",(0,t.jsx)(n.p,{children:"You can use custom embedding models by specifying them in your configuration."}),"\n",(0,t.jsxs)(n.p,{children:["If you use an unknown embedding model, OpenRAG will automatically fall back to ",(0,t.jsx)(n.code,{children:"1536"})," dimensions and log a warning. The system will continue to work, but search quality may be affected if the actual model dimensions differ from ",(0,t.jsx)(n.code,{children:"1536"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The default embedding dimension is ",(0,t.jsx)(n.code,{children:"1536"})," and the default model is ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For models with known vector dimensions, see ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:[(0,t.jsx)(n.code,{children:"settings.py"})," in the OpenRAG repository"]}),"."]})]})}function x(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},3782:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>r});var i=s(4848),t=s(8453),o=s(1610);const r=[];function l(e){const n={a:"a",p:"p",strong:"strong",...(0,t.R)(),...e.components};return(0,i.jsxs)(n.p,{children:["All flows included with OpenRAG are designed to be modular, performant, and provider-agnostic.\nTo modify a flow, click ",(0,i.jsx)(o.A,{name:"Settings2","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Settings"}),", and click ",(0,i.jsx)(n.strong,{children:"Edit in Langflow"}),".\nOpenRAG's visual editor is based on the ",(0,i.jsx)(n.a,{href:"https://docs.langflow.org/concepts-overview",children:"Langflow visual editor"}),", so you can edit your flows to match your specific use case."]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/d0314b07.4768a2d8.js b/assets/js/d0314b07.3e530fee.js
similarity index 64%
rename from assets/js/d0314b07.4768a2d8.js
rename to assets/js/d0314b07.3e530fee.js
index bd2846bb..a5d70a6a 100644
--- a/assets/js/d0314b07.4768a2d8.js
+++ b/assets/js/d0314b07.3e530fee.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[5750],{887:(e,n,s)=>{s.d(n,{Ay:()=>c,RM:()=>o});var i=s(4848),r=s(8453),t=s(1470),l=s(9365);const o=[{value:"Application onboarding",id:"application-onboarding",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"application-onboarding",children:"Application onboarding"}),"\n",(0,i.jsxs)(n.p,{children:["The first time you start OpenRAG, whether using the TUI or a ",(0,i.jsx)(n.code,{children:".env"})," file, it's recommended that you complete application onboarding."]}),"\n",(0,i.jsxs)(n.p,{children:["To skip onboarding, click ",(0,i.jsx)(n.strong,{children:"Skip onboarding"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.p,{children:["Most values from onboarding can be changed later in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," page, but there are important restrictions."]}),(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"language model provider"})," and ",(0,i.jsx)(n.strong,{children:"embeddings model provider"})," can only be selected at onboarding.\nTo change your provider selection later, you must ",(0,i.jsx)(n.a,{href:"/install#reinstall",children:"reinstall OpenRAG"}),"."]}),(0,i.jsx)(n.p,{children:"You must use the same provider for your language model and embedding model, unless you're using Ollama."})]}),"\n",(0,i.jsx)(n.p,{children:"Choose one LLM provider and complete only those steps:"}),"\n",(0,i.jsxs)(t.A,{groupId:"Provider",children:[(0,i.jsx)(l.A,{value:"OpenAI",label:"OpenAI",default:!0,children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Enable ",(0,i.jsx)(n.strong,{children:"Get API key from environment variable"})," to automatically enter your key from the TUI-generated ",(0,i.jsx)(n.code,{children:".env"})," file.\nAlternatively, paste an OpenAI API key into the field."]}),"\n",(0,i.jsxs)(n.li,{children:["Under ",(0,i.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,i.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Complete the fields for ",(0,i.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,i.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,i.jsx)(n.strong,{children:"IBM API key"}),".\nThese values are found in your IBM watsonx deployment."]}),"\n",(0,i.jsxs)(n.li,{children:["Under ",(0,i.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,i.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Ollama is not included with OpenRAG. To install Ollama, see the ",(0,i.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama documentation"}),"."]})}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Enter your Ollama server's base URL address.\nThe default Ollama server address is ",(0,i.jsx)(n.code,{children:"http://localhost:11434"}),".\nOpenRAG automatically transforms ",(0,i.jsx)(n.code,{children:"localhost"})," to access services outside of the container, and sends a test connection to your Ollama server to confirm connectivity."]}),"\n",(0,i.jsxs)(n.li,{children:["Select the ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"})," your Ollama server is running.\nOpenRAG retrieves the available models from your Ollama server."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>i,toc:()=>p});const i=JSON.parse('{"id":"get-started/install","title":"Install OpenRAG with TUI","description":"Install OpenRAG and then run the OpenRAG Terminal User Interface(TUI) to start your OpenRAG deployment with a guided setup process.","source":"@site/docs/get-started/install.mdx","sourceDirName":"get-started","slug":"/install","permalink":"/install","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install.mdx","tags":[],"version":"current","frontMatter":{"title":"Install OpenRAG with TUI","slug":"/install"},"sidebar":"tutorialSidebar","previous":{"title":"About OpenRAG","permalink":"/"},"next":{"title":"Install OpenRAG containers","permalink":"/get-started/docker"}}');var r=s(4848),t=s(8453),l=s(1470),o=s(9365),a=s(887);const c={title:"Install OpenRAG with TUI",slug:"/install"},d=void 0,h={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation Methods",id:"install",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,{value:"Close the OpenRAG TUI",id:"close-the-openrag-tui",level:2},{value:"Manage OpenRAG containers with the TUI",id:"tui-container-management",level:2},{value:"Start all services",id:"start-all-services",level:3},{value:"Status",id:"status",level:3},{value:"Native services status",id:"native-services-status",level:3},{value:"Diagnostics",id:"diagnostics",level:2},{value:"Reinstall OpenRAG",id:"reinstall",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"#install",children:"Install OpenRAG"})," and then run the ",(0,r.jsx)(n.a,{href:"#setup",children:"OpenRAG Terminal User Interface(TUI)"})," to start your OpenRAG deployment with a guided setup process."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenRAG Terminal User Interface (TUI) allows you to set up, configure, and monitor your OpenRAG deployment directly from the terminal."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:s(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,r.jsxs)(n.p,{children:["Instead of starting OpenRAG using Docker commands and manually editing values in the ",(0,r.jsx)(n.code,{children:".env"})," file, the TUI walks you through the setup. It prompts for variables where required, creates a ",(0,r.jsx)(n.code,{children:".env"})," file for you, and then starts OpenRAG."]}),"\n",(0,r.jsx)(n.p,{children:"Once OpenRAG is running, use the TUI to monitor your application, control your containers, and retrieve logs."}),"\n",(0,r.jsxs)(n.p,{children:["If you prefer running Podman or Docker containers and manually editing ",(0,r.jsx)(n.code,{children:".env"})," files, see ",(0,r.jsx)(n.a,{href:"/get-started/docker",children:"Install OpenRAG Containers"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python Version 3.10 to 3.13"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),". If using Podman, use ",(0,r.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:"podman-compose"})," or alias Docker compose commands to Podman commands."]}),"\n",(0,r.jsxs)(n.li,{children:["Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),". This key is ",(0,r.jsx)(n.strong,{children:"required"})," to start OpenRAG, but you can choose a different model provider during ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,r.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/",children:"CUDA"})," support, and compatible NVIDIA drivers on the OpenRAG host machine. If you don't have GPU capabilities, OpenRAG provides an alternate CPU-only deployment."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"install",children:"Installation Methods"}),"\n",(0,r.jsx)(n.admonition,{title:"Windows users",type:"note",children:(0,r.jsxs)(n.p,{children:["To use OpenRAG on Windows, use ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"Choose an installation method based on your needs:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The automatic installer script detects and installs prerequisites and then runs OpenRAG. Recommended for first-time users."}),"\n",(0,r.jsxs)(n.li,{children:["For a quick test, use ",(0,r.jsx)(n.code,{children:"uvx"})," to run OpenRAG without creating a project or modifying files."]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"uv add"})," to install OpenRAG as a managed dependency in a new or existing Python project."]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"uv pip install"})," to install OpenRAG into an existing virtual environment."]}),"\n"]}),"\n",(0,r.jsxs)(l.A,{groupId:"Installation method",children:[(0,r.jsxs)(o.A,{value:"installer",label:"Automatic installer",default:!0,children:[(0,r.jsxs)(n.p,{children:["The script detects and installs uv, Docker/Podman, and Docker Compose prerequisites, then runs OpenRAG with ",(0,r.jsx)(n.code,{children:"uvx"}),"."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a directory to store the OpenRAG configuration files:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://docs.openr.ag/files/run_openrag_with_prereqs.sh | bash\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file and docker-compose files in the current working directory."]})]}),(0,r.jsxs)(o.A,{value:"uvx",label:"Quick test with uvx",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uvx"})," to quickly run OpenRAG without creating a project or modifying any files."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a directory to store the OpenRAG configuration files:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n",(0,r.jsx)(n.p,{children:"To run a specific version:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uvx --from openrag==0.1.30 openrag\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file and docker-compose files in the current working directory."]})]}),(0,r.jsxs)(o.A,{value:"uv-add",label:"Python project with uv add",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uv add"})," to install OpenRAG as a dependency in your Python project. This adds OpenRAG to your ",(0,r.jsx)(n.code,{children:"pyproject.toml"})," and lockfile, making your installation reproducible and version-controlled."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a new project with a virtual environment:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv init YOUR_PROJECT_NAME\ncd YOUR_PROJECT_NAME\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"(venv)"})," prompt doesn't change, but ",(0,r.jsx)(n.code,{children:"uv"})," commands will automatically use the project's virtual environment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add OpenRAG to your project:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add openrag\n"})}),"\n",(0,r.jsx)(n.p,{children:"To add a specific version:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add openrag==0.1.30\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(i,{closed:!0,children:[(0,r.jsx)("summary",{children:"Install a local wheel"}),(0,r.jsx)(n.p,{children:"If you downloaded the OpenRAG wheel to your local machine, install it by specifying its path:"}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add the wheel to your project:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add PATH/TO/openrag-VERSION-py3-none-any.whl\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"PATH/TO/"})," and ",(0,r.jsx)(n.code,{children:"VERSION"})," with the path and version of your downloaded OpenRAG ",(0,r.jsx)(n.code,{children:".whl"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]})]})]}),(0,r.jsxs)(o.A,{value:"uv-pip",label:"Existing virtual environment with uv pip install",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uv pip install"})," to install OpenRAG into an existing virtual environment that isn't managed by ",(0,r.jsx)(n.code,{children:"uv"}),"."]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["For new projects, ",(0,r.jsx)(n.code,{children:"uv add"})," is recommended as it manages dependencies in your project's lockfile."]})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Activate your virtual environment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Install OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv pip install openrag\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openrag\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file in your OpenRAG directory root and starts OpenRAG.\nIf the TUI detects a ",(0,r.jsx)(n.code,{children:".env"})," file in the OpenRAG root directory, it sources any variables from the ",(0,r.jsx)(n.code,{children:".env"})," file.\nIf the TUI detects OAuth credentials, it enforces the ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," path."]}),"\n",(0,r.jsxs)(l.A,{groupId:"Setup method",children:[(0,r.jsxs)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Basic Setup"})," can generate all of the required values for OpenRAG except the OpenAI API key.\n",(0,r.jsx)(n.strong,{children:"Basic Setup"})," does not set up OAuth connections for ingestion from cloud providers.\nFor OAuth setup, use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),".\nFor information about the difference between basic (no auth) and OAuth in OpenRAG, see ",(0,r.jsx)(n.a,{href:"/knowledge#auth",children:"Authentication and document access"}),"."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To install OpenRAG with ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),", click ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or press ",(0,r.jsx)("kbd",{children:"1"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,r.jsxs)(n.p,{children:["The OpenSearch password is required. The Langflow admin password is optional.\nIf no Langflow admin password is generated, Langflow runs in ",(0,r.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"autologin mode"})," with no password required."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save Configuration"}),".\nYour passwords are saved in the ",(0,r.jsx)(n.code,{children:".env"})," file used to start OpenRAG."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,r.jsx)(n.strong,{children:"Start All Services"}),".\nStartup pulls container images and runs them, so it can take some time.\nWhen startup is complete, the TUI displays the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start the Docling service, under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To open the OpenRAG application, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(o.A,{value:"Advanced setup",label:"Advanced setup",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To install OpenRAG with ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),", click ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," or press ",(0,r.jsx)("kbd",{children:"2"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,r.jsxs)(n.p,{children:["The OpenSearch password is required. The Langflow admin password is optional.\nIf no Langflow admin password is generated, Langflow runs in ",(0,r.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"autologin mode"})," with no password required."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add your client and secret values for Google or Microsoft OAuth.\nThese values can be found with your OAuth provider.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client"})," or ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/graph-oauth",children:"Microsoft Graph OAuth client"})," documentation."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The OpenRAG TUI presents redirect URIs for your OAuth app.\nThese are the URLs your OAuth provider will redirect back to after user sign-in.\nRegister these redirect values with your OAuth provider as they are presented in the TUI."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,r.jsx)(n.strong,{children:"Start All Services"}),".\nStartup pulls container images and runs them, so it can take some time.\nWhen startup is complete, the TUI displays the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start the Docling service, under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To open the OpenRAG application, click ",(0,r.jsx)(n.strong,{children:"Open App"}),".\nYou are presented with your provider's OAuth sign-in screen.\nAfter sign-in, you are redirected to the redirect URI."]}),"\n",(0,r.jsx)(n.p,{children:"Two additional variables are available for Advanced Setup:"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"})," controls where the Langflow web interface can be accessed. This is where users interact with their flows in a browser."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"})," controls where the endpoint for ",(0,r.jsx)(n.code,{children:"/connectors/CONNECTOR_TYPE/webhook"})," will be available.\nThis connection enables real-time document synchronization with external services.\nSupported webhook endpoints:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})})]}),"\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsx)(n.h2,{id:"close-the-openrag-tui",children:"Close the OpenRAG TUI"}),"\n",(0,r.jsxs)(n.p,{children:["To close the OpenRAG TUI, press ",(0,r.jsx)("kbd",{children:"q"}),".\nThe OpenRAG containers will continue to be served until the containers are stopped.\nFor more information, see ",(0,r.jsx)(n.a,{href:"#tui-container-management",children:"Manage OpenRAG containers with the TUI "}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To start the TUI again, run ",(0,r.jsx)(n.code,{children:"uv run openrag"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"tui-container-management",children:"Manage OpenRAG containers with the TUI"}),"\n",(0,r.jsx)(n.p,{children:"After installation, the TUI can deploy, manage, and upgrade your OpenRAG containers."}),"\n",(0,r.jsx)(n.h3,{id:"start-all-services",children:"Start all services"}),"\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG containers.\nThe TUI automatically detects your container runtime, and then checks if your machine has compatible GPU support by checking for ",(0,r.jsx)(n.code,{children:"CUDA"}),", ",(0,r.jsx)(n.code,{children:"NVIDIA_SMI"}),", and Docker/Podman runtime support. This check determines which Docker Compose file OpenRAG uses.\nThe TUI then pulls the images and deploys the containers with the following command."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If images are missing, the TUI runs ",(0,r.jsx)(n.code,{children:"docker compose pull"}),", then runs ",(0,r.jsx)(n.code,{children:"docker compose up -d"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"status",children:"Status"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Status"})," menu displays information on your container deployment.\nHere you can check container health, find your service ports, view logs, and upgrade your containers."]}),"\n",(0,r.jsxs)(n.p,{children:["To view streaming logs, select the container you want to view, and press ",(0,r.jsx)("kbd",{children:"l"}),".\nTo copy your logs, click ",(0,r.jsx)(n.strong,{children:"Copy to Clipboard"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To ",(0,r.jsx)(n.strong,{children:"upgrade"})," your containers, click ",(0,r.jsx)(n.strong,{children:"Upgrade"}),".\n",(0,r.jsx)(n.strong,{children:"Upgrade"})," runs ",(0,r.jsx)(n.code,{children:"docker compose pull"})," and then ",(0,r.jsx)(n.code,{children:"docker compose up -d --force-recreate"}),".\nThe first command pulls the latest images of OpenRAG.\nThe second command recreates the containers with your data persisted."]}),"\n",(0,r.jsxs)(n.p,{children:["To ",(0,r.jsx)(n.strong,{children:"reset"})," your containers, click ",(0,r.jsx)(n.strong,{children:"Reset"}),".\nReset gives you a completely fresh start.\nReset deletes all of your data, including OpenSearch data, uploaded documents, and authentication.\n",(0,r.jsx)(n.strong,{children:"Reset"})," runs two commands.\nIt first stops and removes all containers, volumes, and local images."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"docker compose down --volumes --remove-orphans --rmi local\n"})}),"\n",(0,r.jsxs)(n.p,{children:["When the first command is complete, OpenRAG removes any additional Docker objects with ",(0,r.jsx)(n.code,{children:"prune"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"docker system prune -f\n"})}),"\n",(0,r.jsx)(n.h3,{id:"native-services-status",children:"Native services status"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.em,{children:"native service"})," in OpenRAG refers to a service run locally on your machine, and not within a container.\nThe ",(0,r.jsx)(n.code,{children:"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."]}),"\n",(0,r.jsxs)(n.p,{children:["To start or stop ",(0,r.jsx)(n.code,{children:"docling serve"})," or any other native services, in the TUI Status menu, click ",(0,r.jsx)(n.strong,{children:"Stop"})," or ",(0,r.jsx)(n.strong,{children:"Restart"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To view the status, port, or PID of a native service, in the TUI main menu, click ",(0,r.jsx)(n.a,{href:"#status",children:"Status"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"diagnostics",children:"Diagnostics"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Diagnostics"})," menu provides health monitoring for your container runtimes and monitoring of your OpenSearch security."]}),"\n",(0,r.jsx)(n.h2,{id:"reinstall",children:"Reinstall OpenRAG"}),"\n",(0,r.jsx)(n.p,{children:"To reinstall OpenRAG with a completely fresh setup:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Reset your containers using the ",(0,r.jsx)(n.strong,{children:"Reset"})," button in the ",(0,r.jsx)(n.a,{href:"#status",children:"TUI status"})," menu.\nThis removes all containers, volumes, and data."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Delete your project's ",(0,r.jsx)(n.code,{children:".env"})," file.\nThe Reset operation does not remove your project's ",(0,r.jsx)(n.code,{children:".env"})," file, so your passwords, API keys, and OAuth settings can be preserved.\nIf you delete the ",(0,r.jsx)(n.code,{children:".env"})," file, run the ",(0,r.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"})," process again to create a new configuration."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI Setup menu, follow these steps from ",(0,r.jsx)(n.a,{href:"#setup",children:"Basic Setup"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to pull container images and start them."]}),"\n",(0,r.jsxs)(n.li,{children:["Under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Open App"})," to open the OpenRAG application."]}),"\n",(0,r.jsxs)(n.li,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5689:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/OpenRAG_TUI_2025-09-10T13_04_11_757637-9441c53ba39162a88ac6c11cbeaed0e0.svg"}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[5750],{887:(e,n,s)=>{s.d(n,{Ay:()=>c,RM:()=>o});var i=s(4848),r=s(8453),t=s(1470),l=s(9365);const o=[{value:"Application onboarding",id:"application-onboarding",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"application-onboarding",children:"Application onboarding"}),"\n",(0,i.jsxs)(n.p,{children:["The first time you start OpenRAG, whether using the TUI or a ",(0,i.jsx)(n.code,{children:".env"})," file, it's recommended that you complete application onboarding."]}),"\n",(0,i.jsxs)(n.p,{children:["To skip onboarding, click ",(0,i.jsx)(n.strong,{children:"Skip onboarding"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.p,{children:["Most values from onboarding can be changed later in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," page, but there are important restrictions."]}),(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"language model provider"})," and ",(0,i.jsx)(n.strong,{children:"embeddings model provider"})," can only be selected at onboarding.\nTo change your provider selection later, you must ",(0,i.jsx)(n.a,{href:"/install#reinstall",children:"reinstall OpenRAG"}),"."]}),(0,i.jsx)(n.p,{children:"You must use the same provider for your language model and embedding model, unless you're using Ollama."})]}),"\n",(0,i.jsx)(n.p,{children:"Choose one LLM provider and complete only those steps:"}),"\n",(0,i.jsxs)(t.A,{groupId:"Provider",children:[(0,i.jsx)(l.A,{value:"OpenAI",label:"OpenAI",default:!0,children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Enable ",(0,i.jsx)(n.strong,{children:"Get API key from environment variable"})," to automatically enter your key from the TUI-generated ",(0,i.jsx)(n.code,{children:".env"})," file.\nAlternatively, paste an OpenAI API key into the field."]}),"\n",(0,i.jsxs)(n.li,{children:["Under ",(0,i.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,i.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Complete the fields for ",(0,i.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,i.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,i.jsx)(n.strong,{children:"IBM API key"}),".\nThese values are found in your IBM watsonx deployment."]}),"\n",(0,i.jsxs)(n.li,{children:["Under ",(0,i.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,i.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Ollama is not included with OpenRAG. To install Ollama, see the ",(0,i.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama documentation"}),"."]})}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Enter your Ollama server's base URL address.\nThe default Ollama server address is ",(0,i.jsx)(n.code,{children:"http://localhost:11434"}),".\nOpenRAG automatically transforms ",(0,i.jsx)(n.code,{children:"localhost"})," to access services outside of the container, and sends a test connection to your Ollama server to confirm connectivity."]}),"\n",(0,i.jsxs)(n.li,{children:["Select the ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,i.jsx)(n.strong,{children:"Language Model"})," your Ollama server is running.\nOpenRAG retrieves the available models from your Ollama server."]}),"\n",(0,i.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,i.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,i.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,i.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with the ",(0,i.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>i,toc:()=>p});const i=JSON.parse('{"id":"get-started/install","title":"Install OpenRAG with TUI","description":"Install OpenRAG and then run the OpenRAG Terminal User Interface(TUI) to start your OpenRAG deployment with a guided setup process.","source":"@site/docs/get-started/install.mdx","sourceDirName":"get-started","slug":"/install","permalink":"/install","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install.mdx","tags":[],"version":"current","frontMatter":{"title":"Install OpenRAG with TUI","slug":"/install"},"sidebar":"tutorialSidebar","previous":{"title":"About OpenRAG","permalink":"/"},"next":{"title":"Install OpenRAG containers","permalink":"/get-started/docker"}}');var r=s(4848),t=s(8453),l=s(1470),o=s(9365),a=s(887);const c={title:"Install OpenRAG with TUI",slug:"/install"},d=void 0,h={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation Methods",id:"install",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,{value:"Close the OpenRAG TUI",id:"close-the-openrag-tui",level:2},{value:"Manage OpenRAG containers with the TUI",id:"tui-container-management",level:2},{value:"Start all services",id:"start-all-services",level:3},{value:"Status",id:"status",level:3},{value:"Native services status",id:"native-services-status",level:3},{value:"Diagnostics",id:"diagnostics",level:2},{value:"Reinstall OpenRAG",id:"reinstall",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"#install",children:"Install OpenRAG"})," and then run the ",(0,r.jsx)(n.a,{href:"#setup",children:"OpenRAG Terminal User Interface(TUI)"})," to start your OpenRAG deployment with a guided setup process."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenRAG Terminal User Interface (TUI) allows you to set up, configure, and monitor your OpenRAG deployment directly from the terminal."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:s(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,r.jsxs)(n.p,{children:["Instead of starting OpenRAG using Docker commands and manually editing values in the ",(0,r.jsx)(n.code,{children:".env"})," file, the TUI walks you through the setup. It prompts for variables where required, creates a ",(0,r.jsx)(n.code,{children:".env"})," file for you, and then starts OpenRAG."]}),"\n",(0,r.jsx)(n.p,{children:"Once OpenRAG is running, use the TUI to monitor your application, control your containers, and retrieve logs."}),"\n",(0,r.jsxs)(n.p,{children:["If you prefer running Podman or Docker containers and manually editing ",(0,r.jsx)(n.code,{children:".env"})," files, see ",(0,r.jsx)(n.a,{href:"/get-started/docker",children:"Install OpenRAG Containers"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python Version 3.10 to 3.13"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"})]}),"\n",(0,r.jsxs)(n.li,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),". If using Podman, use ",(0,r.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:"podman-compose"})," or alias Docker compose commands to Podman commands."]}),"\n",(0,r.jsxs)(n.li,{children:["Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),". This key is ",(0,r.jsx)(n.strong,{children:"required"})," to start OpenRAG, but you can choose a different model provider during ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,r.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/",children:"CUDA"})," support, and compatible NVIDIA drivers on the OpenRAG host machine. If you don't have GPU capabilities, OpenRAG provides an alternate CPU-only deployment."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"install",children:"Installation Methods"}),"\n",(0,r.jsx)(n.admonition,{title:"Windows users",type:"note",children:(0,r.jsxs)(n.p,{children:["To use OpenRAG on Windows, use ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"Choose an installation method based on your needs:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The automatic installer script detects and installs prerequisites and then runs OpenRAG. Recommended for first-time users."}),"\n",(0,r.jsxs)(n.li,{children:["For a quick test, use ",(0,r.jsx)(n.code,{children:"uvx"})," to run OpenRAG without creating a project or modifying files."]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"uv add"})," to install OpenRAG as a managed dependency in a new or existing Python project."]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"uv pip install"})," to install OpenRAG into an existing virtual environment."]}),"\n"]}),"\n",(0,r.jsxs)(l.A,{groupId:"Installation method",children:[(0,r.jsxs)(o.A,{value:"installer",label:"Automatic installer",default:!0,children:[(0,r.jsxs)(n.p,{children:["The script detects and installs uv, Docker/Podman, and Docker Compose prerequisites, then runs OpenRAG with ",(0,r.jsx)(n.code,{children:"uvx"}),"."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a directory to store the OpenRAG configuration files:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://docs.openr.ag/files/run_openrag_with_prereqs.sh | bash\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file and docker-compose files in the current working directory."]})]}),(0,r.jsxs)(o.A,{value:"uvx",label:"Quick test with uvx",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uvx"})," to quickly run OpenRAG without creating a project or modifying any files."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a directory to store the OpenRAG configuration files:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n",(0,r.jsx)(n.p,{children:"To run a specific version:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uvx --from openrag==0.1.30 openrag\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file and docker-compose files in the current working directory."]})]}),(0,r.jsxs)(o.A,{value:"uv-add",label:"Python project with uv add",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uv add"})," to install OpenRAG as a dependency in your Python project. This adds OpenRAG to your ",(0,r.jsx)(n.code,{children:"pyproject.toml"})," and lockfile, making your installation reproducible and version-controlled."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a new project with a virtual environment:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv init YOUR_PROJECT_NAME\ncd YOUR_PROJECT_NAME\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"(venv)"})," prompt doesn't change, but ",(0,r.jsx)(n.code,{children:"uv"})," commands will automatically use the project's virtual environment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add OpenRAG to your project:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add openrag\n"})}),"\n",(0,r.jsx)(n.p,{children:"To add a specific version:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add openrag==0.1.30\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),(0,r.jsxs)(i,{closed:!0,children:[(0,r.jsx)("summary",{children:"Install a local wheel"}),(0,r.jsx)(n.p,{children:"If you downloaded the OpenRAG wheel to your local machine, install it by specifying its path:"}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add the wheel to your project:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv add PATH/TO/openrag-VERSION-py3-none-any.whl\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"PATH/TO/"})," and ",(0,r.jsx)(n.code,{children:"VERSION"})," with the path and version of your downloaded OpenRAG ",(0,r.jsx)(n.code,{children:".whl"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]})]})]}),(0,r.jsxs)(o.A,{value:"uv-pip",label:"Existing virtual environment with uv pip install",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"uv pip install"})," to install OpenRAG into an existing virtual environment that isn't managed by ",(0,r.jsx)(n.code,{children:"uv"}),"."]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["For new projects, ",(0,r.jsx)(n.code,{children:"uv add"})," is recommended as it manages dependencies in your project's lockfile."]})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Activate your virtual environment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Install OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uv pip install openrag\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run OpenRAG:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openrag\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,r.jsxs)(n.p,{children:["The TUI creates a ",(0,r.jsx)(n.code,{children:".env"})," file in your OpenRAG directory root and starts OpenRAG.\nIf the TUI detects a ",(0,r.jsx)(n.code,{children:".env"})," file in the OpenRAG root directory, it sources any variables from the ",(0,r.jsx)(n.code,{children:".env"})," file.\nIf the TUI detects OAuth credentials, it enforces the ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," path."]}),"\n",(0,r.jsxs)(l.A,{groupId:"Setup method",children:[(0,r.jsxs)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Basic Setup"})," can generate all of the required values for OpenRAG except the OpenAI API key.\n",(0,r.jsx)(n.strong,{children:"Basic Setup"})," does not set up OAuth connections for ingestion from cloud providers.\nFor OAuth setup, use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),".\nFor information about the difference between basic (no auth) and OAuth in OpenRAG, see ",(0,r.jsx)(n.a,{href:"/knowledge#auth",children:"Authentication and document access"}),"."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To install OpenRAG with ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),", click ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or press ",(0,r.jsx)("kbd",{children:"1"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,r.jsxs)(n.p,{children:["The OpenSearch password is required. The Langflow admin password is optional.\nIf no Langflow admin password is generated, Langflow runs in ",(0,r.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"autologin mode"})," with no password required."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save Configuration"}),".\nYour passwords are saved in the ",(0,r.jsx)(n.code,{children:".env"})," file used to start OpenRAG."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,r.jsx)(n.strong,{children:"Start All Services"}),".\nStartup pulls container images and runs them, so it can take some time.\nWhen startup is complete, the TUI displays the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start the Docling service, under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To open the OpenRAG application, navigate to the TUI main menu, and then click ",(0,r.jsx)(n.strong,{children:"Open App"}),".\nAlternatively, in your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(o.A,{value:"Advanced setup",label:"Advanced setup",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To install OpenRAG with ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),", click ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," or press ",(0,r.jsx)("kbd",{children:"2"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,r.jsxs)(n.p,{children:["The OpenSearch password is required. The Langflow admin password is optional.\nIf no Langflow admin password is generated, Langflow runs in ",(0,r.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"autologin mode"})," with no password required."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add your client and secret values for Google or Microsoft OAuth.\nThese values can be found with your OAuth provider.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client"})," or ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/graph-oauth",children:"Microsoft Graph OAuth client"})," documentation."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The OpenRAG TUI presents redirect URIs for your OAuth app.\nThese are the URLs your OAuth provider will redirect back to after user sign-in.\nRegister these redirect values with your OAuth provider as they are presented in the TUI."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,r.jsx)(n.strong,{children:"Start All Services"}),".\nStartup pulls container images and runs them, so it can take some time.\nWhen startup is complete, the TUI displays the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start the Docling service, under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To open the OpenRAG application, navigate to the TUI main menu, and then click ",(0,r.jsx)(n.strong,{children:"Open App"}),".\nAlternatively, in your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),".\nYou are presented with your provider's OAuth sign-in screen.\nAfter sign-in, you are redirected to the redirect URI."]}),"\n",(0,r.jsx)(n.p,{children:"Two additional variables are available for Advanced Setup:"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"})," controls where the Langflow web interface can be accessed. This is where users interact with their flows in a browser."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"})," controls where the endpoint for ",(0,r.jsx)(n.code,{children:"/connectors/CONNECTOR_TYPE/webhook"})," will be available.\nThis connection enables real-time document synchronization with external services.\nSupported webhook endpoints:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})})]}),"\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsx)(n.h2,{id:"close-the-openrag-tui",children:"Close the OpenRAG TUI"}),"\n",(0,r.jsxs)(n.p,{children:["To close the OpenRAG TUI, press ",(0,r.jsx)("kbd",{children:"q"}),".\nThe OpenRAG containers will continue to be served until the containers are stopped.\nFor more information, see ",(0,r.jsx)(n.a,{href:"#tui-container-management",children:"Manage OpenRAG containers with the TUI "}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To start the TUI again, run ",(0,r.jsx)(n.code,{children:"uv run openrag"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"tui-container-management",children:"Manage OpenRAG containers with the TUI"}),"\n",(0,r.jsx)(n.p,{children:"After installation, the TUI can deploy, manage, and upgrade your OpenRAG containers."}),"\n",(0,r.jsx)(n.h3,{id:"start-all-services",children:"Start all services"}),"\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG containers.\nThe TUI automatically detects your container runtime, and then checks if your machine has compatible GPU support by checking for ",(0,r.jsx)(n.code,{children:"CUDA"}),", ",(0,r.jsx)(n.code,{children:"NVIDIA_SMI"}),", and Docker/Podman runtime support. This check determines which Docker Compose file OpenRAG uses.\nThe TUI then pulls the images and deploys the containers with the following command."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If images are missing, the TUI runs ",(0,r.jsx)(n.code,{children:"docker compose pull"}),", then runs ",(0,r.jsx)(n.code,{children:"docker compose up -d"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"status",children:"Status"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Status"})," menu displays information on your container deployment.\nHere you can check container health, find your service ports, view logs, and upgrade your containers."]}),"\n",(0,r.jsxs)(n.p,{children:["To view streaming logs, select the container you want to view, and press ",(0,r.jsx)("kbd",{children:"l"}),".\nTo copy your logs, click ",(0,r.jsx)(n.strong,{children:"Copy to Clipboard"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To ",(0,r.jsx)(n.strong,{children:"upgrade"})," your containers, click ",(0,r.jsx)(n.strong,{children:"Upgrade"}),".\n",(0,r.jsx)(n.strong,{children:"Upgrade"})," runs ",(0,r.jsx)(n.code,{children:"docker compose pull"})," and then ",(0,r.jsx)(n.code,{children:"docker compose up -d --force-recreate"}),".\nThe first command pulls the latest images of OpenRAG.\nThe second command recreates the containers with your data persisted."]}),"\n",(0,r.jsxs)(n.p,{children:["To ",(0,r.jsx)(n.strong,{children:"reset"})," your containers, click ",(0,r.jsx)(n.strong,{children:"Reset"}),".\nReset gives you a completely fresh start.\nReset deletes all of your data, including OpenSearch data, uploaded documents, and authentication.\n",(0,r.jsx)(n.strong,{children:"Reset"})," runs two commands.\nIt first stops and removes all containers, volumes, and local images."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"docker compose down --volumes --remove-orphans --rmi local\n"})}),"\n",(0,r.jsxs)(n.p,{children:["When the first command is complete, OpenRAG removes any additional Docker objects with ",(0,r.jsx)(n.code,{children:"prune"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"docker system prune -f\n"})}),"\n",(0,r.jsx)(n.h3,{id:"native-services-status",children:"Native services status"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.em,{children:"native service"})," in OpenRAG refers to a service run locally on your machine, and not within a container.\nThe ",(0,r.jsx)(n.code,{children:"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."]}),"\n",(0,r.jsxs)(n.p,{children:["To start or stop ",(0,r.jsx)(n.code,{children:"docling serve"})," or any other native services, in the TUI Status menu, click ",(0,r.jsx)(n.strong,{children:"Stop"})," or ",(0,r.jsx)(n.strong,{children:"Restart"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["To view the status, port, or PID of a native service, in the TUI main menu, click ",(0,r.jsx)(n.a,{href:"#status",children:"Status"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"diagnostics",children:"Diagnostics"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Diagnostics"})," menu provides health monitoring for your container runtimes and monitoring of your OpenSearch security."]}),"\n",(0,r.jsx)(n.h2,{id:"reinstall",children:"Reinstall OpenRAG"}),"\n",(0,r.jsx)(n.p,{children:"To reinstall OpenRAG with a completely fresh setup:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Reset your containers using the ",(0,r.jsx)(n.strong,{children:"Reset"})," button in the ",(0,r.jsx)(n.a,{href:"#status",children:"TUI status"})," menu.\nThis removes all containers, volumes, and data."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Delete your project's ",(0,r.jsx)(n.code,{children:".env"})," file.\nThe Reset operation does not remove your project's ",(0,r.jsx)(n.code,{children:".env"})," file, so your passwords, API keys, and OAuth settings can be preserved.\nIf you delete the ",(0,r.jsx)(n.code,{children:".env"})," file, run the ",(0,r.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"})," process again to create a new configuration."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI Setup menu, follow these steps from ",(0,r.jsx)(n.a,{href:"#setup",children:"Basic Setup"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to pull container images and start them."]}),"\n",(0,r.jsxs)(n.li,{children:["Under ",(0,r.jsx)(n.strong,{children:"Native Services"}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Open App"})," to open the OpenRAG application."]}),"\n",(0,r.jsxs)(n.li,{children:["Continue with ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5689:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/OpenRAG_TUI_2025-09-10T13_04_11_757637-9441c53ba39162a88ac6c11cbeaed0e0.svg"}}]);
\ No newline at end of file
diff --git a/assets/js/eb5b356a.78d86cdb.js b/assets/js/eb5b356a.78d86cdb.js
new file mode 100644
index 00000000..e5197806
--- /dev/null
+++ b/assets/js/eb5b356a.78d86cdb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[2668],{5014:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"support/troubleshoot","title":"Troubleshooting","description":"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG.","source":"@site/docs/support/troubleshoot.mdx","sourceDirName":"support","slug":"/support/troubleshoot","permalink":"/support/troubleshoot","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/support/troubleshoot.mdx","tags":[],"version":"current","frontMatter":{"title":"Troubleshooting","slug":"/support/troubleshoot"},"sidebar":"tutorialSidebar","previous":{"title":"Environment variables","permalink":"/reference/configuration"}}');var s=o(4848),a=o(8453),t=o(1470),i=o(9365);const l={title:"Troubleshooting",slug:"/support/troubleshoot"},c=void 0,d={},h=[{value:"OpenSearch fails to start",id:"opensearch-fails-to-start",level:2},{value:"OpenRAG fails to start from the TUI with "Operation not supported" error",id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported-error",level:2},{value:"Langflow connection issues",id:"langflow-connection-issues",level:2},{value:"Memory errors",id:"memory-errors",level:2},{value:"Container out of memory errors",id:"container-out-of-memory-errors",level:3},{value:"Podman on macOS memory issues",id:"podman-on-macos-memory-issues",level:3},{value:"Port conflicts",id:"port-conflicts",level:2},{value:"OCR ingestion fails (easyocr not installed)",id:"ocr-ingestion-fails-easyocr-not-installed",level:2},{value:"Langflow container already exists",id:"langflow-container-already-exists",level:2}];function p(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG."}),"\n",(0,s.jsx)(n.h2,{id:"opensearch-fails-to-start",children:"OpenSearch fails to start"}),"\n",(0,s.jsxs)(n.p,{children:["Check that ",(0,s.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," set in ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"Environment variables"})," meets requirements.\nThe password must contain at least 8 characters, and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character that is strong."]}),"\n",(0,s.jsx)(n.h2,{id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported-error",children:'OpenRAG fails to start from the TUI with "Operation not supported" error'}),"\n",(0,s.jsxs)(n.p,{children:["This error occurs when starting OpenRAG with the TUI in ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The error occurs because OpenRAG is running within a WSL environment, so ",(0,s.jsx)(n.code,{children:"webbrowser.open()"})," can't launch a browser automatically."]}),"\n",(0,s.jsxs)(n.p,{children:["To access the OpenRAG application, open a web browser and enter ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," in the address bar."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-connection-issues",children:"Langflow connection issues"}),"\n",(0,s.jsxs)(n.p,{children:["Verify the ",(0,s.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," credentials set in ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"Environment variables"})," are correct."]}),"\n",(0,s.jsx)(n.h2,{id:"memory-errors",children:"Memory errors"}),"\n",(0,s.jsx)(n.h3,{id:"container-out-of-memory-errors",children:"Container out of memory errors"}),"\n",(0,s.jsxs)(n.p,{children:["Increase Docker memory allocation or use ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose-cpu.yml",children:"docker-compose-cpu.yml"})," to deploy OpenRAG."]}),"\n",(0,s.jsx)(n.h3,{id:"podman-on-macos-memory-issues",children:"Podman on macOS memory issues"}),"\n",(0,s.jsx)(n.p,{children:"If you're using Podman on macOS, you may need to increase VM memory on your Podman machine.\nThis example increases the machine size to 8 GB of RAM, which should be sufficient to run OpenRAG."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"podman machine stop\npodman machine rm\npodman machine init --memory 8192 # 8 GB example\npodman machine start\n"})}),"\n",(0,s.jsx)(n.h2,{id:"port-conflicts",children:"Port conflicts"}),"\n",(0,s.jsx)(n.p,{children:"Ensure ports 3000, 7860, 8000, 9200, 5601 are available."}),"\n",(0,s.jsx)(n.h2,{id:"ocr-ingestion-fails-easyocr-not-installed",children:"OCR ingestion fails (easyocr not installed)"}),"\n",(0,s.jsxs)(n.p,{children:["If Docling ingestion fails with an OCR-related error and mentions ",(0,s.jsx)(n.code,{children:"easyocr"})," is missing, this is likely due to a stale ",(0,s.jsx)(n.code,{children:"uv"})," cache."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"easyocr"})," is already included as a dependency in OpenRAG's ",(0,s.jsx)(n.code,{children:"pyproject.toml"}),". Project-managed installations using ",(0,s.jsx)(n.code,{children:"uv sync"})," and ",(0,s.jsx)(n.code,{children:"uv run"})," always sync dependencies directly from your ",(0,s.jsx)(n.code,{children:"pyproject.toml"}),", so they should have ",(0,s.jsx)(n.code,{children:"easyocr"})," installed."]}),"\n",(0,s.jsxs)(n.p,{children:["If you're running OpenRAG with ",(0,s.jsx)(n.code,{children:"uvx openrag"}),", ",(0,s.jsx)(n.code,{children:"uvx"})," creates a cached, ephemeral environment that doesn't modify your project. This cache may become stale."]}),"\n",(0,s.jsxs)(n.p,{children:["On macOS, this cache directory is typically a user cache directory such as ",(0,s.jsx)(n.code,{children:"/Users/USER_NAME/.cache/uv"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["To clear the uv cache, run:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uv cache clean\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Start OpenRAG:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you do not need OCR, you can disable OCR-based processing in your ingestion settings to avoid requiring ",(0,s.jsx)(n.code,{children:"easyocr"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-container-already-exists",children:"Langflow container already exists"}),"\n",(0,s.jsx)(n.p,{children:"If you are running other versions of Langflow containers on your machine, you may encounter an issue where Docker or Podman thinks Langflow is already up."}),"\n",(0,s.jsx)(n.p,{children:"Remove just the problem container, or clean up all containers and start fresh."}),"\n",(0,s.jsx)(n.p,{children:"To reset your local containers and pull new images, do the following:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Stop your containers and completely remove them."}),"\n",(0,s.jsxs)(t.A,{groupId:"Container software",children:[(0,s.jsx)(i.A,{value:"Podman",label:"Podman",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Stop all running containers\npodman stop --all\n\n# Remove all containers (including stopped ones)\npodman rm --all --force\n\n# Remove all images\npodman rmi --all --force\n\n# Remove all volumes\npodman volume prune --force\n\n# Remove all networks (except default)\npodman network prune --force\n\n# Clean up any leftover data\npodman system prune --all --force --volumes\n"})})}),(0,s.jsx)(i.A,{value:"Docker",label:"Docker",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Stop all running containers\ndocker stop $(docker ps -q)\n\n# Remove all containers (including stopped ones)\ndocker rm --force $(docker ps -aq)\n\n# Remove all images\ndocker rmi --force $(docker images -q)\n\n# Remove all volumes\ndocker volume prune --force\n\n# Remove all networks (except default)\ndocker network prune --force\n\n# Clean up any leftover data\ndocker system prune --all --force --volumes\n"})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart OpenRAG and upgrade to get the latest images for your containers."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uv sync\nuv run openrag\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the OpenRAG TUI, click ",(0,s.jsx)(n.strong,{children:"Status"}),", and then click ",(0,s.jsx)(n.strong,{children:"Upgrade"}),".\nWhen the ",(0,s.jsx)(n.strong,{children:"Close"})," button is active, the upgrade is complete.\nClose the window and open the OpenRAG appplication."]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/eb5b356a.958ebb96.js b/assets/js/eb5b356a.958ebb96.js
deleted file mode 100644
index 25ac26d4..00000000
--- a/assets/js/eb5b356a.958ebb96.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[2668],{5014:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>t,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"support/troubleshoot","title":"Troubleshooting","description":"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG.","source":"@site/docs/support/troubleshoot.mdx","sourceDirName":"support","slug":"/support/troubleshoot","permalink":"/support/troubleshoot","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/support/troubleshoot.mdx","tags":[],"version":"current","frontMatter":{"title":"Troubleshooting","slug":"/support/troubleshoot"},"sidebar":"tutorialSidebar","previous":{"title":"Environment variables","permalink":"/reference/configuration"}}');var s=o(4848),a=o(8453),i=o(1470),l=o(9365);const t={title:"Troubleshooting",slug:"/support/troubleshoot"},c=void 0,d={},h=[{value:"OpenSearch fails to start",id:"opensearch-fails-to-start",level:2},{value:"Langflow connection issues",id:"langflow-connection-issues",level:2},{value:"Memory errors",id:"memory-errors",level:2},{value:"Container out of memory errors",id:"container-out-of-memory-errors",level:3},{value:"Podman on macOS memory issues",id:"podman-on-macos-memory-issues",level:3},{value:"Port conflicts",id:"port-conflicts",level:2},{value:"OCR ingestion fails (easyocr not installed)",id:"ocr-ingestion-fails-easyocr-not-installed",level:2},{value:"Langflow container already exists",id:"langflow-container-already-exists",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG."}),"\n",(0,s.jsx)(n.h2,{id:"opensearch-fails-to-start",children:"OpenSearch fails to start"}),"\n",(0,s.jsxs)(n.p,{children:["Check that ",(0,s.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," set in ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"Environment variables"})," meets requirements.\nThe password must contain at least 8 characters, and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character that is strong."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-connection-issues",children:"Langflow connection issues"}),"\n",(0,s.jsxs)(n.p,{children:["Verify the ",(0,s.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," credentials set in ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"Environment variables"})," are correct."]}),"\n",(0,s.jsx)(n.h2,{id:"memory-errors",children:"Memory errors"}),"\n",(0,s.jsx)(n.h3,{id:"container-out-of-memory-errors",children:"Container out of memory errors"}),"\n",(0,s.jsxs)(n.p,{children:["Increase Docker memory allocation or use ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose-cpu.yml",children:"docker-compose-cpu.yml"})," to deploy OpenRAG."]}),"\n",(0,s.jsx)(n.h3,{id:"podman-on-macos-memory-issues",children:"Podman on macOS memory issues"}),"\n",(0,s.jsx)(n.p,{children:"If you're using Podman on macOS, you may need to increase VM memory on your Podman machine.\nThis example increases the machine size to 8 GB of RAM, which should be sufficient to run OpenRAG."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"podman machine stop\npodman machine rm\npodman machine init --memory 8192 # 8 GB example\npodman machine start\n"})}),"\n",(0,s.jsx)(n.h2,{id:"port-conflicts",children:"Port conflicts"}),"\n",(0,s.jsx)(n.p,{children:"Ensure ports 3000, 7860, 8000, 9200, 5601 are available."}),"\n",(0,s.jsx)(n.h2,{id:"ocr-ingestion-fails-easyocr-not-installed",children:"OCR ingestion fails (easyocr not installed)"}),"\n",(0,s.jsxs)(n.p,{children:["If Docling ingestion fails with an OCR-related error and mentions ",(0,s.jsx)(n.code,{children:"easyocr"})," is missing, this is likely due to a stale ",(0,s.jsx)(n.code,{children:"uv"})," cache."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"easyocr"})," is already included as a dependency in OpenRAG's ",(0,s.jsx)(n.code,{children:"pyproject.toml"}),". Project-managed installations using ",(0,s.jsx)(n.code,{children:"uv sync"})," and ",(0,s.jsx)(n.code,{children:"uv run"})," always sync dependencies directly from your ",(0,s.jsx)(n.code,{children:"pyproject.toml"}),", so they should have ",(0,s.jsx)(n.code,{children:"easyocr"})," installed."]}),"\n",(0,s.jsxs)(n.p,{children:["If you're running OpenRAG with ",(0,s.jsx)(n.code,{children:"uvx openrag"}),", ",(0,s.jsx)(n.code,{children:"uvx"})," creates a cached, ephemeral environment that doesn't modify your project. This cache may become stale."]}),"\n",(0,s.jsxs)(n.p,{children:["On macOS, this cache directory is typically a user cache directory such as ",(0,s.jsx)(n.code,{children:"/Users/USER_NAME/.cache/uv"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["To clear the uv cache, run:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uv cache clean\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Start OpenRAG:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you do not need OCR, you can disable OCR-based processing in your ingestion settings to avoid requiring ",(0,s.jsx)(n.code,{children:"easyocr"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-container-already-exists",children:"Langflow container already exists"}),"\n",(0,s.jsx)(n.p,{children:"If you are running other versions of Langflow containers on your machine, you may encounter an issue where Docker or Podman thinks Langflow is already up."}),"\n",(0,s.jsx)(n.p,{children:"Remove just the problem container, or clean up all containers and start fresh."}),"\n",(0,s.jsx)(n.p,{children:"To reset your local containers and pull new images, do the following:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Stop your containers and completely remove them."}),"\n",(0,s.jsxs)(i.A,{groupId:"Container software",children:[(0,s.jsx)(l.A,{value:"Podman",label:"Podman",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Stop all running containers\npodman stop --all\n\n# Remove all containers (including stopped ones)\npodman rm --all --force\n\n# Remove all images\npodman rmi --all --force\n\n# Remove all volumes\npodman volume prune --force\n\n# Remove all networks (except default)\npodman network prune --force\n\n# Clean up any leftover data\npodman system prune --all --force --volumes\n"})})}),(0,s.jsx)(l.A,{value:"Docker",label:"Docker",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Stop all running containers\ndocker stop $(docker ps -q)\n\n# Remove all containers (including stopped ones)\ndocker rm --force $(docker ps -aq)\n\n# Remove all images\ndocker rmi --force $(docker images -q)\n\n# Remove all volumes\ndocker volume prune --force\n\n# Remove all networks (except default)\ndocker network prune --force\n\n# Clean up any leftover data\ndocker system prune --all --force --volumes\n"})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart OpenRAG and upgrade to get the latest images for your containers."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uv sync\nuv run openrag\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the OpenRAG TUI, click ",(0,s.jsx)(n.strong,{children:"Status"}),", and then click ",(0,s.jsx)(n.strong,{children:"Upgrade"}),".\nWhen the ",(0,s.jsx)(n.strong,{children:"Close"})," button is active, the upgrade is complete.\nClose the window and open the OpenRAG appplication."]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.b10676c8.js b/assets/js/runtime~main.b10676c8.js
new file mode 100644
index 00000000..13ff1b85
--- /dev/null
+++ b/assets/js/runtime~main.b10676c8.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,t,r,o,n={},c={};function d(e){var a=c[e];if(void 0!==a)return a.exports;var t=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=n,d.c=c,e=[],d.O=(a,t,r,o)=>{if(!t){var n=1/0;for(b=0;b=o)&&Object.keys(d.O).every(e=>d.O[e](t[f]))?t.splice(f--,1):(c=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[t,r,o]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};a=a||[null,t({}),t([]),t(t)];for(var c=2&r&&e;("object"==typeof c||"function"==typeof c)&&!~a.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach(a=>n[a]=()=>e[a]);return n.default=()=>e,d.d(o,n),o},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((a,t)=>(d.f[t](e,a),a),[])),d.u=e=>"assets/js/"+({98:"af920ffe",571:"0ba6a408",1567:"22dd74f7",2076:"common",2272:"749371cc",2668:"eb5b356a",5742:"aba21aa0",5750:"d0314b07",6919:"ca2c3c0c",7098:"a7bd4aaa",8401:"17896441",9026:"c8078f0a",9048:"a94703ab",9172:"e633a5ea",9532:"33362219",9647:"5e95c892"}[e]||e)+"."+{98:"059a83cf",165:"c26d6a3e",291:"cd97fb9c",571:"ec0daa75",617:"1447cf1d",1e3:"3d4d9f77",1203:"6c86c874",1567:"0b9cd514",1741:"070da722",1746:"4b809a87",2076:"3a9d628e",2130:"0c95b4e7",2237:"b77c091f",2272:"05ec0947",2279:"0f9c36da",2291:"f017bd44",2325:"d0a48f1d",2334:"dbc94d93",2668:"78d86cdb",2821:"5850139d",3488:"7023792e",3490:"618f86cf",3815:"503d6709",4250:"12e4bf74",4379:"c2ae56a8",4616:"28af5598",4802:"bbffcf8d",4981:"1178b3ff",5480:"82213497",5742:"35622335",5750:"3e530fee",5901:"a84db486",5955:"6630df13",5996:"4315eaf2",6241:"70145387",6319:"c05e2240",6366:"03bf2589",6567:"44bf886a",6919:"4d983365",6992:"ce79b8a2",7098:"bc099609",7592:"35906688",7873:"ad98bc5d",7928:"25b35ee3",8142:"538be8cd",8249:"7b519ea1",8401:"11b57c0a",8565:"cea3e8a9",8756:"37ec9e08",9026:"4aee576d",9032:"8d15afa4",9048:"bfa519e3",9172:"380cba07",9412:"74eee71d",9510:"f78dc8f8",9532:"667bb0cb",9647:"251a99dd"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="openrag-docs:",d.l=(e,a,t,n)=>{if(r[e])r[e].push(a);else{var c,f;if(void 0!==t)for(var i=document.getElementsByTagName("script"),b=0;b{c.onerror=c.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"8401",33362219:"9532",af920ffe:"98","0ba6a408":"571","22dd74f7":"1567",common:"2076","749371cc":"2272",eb5b356a:"2668",aba21aa0:"5742",d0314b07:"5750",ca2c3c0c:"6919",a7bd4aaa:"7098",c8078f0a:"9026",a94703ab:"9048",e633a5ea:"9172","5e95c892":"9647"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var n=d.p+d.u(a),c=new Error;d.l(n,t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;c.message="Loading chunk "+a+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,r[1](c)}},"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,n=t[0],c=t[1],f=t[2],i=0;if(n.some(a=>0!==e[a])){for(r in c)d.o(c,r)&&(d.m[r]=c[r]);if(f)var b=f(d)}for(a&&a(t);i{"use strict";var e,a,t,r,o,c={},n={};function f(e){var a=n[e];if(void 0!==a)return a.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,f),t.loaded=!0,t.exports}f.m=c,f.c=n,e=[],f.O=(a,t,r,o)=>{if(!t){var c=1/0;for(b=0;b=o)&&Object.keys(f.O).every(e=>f.O[e](t[d]))?t.splice(d--,1):(n=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[t,r,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var n=2&r&&e;("object"==typeof n||"function"==typeof n)&&!~a.indexOf(n);n=t(n))Object.getOwnPropertyNames(n).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,t)=>(f.f[t](e,a),a),[])),f.u=e=>"assets/js/"+({98:"af920ffe",571:"0ba6a408",1567:"22dd74f7",2076:"common",2272:"749371cc",2668:"eb5b356a",5742:"aba21aa0",5750:"d0314b07",6919:"ca2c3c0c",7098:"a7bd4aaa",8401:"17896441",9026:"c8078f0a",9048:"a94703ab",9172:"e633a5ea",9532:"33362219",9647:"5e95c892"}[e]||e)+"."+{98:"059a83cf",165:"c26d6a3e",291:"cd97fb9c",571:"b13d5c3c",617:"1447cf1d",1e3:"3d4d9f77",1203:"6c86c874",1567:"0b9cd514",1741:"070da722",1746:"4b809a87",2076:"3a9d628e",2130:"0c95b4e7",2237:"b77c091f",2272:"05ec0947",2279:"0f9c36da",2291:"f017bd44",2325:"d0a48f1d",2334:"dbc94d93",2668:"958ebb96",2821:"5850139d",3488:"7023792e",3490:"618f86cf",3815:"503d6709",4250:"12e4bf74",4379:"c2ae56a8",4616:"28af5598",4802:"bbffcf8d",4981:"1178b3ff",5480:"82213497",5742:"35622335",5750:"4768a2d8",5901:"a84db486",5955:"6630df13",5996:"4315eaf2",6241:"70145387",6319:"c05e2240",6366:"03bf2589",6567:"44bf886a",6919:"4d983365",6992:"ce79b8a2",7098:"bc099609",7592:"35906688",7873:"ad98bc5d",7928:"25b35ee3",8142:"538be8cd",8249:"7b519ea1",8401:"11b57c0a",8565:"cea3e8a9",8756:"37ec9e08",9026:"4aee576d",9032:"8d15afa4",9048:"bfa519e3",9172:"380cba07",9412:"74eee71d",9510:"f78dc8f8",9532:"667bb0cb",9647:"251a99dd"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="openrag-docs:",f.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var n,d;if(void 0!==t)for(var i=document.getElementsByTagName("script"),b=0;b{n.onerror=n.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"8401",33362219:"9532",af920ffe:"98","0ba6a408":"571","22dd74f7":"1567",common:"2076","749371cc":"2272",eb5b356a:"2668",aba21aa0:"5742",d0314b07:"5750",ca2c3c0c:"6919",a7bd4aaa:"7098",c8078f0a:"9026",a94703ab:"9048",e633a5ea:"9172","5e95c892":"9647"}[e]||e,f.p+f.u(e)},(()=>{var e={5354:0,1869:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=f.p+f.u(a),n=new Error;f.l(c,t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",n.name="ChunkLoadError",n.type=o,n.request=c,r[1](n)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,c=t[0],n=t[1],d=t[2],i=0;if(c.some(a=>0!==e[a])){for(r in n)f.o(n,r)&&(f.m[r]=n[r]);if(d)var b=d(f)}for(a&&a(t);iInstall OpenRAG containers | OpenRAG
-
+
diff --git a/index.html b/index.html
index 09941274..fd7974d1 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
What is OpenRAG? | OpenRAG
-
+
diff --git a/ingestion/index.html b/ingestion/index.html
index a4c596a0..2a7f6f88 100644
--- a/ingestion/index.html
+++ b/ingestion/index.html
@@ -4,7 +4,7 @@
Docling in OpenRAG | OpenRAG
-
+
diff --git a/install/index.html b/install/index.html
index 42cacb31..059d37e7 100644
--- a/install/index.html
+++ b/install/index.html
@@ -4,7 +4,7 @@
Install OpenRAG with TUI | OpenRAG
-
+
@@ -128,7 +128,8 @@ When startup is complete, the TUI displays the following:
To start the Docling service, under Native Services, click Start.
-
To open the OpenRAG application, click Open App.
+
To open the OpenRAG application, navigate to the TUI main menu, and then click Open App.
+Alternatively, in your browser, navigate to localhost:3000.
@@ -168,7 +169,8 @@ When startup is complete, the TUI displays the following:
To start the Docling service, under Native Services, click Start.
-
To open the OpenRAG application, click Open App.
+
To open the OpenRAG application, navigate to the TUI main menu, and then click Open App.
+Alternatively, in your browser, navigate to localhost:3000.
You are presented with your provider's OAuth sign-in screen.
After sign-in, you are redirected to the redirect URI.
Two additional variables are available for Advanced Setup:
diff --git a/knowledge/index.html b/knowledge/index.html
index 0b7563af..96987c90 100644
--- a/knowledge/index.html
+++ b/knowledge/index.html
@@ -4,7 +4,7 @@
OpenSearch in OpenRAG | OpenRAG
-
+
@@ -64,6 +64,14 @@ You can select multiple files.
The ingestion process may take some time, depending on the size of your documents.
When ingestion is complete, your documents are available in the Knowledge screen.
+
If ingestion fails, click Status to view the logged error.
When you upload files, process folders, or sync documents, OpenRAG processes them as background tasks.
+A badge appears on the Tasks icon when there are active tasks running.
+To open the Tasks menu, click Tasks.
+
Active Tasks shows tasks that are currently processing.
+A Pending task is queued and waiting to start, a Running task is actively processing files, and a Processing task is performing ingestion operations. For each active task, you can find the task ID, start time, duration, the number of files processed so far, and the total files.
+
You can cancel active tasks by clicking Cancel. Canceling a task stops processing immediately and marks the task as failed.
The Knowledge page lists the documents OpenRAG has ingested into the OpenSearch vector database's documents index.
To explore your current knowledge, click Knowledge.
@@ -114,7 +122,7 @@ A new filter is created with default settings that match all documents.
You can use custom embedding models by specifying them in your configuration.
If you use an unknown embedding model, OpenRAG will automatically fall back to 1536 dimensions and log a warning. The system will continue to work, but search quality may be affected if the actual model dimensions differ from 1536.
The default embedding dimension is 1536 and the default model is text-embedding-3-small.