From 0fc850040b0e241220d125f768205543a13ed680 Mon Sep 17 00:00:00 2001
From: aimurphy
Date: Fri, 19 Dec 2025 02:10:27 +0000
Subject: [PATCH] deploy: 0bc7d57063e68d3ecd17f648c060d7f0fd51a770
---
404.html | 2 +-
agents/index.html | 2 +-
assets/js/441f609b.071db081.js | 1 -
assets/js/441f609b.ae58055a.js | 1 +
assets/js/4ba45368.1fce6090.js | 1 +
assets/js/4ba45368.706e6a4d.js | 1 -
assets/js/749371cc.3a627799.js | 1 -
assets/js/749371cc.774b6a0c.js | 1 +
assets/js/d0314b07.9418ca19.js | 1 -
assets/js/d0314b07.ebf2fdd5.js | 1 +
assets/js/eb5b356a.d35eda0a.js | 1 +
assets/js/eb5b356a.fdb5ebeb.js | 1 -
...n.732f6967.js => runtime~main.28b5001d.js} | 2 +-
chat/index.html | 2 +-
docker/index.html | 53 +++++++++++++++----
index.html | 2 +-
ingestion/index.html | 2 +-
install-options/index.html | 2 +-
install-uv/index.html | 53 +++++++++++++++----
install-uvx/index.html | 53 +++++++++++++++----
install-windows/index.html | 2 +-
install/index.html | 53 +++++++++++++++----
knowledge-filters/index.html | 2 +-
knowledge/index.html | 2 +-
manage-services/index.html | 2 +-
quickstart/index.html | 2 +-
reference/configuration/index.html | 2 +-
reinstall/index.html | 2 +-
support/troubleshoot/index.html | 19 ++++++-
tui/index.html | 2 +-
uninstall/index.html | 2 +-
upgrade/index.html | 2 +-
32 files changed, 215 insertions(+), 60 deletions(-)
delete mode 100644 assets/js/441f609b.071db081.js
create mode 100644 assets/js/441f609b.ae58055a.js
create mode 100644 assets/js/4ba45368.1fce6090.js
delete mode 100644 assets/js/4ba45368.706e6a4d.js
delete mode 100644 assets/js/749371cc.3a627799.js
create mode 100644 assets/js/749371cc.774b6a0c.js
delete mode 100644 assets/js/d0314b07.9418ca19.js
create mode 100644 assets/js/d0314b07.ebf2fdd5.js
create mode 100644 assets/js/eb5b356a.d35eda0a.js
delete mode 100644 assets/js/eb5b356a.fdb5ebeb.js
rename assets/js/{runtime~main.732f6967.js => runtime~main.28b5001d.js} (93%)
diff --git a/404.html b/404.html
index bd9b1a96..a9bb480e 100644
--- a/404.html
+++ b/404.html
@@ -4,7 +4,7 @@
OpenRAG
-
+
diff --git a/agents/index.html b/agents/index.html
index 44399bf0..b783f9cd 100644
--- a/agents/index.html
+++ b/agents/index.html
@@ -4,7 +4,7 @@
Use Langflow in OpenRAG | OpenRAG
-
+
diff --git a/assets/js/441f609b.071db081.js b/assets/js/441f609b.071db081.js
deleted file mode 100644
index 52a22941..00000000
--- a/assets/js/441f609b.071db081.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[8617],{309:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,r.jsx)(n.code,{children:"podman-compose"})})," or ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},887:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>a});var r=s(4848),t=s(8453),i=s(9179),o=s(1470),l=s(9365);const a=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,r.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,r.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,r.jsxs)(o.A,{groupId:"Provider",children:[(0,r.jsxs)(l.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(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"})," fields."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,r.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,r.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,r.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider."})}),(0,r.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.\nThe recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally."}),(0,r.jsxs)(n.p,{children:["The OpenRAG team recommends the OpenAI ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"})," lanuage model and the ",(0,r.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,r.jsx)(n.code,{children:"nomic-embed-text"})})," embedding model.\nHowever, ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"})," uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine."]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,r.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,r.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(l.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},927:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[{value:"Next steps",id:"next-steps",level:2}];function o(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Learn how to ",(0,r.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1470:(e,n,s)=>{s.d(n,{A:()=>w});var r=s(6540),t=s(4164),i=s(7559),o=s(3104),l=s(6347),a=s(205),c=s(7485),d=s(1682),h=s(679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:s}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:s,default:r}})=>({value:e,label:n,attributes:s,default:r}))}(s);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,s])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function j({queryString:e=!1,groupId:n}){const s=(0,l.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,r.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace({...s.location,search:n.toString()})},[t,s])]}function m(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,i=p(e),[o,l]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find(e=>e.default)??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i})),[c,d]=j({queryString:s,groupId:t}),[u,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Dv)(n);return[s,(0,r.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),f=(()=>{const e=c??u;return x({value:e,tabValues:i})?e:null})();(0,a.A)(()=>{f&&l(f)},[f]);return{selectedValue:o,selectValue:(0,r.useCallback)(e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)},[d,m,i]),tabValues:i}}var f=s(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(4848);function y({className:e,block:n,selectedValue:s,selectValue:r,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),o=i[t].value;o!==s&&(a(n),r(o))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:s}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find(e=>e.props.value===s);return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function b(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,t.A)(i.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>a});var r=s(4848),t=s(8453),i=s(1470),o=s(9365),l=s(7637);const a=[...l.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["You can use either ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,r.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,r.jsx)(l.Ay,{}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["You must use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,r.jsxs)(i.A,{groupId:"Setup method",children:[(0,r.jsx)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\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:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,r.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(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.p,{children:["You can ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},2068:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>j,contentTitle:()=>x,default:()=>g,frontMatter:()=>p,metadata:()=>r,toc:()=>m});const r=JSON.parse('{"id":"get-started/install-uv","title":"Install OpenRAG in a Python project with uv","description":"Use uv to install OpenRAG as a managed or unmanaged dependency in a new or existing Python project.","source":"@site/docs/get-started/install-uv.mdx","sourceDirName":"get-started","slug":"/install-uv","permalink":"/install-uv","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install-uv.mdx","tags":[],"version":"current","frontMatter":{"title":"Install OpenRAG in a Python project with uv","slug":"/install-uv"},"sidebar":"tutorialSidebar","previous":{"title":"Run the installer script","permalink":"/install"},"next":{"title":"Invoke OpenRAG with uvx","permalink":"/install-uvx"}}');var t=s(4848),i=s(8453),o=(s(1470),s(9365),s(887)),l=s(2061),a=s(3351),c=s(309),d=s(6149),h=s(4042),u=s(927);s(7637);const p={title:"Install OpenRAG in a Python project with uv",slug:"/install-uv"},x=void 0,j={},m=[{value:"Prerequisites",id:"prerequisites",level:2},...d.RM,...h.RM,...c.RM,...a.RM,{value:"Install and start OpenRAG with uv",id:"install-and-start-openrag-with-uv",level:2},{value:"Use uv add",id:"uv-add",level:3},{value:"Use uv pip install",id:"uv-pip-install",level:3},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...l.RM,...o.RM,...u.RM];function f(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:(0,t.jsx)(n.code,{children:"uv"})})," to install OpenRAG as a managed or unmanaged dependency in a new or existing Python project."]}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),", you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["For other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install-and-start-openrag-with-uv",children:"Install and start OpenRAG with uv"}),"\n",(0,t.jsxs)(n.p,{children:["There are two ways to install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.a,{href:"#uv-add",children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"uv add"})})," (Recommended)"]}),": Install OpenRAG as a managed dependency in a new or existing ",(0,t.jsx)(n.code,{children:"uv"})," Python project.\nThis is recommended because it adds OpenRAG to your ",(0,t.jsx)(n.code,{children:"pyproject.toml"})," and lockfile for better management of dependencies and the virtual environment."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"#uv-pip-install",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"uv pip install"})})}),": Use the ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/pip/",children:[(0,t.jsx)(n.code,{children:"uv pip"})," interface"]})," to install OpenRAG into an existing Python project that uses ",(0,t.jsx)(n.code,{children:"pip"}),", ",(0,t.jsx)(n.code,{children:"pip-tools"}),", and ",(0,t.jsx)(n.code,{children:"virtualenv"})," commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"uv-add",children:"Use uv add"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a new ",(0,t.jsx)(n.code,{children:"uv"}),"-managed Python project:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv init PROJECT_NAME\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Change into your new project directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd PROJECT_NAME\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Because ",(0,t.jsx)(n.code,{children:"uv"})," manages the virtual environment for you, you won't see a ",(0,t.jsx)(n.code,{children:"(venv)"})," prompt.\n",(0,t.jsx)(n.code,{children:"uv"})," commands automatically use the project's virtual environment."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add OpenRAG to your project:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the latest version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a specific version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add openrag==0.1.30\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a local wheel:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add path/to/openrag-VERSION-py3-none-any.whl\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For more options, see ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/concepts/projects/dependencies/",children:["Managing dependencies with ",(0,t.jsx)(n.code,{children:"uv"})]}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before starting OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"uv-pip-install",children:"Use uv pip install"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Activate your virtual environment."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install the OpenRAG Python package:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv pip install openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before starting OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),", you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."]}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(o.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function g(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(e)}},3351:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,r.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},4042:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(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.13 or later."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},6149:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,r.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,r.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>i});s(6540);var r=s(7856),t=s(4848);function i({name:e,...n}){const s=r[e];return s?(0,t.jsx)(s,{...n}):null}},9365:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var r=s(4164);const t={tabItem:"tabItem_Ymn6"};var i=s(4848);function o({children:e,hidden:n,className:s}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,s),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/441f609b.ae58055a.js b/assets/js/441f609b.ae58055a.js
new file mode 100644
index 00000000..75656eb2
--- /dev/null
+++ b/assets/js/441f609b.ae58055a.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[8617],{309:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,r.jsx)(n.code,{children:"podman-compose"})})," or ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},887:(e,n,s)=>{s.d(n,{Ay:()=>h,RM:()=>c});var r=s(4848),t=s(8453),i=s(9179),o=s(1470),l=s(9365),a=s(3059);const c=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...a.RM];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,r.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,r.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,r.jsxs)(o.A,{groupId:"Provider",children:[(0,r.jsxs)(l.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(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"})," fields."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,r.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,r.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,r.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,r.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.\nHowever, it requires additional setup because Ollama isn't included with OpenRAG.\nYou must deploy Ollama separately if you want to use Ollama as a model provider."}),(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(a.Ay,{})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,r.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,r.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(l.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},927:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[{value:"Next steps",id:"next-steps",level:2}];function o(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Learn how to ",(0,r.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1470:(e,n,s)=>{s.d(n,{A:()=>w});var r=s(6540),t=s(4164),i=s(7559),o=s(3104),l=s(6347),a=s(205),c=s(7485),d=s(1682),h=s(679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:s}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:s,default:r}})=>({value:e,label:n,attributes:s,default:r}))}(s);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,s])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function m({queryString:e=!1,groupId:n}){const s=(0,l.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,r.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace({...s.location,search:n.toString()})},[t,s])]}function j(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,i=p(e),[o,l]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find(e=>e.default)??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i})),[c,d]=m({queryString:s,groupId:t}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Dv)(n);return[s,(0,r.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),f=(()=>{const e=c??u;return x({value:e,tabValues:i})?e:null})();(0,a.A)(()=>{f&&l(f)},[f]);return{selectedValue:o,selectValue:(0,r.useCallback)(e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),j(e)},[d,j,i]),tabValues:i}}var f=s(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(4848);function y({className:e,block:n,selectedValue:s,selectValue:r,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),o=i[t].value;o!==s&&(a(n),r(o))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:s}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find(e=>e.props.value===s);return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function b(e){const n=j(e);return(0,v.jsxs)("div",{className:(0,t.A)(i.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>a});var r=s(4848),t=s(8453),i=s(1470),o=s(9365),l=s(7637);const a=[...l.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["You can use either ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,r.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,r.jsx)(l.Ay,{}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["You must use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,r.jsxs)(i.A,{groupId:"Setup method",children:[(0,r.jsx)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\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:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,r.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(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.p,{children:["You can ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},2068:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>x,default:()=>g,frontMatter:()=>p,metadata:()=>r,toc:()=>j});const r=JSON.parse('{"id":"get-started/install-uv","title":"Install OpenRAG in a Python project with uv","description":"Use uv to install OpenRAG as a managed or unmanaged dependency in a new or existing Python project.","source":"@site/docs/get-started/install-uv.mdx","sourceDirName":"get-started","slug":"/install-uv","permalink":"/install-uv","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install-uv.mdx","tags":[],"version":"current","frontMatter":{"title":"Install OpenRAG in a Python project with uv","slug":"/install-uv"},"sidebar":"tutorialSidebar","previous":{"title":"Run the installer script","permalink":"/install"},"next":{"title":"Invoke OpenRAG with uvx","permalink":"/install-uvx"}}');var t=s(4848),i=s(8453),o=(s(1470),s(9365),s(887)),l=s(2061),a=s(3351),c=s(309),d=s(6149),h=s(4042),u=s(927);s(7637),s(3059);const p={title:"Install OpenRAG in a Python project with uv",slug:"/install-uv"},x=void 0,m={},j=[{value:"Prerequisites",id:"prerequisites",level:2},...d.RM,...h.RM,...c.RM,...a.RM,{value:"Install and start OpenRAG with uv",id:"install-and-start-openrag-with-uv",level:2},{value:"Use uv add",id:"uv-add",level:3},{value:"Use uv pip install",id:"uv-pip-install",level:3},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...l.RM,...o.RM,...u.RM];function f(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:(0,t.jsx)(n.code,{children:"uv"})})," to install OpenRAG as a managed or unmanaged dependency in a new or existing Python project."]}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),", you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["For other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install-and-start-openrag-with-uv",children:"Install and start OpenRAG with uv"}),"\n",(0,t.jsxs)(n.p,{children:["There are two ways to install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.a,{href:"#uv-add",children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"uv add"})})," (Recommended)"]}),": Install OpenRAG as a managed dependency in a new or existing ",(0,t.jsx)(n.code,{children:"uv"})," Python project.\nThis is recommended because it adds OpenRAG to your ",(0,t.jsx)(n.code,{children:"pyproject.toml"})," and lockfile for better management of dependencies and the virtual environment."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"#uv-pip-install",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"uv pip install"})})}),": Use the ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/pip/",children:[(0,t.jsx)(n.code,{children:"uv pip"})," interface"]})," to install OpenRAG into an existing Python project that uses ",(0,t.jsx)(n.code,{children:"pip"}),", ",(0,t.jsx)(n.code,{children:"pip-tools"}),", and ",(0,t.jsx)(n.code,{children:"virtualenv"})," commands."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"uv-add",children:"Use uv add"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a new ",(0,t.jsx)(n.code,{children:"uv"}),"-managed Python project:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv init PROJECT_NAME\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Change into your new project directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd PROJECT_NAME\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Because ",(0,t.jsx)(n.code,{children:"uv"})," manages the virtual environment for you, you won't see a ",(0,t.jsx)(n.code,{children:"(venv)"})," prompt.\n",(0,t.jsx)(n.code,{children:"uv"})," commands automatically use the project's virtual environment."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add OpenRAG to your project:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the latest version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a specific version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add openrag==0.1.30\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a local wheel:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv add path/to/openrag-VERSION-py3-none-any.whl\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For more options, see ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/concepts/projects/dependencies/",children:["Managing dependencies with ",(0,t.jsx)(n.code,{children:"uv"})]}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before starting OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"uv-pip-install",children:"Use uv pip install"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Activate your virtual environment."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install the OpenRAG Python package:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv pip install openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before starting OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the OpenRAG TUI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run openrag\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uv"}),", you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."]}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(o.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function g(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(e)}},3059:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.\nFor example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media."}),"\n",(0,r.jsx)(n.p,{children:"The OpenRAG team recommends the following models when using Ollama as your model provider:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Language models"}),": ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,r.jsx)(n.code,{children:"mistral-nemo:12b"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you choose ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"}),", consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Embedding models"}),": ",(0,r.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,r.jsx)(n.code,{children:"nomic-embed-text:latest"})}),", ",(0,r.jsx)(n.code,{children:"mxbai-embed-large:latest"}),", or ",(0,r.jsx)(n.code,{children:"embeddinggemma:latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.\nYou can submit an ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/issues",children:"OpenRAG GitHub issue"})," to request support for specific models."]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},3351:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453),i=s(3059);const o=[...i.RM];function l(e){const n={a:"a",admonition:"admonition",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,r.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(i.Ay,{})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},4042:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(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.13 or later."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},6149:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,r.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,r.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>i});s(6540);var r=s(7856),t=s(4848);function i({name:e,...n}){const s=r[e];return s?(0,t.jsx)(s,{...n}):null}},9365:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var r=s(4164);const t={tabItem:"tabItem_Ymn6"};var i=s(4848);function o({children:e,hidden:n,className:s}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,s),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/4ba45368.1fce6090.js b/assets/js/4ba45368.1fce6090.js
new file mode 100644
index 00000000..dbae5de5
--- /dev/null
+++ b/assets/js/4ba45368.1fce6090.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[6976],{309:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Install ",(0,r.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,r.jsx)(n.code,{children:"podman-compose"})})," or ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},887:(e,n,s)=>{s.d(n,{Ay:()=>h,RM:()=>c});var r=s(4848),t=s(8453),o=s(9179),i=s(1470),a=s(9365),l=s(3059);const c=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,r.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,r.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,r.jsxs)(i.A,{groupId:"Provider",children:[(0,r.jsxs)(a.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(a.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(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"})," fields."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,r.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,r.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,r.jsxs)(a.A,{value:"Ollama",label:"Ollama",children:[(0,r.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.\nHowever, it requires additional setup because Ollama isn't included with OpenRAG.\nYou must deploy Ollama separately if you want to use Ollama as a model provider."}),(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(l.Ay,{})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,r.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,r.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(a.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},927:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[{value:"Next steps",id:"next-steps",level:2}];function i(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Learn how to ",(0,r.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},1470:(e,n,s)=>{s.d(n,{A:()=>w});var r=s(6540),t=s(4164),o=s(7559),i=s(3104),a=s(6347),l=s(205),c=s(7485),d=s(1682),h=s(679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:s}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:s,default:r}})=>({value:e,label:n,attributes:s,default:r}))}(s);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,s])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function m({queryString:e=!1,groupId:n}){const s=(0,a.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,r.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace({...s.location,search:n.toString()})},[t,s])]}function j(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,o=p(e),[i,a]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find(e=>e.default)??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:o})),[c,d]=m({queryString:s,groupId:t}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Dv)(n);return[s,(0,r.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),f=(()=>{const e=c??u;return x({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{f&&a(f)},[f]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),j(e)},[d,j,o]),tabValues:o}}var f=s(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(4848);function y({className:e,block:n,selectedValue:s,selectValue:r,tabValues:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.a_)(),c=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==s&&(l(n),r(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{a.push(e)},onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:s}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===s);return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function b(e){const n=j(e);return(0,v.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>l});var r=s(4848),t=s(8453),o=s(1470),i=s(9365),a=s(7637);const l=[...a.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["You can use either ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,r.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["You must use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,r.jsxs)(o.A,{groupId:"Setup method",children:[(0,r.jsx)(i.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})}),(0,r.jsx)(i.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:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,r.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(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.p,{children:["You can ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3059:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.\nFor example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media."}),"\n",(0,r.jsx)(n.p,{children:"The OpenRAG team recommends the following models when using Ollama as your model provider:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Language models"}),": ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,r.jsx)(n.code,{children:"mistral-nemo:12b"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you choose ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"}),", consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Embedding models"}),": ",(0,r.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,r.jsx)(n.code,{children:"nomic-embed-text:latest"})}),", ",(0,r.jsx)(n.code,{children:"mxbai-embed-large:latest"}),", or ",(0,r.jsx)(n.code,{children:"embeddinggemma:latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.\nYou can submit an ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/issues",children:"OpenRAG GitHub issue"})," to request support for specific models."]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},3351:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453),o=s(3059);const i=[...o.RM];function a(e){const n={a:"a",admonition:"admonition",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,r.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(o.Ay,{})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},4042:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(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.13 or later."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},6149:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,r.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var r=s(4848),t=s(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,r.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},9081:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>x,default:()=>g,frontMatter:()=>p,metadata:()=>r,toc:()=>j});const r=JSON.parse('{"id":"get-started/install-uvx","title":"Invoke OpenRAG with uvx","description":"Use uvx to invoke OpenRAG outside of a Python project or without modifying your project\'s dependencies.","source":"@site/docs/get-started/install-uvx.mdx","sourceDirName":"get-started","slug":"/install-uvx","permalink":"/install-uvx","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install-uvx.mdx","tags":[],"version":"current","frontMatter":{"title":"Invoke OpenRAG with uvx","slug":"/install-uvx"},"sidebar":"tutorialSidebar","previous":{"title":"Install OpenRAG with uv","permalink":"/install-uv"},"next":{"title":"Install OpenRAG on Windows","permalink":"/install-windows"}}');var t=s(4848),o=s(8453),i=(s(1470),s(9365),s(887)),a=s(2061),l=s(3351),c=s(309),d=s(6149),h=s(4042),u=s(927);s(7637),s(3059);const p={title:"Invoke OpenRAG with uvx",slug:"/install-uvx"},x=void 0,m={},j=[{value:"Prerequisites",id:"prerequisites",level:2},...d.RM,...h.RM,...c.RM,...l.RM,{value:"Install and run OpenRAG with uvx",id:"install-and-run-openrag-with-uvx",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,...i.RM,...u.RM];function f(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#running-tools",children:(0,t.jsx)(n.code,{children:"uvx"})})," to invoke OpenRAG outside of a Python project or without modifying your project's dependencies."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"/install",children:"automatic installer script"})," also uses ",(0,t.jsx)(n.code,{children:"uvx"})," to install OpenRAG."]})}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),", you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["This installation method is best for testing OpenRAG by running it outside of a Python project.\nFor other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install-and-run-openrag-with-uvx",children:"Install and run OpenRAG with uvx"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a directory to store your OpenRAG configuration files and data, and then change to that directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before invoking OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Invoke OpenRAG:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can invoke a specific version using any of the ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#requesting-specific-versions",children:[(0,t.jsx)(n.code,{children:"uvx"})," version specifiers"]}),", such as ",(0,t.jsx)(n.code,{children:"--from"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uvx --from openrag==0.1.30 openrag\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Invoking OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx openrag"})," creates a cached, ephemeral environment for the TUI in your local ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nBy invoking OpenRAG in a specific directory, your OpenRAG configuration files and data are stored separately from the ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nClearing the ",(0,t.jsx)(n.code,{children:"uv"})," cache doesn't remove your entire OpenRAG installation.\nAfter clearing the cache, you can re-invoke OpenRAG (",(0,t.jsx)(n.code,{children:"uvx openrag"}),") to restart the TUI with your preserved configuration and data."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),", you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."]}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function g(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var r=s(7856),t=s(4848);function o({name:e,...n}){const s=r[e];return s?(0,t.jsx)(s,{...n}):null}},9365:(e,n,s)=>{s.d(n,{A:()=>i});s(6540);var r=s(4164);const t={tabItem:"tabItem_Ymn6"};var o=s(4848);function i({children:e,hidden:n,className:s}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,s),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/4ba45368.706e6a4d.js b/assets/js/4ba45368.706e6a4d.js
deleted file mode 100644
index 5d822b0d..00000000
--- a/assets/js/4ba45368.706e6a4d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[6976],{309:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,s.jsx)(n.code,{children:"podman-compose"})})," or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},887:(e,n,r)=>{r.d(n,{Ay:()=>d,RM:()=>l});var s=r(4848),t=r(8453),o=r(9179),i=r(1470),a=r(9365);const l=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,s.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,s.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,s.jsxs)(i.A,{groupId:"Provider",children:[(0,s.jsxs)(a.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(a.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(0,s.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,s.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,s.jsx)(n.strong,{children:"IBM API key"})," fields."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,s.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,s.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(a.A,{value:"Ollama",label:"Ollama",children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider."})}),(0,s.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.\nThe recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally."}),(0,s.jsxs)(n.p,{children:["The OpenRAG team recommends the OpenAI ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," lanuage model and the ",(0,s.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,s.jsx)(n.code,{children:"nomic-embed-text"})})," embedding model.\nHowever, ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine."]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,s.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,s.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(a.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},927:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[{value:"Next steps",id:"next-steps",level:2}];function i(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Learn how to ",(0,s.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},1470:(e,n,r)=>{r.d(n,{A:()=>w});var s=r(6540),t=r(4164),o=r(7559),i=r(3104),a=r(6347),l=r(205),c=r(7485),d=r(1682),h=r(679);function u(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:r,default:s}})=>({value:e,label:n,attributes:r,default:s}))}(r);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,r])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function m({queryString:e=!1,groupId:n}){const r=(0,a.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,s.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})},[t,r])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,o=p(e),[i,a]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=n.find(e=>e.default)??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o})),[c,d]=m({queryString:r,groupId:t}),[u,f]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,h.Dv)(n);return[r,(0,s.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),j=(()=>{const e=c??u;return x({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{j&&a(j)},[j]);return{selectedValue:i,selectValue:(0,s.useCallback)(e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),f(e)},[d,f,o]),tabValues:o}}var j=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y({className:e,block:n,selectedValue:r,selectValue:s,tabValues:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.a_)(),c=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==r&&(l(n),s(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:s})=>(0,v.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>{a.push(e)},onKeyDown:d,onClick:c,...s,className:(0,t.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:r}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===r);return e?(0,s.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r}))})}function b(e){const n=f(e);return(0,v.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,j.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,r)=>{r.d(n,{Ay:()=>d,RM:()=>l});var s=r(4848),t=r(8453),o=r(1470),i=r(9365),a=r(7637);const l=[...a.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["You can use either ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,s.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,s.jsx)(a.Ay,{}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You must use ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,s.jsxs)(o.A,{groupId:"Setup method",children:[(0,s.jsx)(i.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the TUI, click ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," or press ",(0,s.jsx)("kbd",{children:"1"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,s.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,s.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,s.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,s.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,s.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,s.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,s.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,s.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/manage-services",children:(0,s.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,s.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,s.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["In your browser, navigate to ",(0,s.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue with the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})}),(0,s.jsx)(i.A,{value:"Advanced setup",label:"Advanced setup",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the TUI, click ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," or press ",(0,s.jsx)("kbd",{children:"2"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,s.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,s.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,s.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,s.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,s.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,s.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(0,s.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,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.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,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,s.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,s.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,s.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/manage-services",children:(0,s.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,s.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,s.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["In your browser, navigate to ",(0,s.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,s.jsxs)(n.li,{children:["Google Drive: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,s.jsxs)(n.li,{children:["OneDrive: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,s.jsxs)(n.li,{children:["SharePoint: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue with the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},3351:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,s.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,s.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,s.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"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},4042:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python"})," version 3.13 or later."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},6149:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,s.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},7637:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,s.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,s.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,s.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,s.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,s.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},9081:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>m,contentTitle:()=>x,default:()=>g,frontMatter:()=>p,metadata:()=>s,toc:()=>f});const s=JSON.parse('{"id":"get-started/install-uvx","title":"Invoke OpenRAG with uvx","description":"Use uvx to invoke OpenRAG outside of a Python project or without modifying your project\'s dependencies.","source":"@site/docs/get-started/install-uvx.mdx","sourceDirName":"get-started","slug":"/install-uvx","permalink":"/install-uvx","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/install-uvx.mdx","tags":[],"version":"current","frontMatter":{"title":"Invoke OpenRAG with uvx","slug":"/install-uvx"},"sidebar":"tutorialSidebar","previous":{"title":"Install OpenRAG with uv","permalink":"/install-uv"},"next":{"title":"Install OpenRAG on Windows","permalink":"/install-windows"}}');var t=r(4848),o=r(8453),i=(r(1470),r(9365),r(887)),a=r(2061),l=r(3351),c=r(309),d=r(6149),h=r(4042),u=r(927);r(7637);const p={title:"Invoke OpenRAG with uvx",slug:"/install-uvx"},x=void 0,m={},f=[{value:"Prerequisites",id:"prerequisites",level:2},...d.RM,...h.RM,...c.RM,...l.RM,{value:"Install and run OpenRAG with uvx",id:"install-and-run-openrag-with-uvx",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,...i.RM,...u.RM];function j(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#running-tools",children:(0,t.jsx)(n.code,{children:"uvx"})})," to invoke OpenRAG outside of a Python project or without modifying your project's dependencies."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"/install",children:"automatic installer script"})," also uses ",(0,t.jsx)(n.code,{children:"uvx"})," to install OpenRAG."]})}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),", you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["This installation method is best for testing OpenRAG by running it outside of a Python project.\nFor other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install-and-run-openrag-with-uvx",children:"Install and run OpenRAG with uvx"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a directory to store your OpenRAG configuration files and data, and then change to that directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"})," before invoking OpenRAG."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Invoke OpenRAG:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can invoke a specific version using any of the ",(0,t.jsxs)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#requesting-specific-versions",children:[(0,t.jsx)(n.code,{children:"uvx"})," version specifiers"]}),", such as ",(0,t.jsx)(n.code,{children:"--from"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uvx --from openrag==0.1.30 openrag\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Invoking OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx openrag"})," creates a cached, ephemeral environment for the TUI in your local ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nBy invoking OpenRAG in a specific directory, your OpenRAG configuration files and data are stored separately from the ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nClearing the ",(0,t.jsx)(n.code,{children:"uv"})," cache doesn't remove your entire OpenRAG installation.\nAfter clearing the cache, you can re-invoke OpenRAG (",(0,t.jsx)(n.code,{children:"uvx openrag"}),") to restart the TUI with your preserved configuration and data."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),", you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."]}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function g(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(j,{...e})}):j(e)}},9179:(e,n,r)=>{r.d(n,{A:()=>o});r(6540);var s=r(7856),t=r(4848);function o({name:e,...n}){const r=s[e];return r?(0,t.jsx)(r,{...n}):null}},9365:(e,n,r)=>{r.d(n,{A:()=>i});r(6540);var s=r(4164);const t={tabItem:"tabItem_Ymn6"};var o=r(4848);function i({children:e,hidden:n,className:r}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(t.tabItem,r),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/749371cc.3a627799.js b/assets/js/749371cc.3a627799.js
deleted file mode 100644
index ede9178f..00000000
--- a/assets/js/749371cc.3a627799.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[2272],{309:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,s.jsx)(n.code,{children:"podman-compose"})})," or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},887:(e,n,r)=>{r.d(n,{Ay:()=>d,RM:()=>a});var s=r(4848),t=r(8453),o=r(9179),i=r(1470),l=r(9365);const a=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,s.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,s.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,s.jsxs)(i.A,{groupId:"Provider",children:[(0,s.jsxs)(l.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(0,s.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,s.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,s.jsx)(n.strong,{children:"IBM API key"})," fields."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,s.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,s.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider."})}),(0,s.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.\nThe recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally."}),(0,s.jsxs)(n.p,{children:["The OpenRAG team recommends the OpenAI ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," lanuage model and the ",(0,s.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,s.jsx)(n.code,{children:"nomic-embed-text"})})," embedding model.\nHowever, ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine."]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,s.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,s.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(l.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},927:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[{value:"Next steps",id:"next-steps",level:2}];function i(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Learn how to ",(0,s.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},1470:(e,n,r)=>{r.d(n,{A:()=>w});var s=r(6540),t=r(4164),o=r(7559),i=r(3104),l=r(6347),a=r(205),c=r(7485),d=r(1682),h=r(679);function u(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:r,default:s}})=>({value:e,label:n,attributes:r,default:s}))}(r);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,r])}function m({value:e,tabValues:n}){return n.some(n=>n.value===e)}function x({queryString:e=!1,groupId:n}){const r=(0,l.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,s.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})},[t,r])]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,o=p(e),[i,l]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=n.find(e=>e.default)??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o})),[c,d]=x({queryString:r,groupId:t}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,h.Dv)(n);return[r,(0,s.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),f=(()=>{const e=c??u;return m({value:e,tabValues:o})?e:null})();(0,a.A)(()=>{f&&l(f)},[f]);return{selectedValue:i,selectValue:(0,s.useCallback)(e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),j(e)},[d,j,o]),tabValues:o}}var f=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y({className:e,block:n,selectedValue:r,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),i=o[t].value;i!==r&&(a(n),s(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:s})=>(0,v.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...s,className:(0,t.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===e}),children:n??e},e))})}function b({lazy:e,children:n,selectedValue:r}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===r);return e?(0,s.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r}))})}function A(e){const n=j(e);return(0,v.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(b,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(A,{...e,children:u(e.children)},String(n))}},3351:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,s.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,s.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,s.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"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},4042:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python"})," version 3.13 or later."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},5788:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>f,frontMatter:()=>u,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"get-started/docker","title":"Deploy OpenRAG with self-managed services","description":"To manage your own OpenRAG services, deploy OpenRAG with Docker or Podman.","source":"@site/docs/get-started/docker.mdx","sourceDirName":"get-started","slug":"/docker","permalink":"/docker","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/docker.mdx","tags":[],"version":"current","frontMatter":{"title":"Deploy OpenRAG with self-managed services","slug":"/docker"},"sidebar":"tutorialSidebar","previous":{"title":"Install OpenRAG on Windows","permalink":"/install-windows"},"next":{"title":"Upgrade OpenRAG","permalink":"/upgrade"}}');var t=r(4848),o=r(8453),i=(r(1470),r(9365),r(887)),l=r(3351),a=r(309),c=r(6149),d=r(4042),h=r(927);const u={title:"Deploy OpenRAG with self-managed services",slug:"/docker"},p=void 0,m={},x=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...d.RM,...a.RM,...l.RM,{value:"Prepare your deployment",id:"setup",level:2},{value:"Start services",id:"start-services",level:2},...i.RM,...h.RM];function j(e){const n={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"To manage your own OpenRAG services, deploy OpenRAG with Docker or Podman."}),"\n",(0,t.jsxs)(n.p,{children:["Use this installation method if you don't want to ",(0,t.jsx)(n.a,{href:"/tui",children:"use the Terminal User Interface (TUI)"}),", or you need to run OpenRAG in an environment where using the TUI is unfeasible."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Prepare your deployment"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Clone the OpenRAG repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/langflow-ai/openrag.git\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Change to the root of the cloned repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install dependencies:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv sync\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.code,{children:".env"})," file at the root of the cloned repository."]}),"\n",(0,t.jsxs)(n.p,{children:["You can create an empty file or copy the repository's ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/.env.example",children:(0,t.jsx)(n.code,{children:".env.example"})})," file.\nThe example file contains some of the ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"})," to get you started with configuring your deployment."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cp .env.example .env\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Edit the ",(0,t.jsx)(n.code,{children:".env"})," file to configure your deployment using ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"}),".\nThe OpenRAG Docker Compose files pull values from your ",(0,t.jsx)(n.code,{children:".env"})," file to configure the OpenRAG containers.\nThe following variables are required or recommended:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," (Required)"]}),": Sets the OpenSearch administrator password. It must adhere to the ",(0,t.jsx)(n.a,{href:"https://docs.opensearch.org/latest/security/configuration/demo-configuration/#setting-up-a-custom-admin-password",children:"OpenSearch password complexity requirements"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})}),": The username for the Langflow administrator user. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," isn't set, then the default value is ",(0,t.jsx)(n.code,{children:"admin"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," (Strongly recommended)"]}),": Sets the Langflow administrator password, and determines the Langflow server's default authentication mode. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then the Langflow server starts without authentication enabled. For more information, see ",(0,t.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})," (Strongly recommended)"]}),": A secret encryption key for internal Langflow operations. It is recommended to ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-secret-key",children:"generate your own Langflow secret key"}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})," isn't set, then Langflow generates a secret key automatically."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Model provider credentials"}),": Provide credentials for your preferred model providers. If none of these are set in the ",(0,t.jsx)(n.code,{children:".env"})," file, you must configure at least one provider during the ",(0,t.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"OPENAI_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"OLLAMA_ENDPOINT"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_ENDPOINT"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth provider credentials"}),": To upload documents from external storage, such as Google Drive, set the required OAuth credentials for the connectors that you want to use. You can ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up so you don't have to rebuild the containers."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,t.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(0,t.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"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For more information and variables, see ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"start-services",children:"Start services"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start ",(0,t.jsx)(n.code,{children:"docling serve"})," on port 5001 on the host machine:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/docling_ctl.py start --port 5001\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Docling cannot run inside a Docker container due to system-level dependencies, so you must manage it as a separate service on the host machine.\nFor more information, see ",(0,t.jsx)(n.a,{href:"/manage-services#start-native-services",children:"Stop, start, and inspect native services"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This port is required to deploy OpenRAG successfully; don't use a different port.\nAdditionally, this enables the ",(0,t.jsx)(n.a,{href:"https://opensource.apple.com/projects/mlx/",children:"MLX framework"})," for accelerated performance on Apple Silicon Mac machines."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Confirm ",(0,t.jsx)(n.code,{children:"docling serve"})," is running."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/docling_ctl.py status\n"})}),"\n",(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.code,{children:"docling serve"})," is running, the output includes the status, address, and process ID (PID):"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"Status: running\nEndpoint: http://127.0.0.1:5001\nDocs: http://127.0.0.1:5001/docs\nPID: 27746\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Deploy the OpenRAG containers locally using the appropriate Docker Compose file for your environment.\nBoth files deploy the same services."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose.yml",children:(0,t.jsx)(n.code,{children:"docker-compose.yml"})}),": If your host machine has an NVIDIA GPU with CUDA support and compatible NVIDIA drivers, you can use this file to deploy OpenRAG with accelerated processing."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose build\ndocker compose up -d\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose build\npodman compose up -d\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose-cpu.yml",children:(0,t.jsx)(n.code,{children:"docker-compose-cpu.yml"})}),": If your host machine doesn't have NVIDIA GPU support, use this file for a CPU-only OpenRAG deployment."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose -f docker-compose-cpu.yml up -d\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose -f docker-compose-cpu.yml up -d\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Wait for the OpenRAG containers to start, and then confirm that all containers are running:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose ps\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose ps\n"})}),"\n",(0,t.jsx)(n.p,{children:"The OpenRAG Docker Compose files deploy the following containers:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Container Name"}),(0,t.jsx)(n.th,{children:"Default address"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenRAG Backend"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:8000",children:"http://localhost:8000"})}),(0,t.jsx)(n.td,{children:"FastAPI server and core functionality."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenRAG Frontend"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:3000",children:"http://localhost:3000"})}),(0,t.jsx)(n.td,{children:"React web interface for user interaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Langflow"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:7860",children:"http://localhost:7860"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"/agents",children:"AI workflow engine"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenSearch"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:9200",children:"http://localhost:9200"})}),(0,t.jsxs)(n.td,{children:["Datastore for ",(0,t.jsx)(n.a,{href:"/knowledge",children:"knowledge"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenSearch Dashboards"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:5601",children:"http://localhost:5601"})}),(0,t.jsx)(n.td,{children:"OpenSearch database administration interface."})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"When the containers are running, you can access your OpenRAG services at their addresses."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Access the OpenRAG frontend at ",(0,t.jsx)(n.code,{children:"http://localhost:3000"}),", and then continue with the ",(0,t.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(h.Ay,{})]})}function f(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(j,{...e})}):j(e)}},6149:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,s.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},9179:(e,n,r)=>{r.d(n,{A:()=>o});r(6540);var s=r(7856),t=r(4848);function o({name:e,...n}){const r=s[e];return r?(0,t.jsx)(r,{...n}):null}},9365:(e,n,r)=>{r.d(n,{A:()=>i});r(6540);var s=r(4164);const t={tabItem:"tabItem_Ymn6"};var o=r(4848);function i({children:e,hidden:n,className:r}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(t.tabItem,r),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/749371cc.774b6a0c.js b/assets/js/749371cc.774b6a0c.js
new file mode 100644
index 00000000..b919cc21
--- /dev/null
+++ b/assets/js/749371cc.774b6a0c.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[2272],{309:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://podman.io/docs/installation",children:"Podman"})," (recommended) or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-compose.1.html",children:(0,s.jsx)(n.code,{children:"podman-compose"})})," or ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker Compose"}),".\nTo use Docker Compose with Podman, you must alias Docker Compose commands to Podman commands."]}),"\n"]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},887:(e,n,r)=>{r.d(n,{Ay:()=>h,RM:()=>c});var s=r(4848),t=r(8453),o=r(9179),i=r(1470),l=r(9365),a=r(3059);const c=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...a.RM];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,s.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,s.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,s.jsxs)(i.A,{groupId:"Provider",children:[(0,s.jsxs)(l.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(l.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(0,s.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,s.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,s.jsx)(n.strong,{children:"IBM API key"})," fields."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,s.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,s.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(l.A,{value:"Ollama",label:"Ollama",children:[(0,s.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.\nHowever, it requires additional setup because Ollama isn't included with OpenRAG.\nYou must deploy Ollama separately if you want to use Ollama as a model provider."}),(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(a.Ay,{})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,s.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,s.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(l.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(o.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},927:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[{value:"Next steps",id:"next-steps",level:2}];function i(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Learn how to ",(0,s.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},1470:(e,n,r)=>{r.d(n,{A:()=>w});var s=r(6540),t=r(4164),o=r(7559),i=r(3104),l=r(6347),a=r(205),c=r(7485),d=r(1682),h=r(679);function u(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:r,default:s}})=>({value:e,label:n,attributes:r,default:s}))}(r);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,r])}function m({value:e,tabValues:n}){return n.some(n=>n.value===e)}function x({queryString:e=!1,groupId:n}){const r=(0,l.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,s.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})},[t,r])]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,o=p(e),[i,l]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=n.find(e=>e.default)??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o})),[c,d]=x({queryString:r,groupId:t}),[u,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,h.Dv)(n);return[r,(0,s.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),f=(()=>{const e=c??u;return m({value:e,tabValues:o})?e:null})();(0,a.A)(()=>{f&&l(f)},[f]);return{selectedValue:i,selectValue:(0,s.useCallback)(e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),j(e)},[d,j,o]),tabValues:o}}var f=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y({className:e,block:n,selectedValue:r,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),i=o[t].value;i!==r&&(a(n),s(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:s})=>(0,v.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...s,className:(0,t.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===e}),children:n??e},e))})}function b({lazy:e,children:n,selectedValue:r}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===r);return e?(0,s.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r}))})}function A(e){const n=j(e);return(0,v.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(b,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(A,{...e,children:u(e.children)},String(n))}},3059:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.\nFor example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media."}),"\n",(0,s.jsx)(n.p,{children:"The OpenRAG team recommends the following models when using Ollama as your model provider:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Language models"}),": ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,s.jsx)(n.code,{children:"mistral-nemo:12b"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you choose ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"}),", consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Embedding models"}),": ",(0,s.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,s.jsx)(n.code,{children:"nomic-embed-text:latest"})}),", ",(0,s.jsx)(n.code,{children:"mxbai-embed-large:latest"}),", or ",(0,s.jsx)(n.code,{children:"embeddinggemma:latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.\nYou can submit an ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/issues",children:"OpenRAG GitHub issue"})," to request support for specific models."]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},3351:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453),o=r(3059);const i=[...o.RM];function l(e){const n={a:"a",admonition:"admonition",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,s.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,s.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(o.Ay,{})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,s.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"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},4042:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python"})," version 3.13 or later."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},5788:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>f,frontMatter:()=>u,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"get-started/docker","title":"Deploy OpenRAG with self-managed services","description":"To manage your own OpenRAG services, deploy OpenRAG with Docker or Podman.","source":"@site/docs/get-started/docker.mdx","sourceDirName":"get-started","slug":"/docker","permalink":"/docker","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/docker.mdx","tags":[],"version":"current","frontMatter":{"title":"Deploy OpenRAG with self-managed services","slug":"/docker"},"sidebar":"tutorialSidebar","previous":{"title":"Install OpenRAG on Windows","permalink":"/install-windows"},"next":{"title":"Upgrade OpenRAG","permalink":"/upgrade"}}');var t=r(4848),o=r(8453),i=(r(1470),r(9365),r(887)),l=r(3351),a=r(309),c=r(6149),d=r(4042),h=r(927);r(3059);const u={title:"Deploy OpenRAG with self-managed services",slug:"/docker"},p=void 0,m={},x=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...d.RM,...a.RM,...l.RM,{value:"Prepare your deployment",id:"setup",level:2},{value:"Start services",id:"start-services",level:2},...i.RM,...h.RM];function j(e){const n={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"To manage your own OpenRAG services, deploy OpenRAG with Docker or Podman."}),"\n",(0,t.jsxs)(n.p,{children:["Use this installation method if you don't want to ",(0,t.jsx)(n.a,{href:"/tui",children:"use the Terminal User Interface (TUI)"}),", or you need to run OpenRAG in an environment where using the TUI is unfeasible."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Prepare your deployment"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Clone the OpenRAG repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/langflow-ai/openrag.git\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Change to the root of the cloned repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd openrag\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install dependencies:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv sync\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.code,{children:".env"})," file at the root of the cloned repository."]}),"\n",(0,t.jsxs)(n.p,{children:["You can create an empty file or copy the repository's ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/.env.example",children:(0,t.jsx)(n.code,{children:".env.example"})})," file.\nThe example file contains some of the ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"})," to get you started with configuring your deployment."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cp .env.example .env\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Edit the ",(0,t.jsx)(n.code,{children:".env"})," file to configure your deployment using ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"}),".\nThe OpenRAG Docker Compose files pull values from your ",(0,t.jsx)(n.code,{children:".env"})," file to configure the OpenRAG containers.\nThe following variables are required or recommended:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," (Required)"]}),": Sets the OpenSearch administrator password. It must adhere to the ",(0,t.jsx)(n.a,{href:"https://docs.opensearch.org/latest/security/configuration/demo-configuration/#setting-up-a-custom-admin-password",children:"OpenSearch password complexity requirements"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})}),": The username for the Langflow administrator user. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," isn't set, then the default value is ",(0,t.jsx)(n.code,{children:"admin"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," (Strongly recommended)"]}),": Sets the Langflow administrator password, and determines the Langflow server's default authentication mode. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then the Langflow server starts without authentication enabled. For more information, see ",(0,t.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})," (Strongly recommended)"]}),": A secret encryption key for internal Langflow operations. It is recommended to ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-secret-key",children:"generate your own Langflow secret key"}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})," isn't set, then Langflow generates a secret key automatically."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Model provider credentials"}),": Provide credentials for your preferred model providers. If none of these are set in the ",(0,t.jsx)(n.code,{children:".env"})," file, you must configure at least one provider during the ",(0,t.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"OPENAI_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"OLLAMA_ENDPOINT"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_API_KEY"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_ENDPOINT"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth provider credentials"}),": To upload documents from external storage, such as Google Drive, set the required OAuth credentials for the connectors that you want to use. You can ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up so you don't have to rebuild the containers."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,t.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(0,t.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"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For more information and variables, see ",(0,t.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"start-services",children:"Start services"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start ",(0,t.jsx)(n.code,{children:"docling serve"})," on port 5001 on the host machine:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/docling_ctl.py start --port 5001\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Docling cannot run inside a Docker container due to system-level dependencies, so you must manage it as a separate service on the host machine.\nFor more information, see ",(0,t.jsx)(n.a,{href:"/manage-services#start-native-services",children:"Stop, start, and inspect native services"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["This port is required to deploy OpenRAG successfully; don't use a different port.\nAdditionally, this enables the ",(0,t.jsx)(n.a,{href:"https://opensource.apple.com/projects/mlx/",children:"MLX framework"})," for accelerated performance on Apple Silicon Mac machines."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Confirm ",(0,t.jsx)(n.code,{children:"docling serve"})," is running."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/docling_ctl.py status\n"})}),"\n",(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.code,{children:"docling serve"})," is running, the output includes the status, address, and process ID (PID):"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"Status: running\nEndpoint: http://127.0.0.1:5001\nDocs: http://127.0.0.1:5001/docs\nPID: 27746\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Deploy the OpenRAG containers locally using the appropriate Docker Compose file for your environment.\nBoth files deploy the same services."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose.yml",children:(0,t.jsx)(n.code,{children:"docker-compose.yml"})}),": If your host machine has an NVIDIA GPU with CUDA support and compatible NVIDIA drivers, you can use this file to deploy OpenRAG with accelerated processing."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose build\ndocker compose up -d\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose build\npodman compose up -d\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/docker-compose-cpu.yml",children:(0,t.jsx)(n.code,{children:"docker-compose-cpu.yml"})}),": If your host machine doesn't have NVIDIA GPU support, use this file for a CPU-only OpenRAG deployment."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose -f docker-compose-cpu.yml up -d\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose -f docker-compose-cpu.yml up -d\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Wait for the OpenRAG containers to start, and then confirm that all containers are running:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose ps\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose ps\n"})}),"\n",(0,t.jsx)(n.p,{children:"The OpenRAG Docker Compose files deploy the following containers:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Container Name"}),(0,t.jsx)(n.th,{children:"Default address"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenRAG Backend"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:8000",children:"http://localhost:8000"})}),(0,t.jsx)(n.td,{children:"FastAPI server and core functionality."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenRAG Frontend"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:3000",children:"http://localhost:3000"})}),(0,t.jsx)(n.td,{children:"React web interface for user interaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Langflow"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:7860",children:"http://localhost:7860"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"/agents",children:"AI workflow engine"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenSearch"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:9200",children:"http://localhost:9200"})}),(0,t.jsxs)(n.td,{children:["Datastore for ",(0,t.jsx)(n.a,{href:"/knowledge",children:"knowledge"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenSearch Dashboards"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"http://localhost:5601",children:"http://localhost:5601"})}),(0,t.jsx)(n.td,{children:"OpenSearch database administration interface."})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"When the containers are running, you can access your OpenRAG services at their addresses."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Access the OpenRAG frontend at ",(0,t.jsx)(n.code,{children:"http://localhost:3000"}),", and then continue with the ",(0,t.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(h.Ay,{})]})}function f(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(j,{...e})}):j(e)}},6149:(e,n,r)=>{r.d(n,{Ay:()=>l,RM:()=>o});var s=r(4848),t=r(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,s.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},9179:(e,n,r)=>{r.d(n,{A:()=>o});r(6540);var s=r(7856),t=r(4848);function o({name:e,...n}){const r=s[e];return r?(0,t.jsx)(r,{...n}):null}},9365:(e,n,r)=>{r.d(n,{A:()=>i});r(6540);var s=r(4164);const t={tabItem:"tabItem_Ymn6"};var o=r(4848);function i({children:e,hidden:n,className:r}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(t.tabItem,r),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/d0314b07.9418ca19.js b/assets/js/d0314b07.9418ca19.js
deleted file mode 100644
index 7e4f512f..00000000
--- a/assets/js/d0314b07.9418ca19.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[5750],{887:(e,n,r)=>{r.d(n,{Ay:()=>d,RM:()=>l});var s=r(4848),t=r(8453),i=r(9179),o=r(1470),a=r(9365);const l=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,s.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,s.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,s.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,s.jsxs)(o.A,{groupId:"Provider",children:[(0,s.jsxs)(a.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(a.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(0,s.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", ",(0,s.jsx)(n.strong,{children:"IBM Project ID"}),", and ",(0,s.jsx)(n.strong,{children:"IBM API key"})," fields."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,s.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,s.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(a.A,{value:"Ollama",label:"Ollama",children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider."})}),(0,s.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.\nThe recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally."}),(0,s.jsxs)(n.p,{children:["The OpenRAG team recommends the OpenAI ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," lanuage model and the ",(0,s.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,s.jsx)(n.code,{children:"nomic-embed-text"})})," embedding model.\nHowever, ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine."]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,s.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,s.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,s.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,s.jsx)(a.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you set ",(0,s.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,s.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,s.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,s.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},927:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453);const i=[{value:"Next steps",id:"next-steps",level:2}];function o(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,s.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Learn how to ",(0,s.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,s.jsx)(n.a,{href:"/chat",children:(0,s.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},1470:(e,n,r)=>{r.d(n,{A:()=>w});var s=r(6540),t=r(4164),i=r(7559),o=r(3104),a=r(6347),l=r(205),c=r(7485),d=r(1682),h=r(679);function u(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:r,default:s}})=>({value:e,label:n,attributes:r,default:s}))}(r);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,r])}function m({value:e,tabValues:n}){return n.some(n=>n.value===e)}function x({queryString:e=!1,groupId:n}){const r=(0,a.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,s.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})},[t,r])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,i=p(e),[o,a]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=n.find(e=>e.default)??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i})),[c,d]=x({queryString:r,groupId:t}),[u,f]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,h.Dv)(n);return[r,(0,s.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),j=(()=>{const e=c??u;return m({value:e,tabValues:i})?e:null})();(0,l.A)(()=>{j&&a(j)},[j]);return{selectedValue:o,selectValue:(0,s.useCallback)(e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),f(e)},[d,f,i]),tabValues:i}}var j=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y({className:e,block:n,selectedValue:r,selectValue:s,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=a.indexOf(n),o=i[t].value;o!==r&&(l(n),s(o))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:s})=>(0,v.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>{a.push(e)},onKeyDown:d,onClick:c,...s,className:(0,t.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:r}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find(e=>e.props.value===r);return e?(0,s.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r}))})}function b(e){const n=f(e);return(0,v.jsxs)("div",{className:(0,t.A)(i.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,j.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,r)=>{r.d(n,{Ay:()=>d,RM:()=>l});var s=r(4848),t=r(8453),i=r(1470),o=r(9365),a=r(7637);const l=[...a.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["You can use either ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,s.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,s.jsx)(a.Ay,{}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["You must use ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,s.jsxs)(i.A,{groupId:"Setup method",children:[(0,s.jsx)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the TUI, click ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," or press ",(0,s.jsx)("kbd",{children:"1"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,s.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,s.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,s.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,s.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,s.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,s.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,s.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,s.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/manage-services",children:(0,s.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,s.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,s.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["In your browser, navigate to ",(0,s.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue with the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})}),(0,s.jsx)(o.A,{value:"Advanced setup",label:"Advanced setup",children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the TUI, click ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," or press ",(0,s.jsx)("kbd",{children:"2"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,s.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,s.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,s.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,s.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,s.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,s.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,s.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(0,s.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,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.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,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Save Configuration"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," at ",(0,s.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,s.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,s.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,s.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/manage-services",children:(0,s.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,s.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,s.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["In your browser, navigate to ",(0,s.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,s.jsxs)(n.li,{children:["Google Drive: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,s.jsxs)(n.li,{children:["OneDrive: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,s.jsxs)(n.li,{children:["SharePoint: ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Continue with the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},3351:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453);const i=[];function o(e){const n={a:"a",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,s.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,s.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,s.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Optional: Install GPU support with an NVIDIA GPU, ",(0,s.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"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},4042:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://www.python.org/downloads/release/python-3100/",children:"Python"})," version 3.13 or later."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},4398:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>j,frontMatter:()=>u,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"get-started/install","title":"Install OpenRAG with the automatic installer script","description":"To quickly install and test OpenRAG\'s core features, try the quickstart.","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 the automatic installer script","slug":"/install"},"sidebar":"tutorialSidebar","previous":{"title":"Select an installation method","permalink":"/install-options"},"next":{"title":"Install OpenRAG with uv","permalink":"/install-uv"}}');var t=r(4848),i=r(8453),o=(r(1470),r(9365),r(887)),a=r(2061),l=r(3351),c=r(6149),d=r(4042),h=r(927);r(7637);const u={title:"Install OpenRAG with the automatic installer script",slug:"/install"},p=void 0,m={},x=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...d.RM,...l.RM,{value:"Run the installer script",id:"install",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,...o.RM,...h.RM];function f(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To quickly install and test OpenRAG's core features, try the ",(0,t.jsx)(n.a,{href:"/quickstart",children:"quickstart"}),"."]})}),"\n",(0,t.jsxs)(n.p,{children:["The installer script installs ",(0,t.jsx)(n.code,{children:"uv"}),", Docker or Podman, Docker Compose, and OpenRAG.\nThen, it installs and runs OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with the installer script, you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["This installation method is best for testing OpenRAG by running it outside of a Python project.\nFor other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install",children:"Run the installer script"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a directory to store your OpenRAG configuration files and data, and then change to that directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Get and run the installer script:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://docs.openr.ag/files/run_openrag_with_prereqs.sh | bash\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The installer script installs OpenRAG with ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#running-tools",children:(0,t.jsx)(n.code,{children:"uvx"})})," in the directory where you run the script."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Wait while the installer script prepares your environment and installs OpenRAG.\nYou might be prompted to install certain dependencies if they aren't already present in your environment."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The entire process can take a few minutes.\nOnce the environment is ready, the OpenRAG TUI starts."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:r(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,t.jsxs)(n.p,{children:["Because the installer script uses ",(0,t.jsx)(n.code,{children:"uvx"}),", it creates a cached, ephemeral environment in your local ",(0,t.jsx)(n.code,{children:"uv"})," cache, and your OpenRAG configuration files and data are stored separately from the ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nClearing the cache doesn't delete your entire OpenRAG installation, only the temporary TUI environment.\nAfter clearing the cache, run ",(0,t.jsx)(n.code,{children:"uvx openrag"})," to ",(0,t.jsx)(n.a,{href:"/tui",children:"access the TUI"})," and continue with your preserved configuration and data."]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsx)(n.p,{children:"When you install OpenRAG with the installer script, you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(o.Ay,{}),"\n",(0,t.jsx)(h.Ay,{})]})}function j(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(e)}},5689:(e,n,r)=>{r.d(n,{A:()=>s});const s=r.p+"assets/images/OpenRAG_TUI_2025-09-10T13_04_11_757637-9441c53ba39162a88ac6c11cbeaed0e0.svg"},6149:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,s.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},7637:(e,n,r)=>{r.d(n,{Ay:()=>a,RM:()=>i});var s=r(4848),t=r(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,s.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,s.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,s.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,s.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,s.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,s.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,s.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,s.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,s.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},9179:(e,n,r)=>{r.d(n,{A:()=>i});r(6540);var s=r(7856),t=r(4848);function i({name:e,...n}){const r=s[e];return r?(0,t.jsx)(r,{...n}):null}},9365:(e,n,r)=>{r.d(n,{A:()=>o});r(6540);var s=r(4164);const t={tabItem:"tabItem_Ymn6"};var i=r(4848);function o({children:e,hidden:n,className:r}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.A)(t.tabItem,r),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/d0314b07.ebf2fdd5.js b/assets/js/d0314b07.ebf2fdd5.js
new file mode 100644
index 00000000..52e021bd
--- /dev/null
+++ b/assets/js/d0314b07.ebf2fdd5.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[5750],{887:(e,n,s)=>{s.d(n,{Ay:()=>h,RM:()=>c});var r=s(4848),t=s(8453),i=s(9179),o=s(1470),a=s(9365),l=s(3059);const c=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"application-onboarding",children:"Complete the application onboarding process"}),"\n",(0,r.jsxs)(n.p,{children:["The first time you start the OpenRAG application, you must complete the application onboarding process to select language and embedding models that are essential for OpenRAG features like the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Some of these variables, such as the embedding models, can be changed seamlessly after onboarding.\nOthers are immutable and require you to destroy and recreate the OpenRAG containers.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"/reference/configuration",children:"OpenRAG environment variables reference"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You can use different providers for your language model and embedding model, such as Anthropic for the language model and OpenAI for the embedding model.\nAdditionally, you can set multiple embedding models."}),"\n",(0,r.jsx)(n.p,{children:"You only need to complete onboarding for your preferred providers."}),"\n",(0,r.jsxs)(o.A,{groupId:"Provider",children:[(0,r.jsxs)(a.A,{value:"Anthropic",label:"Anthropic",default:!0,children:[(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Anthropic doesn't provide embedding models. If you select Anthropic for your language model, you must select a different provider for the embedding model."})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your Anthropic API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(a.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Use the values from your IBM watsonx deployment for the ",(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"})," fields."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"WATSONX_API_KEY"}),", ",(0,r.jsx)(n.code,{children:"WATSONX_API_URL"}),", or ",(0,r.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})," in your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),", these values can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credentials are valid and have access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})}),(0,r.jsxs)(a.A,{value:"Ollama",label:"Ollama",children:[(0,r.jsx)(n.p,{children:"Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.\nHowever, it requires additional setup because Ollama isn't included with OpenRAG.\nYou must deploy Ollama separately if you want to use Ollama as a model provider."}),(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(l.Ay,{})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Install Ollama locally or on a remote server"}),", or ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/cloud",children:"run models in Ollama Cloud"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"If you are running a remote server, it must be accessible from your OpenRAG deployment."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"In OpenRAG onboarding, connect to your Ollama server:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Local Ollama server"}),": Enter your Ollama server's base URL and port. The default Ollama server address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Ollama Cloud"}),": Because Ollama Cloud models run at the same address as a local Ollama server and automatically offload to Ollama's cloud service, you can use the same base URL and port as you would for a local Ollama server. The default address is ",(0,r.jsx)(n.code,{children:"http://localhost:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Remote server"}),": Enter your remote Ollama server's base URL and port, such as ",(0,r.jsx)(n.code,{children:"http://your-remote-server:11434"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the connection succeeds, OpenRAG populates the model lists with the server's available models."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"Language model and embedding model selections are independent.\nYou can use the same or different servers for each model."}),"\n",(0,r.jsx)(n.p,{children:"To use different providers for each model, you must configure both providers, and select the relevant model for each provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses the address and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the server address is valid, and that the selected model is running on the server.\nThen, click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})]}),(0,r.jsx)(a.A,{value:"OpenAI",label:"OpenAI (default)",children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Enter your OpenAI API key, or enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"})," to pull the key from your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you set ",(0,r.jsx)(n.code,{children:"OPENAI_API_KEY"})," in your OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file, this value can be populated automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.strong,{children:"Advanced settings"}),", select the language model that you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select a provider for embeddings, provide the required information, and then select the embedding model you want to use.\nFor information about another provider's credentials and settings, see the instructions for that provider."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Complete"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["After you configure the embedding model, OpenRAG uses your credentials and models to ingest some ",(0,r.jsx)(n.a,{href:"/knowledge#default-documents",children:"initial documents"}),". This tests the connection, and it allows you to ask OpenRAG about itself in the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})}),".\nIf there is a problem with the model configuration, an error occurs and you are redirected back to the application onboarding screen.\nVerify that the credential is valid and has access to the selected model, and then click ",(0,r.jsx)(n.strong,{children:"Complete"})," to retry ingestion."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue through the overview slides for a brief introduction to OpenRAG, or click ",(0,r.jsx)(i.A,{name:"ArrowRight","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Skip overview"}),".\nThe overview demonstrates some basic functionality that is covered in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"})," and in other parts of the OpenRAG documentation."]}),"\n"]}),"\n"]})})]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},927:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>i});var r=s(4848),t=s(8453);const i=[{value:"Next steps",id:"next-steps",level:2}];function o(e){const n={a:"a",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Try some of OpenRAG's core features in the ",(0,r.jsx)(n.a,{href:"/quickstart#chat-with-documents",children:"quickstart"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Learn how to ",(0,r.jsx)(n.a,{href:"/manage-services",children:"manage OpenRAG services"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/ingestion",children:"Upload documents"}),", and then use the ",(0,r.jsx)(n.a,{href:"/chat",children:(0,r.jsx)(n.strong,{children:"Chat"})})," to explore your data."]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1470:(e,n,s)=>{s.d(n,{A:()=>w});var r=s(6540),t=s(4164),i=s(7559),o=s(3104),a=s(6347),l=s(205),c=s(7485),d=s(1682),h=s(679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:s}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:s,default:r}})=>({value:e,label:n,attributes:s,default:r}))}(s);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,s])}function m({value:e,tabValues:n}){return n.some(n=>n.value===e)}function x({queryString:e=!1,groupId:n}){const s=(0,a.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(t),(0,r.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace({...s.location,search:n.toString()})},[t,s])]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,i=p(e),[o,a]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find(e=>e.default)??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i})),[c,d]=x({queryString:s,groupId:t}),[u,f]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Dv)(n);return[s,(0,r.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),j=(()=>{const e=c??u;return m({value:e,tabValues:i})?e:null})();(0,l.A)(()=>{j&&a(j)},[j]);return{selectedValue:o,selectValue:(0,r.useCallback)(e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),f(e)},[d,f,i]),tabValues:i}}var j=s(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(4848);function y({className:e,block:n,selectedValue:s,selectValue:r,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=a.indexOf(n),o=i[t].value;o!==s&&(l(n),r(o))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{a.push(e)},onKeyDown:d,onClick:c,...r,className:(0,t.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function A({lazy:e,children:n,selectedValue:s}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find(e=>e.props.value===s);return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function b(e){const n=f(e);return(0,v.jsxs)("div",{className:(0,t.A)(i.G.tabs.container,"tabs-container",g.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,j.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>d,RM:()=>l});var r=s(4848),t=s(8453),i=s(1470),o=s(9365),a=s(7637);const l=[...a.RM];function c(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["You can use either ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," or ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," to configure OpenRAG.\nThis choice determines how OpenRAG authenticates with your deployment's ",(0,r.jsx)(n.a,{href:"/knowledge",children:"OpenSearch instance"}),", and it controls user access to documents stored in your OpenSearch knowledge base:"]}),"\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["You must use ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," if you want to ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"use OAuth connectors to upload documents from cloud storage"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["If OpenRAG detects OAuth credentials during setup, it recommends ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the TUI."]}),"\n",(0,r.jsxs)(i.A,{groupId:"Setup method",children:[(0,r.jsx)(o.A,{value:"Basic setup",label:"Basic setup",default:!0,children:(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords and API key, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\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:["In the TUI, 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:["Enter administrator passwords for the OpenRAG OpenSearch and Langflow services, or click ",(0,r.jsx)(n.strong,{children:"Generate Passwords"})," to generate passwords automatically."]}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required."}),"\n",(0,r.jsxs)(n.p,{children:["The Langflow password is recommended but optional.\nIf the Langflow password is empty, the Langflow server starts without authentication enabled. For more information, see ",(0,r.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Optional: Enter your OpenAI API key, or leave this field empty to provide model provider credentials during the application onboarding process."}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing the key now or during the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a key now, it can be populated automatically during the application onboarding process if you select the OpenAI model provider, and then enable ",(0,r.jsx)(n.strong,{children:"Get API key from environment variable"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"OpenRAG's core functionality requires access to language and embedding models.\nBy default, OpenRAG uses OpenAI models.\nIf you aren't sure which models or providers to use, you must provide an OpenAI API key to use OpenRAG's default model configuration.\nIf you want to use a different model provider, you can leave this field empty."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use. These settings can be populated automatically if OpenRAG detects these credentials in an ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Amazon"}),": Provide your AWS Access Key ID and AWS Secret Access Key with access to your S3 instance. For more information, see the AWS documentation on ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"Configuring access to AWS applications"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Google"}),": Provide your Google OAuth Client ID and Google OAuth Client Secret. You can generate these in the ",(0,r.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),". For more information, see the ",(0,r.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client documentation"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Microsoft"}),": For the Microsoft OAuth Client ID and Microsoft OAuth Client Secret, provide ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/app-registration?view=odsp-graph-online",children:"Azure application registration credentials for SharePoint and OneDrive"}),". For more information, see the ",(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.p,{children:["You can ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"manage OAuth credentials"})," later, but it is recommended to configure them during initial set up."]}),"\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",(0,r.jsxs)(n.p,{children:["Your passwords, API key, and OAuth credentials, if provided, are stored in the ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf you modified any credentials that were pulled from an existing ",(0,r.jsx)(n.code,{children:".env"})," file, those values are updated in the ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Start All Services"})," to start the OpenRAG services that run in containers."]}),"\n",(0,r.jsx)(n.p,{children:"This process can take some time while OpenRAG pulls and runs the container images.\nIf all services start successfully, the TUI prints a confirmation message:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"Services started successfully\nCommand completed successfully\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Under ",(0,r.jsx)(n.a,{href:"/manage-services",children:(0,r.jsx)(n.strong,{children:"Native Services"})}),", click ",(0,r.jsx)(n.strong,{children:"Start"})," to start the Docling service."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Launch the OpenRAG application:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["From the TUI main menu, click ",(0,r.jsx)(n.strong,{children:"Open App"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In your browser, navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If you enabled OAuth connectors, you must sign in to your OAuth provider before being redirected to your OpenRAG instance."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If required, you can edit the following additional environment variables.\nOnly change these variables if your OpenRAG deployment has a non-default network configuration, such as a reverse proxy or custom domain."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"}),": Sets the base address to access the Langflow web interface. This is where users interact with flows in a browser."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),": Sets the base address for the following OpenRAG OAuth connector endpoints:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Amazon S3: Not applicable."}),"\n",(0,r.jsxs)(n.li,{children:["Google Drive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/google_drive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["OneDrive: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/onedrive/webhook"})]}),"\n",(0,r.jsxs)(n.li,{children:["SharePoint: ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/sharepoint/webhook"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3059:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.\nFor example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media."}),"\n",(0,r.jsx)(n.p,{children:"The OpenRAG team recommends the following models when using Ollama as your model provider:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Language models"}),": ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,r.jsx)(n.code,{children:"mistral-nemo:12b"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you choose ",(0,r.jsx)(n.code,{children:"gpt-oss:20b"}),", consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Embedding models"}),": ",(0,r.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,r.jsx)(n.code,{children:"nomic-embed-text:latest"})}),", ",(0,r.jsx)(n.code,{children:"mxbai-embed-large:latest"}),", or ",(0,r.jsx)(n.code,{children:"embeddinggemma:latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.\nYou can submit an ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/issues",children:"OpenRAG GitHub issue"})," to request support for specific models."]})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},3351:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>o});var r=s(4848),t=s(8453),i=s(3059);const o=[...i.RM];function a(e){const n={a:"a",admonition:"admonition",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Gather the credentials and connection details for your preferred model providers.\nYou must have access to at least one language model and one embedding model.\nIf a provider offers both types, you can use the same provider for both models.\nIf a provider offers only one type, you must select two providers."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OpenAI"}),": Create an ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Anthropic"}),": Create an ",(0,r.jsx)(n.a,{href:"https://www.anthropic.com/docs/api/reference",children:"Anthropic API key"}),".\nAnthropic provides language models only; you must select an additional provider for embeddings."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"}),": Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Ollama"}),": Deploy an ",(0,r.jsx)(n.a,{href:"https://docs.ollama.com/",children:"Ollama instance and models"})," locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(i.Ay,{})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{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"]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},4042:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(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.13 or later."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>j,frontMatter:()=>u,metadata:()=>r,toc:()=>x});const r=JSON.parse('{"id":"get-started/install","title":"Install OpenRAG with the automatic installer script","description":"To quickly install and test OpenRAG\'s core features, try the quickstart.","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 the automatic installer script","slug":"/install"},"sidebar":"tutorialSidebar","previous":{"title":"Select an installation method","permalink":"/install-options"},"next":{"title":"Install OpenRAG with uv","permalink":"/install-uv"}}');var t=s(4848),i=s(8453),o=(s(1470),s(9365),s(887)),a=s(2061),l=s(3351),c=s(6149),d=s(4042),h=s(927);s(7637),s(3059);const u={title:"Install OpenRAG with the automatic installer script",slug:"/install"},p=void 0,m={},x=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...d.RM,...l.RM,{value:"Run the installer script",id:"install",level:2},{value:"Set up OpenRAG with the TUI",id:"setup",level:2},...a.RM,...o.RM,...h.RM];function f(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To quickly install and test OpenRAG's core features, try the ",(0,t.jsx)(n.a,{href:"/quickstart",children:"quickstart"}),"."]})}),"\n",(0,t.jsxs)(n.p,{children:["The installer script installs ",(0,t.jsx)(n.code,{children:"uv"}),", Docker or Podman, Docker Compose, and OpenRAG.\nThen, it installs and runs OpenRAG with ",(0,t.jsx)(n.code,{children:"uvx"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["When you install OpenRAG with the installer script, you will use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,t.jsxs)(n.p,{children:["This installation method is best for testing OpenRAG by running it outside of a Python project.\nFor other installation methods, see ",(0,t.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(l.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"install",children:"Run the installer script"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a directory to store your OpenRAG configuration files and data, and then change to that directory:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Get and run the installer script:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://docs.openr.ag/files/run_openrag_with_prereqs.sh | bash\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The installer script installs OpenRAG with ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#running-tools",children:(0,t.jsx)(n.code,{children:"uvx"})})," in the directory where you run the script."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Wait while the installer script prepares your environment and installs OpenRAG.\nYou might be prompted to install certain dependencies if they aren't already present in your environment."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The entire process can take a few minutes.\nOnce the environment is ready, the OpenRAG TUI starts."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"OpenRAG TUI Interface",src:s(5689).A+"",width:"1995",height:"1099"})}),"\n",(0,t.jsxs)(n.p,{children:["Because the installer script uses ",(0,t.jsx)(n.code,{children:"uvx"}),", it creates a cached, ephemeral environment in your local ",(0,t.jsx)(n.code,{children:"uv"})," cache, and your OpenRAG configuration files and data are stored separately from the ",(0,t.jsx)(n.code,{children:"uv"})," cache.\nClearing the cache doesn't delete your entire OpenRAG installation, only the temporary TUI environment.\nAfter clearing the cache, run ",(0,t.jsx)(n.code,{children:"uvx openrag"})," to ",(0,t.jsx)(n.a,{href:"/tui",children:"access the TUI"})," and continue with your preserved configuration and data."]}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,t.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Set up OpenRAG with the TUI"}),"\n",(0,t.jsx)(n.p,{children:"When you install OpenRAG with the installer script, you manage the OpenRAG services with the TUI.\nThe TUI guides you through the initial configuration process before you start the OpenRAG services."}),"\n",(0,t.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,t.jsx)(n.code,{children:".env"})," file in this directory, then the TUI can populate those values automatically during setup and onboarding."]}),"\n",(0,t.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,t.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,t.jsx)(a.Ay,{}),"\n",(0,t.jsx)(o.Ay,{}),"\n",(0,t.jsx)(h.Ay,{})]})}function j(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(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"},6149:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["For Microsoft Windows, you must use the Windows Subsystem for Linux (WSL).\nSee ",(0,r.jsx)(n.a,{href:"/install-windows",children:"Install OpenRAG on Windows"})," before proceeding."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function o(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses one anonymous JWT token for OpenSearch authentication.\nThere is no differentiation between users; all users that access your OpenRAG instance can access all documents uploaded to your knowledge base."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,r.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,r.jsx)(n.p,{children:"This mode uses a unique JWT token for each OpenRAG user, and each document is tagged with user ownership.\nDocuments are filtered by user owner; users see only the documents that they uploaded or have access to through their cloud storage accounts."}),"\n",(0,r.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,r.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>i});s(6540);var r=s(7856),t=s(4848);function i({name:e,...n}){const s=r[e];return s?(0,t.jsx)(s,{...n}):null}},9365:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var r=s(4164);const t={tabItem:"tabItem_Ymn6"};var i=s(4848);function o({children:e,hidden:n,className:s}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,s),hidden:n,children:e})}}}]);
\ No newline at end of file
diff --git a/assets/js/eb5b356a.d35eda0a.js b/assets/js/eb5b356a.d35eda0a.js
new file mode 100644
index 00000000..8d9403b3
--- /dev/null
+++ b/assets/js/eb5b356a.d35eda0a.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[2668],{3059:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>r});var o=s(4848),i=s(8453);const r=[];function t(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.\nFor example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media."}),"\n",(0,o.jsx)(n.p,{children:"The OpenRAG team recommends the following models when using Ollama as your model provider:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Language models"}),": ",(0,o.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,o.jsx)(n.code,{children:"mistral-nemo:12b"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If you choose ",(0,o.jsx)(n.code,{children:"gpt-oss:20b"}),", consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Embedding models"}),": ",(0,o.jsx)(n.a,{href:"https://ollama.com/library/nomic-embed-text",children:(0,o.jsx)(n.code,{children:"nomic-embed-text:latest"})}),", ",(0,o.jsx)(n.code,{children:"mxbai-embed-large:latest"}),", or ",(0,o.jsx)(n.code,{children:"embeddinggemma:latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.\nYou can submit an ",(0,o.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/issues",children:"OpenRAG GitHub issue"})," to request support for specific models."]})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(t,{...e})}):t(e)}},5014:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"support/troubleshoot","title":"Troubleshoot OpenRAG","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":"Troubleshoot OpenRAG","slug":"/support/troubleshoot"},"sidebar":"tutorialSidebar","previous":{"title":"Environment variables","permalink":"/reference/configuration"}}');var i=s(4848),r=s(8453),t=s(3059);const l={title:"Troubleshoot OpenRAG",slug:"/support/troubleshoot"},a=void 0,c={},d=[{value:"OpenSearch fails to start",id:"opensearch-fails-to-start",level:2},{value:"OpenRAG fails to start from the TUI with operation not supported",id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported",level:2},{value:"OpenRAG installation fails with unable to get local issuer certificate",id:"openrag-installation-fails-with-unable-to-get-local-issuer-certificate",level:2},{value:"Langflow connection issues",id:"langflow-connection-issues",level:2},{value:"Container out of memory errors",id:"container-out-of-memory-errors",level:2},{value:"Memory issue with Podman on macOS",id:"memory-issue-with-podman-on-macos",level:2},{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:"Upgrade fails due to Langflow container already exists",id:"langflow-container-already-exists-during-upgrade",level:2},{value:"Document ingestion or similarity search issues",id:"document-ingestion-or-similarity-search-issues",level:2},{value:"Ollama model issues",id:"ollama-model-issues",level:2},...t.RM];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG."}),"\n",(0,i.jsx)(n.h2,{id:"opensearch-fails-to-start",children:"OpenSearch fails to start"}),"\n",(0,i.jsxs)(n.p,{children:["Check that the value of the ",(0,i.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," ",(0,i.jsx)(n.a,{href:"/reference/configuration",children:"environment variable"})," meets the ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/security/configuration/demo-configuration/#setting-up-a-custom-admin-password",children:"OpenSearch password complexity requirements"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you need to change the password, you must ",(0,i.jsx)(n.a,{href:"/manage-services",children:"reset the OpenRAG services"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported",children:"OpenRAG fails to start from the TUI with operation not supported"}),"\n",(0,i.jsxs)(n.p,{children:["This error occurs when starting OpenRAG with the TUI in ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The error occurs because OpenRAG is running within a WSL environment, so ",(0,i.jsx)(n.code,{children:"webbrowser.open()"})," can't launch a browser automatically."]}),"\n",(0,i.jsxs)(n.p,{children:["To access the OpenRAG application, open a web browser and enter ",(0,i.jsx)(n.code,{children:"http://localhost:3000"})," in the address bar."]}),"\n",(0,i.jsx)(n.h2,{id:"openrag-installation-fails-with-unable-to-get-local-issuer-certificate",children:"OpenRAG installation fails with unable to get local issuer certificate"}),"\n",(0,i.jsxs)(n.p,{children:["If you are installing OpenRAG on macOS, and the installation fails with ",(0,i.jsx)(n.code,{children:"unable to get local issuer certificate"}),", run the following command, and then retry the installation:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'open "/Applications/Python VERSION/Install Certificates.command"\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Replace ",(0,i.jsx)(n.code,{children:"VERSION"})," with your installed Python version, such as ",(0,i.jsx)(n.code,{children:"3.13"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"langflow-connection-issues",children:"Langflow connection issues"}),"\n",(0,i.jsxs)(n.p,{children:["Verify that the value of the ",(0,i.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," environment variable is correct.\nFor more information about this variable and how this variable controls Langflow access, see ",(0,i.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"container-out-of-memory-errors",children:"Container out of memory errors"}),"\n",(0,i.jsxs)(n.p,{children:["Increase Docker memory allocation or use ",(0,i.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,i.jsx)(n.h2,{id:"memory-issue-with-podman-on-macos",children:"Memory issue with Podman on macOS"}),"\n",(0,i.jsx)(n.p,{children:"If you're using Podman on macOS, you might 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,i.jsx)(n.pre,{children:(0,i.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,i.jsx)(n.h2,{id:"port-conflicts",children:"Port conflicts"}),"\n",(0,i.jsxs)(n.p,{children:["With the default ",(0,i.jsx)(n.a,{href:"/reference/configuration",children:"environment variable"})," values, OpenRAG requires the following ports to be available on the host machine:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"3000: Langflow application"}),"\n",(0,i.jsx)(n.li,{children:"5001: Docling local ingestion service"}),"\n",(0,i.jsx)(n.li,{children:"5601: OpenSearch Dashboards"}),"\n",(0,i.jsx)(n.li,{children:"7860: Docling UI"}),"\n",(0,i.jsx)(n.li,{children:"8000: Docling API"}),"\n",(0,i.jsx)(n.li,{children:"9200: OpenSearch service"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"ocr-ingestion-fails-easyocr-not-installed",children:"OCR ingestion fails (easyocr not installed)"}),"\n",(0,i.jsxs)(n.p,{children:["Docling ingestion can fail with an OCR-related error that mentions ",(0,i.jsx)(n.code,{children:"easyocr"})," is missing.\nThis is likely due to a stale ",(0,i.jsx)(n.code,{children:"uv"})," cache when you ",(0,i.jsxs)(n.a,{href:"/install-uvx",children:["install OpenRAG with ",(0,i.jsx)(n.code,{children:"uvx"})]}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["When you invoke OpenRAG with ",(0,i.jsx)(n.code,{children:"uvx openrag"}),", ",(0,i.jsx)(n.code,{children:"uvx"})," creates a cached, ephemeral environment that doesn't modify your project.\nThe location and path of this cache depends on your operating system.\nFor example, on macOS, this is typically a user cache directory, such as ",(0,i.jsx)(n.code,{children:"~/.cache/uv"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"This cache can become stale, producing errors like missing dependencies."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/tui",children:"Exit the TUI"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Clear the ",(0,i.jsx)(n.code,{children:"uv"})," cache:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv cache clean\n"})}),"\n",(0,i.jsx)(n.p,{children:"To clear the OpenRAG cache only, run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uv cache clean openrag\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Invoke OpenRAG to restart the TUI:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Open App"}),", and then retry document ingestion."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If you install OpenRAG with ",(0,i.jsx)(n.code,{children:"uv"}),", dependencies are synced directly from your ",(0,i.jsx)(n.code,{children:"pyproject.toml"})," file.\nThis should automatically install ",(0,i.jsx)(n.code,{children:"easyocr"})," because ",(0,i.jsx)(n.code,{children:"easyocr"})," is included as a dependency in OpenRAG's ",(0,i.jsx)(n.code,{children:"pyproject.toml"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you don't need OCR, you can disable OCR-based processing in your ",(0,i.jsx)(n.a,{href:"/knowledge#knowledge-ingestion-settings",children:"ingestion settings"})," to avoid requiring ",(0,i.jsx)(n.code,{children:"easyocr"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"langflow-container-already-exists-during-upgrade",children:"Upgrade fails due to Langflow container already exists"}),"\n",(0,i.jsxs)(n.p,{children:["If you encounter a ",(0,i.jsx)(n.code,{children:"langflow container already exists"})," error when upgrading OpenRAG, this typically means you upgraded OpenRAG with ",(0,i.jsx)(n.code,{children:"uv"}),", but you didn't remove or upgrade containers from a previous installation."]}),"\n",(0,i.jsx)(n.p,{children:"To resolve this issue, do the following:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Remove only the Langflow container:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Stop the Langflow container:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker stop langflow\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman stop langflow\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Remove the Langflow container:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker rm langflow --force\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman rm langflow --force\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Retry the ",(0,i.jsx)(n.a,{href:"/upgrade",children:"upgrade"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If reinstalling the Langflow container doesn't resolve the issue, then you must ",(0,i.jsx)(n.a,{href:"/manage-services",children:"reset all containers"})," or ",(0,i.jsx)(n.a,{href:"/reinstall",children:"reinstall OpenRAG"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Retry the ",(0,i.jsx)(n.a,{href:"/upgrade",children:"upgrade"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"If no updates are available after reinstalling OpenRAG, then you reinstalled at the latest version, and your deployment is up to date."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"document-ingestion-or-similarity-search-issues",children:"Document ingestion or similarity search issues"}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/ingestion#troubleshoot-ingestion",children:"Troubleshoot ingestion"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"ollama-model-issues",children:"Ollama model issues"}),"\n",(0,i.jsx)(t.Ay,{})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var o=s(6540);const i={},r=o.createContext(i);function t(e){const n=o.useContext(r);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/eb5b356a.fdb5ebeb.js b/assets/js/eb5b356a.fdb5ebeb.js
deleted file mode 100644
index d02b6fe1..00000000
--- a/assets/js/eb5b356a.fdb5ebeb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[2668],{5014:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>t,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"support/troubleshoot","title":"Troubleshoot OpenRAG","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":"Troubleshoot OpenRAG","slug":"/support/troubleshoot"},"sidebar":"tutorialSidebar","previous":{"title":"Environment variables","permalink":"/reference/configuration"}}');var o=s(4848),r=s(8453);const t={title:"Troubleshoot OpenRAG",slug:"/support/troubleshoot"},a=void 0,l={},c=[{value:"OpenSearch fails to start",id:"opensearch-fails-to-start",level:2},{value:"OpenRAG fails to start from the TUI with operation not supported",id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported",level:2},{value:"OpenRAG installation fails with unable to get local issuer certificate",id:"openrag-installation-fails-with-unable-to-get-local-issuer-certificate",level:2},{value:"Langflow connection issues",id:"langflow-connection-issues",level:2},{value:"Container out of memory errors",id:"container-out-of-memory-errors",level:2},{value:"Memory issue with Podman on macOS",id:"memory-issue-with-podman-on-macos",level:2},{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:"Upgrade fails due to Langflow container already exists",id:"langflow-container-already-exists-during-upgrade",level:2},{value:"Document ingestion or similarity search issues",id:"document-ingestion-or-similarity-search-issues",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"This page provides troubleshooting advice for issues you might encounter when using OpenRAG or contributing to OpenRAG."}),"\n",(0,o.jsx)(n.h2,{id:"opensearch-fails-to-start",children:"OpenSearch fails to start"}),"\n",(0,o.jsxs)(n.p,{children:["Check that the value of the ",(0,o.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})," ",(0,o.jsx)(n.a,{href:"/reference/configuration",children:"environment variable"})," meets the ",(0,o.jsx)(n.a,{href:"https://docs.opensearch.org/latest/security/configuration/demo-configuration/#setting-up-a-custom-admin-password",children:"OpenSearch password complexity requirements"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If you need to change the password, you must ",(0,o.jsx)(n.a,{href:"/manage-services",children:"reset the OpenRAG services"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"openrag-fails-to-start-from-the-tui-with-operation-not-supported",children:"OpenRAG fails to start from the TUI with operation not supported"}),"\n",(0,o.jsxs)(n.p,{children:["This error occurs when starting OpenRAG with the TUI in ",(0,o.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL (Windows Subsystem for Linux)"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The error occurs because OpenRAG is running within a WSL environment, so ",(0,o.jsx)(n.code,{children:"webbrowser.open()"})," can't launch a browser automatically."]}),"\n",(0,o.jsxs)(n.p,{children:["To access the OpenRAG application, open a web browser and enter ",(0,o.jsx)(n.code,{children:"http://localhost:3000"})," in the address bar."]}),"\n",(0,o.jsx)(n.h2,{id:"openrag-installation-fails-with-unable-to-get-local-issuer-certificate",children:"OpenRAG installation fails with unable to get local issuer certificate"}),"\n",(0,o.jsxs)(n.p,{children:["If you are installing OpenRAG on macOS, and the installation fails with ",(0,o.jsx)(n.code,{children:"unable to get local issuer certificate"}),", run the following command, and then retry the installation:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'open "/Applications/Python VERSION/Install Certificates.command"\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Replace ",(0,o.jsx)(n.code,{children:"VERSION"})," with your installed Python version, such as ",(0,o.jsx)(n.code,{children:"3.13"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"langflow-connection-issues",children:"Langflow connection issues"}),"\n",(0,o.jsxs)(n.p,{children:["Verify that the value of the ",(0,o.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})," environment variable is correct.\nFor more information about this variable and how this variable controls Langflow access, see ",(0,o.jsx)(n.a,{href:"/reference/configuration#langflow-settings",children:"Langflow settings"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"container-out-of-memory-errors",children:"Container out of memory errors"}),"\n",(0,o.jsxs)(n.p,{children:["Increase Docker memory allocation or use ",(0,o.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,o.jsx)(n.h2,{id:"memory-issue-with-podman-on-macos",children:"Memory issue with Podman on macOS"}),"\n",(0,o.jsx)(n.p,{children:"If you're using Podman on macOS, you might 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,o.jsx)(n.pre,{children:(0,o.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,o.jsx)(n.h2,{id:"port-conflicts",children:"Port conflicts"}),"\n",(0,o.jsxs)(n.p,{children:["With the default ",(0,o.jsx)(n.a,{href:"/reference/configuration",children:"environment variable"})," values, OpenRAG requires the following ports to be available on the host machine:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"3000: Langflow application"}),"\n",(0,o.jsx)(n.li,{children:"5001: Docling local ingestion service"}),"\n",(0,o.jsx)(n.li,{children:"5601: OpenSearch Dashboards"}),"\n",(0,o.jsx)(n.li,{children:"7860: Docling UI"}),"\n",(0,o.jsx)(n.li,{children:"8000: Docling API"}),"\n",(0,o.jsx)(n.li,{children:"9200: OpenSearch service"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"ocr-ingestion-fails-easyocr-not-installed",children:"OCR ingestion fails (easyocr not installed)"}),"\n",(0,o.jsxs)(n.p,{children:["Docling ingestion can fail with an OCR-related error that mentions ",(0,o.jsx)(n.code,{children:"easyocr"})," is missing.\nThis is likely due to a stale ",(0,o.jsx)(n.code,{children:"uv"})," cache when you ",(0,o.jsxs)(n.a,{href:"/install-uvx",children:["install OpenRAG with ",(0,o.jsx)(n.code,{children:"uvx"})]}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["When you invoke OpenRAG with ",(0,o.jsx)(n.code,{children:"uvx openrag"}),", ",(0,o.jsx)(n.code,{children:"uvx"})," creates a cached, ephemeral environment that doesn't modify your project.\nThe location and path of this cache depends on your operating system.\nFor example, on macOS, this is typically a user cache directory, such as ",(0,o.jsx)(n.code,{children:"~/.cache/uv"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"This cache can become stale, producing errors like missing dependencies."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/tui",children:"Exit the TUI"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Clear the ",(0,o.jsx)(n.code,{children:"uv"})," cache:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"uv cache clean\n"})}),"\n",(0,o.jsx)(n.p,{children:"To clear the OpenRAG cache only, run:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"uv cache clean openrag\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Invoke OpenRAG to restart the TUI:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"uvx openrag\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.strong,{children:"Open App"}),", and then retry document ingestion."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["If you install OpenRAG with ",(0,o.jsx)(n.code,{children:"uv"}),", dependencies are synced directly from your ",(0,o.jsx)(n.code,{children:"pyproject.toml"})," file.\nThis should automatically install ",(0,o.jsx)(n.code,{children:"easyocr"})," because ",(0,o.jsx)(n.code,{children:"easyocr"})," is included as a dependency in OpenRAG's ",(0,o.jsx)(n.code,{children:"pyproject.toml"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If you don't need OCR, you can disable OCR-based processing in your ",(0,o.jsx)(n.a,{href:"/knowledge#knowledge-ingestion-settings",children:"ingestion settings"})," to avoid requiring ",(0,o.jsx)(n.code,{children:"easyocr"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"langflow-container-already-exists-during-upgrade",children:"Upgrade fails due to Langflow container already exists"}),"\n",(0,o.jsxs)(n.p,{children:["If you encounter a ",(0,o.jsx)(n.code,{children:"langflow container already exists"})," error when upgrading OpenRAG, this typically means you upgraded OpenRAG with ",(0,o.jsx)(n.code,{children:"uv"}),", but you didn't remove or upgrade containers from a previous installation."]}),"\n",(0,o.jsx)(n.p,{children:"To resolve this issue, do the following:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Remove only the Langflow container:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Stop the Langflow container:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker stop langflow\n"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman stop langflow\n"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Remove the Langflow container:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker rm langflow --force\n"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman rm langflow --force\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Retry the ",(0,o.jsx)(n.a,{href:"/upgrade",children:"upgrade"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["If reinstalling the Langflow container doesn't resolve the issue, then you must ",(0,o.jsx)(n.a,{href:"/manage-services",children:"reset all containers"})," or ",(0,o.jsx)(n.a,{href:"/reinstall",children:"reinstall OpenRAG"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Retry the ",(0,o.jsx)(n.a,{href:"/upgrade",children:"upgrade"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"If no updates are available after reinstalling OpenRAG, then you reinstalled at the latest version, and your deployment is up to date."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"document-ingestion-or-similarity-search-issues",children:"Document ingestion or similarity search issues"}),"\n",(0,o.jsxs)(n.p,{children:["See ",(0,o.jsx)(n.a,{href:"/ingestion#troubleshoot-ingestion",children:"Troubleshoot ingestion"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var i=s(6540);const o={},r=i.createContext(o);function t(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.732f6967.js b/assets/js/runtime~main.28b5001d.js
similarity index 93%
rename from assets/js/runtime~main.732f6967.js
rename to assets/js/runtime~main.28b5001d.js
index 42febbd0..f31d74ed 100644
--- a/assets/js/runtime~main.732f6967.js
+++ b/assets/js/runtime~main.28b5001d.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,r,t,f,c={},o={};function d(e){var a=o[e];if(void 0!==a)return a.exports;var r=o[e]={exports:{}};return c[e].call(r.exports,r,r.exports,d),r.exports}d.m=c,e=[],d.O=(a,r,t,f)=>{if(!r){var c=1/0;for(i=0;i=f)&&Object.keys(d.O).every(e=>d.O[e](r[b]))?r.splice(b--,1):(o=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[r,t,f]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var c={};a=a||[null,r({}),r([]),r(r)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~a.indexOf(o);o=r(o))Object.getOwnPropertyNames(o).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,d.d(f,c),f},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((a,r)=>(d.f[r](e,a),a),[])),d.u=e=>"assets/js/"+({98:"af920ffe",571:"0ba6a408",961:"21afe7ac",1567:"22dd74f7",2272:"749371cc",2668:"eb5b356a",3207:"27b4a875",5490:"71478a5d",5668:"c5b64a02",5742:"aba21aa0",5750:"d0314b07",6152:"52896773",6190:"7b5e550f",6235:"915a24fd",6919:"ca2c3c0c",6976:"4ba45368",7098:"a7bd4aaa",8186:"03ef5215",8401:"17896441",8615:"ae242f53",8617:"441f609b",9026:"c8078f0a",9048:"a94703ab",9172:"e633a5ea",9532:"33362219",9647:"5e95c892"}[e]||e)+"."+{98:"492f9e55",165:"7b1d067d",291:"1b64972f",571:"efa6fc46",617:"e8fa27b8",961:"b1bb0884",1e3:"f9af7a41",1203:"b618bb61",1567:"7a0edff6",1741:"b927934f",1746:"1ce4b99b",2130:"09232a19",2237:"70c48bab",2272:"3a627799",2279:"44341cb1",2291:"2753844f",2325:"7c4239a7",2334:"6d98e48e",2492:"e6c78669",2668:"fdb5ebeb",2821:"7e574346",3207:"a11e6996",3490:"026802f4",3624:"a9a49a51",3815:"f87fc96a",4218:"0662e556",4250:"77e8e6c6",4616:"0d0b0873",4802:"a8b2857c",4981:"61cf4b0a",5480:"23265b76",5490:"6bdf311d",5668:"52bf4eef",5742:"2f625fe1",5750:"9418ca19",5901:"f6ccb00b",5955:"14464ff3",5996:"b2d1663e",6152:"a3757d4b",6190:"a397b62a",6235:"fd7e64ec",6241:"a1fa513c",6319:"9020eb44",6366:"0c77f825",6567:"08800141",6919:"ca722922",6976:"706e6a4d",6992:"eb4cc2ed",7098:"9fea9356",7465:"7e0b8008",7592:"d6165eff",7873:"083fcc2e",7928:"5f633e47",8142:"5edfc34d",8186:"7da8ea5b",8249:"4f81048e",8401:"afd63cb1",8565:"6a562290",8615:"33b6f886",8617:"071db081",8731:"4bc22343",8756:"74d5516d",9026:"4baa8196",9032:"f4369ef2",9048:"fa9eaf65",9172:"88a60d4e",9412:"ca1dda85",9510:"81e2df6a",9532:"9fafa665",9647:"d28d5273"}[e]+".js",d.miniCssF=e=>{},d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},f="openrag-docs:",d.l=(e,a,r,c)=>{if(t[e])t[e].push(a);else{var o,b;if(void 0!==r)for(var n=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(s);var f=t[e];if(delete t[e],o.parentNode&&o.parentNode.removeChild(o),f&&f.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),b&&document.head.appendChild(o)}},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",52896773:"6152",af920ffe:"98","0ba6a408":"571","21afe7ac":"961","22dd74f7":"1567","749371cc":"2272",eb5b356a:"2668","27b4a875":"3207","71478a5d":"5490",c5b64a02:"5668",aba21aa0:"5742",d0314b07:"5750","7b5e550f":"6190","915a24fd":"6235",ca2c3c0c:"6919","4ba45368":"6976",a7bd4aaa:"7098","03ef5215":"8186",ae242f53:"8615","441f609b":"8617",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,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise((r,f)=>t=e[a]=[r,f]);r.push(t[2]=f);var c=d.p+d.u(a),o=new Error;d.l(c,r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var f=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;o.message="Loading chunk "+a+" failed.\n("+f+": "+c+")",o.name="ChunkLoadError",o.type=f,o.request=c,t[1](o)}},"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,f,[c,o,b]=r,n=0;if(c.some(a=>0!==e[a])){for(t in o)d.o(o,t)&&(d.m[t]=o[t]);if(b)var i=b(d)}for(a&&a(r);n{"use strict";var e,a,r,t,f,c={},o={};function d(e){var a=o[e];if(void 0!==a)return a.exports;var r=o[e]={exports:{}};return c[e].call(r.exports,r,r.exports,d),r.exports}d.m=c,e=[],d.O=(a,r,t,f)=>{if(!r){var c=1/0;for(i=0;i=f)&&Object.keys(d.O).every(e=>d.O[e](r[b]))?r.splice(b--,1):(o=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[r,t,f]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var c={};a=a||[null,r({}),r([]),r(r)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~a.indexOf(o);o=r(o))Object.getOwnPropertyNames(o).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,d.d(f,c),f},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((a,r)=>(d.f[r](e,a),a),[])),d.u=e=>"assets/js/"+({98:"af920ffe",571:"0ba6a408",961:"21afe7ac",1567:"22dd74f7",2272:"749371cc",2668:"eb5b356a",3207:"27b4a875",5490:"71478a5d",5668:"c5b64a02",5742:"aba21aa0",5750:"d0314b07",6152:"52896773",6190:"7b5e550f",6235:"915a24fd",6919:"ca2c3c0c",6976:"4ba45368",7098:"a7bd4aaa",8186:"03ef5215",8401:"17896441",8615:"ae242f53",8617:"441f609b",9026:"c8078f0a",9048:"a94703ab",9172:"e633a5ea",9532:"33362219",9647:"5e95c892"}[e]||e)+"."+{98:"492f9e55",165:"7b1d067d",291:"1b64972f",571:"efa6fc46",617:"e8fa27b8",961:"b1bb0884",1e3:"f9af7a41",1203:"b618bb61",1567:"7a0edff6",1741:"b927934f",1746:"1ce4b99b",2130:"09232a19",2237:"70c48bab",2272:"774b6a0c",2279:"44341cb1",2291:"2753844f",2325:"7c4239a7",2334:"6d98e48e",2492:"e6c78669",2668:"d35eda0a",2821:"7e574346",3207:"a11e6996",3490:"026802f4",3624:"a9a49a51",3815:"f87fc96a",4218:"0662e556",4250:"77e8e6c6",4616:"0d0b0873",4802:"a8b2857c",4981:"61cf4b0a",5480:"23265b76",5490:"6bdf311d",5668:"52bf4eef",5742:"2f625fe1",5750:"ebf2fdd5",5901:"f6ccb00b",5955:"14464ff3",5996:"b2d1663e",6152:"a3757d4b",6190:"a397b62a",6235:"fd7e64ec",6241:"a1fa513c",6319:"9020eb44",6366:"0c77f825",6567:"08800141",6919:"ca722922",6976:"1fce6090",6992:"eb4cc2ed",7098:"9fea9356",7465:"7e0b8008",7592:"d6165eff",7873:"083fcc2e",7928:"5f633e47",8142:"5edfc34d",8186:"7da8ea5b",8249:"4f81048e",8401:"afd63cb1",8565:"6a562290",8615:"33b6f886",8617:"ae58055a",8731:"4bc22343",8756:"74d5516d",9026:"4baa8196",9032:"f4369ef2",9048:"fa9eaf65",9172:"88a60d4e",9412:"ca1dda85",9510:"81e2df6a",9532:"9fafa665",9647:"d28d5273"}[e]+".js",d.miniCssF=e=>{},d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},f="openrag-docs:",d.l=(e,a,r,c)=>{if(t[e])t[e].push(a);else{var o,b;if(void 0!==r)for(var n=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(s);var f=t[e];if(delete t[e],o.parentNode&&o.parentNode.removeChild(o),f&&f.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),b&&document.head.appendChild(o)}},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",52896773:"6152",af920ffe:"98","0ba6a408":"571","21afe7ac":"961","22dd74f7":"1567","749371cc":"2272",eb5b356a:"2668","27b4a875":"3207","71478a5d":"5490",c5b64a02:"5668",aba21aa0:"5742",d0314b07:"5750","7b5e550f":"6190","915a24fd":"6235",ca2c3c0c:"6919","4ba45368":"6976",a7bd4aaa:"7098","03ef5215":"8186",ae242f53:"8615","441f609b":"8617",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,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise((r,f)=>t=e[a]=[r,f]);r.push(t[2]=f);var c=d.p+d.u(a),o=new Error;d.l(c,r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var f=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;o.message="Loading chunk "+a+" failed.\n("+f+": "+c+")",o.name="ChunkLoadError",o.type=f,o.request=c,t[1](o)}},"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,f,[c,o,b]=r,n=0;if(c.some(a=>0!==e[a])){for(t in o)d.o(o,t)&&(d.m[t]=o[t]);if(b)var i=b(d)}for(a&&a(r);nChat in OpenRAG | OpenRAG
-
+
diff --git a/docker/index.html b/docker/index.html
index 892e76d2..926e9adb 100644
--- a/docker/index.html
+++ b/docker/index.html
@@ -4,7 +4,7 @@
Deploy OpenRAG with self-managed services | OpenRAG
-
+
@@ -40,11 +40,33 @@ You must have access to at least one language model and one embedding model.
If a provider offers both types, you can use the same provider for both models.
If a provider offers only one type, you must select two providers.
Anthropic: Create an Anthropic API key.
-Anthropic provides language models only; you must select an additional provider for embeddings.
-
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
-
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use.
Anthropic: Create an Anthropic API key.
+Anthropic provides language models only; you must select an additional provider for embeddings.
+
+
+
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
+
+
+
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use.
+
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
+
@@ -213,9 +235,22 @@ Verify that the credentials are valid and have access to the selected model, and
Continue through the overview slides for a brief introduction to OpenRAG, or click Skip overview.
The overview demonstrates some basic functionality that is covered in the quickstart and in other parts of the OpenRAG documentation.
-
info
Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider.
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.
-The recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally.
The OpenRAG team recommends the OpenAI gpt-oss:20b lanuage model and the nomic-embed-text embedding model.
-However, gpt-oss:20b uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine.
+
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.
+However, it requires additional setup because Ollama isn't included with OpenRAG.
+You must deploy Ollama separately if you want to use Ollama as a model provider.
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
If you are running a remote server, it must be accessible from your OpenRAG deployment.
diff --git a/index.html b/index.html
index 4bbbc1f4..a390764f 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 721ec9b7..6b98c63f 100644
--- a/ingestion/index.html
+++ b/ingestion/index.html
@@ -4,7 +4,7 @@
Ingest knowledge | OpenRAG
-
+
diff --git a/install-options/index.html b/install-options/index.html
index 02deaf98..8659096b 100644
--- a/install-options/index.html
+++ b/install-options/index.html
@@ -4,7 +4,7 @@
Select an installation method | OpenRAG
-
+
diff --git a/install-uv/index.html b/install-uv/index.html
index a1695d23..d96d9312 100644
--- a/install-uv/index.html
+++ b/install-uv/index.html
@@ -4,7 +4,7 @@
Install OpenRAG in a Python project with uv | OpenRAG
-
+
@@ -41,11 +41,33 @@ You must have access to at least one language model and one embedding model.
If a provider offers both types, you can use the same provider for both models.
If a provider offers only one type, you must select two providers.
Anthropic: Create an Anthropic API key.
-Anthropic provides language models only; you must select an additional provider for embeddings.
-
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
-
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use.
Anthropic: Create an Anthropic API key.
+Anthropic provides language models only; you must select an additional provider for embeddings.
+
+
+
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
+
+
+
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use.
+
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
+
@@ -319,9 +341,22 @@ Verify that the credentials are valid and have access to the selected model, and
Continue through the overview slides for a brief introduction to OpenRAG, or click Skip overview.
The overview demonstrates some basic functionality that is covered in the quickstart and in other parts of the OpenRAG documentation.
-
info
Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider.
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.
-The recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally.
The OpenRAG team recommends the OpenAI gpt-oss:20b lanuage model and the nomic-embed-text embedding model.
-However, gpt-oss:20b uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine.
+
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.
+However, it requires additional setup because Ollama isn't included with OpenRAG.
+You must deploy Ollama separately if you want to use Ollama as a model provider.
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
If you are running a remote server, it must be accessible from your OpenRAG deployment.
diff --git a/install-uvx/index.html b/install-uvx/index.html
index ac43ac51..3aaa9743 100644
--- a/install-uvx/index.html
+++ b/install-uvx/index.html
@@ -4,7 +4,7 @@
Invoke OpenRAG with uvx | OpenRAG
-
+
@@ -43,11 +43,33 @@ You must have access to at least one language model and one embedding model.
If a provider offers both types, you can use the same provider for both models.
If a provider offers only one type, you must select two providers.
Anthropic: Create an Anthropic API key.
-Anthropic provides language models only; you must select an additional provider for embeddings.
-
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
-
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use.
Anthropic: Create an Anthropic API key.
+Anthropic provides language models only; you must select an additional provider for embeddings.
+
+
+
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
+
+
+
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use.
+
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
+
@@ -275,9 +297,22 @@ Verify that the credentials are valid and have access to the selected model, and
Continue through the overview slides for a brief introduction to OpenRAG, or click Skip overview.
The overview demonstrates some basic functionality that is covered in the quickstart and in other parts of the OpenRAG documentation.
-
info
Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider.
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.
-The recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally.
The OpenRAG team recommends the OpenAI gpt-oss:20b lanuage model and the nomic-embed-text embedding model.
-However, gpt-oss:20b uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine.
+
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.
+However, it requires additional setup because Ollama isn't included with OpenRAG.
+You must deploy Ollama separately if you want to use Ollama as a model provider.
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
If you are running a remote server, it must be accessible from your OpenRAG deployment.
diff --git a/install-windows/index.html b/install-windows/index.html
index 5f97fd33..4bb7dfb5 100644
--- a/install-windows/index.html
+++ b/install-windows/index.html
@@ -4,7 +4,7 @@
Install OpenRAG on Microsoft Windows | OpenRAG
-
+
diff --git a/install/index.html b/install/index.html
index 949fa1bd..f7553962 100644
--- a/install/index.html
+++ b/install/index.html
@@ -4,7 +4,7 @@
Install OpenRAG with the automatic installer script | OpenRAG
-
+
@@ -32,11 +32,33 @@ You must have access to at least one language model and one embedding model.
If a provider offers both types, you can use the same provider for both models.
If a provider offers only one type, you must select two providers.
Anthropic: Create an Anthropic API key.
-Anthropic provides language models only; you must select an additional provider for embeddings.
-
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
-
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server, and then get your Ollama server's base URL and the names of the models that you want to use.
Anthropic: Create an Anthropic API key.
+Anthropic provides language models only; you must select an additional provider for embeddings.
+
+
+
IBM watsonx.ai: Get your watsonx.ai API endpoint, IBM project ID, and IBM API key from your watsonx deployment.
+
+
+
Ollama: Deploy an Ollama instance and models locally, in the cloud, or on a remote server. Then, get your Ollama server's base URL and the names of the models that you want to use.
+
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.
+
@@ -266,9 +288,22 @@ Verify that the credentials are valid and have access to the selected model, and
Continue through the overview slides for a brief introduction to OpenRAG, or click Skip overview.
The overview demonstrates some basic functionality that is covered in the quickstart and in other parts of the OpenRAG documentation.
-
info
Ollama isn't installed with OpenRAG. You must install it separately if you want to use Ollama as a model provider.
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models, but it can be advanced for new users.
-The recommendations given here are a reasonable starting point for users with at least one GPU and experience running LLMs locally.
The OpenRAG team recommends the OpenAI gpt-oss:20b lanuage model and the nomic-embed-text embedding model.
-However, gpt-oss:20b uses 16GB of RAM, so consider using Ollama Cloud or running Ollama on a remote machine.
+
Using Ollama as your language and embedding model provider offers greater flexibility and configuration options for hosting models.
+However, it requires additional setup because Ollama isn't included with OpenRAG.
+You must deploy Ollama separately if you want to use Ollama as a model provider.
info
OpenRAG isn't guaranteed to be compatible with all models that are available through Ollama.
+For example, some models might produce unexpected results, such as JSON-formatted output instead of natural language responses, and some models aren't appropriate for the types of tasks that OpenRAG performs, such as those that generate media.
+
The OpenRAG team recommends the following models when using Ollama as your model provider:
+
+
+
Language models: gpt-oss:20b or mistral-nemo:12b.
+
If you choose gpt-oss:20b, consider using Ollama Cloud or running Ollama on a remote machine because this model requires at least 16GB of RAM.
+
+
+
Embedding models: nomic-embed-text:latest, mxbai-embed-large:latest, or embeddinggemma:latest.
+
+
+
You can experiment with other models, but if you encounter issues that you are unable to resolve through other RAG best practices (like context filters and prompt engineering), try switching to one of the recommended models.
+You can submit an OpenRAG GitHub issue to request support for specific models.