diff --git a/404.html b/404.html index 6afbbf13..aeb47b2f 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ OpenRAG - + diff --git a/agents/index.html b/agents/index.html index 07aeac74..546fbe91 100644 --- a/agents/index.html +++ b/agents/index.html @@ -4,7 +4,7 @@ Langflow in OpenRAG | OpenRAG - + diff --git a/assets/js/d0314b07.4768a2d8.js b/assets/js/d0314b07.4768a2d8.js new file mode 100644 index 00000000..bd2846bb --- /dev/null +++ b/assets/js/d0314b07.4768a2d8.js @@ -0,0 +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 diff --git a/assets/js/d0314b07.fc1ae2b1.js b/assets/js/d0314b07.fc1ae2b1.js deleted file mode 100644 index 5cf20207..00000000 --- a/assets/js/d0314b07.fc1ae2b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkopenrag_docs=self.webpackChunkopenrag_docs||[]).push([[5750],{887:(e,n,s)=>{s.d(n,{Ay:()=>c,RM:()=>l});var r=s(4848),i=s(8453),t=s(1470),o=s(9365);const l=[{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,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"application-onboarding",children:"Application onboarding"}),"\n",(0,r.jsxs)(n.p,{children:["The first time you start OpenRAG, whether using the TUI or a ",(0,r.jsx)(n.code,{children:".env"})," file, it's recommended that you complete application onboarding."]}),"\n",(0,r.jsxs)(n.p,{children:["To skip onboarding, click ",(0,r.jsx)(n.strong,{children:"Skip onboarding"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["Most values from onboarding can be changed later in the OpenRAG ",(0,r.jsx)(n.strong,{children:"Settings"})," page, but there are important restrictions."]}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"language model provider"})," and ",(0,r.jsx)(n.strong,{children:"embeddings model provider"})," can only be selected at onboarding.\nTo change your provider selection later, you must ",(0,r.jsx)(n.a,{href:"/install#reinstall",children:"reinstall OpenRAG"}),"."]}),(0,r.jsx)(n.p,{children:"You must use the same provider for your language model and embedding model, unless you're using Ollama."})]}),"\n",(0,r.jsx)(n.p,{children:"Choose one LLM provider and complete only those steps:"}),"\n",(0,r.jsxs)(t.A,{groupId:"Provider",children:[(0,r.jsx)(o.A,{value:"OpenAI",label:"OpenAI",default:!0,children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to automatically enter your key from the TUI-generated ",(0,r.jsx)(n.code,{children:".env"})," file.\nAlternatively, paste an OpenAI API key into the field."]}),"\n",(0,r.jsxs)(n.li,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,r.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,r.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,r.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,r.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,r.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,r.jsx)(o.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Complete the fields for ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,r.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,r.jsx)(n.strong,{children:"IBM API key"}),".\nThese values are found in your IBM watsonx deployment."]}),"\n",(0,r.jsxs)(n.li,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select your ",(0,r.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,r.jsx)(n.strong,{children:"Language Model"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,r.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,r.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,r.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})}),(0,r.jsxs)(o.A,{value:"Ollama",label:"Ollama",children:[(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Ollama is not included with OpenRAG. To install Ollama, see the ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama documentation"}),"."]})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Enter your Ollama server's base URL address.\nThe default Ollama server address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),".\nOpenRAG automatically transforms ",(0,r.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,r.jsxs)(n.li,{children:["Select the ",(0,r.jsx)(n.strong,{children:"Embedding Model"})," and ",(0,r.jsx)(n.strong,{children:"Language Model"})," your Ollama server is running.\nOpenRAG retrieves the available models from your Ollama server."]}),"\n",(0,r.jsxs)(n.li,{children:["To load 2 sample PDFs, enable ",(0,r.jsx)(n.strong,{children:"Sample dataset"}),".\nThis is recommended, but not required."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To complete the onboarding tasks, click ",(0,r.jsx)(n.strong,{children:"What is OpenRAG"}),", and then click ",(0,r.jsx)(n.strong,{children:"Add a Document"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"/quickstart",children:"Quickstart"}),"."]}),"\n"]})]})]})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>r,toc:()=>p});const r=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 i=s(4848),t=s(8453),o=s(1470),l=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:"Install OpenRAG",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:r}=n;return r||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,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"#install",children:"Install OpenRAG"})," and then run the ",(0,i.jsx)(n.a,{href:"#setup",children:"OpenRAG Terminal User Interface(TUI)"})," to start your OpenRAG deployment with a guided setup process."]}),"\n",(0,i.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,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:s(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,i.jsxs)(n.p,{children:["Instead of starting OpenRAG using Docker commands and manually editing values in the ",(0,i.jsx)(n.code,{children:".env"})," file, the TUI walks you through the setup. It prompts for variables where required, creates a ",(0,i.jsx)(n.code,{children:".env"})," file for you, and then starts OpenRAG."]}),"\n",(0,i.jsx)(n.p,{children:"Once OpenRAG is running, use the TUI to monitor your application, control your containers, and retrieve logs."}),"\n",(0,i.jsxs)(n.p,{children:["If you prefer running Podman or Docker containers and manually editing ",(0,i.jsx)(n.code,{children:".env"})," files, see ",(0,i.jsx)(n.a,{href:"/get-started/docker",children:"Install OpenRAG Containers"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python Version 3.10 to 3.13"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),". If using Podman, use ",(0,i.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,i.jsxs)(n.li,{children:["Create an ",(0,i.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),". This key is ",(0,i.jsx)(n.strong,{children:"required"})," to start OpenRAG, but you can choose a different model provider during ",(0,i.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,i.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,i.jsx)(n.h2,{id:"install",children:"Install OpenRAG"}),"\n",(0,i.jsx)(n.admonition,{title:"Windows users",type:"note",children:(0,i.jsxs)(n.p,{children:["To use OpenRAG on Windows, use ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"To set up a project and install OpenRAG as a dependency, do the following:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Create a new project with a virtual environment using ",(0,i.jsx)(n.code,{children:"uv init"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv init YOUR_PROJECT_NAME\ncd YOUR_PROJECT_NAME\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"(venv)"})," prompt doesn't change, but ",(0,i.jsx)(n.code,{children:"uv"})," commands will automatically use the project's virtual environment.\nFor more information on virtual environments, see the ",(0,i.jsx)(n.a,{href:"https://docs.astral.sh/uv/pip/environments",children:"uv documentation"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add OpenRAG to your project."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv add openrag\n"})}),"\n",(0,i.jsx)(n.p,{children:"To add a specific version of OpenRAG:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv add openrag==0.1.25\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Start the OpenRAG TUI."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n",(0,i.jsxs)(r,{closed:!0,children:[(0,i.jsx)("summary",{children:"Install a local wheel"}),(0,i.jsx)(n.p,{children:"If you downloaded the OpenRAG wheel to your local machine, follow these steps:"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add the wheel to your project's virtual environment."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv add PATH/TO/openrag-VERSION-py3-none-any.whl\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Replace ",(0,i.jsx)(n.code,{children:"PATH/TO/"})," and ",(0,i.jsx)(n.code,{children:"VERSION"})," with the path and version of your downloaded OpenRAG ",(0,i.jsx)(n.code,{children:".whl"})," file."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, if your ",(0,i.jsx)(n.code,{children:".whl"})," file is in the ",(0,i.jsx)(n.code,{children:"~/Downloads"})," directory:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv add ~/Downloads/openrag-0.1.8-py3-none-any.whl\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run OpenRAG."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Continue with ",(0,i.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,i.jsxs)(n.p,{children:["The TUI creates a ",(0,i.jsx)(n.code,{children:".env"})," file in your OpenRAG directory root and starts OpenRAG.\nIf the TUI detects a ",(0,i.jsx)(n.code,{children:".env"})," file in the OpenRAG root directory, it sources any variables from the ",(0,i.jsx)(n.code,{children:".env"})," file.\nIf the TUI detects OAuth credentials, it enforces the ",(0,i.jsx)(n.strong,{children:"Advanced Setup"})," path."]}),"\n",(0,i.jsxs)(o.A,{groupId:"Setup method",children:[(0,i.jsxs)(l.A,{value:"Basic setup",label:"Basic setup",default:!0,children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Basic Setup"})," can generate all of the required values for OpenRAG except the OpenAI API key.\n",(0,i.jsx)(n.strong,{children:"Basic Setup"})," does not set up OAuth connections for ingestion from cloud providers.\nFor OAuth setup, use ",(0,i.jsx)(n.strong,{children:"Advanced Setup"}),".\nFor information about the difference between basic (no auth) and OAuth in OpenRAG, see ",(0,i.jsx)(n.a,{href:"/knowledge#auth",children:"Authentication and document access"}),"."]}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To install OpenRAG with ",(0,i.jsx)(n.strong,{children:"Basic Setup"}),", click ",(0,i.jsx)(n.strong,{children:"Basic Setup"})," or press ",(0,i.jsx)("kbd",{children:"1"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,i.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,i.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,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Save Configuration"}),".\nYour passwords are saved in the ",(0,i.jsx)(n.code,{children:".env"})," file used to start OpenRAG."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,i.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,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To start the Docling service, under ",(0,i.jsx)(n.strong,{children:"Native Services"}),", click ",(0,i.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To open the OpenRAG application, click ",(0,i.jsx)(n.strong,{children:"Open App"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Continue with ",(0,i.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})]}),(0,i.jsx)(l.A,{value:"Advanced setup",label:"Advanced setup",children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To install OpenRAG with ",(0,i.jsx)(n.strong,{children:"Advanced Setup"}),", click ",(0,i.jsx)(n.strong,{children:"Advanced Setup"})," or press ",(0,i.jsx)("kbd",{children:"2"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords for OpenSearch and Langflow."]}),"\n",(0,i.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,i.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,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Paste your OpenAI API key in the OpenAI API key field."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.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,i.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client"})," or ",(0,i.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,i.jsxs)(n.li,{children:["\n",(0,i.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,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To start OpenRAG, click ",(0,i.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,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To start the Docling service, under ",(0,i.jsx)(n.strong,{children:"Native Services"}),", click ",(0,i.jsx)(n.strong,{children:"Start"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To open the OpenRAG application, click ",(0,i.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,i.jsx)(n.p,{children:"Two additional variables are available for Advanced Setup:"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.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,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"WEBHOOK_BASE_URL"})," controls where the endpoint for ",(0,i.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,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Google Drive: ",(0,i.jsx)(n.code,{children:"/connectors/google_drive/webhook"})]}),"\n",(0,i.jsxs)(n.li,{children:["OneDrive: ",(0,i.jsx)(n.code,{children:"/connectors/onedrive/webhook"})]}),"\n",(0,i.jsxs)(n.li,{children:["SharePoint: ",(0,i.jsx)(n.code,{children:"/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Continue with ",(0,i.jsx)(n.a,{href:"#application-onboarding",children:"Application Onboarding"}),"."]}),"\n"]}),"\n"]})})]}),"\n",(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(n.h2,{id:"close-the-openrag-tui",children:"Close the OpenRAG TUI"}),"\n",(0,i.jsxs)(n.p,{children:["To close the OpenRAG TUI, press ",(0,i.jsx)("kbd",{children:"q"}),".\nThe OpenRAG containers will continue to be served until the containers are stopped.\nFor more information, see ",(0,i.jsx)(n.a,{href:"#tui-container-management",children:"Manage OpenRAG containers with the TUI "}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["To start the TUI again, run ",(0,i.jsx)(n.code,{children:"uv run openrag"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"tui-container-management",children:"Manage OpenRAG containers with the TUI"}),"\n",(0,i.jsx)(n.p,{children:"After installation, the TUI can deploy, manage, and upgrade your OpenRAG containers."}),"\n",(0,i.jsx)(n.h3,{id:"start-all-services",children:"Start all services"}),"\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.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,i.jsx)(n.code,{children:"CUDA"}),", ",(0,i.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,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If images are missing, the TUI runs ",(0,i.jsx)(n.code,{children:"docker compose pull"}),", then runs ",(0,i.jsx)(n.code,{children:"docker compose up -d"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"status",children:"Status"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.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,i.jsxs)(n.p,{children:["To view streaming logs, select the container you want to view, and press ",(0,i.jsx)("kbd",{children:"l"}),".\nTo copy your logs, click ",(0,i.jsx)(n.strong,{children:"Copy to Clipboard"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["To ",(0,i.jsx)(n.strong,{children:"upgrade"})," your containers, click ",(0,i.jsx)(n.strong,{children:"Upgrade"}),".\n",(0,i.jsx)(n.strong,{children:"Upgrade"})," runs ",(0,i.jsx)(n.code,{children:"docker compose pull"})," and then ",(0,i.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,i.jsxs)(n.p,{children:["To ",(0,i.jsx)(n.strong,{children:"reset"})," your containers, click ",(0,i.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,i.jsx)(n.strong,{children:"Reset"})," runs two commands.\nIt first stops and removes all containers, volumes, and local images."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"docker compose down --volumes --remove-orphans --rmi local\n"})}),"\n",(0,i.jsxs)(n.p,{children:["When the first command is complete, OpenRAG removes any additional Docker objects with ",(0,i.jsx)(n.code,{children:"prune"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"docker system prune -f\n"})}),"\n",(0,i.jsx)(n.h3,{id:"native-services-status",children:"Native services status"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.em,{children:"native service"})," in OpenRAG refers to a service run locally on your machine, and not within a container.\nThe ",(0,i.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,i.jsxs)(n.p,{children:["To start or stop ",(0,i.jsx)(n.code,{children:"docling serve"})," or any other native services, in the TUI Status menu, click ",(0,i.jsx)(n.strong,{children:"Stop"})," or ",(0,i.jsx)(n.strong,{children:"Restart"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["To view the status, port, or PID of a native service, in the TUI main menu, click ",(0,i.jsx)(n.a,{href:"#status",children:"Status"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"diagnostics",children:"Diagnostics"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Diagnostics"})," menu provides health monitoring for your container runtimes and monitoring of your OpenSearch security."]}),"\n",(0,i.jsx)(n.h2,{id:"reinstall",children:"Reinstall OpenRAG"}),"\n",(0,i.jsx)(n.p,{children:"To reinstall OpenRAG with a completely fresh setup:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Reset your containers using the ",(0,i.jsx)(n.strong,{children:"Reset"})," button in the ",(0,i.jsx)(n.a,{href:"#status",children:"TUI status"})," menu.\nThis removes all containers, volumes, and data."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Optional: Delete your project's ",(0,i.jsx)(n.code,{children:".env"})," file.\nThe Reset operation does not remove your project's ",(0,i.jsx)(n.code,{children:".env"})," file, so your passwords, API keys, and OAuth settings can be preserved.\nIf you delete the ",(0,i.jsx)(n.code,{children:".env"})," file, run the ",(0,i.jsx)(n.a,{href:"#setup",children:"Set up OpenRAG with the TUI"})," process again to create a new configuration."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the TUI Setup menu, follow these steps from ",(0,i.jsx)(n.a,{href:"#setup",children:"Basic Setup"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Start All Services"})," to pull container images and start them."]}),"\n",(0,i.jsxs)(n.li,{children:["Under ",(0,i.jsx)(n.strong,{children:"Native Services"}),", click ",(0,i.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Open App"})," to open the OpenRAG application."]}),"\n",(0,i.jsxs)(n.li,{children:["Continue with ",(0,i.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,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5689:(e,n,s)=>{s.d(n,{A:()=>r});const r=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/runtime~main.b16571f8.js b/assets/js/runtime~main.fd8892b4.js similarity index 98% rename from assets/js/runtime~main.b16571f8.js rename to assets/js/runtime~main.fd8892b4.js index 2b38d28f..31e66bef 100644 --- a/assets/js/runtime~main.b16571f8.js +++ b/assets/js/runtime~main.fd8892b4.js @@ -1 +1 @@ -(()=>{"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:"fc1ae2b1",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);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);i "$tmp" + chmod +x "$tmp" + exec bash "$tmp" "$@" +fi + +# Now we are running from a real file, not stdin. It is safe to reattach. +# (Only if not already attached to a TTY) +if [ ! -t 0 ] || [ ! -t 1 ] || [ ! -t 2 ]; then + if [ -e /dev/tty ]; then + exec /dev/tty 2>&1 + else + echo "This installer needs an interactive terminal. Try: bash <(curl -fsSL ...)" >&2 + exit 1 + fi +fi + + +set -euo pipefail + +say() { printf "%s\n" "$*" >&2; } +hr() { say "----------------------------------------"; } + +ask_yes_no() { + local prompt="${1:-Continue?} [Y/n] " + read -r -p "$prompt" ans || true + case "${ans:-Y}" in [Yy]|[Yy][Ee][Ss]|"") return 0 ;; *) return 1 ;; esac +} + +# --- Platform detection ------------------------------------------------------ +uname_s="$(uname -s 2>/dev/null || echo unknown)" +is_wsl=false +if [ -f /proc/version ]; then grep -qiE 'microsoft|wsl' /proc/version && is_wsl=true || true; fi + +case "$uname_s" in + Darwin) PLATFORM="macOS" ;; + Linux) PLATFORM="$($is_wsl && echo WSL || echo Linux)" ;; + CYGWIN*|MINGW*|MSYS*) PLATFORM="Windows" ;; + *) PLATFORM="Unknown" ;; +esac + +if [ "$PLATFORM" = "Windows" ]; then + say ">>> Native Windows shell detected. Please run this inside WSL (Ubuntu, etc.)." + exit 1 +fi + +# --- Minimal sudo (used only when necessary) -------------------------------- +SUDO="sudo"; $SUDO -n true >/dev/null 2>&1 || SUDO="sudo" # may prompt later only if needed + +# --- PATH probe for common bins (no sudo) ----------------------------------- +ensure_path_has_common_bins() { + local add=() + [ -d /opt/homebrew/bin ] && add+=("/opt/homebrew/bin") + [ -d /usr/local/bin ] && add+=("/usr/local/bin") + [ -d "/Applications/Docker.app/Contents/Resources/bin" ] && add+=("/Applications/Docker.app/Contents/Resources/bin") + [ -d "$HOME/.docker/cli-plugins" ] && add+=("$HOME/.docker/cli-plugins") + for p in "${add[@]}"; do case ":$PATH:" in *":$p:"*) ;; *) PATH="$p:$PATH" ;; esac; done + export PATH +} +ensure_path_has_common_bins + +# --- Helpers ---------------------------------------------------------------- +has_cmd() { command -v "$1" >/dev/null 2>&1; } +docker_cli_path() { command -v docker 2>/dev/null || true; } +podman_cli_path() { command -v podman 2>/dev/null || true; } + +docker_daemon_ready() { docker info >/dev/null 2>&1; } # no sudo; fails if socket perms/daemon issue +compose_v2_ready() { docker compose version >/dev/null 2>&1; } +compose_v1_ready() { command -v docker-compose >/dev/null 2>&1; } +podman_ready() { podman info >/dev/null 2>&1; } # macOS may need podman machine + +docker_is_podman() { + # True if `docker` is Podman (podman-docker shim or alias) + if ! has_cmd docker; then return 1; fi + + # 1) Text outputs + local out="" + out+="$(docker --version 2>&1 || true)\n" + out+="$(docker -v 2>&1 || true)\n" + out+="$(docker help 2>&1 | head -n 2 || true)\n" + if printf "%b" "$out" | grep -qiE '\bpodman\b'; then + return 0 + fi + + # 2) Symlink target / alternatives + local p t + p="$(command -v docker)" + if has_cmd readlink; then + t="$(readlink -f "$p" 2>/dev/null || readlink "$p" 2>/dev/null || echo "$p")" + printf "%s" "$t" | grep -qi 'podman' && return 0 + fi + if [ -L /etc/alternatives/docker ]; then + t="$(readlink -f /etc/alternatives/docker 2>/dev/null || true)" + printf "%s" "$t" | grep -qi 'podman' && return 0 + fi + + # 3) Fallback: package id (rpm/dpkg), best effort (ignore errors) + if has_cmd rpm; then + rpm -qf "$p" 2>/dev/null | grep -qi 'podman' && return 0 + fi + if has_cmd dpkg-query; then + dpkg-query -S "$p" 2>/dev/null | grep -qi 'podman' && return 0 + fi + + return 1 +} + +# --- uv install (optional) -------------------------------------------------- +install_uv() { + if has_cmd uv; then + say ">>> uv present: $(uv --version 2>/dev/null || echo ok)" + return + fi + if ! ask_yes_no "uv not found. Install uv now?"; then return; fi + if ! has_cmd curl; then say ">>> curl is required to install uv. Please install curl and re-run."; exit 1; fi + curl -LsSf https://astral.sh/uv/install.sh | sh +} + +# --- Docker: install if missing (never reinstall) --------------------------- +install_docker_if_missing() { + if has_cmd docker; then + say ">>> Docker CLI detected at: $(docker_cli_path)" + say ">>> Version: $(docker --version 2>/dev/null || echo 'unknown')" + return + fi + say ">>> Docker CLI not found." + if ! ask_yes_no "Install Docker now?"; then return; fi + + case "$PLATFORM" in + macOS) + if has_cmd brew; then + brew install --cask docker + say ">>> Starting Docker Desktop..." + open -gj -a Docker || true + else + say ">>> Homebrew not found. Install from https://brew.sh then: brew install --cask docker" + exit 1 + fi + ;; + Linux|WSL) + if ! has_cmd curl; then say ">>> Need curl to install Docker. Install curl and re-run."; exit 1; fi + curl -fsSL https://get.docker.com | $SUDO sh + # Do NOT assume docker group exists everywhere; creation is distro-dependent + if getent group docker >/dev/null 2>&1; then + $SUDO usermod -aG docker "$USER" || true + fi + ;; + *) + say ">>> Unsupported platform for automated Docker install." + ;; + esac +} + +# --- Docker daemon start/wait (sudo only if starting service) --------------- +start_docker_daemon_if_needed() { + if docker_daemon_ready; then + say ">>> Docker daemon is ready." + return 0 + fi + + say ">>> Docker CLI found but daemon not reachable." + case "$PLATFORM" in + macOS) + say ">>> Attempting to start Docker Desktop..." + open -gj -a Docker || true + ;; + Linux|WSL) + say ">>> Attempting to start docker service (may prompt for sudo)..." + $SUDO systemctl start docker >/dev/null 2>&1 || $SUDO service docker start >/dev/null 2>&1 || true + ;; + esac + + for i in {1..60}; do + docker_daemon_ready && { say ">>> Docker daemon is ready."; return 0; } + sleep 2 + done + + say ">>> Still not reachable. If Linux: check 'systemctl status docker' and group membership." + say ">>> If macOS: open Docker.app and wait for 'Docker Desktop is running'." + return 1 +} + +# --- Docker group activation (safe: only if group exists) ------------------- +activate_docker_group_now() { + [ "$PLATFORM" = "Linux" ] || [ "$PLATFORM" = "WSL" ] || return 0 + has_cmd docker || return 0 + + # only act if the docker group actually exists + if ! getent group docker >/dev/null 2>&1; then + return 0 + fi + + # If user already in group, nothing to do + if id -nG "$USER" 2>/dev/null | grep -qw docker; then return 0; fi + + # Re-enter with sg if available + if has_cmd sg; then + if [ -z "${REENTERED_WITH_DOCKER_GROUP:-}" ]; then + say ">>> Re-entering shell with 'docker' group active for this run..." + export REENTERED_WITH_DOCKER_GROUP=1 + exec sg docker -c "REENTERED_WITH_DOCKER_GROUP=1 bash \"$0\"" + fi + else + say ">>> You were likely added to 'docker' group. Open a new shell or run: newgrp docker" + fi +} + +# --- Compose detection/offer (no reinstall) --------------------------------- +check_or_offer_compose() { + if compose_v2_ready; then + say ">>> Docker Compose v2 available (docker compose)." + return 0 + fi + if compose_v1_ready; then + say ">>> docker-compose (v1) available: $(docker-compose --version 2>/dev/null || echo ok)" + return 0 + fi + + say ">>> Docker Compose not found." + if ! ask_yes_no "Install Docker Compose plugin (v2)?"; then + say ">>> Skipping Compose install." + return 1 + fi + + case "$PLATFORM" in + macOS) + say ">>> On macOS, Docker Desktop bundles Compose v2. Starting Desktop…" + open -gj -a Docker || true + ;; + Linux|WSL) + if has_cmd apt-get; then $SUDO apt-get update -y && $SUDO apt-get install -y docker-compose-plugin || true + elif has_cmd dnf; then $SUDO dnf install -y docker-compose-plugin || true + elif has_cmd yum; then $SUDO yum install -y docker-compose-plugin || true + elif has_cmd zypper; then $SUDO zypper install -y docker-compose docker-compose-plugin || true + elif has_cmd pacman; then $SUDO pacman -Sy --noconfirm docker-compose || true + else + say ">>> Please install Compose via your distro's instructions." + fi + ;; + esac + + if compose_v2_ready || compose_v1_ready; then + say ">>> Compose is now available." + else + say ">>> Could not verify Compose installation automatically." + fi +} + +# --- Podman: install if missing (never reinstall) --------------------------- +install_podman_if_missing() { + if has_cmd podman; then + say ">>> Podman CLI detected at: $(podman_cli_path)" + say ">>> Version: $(podman --version 2>/dev/null || echo 'unknown')" + return + fi + say ">>> Podman CLI not found." + if ! ask_yes_no "Install Podman now?"; then return; fi + + case "$PLATFORM" in + macOS) + if has_cmd brew; then + brew install podman + else + say ">>> Install Homebrew first (https://brew.sh) then: brew install podman" + exit 1 + fi + ;; + Linux|WSL) + if has_cmd apt-get; then $SUDO apt-get update -y && $SUDO apt-get install -y podman + elif has_cmd dnf; then $SUDO dnf install -y podman + elif has_cmd yum; then $SUDO yum install -y podman + elif has_cmd zypper; then $SUDO zypper install -y podman + elif has_cmd pacman; then $SUDO pacman -Sy --noconfirm podman + else + say ">>> Please install 'podman' via your distro." + fi + ;; + esac +} + +ensure_podman_ready() { + if [ "$PLATFORM" = "macOS" ]; then + if ! podman machine list 2>/dev/null | grep -q running; then + say ">>> Starting Podman machine (macOS)…" + podman machine start || true + for i in {1..30}; do podman_ready && break || sleep 2; done + fi + fi + if podman_ready; then + say ">>> Podman is ready." + return 0 + else + say ">>> Podman CLI present but not ready (try 'podman machine start' on macOS)." + return 1 + fi +} + +# --- Runtime auto-detect (prefer no prompt) --------------------------------- +hr +say "Platform: $PLATFORM" +hr + +# uv (optional) +if has_cmd uv; then say ">>> uv present: $(uv --version 2>/dev/null || echo ok)"; else install_uv; fi + +RUNTIME="" +if docker_is_podman; then + say ">>> Detected podman-docker shim: using Podman runtime." + RUNTIME="Podman" +elif has_cmd docker; then + say ">>> Docker CLI detected." + RUNTIME="Docker" +elif has_cmd podman; then + say ">>> Podman CLI detected." + RUNTIME="Podman" +fi + +if [ -z "$RUNTIME" ]; then + say "Choose container runtime:" + PS3="Select [1-2]: " + select rt in "Docker" "Podman"; do + case "$REPLY" in 1|2) RUNTIME="$rt"; break ;; *) say "Invalid choice";; esac + done +fi + +say "Selected runtime: $RUNTIME" +hr + +# --- Execute runtime path ---------------------------------------------------- +if [ "$RUNTIME" = "Docker" ]; then + install_docker_if_missing # no reinstall if present + activate_docker_group_now # safe: only if group exists and user not in it + start_docker_daemon_if_needed # sudo only to start service on Linux/WSL + check_or_offer_compose # offer to install Compose only if missing +else + install_podman_if_missing # no reinstall if present + ensure_podman_ready + # Optional: podman-compose for compose-like UX + if ! command -v podman-compose >/dev/null 2>&1; then + if ask_yes_no "Install podman-compose (optional)?"; then + if has_cmd brew; then brew install podman-compose + elif has_cmd apt-get; then $SUDO apt-get update -y && $SUDO apt-get install -y podman-compose || pip3 install --user podman-compose || true + elif has_cmd dnf; then $SUDO dnf install -y podman-compose || true + elif has_cmd yum; then $SUDO yum install -y podman-compose || true + elif has_cmd zypper; then $SUDO zypper install -y podman-compose || true + elif has_cmd pacman; then $SUDO pacman -Sy --noconfirm podman-compose || true + else say ">>> Please install podman-compose via your distro."; fi + fi + fi +fi + +hr +say "Environment ready — launching: uvx openrag" +hr + +if ! has_cmd uv; then + say ">>> 'uv' not on PATH. Add the installer’s bin dir to PATH, then run: uvx openrag" + exit 1 +fi + +exec uvx openrag + diff --git a/get-started/docker/index.html b/get-started/docker/index.html index 01c6e2cb..ea46d3ac 100644 --- a/get-started/docker/index.html +++ b/get-started/docker/index.html @@ -4,7 +4,7 @@ Install OpenRAG containers | OpenRAG - + diff --git a/index.html b/index.html index 83067fa0..09941274 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 971534f9..a4c596a0 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 a3963769..42cacb31 100644 --- a/install/index.html +++ b/install/index.html @@ -4,7 +4,7 @@ Install OpenRAG with TUI | OpenRAG - + @@ -26,43 +26,75 @@
  • Create an OpenAI API key. This key is required to start OpenRAG, but you can choose a different model provider during Application Onboarding.
  • Optional: Install GPU support with an NVIDIA GPU, 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.
  • -

    Install OpenRAG

    +

    Installation Methods

    Windows users

    To use OpenRAG on Windows, use WSL (Windows Subsystem for Linux).

    -

    To set up a project and install OpenRAG as a dependency, do the following:

    -
      +

      Choose an installation method based on your needs:

      +
        +
      • The automatic installer script detects and installs prerequisites and then runs OpenRAG. Recommended for first-time users.
      • +
      • For a quick test, use uvx to run OpenRAG without creating a project or modifying files.
      • +
      • Use uv add to install OpenRAG as a managed dependency in a new or existing Python project.
      • +
      • Use uv pip install to install OpenRAG into an existing virtual environment.
      • +
      +

      The script detects and installs uv, Docker/Podman, and Docker Compose prerequisites, then runs OpenRAG with uvx.

      1. -

        Create a new project with a virtual environment using uv init.

        +

        Create a directory to store the OpenRAG configuration files:

        +
        mkdir openrag-workspace
        cd openrag-workspace
        +
      2. +
      3. +

        Run the installer:

        +
        curl -fsSL https://docs.openr.ag/files/run_openrag_with_prereqs.sh | bash
        +
      4. +

      The TUI creates a .env file and docker-compose files in the current working directory.

    +

    Continue with Set up OpenRAG with the TUI.

    Set up OpenRAG with the TUI

    The TUI creates a .env file in your OpenRAG directory root and starts OpenRAG. If the TUI detects a .env file in the OpenRAG root directory, it sources any variables from the .env file. @@ -248,7 +280,7 @@ If you delete the .env file, run the Set

  • Continue with Application Onboarding.
  • -