1"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[6976],{927(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(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,r.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,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},5402(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",admonition:"admonition",em:"em",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.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:"Google"}),": Enter your ",(0,s.jsx)(n.strong,{children:"Google OAuth Client ID"})," and ",(0,s.jsx)(n.strong,{children:"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.p,{children:["Providing these Google credentials enables OAuth mode ",(0,s.jsx)(n.em,{children:"and"})," the Google Drive cloud storage connector."]}),"\n",(0,s.jsxs)(n.admonition,{type:"warning",children:[(0,s.jsx)(n.p,{children:"Google is the only supported OAuth provider for OpenRAG."}),(0,s.jsx)(n.p,{children:"You must enter Google credentials if you want to enable OAuth mode."}),(0,s.jsx)(n.p,{children:"The Microsoft and Amazon credentials are used only to authorize the cloud storage connectors.\nOpenRAG doesn't offer OAuth provider integrations for Microsoft or Amazon."})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Microsoft"}),": For the ",(0,s.jsx)(n.strong,{children:"Microsoft OAuth Client ID"})," and ",(0,s.jsx)(n.strong,{children:"Microsoft OAuth Client Secret"}),", enter ",(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.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Amazon"}),": Enter your ",(0,s.jsx)(n.strong,{children:"AWS Access Key ID"})," and ",(0,s.jsx)(n.strong,{children:"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"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},3059(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.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.\nSome 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.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"}),": Ollama-hosted language models must support tool calling to be compatible with OpenRAG.\nThe OpenRAG team recommends ",(0,s.jsx)(n.code,{children:"gpt-oss:20b"})," or ",(0,s.jsx)(n.code,{children:"mistral-nemo:12b"}),".\nIf 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"}),": The OpenRAG team recommends ",(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 a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},887(e,n,t){t.d(n,{Ay:()=>u,RM:()=>d});var s=t(4848),r=t(8453),o=t(9179),i=t(4865),a=t(9365),l=t(3059),c=t(6619);const d=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...c.RM,...l.RM];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.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.jsx)(n.p,{children:"To complete onboarding, you must configure at least one language model and one embedding model."}),"\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 select multiple embedding models."}),"\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:"Use environment API key"})," 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"]}),"\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",(0,s.jsx)(n.p,{children:"Language models must support tool calling to be compatible with OpenRAG.\nIncompatible models aren't listed."}),"\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-browse#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.jsxs)(a.A,{value:"IBM watsonx.ai",label:"IBM watsonx.ai",children:[(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(c.Ay,{})}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["For ",(0,s.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,s.jsxs)(n.p,{children:["You can enable ",(0,s.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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",(0,s.jsx)(n.p,{children:"Language models must support tool calling to be compatible with OpenRAG.\nIncompatible models aren't listed."}),"\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-browse#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.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)(l.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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select a language model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG only lists language models that support tool calling.\nIf your server isn't running any compatible language models, you must either deploy a compatible language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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-browse#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
1the 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:"Use environment API key"})," 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"]}),"\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",(0,s.jsx)(n.p,{children:"Language models must support tool calling to be compatible with OpenRAG.\nIncompatible models aren't listed."}),"\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-browse#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 u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},5176(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{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.\nIf you don't have GPU capabilities, OpenRAG provides an alternate CPU-only deployment that is suitable for most use cases.\nThe default CPU-only deployment doesn't prevent you from using GPU acceleration in external services, such as Ollama servers."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},4158(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.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 one or more supported model 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. Then, get your Ollama server's base URL and the names of the models that you want to use."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"OpenRAG requires at least one language model and one embedding model.\nIf a provider offers both types of models, then you can use the same provider for both models.\nIf a provider offers only one type, then you must configure two providers."}),"\n",(0,s.jsx)(n.p,{children:"Language models must support tool calling to be compatible with OpenRAG."}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"Complete the application onboarding process"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},4042(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,r.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."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},1133(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,r.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://docs.astral.sh/uv/getting-started/installation/",children:"uv"}),"."]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},6149(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",li:"li",ul:"ul",...(0,r.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,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},2061(e,n,t){t.d(n,{Ay:()=>l,RM:()=>i});var s=t(4848),r=t(8453),o=(t(4865),t(9365),t(5402));const i=[...o.RM];function a(e){const n={a:"a",admonition:"admonition",code:"code",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"The first time you install OpenRAG, the terminal session issues a series of prompts to guide you through the initial configuration."}),"\n",(0,s.jsxs)(n.p,{children:["If OpenRAG detects an existing OpenRAG ",(0,s.jsx)(n.code,{children:".env"})," file, you might need to select the ",(0,s.jsx)(n.strong,{children:"Reconfigure"})," option in the terminal to access the configuration settings."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Enter an administrator password for the OpenSearch service."}),"\n",(0,s.jsx)(n.p,{children:"This password is required, and a secure password is automatically generated if you don't provide one manually."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Enter an administrator password for the Langflow service."}),"\n",(0,s.jsxs)(n.p,{children:["This 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.jsxs)(n.p,{children:["At the ",(0,s.jsx)(n.strong,{children:"AI providers"})," prompt, you can either enter your model provider credentials now, or press ",(0,s.jsx)("kbd",{children:"Enter"})," to configure these options later during application onboarding."]}),"\n",(0,s.jsxs)(n.p,{children:["There is no material difference between providing these values n
1ow or during the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nIf you provide a credential now, it can be populated automatically during the application onboarding process if you enable the ",(0,s.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["At the ",(0,s.jsx)(n.strong,{children:"Langfuse tracing"})," prompt, enter ",(0,s.jsx)("kbd",{children:"Y"})," to enable the ",(0,s.jsx)(n.a,{href:"https://docs.langflow.org/integrations-langfuse",children:"Langflow integration with Langfuse"}),"; otherwise, enter ",(0,s.jsx)("kbd",{children:"N"}),".\nIf you enter ",(0,s.jsx)("kbd",{children:"Y"}),", provide the following Langfuse credentials:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Langfuse Secret Key"}),": A secret key for your Langfuse project."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Langfuse Public Key"}),": A public key for your Langfuse project."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Langfuse Host"}),": Required for self-hosted Langfuse deployments. Leave empty for Langfuse Cloud."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["At the ",(0,s.jsx)(n.strong,{children:"Documents path"})," prompt, accept the default ",(0,s.jsx)(n.a,{href:"/ingestion-configure#set-the-local-documents-path",children:"local documents path"}),", or provide a path to a directory where you want OpenRAG to look for documents to ingest into your ",(0,s.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["At the ",(0,s.jsx)(n.strong,{children:"Cloud connectors and advanced settings"})," prompt, enter ",(0,s.jsx)("kbd",{children:"Y"})," if you want to configure any of the following additional settings; otherwise, enter ",(0,s.jsx)("kbd",{children:"N"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsx)(n.p,{children:"You must configure advanced settings if you want to enable either OAuth mode or cloud storage connectors during initial set up:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"OAuth mode"}),": Controls document ownership and access in your OpenRAG ",(0,s.jsx)(n.a,{href:"/knowledge",children:"OpenSearch knowledge base"}),".\nWithout OAuth mode, there is no differentiation between users; all users that access your OpenRAG instance can access and manage all uploaded documents."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Cloud storage connectors"}),": Enables ingestion of documents from external storage services."]}),"\n"]}),(0,s.jsxs)(n.p,{children:["You can also ",(0,s.jsx)(n.a,{href:"/knowledge-connectors",children:"configure these connectors"})," later."]})]}),"\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:"OAuth mode and cloud storage connectors"}),": To configure one or more of these connectors, do the following:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Register OpenRAG as an OAuth application in your cloud provider, and then obtain the app's OAuth credentials, such as a client ID and secret key. To enable multiple connectors, you must register an app and generate credentials for each provider."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In your OpenRAG terminal session, enter the relevant ",(0,s.jsx)(n.a,{href:"/reference/configuration#oauth-and-cloud-storage-connector-settings",children:"OAuth credentials"})," for the cloud connector prompts:"]}),"\n",(0,s.jsx)(o.Ay,{}),"\n",(0,s.jsxs)(n.p,{children:["The credentials 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"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Register the redirect URIs shown in the terminal in your OAuth apps."}),"\n",(0,s.jsx)(n.p,{children:"The redirect URIs are used for the cloud storage connector webhooks. For Google, the redirect URIs are also used to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Webhook Base URL"}),": If you entered OAuth credentials, you can set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,s.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),". This option is required to enable automatic ingestion from cloud storage."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Use the default path, or specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Langflow Public URL"})," : Sets the base address to access the Langflow web interface where users interact with the Langflow editor in a browser. You must set this value if you want to run Langflow on a non-default port (",(0,s.jsx)(n.code,{children:"7860"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["At the ",(0,s.jsx)(n.code,{children:"Start services now?"})," prompt, press ",(0,s.jsx)("kbd",{children:"Y"})," to start the OpenRAG services."]}),"\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 terminal prints a confirmation message:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"Services are running.\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"OpenRAG .env file",type:"tip",children:(0,s.jsxs)(n.p,{children:["Your configuration and credentials 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:["If the OpenRAG app doesn't launch automatically, select the ",(0,s.jsx)(n.strong,{children:"Open OpenRAG in browser"})," option to launch the OpenRAG app and start the ",(0,s.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),".\nYou can also manually navigate to ",(0,s.jsx)(n.code,{children:"localhost:3000"})," in a browser."]}
1),"\n",(0,s.jsx)(n.p,{children:"If you provided Google OAuth credentials, you must sign in with Google before you are redirected to your OpenRAG instance."}),"\n"]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},7519(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={admonition:"admonition",code:"code",p:"p",...(0,r.R)(),...e.components};return(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["For a GUI terminal experience, use the ",(0,s.jsx)(n.code,{children:"--tui"})," flag when starting OpenRAG."]})})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},6619(e,n,t){t.d(n,{Ay:()=>a,RM:()=>o});var s=t(4848),r=t(8453);const o=[];function i(e){const n={a:"a",p:"p",...(0,r.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 IBM watsonx.ai."}),"\n",(0,s.jsx)(n.p,{children:"Language models must support tool calling to be compatible with OpenRAG.\nIncompatible models aren't listed in OpenRAG's settings or onboarding."}),"\n",(0,s.jsxs)(n.p,{children:["Additionally, models must be able to handle the agentic reasoning tasks required by OpenRAG.\nModels that are too small or not designed for agentic RAG tasks can return low quality, incorrect, or improperly formatted responses.\nFor more information, see ",(0,s.jsx)(n.a,{href:"/support/troubleshoot#chat-issues",children:"Chat issues"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You 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 a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},9081(e,n,t){t.r(n),t.d(n,{assets:()=>f,contentTitle:()=>g,default:()=>y,frontMatter:()=>x,metadata:()=>s,toc:()=>j});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 r=t(4848),o=t(8453),i=(t(4865),t(9365),t(887)),a=t(2061),l=(t(5402),t(4158)),c=t(1133),d=t(5176),h=t(6149),u=t(4042),p=t(927),m=(t(3059),t(6619),t(7519));const x={title:"Invoke OpenRAG with uvx",slug:"/install-uvx"},g=void 0,f={},j=[{value:"Prerequisites",id:"prerequisites",level:2},...h.RM,...u.RM,...c.RM,...l.RM,...d.RM,{value:"Install and run OpenRAG with uvx",id:"install-and-run-openrag-with-uvx",level:2},...m.RM,{value:"Configure OpenRAG in the terminal",id:"setup",level:2},...a.RM,...i.RM,...p.RM];function v(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,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#running-tools",children:(0,r.jsx)(n.code,{children:"uvx"})})," to invoke OpenRAG outside of a Python project or without modifying your project's dependencies."]}),"\n",(0,r.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,r.jsx)(n.a,{href:"/install-options",children:"Select an installation method"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,r.jsx)(n.code,{children:"uvx"}),", you will use an ",(0,r.jsx)(n.a,{href:"/tui",children:"OpenRAG terminal session"})," to configure and manage your OpenRAG deployment."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"uvx openrag"})," installs the latest version of OpenRAG and dependencies, like Docker or Podman, if they aren't already present in your environment."]})}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(h.Ay,{}),"\n",(0,r.jsx)(u.Ay,{}),"\n",(0,r.jsx)(c.Ay,{}),"\n",(0,r.jsx)(l.Ay,{}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsx)(n.h2,{id:"install-and-run-openrag-with-uvx",children:"Install and run OpenRAG with uvx"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Create a directory for your OpenRAG configuration files and data, and then change to that directory:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir openrag-workspace\ncd openrag-workspace\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: If you want to use a pre-populated ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]}),", create one at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"})," before invoking OpenRAG."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Invoke OpenRAG and install any missing dependencies:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"uvx --python 3.13 openrag\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can invoke a specific version using any of the ",(0,r.jsxs)(n.a,{href:"https://docs.astral.sh/uv/guides/tools/#requesting-specific-versions",children:[(0,r.jsx)(n.code,{children:"uvx"})," version specifiers"]}),", such as ",(0,r.jsx)(n.code,{children:"uvx --from openrag==0.1.30 openrag"}),"."]}),"\n",(0,r.jsx)(m.Ay,{}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If needed, respond to any prompts to install and configure dependencies like Docker or Podman."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The entire setup process can take a few minutes.\nOnce the environment is ready, the OpenRAG terminal session starts."}),"\n",(0,r.jsxs)(n.p,{children:["Invoking OpenRAG with ",(0,r.jsx)(n.code,{children:"uvx openrag"})," creates a cached, ephemeral environment for the terminal session in your local ",(0,r.jsx)(n.code,{children:"uv"}
1)," cache.\nYour OpenRAG configuration files and data are stored in ",(0,r.jsx)(n.code,{children:"~/.openrag"}),", which is separate from the ",(0,r.jsx)(n.code,{children:"uv"})," cache.\nClearing the ",(0,r.jsx)(n.code,{children:"uv"})," cache doesn't remove your entire OpenRAG installation; it only clears ",(0,r.jsx)(n.code,{children:"uv"})," dependencies.\nAfter clearing the cache, you can re-invoke OpenRAG (",(0,r.jsx)(n.code,{children:"uvx openrag"}),") to restart the terminal session with your preserved configuration and data."]}),"\n",(0,r.jsxs)(n.p,{children:["If you encounter errors during installation, see ",(0,r.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"setup",children:"Configure OpenRAG in the terminal"}),"\n",(0,r.jsxs)(n.p,{children:["When you install OpenRAG with ",(0,r.jsx)(n.code,{children:"uvx"}),", you manage the OpenRAG services in an OpenRAG terminal session.\nThe terminal session guides you through the initial configuration process before you start the OpenRAG services."]}),"\n",(0,r.jsxs)(n.p,{children:["Your configuration values are stored in an ",(0,r.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file"]})," that is created automatically at ",(0,r.jsx)(n.code,{children:"~/.openrag/tui"}),".\nIf OpenRAG detects an existing ",(0,r.jsx)(n.code,{children:".env"})," file in this directory, then OpenRAG can populate those values automatically during setup and onboarding."]}),"\n",(0,r.jsxs)(n.p,{children:["Container definitions are stored in the ",(0,r.jsx)(n.code,{children:"docker-compose"})," files in the same directory as the OpenRAG ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsx)(i.Ay,{}),"\n",(0,r.jsx)(p.Ay,{})]})}function y(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(v,{...e})}):v(e)}},9365(e,n,t){t.d(n,{A:()=>l});t(6540);var s=t(4164),r=t(7751);const o="tabItem_Ymn6";var i=t(4848);function a({children:e,className:n,hidden:t}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.A)(o,n),hidden:t,children:e})}function l({children:e,className:n,value:t}){const{selectedValue:s,lazy:o}=(0,r.uc)(),l=t===s;return!l&&o?null:(0,i.jsx)(a,{className:n,hidden:!l,children:e})}},4865(e,n,t){t.d(n,{A:()=>m});t(6540);var s=t(4164),r=t(7559),o=t(7751),i=t(3104),a=t(2303);const l="tabList__CuJ",c="tabItem_LNqP";var d=t(4848);function h({className:e}){const{selectedValue:n,selectValue:t,tabValues:r,block:a}=(0,o.uc)(),l=[],{blockElementScrollPositionUntilNextRender:h}=(0,i.a_)(),u=e=>{const s=e.currentTarget,o=l.indexOf(s),i=r[o].value;i!==n&&(h(s),t(i))},p=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":a},e),children:r.map(({value:e,label:t,attributes:r})=>(0,d.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{l.push(e)},onKeyDown:p,onClick:u,...r,className:(0,s.A)("tabs__item",c,r?.className,{"tabs__item--active":n===e}),children:t??e},e))})}function u({children:e}){return(0,d.jsx)("div",{className:"margin-top--md",children:e})}function p({className:e,children:n}){return(0,d.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",l),children:[(0,d.jsx)(h,{className:e}),(0,d.jsx)(u,{children:n})]})}function m(e){const n=(0,a.A)(),t=(0,o.OC)(e);return(0,d.jsx)(o.O_,{value:t,children:(0,d.jsx)(p,{className:e.className,children:(0,o.vT)(e.children)})},String(n))}},7751(e,n,t){t.d(n,{OC:()=>m,O_:()=>f,uc:()=>g,vT:()=>d});var s=t(6540),r=t(6347),o=t(205),i=t(7485),a=t(679),l=t(1682),c=t(4848);function d(e){return s.Children.toArray(e).filter(e=>"\n"!==e)}function h(e){const{values:n,children:t}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return s.Children.toArray(e).flatMap(e=>{if(!e)return[];if((0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return[e];
1const n="string"==typeof e.type?e.type:e.type.name;throw new Error(`Docusaurus error: Bad <Tabs> child <${n}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.\nIf you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:n,attributes:t,default:s}})=>({value:e,label:n,attributes:t,default:s}))}(t);return function(e){const n=(0,l.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 <Tabs>. Every value needs to be unique.`)}(e),e},[n,t])}function u({value:e,tabValues:n}){return n.some(n=>n.value===e)}function p({queryString:e=!1,groupId:n}){const t=(0,r.W6)(),o=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 <Tabs> 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,i.aZ)(o),(0,s.useCallback)(e=>{if(!o)return;const n=new URLSearchParams(t.location.search);n.set(o,e),t.replace({...t.location,search:n.toString()})},[o,t])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=h(e),[l,c]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!u({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> 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 t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i})),[d,m]=p({queryString:t,groupId:r}),[x,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,a.Dv)(n);return[t,(0,s.useCallback)(e=>{n&&r.set(e)},[n,r])]}({groupId:r}),f=(()=>{const e=d??x;return u({value:e,tabValues:i})?e:null})();(0,o.A)(()=>{f&&c(f)},[f]);return{selectedValue:l,selectValue:(0,s.useCallback)(e=>{if(!u({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),m(e),g(e)},[m,g,i]),tabValues:i,lazy:e.lazy??!1,block:e.block??!1}}const x=(0,s.createContext)(null);function g(){const e=s.useContext(x);if(!e)throw new Error("useTabsContext() must be used within a Tabs component");return e}function f(e){return(0,c.jsx)(x.Provider,{value:e.value,children:e.children})}},9179(e,n,t){t.d(n,{A:()=>o});t(6540);var s=t(1156),r=t(4848);function o({name:e,...n}){const t=s[e];return t?(0,r.jsx)(t,{...n}):null}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.